diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index b268ef3..fb63a6b 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -4,6 +4,14 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4ed031f..dfef0fc 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -39,6 +39,17 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/kbs/kbsintranett/FormsFragment.java b/app/src/main/java/com/kbs/kbsintranett/FormsFragment.java
index d68e11a..3ea6d3c 100644
--- a/app/src/main/java/com/kbs/kbsintranett/FormsFragment.java
+++ b/app/src/main/java/com/kbs/kbsintranett/FormsFragment.java
@@ -40,6 +40,7 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
import org.json.JSONArray;
import org.json.JSONException;
@@ -105,12 +106,10 @@ public class FormsFragment extends Fragment {
private Map childInputViews = new HashMap<>();
private Map childRequiredFieldsMap = new HashMap<>();
private Map childFileUploads = new HashMap<>();
-
// Lagring av Nested Entries
private List nestedEntries = new ArrayList<>();
private LinearLayout nestedEntriesContainer;
private TextView totalAmountView;
-
private String pendingFileFieldId = null;
private boolean isSelectingForChild = false;
private ActivityResultLauncher filePickerLauncher;
@@ -123,7 +122,6 @@ public class FormsFragment extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
filePickerLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
@@ -354,7 +352,6 @@ public class FormsFragment extends Fragment {
private void openChildFormDialog(int childFormId) {
if (getActivity() == null) return;
-
ProgressBar pBar = new ProgressBar(getContext());
AlertDialog loadingDialog = new AlertDialog.Builder(getContext())
.setView(pBar)
@@ -383,7 +380,7 @@ public class FormsFragment extends Fragment {
private void showChildFormDialog(GravityForm childForm) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
- builder.setTitle(childForm.title);
+ // FJERNET: builder.setTitle(childForm.title); - Brukeren ønsket ikke tittel i popup
childInputViews.clear();
childRequiredFieldsMap.clear();
@@ -427,7 +424,6 @@ public class FormsFragment extends Fragment {
builder.setView(scrollView);
builder.setPositiveButton("Legg til vedlegg", null);
builder.setNegativeButton("Avbryt", (d, w) -> d.dismiss());
-
AlertDialog dialog = builder.create();
dialog.show();
@@ -438,7 +434,6 @@ public class FormsFragment extends Fragment {
private void submitChildForm(int childFormId, AlertDialog dialog) {
JSONObject inputValues = new JSONObject();
-
for (Map.Entry entry : childInputViews.entrySet()) {
String val = getInputValueGeneric(entry.getValue());
if (!val.isEmpty()) {
@@ -474,17 +469,26 @@ public class FormsFragment extends Fragment {
RetrofitClient.getApiService().submitMultipartForm(childFormId, textParts, fileParts).enqueue(new retrofit2.Callback() {
@Override
public void onResponse(retrofit2.Call call, retrofit2.Response response) {
- if (response.isSuccessful()) {
+ if (response.isSuccessful() && response.body() != null) {
try {
- JSONObject json = new JSONObject(response.body().toString());
- if (json.optBoolean("is_valid")) {
- String entryId = json.getString("entry_id");
+ JsonObject json = response.body().getAsJsonObject();
+ if (json.has("is_valid") && json.get("is_valid").getAsBoolean()) {
+ String entryId = json.has("entry_id") ? json.get("entry_id").getAsString() : "";
+
+ // NB: Tilpass ID-ene her hvis skjema 18 endres.
+ // ID 3 = Beskrivelse, ID 4 = Beløp
String desc = getInputValueGeneric(childInputViews.get("3"));
String price = getInputValueGeneric(childInputViews.get("4"));
+
addNestedEntry(entryId, desc, price);
dialog.dismiss();
+ } else {
+ Toast.makeText(getContext(), "Ugyldig respons fra server", Toast.LENGTH_SHORT).show();
}
- } catch (JSONException e) { e.printStackTrace(); }
+ } catch (Exception e) {
+ e.printStackTrace();
+ Toast.makeText(getContext(), "Feil ved parsing av svar", Toast.LENGTH_SHORT).show();
+ }
} else {
Toast.makeText(getContext(), "Feil ved opplasting", Toast.LENGTH_SHORT).show();
}
@@ -494,7 +498,6 @@ public class FormsFragment extends Fragment {
Toast.makeText(getContext(), "Nettverksfeil", Toast.LENGTH_SHORT).show();
}
});
-
} catch (Exception e) { e.printStackTrace(); }
}
}
@@ -510,10 +513,8 @@ public class FormsFragment extends Fragment {
double total = 0;
List ids = new ArrayList<>();
-
for (NestedEntry entry : nestedEntries) {
ids.add(entry.id);
-
String cleanPrice = entry.price.replaceAll("[^0-9,.]", "").replace(",", ".");
try {
if (!cleanPrice.isEmpty()) total += Double.parseDouble(cleanPrice);
@@ -563,7 +564,6 @@ public class FormsFragment extends Fragment {
Toast.makeText(getContext(), "Kunne ikke åpne filvelger", Toast.LENGTH_SHORT).show();
}
});
-
TextView txtFileName = new TextView(getContext());
txtFileName.setText("Ingen fil valgt");
txtFileName.setPadding(20, 0, 0, 0);
@@ -671,7 +671,6 @@ public class FormsFragment extends Fragment {
public void onTextChanged(CharSequence s, int start, int before, int count) {}
public void afterTextChanged(Editable s) { evaluateAllConditionalLogic(); }
});
-
container.addView(input);
views.put(field.id, input);
req.put(field.id, field.isRequired);
@@ -723,6 +722,10 @@ public class FormsFragment extends Fragment {
String cbText = (field.checkboxLabel != null && !field.checkboxLabel.isEmpty()) ? field.checkboxLabel : field.label;
checkBox.setText(cbText);
String inputId = (field.inputs != null && !field.inputs.isEmpty()) ? field.inputs.get(0).id : field.id;
+
+ // For Consent fields, Gravity Forms typically expects "1" if checked.
+ checkBox.setTag("1");
+
checkBox.setOnCheckedChangeListener((b, c) -> evaluateAllConditionalLogic());
container.addView(checkBox);
views.put(inputId, checkBox);
@@ -731,9 +734,21 @@ public class FormsFragment extends Fragment {
private void renderCheckboxField(LinearLayout container, GravityField field, Map views, Map req) {
if (field.inputs != null) {
- for (GravityField inputDef : field.inputs) {
+ for (int i = 0; i < field.inputs.size(); i++) {
+ GravityField inputDef = field.inputs.get(i);
CheckBox checkBox = new CheckBox(getContext());
checkBox.setText(inputDef.label);
+
+ // --- VIKTIG ENDRING: HENT KORREKT VERDI ---
+ // Gravity Forms sjekkbokser trenger verdien fra "choices" listen, ikke bare "1".
+ // F.eks: "Ja" hvis valget er "Ja".
+ String value = "1"; // Fallback
+ if (field.choices != null && i < field.choices.size()) {
+ value = field.choices.get(i).value;
+ }
+ checkBox.setTag(value);
+ // -------------------------------------------
+
checkBox.setOnCheckedChangeListener((b, c) -> evaluateAllConditionalLogic());
container.addView(checkBox);
views.put(inputDef.id, checkBox);
@@ -744,7 +759,6 @@ public class FormsFragment extends Fragment {
private void renderDateField(LinearLayout container, GravityField field, Map views, Map req) {
EditText dateInput = new EditText(getContext());
-
// --- DATO LØSNING (Fix for Read Only / Dagens Dato) ---
if (field.readOnly || (formId == ID_REFUSJON_UTLEGG && "28".equals(field.id))) {
// Sett dagens dato
@@ -789,7 +803,6 @@ public class FormsFragment extends Fragment {
for (GravityField subField : inputs) {
if (subField.isHidden || "hidden".equals(subField.visibility)) continue;
-
TextView subLabel = new TextView(getContext());
String subLabelText = subField.label;
boolean isSubRequired = parentField.isRequired;
@@ -808,7 +821,6 @@ public class FormsFragment extends Fragment {
subInput.setPadding(30, 30, 30, 30);
subInput.setBackgroundResource(android.R.drawable.edit_text);
subInput.setInputType(InputType.TYPE_CLASS_TEXT);
-
if (isPersonalia && parentField.label.toLowerCase().contains("navn") && !parentField.label.toLowerCase().contains("pårørende")) {
String lowerSub = subField.label.toLowerCase();
if (lowerSub.contains("fornavn")) subInput.setText(user.getFirstName());
@@ -829,7 +841,6 @@ public class FormsFragment extends Fragment {
sectionHeader.setTextColor(Color.parseColor("#0069B3"));
sectionHeader.setPadding(0, 20, 0, 5);
container.addView(sectionHeader);
-
if (descText != null && !descText.isEmpty()) {
TextView desc = new TextView(getContext());
desc.setText(Html.fromHtml(descText, Html.FROM_HTML_MODE_COMPACT));
@@ -858,7 +869,6 @@ public class FormsFragment extends Fragment {
private void evaluateAllConditionalLogic() {
if (currentForm == null || currentForm.fields == null) return;
-
for (GravityField field : currentForm.fields) {
if (field.conditionalLogic == null) {
setViewVisibility(field.id, true);
@@ -874,7 +884,6 @@ public class FormsFragment extends Fragment {
private boolean evaluateLogic(GravityField.ConditionalLogic logic) {
if (logic.rules == null || logic.rules.isEmpty()) return true;
-
boolean isAll = "all".equalsIgnoreCase(logic.logicType);
boolean aggregatedResult = isAll;
@@ -927,7 +936,16 @@ public class FormsFragment extends Fragment {
Object item = ((Spinner) view).getSelectedItem();
return item != null ? item.toString() : "";
}
- if (view instanceof CheckBox) return ((CheckBox) view).isChecked() ? "1" : "";
+ // --- VIKTIG ENDRING: HENT TAG-VERDI ---
+ if (view instanceof CheckBox) {
+ CheckBox cb = (CheckBox) view;
+ if (cb.isChecked()) {
+ // Returner verdien lagret i Tag (f.eks "Ja") i stedet for hardkodet "1"
+ return cb.getTag() != null ? cb.getTag().toString() : "1";
+ }
+ return "";
+ }
+ // ----------------------------------------
return "";
}
@@ -991,7 +1009,6 @@ public class FormsFragment extends Fragment {
updateStatus("Sender inn...");
String cookie = UserManager.getInstance().getCookie();
-
Log.d(TAG, "Preparing submission payload: " + inputValues.toString());
if (!fileUploads.isEmpty()) {
@@ -1018,10 +1035,10 @@ public class FormsFragment extends Fragment {
});
} else {
try {
- String errBody = response.body().string();
+ // --- BEDRE LOGGING FOR 400 FEIL ---
+ String errBody = response.body() != null ? response.body().string() : "No body";
Log.e(TAG, "Server error body: " + errBody);
- // Prøv å vise feilmeldingen fra serveren
- updateStatus("Feil (" + response.code() + "): Sjekk logg.");
+ updateStatus("Feil (" + response.code() + "): " + errBody); // Viser feilmeldingen i UI
} catch(Exception e){}
}
}
@@ -1108,7 +1125,6 @@ public class FormsFragment extends Fragment {
int userId = user.getUserId();
if (cookie == null) return;
-
String searchJson = "{\"field_filters\":[{\"key\":\"created_by\",\"value\":\"" + userId + "\"}]}";
String encodedSearch = "";
try {
@@ -1116,7 +1132,6 @@ public class FormsFragment extends Fragment {
} catch (UnsupportedEncodingException e) { e.printStackTrace(); }
String url = BASE_URL_GF + "/entries?form_ids=" + formId + "&search=" + encodedSearch;
-
Request request = new Request.Builder().url(url).header("Cookie", cookie).build();
client.newCall(request).enqueue(new okhttp3.Callback() {
@@ -1170,7 +1185,6 @@ public class FormsFragment extends Fragment {
item.setText("Innsendt: " + date);
item.setPadding(10, 20, 10, 20);
item.setBackgroundResource(android.R.drawable.list_selector_background);
-
View line = new View(getContext());
line.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1));
line.setBackgroundColor(Color.LTGRAY);
@@ -1183,7 +1197,6 @@ public class FormsFragment extends Fragment {
private void prefillFormFromHistory(JSONObject latestEntry) {
if (latestEntry == null) return;
-
for (Map.Entry entry : inputViews.entrySet()) {
String fieldId = entry.getKey();
View view = entry.getValue();
@@ -1219,9 +1232,20 @@ public class FormsFragment extends Fragment {
private void clearInputs() {
for (View view : inputViews.values()) {
- if (view instanceof EditText) ((EditText) view).setText("");
- if (view instanceof CheckBox) ((CheckBox) view).setChecked(false);
- if (view instanceof Button) ((TextView) view.getTag()).setText("Ingen fil valgt");
+ if (view instanceof EditText) {
+ ((EditText) view).setText("");
+ } else if (view instanceof CheckBox) {
+ ((CheckBox) view).setChecked(false);
+ } else if (view instanceof RadioGroup) {
+ ((RadioGroup) view).clearCheck();
+ } else if (view instanceof Button) {
+ // Fix: CheckBox inherits from Button, so we must be careful.
+ // Only cast to TextView if the tag is actually a TextView (File Upload logic)
+ Object tag = view.getTag();
+ if (tag instanceof TextView) {
+ ((TextView) tag).setText("Ingen fil valgt");
+ }
+ }
}
fileUploads.clear();
nestedEntries.clear();
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 65c3dc2..77d6a84 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,5 +1,5 @@
[versions]
-agp = "8.13.1"
+agp = "8.13.2"
junit = "4.13.2"
junitVersion = "1.1.5"
espressoCore = "3.5.1"
diff --git a/hele_prosjektet.txt b/hele_prosjektet.txt
index 13a87c7..9ad2a5e 100644
--- a/hele_prosjektet.txt
+++ b/hele_prosjektet.txt
@@ -477,6 +477,7 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
import org.json.JSONArray;
import org.json.JSONException;
@@ -542,12 +543,10 @@ public class FormsFragment extends Fragment {
private Map childInputViews = new HashMap<>();
private Map childRequiredFieldsMap = new HashMap<>();
private Map childFileUploads = new HashMap<>();
-
// Lagring av Nested Entries
private List nestedEntries = new ArrayList<>();
private LinearLayout nestedEntriesContainer;
private TextView totalAmountView;
-
private String pendingFileFieldId = null;
private boolean isSelectingForChild = false;
private ActivityResultLauncher filePickerLauncher;
@@ -560,7 +559,6 @@ public class FormsFragment extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
filePickerLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
@@ -791,7 +789,6 @@ public class FormsFragment extends Fragment {
private void openChildFormDialog(int childFormId) {
if (getActivity() == null) return;
-
ProgressBar pBar = new ProgressBar(getContext());
AlertDialog loadingDialog = new AlertDialog.Builder(getContext())
.setView(pBar)
@@ -820,7 +817,7 @@ public class FormsFragment extends Fragment {
private void showChildFormDialog(GravityForm childForm) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
- builder.setTitle(childForm.title);
+ // FJERNET: builder.setTitle(childForm.title); - Brukeren ønsket ikke tittel i popup
childInputViews.clear();
childRequiredFieldsMap.clear();
@@ -864,7 +861,6 @@ public class FormsFragment extends Fragment {
builder.setView(scrollView);
builder.setPositiveButton("Legg til vedlegg", null);
builder.setNegativeButton("Avbryt", (d, w) -> d.dismiss());
-
AlertDialog dialog = builder.create();
dialog.show();
@@ -875,7 +871,6 @@ public class FormsFragment extends Fragment {
private void submitChildForm(int childFormId, AlertDialog dialog) {
JSONObject inputValues = new JSONObject();
-
for (Map.Entry entry : childInputViews.entrySet()) {
String val = getInputValueGeneric(entry.getValue());
if (!val.isEmpty()) {
@@ -911,17 +906,26 @@ public class FormsFragment extends Fragment {
RetrofitClient.getApiService().submitMultipartForm(childFormId, textParts, fileParts).enqueue(new retrofit2.Callback() {
@Override
public void onResponse(retrofit2.Call call, retrofit2.Response response) {
- if (response.isSuccessful()) {
+ if (response.isSuccessful() && response.body() != null) {
try {
- JSONObject json = new JSONObject(response.body().toString());
- if (json.optBoolean("is_valid")) {
- String entryId = json.getString("entry_id");
+ JsonObject json = response.body().getAsJsonObject();
+ if (json.has("is_valid") && json.get("is_valid").getAsBoolean()) {
+ String entryId = json.has("entry_id") ? json.get("entry_id").getAsString() : "";
+
+ // NB: Tilpass ID-ene her hvis skjema 18 endres.
+ // ID 3 = Beskrivelse, ID 4 = Beløp
String desc = getInputValueGeneric(childInputViews.get("3"));
String price = getInputValueGeneric(childInputViews.get("4"));
+
addNestedEntry(entryId, desc, price);
dialog.dismiss();
+ } else {
+ Toast.makeText(getContext(), "Ugyldig respons fra server", Toast.LENGTH_SHORT).show();
}
- } catch (JSONException e) { e.printStackTrace(); }
+ } catch (Exception e) {
+ e.printStackTrace();
+ Toast.makeText(getContext(), "Feil ved parsing av svar", Toast.LENGTH_SHORT).show();
+ }
} else {
Toast.makeText(getContext(), "Feil ved opplasting", Toast.LENGTH_SHORT).show();
}
@@ -931,7 +935,6 @@ public class FormsFragment extends Fragment {
Toast.makeText(getContext(), "Nettverksfeil", Toast.LENGTH_SHORT).show();
}
});
-
} catch (Exception e) { e.printStackTrace(); }
}
}
@@ -947,10 +950,8 @@ public class FormsFragment extends Fragment {
double total = 0;
List ids = new ArrayList<>();
-
for (NestedEntry entry : nestedEntries) {
ids.add(entry.id);
-
String cleanPrice = entry.price.replaceAll("[^0-9,.]", "").replace(",", ".");
try {
if (!cleanPrice.isEmpty()) total += Double.parseDouble(cleanPrice);
@@ -1000,7 +1001,6 @@ public class FormsFragment extends Fragment {
Toast.makeText(getContext(), "Kunne ikke åpne filvelger", Toast.LENGTH_SHORT).show();
}
});
-
TextView txtFileName = new TextView(getContext());
txtFileName.setText("Ingen fil valgt");
txtFileName.setPadding(20, 0, 0, 0);
@@ -1108,7 +1108,6 @@ public class FormsFragment extends Fragment {
public void onTextChanged(CharSequence s, int start, int before, int count) {}
public void afterTextChanged(Editable s) { evaluateAllConditionalLogic(); }
});
-
container.addView(input);
views.put(field.id, input);
req.put(field.id, field.isRequired);
@@ -1160,6 +1159,10 @@ public class FormsFragment extends Fragment {
String cbText = (field.checkboxLabel != null && !field.checkboxLabel.isEmpty()) ? field.checkboxLabel : field.label;
checkBox.setText(cbText);
String inputId = (field.inputs != null && !field.inputs.isEmpty()) ? field.inputs.get(0).id : field.id;
+
+ // For Consent fields, Gravity Forms typically expects "1" if checked.
+ checkBox.setTag("1");
+
checkBox.setOnCheckedChangeListener((b, c) -> evaluateAllConditionalLogic());
container.addView(checkBox);
views.put(inputId, checkBox);
@@ -1168,9 +1171,21 @@ public class FormsFragment extends Fragment {
private void renderCheckboxField(LinearLayout container, GravityField field, Map views, Map req) {
if (field.inputs != null) {
- for (GravityField inputDef : field.inputs) {
+ for (int i = 0; i < field.inputs.size(); i++) {
+ GravityField inputDef = field.inputs.get(i);
CheckBox checkBox = new CheckBox(getContext());
checkBox.setText(inputDef.label);
+
+ // --- VIKTIG ENDRING: HENT KORREKT VERDI ---
+ // Gravity Forms sjekkbokser trenger verdien fra "choices" listen, ikke bare "1".
+ // F.eks: "Ja" hvis valget er "Ja".
+ String value = "1"; // Fallback
+ if (field.choices != null && i < field.choices.size()) {
+ value = field.choices.get(i).value;
+ }
+ checkBox.setTag(value);
+ // -------------------------------------------
+
checkBox.setOnCheckedChangeListener((b, c) -> evaluateAllConditionalLogic());
container.addView(checkBox);
views.put(inputDef.id, checkBox);
@@ -1181,7 +1196,6 @@ public class FormsFragment extends Fragment {
private void renderDateField(LinearLayout container, GravityField field, Map views, Map req) {
EditText dateInput = new EditText(getContext());
-
// --- DATO LØSNING (Fix for Read Only / Dagens Dato) ---
if (field.readOnly || (formId == ID_REFUSJON_UTLEGG && "28".equals(field.id))) {
// Sett dagens dato
@@ -1226,7 +1240,6 @@ public class FormsFragment extends Fragment {
for (GravityField subField : inputs) {
if (subField.isHidden || "hidden".equals(subField.visibility)) continue;
-
TextView subLabel = new TextView(getContext());
String subLabelText = subField.label;
boolean isSubRequired = parentField.isRequired;
@@ -1245,7 +1258,6 @@ public class FormsFragment extends Fragment {
subInput.setPadding(30, 30, 30, 30);
subInput.setBackgroundResource(android.R.drawable.edit_text);
subInput.setInputType(InputType.TYPE_CLASS_TEXT);
-
if (isPersonalia && parentField.label.toLowerCase().contains("navn") && !parentField.label.toLowerCase().contains("pårørende")) {
String lowerSub = subField.label.toLowerCase();
if (lowerSub.contains("fornavn")) subInput.setText(user.getFirstName());
@@ -1266,7 +1278,6 @@ public class FormsFragment extends Fragment {
sectionHeader.setTextColor(Color.parseColor("#0069B3"));
sectionHeader.setPadding(0, 20, 0, 5);
container.addView(sectionHeader);
-
if (descText != null && !descText.isEmpty()) {
TextView desc = new TextView(getContext());
desc.setText(Html.fromHtml(descText, Html.FROM_HTML_MODE_COMPACT));
@@ -1295,7 +1306,6 @@ public class FormsFragment extends Fragment {
private void evaluateAllConditionalLogic() {
if (currentForm == null || currentForm.fields == null) return;
-
for (GravityField field : currentForm.fields) {
if (field.conditionalLogic == null) {
setViewVisibility(field.id, true);
@@ -1311,7 +1321,6 @@ public class FormsFragment extends Fragment {
private boolean evaluateLogic(GravityField.ConditionalLogic logic) {
if (logic.rules == null || logic.rules.isEmpty()) return true;
-
boolean isAll = "all".equalsIgnoreCase(logic.logicType);
boolean aggregatedResult = isAll;
@@ -1364,7 +1373,16 @@ public class FormsFragment extends Fragment {
Object item = ((Spinner) view).getSelectedItem();
return item != null ? item.toString() : "";
}
- if (view instanceof CheckBox) return ((CheckBox) view).isChecked() ? "1" : "";
+ // --- VIKTIG ENDRING: HENT TAG-VERDI ---
+ if (view instanceof CheckBox) {
+ CheckBox cb = (CheckBox) view;
+ if (cb.isChecked()) {
+ // Returner verdien lagret i Tag (f.eks "Ja") i stedet for hardkodet "1"
+ return cb.getTag() != null ? cb.getTag().toString() : "1";
+ }
+ return "";
+ }
+ // ----------------------------------------
return "";
}
@@ -1428,7 +1446,6 @@ public class FormsFragment extends Fragment {
updateStatus("Sender inn...");
String cookie = UserManager.getInstance().getCookie();
-
Log.d(TAG, "Preparing submission payload: " + inputValues.toString());
if (!fileUploads.isEmpty()) {
@@ -1455,10 +1472,10 @@ public class FormsFragment extends Fragment {
});
} else {
try {
- String errBody = response.body().string();
+ // --- BEDRE LOGGING FOR 400 FEIL ---
+ String errBody = response.body() != null ? response.body().string() : "No body";
Log.e(TAG, "Server error body: " + errBody);
- // Prøv å vise feilmeldingen fra serveren
- updateStatus("Feil (" + response.code() + "): Sjekk logg.");
+ updateStatus("Feil (" + response.code() + "): " + errBody); // Viser feilmeldingen i UI
} catch(Exception e){}
}
}
@@ -1545,7 +1562,6 @@ public class FormsFragment extends Fragment {
int userId = user.getUserId();
if (cookie == null) return;
-
String searchJson = "{\"field_filters\":[{\"key\":\"created_by\",\"value\":\"" + userId + "\"}]}";
String encodedSearch = "";
try {
@@ -1553,7 +1569,6 @@ public class FormsFragment extends Fragment {
} catch (UnsupportedEncodingException e) { e.printStackTrace(); }
String url = BASE_URL_GF + "/entries?form_ids=" + formId + "&search=" + encodedSearch;
-
Request request = new Request.Builder().url(url).header("Cookie", cookie).build();
client.newCall(request).enqueue(new okhttp3.Callback() {
@@ -1607,7 +1622,6 @@ public class FormsFragment extends Fragment {
item.setText("Innsendt: " + date);
item.setPadding(10, 20, 10, 20);
item.setBackgroundResource(android.R.drawable.list_selector_background);
-
View line = new View(getContext());
line.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1));
line.setBackgroundColor(Color.LTGRAY);
@@ -1620,7 +1634,6 @@ public class FormsFragment extends Fragment {
private void prefillFormFromHistory(JSONObject latestEntry) {
if (latestEntry == null) return;
-
for (Map.Entry entry : inputViews.entrySet()) {
String fieldId = entry.getKey();
View view = entry.getValue();
@@ -1656,9 +1669,20 @@ public class FormsFragment extends Fragment {
private void clearInputs() {
for (View view : inputViews.values()) {
- if (view instanceof EditText) ((EditText) view).setText("");
- if (view instanceof CheckBox) ((CheckBox) view).setChecked(false);
- if (view instanceof Button) ((TextView) view.getTag()).setText("Ingen fil valgt");
+ if (view instanceof EditText) {
+ ((EditText) view).setText("");
+ } else if (view instanceof CheckBox) {
+ ((CheckBox) view).setChecked(false);
+ } else if (view instanceof RadioGroup) {
+ ((RadioGroup) view).clearCheck();
+ } else if (view instanceof Button) {
+ // Fix: CheckBox inherits from Button, so we must be careful.
+ // Only cast to TextView if the tag is actually a TextView (File Upload logic)
+ Object tag = view.getTag();
+ if (tag instanceof TextView) {
+ ((TextView) tag).setText("Ingen fil valgt");
+ }
+ }
}
fileUploads.clear();
nestedEntries.clear();