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;
|
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 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 -> {
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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()) {
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
boolean canEdit = UserManager.getInstance().getWriteableCalendars().contains(event.getCalendarName())
|
||||||
|
|| UserManager.getInstance().isAdmin();
|
||||||
|
|
||||||
|
if (canEdit) {
|
||||||
adminLayout.setVisibility(View.VISIBLE);
|
adminLayout.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
btnDelete.setOnClickListener(v -> confirmDelete());
|
btnDelete.setOnClickListener(v -> confirmDelete());
|
||||||
|
|
||||||
btnEdit.setOnClickListener(v -> {
|
btnEdit.setOnClickListener(v -> {
|
||||||
// Send eventet videre til redigering
|
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putSerializable("edit_event", event);
|
bundle.putSerializable("edit_event", event);
|
||||||
// Vi må navigere via parent fragmentets navController
|
|
||||||
NavHostFragment.findNavController(this).navigate(R.id.navigation_create_event, bundle);
|
NavHostFragment.findNavController(this).navigate(R.id.navigation_create_event, bundle);
|
||||||
dismiss();
|
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 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(
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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 nå 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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
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: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"
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue