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;
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 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
}
}
}

View file

@ -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 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 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(
"", "", "", "", "", "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();
}
}

View file

@ -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);

View file

@ -118,9 +118,12 @@ public class CalendarManager {
}
CalendarEvent event = new CalendarEvent(title, rawStart, rawEnd, desc, loc);
// Denne metoden eksisterer 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);
}

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: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"

View file

@ -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"