Før endring fra textview til webview i nyheter

This commit is contained in:
ErolHaagenrud 2025-12-17 09:15:08 +01:00
parent 71bfb191bc
commit 530a5a3d16
7 changed files with 88 additions and 30 deletions

View file

@ -1,8 +1,11 @@
package com.kbs.kbsintranett; package com.kbs.kbsintranett;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@ -17,7 +20,6 @@ public class CalendarAdapter extends RecyclerView.Adapter<CalendarAdapter.ViewHo
void onItemClick(CalendarEvent event); void onItemClick(CalendarEvent event);
} }
// Oppdatert konstruktør som tar imot en listener
public CalendarAdapter(List<CalendarEvent> events, OnItemClickListener listener) { public CalendarAdapter(List<CalendarEvent> events, OnItemClickListener listener) {
this.events = events; this.events = events;
this.listener = listener; this.listener = listener;
@ -38,6 +40,15 @@ public class CalendarAdapter extends RecyclerView.Adapter<CalendarAdapter.ViewHo
holder.time.setText(event.getTime()); holder.time.setText(event.getTime());
holder.title.setText(event.getTitle()); holder.title.setText(event.getTitle());
// NYTT: Sett farge 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 -> { holder.itemView.setOnClickListener(v -> {
if (listener != null) { if (listener != null) {
listener.onItemClick(event); listener.onItemClick(event);
@ -52,6 +63,7 @@ public class CalendarAdapter extends RecyclerView.Adapter<CalendarAdapter.ViewHo
public static class ViewHolder extends RecyclerView.ViewHolder { public static class ViewHolder extends RecyclerView.ViewHolder {
TextView day, month, title, time; TextView day, month, title, time;
LinearLayout dateBox; // NYTT
public ViewHolder(View view) { public ViewHolder(View view) {
super(view); super(view);
@ -59,6 +71,7 @@ public class CalendarAdapter extends RecyclerView.Adapter<CalendarAdapter.ViewHo
month = view.findViewById(R.id.cal_month); month = view.findViewById(R.id.cal_month);
title = view.findViewById(R.id.cal_title); title = view.findViewById(R.id.cal_title);
time = view.findViewById(R.id.cal_time); time = view.findViewById(R.id.cal_time);
dateBox = view.findViewById(R.id.date_box_background); // NYTT
} }
} }
} }

View file

@ -1,6 +1,8 @@
package com.kbs.kbsintranett; package com.kbs.kbsintranett;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html; import android.text.Html;
import android.text.method.LinkMovementMethod; import android.text.method.LinkMovementMethod;
@ -39,6 +41,8 @@ public class CalendarDetailsBottomSheet extends BottomSheetDialogFragment {
TextView time = view.findViewById(R.id.sheet_time); TextView time = view.findViewById(R.id.sheet_time);
TextView desc = view.findViewById(R.id.sheet_desc); TextView desc = view.findViewById(R.id.sheet_desc);
TextView loc = view.findViewById(R.id.sheet_location); 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); LinearLayout adminLayout = view.findViewById(R.id.layout_admin_buttons);
Button btnDelete = view.findViewById(R.id.btn_delete); Button btnDelete = view.findViewById(R.id.btn_delete);
Button btnEdit = view.findViewById(R.id.btn_edit); Button btnEdit = view.findViewById(R.id.btn_edit);
@ -46,8 +50,14 @@ public class CalendarDetailsBottomSheet extends BottomSheetDialogFragment {
title.setText(event.getTitle()); title.setText(event.getTitle());
time.setText(event.getTime() + " (" + event.getDay() + ". " + event.getMonth() + ")"); 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()) { if (!event.getDescription().isEmpty()) {
// Skjul #varsel-taggen for visning
String cleanDesc = event.getDescription().replaceAll("#varsel:[\\d,]+", "").trim(); String cleanDesc = event.getDescription().replaceAll("#varsel:[\\d,]+", "").trim();
desc.setText(Html.fromHtml(cleanDesc, Html.FROM_HTML_MODE_COMPACT)); desc.setText(Html.fromHtml(cleanDesc, Html.FROM_HTML_MODE_COMPACT));
desc.setVisibility(View.VISIBLE); desc.setVisibility(View.VISIBLE);
@ -65,18 +75,28 @@ public class CalendarDetailsBottomSheet extends BottomSheetDialogFragment {
// Sjekk admin-rettigheter // Sjekk admin-rettigheter
if (UserManager.getInstance().isEditorOrAbove()) { 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 -> { if (canEdit) {
// Send eventet videre til redigering adminLayout.setVisibility(View.VISIBLE);
Bundle bundle = new Bundle(); btnDelete.setOnClickListener(v -> confirmDelete());
bundle.putSerializable("edit_event", event); btnEdit.setOnClickListener(v -> {
// Vi navigere via parent fragmentets navController Bundle bundle = new Bundle();
NavHostFragment.findNavController(this).navigate(R.id.navigation_create_event, bundle); bundle.putSerializable("edit_event", event);
dismiss(); NavHostFragment.findNavController(this).navigate(R.id.navigation_create_event, bundle);
}); dismiss();
});
} else {
adminLayout.setVisibility(View.GONE);
}
} }
return view; return view;
@ -92,15 +112,8 @@ public class CalendarDetailsBottomSheet extends BottomSheetDialogFragment {
} }
private void deleteEvent() { private void deleteEvent() {
// Vi 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 ID hvis vi sender riktig kalendertype.
// For antar vi "Felles" eller looper i backend. I V11.3 PHP scriptet sletter den basert ID i valgt kalender.
CreateEventRequest req = new CreateEventRequest( CreateEventRequest req = new CreateEventRequest(
"", "", "", "", "", "Felles", new ArrayList<>(), false, "" "", "", "", "", "", event.getCalendarName(), new ArrayList<>(), false, ""
); );
req.id = event.getId(); req.id = event.getId();
@ -110,9 +123,8 @@ public class CalendarDetailsBottomSheet extends BottomSheetDialogFragment {
if (response.isSuccessful()) { if (response.isSuccessful()) {
Toast.makeText(getContext(), "Slettet!", Toast.LENGTH_SHORT).show(); Toast.makeText(getContext(), "Slettet!", Toast.LENGTH_SHORT).show();
dismiss(); dismiss();
// Her burde vi ideelt sett oppdatert listen bak, men brukeren kan dra for å oppdatere
} else { } 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();
} }
} }

View file

@ -23,10 +23,16 @@ public class CalendarEvent implements Serializable {
@SerializedName("location") @SerializedName("location")
private String location; private String location;
// V11.0: Liste av minutter (f.eks [15, 60])
@SerializedName("reminders") @SerializedName("reminders")
private List<Integer> reminders = new ArrayList<>(); private List<Integer> reminders = new ArrayList<>();
// NYE FELTER V12.2
@SerializedName("calendar_name")
private String calendarName;
@SerializedName("calendar_color")
private String calendarColor;
// UI-hjelpefelter // UI-hjelpefelter
private String day; private String day;
private String month; private String month;
@ -48,14 +54,18 @@ public class CalendarEvent implements Serializable {
public String getDescription() { return description != null ? description : ""; } public String getDescription() { return description != null ? description : ""; }
public String getLocation() { return location != null ? location : ""; } public String getLocation() { return location != null ? location : ""; }
// Henter listen. Hvis den er null (gamle data), returner tom liste.
public List<Integer> getReminders() { public List<Integer> getReminders() {
return reminders != null ? reminders : new ArrayList<>(); 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) { public void setReminderMinutes(int minutes) {
this.reminders = new ArrayList<>(); this.reminders = new ArrayList<>();
if (minutes > 0) { 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() { public int getReminderMinutes() {
if (reminders != null && !reminders.isEmpty()) { if (reminders != null && !reminders.isEmpty()) {
return reminders.get(0); return reminders.get(0);

View file

@ -118,9 +118,12 @@ public class CalendarManager {
} }
CalendarEvent event = new CalendarEvent(title, rawStart, rawEnd, desc, loc); CalendarEvent event = new CalendarEvent(title, rawStart, rawEnd, desc, loc);
// Denne metoden eksisterer i CalendarEvent (se fil 1)
event.setReminderMinutes(0); 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); formatEventForUI(event);
deviceEvents.add(event); deviceEvents.add(event);
} }

View 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>

View file

@ -6,6 +6,21 @@
android:orientation="vertical" android:orientation="vertical"
android:padding="24dp" android:padding="24dp"
android:background="@android:color/white"> 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 <TextView
android:id="@+id/sheet_title" android:id="@+id/sheet_title"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -76,7 +91,6 @@
android:layout_marginStart="8dp"/> android:layout_marginStart="8dp"/>
</LinearLayout> </LinearLayout>
<!-- Gammel knapp (skjult) -->
<Button <Button
android:id="@+id/btn_add_to_calendar" android:id="@+id/btn_add_to_calendar"
android:layout_width="match_parent" android:layout_width="match_parent"

View file

@ -16,11 +16,13 @@
android:gravity="center_vertical"> android:gravity="center_vertical">
<LinearLayout <LinearLayout
android:id="@+id/date_box_background"
android:layout_width="50dp" android:layout_width="50dp"
android:layout_height="50dp" android:layout_height="50dp"
android:orientation="vertical" android:orientation="vertical"
android:gravity="center" 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 <TextView
android:id="@+id/cal_day" android:id="@+id/cal_day"