App 2.25.0: Overview style MG, octagonal dials

After the classic MG dashboards: three octagonal dials with chrome
bezels, cream scales and accent-coloured needles for speed, battery and
power, and a cream line of odometer, trip, usage, climate and clock.
No MG logo. Emulator only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LhzAVaUyqcw5PkGjz4mWW6
This commit is contained in:
2026-10-24 20:31:47 +02:00
co-authored by Claude Opus 5.5
parent ef296683aa
commit 1af5b0efe7
9 changed files with 308 additions and 8 deletions
@@ -65,6 +65,7 @@ public class MainActivity extends AppCompatActivity {
private SciFiView sciFiView;
private CartoonView cartoonView;
private BlueprintView blueprintView;
private OctagonView octagonView;
/** The pane of each Overview style, by its index in {@link #OVERVIEW_STYLES}. */
private View[] stylePanes;
private View consumptionPane;
@@ -250,10 +251,11 @@ public class MainActivity extends AppCompatActivity {
sciFiView = new SciFiView(this, null);
cartoonView = new CartoonView(this, null);
blueprintView = new BlueprintView(this, null);
octagonView = new OctagonView(this, null);
View sciFiPane = drawnPane(sciFiView), cartoonPane = drawnPane(cartoonView),
blueprintPane = drawnPane(blueprintView);
blueprintPane = drawnPane(blueprintView), mgPane = drawnPane(octagonView);
stylePanes = new View[] { vehiclePane, gaugesPane, cockpitPane, retroPane, retroPane,
futuristicPane, sciFiPane, cartoonPane, blueprintPane };
futuristicPane, sciFiPane, cartoonPane, blueprintPane, mgPane };
// The Overview page holds every style; Settings → Overview style picks the one shown.
android.widget.FrameLayout overviewPage = new android.widget.FrameLayout(this);
overviewPage.setLayoutParams(new android.view.ViewGroup.LayoutParams(
@@ -267,6 +269,7 @@ public class MainActivity extends AppCompatActivity {
overviewPage.addView(sciFiPane);
overviewPage.addView(cartoonPane);
overviewPage.addView(blueprintPane);
overviewPage.addView(mgPane);
consumptionPane = inflatePane(R.layout.pane_consumption);
chargingPane = inflatePane(R.layout.pane_charging);
settingsPane = inflatePane(R.layout.pane_settings);
@@ -1451,7 +1454,7 @@ public class MainActivity extends AppCompatActivity {
/** The stored values of the Overview styles, in the order of the drop-down. */
private static final String[] OVERVIEW_STYLES = { "TILES", "GAUGES", "COCKPIT", "RETRO", "RETRO_ACCENT", "FUTURISTIC",
"SCIFI", "CARTOON", "BLUEPRINT" };
"SCIFI", "CARTOON", "BLUEPRINT", "MG" };
/** The chosen style's index in {@link #OVERVIEW_STYLES}; anything unknown is Tiles. */
private int overviewStyle() {
@@ -1474,7 +1477,7 @@ public class MainActivity extends AppCompatActivity {
getString(R.string.overview_style_cockpit), getString(R.string.overview_style_retro),
getString(R.string.overview_style_retro_accent), getString(R.string.overview_style_futuristic),
getString(R.string.overview_style_scifi), getString(R.string.overview_style_cartoon),
getString(R.string.overview_style_blueprint) };
getString(R.string.overview_style_blueprint), getString(R.string.overview_style_mg) };
bindChoices(settingsPane.findViewById(R.id.overview_style_choices), labels, overviewStyle(),
position -> {
prefs.edit().putString(PREF_OVERVIEW_STYLE, OVERVIEW_STYLES[position]).apply();
@@ -1536,6 +1539,7 @@ public class MainActivity extends AppCompatActivity {
sciFiView.setValues(v);
cartoonView.setValues(v);
blueprintView.setValues(v);
octagonView.setValues(v);
}
// ---------- Cockpit (Overview style) ----------