Før ny chat

This commit is contained in:
ErolHaagenrud 2025-12-10 14:00:27 +01:00
parent 00028f10e5
commit 30053eb060
4 changed files with 1820 additions and 646 deletions

File diff suppressed because it is too large Load diff

View file

@ -2,7 +2,6 @@ package com.kbs.kbsintranett;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@ -36,6 +35,11 @@ public class FormsListFragment extends Fragment {
private ProgressBar loadingSpinner;
private TextView txtStatus;
// Regex for å finne tall i starten av tittelen (f.eks "10. Tittel")
// Group 1 = Tallet
// Group 2 = Resten av teksten (den rene tittelen)
private static final Pattern TITLE_PATTERN = Pattern.compile("^(\\d+)[.\\s-]+\\s*(.*)");
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@ -71,8 +75,7 @@ public class FormsListFragment extends Fragment {
if (loadingSpinner != null) loadingSpinner.setVisibility(View.VISIBLE);
if (txtStatus != null) txtStatus.setText("");
Log.d(TAG, "Starter henting av skjemaer...");
// Vi bruker standard-kallet som er raskt og effektivt
RetrofitClient.getApiService().getFormsListMap().enqueue(new Callback<Map<String, GravityForm>>() {
@Override
public void onResponse(Call<Map<String, GravityForm>> call, Response<Map<String, GravityForm>> response) {
@ -81,7 +84,6 @@ public class FormsListFragment extends Fragment {
if (response.isSuccessful() && response.body() != null) {
Map<String, GravityForm> formMap = response.body();
Log.d(TAG, "Fant " + formMap.size() + " skjemaer totalt.");
if (formMap.isEmpty()) {
if (txtStatus != null) txtStatus.setText("Ingen skjemaer funnet.");
@ -90,11 +92,11 @@ public class FormsListFragment extends Fragment {
List<GravityForm> visibleForms = new ArrayList<>();
for (GravityForm form : formMap.values()) {
// Sjekk om aktiv
boolean isActive = form.isActive == null || !"0".equals(form.isActive);
Integer sortOrder = getSortOrderFromDescription(form);
// Logg hva vi finner for hvert skjema
Log.d(TAG, "Skjema: " + form.title + " | ID: " + form.id + " | Beskrivelse: " + form.description + " | Sorteringstall funnet: " + sortOrder);
// Sjekk om vi finner et sorteringstall i tittelen
Integer sortOrder = getSortOrderFromTitle(form.title);
if (form != null && form.title != null && isActive && sortOrder != null) {
visibleForms.add(form);
@ -102,16 +104,15 @@ public class FormsListFragment extends Fragment {
}
if (visibleForms.isEmpty()) {
Log.w(TAG, "Alle skjemaer ble filtrert bort. Sjekk at beskrivelsene starter med et tall.");
if (txtStatus != null) txtStatus.setText("Ingen tilgjengelige skjemaer i appen.");
if (txtStatus != null) txtStatus.setText("Ingen tilgjengelige skjemaer (sjekk nummerering i titler).");
return;
}
// Sorter basert tallet vi fant
// Sorter listen basert tallet i tittelen
Collections.sort(visibleForms, new Comparator<GravityForm>() {
@Override
public int compare(GravityForm f1, GravityForm f2) {
return Integer.compare(getSortOrderFromDescription(f1), getSortOrderFromDescription(f2));
return Integer.compare(getSortOrderFromTitle(f1.title), getSortOrderFromTitle(f2.title));
}
});
@ -120,7 +121,6 @@ public class FormsListFragment extends Fragment {
}
} else {
Log.e(TAG, "Feil fra server: " + response.code());
if (txtStatus != null) txtStatus.setText("Kunne ikke laste listen (Kode " + response.code() + ")");
}
}
@ -129,29 +129,18 @@ public class FormsListFragment extends Fragment {
public void onFailure(Call<Map<String, GravityForm>> call, Throwable t) {
if (getContext() == null) return;
if (loadingSpinner != null) loadingSpinner.setVisibility(View.GONE);
Log.e(TAG, "Nettverksfeil", t);
if (txtStatus != null) txtStatus.setText("Nettverksfeil: " + t.getMessage());
}
});
}
/**
* Leter etter et tall i starten av beskrivelsen.
* Håndterer HTML-tags og mellomrom.
* Henter ut tallet fra starten av tittelen.
* Returnerer null hvis tittelen ikke starter med et tall.
*/
private Integer getSortOrderFromDescription(GravityForm form) {
if (form.description == null || form.description.isEmpty()) {
return null; // Skjules
}
// 1. Fjern HTML-tags for å ren tekst (f.eks "<p>10.</p>" -> "10.")
String cleanText = Html.fromHtml(form.description, Html.FROM_HTML_MODE_COMPACT).toString().trim();
// 2. Regex: Finn første sekvens av tall (\d+)
// ^\D* betyr "Start på linjen, ignorer ikke-tall (som bokstaver/tegn) i starten"
Pattern p = Pattern.compile("^\\D*(\\d+)");
Matcher m = p.matcher(cleanText);
private Integer getSortOrderFromTitle(String title) {
if (title == null) return null;
Matcher m = TITLE_PATTERN.matcher(title.trim());
if (m.find()) {
try {
return Integer.parseInt(m.group(1));
@ -162,9 +151,27 @@ public class FormsListFragment extends Fragment {
return null; // Ingen tall funnet -> Skjules
}
/**
* Henter ut selve navnet skjemaet (uten tallet foran).
* "10. Ansatte" -> "Ansatte"
*/
private String getCleanTitle(String title) {
if (title == null) return "";
Matcher m = TITLE_PATTERN.matcher(title.trim());
if (m.find()) {
// Group 2 er resten av teksten etter tallet og punktum/mellomrom
return m.group(2);
}
return title; // Fallback hvis regex ikke matcher (skal ikke skje pga filtreringen over)
}
private void addFormButton(GravityForm form) {
Button button = new Button(getContext());
button.setText(form.title.toUpperCase());
// VIS VASKET TITTEL KNAPPEN
String displayTitle = getCleanTitle(form.title);
button.setText(displayTitle.toUpperCase());
button.setTextColor(Color.WHITE);
button.setBackgroundColor(Color.parseColor("#0069B3")); // KBS Blå
button.setTextSize(14);

View file

@ -11,13 +11,14 @@ public class GravityField {
@SerializedName("type")
public String type;
@SerializedName("inputType")
public String inputType;
@SerializedName("label")
public String label;
// --- DETTE ER FELTET SOM MANGLER ---
@SerializedName("adminLabel")
public String adminLabel;
// -----------------------------------
@SerializedName("description")
public String description;
@ -47,14 +48,20 @@ public class GravityField {
@SerializedName("isHidden")
public boolean isHidden;
// NYTT: For å sjekke om feltet er Read Only (f.eks dato i refusjon)
@SerializedName("gwreadonly_enable")
public boolean readOnly;
@JsonAdapter(ConditionalLogicAdapter.class)
@SerializedName("conditionalLogic")
public ConditionalLogic conditionalLogic;
// For å lese Populate Anything-regler
@SerializedName("gppa-values-templates")
public java.util.Map<String, String> gppaTemplates;
@SerializedName("gpnfForm")
public String gpnfForm;
public static class Choice {
@SerializedName("text")
public String text;
@ -65,10 +72,10 @@ public class GravityField {
public static class ConditionalLogic {
@SerializedName("actionType")
public String actionType; // "show" eller "hide"
public String actionType;
@SerializedName("logicType")
public String logicType; // "all" eller "any"
public String logicType;
@SerializedName("rules")
public List<Rule> rules;
@ -79,7 +86,7 @@ public class GravityField {
public String fieldId;
@SerializedName("operator")
public String operator; // "is", "isnot", etc.
public String operator;
@SerializedName("value")
public String value;

File diff suppressed because it is too large Load diff