From 79bcfa05f61efa6d5d202b71b16caa32fa337a1c Mon Sep 17 00:00:00 2001 From: Nils Stinnesbeck Date: Sun, 18 Oct 2026 20:11:25 +0200 Subject: [PATCH] App 2.16.4: drop-downs that keep full screen Back to drop-downs for upload frequency, tyre pressure unit and accent colour, as Material exposed dropdown menus instead of Spinners. A Spinner's list is a focusable window of its own without the full-screen flags, so the car showed its bars while it was open; an exposed dropdown's list leaves the focus with the activity, so the app stays full screen. Styled like the other input fields, with full-height rows. Replaces the buttons of 2.16.3. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01QLJfZQZeAKAwSqViTmLzki --- SPECS.md | 5 ++- app/build.gradle | 4 +-- .../java/com/evsuite/abrp/MainActivity.java | 34 +++++++------------ app/src/main/res/color/choice_background.xml | 5 --- app/src/main/res/color/choice_stroke.xml | 5 --- app/src/main/res/color/choice_text.xml | 5 --- .../main/res/layout-w1000dp/pane_service.xml | 4 ++- .../main/res/layout-w1000dp/pane_settings.xml | 8 +++-- app/src/main/res/layout/choice_chip.xml | 8 ----- app/src/main/res/layout/dropdown_item.xml | 13 +++++++ app/src/main/res/layout/pane_service.xml | 4 ++- app/src/main/res/layout/pane_settings.xml | 8 +++-- app/src/main/res/values/styles_app.xml | 13 +++++++ app/src/main/res/values/styles_ev.xml | 15 -------- 14 files changed, 62 insertions(+), 69 deletions(-) delete mode 100644 app/src/main/res/color/choice_background.xml delete mode 100644 app/src/main/res/color/choice_stroke.xml delete mode 100644 app/src/main/res/color/choice_text.xml delete mode 100644 app/src/main/res/layout/choice_chip.xml create mode 100644 app/src/main/res/layout/dropdown_item.xml diff --git a/SPECS.md b/SPECS.md index 410abca..85c5a6f 100644 --- a/SPECS.md +++ b/SPECS.md @@ -112,8 +112,11 @@ tyre pressures, GPS (lat, lon, elevation, heading) and the is_* flags. It does * INGEST_TOKEN) into git and pushed it. Commit amended and force-pushed; both values regenerated in the now gitignored `k8s/secrets.yaml` (since moved to `k8s/secrets/secrets.yaml`, outside `kubectl apply -f k8s/`). Filled-in secrets live only there from now on. +- 2026-10-18 — App 2.16.4: drop-downs again, as Material exposed dropdown menus: their list leaves + the focus with the activity, so full screen stays (a Spinner's list is a focusable window of its + own without the full-screen flags). 2.16.3 had replaced them with buttons. - 2026-10-18 — App 2.16.3: full screen stays while choosing or reading a dialog. Drop-downs (upload - frequency, tyre unit, accent colour) are now buttons on the page: a drop-down is a window of its + frequency, tyre unit, accent colour) became buttons on the page: a drop-down is a window of its own without the full-screen flags, so the car showed its bars while it was open. Dialogs are shown unfocusable, given the activity's full-screen flags, then allowed focus (`showKeepingFullScreen`); none of them takes typing. diff --git a/app/build.gradle b/app/build.gradle index baed5bc..cb04d10 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -34,8 +34,8 @@ android { applicationId "com.stinnesbeck.nilsmg4" minSdk 27 targetSdk 36 - versionCode 87 - versionName "2.16.3" + versionCode 88 + versionName "2.16.4" // Nothing about the server ships in the APK: its URL and ingest token are entered in // the app's Server tab (ServerConfig), and the database is only reachable by the server. diff --git a/app/src/main/java/com/evsuite/abrp/MainActivity.java b/app/src/main/java/com/evsuite/abrp/MainActivity.java index eb48a7b..3ddcdf4 100644 --- a/app/src/main/java/com/evsuite/abrp/MainActivity.java +++ b/app/src/main/java/com/evsuite/abrp/MainActivity.java @@ -126,7 +126,7 @@ public class MainActivity extends AppCompatActivity { /** Upload page: live telemetry switch and cadence. */ private SwitchMaterial liveTelemetrySwitch, boostSwitch, voiceKeySwitch, fullScreenSwitch; private TextView steeringKeysText; - private com.google.android.material.chip.ChipGroup intervalChoices; + private com.google.android.material.textfield.MaterialAutoCompleteTextView intervalChoices; private TextInputLayout lowSocLayout; private TextInputEditText lowSocInput; @@ -1126,28 +1126,18 @@ public class MainActivity extends AppCompatActivity { } /** - * A single choice as buttons on the page (choice_chip.xml), in place of a drop-down: a - * drop-down opens a window of its own that is not full screen, and the car's bars came back - * while it was open. Rebinding replaces the buttons, so it may be called again. + * A single choice as a drop-down (Widget.EV.Dropdown). An exposed dropdown menu rather than + * a Spinner: a Spinner's list is a focusable window of its own without the full-screen + * flags, and the car showed its bars while it was open; this list leaves the focus with + * the activity. setSimpleItems keeps every option listed (a plain adapter would filter the + * list down to the current text). Rebinding is safe. */ - private void bindChoices(com.google.android.material.chip.ChipGroup group, String[] labels, int selected, - java.util.function.IntConsumer onPick) { - group.setOnCheckedStateChangeListener(null); - group.removeAllViews(); - for (int i = 0; i < labels.length; i++) { - com.google.android.material.chip.Chip chip = (com.google.android.material.chip.Chip) - getLayoutInflater().inflate(R.layout.choice_chip, group, false); - chip.setId(View.generateViewId()); - chip.setText(labels[i]); - chip.setTag(i); - group.addView(chip); - if (i == selected) chip.setChecked(true); - } - group.setOnCheckedStateChangeListener((g, checkedIds) -> { - if (checkedIds.isEmpty()) return; - View chosen = g.findViewById(checkedIds.get(0)); - if (chosen != null) onPick.accept((Integer) chosen.getTag()); - }); + private void bindChoices(com.google.android.material.textfield.MaterialAutoCompleteTextView view, + String[] labels, int selected, java.util.function.IntConsumer onPick) { + view.setOnItemClickListener(null); + view.setSimpleItems(labels); + view.setText(labels[selected], false); + view.setOnItemClickListener((parent, item, position, id) -> onPick.accept(position)); } /** The accent colour; a change recreates the activity so every view takes it. */ diff --git a/app/src/main/res/color/choice_background.xml b/app/src/main/res/color/choice_background.xml deleted file mode 100644 index c941703..0000000 --- a/app/src/main/res/color/choice_background.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/app/src/main/res/color/choice_stroke.xml b/app/src/main/res/color/choice_stroke.xml deleted file mode 100644 index c0e21ef..0000000 --- a/app/src/main/res/color/choice_stroke.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/app/src/main/res/color/choice_text.xml b/app/src/main/res/color/choice_text.xml deleted file mode 100644 index 60b46ae..0000000 --- a/app/src/main/res/color/choice_text.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/app/src/main/res/layout-w1000dp/pane_service.xml b/app/src/main/res/layout-w1000dp/pane_service.xml index bdff841..1298c51 100644 --- a/app/src/main/res/layout-w1000dp/pane_service.xml +++ b/app/src/main/res/layout-w1000dp/pane_service.xml @@ -27,7 +27,9 @@ - + + + diff --git a/app/src/main/res/layout-w1000dp/pane_settings.xml b/app/src/main/res/layout-w1000dp/pane_settings.xml index a096c71..113c246 100644 --- a/app/src/main/res/layout-w1000dp/pane_settings.xml +++ b/app/src/main/res/layout-w1000dp/pane_settings.xml @@ -9,9 +9,13 @@ - + + + - + + + diff --git a/app/src/main/res/layout/choice_chip.xml b/app/src/main/res/layout/choice_chip.xml deleted file mode 100644 index f0f8440..0000000 --- a/app/src/main/res/layout/choice_chip.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - diff --git a/app/src/main/res/layout/dropdown_item.xml b/app/src/main/res/layout/dropdown_item.xml new file mode 100644 index 0000000..623a16f --- /dev/null +++ b/app/src/main/res/layout/dropdown_item.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/layout/pane_service.xml b/app/src/main/res/layout/pane_service.xml index d29a516..b53b64f 100644 --- a/app/src/main/res/layout/pane_service.xml +++ b/app/src/main/res/layout/pane_service.xml @@ -24,7 +24,9 @@ - + + + diff --git a/app/src/main/res/layout/pane_settings.xml b/app/src/main/res/layout/pane_settings.xml index 0a5b350..ced79f4 100644 --- a/app/src/main/res/layout/pane_settings.xml +++ b/app/src/main/res/layout/pane_settings.xml @@ -8,9 +8,13 @@ - + + + - + + + diff --git a/app/src/main/res/values/styles_app.xml b/app/src/main/res/values/styles_app.xml index 1b39cf5..7c74ff9 100644 --- a/app/src/main/res/values/styles_app.xml +++ b/app/src/main/res/values/styles_app.xml @@ -43,6 +43,19 @@ @color/ev_text_secondary @style/Text.EV.Secondary + + - -