Før endring fra textview til webview i nyheter
This commit is contained in:
parent
71bfb191bc
commit
530a5a3d16
7 changed files with 88 additions and 30 deletions
|
|
@ -1,8 +1,11 @@
|
|||
package com.kbs.kbsintranett;
|
||||
|
||||
import android.content.res.ColorStateList;
|
||||
import android.graphics.Color;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
|
@ -17,7 +20,6 @@ public class CalendarAdapter extends RecyclerView.Adapter<CalendarAdapter.ViewHo
|
|||
void onItemClick(CalendarEvent event);
|
||||
}
|
||||
|
||||
// Oppdatert konstruktør som tar imot en listener
|
||||
public CalendarAdapter(List<CalendarEvent> events, OnItemClickListener listener) {
|
||||
this.events = events;
|
||||
this.listener = listener;
|
||||
|
|
@ -38,6 +40,15 @@ public class CalendarAdapter extends RecyclerView.Adapter<CalendarAdapter.ViewHo
|
|||
holder.time.setText(event.getTime());
|
||||
holder.title.setText(event.getTitle());
|
||||
|
||||
// NYTT: Sett farge på datoboksen
|
||||
try {
|
||||
int color = Color.parseColor(event.getCalendarColor());
|
||||
holder.dateBox.setBackgroundTintList(ColorStateList.valueOf(color));
|
||||
} catch (Exception e) {
|
||||
// Fallback til standard blå hvis fargekoden er ugyldig
|
||||
holder.dateBox.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#0069B3")));
|
||||
}
|
||||
|
||||
holder.itemView.setOnClickListener(v -> {
|
||||
if (listener != null) {
|
||||
listener.onItemClick(event);
|
||||
|
|
@ -52,6 +63,7 @@ public class CalendarAdapter extends RecyclerView.Adapter<CalendarAdapter.ViewHo
|
|||
|
||||
public static class ViewHolder extends RecyclerView.ViewHolder {
|
||||
TextView day, month, title, time;
|
||||
LinearLayout dateBox; // NYTT
|
||||
|
||||
public ViewHolder(View view) {
|
||||
super(view);
|
||||
|
|
@ -59,6 +71,7 @@ public class CalendarAdapter extends RecyclerView.Adapter<CalendarAdapter.ViewHo
|
|||
month = view.findViewById(R.id.cal_month);
|
||||
title = view.findViewById(R.id.cal_title);
|
||||
time = view.findViewById(R.id.cal_time);
|
||||
dateBox = view.findViewById(R.id.date_box_background); // NYTT
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
package com.kbs.kbsintranett;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.text.Html;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
|
|
@ -39,6 +41,8 @@ public class CalendarDetailsBottomSheet extends BottomSheetDialogFragment {
|
|||
TextView time = view.findViewById(R.id.sheet_time);
|
||||
TextView desc = view.findViewById(R.id.sheet_desc);
|
||||
TextView loc = view.findViewById(R.id.sheet_location);
|
||||
TextView calName = view.findViewById(R.id.sheet_calendar_name); // NYTT
|
||||
|
||||
LinearLayout adminLayout = view.findViewById(R.id.layout_admin_buttons);
|
||||
Button btnDelete = view.findViewById(R.id.btn_delete);
|
||||
Button btnEdit = view.findViewById(R.id.btn_edit);
|
||||
|
|
@ -46,8 +50,14 @@ public class CalendarDetailsBottomSheet extends BottomSheetDialogFragment {
|
|||
title.setText(event.getTitle());
|
||||
time.setText(event.getTime() + " (" + event.getDay() + ". " + event.getMonth() + ")");
|
||||
|
||||
// NYTT: Sett navn og farge
|
||||
calName.setText(event.getCalendarName().toUpperCase());
|
||||
try {
|
||||
int color = Color.parseColor(event.getCalendarColor());
|
||||
calName.setBackgroundTintList(ColorStateList.valueOf(color));
|
||||
} catch (Exception e) {}
|
||||
|
||||
if (!event.getDescription().isEmpty()) {
|
||||
// Skjul #varsel-taggen for visning
|
||||
String cleanDesc = event.getDescription().replaceAll("#varsel:[\\d,]+", "").trim();
|
||||
desc.setText(Html.fromHtml(cleanDesc, Html.FROM_HTML_MODE_COMPACT));
|
||||
desc.setVisibility(View.VISIBLE);
|
||||
|
|
@ -65,18 +75,28 @@ public class CalendarDetailsBottomSheet extends BottomSheetDialogFragment {
|
|||
|
||||
// Sjekk admin-rettigheter
|
||||
if (UserManager.getInstance().isEditorOrAbove()) {
|
||||
adminLayout.setVisibility(View.VISIBLE);
|
||||
// MERK: Selv om man er admin, bør man kanskje bare kunne slette/endre events fra kalendere
|
||||
// man faktisk har skrivetilgang til i konfigurasjonen.
|
||||
// Men siden admin har tilgang til alt i PHP, viser vi knappene.
|
||||
// Hvis brukeren er vanlig ansatt (men ikke i f.eks service), vil skrivetilgang sjekkes
|
||||
// mot 'writeable_calendars' eller ved API-kall.
|
||||
// Enklest her: Vi viser knappene hvis brukeren KAN skrive til denne kalenderen.
|
||||
|
||||
btnDelete.setOnClickListener(v -> confirmDelete());
|
||||
boolean canEdit = UserManager.getInstance().getWriteableCalendars().contains(event.getCalendarName())
|
||||
|| UserManager.getInstance().isAdmin();
|
||||
|
||||
btnEdit.setOnClickListener(v -> {
|
||||
// Send eventet videre til redigering
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putSerializable("edit_event", event);
|
||||
// Vi må navigere via parent fragmentets navController
|
||||
NavHostFragment.findNavController(this).navigate(R.id.navigation_create_event, bundle);
|
||||
dismiss();
|
||||
});
|
||||
if (canEdit) {
|
||||
adminLayout.setVisibility(View.VISIBLE);
|
||||
btnDelete.setOnClickListener(v -> confirmDelete());
|
||||
btnEdit.setOnClickListener(v -> {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putSerializable("edit_event", event);
|
||||
NavHostFragment.findNavController(this).navigate(R.id.navigation_create_event, bundle);
|
||||
dismiss();
|
||||
});
|
||||
} else {
|
||||
adminLayout.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
return view;
|
||||
|
|
@ -92,15 +112,8 @@ public class CalendarDetailsBottomSheet extends BottomSheetDialogFragment {
|
|||
}
|
||||
|
||||
private void deleteEvent() {
|
||||
// Vi må sende en CreateEventRequest med ID for å slette
|
||||
// Vi trenger ikke fylle ut alt, bare ID og kalendertype
|
||||
// Siden vi ikke vet nøyaktig hvilken kalender den kom fra (APIet gir ikke det),
|
||||
// prøver vi "Felles" som default, eller prøver å slette fra ID.
|
||||
// PHP-koden vi lagde støtter sletting basert på ID hvis vi sender riktig kalendertype.
|
||||
// For nå antar vi "Felles" eller looper i backend. I V11.3 PHP scriptet sletter den basert på ID i valgt kalender.
|
||||
|
||||
CreateEventRequest req = new CreateEventRequest(
|
||||
"", "", "", "", "", "Felles", new ArrayList<>(), false, ""
|
||||
"", "", "", "", "", event.getCalendarName(), new ArrayList<>(), false, ""
|
||||
);
|
||||
req.id = event.getId();
|
||||
|
||||
|
|
@ -110,9 +123,8 @@ public class CalendarDetailsBottomSheet extends BottomSheetDialogFragment {
|
|||
if (response.isSuccessful()) {
|
||||
Toast.makeText(getContext(), "Slettet!", Toast.LENGTH_SHORT).show();
|
||||
dismiss();
|
||||
// Her burde vi ideelt sett oppdatert listen bak, men brukeren kan dra for å oppdatere
|
||||
} else {
|
||||
Toast.makeText(getContext(), "Kunne ikke slette (Er det en felles-hendelse?)", Toast.LENGTH_LONG).show();
|
||||
Toast.makeText(getContext(), "Kunne ikke slette", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,10 +23,16 @@ public class CalendarEvent implements Serializable {
|
|||
@SerializedName("location")
|
||||
private String location;
|
||||
|
||||
// V11.0: Liste av minutter (f.eks [15, 60])
|
||||
@SerializedName("reminders")
|
||||
private List<Integer> reminders = new ArrayList<>();
|
||||
|
||||
// NYE FELTER V12.2
|
||||
@SerializedName("calendar_name")
|
||||
private String calendarName;
|
||||
|
||||
@SerializedName("calendar_color")
|
||||
private String calendarColor;
|
||||
|
||||
// UI-hjelpefelter
|
||||
private String day;
|
||||
private String month;
|
||||
|
|
@ -48,14 +54,18 @@ public class CalendarEvent implements Serializable {
|
|||
public String getDescription() { return description != null ? description : ""; }
|
||||
public String getLocation() { return location != null ? location : ""; }
|
||||
|
||||
// Henter listen. Hvis den er null (gamle data), returner tom liste.
|
||||
public List<Integer> getReminders() {
|
||||
return reminders != null ? reminders : new ArrayList<>();
|
||||
}
|
||||
|
||||
// --- KOMPATIBILITETS-METODER (For å fikse build-feil i CalendarManager og Worker) ---
|
||||
// NYE GETTERS/SETTERS
|
||||
public String getCalendarName() { return calendarName != null ? calendarName : "Ukjent"; }
|
||||
public void setCalendarName(String name) { this.calendarName = name; }
|
||||
|
||||
// Brukes av CalendarManager.java for lokale events
|
||||
public String getCalendarColor() { return calendarColor != null ? calendarColor : "#888888"; }
|
||||
public void setCalendarColor(String color) { this.calendarColor = color; }
|
||||
|
||||
// --- KOMPATIBILITETS-METODER ---
|
||||
public void setReminderMinutes(int minutes) {
|
||||
this.reminders = new ArrayList<>();
|
||||
if (minutes > 0) {
|
||||
|
|
@ -63,7 +73,6 @@ public class CalendarEvent implements Serializable {
|
|||
}
|
||||
}
|
||||
|
||||
// Brukes hvis gammel kode prøver å hente ett tall. Returnerer det første i listen.
|
||||
public int getReminderMinutes() {
|
||||
if (reminders != null && !reminders.isEmpty()) {
|
||||
return reminders.get(0);
|
||||
|
|
|
|||
|
|
@ -118,9 +118,12 @@ public class CalendarManager {
|
|||
}
|
||||
|
||||
CalendarEvent event = new CalendarEvent(title, rawStart, rawEnd, desc, loc);
|
||||
// Denne metoden eksisterer nå i CalendarEvent (se fil 1)
|
||||
event.setReminderMinutes(0);
|
||||
|
||||
// NYTT V12.2: Sett standardfarge for lokale kalendere
|
||||
event.setCalendarColor("#888888"); // Grå for lokale events
|
||||
event.setCalendarName("Min Kalender (Lokal)");
|
||||
|
||||
formatEventForUI(event);
|
||||
deviceEvents.add(event);
|
||||
}
|
||||
|
|
|
|||
5
app/src/main/res/drawable/bg_date_box.xml
Normal file
5
app/src/main/res/drawable/bg_date_box.xml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
|
||||
<solid android:color="@color/kbs_logo_light_blue"/>
|
||||
<corners android:radius="8dp"/>
|
||||
</shape>
|
||||
|
|
@ -6,6 +6,21 @@
|
|||
android:orientation="vertical"
|
||||
android:padding="24dp"
|
||||
android:background="@android:color/white">
|
||||
|
||||
<!-- NYTT: Kalendernavn (Lite merke øverst) -->
|
||||
<TextView
|
||||
android:id="@+id/sheet_calendar_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="KALENDERNAVN"
|
||||
android:textSize="12sp"
|
||||
android:textStyle="bold"
|
||||
android:textColor="@color/white"
|
||||
android:background="@drawable/bg_date_box"
|
||||
android:paddingHorizontal="8dp"
|
||||
android:paddingVertical="4dp"
|
||||
android:layout_marginBottom="12dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/sheet_title"
|
||||
android:layout_width="match_parent"
|
||||
|
|
@ -76,7 +91,6 @@
|
|||
android:layout_marginStart="8dp"/>
|
||||
</LinearLayout>
|
||||
|
||||
<!-- Gammel knapp (skjult) -->
|
||||
<Button
|
||||
android:id="@+id/btn_add_to_calendar"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
|||
|
|
@ -16,11 +16,13 @@
|
|||
android:gravity="center_vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/date_box_background"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:orientation="vertical"
|
||||
android:gravity="center"
|
||||
android:background="@color/kbs_logo_light_blue" android:layout_marginEnd="16dp">
|
||||
android:background="@drawable/bg_date_box"
|
||||
android:layout_marginEnd="16dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/cal_day"
|
||||
|
|
|
|||
Loading…
Reference in a new issue