Førkalenderfargeendring
This commit is contained in:
parent
3b2d19bd0b
commit
71bfb191bc
6 changed files with 1379 additions and 420 deletions
|
|
@ -54,6 +54,9 @@ public class AuthRepository {
|
|||
// Lagre utvidet info i UserManager
|
||||
UserManager.getInstance().setExtendedUserInfo(fName, lName, stilling, mobil);
|
||||
|
||||
// Lagre listen over skrivbare kalendere
|
||||
UserManager.getInstance().setWriteableCalendars(response.body().writeableCalendars);
|
||||
|
||||
callback.onSuccess(role);
|
||||
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -82,6 +82,12 @@ public class CreateEventFragment extends Fragment {
|
|||
|
||||
btnSave = view.findViewById(R.id.btn_save_event);
|
||||
|
||||
// Initialiser tid (neste hele time)
|
||||
startCal.add(Calendar.HOUR_OF_DAY, 1);
|
||||
startCal.set(Calendar.MINUTE, 0);
|
||||
endCal.setTime(startCal.getTime());
|
||||
endCal.add(Calendar.HOUR_OF_DAY, 1);
|
||||
|
||||
setupCalendarSpinner();
|
||||
setupReminderChips();
|
||||
|
||||
|
|
@ -90,12 +96,6 @@ public class CreateEventFragment extends Fragment {
|
|||
eventToEdit = (CalendarEvent) getArguments().getSerializable("edit_event");
|
||||
prefillForm(eventToEdit);
|
||||
btnSave.setText("Oppdater Hendelse");
|
||||
} else {
|
||||
// Ny event: Standard tid (neste time)
|
||||
startCal.add(Calendar.HOUR_OF_DAY, 1);
|
||||
startCal.set(Calendar.MINUTE, 0);
|
||||
endCal.setTime(startCal.getTime());
|
||||
endCal.add(Calendar.HOUR_OF_DAY, 1);
|
||||
}
|
||||
|
||||
updateRecurrenceSpinner();
|
||||
|
|
@ -115,8 +115,8 @@ public class CreateEventFragment extends Fragment {
|
|||
spinnerRecurrence.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
// Unngå å overskrive ved innlasting
|
||||
if (eventToEdit != null && position == 0) return;
|
||||
// Unngå å overskrive ved innlasting hvis vi allerede har satt en verdi
|
||||
if (eventToEdit != null && position == 0 && selectedRRule != null) return;
|
||||
|
||||
String selected = parent.getItemAtPosition(position).toString();
|
||||
if (selected.equals("Egendefinert...")) {
|
||||
|
|
@ -152,10 +152,8 @@ public class CreateEventFragment extends Fragment {
|
|||
Date d = simpleFormat.parse(start);
|
||||
startCal.setTime(d);
|
||||
|
||||
// Sluttdato
|
||||
if (event.getRawEndDate() != null) {
|
||||
Date e = simpleFormat.parse(event.getRawEndDate());
|
||||
// Google sender sluttdato eksklusiv (dagen etter). Vi trekker fra 1 dag for visning.
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTime(e);
|
||||
c.add(Calendar.DAY_OF_MONTH, -1);
|
||||
|
|
@ -179,23 +177,15 @@ public class CreateEventFragment extends Fragment {
|
|||
}
|
||||
}
|
||||
|
||||
// Varsler - Finn tag i den rå beskrivelsen
|
||||
if (event.getDescription() != null) {
|
||||
Pattern p = Pattern.compile("#varsel:([\\d,]+)");
|
||||
Matcher m = p.matcher(event.getDescription());
|
||||
if (m.find()) {
|
||||
String[] parts = m.group(1).split(",");
|
||||
// Fjern alle sjekkmerker først
|
||||
for (int i = 0; i < chipGroupReminders.getChildCount(); i++) {
|
||||
((Chip) chipGroupReminders.getChildAt(i)).setChecked(false);
|
||||
}
|
||||
// Sett nye
|
||||
for (String part : parts) {
|
||||
try {
|
||||
int min = Integer.parseInt(part);
|
||||
checkChipByMinutes(min);
|
||||
} catch (NumberFormatException e) {}
|
||||
}
|
||||
// Varsler
|
||||
List<Integer> existingReminders = event.getReminders();
|
||||
if (!existingReminders.isEmpty()) {
|
||||
// Fjern alle sjekkmerker først (15 min er default checked)
|
||||
for (int i = 0; i < chipGroupReminders.getChildCount(); i++) {
|
||||
((Chip) chipGroupReminders.getChildAt(i)).setChecked(false);
|
||||
}
|
||||
for (int min : existingReminders) {
|
||||
checkChipByMinutes(min);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -214,13 +204,11 @@ public class CreateEventFragment extends Fragment {
|
|||
}
|
||||
|
||||
private void setupCalendarSpinner() {
|
||||
String[] calendars = {
|
||||
"Felles",
|
||||
"Administrasjonen",
|
||||
"Serviceavdelingen",
|
||||
"Automasjonsavdelingen",
|
||||
"Prosjektavdelingen"
|
||||
};
|
||||
// HENT DYNAMISK LISTE FRA USERMANAGER
|
||||
List<String> calendars = UserManager.getInstance().getWriteableCalendars();
|
||||
|
||||
if (calendars.isEmpty()) calendars.add("Felles");
|
||||
|
||||
spinnerCalendar.setAdapter(new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_dropdown_item, calendars));
|
||||
}
|
||||
|
||||
|
|
@ -236,7 +224,6 @@ public class CreateEventFragment extends Fragment {
|
|||
addChip("2 dager", 2880);
|
||||
addChip("1 uke", 10080);
|
||||
|
||||
// Marker 15 min som standard KUN for ny event
|
||||
if (eventToEdit == null) checkChipByMinutes(15);
|
||||
}
|
||||
|
||||
|
|
@ -474,15 +461,12 @@ public class CreateEventFragment extends Fragment {
|
|||
}
|
||||
}
|
||||
|
||||
// NY: Henter navnet på kalenderen direkte fra Spinneren
|
||||
private String getCalendarSlug() {
|
||||
int pos = spinnerCalendar.getSelectedItemPosition();
|
||||
switch (pos) {
|
||||
case 1: return "Administrasjonen";
|
||||
case 2: return "Serviceavdelingen";
|
||||
case 3: return "Automasjonsavdelingen";
|
||||
case 4: return "Prosjektavdelingen";
|
||||
default: return "Felles"; // case 0
|
||||
if (spinnerCalendar.getSelectedItem() != null) {
|
||||
return spinnerCalendar.getSelectedItem().toString();
|
||||
}
|
||||
return "Felles";
|
||||
}
|
||||
|
||||
private void submitEvent() {
|
||||
|
|
@ -508,14 +492,12 @@ public class CreateEventFragment extends Fragment {
|
|||
selectedRRule
|
||||
);
|
||||
|
||||
// HVIS VI REDIGERER, SETT ID
|
||||
if (eventToEdit != null) {
|
||||
req.id = eventToEdit.getId();
|
||||
}
|
||||
|
||||
Toast.makeText(getContext(), eventToEdit != null ? "Oppdaterer..." : "Oppretter...", Toast.LENGTH_SHORT).show();
|
||||
|
||||
// Velg riktig API-kall (Create vs Update)
|
||||
Call<JsonElement> call;
|
||||
if (eventToEdit != null) {
|
||||
call = RetrofitClient.getApiService().updateCalendarEvent(req);
|
||||
|
|
|
|||
|
|
@ -3,13 +3,11 @@ package com.kbs.kbsintranett;
|
|||
import android.Manifest;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.NonNull;
|
||||
|
|
@ -65,8 +63,11 @@ public class HomeFragment extends Fragment {
|
|||
profileBtn.setOnClickListener(v -> Navigation.findNavController(view).navigate(R.id.navigation_profile));
|
||||
}
|
||||
|
||||
// NY LOGIKK: Vis knapp hvis brukeren har tilgang til minst én kalender
|
||||
Button btnCreateEvent = view.findViewById(R.id.btn_create_event);
|
||||
if (UserManager.getInstance().isEditorOrAbove()) {
|
||||
List<String> writeable = UserManager.getInstance().getWriteableCalendars();
|
||||
|
||||
if (writeable != null && !writeable.isEmpty()) {
|
||||
btnCreateEvent.setVisibility(View.VISIBLE);
|
||||
btnCreateEvent.setOnClickListener(v -> {
|
||||
Navigation.findNavController(view).navigate(R.id.action_home_to_create_event);
|
||||
|
|
@ -160,7 +161,6 @@ public class HomeFragment extends Fragment {
|
|||
}));
|
||||
} else {
|
||||
List<CalendarEvent> errorList = new ArrayList<>();
|
||||
// FIKSET HER: La til "" som 5. argument (location)
|
||||
errorList.add(new CalendarEvent("Kunne ikke laste kalender", "Sjekk nettverk", "!", "OBS", ""));
|
||||
recyclerView.setAdapter(new CalendarAdapter(errorList, null));
|
||||
}
|
||||
|
|
@ -212,5 +212,4 @@ public class HomeFragment extends Fragment {
|
|||
.build();
|
||||
WorkManager.getInstance(requireContext()).enqueue(notifRequest);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -2,10 +2,10 @@
|
|||
package com.kbs.kbsintranett;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import java.util.List;
|
||||
|
||||
public class LoginResponse {
|
||||
public boolean success;
|
||||
|
||||
@SerializedName("full_cookie")
|
||||
public String fullCookie;
|
||||
|
||||
|
|
@ -14,19 +14,21 @@ public class LoginResponse {
|
|||
@SerializedName("user_id")
|
||||
public int userId;
|
||||
|
||||
// --- NYE FELTER ---
|
||||
@SerializedName("first_name")
|
||||
public String firstName;
|
||||
|
||||
@SerializedName("last_name")
|
||||
public String lastName;
|
||||
|
||||
@SerializedName("stilling") // Sjekk at JSON-nøkkelen fra WP matcher dette
|
||||
@SerializedName("stilling")
|
||||
public String stilling;
|
||||
|
||||
@SerializedName("mobiltelefon") // Sjekk at JSON-nøkkelen fra WP matcher dette
|
||||
@SerializedName("mobiltelefon")
|
||||
public String mobiltelefon;
|
||||
// ------------------
|
||||
|
||||
// NYTT FELT: Liste over kalendere brukeren kan skrive til
|
||||
@SerializedName("writeable_calendars")
|
||||
public List<String> writeableCalendars;
|
||||
|
||||
public String message;
|
||||
}
|
||||
|
|
@ -2,13 +2,14 @@
|
|||
package com.kbs.kbsintranett;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* UserManager fungerer som en global sesjon for appen.
|
||||
* Den holder på informasjon om innlogget bruker, rettigheter og autentiserings-cookie.
|
||||
*/
|
||||
public class UserManager {
|
||||
|
||||
private static UserManager instance;
|
||||
|
||||
// Google Data
|
||||
|
|
@ -22,15 +23,16 @@ public class UserManager {
|
|||
private String userRole;
|
||||
private String currentCookie;
|
||||
|
||||
// --- NYE FELTER ---
|
||||
// Extended Info
|
||||
private String firstName;
|
||||
private String lastName;
|
||||
private String stilling;
|
||||
private String mobiltelefon;
|
||||
|
||||
private UserManager() {
|
||||
// Initielt er ingen logget inn
|
||||
}
|
||||
// NYTT:
|
||||
private List<String> writeableCalendars = new ArrayList<>();
|
||||
|
||||
private UserManager() {}
|
||||
|
||||
public static synchronized UserManager getInstance() {
|
||||
if (instance == null) {
|
||||
|
|
@ -39,9 +41,6 @@ public class UserManager {
|
|||
return instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Kalles når Google-innlogging er vellykket.
|
||||
*/
|
||||
public void setUserData(String name, String email, String token, @Nullable String photoUrl) {
|
||||
this.userDisplayName = name;
|
||||
this.userEmail = email;
|
||||
|
|
@ -49,7 +48,6 @@ public class UserManager {
|
|||
this.photoUrl = photoUrl;
|
||||
}
|
||||
|
||||
// --- NY METODE FOR UTVIDET INFO ---
|
||||
public void setExtendedUserInfo(String firstName, String lastName, String stilling, String mobiltelefon) {
|
||||
this.firstName = firstName;
|
||||
this.lastName = lastName;
|
||||
|
|
@ -57,19 +55,17 @@ public class UserManager {
|
|||
this.mobiltelefon = mobiltelefon;
|
||||
}
|
||||
|
||||
public void setCookie(String cookie) {
|
||||
this.currentCookie = cookie;
|
||||
public void setWriteableCalendars(List<String> calendars) {
|
||||
this.writeableCalendars = calendars != null ? calendars : new ArrayList<>();
|
||||
}
|
||||
|
||||
public void setUserRole(String role) {
|
||||
this.userRole = role;
|
||||
public List<String> getWriteableCalendars() {
|
||||
return writeableCalendars;
|
||||
}
|
||||
|
||||
public void setUserId(int id) {
|
||||
this.userId = id;
|
||||
}
|
||||
|
||||
// ---------------- GETTERS ----------------
|
||||
public void setCookie(String cookie) { this.currentCookie = cookie; }
|
||||
public void setUserRole(String role) { this.userRole = role; }
|
||||
public void setUserId(int id) { this.userId = id; }
|
||||
|
||||
public String getUserDisplayName() { return userDisplayName != null ? userDisplayName : ""; }
|
||||
public String getUserEmail() { return userEmail != null ? userEmail : ""; }
|
||||
|
|
@ -78,31 +74,17 @@ public class UserManager {
|
|||
public String getCookie() { return currentCookie; }
|
||||
public String getUserRole() { return userRole != null ? userRole : "subscriber"; }
|
||||
public int getUserId() { return userId; }
|
||||
|
||||
// --- NYE GETTERS ---
|
||||
public String getFirstName() { return firstName != null ? firstName : ""; }
|
||||
public String getLastName() { return lastName != null ? lastName : ""; }
|
||||
public String getStilling() { return stilling != null ? stilling : ""; }
|
||||
public String getMobiltelefon() { return mobiltelefon != null ? mobiltelefon : ""; }
|
||||
|
||||
// ---------------- HJELPEMETODER ----------------
|
||||
|
||||
public boolean isLoggedIn() {
|
||||
return userEmail != null && !userEmail.isEmpty();
|
||||
}
|
||||
|
||||
public boolean isAdmin() {
|
||||
return "administrator".equalsIgnoreCase(userRole);
|
||||
}
|
||||
|
||||
public boolean isLoggedIn() { return userEmail != null && !userEmail.isEmpty(); }
|
||||
public boolean isAdmin() { return "administrator".equalsIgnoreCase(userRole); }
|
||||
public boolean isEditorOrAbove() {
|
||||
if (userRole == null) return false;
|
||||
return userRole.equalsIgnoreCase("administrator") || userRole.equalsIgnoreCase("editor");
|
||||
return userRole != null && (userRole.equalsIgnoreCase("administrator") || userRole.equalsIgnoreCase("editor"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Nullstiller alt. Kalles ved utlogging.
|
||||
*/
|
||||
public void logout() {
|
||||
userDisplayName = null;
|
||||
userEmail = null;
|
||||
|
|
@ -111,11 +93,10 @@ public class UserManager {
|
|||
userRole = null;
|
||||
currentCookie = null;
|
||||
userId = 0;
|
||||
|
||||
// Nullstill nye felter
|
||||
firstName = null;
|
||||
lastName = null;
|
||||
stilling = null;
|
||||
mobiltelefon = null;
|
||||
writeableCalendars.clear();
|
||||
}
|
||||
}
|
||||
1650
hele_prosjektet.txt
1650
hele_prosjektet.txt
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue