Før Oppgaver Steg 2
This commit is contained in:
parent
710a192951
commit
c81310f982
9 changed files with 301 additions and 147 deletions
|
|
@ -10,7 +10,6 @@ import android.widget.ImageView;
|
|||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
|
||||
|
|
@ -18,7 +17,6 @@ import java.util.List;
|
|||
|
||||
public class HomeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
|
||||
public static final int TYPE_HEADER = 0;
|
||||
public static final int TYPE_CREATE_BUTTON = 1;
|
||||
public static final int TYPE_SECTION_TITLE = 2;
|
||||
public static final int TYPE_CALENDAR_ITEM = 3;
|
||||
|
|
@ -44,7 +42,6 @@ public class HomeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
Object item = items.get(position);
|
||||
if (item instanceof HeaderItem) return TYPE_HEADER;
|
||||
if (item instanceof CreateButtonItem) return TYPE_CREATE_BUTTON;
|
||||
if (item instanceof SectionTitleItem) return TYPE_SECTION_TITLE;
|
||||
if (item instanceof CalendarEvent) return TYPE_CALENDAR_ITEM;
|
||||
|
|
@ -57,8 +54,6 @@ public class HomeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
|
||||
switch (viewType) {
|
||||
case TYPE_HEADER:
|
||||
return new HeaderViewHolder(inflater.inflate(R.layout.item_home_header, parent, false));
|
||||
case TYPE_CREATE_BUTTON:
|
||||
return new CreateButtonViewHolder(inflater.inflate(R.layout.item_home_create_btn, parent, false));
|
||||
case TYPE_SECTION_TITLE:
|
||||
|
|
@ -76,10 +71,7 @@ public class HomeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||
Object item = items.get(position);
|
||||
|
||||
if (holder instanceof HeaderViewHolder) {
|
||||
((HeaderViewHolder) holder).btnProfile.setOnClickListener(v -> listener.onProfileClick());
|
||||
}
|
||||
else if (holder instanceof CreateButtonViewHolder) {
|
||||
if (holder instanceof CreateButtonViewHolder) {
|
||||
((CreateButtonViewHolder) holder).btnCreate.setOnClickListener(v -> listener.onCreateEventClick());
|
||||
}
|
||||
else if (holder instanceof SectionTitleViewHolder) {
|
||||
|
|
@ -138,11 +130,6 @@ public class HomeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|||
|
||||
// --- VIEW HOLDERS ---
|
||||
|
||||
static class HeaderViewHolder extends RecyclerView.ViewHolder {
|
||||
ImageView btnProfile;
|
||||
HeaderViewHolder(View v) { super(v); btnProfile = v.findViewById(R.id.btn_profile); }
|
||||
}
|
||||
|
||||
static class CreateButtonViewHolder extends RecyclerView.ViewHolder {
|
||||
Button btnCreate;
|
||||
CreateButtonViewHolder(View v) { super(v); btnCreate = v.findViewById(R.id.btn_create_event); }
|
||||
|
|
@ -179,8 +166,7 @@ public class HomeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
|||
}
|
||||
}
|
||||
|
||||
// --- WRAPPER KLASSER FOR FLATE LISTER ---
|
||||
public static class HeaderItem {}
|
||||
// --- WRAPPER KLASSER ---
|
||||
public static class CreateButtonItem {}
|
||||
public static class SectionTitleItem {
|
||||
String title; boolean isCalendar;
|
||||
|
|
|
|||
|
|
@ -173,15 +173,12 @@ public class HomeFragment extends Fragment implements HomeAdapter.OnHomeClickLis
|
|||
private void buildAndDisplayList() {
|
||||
List<Object> items = new ArrayList<>();
|
||||
|
||||
// 1. Header
|
||||
items.add(new HomeAdapter.HeaderItem());
|
||||
|
||||
// 2. Create Event Knapp (hvis tilgang)
|
||||
// 1. Create Event Knapp (hvis tilgang)
|
||||
if (!UserManager.getInstance().getWriteableCalendars().isEmpty()) {
|
||||
items.add(new HomeAdapter.CreateButtonItem());
|
||||
}
|
||||
|
||||
// 3. Kalender Seksjon
|
||||
// 2. Kalender Seksjon (Redusert til 3 hendelser som avtalt)
|
||||
items.add(new HomeAdapter.SectionTitleItem("Kommende hendelser", true));
|
||||
String today = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date());
|
||||
int count = 0;
|
||||
|
|
@ -193,7 +190,7 @@ public class HomeFragment extends Fragment implements HomeAdapter.OnHomeClickLis
|
|||
if (count >= 3) break;
|
||||
}
|
||||
|
||||
// 4. Nyheter Seksjon
|
||||
// 3. Nyheter Seksjon
|
||||
items.add(new HomeAdapter.SectionTitleItem("Siste nytt", false));
|
||||
items.addAll(currentNews);
|
||||
|
||||
|
|
@ -201,12 +198,23 @@ public class HomeFragment extends Fragment implements HomeAdapter.OnHomeClickLis
|
|||
recyclerView.setAdapter(adapter);
|
||||
}
|
||||
|
||||
// --- KLIKKHÅNDTERING (Implementert fra HomeAdapter.OnHomeClickListener) ---
|
||||
// --- KLIKKHÅNDTERING ---
|
||||
|
||||
@Override public void onProfileClick() { Navigation.findNavController(getView()).navigate(R.id.navigation_profile); }
|
||||
@Override public void onCreateEventClick() { Navigation.findNavController(getView()).navigate(R.id.action_home_to_create_event); }
|
||||
@Override public void onViewAllCalendarClick() { Navigation.findNavController(getView()).navigate(R.id.action_home_to_calendarFull); }
|
||||
@Override public void onViewAllNewsClick() { Navigation.findNavController(getView()).navigate(R.id.action_home_to_newsFull); }
|
||||
@Override public void onProfileClick() {
|
||||
Navigation.findNavController(getView()).navigate(R.id.navigation_profile);
|
||||
}
|
||||
|
||||
@Override public void onCreateEventClick() {
|
||||
Navigation.findNavController(getView()).navigate(R.id.action_home_to_create_event);
|
||||
}
|
||||
|
||||
@Override public void onViewAllCalendarClick() {
|
||||
Navigation.findNavController(getView()).navigate(R.id.action_home_to_calendarFull);
|
||||
}
|
||||
|
||||
@Override public void onViewAllNewsClick() {
|
||||
Navigation.findNavController(getView()).navigate(R.id.action_home_to_newsFull);
|
||||
}
|
||||
|
||||
@Override public void onCalendarItemClick(CalendarEvent event) {
|
||||
CalendarDetailsBottomSheet sheet = new CalendarDetailsBottomSheet(event);
|
||||
|
|
|
|||
|
|
@ -13,28 +13,34 @@ import android.os.Bundle;
|
|||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.view.GravityCompat;
|
||||
import androidx.drawerlayout.widget.DrawerLayout;
|
||||
import androidx.navigation.NavController;
|
||||
import androidx.navigation.fragment.NavHostFragment;
|
||||
import androidx.navigation.ui.AppBarConfiguration;
|
||||
import androidx.navigation.ui.NavigationUI;
|
||||
|
||||
import com.google.android.gms.auth.api.signin.GoogleSignIn;
|
||||
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
|
||||
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
|
||||
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
|
||||
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
||||
import com.google.android.material.navigation.NavigationView;
|
||||
|
||||
public class MainActivity extends AppCompatActivity {
|
||||
|
||||
public static final String GOOGLE_WEB_CLIENT_ID = BuildConfig.WEB_CLIENT_ID;
|
||||
|
||||
private static final String TAG = "MainActivity";
|
||||
|
||||
private NavController navController;
|
||||
private BottomNavigationView bottomNav;
|
||||
private DrawerLayout drawerLayout;
|
||||
private AppBarConfiguration appBarConfiguration;
|
||||
|
||||
private ActivityResultLauncher<String> requestPermissionLauncher;
|
||||
|
||||
|
|
@ -43,112 +49,103 @@ public class MainActivity extends AppCompatActivity {
|
|||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
|
||||
// --- 1. SETUP UI & NAVIGASJON ---
|
||||
bottomNav = findViewById(R.id.bottom_nav_view);
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
drawerLayout = findViewById(R.id.drawer_layout);
|
||||
NavigationView navigationView = findViewById(R.id.nav_view);
|
||||
|
||||
NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager()
|
||||
.findFragmentById(R.id.nav_host_fragment);
|
||||
|
||||
if (navHostFragment != null) {
|
||||
navController = navHostFragment.getNavController();
|
||||
if (bottomNav != null) {
|
||||
NavigationUI.setupWithNavController(bottomNav, navController);
|
||||
|
||||
// Håndter "Reselection" (Klikk på fanen man allerede er i)
|
||||
bottomNav.setOnItemReselectedListener(item -> {
|
||||
navController.popBackStack(item.getItemId(), false);
|
||||
});
|
||||
}
|
||||
appBarConfiguration = new AppBarConfiguration.Builder(
|
||||
R.id.navigation_home, R.id.navigation_calendar_full, R.id.navigation_tasks,
|
||||
R.id.navigation_forms, R.id.navigation_news_full, R.id.navigation_handbook)
|
||||
.setOpenableLayout(drawerLayout)
|
||||
.build();
|
||||
|
||||
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
|
||||
NavigationUI.setupWithNavController(navigationView, navController);
|
||||
|
||||
// Skjul meny på login-skjerm
|
||||
navController.addOnDestinationChangedListener((controller, destination, arguments) -> {
|
||||
if (bottomNav == null) return;
|
||||
|
||||
if (destination.getId() == R.id.navigation_login) {
|
||||
bottomNav.setVisibility(View.GONE);
|
||||
toolbar.setVisibility(View.GONE);
|
||||
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
|
||||
} else {
|
||||
bottomNav.setVisibility(View.VISIBLE);
|
||||
toolbar.setVisibility(View.VISIBLE);
|
||||
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// --- 2. VARSLINGSOPPSETT ---
|
||||
updateNavHeader(navigationView);
|
||||
createNotificationChannel();
|
||||
|
||||
requestPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
|
||||
if (isGranted) {
|
||||
Log.d(TAG, "Varslingstillatelse gitt!");
|
||||
} else {
|
||||
Log.e(TAG, "Varslingstillatelse avslått.");
|
||||
}
|
||||
});
|
||||
|
||||
requestPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {});
|
||||
checkNotificationPermission();
|
||||
checkExactAlarmPermission();
|
||||
|
||||
// GAMMEL METODE FJERNET HERFRA (NotificationWorker)
|
||||
|
||||
// --- 3. AUTENTISERING ---
|
||||
checkLoginState();
|
||||
}
|
||||
|
||||
private void updateNavHeader(NavigationView navigationView) {
|
||||
View headerView = navigationView.getHeaderView(0);
|
||||
TextView name = headerView.findViewById(R.id.nav_header_name);
|
||||
TextView email = headerView.findViewById(R.id.nav_header_email);
|
||||
|
||||
new android.os.Handler().postDelayed(() -> {
|
||||
UserManager user = UserManager.getInstance();
|
||||
if (user.isLoggedIn()) {
|
||||
name.setText(user.getUserDisplayName());
|
||||
email.setText(user.getUserEmail());
|
||||
}
|
||||
}, 2000);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onSupportNavigateUp() {
|
||||
return NavigationUI.navigateUp(navController, appBarConfiguration) || super.onSupportNavigateUp();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (drawerLayout != null && drawerLayout.isDrawerOpen(GravityCompat.START)) {
|
||||
drawerLayout.closeDrawer(GravityCompat.START);
|
||||
} else {
|
||||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
private void checkLoginState() {
|
||||
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
|
||||
if (account == null) {
|
||||
navigateToLogin();
|
||||
} else {
|
||||
refreshGoogleToken();
|
||||
}
|
||||
if (account == null) navigateToLogin();
|
||||
else refreshGoogleToken();
|
||||
}
|
||||
|
||||
private void refreshGoogleToken() {
|
||||
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
|
||||
.requestIdToken(GOOGLE_WEB_CLIENT_ID)
|
||||
.requestEmail()
|
||||
.build();
|
||||
.requestIdToken(GOOGLE_WEB_CLIENT_ID).requestEmail().build();
|
||||
GoogleSignInClient client = GoogleSignIn.getClient(this, gso);
|
||||
|
||||
client.silentSignIn()
|
||||
.addOnSuccessListener(account -> {
|
||||
String photoUrl = (account.getPhotoUrl() != null) ? account.getPhotoUrl().toString() : null;
|
||||
|
||||
AuthRepository.loginToWordPress(
|
||||
account.getIdToken(),
|
||||
account.getDisplayName(),
|
||||
account.getEmail(),
|
||||
photoUrl,
|
||||
client.silentSignIn().addOnSuccessListener(account -> {
|
||||
AuthRepository.loginToWordPress(account.getIdToken(), account.getDisplayName(), account.getEmail(),
|
||||
(account.getPhotoUrl() != null ? account.getPhotoUrl().toString() : null),
|
||||
new AuthRepository.AuthCallback() {
|
||||
@Override
|
||||
public void onSuccess(String role) {
|
||||
Log.d(TAG, "Silent login fullført. Rolle: " + role);
|
||||
if (navController != null && navController.getCurrentDestination() != null &&
|
||||
navController.getCurrentDestination().getId() == R.id.navigation_login) {
|
||||
@Override public void onSuccess(String role) {
|
||||
if (navController.getCurrentDestination().getId() == R.id.navigation_login) {
|
||||
navController.navigate(R.id.action_login_to_home);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String message) {
|
||||
Log.e(TAG, "Silent login feilet mot WP: " + message);
|
||||
navigateToLogin();
|
||||
}
|
||||
}
|
||||
);
|
||||
})
|
||||
.addOnFailureListener(e -> {
|
||||
Log.e(TAG, "Silent Sign-In feilet mot Google", e);
|
||||
navigateToLogin();
|
||||
@Override public void onError(String message) { navigateToLogin(); }
|
||||
});
|
||||
}).addOnFailureListener(e -> navigateToLogin());
|
||||
}
|
||||
|
||||
private void navigateToLogin() {
|
||||
if (navController != null) {
|
||||
if (navController.getCurrentDestination() != null &&
|
||||
navController.getCurrentDestination().getId() != R.id.navigation_login) {
|
||||
if (navController.getCurrentDestination().getId() != R.id.navigation_login) {
|
||||
navController.navigate(R.id.navigation_login);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void createNotificationChannel() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
|
|
@ -176,16 +173,9 @@ public class MainActivity extends AppCompatActivity {
|
|||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
|
||||
if (alarmManager != null && !alarmManager.canScheduleExactAlarms()) {
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle("Varslingstillatelse kreves")
|
||||
.setMessage("For at kalenderen skal kunne varsle deg nøyaktig når et møte starter, må du gi appen tilgang til å sette alarmer.")
|
||||
.setPositiveButton("Gå til Innstillinger", (dialog, which) -> {
|
||||
Intent intent = new Intent(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM);
|
||||
intent.setData(Uri.parse("package:" + getPackageName()));
|
||||
startActivity(intent);
|
||||
})
|
||||
.setNegativeButton("Senere", null)
|
||||
.show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
33
app/src/main/java/com/kbs/kbsintranett/TaskItem.java
Normal file
33
app/src/main/java/com/kbs/kbsintranett/TaskItem.java
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
package com.kbs.kbsintranett;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.UUID;
|
||||
|
||||
public class TaskItem implements Serializable {
|
||||
private String id;
|
||||
private String title;
|
||||
private String description;
|
||||
private long dueDate;
|
||||
private boolean isCompleted;
|
||||
private String assignedToEmail;
|
||||
private String createdByEmail;
|
||||
|
||||
public TaskItem(String title, String description, long dueDate, String assignedToEmail) {
|
||||
this.id = UUID.randomUUID().toString();
|
||||
this.title = title;
|
||||
this.description = description;
|
||||
this.dueDate = dueDate;
|
||||
this.assignedToEmail = assignedToEmail;
|
||||
this.createdByEmail = UserManager.getInstance().getUserEmail();
|
||||
this.isCompleted = false;
|
||||
}
|
||||
|
||||
// Getters og Setters
|
||||
public String getId() { return id; }
|
||||
public String getTitle() { return title; }
|
||||
public String getDescription() { return description; }
|
||||
public long getDueDate() { return dueDate; }
|
||||
public boolean isCompleted() { return isCompleted; }
|
||||
public void setCompleted(boolean completed) { isCompleted = completed; }
|
||||
public String getAssignedToEmail() { return assignedToEmail; }
|
||||
}
|
||||
49
app/src/main/java/com/kbs/kbsintranett/TasksFragment.java
Normal file
49
app/src/main/java/com/kbs/kbsintranett/TasksFragment.java
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
package com.kbs.kbsintranett;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Toast;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class TasksFragment extends Fragment {
|
||||
|
||||
private RecyclerView recyclerView;
|
||||
private List<TaskItem> taskList = new ArrayList<>();
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_tasks, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
recyclerView = view.findViewById(R.id.recycler_tasks);
|
||||
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
|
||||
|
||||
FloatingActionButton fab = view.findViewById(R.id.fab_add_task);
|
||||
fab.setOnClickListener(v -> {
|
||||
Toast.makeText(getContext(), "Ny oppgave-funksjon kommer her", Toast.LENGTH_SHORT).show();
|
||||
});
|
||||
|
||||
loadTasks();
|
||||
}
|
||||
|
||||
private void loadTasks() {
|
||||
// Dummy data
|
||||
taskList.clear();
|
||||
taskList.add(new TaskItem("Husk å sjekke filter", "Serviceoppdrag hos kunde X", System.currentTimeMillis(), "meg@kbs.no"));
|
||||
// Her vil vi senere koble på en TaskAdapter
|
||||
}
|
||||
}
|
||||
|
|
@ -1,12 +1,27 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
<androidx.drawerlayout.widget.DrawerLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/drawer_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="true"
|
||||
tools:context=".MainActivity">
|
||||
tools:openDrawer="start">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:background="@color/white"
|
||||
android:elevation="4dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent" />
|
||||
|
||||
<androidx.fragment.app.FragmentContainerView
|
||||
android:id="@+id/nav_host_fragment"
|
||||
|
|
@ -15,19 +30,20 @@
|
|||
android:layout_height="0dp"
|
||||
app:defaultNavHost="true"
|
||||
app:navGraph="@navigation/mobile_navigation"
|
||||
app:layout_constraintBottom_toTopOf="@id/bottom_nav_view"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.google.android.material.bottomnavigation.BottomNavigationView
|
||||
android:id="@+id/bottom_nav_view"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?android:attr/windowBackground"
|
||||
app:menu="@menu/bottom_nav_menu"
|
||||
app:layout_constraintTop_toBottomOf="@id/toolbar"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<com.google.android.material.navigation.NavigationView
|
||||
android:id="@+id/nav_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="start"
|
||||
android:fitsSystemWindows="true"
|
||||
app:headerLayout="@layout/nav_header_main"
|
||||
app:menu="@menu/drawer_menu" />
|
||||
|
||||
</androidx.drawerlayout.widget.DrawerLayout>
|
||||
26
app/src/main/res/layout/fragment_tasks.xml
Normal file
26
app/src/main/res/layout/fragment_tasks.xml
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/kbs_very_light_blue">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recycler_tasks"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="8dp"
|
||||
android:clipToPadding="false" />
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/fab_add_task"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|end"
|
||||
android:layout_margin="24dp"
|
||||
android:src="@android:drawable/ic_input_add"
|
||||
app:backgroundTint="@color/kbs_logo_blue"
|
||||
app:tint="@color/white"
|
||||
android:contentDescription="Legg til oppgave" />
|
||||
|
||||
</FrameLayout>
|
||||
33
app/src/main/res/layout/nav_header_main.xml
Normal file
33
app/src/main/res/layout/nav_header_main.xml
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="176dp"
|
||||
android:background="@color/kbs_logo_blue"
|
||||
android:gravity="bottom"
|
||||
android:orientation="vertical"
|
||||
android:padding="16dp"
|
||||
android:theme="@style/ThemeOverlay.AppCompat.Dark">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/nav_header_image"
|
||||
android:layout_width="64dp"
|
||||
android:layout_height="64dp"
|
||||
android:paddingTop="8dp"
|
||||
android:src="@mipmap/ic_launcher_round" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/nav_header_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="8dp"
|
||||
android:text="KBS Intranett"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/nav_header_email"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="intranett@kbs.no" />
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -5,6 +5,7 @@
|
|||
android:id="@+id/mobile_navigation"
|
||||
app:startDestination="@+id/navigation_home">
|
||||
|
||||
<!-- LOGIN -->
|
||||
<fragment
|
||||
android:id="@+id/navigation_login"
|
||||
android:name="com.kbs.kbsintranett.LoginFragment"
|
||||
|
|
@ -17,10 +18,11 @@
|
|||
app:popUpToInclusive="true" />
|
||||
</fragment>
|
||||
|
||||
<!-- HJEM -->
|
||||
<fragment
|
||||
android:id="@+id/navigation_home"
|
||||
android:name="com.kbs.kbsintranett.HomeFragment"
|
||||
android:label="Hjem"
|
||||
android:label="KBS Intranett"
|
||||
tools:layout="@layout/fragment_home">
|
||||
<action
|
||||
android:id="@+id/action_home_to_calendarFull"
|
||||
|
|
@ -31,25 +33,35 @@
|
|||
<action
|
||||
android:id="@+id/action_home_to_newsDetail"
|
||||
app:destination="@id/navigation_news_detail" />
|
||||
<!-- HER ER DEN MANGLENDE LINKEN: -->
|
||||
<action
|
||||
android:id="@+id/action_home_to_create_event"
|
||||
app:destination="@id/navigation_create_event" />
|
||||
<action
|
||||
android:id="@+id/action_home_to_tasks"
|
||||
app:destination="@id/navigation_tasks" />
|
||||
</fragment>
|
||||
|
||||
<!-- NYTT FRAGMENT: Opprett hendelse -->
|
||||
<!-- OPPGAVER (NYTT) -->
|
||||
<fragment
|
||||
android:id="@+id/navigation_create_event"
|
||||
android:name="com.kbs.kbsintranett.CreateEventFragment"
|
||||
android:label="Ny Hendelse"
|
||||
tools:layout="@layout/fragment_create_event" />
|
||||
android:id="@+id/navigation_tasks"
|
||||
android:name="com.kbs.kbsintranett.TasksFragment"
|
||||
android:label="Oppgaver"
|
||||
tools:layout="@layout/fragment_tasks" />
|
||||
|
||||
<!-- KALENDER -->
|
||||
<fragment
|
||||
android:id="@+id/navigation_calendar_full"
|
||||
android:name="com.kbs.kbsintranett.CalendarFullFragment"
|
||||
android:label="Kalender"
|
||||
tools:layout="@layout/fragment_calendar_full" />
|
||||
|
||||
<fragment
|
||||
android:id="@+id/navigation_create_event"
|
||||
android:name="com.kbs.kbsintranett.CreateEventFragment"
|
||||
android:label="Ny Hendelse"
|
||||
tools:layout="@layout/fragment_create_event" />
|
||||
|
||||
<!-- NYHETER -->
|
||||
<fragment
|
||||
android:id="@+id/navigation_news_full"
|
||||
android:name="com.kbs.kbsintranett.NewsFullFragment"
|
||||
|
|
@ -66,6 +78,7 @@
|
|||
android:label="Nyhet"
|
||||
tools:layout="@layout/fragment_news_detail" />
|
||||
|
||||
<!-- SKJEMAER -->
|
||||
<fragment
|
||||
android:id="@+id/navigation_forms"
|
||||
android:name="com.kbs.kbsintranett.FormsListFragment"
|
||||
|
|
@ -83,10 +96,11 @@
|
|||
tools:layout="@layout/fragment_forms">
|
||||
<argument
|
||||
android:name="formId"
|
||||
app:argType="integer"
|
||||
android:defaultValue="0" />
|
||||
android:defaultValue="0"
|
||||
app:argType="integer" />
|
||||
</fragment>
|
||||
|
||||
<!-- HÅNDBOK -->
|
||||
<fragment
|
||||
android:id="@+id/navigation_handbook"
|
||||
android:name="com.kbs.kbsintranett.HandbookFragment"
|
||||
|
|
@ -100,7 +114,7 @@
|
|||
<fragment
|
||||
android:id="@+id/navigation_handbook_detail"
|
||||
android:name="com.kbs.kbsintranett.HandbookDetailFragment"
|
||||
android:label="Håndbok Detaljer"
|
||||
android:label="Detaljer"
|
||||
tools:layout="@layout/fragment_handbook_detail">
|
||||
<argument
|
||||
android:name="page_id"
|
||||
|
|
@ -108,16 +122,15 @@
|
|||
<argument
|
||||
android:name="page_title"
|
||||
app:argType="string" />
|
||||
|
||||
<action
|
||||
android:id="@+id/action_handbook_to_detail"
|
||||
app:destination="@id/navigation_handbook_detail" />
|
||||
|
||||
<action
|
||||
android:id="@+id/action_handbook_to_form"
|
||||
app:destination="@id/navigation_forms_detail" />
|
||||
</fragment>
|
||||
|
||||
<!-- PROFIL -->
|
||||
<fragment
|
||||
android:id="@+id/navigation_profile"
|
||||
android:name="com.kbs.kbsintranett.ProfileFragment"
|
||||
|
|
|
|||
Loading…
Reference in a new issue