feat: add ota and ui changes
This commit is contained in:
@@ -1,41 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EVSuite tokens - LIGHT theme. See DESIGN.md section Colors.
|
||||
Generated by tools/sync-tokens.mjs and identical in all six apps: edit
|
||||
tools/tokens/colors.light.xml, not this copy, and re-check the ratios.
|
||||
|
||||
Contrast: this screen is read in daylight, usually through a reflection. Every
|
||||
text colour clears 7:1 (AAA) on every surface it can land on, not the 4.5:1 AA
|
||||
minimum, which collapses as soon as outside brightness rises. The AAA floor
|
||||
applies to the light theme too - a badly contrasted light theme is no more
|
||||
readable than a badly contrasted dark one. -->
|
||||
<!-- User-requested app-specific OLED palette. -->
|
||||
<resources>
|
||||
<color name="ev_background">#FFF2F4F7</color>
|
||||
<color name="ev_surface">#FFFFFFFF</color>
|
||||
<color name="ev_surface_raised">#FFE4E8ED</color>
|
||||
<!-- Card border. Without it, surface and surface_raised merge in sunlight.
|
||||
4.07:1 on ev_surface - above the 3:1 floor for non-text UI (WCAG 1.4.11),
|
||||
which the previous #4A525B (2.25:1) did not clear. -->
|
||||
<color name="ev_outline">#FF737F8F</color>
|
||||
<color name="ev_text_primary">#FF101418</color>
|
||||
<!-- 7.22:1 worst case (on ev_surface_raised). -->
|
||||
<color name="ev_text_secondary">#FF414B55</color>
|
||||
<!-- A deep cyan, not the dark theme's pale one: a pale cyan on white falls to
|
||||
1.5:1 and disappears outright in daylight. 7.69:1 worst case. -->
|
||||
<color name="ev_accent">#FF044C63</color>
|
||||
<color name="ev_on_accent">#FFFFFFFF</color>
|
||||
|
||||
<!-- Status. Never the sole carrier of meaning: a text label always accompanies
|
||||
the colour. -->
|
||||
<color name="ev_ok">#FF09501F</color>
|
||||
<color name="ev_warn">#FF6B3A00</color>
|
||||
<color name="ev_error">#FF8F0F18</color>
|
||||
|
||||
<!-- Pressed: an alpha veil over the surface, not a different hue, so a pressed
|
||||
card still reads as the same card. -->
|
||||
<color name="ev_pressed">#14000000</color>
|
||||
<color name="ev_pressed_strong">#29000000</color>
|
||||
|
||||
<!-- Launcher icon tile. The same in light and dark: it is the suite's mark, not
|
||||
a surface. See DESIGN.md section Iconography. -->
|
||||
<color name="ev_icon_tile">#FF2A2A2A</color>
|
||||
<color name="ev_background">#000000</color>
|
||||
<color name="ev_surface">#121212</color>
|
||||
<color name="ev_surface_raised">#1B1D1E</color>
|
||||
<color name="ev_outline">#363B3D</color>
|
||||
<color name="ev_text_primary">#F4F3EF</color>
|
||||
<color name="ev_text_secondary">#BDC4C6</color>
|
||||
<color name="ev_accent">#D8C39A</color>
|
||||
<color name="ev_on_accent">#17140E</color>
|
||||
<color name="ev_cyan">#A0E2E0</color>
|
||||
<color name="ev_cyan_deep">#103436</color>
|
||||
<color name="ev_gold_surface">#28241B</color>
|
||||
<color name="ev_ok">#A4DCC1</color>
|
||||
<color name="ev_warn">#E9CA96</color>
|
||||
<color name="ev_error">#FFB4AB</color>
|
||||
<color name="ev_pressed">#16FFFFFF</color>
|
||||
<color name="ev_pressed_strong">#28FFFFFF</color>
|
||||
<color name="ev_icon_tile">#121212</color>
|
||||
<color name="ev_transparent">#00000000</color>
|
||||
</resources>
|
||||
|
||||
@@ -1,27 +1,12 @@
|
||||
<resources>
|
||||
<string name="window_close_title">Kapı açılınca camları kapat</string>
|
||||
<string name="window_close_hint">P konumunda ve araç dururken WinClose kapı sinyaliyle dört cama 5 saniye kapatma komutu gönderilir. ABRP yüklemesinden bağımsız çalışır.</string>
|
||||
<string name="window_close_stopped">Cam kapatma kapalı</string>
|
||||
<string name="window_close_waiting">WinClose kapı sinyali bekleniyor</string>
|
||||
<string name="window_close_closing">Dört cama kapatma komutu gönderiliyor…</string>
|
||||
<string name="window_close_sent">5 saniyelik komut tamamlandı. Cam konumu sensörsüz olduğu için doğrulanamıyor.</string>
|
||||
<string name="window_close_interrupted">Kapatma durdu veya komut gönderilemedi</string>
|
||||
<string name="window_close_unavailable">Cam bağlantısı henüz hazır değil</string>
|
||||
<string name="window_close_start_failed">Cam servisi başlatılamadı</string>
|
||||
<string name="window_close_unsupported">Bu cam entegrasyonu yalnızca SWI69 için etkin</string>
|
||||
<string name="window_close_no_system_uid">Bu sürüm araca yazamıyor (sistem imzası gerekli)</string>
|
||||
<string name="window_close_notification">P ve 0 km/sa: kapı açılınca dört camı kapat</string>
|
||||
<string name="window_close_disable">Kapat</string>
|
||||
<string name="window_close_log_title">Olay kaydı</string>
|
||||
<string name="app_name">Fatih\'sMG4</string>
|
||||
|
||||
<!-- Main screen -->
|
||||
<string name="tab_abrp">ABRP</string>
|
||||
<string name="tab_service">Upload Service</string>
|
||||
<string name="tab_vehicle">Araç</string>
|
||||
<string name="tab_windows">Pencereler</string>
|
||||
<string name="tab_service">Aktarım</string>
|
||||
<string name="tab_vehicle">Genel</string>
|
||||
<string name="tab_wifi">Wi-Fi</string>
|
||||
<string name="tab_log">Log</string>
|
||||
<string name="tab_log">Kayıtlar</string>
|
||||
|
||||
<!-- Wi-Fi page -->
|
||||
<string name="wifi_card_title">Wi-Fi Bağlantısı</string>
|
||||
@@ -62,9 +47,9 @@
|
||||
<string name="helper_token">Find your token in the ABRP app: Settings → Connections → Generic (Manual Entry)</string>
|
||||
<string name="desc_toggle_api_key">Show or hide API key</string>
|
||||
<string name="desc_toggle_token">Show or hide user token</string>
|
||||
<string name="btn_save">Save</string>
|
||||
<string name="btn_test">Test Connection</string>
|
||||
<string name="btn_import">Import file</string>
|
||||
<string name="btn_save">Kaydet</string>
|
||||
<string name="btn_test">Bağlantıyı test et</string>
|
||||
<string name="btn_import">Dosyadan al</string>
|
||||
|
||||
<!-- Config file import -->
|
||||
<string name="import_ok">Config imported — press Test to verify</string>
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0"?>
|
||||
<resources>
|
||||
<string name="design_battery_short">Batarya</string>
|
||||
<string name="design_probe">VHAL Probe</string>
|
||||
<string name="design_brand">MG⁴</string>
|
||||
<string name="design_brand_caption">Fatih’s MG4</string>
|
||||
<string name="design_brand_footer">ELEKTRİKLE YOLDA</string>
|
||||
<string name="design_overview_title">Sürüşe bir bakış.</string>
|
||||
<string name="design_overview_subtitle">Aracından gelen veriler, tek bir yerde.</string>
|
||||
<string name="design_abrp_title">Rotana bağlan.</string>
|
||||
<string name="design_abrp_subtitle">ABRP hesabınla aracını buluştur.</string>
|
||||
<string name="design_service_title">Sen yola odaklan.</string>
|
||||
<string name="design_service_subtitle">Verilerin arka planda güncel kalsın.</string>
|
||||
<string name="design_wifi_title">Bağlantıda kal.</string>
|
||||
<string name="design_wifi_subtitle">Yolculuğunun internet bağlantısı.</string>
|
||||
<string name="design_log_title">Her aktarım, burada.</string>
|
||||
<string name="design_log_subtitle">Son gönderimlerin durumu ve ayrıntıları.</string>
|
||||
<string name="design_battery">BATARYA</string>
|
||||
<string name="design_energy">ENERJİ VE SICAKLIK</string>
|
||||
<string name="design_tires">LASTİK BASINÇLARI</string>
|
||||
<string name="design_account">HESAP BAĞLANTISI</string>
|
||||
<string name="design_private_title">Sana özel bağlantı.</string>
|
||||
<string name="design_private_body">Token, aracını ABRP hesabına bağlar. Bilgilerin bu cihazda şifreli saklanır.</string>
|
||||
<string name="design_no_data">Okunamayan veriler — olarak gösterilir.</string>
|
||||
<string name="design_service_controls">AKTARIM KONTROLÜ</string>
|
||||
<string name="design_service_timing">GÜNCELLEME SIKLIĞI</string>
|
||||
<string name="design_car_desc">Lastik basınçlarının araç üzerindeki konumları</string>
|
||||
</resources>
|
||||
@@ -1,69 +1,88 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Per-app styles (not synced by tools/sync-tokens.mjs — see styles_ev.xml for the
|
||||
shared set). -->
|
||||
<resources>
|
||||
|
||||
<!-- Icon-over-label nav tab, identical to EVProfile's and EVTasker's. The tabs
|
||||
share the bar's width equally, so the label has to shrink rather than push its
|
||||
neighbours around: hence autoSize and a single line. Selected state is
|
||||
View.isSelected, set by MainActivity.markCurrentPage, read by the
|
||||
res/color/nav_tab_*.xml selectors — no color is ever set from code. -->
|
||||
<style name="Widget.EV.NavTab" parent="Widget.Material3.Button.OutlinedButton">
|
||||
<item name="android:minWidth">0dp</item>
|
||||
<item name="android:minHeight">0dp</item>
|
||||
<item name="android:insetTop">0dp</item>
|
||||
<item name="android:insetBottom">0dp</item>
|
||||
<item name="android:paddingStart">@dimen/spacing_xs</item>
|
||||
<item name="android:paddingEnd">@dimen/spacing_xs</item>
|
||||
<item name="android:paddingTop">@dimen/spacing_xs</item>
|
||||
<item name="android:paddingBottom">@dimen/spacing_xs</item>
|
||||
<item name="android:maxLines">1</item>
|
||||
<item name="android:textStyle">bold</item>
|
||||
<item name="android:letterSpacing">0.02</item>
|
||||
<item name="android:textAllCaps">false</item>
|
||||
<item name="android:textColor">@color/nav_tab_foreground</item>
|
||||
<item name="autoSizeTextType">uniform</item>
|
||||
<item name="autoSizeMinTextSize">12sp</item>
|
||||
<item name="autoSizeMaxTextSize">@dimen/text_label</item>
|
||||
<item name="iconGravity">top</item>
|
||||
<item name="iconSize">28dp</item>
|
||||
<item name="iconPadding">@dimen/spacing_xs</item>
|
||||
<item name="iconTint">@color/nav_tab_foreground</item>
|
||||
<item name="backgroundTint">@color/nav_tab_background</item>
|
||||
<item name="strokeColor">@color/nav_tab_stroke</item>
|
||||
<item name="strokeWidth">1dp</item>
|
||||
<item name="cornerRadius">@dimen/ev_corner</item>
|
||||
<item name="elevation">0dp</item>
|
||||
</style>
|
||||
|
||||
<!-- Vehicle page. A label/value table: the label takes the slack (stretchColumns=0)
|
||||
and the value is right-aligned so the numbers line up down the column, which
|
||||
is what makes a reading legible at a glance from the driver's seat. -->
|
||||
<style name="DataRow" parent="">
|
||||
<item name="android:layout_width">match_parent</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:paddingTop">@dimen/spacing_sm</item>
|
||||
<item name="android:paddingBottom">@dimen/spacing_sm</item>
|
||||
<item name="android:gravity">center_vertical</item>
|
||||
</style>
|
||||
|
||||
<style name="DataLabel" parent="Text.EV.Body">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:textColor">@color/ev_text_secondary</item>
|
||||
</style>
|
||||
|
||||
<style name="DataValue" parent="Text.EV.Body">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:paddingStart">@dimen/spacing_md</item>
|
||||
<item name="android:gravity">end</item>
|
||||
<item name="android:textStyle">bold</item>
|
||||
<item name="android:textColor">@color/ev_text_primary</item>
|
||||
<!-- Placeholder, replaced on the first refresh tick. A dash, never a zero:
|
||||
see the note at the top of pane_vehicle.xml. -->
|
||||
<item name="android:text">—</item>
|
||||
</style>
|
||||
|
||||
|
||||
<style name="Widget.EV.NavTab" parent="Widget.Material3.Button.OutlinedButton">
|
||||
<item name="android:minWidth">0dp</item>
|
||||
<item name="android:minHeight">64dp</item>
|
||||
<item name="android:insetTop">0dp</item>
|
||||
<item name="android:insetBottom">0dp</item>
|
||||
<item name="android:paddingStart">16dp</item>
|
||||
<item name="android:paddingEnd">12dp</item>
|
||||
<item name="android:gravity">start|center_vertical</item>
|
||||
<item name="android:maxLines">1</item>
|
||||
<item name="android:fontFamily">sans-serif-medium</item>
|
||||
<item name="android:textSize">16sp</item>
|
||||
<item name="android:textAllCaps">false</item>
|
||||
<item name="android:textColor">@color/nav_tab_foreground</item>
|
||||
<item name="iconGravity">start</item>
|
||||
<item name="iconSize">24dp</item>
|
||||
<item name="iconPadding">12dp</item>
|
||||
<item name="iconTint">@color/nav_tab_foreground</item>
|
||||
<item name="backgroundTint">@color/nav_tab_background</item>
|
||||
<item name="strokeColor">@color/nav_tab_stroke</item>
|
||||
<item name="strokeWidth">1dp</item>
|
||||
<item name="cornerRadius">18dp</item>
|
||||
<item name="elevation">0dp</item>
|
||||
</style>
|
||||
<style name="Widget.EV.NavTab.Compact">
|
||||
<item name="android:paddingStart">2dp</item>
|
||||
<item name="android:paddingEnd">2dp</item>
|
||||
<item name="android:gravity">center</item>
|
||||
<item name="iconGravity">top</item>
|
||||
<item name="iconPadding">5dp</item>
|
||||
</style>
|
||||
<style name="Widget.EV.Input" parent="Widget.Material3.TextInputLayout.OutlinedBox">
|
||||
<item name="boxBackgroundColor">@color/ev_background</item>
|
||||
<item name="boxStrokeColor">@color/input_stroke</item>
|
||||
<item name="boxStrokeWidth">1dp</item>
|
||||
<item name="boxStrokeWidthFocused">2dp</item>
|
||||
<item name="boxCornerRadiusTopStart">16dp</item>
|
||||
<item name="boxCornerRadiusTopEnd">16dp</item>
|
||||
<item name="boxCornerRadiusBottomStart">16dp</item>
|
||||
<item name="boxCornerRadiusBottomEnd">16dp</item>
|
||||
<item name="hintTextColor">@color/ev_accent</item>
|
||||
<item name="endIconTint">@color/ev_text_secondary</item>
|
||||
<item name="helperTextTextAppearance">@style/Text.EV.Secondary</item>
|
||||
</style>
|
||||
<style name="Text.EV.Eyebrow" parent="Text.EV.SectionHeader">
|
||||
<item name="android:textSize">16sp</item>
|
||||
<item name="android:textColor">@color/ev_accent</item>
|
||||
<item name="android:fontFamily">sans-serif-medium</item>
|
||||
<item name="android:letterSpacing">0.12</item>
|
||||
</style>
|
||||
<style name="Text.EV.Hero" parent="Text.EV.Display">
|
||||
<item name="android:textSize">48sp</item>
|
||||
<item name="android:fontFamily">sans-serif-light</item>
|
||||
<item name="android:letterSpacing">-0.025</item>
|
||||
<item name="android:fontFeatureSettings">tnum</item>
|
||||
</style>
|
||||
<style name="Text.EV.Metric" parent="Text.EV.Display">
|
||||
<item name="android:textSize">34sp</item>
|
||||
<item name="android:fontFamily">sans-serif-light</item>
|
||||
<item name="android:fontFeatureSettings">tnum</item>
|
||||
</style>
|
||||
<style name="Text.EV.Metric.Compact">
|
||||
<item name="android:textSize">28sp</item>
|
||||
</style>
|
||||
<style name="DataRow" parent="">
|
||||
<item name="android:layout_width">match_parent</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:minHeight">48dp</item>
|
||||
<item name="android:paddingTop">10dp</item>
|
||||
<item name="android:paddingBottom">10dp</item>
|
||||
<item name="android:gravity">center_vertical</item>
|
||||
</style>
|
||||
<style name="DataLabel" parent="Text.EV.Secondary">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
</style>
|
||||
<style name="DataValue" parent="Text.EV.Body">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:paddingStart">16dp</item>
|
||||
<item name="android:gravity">end</item>
|
||||
<item name="android:fontFamily">sans-serif-medium</item>
|
||||
<item name="android:fontFeatureSettings">tnum</item>
|
||||
<item name="android:textColor">@color/ev_text_primary</item>
|
||||
<item name="android:text">—</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EVSuite - component styles. See DESIGN.md section Components.
|
||||
Generated by tools/sync-tokens.mjs: identical in all six apps, edit only
|
||||
tools/tokens/styles.xml. The application theme itself stays in values/themes.xml,
|
||||
because its name changes from one app to the next.
|
||||
|
||||
These styles carry the same names everywhere, so a screen can move between
|
||||
repositories without being renamed. -->
|
||||
<!-- EVABRPUploader components. The user-requested OLED theme intentionally
|
||||
overrides the shared EVSuite tokens; see AGENTS.md for the local design direction. -->
|
||||
<resources>
|
||||
|
||||
<!-- Dialogs inherit the same contrast as everything else: without this they fall
|
||||
@@ -24,6 +19,12 @@
|
||||
away. This is the minimum used everywhere in the suite, including where
|
||||
Material offers something much smaller. -->
|
||||
<style name="Widget.EV.Button" parent="Widget.Material3.Button">
|
||||
<item name="android:textAllCaps">false</item>
|
||||
<item name="android:fontFamily">sans-serif-medium</item>
|
||||
<item name="android:letterSpacing">0.01</item>
|
||||
<item name="backgroundTint">@color/ev_accent</item>
|
||||
<item name="android:textColor">@color/ev_on_accent</item>
|
||||
<item name="elevation">0dp</item>
|
||||
<item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay.EV.Button</item>
|
||||
<item name="android:minHeight">@dimen/touch_target</item>
|
||||
<item name="android:textSize">@dimen/text_body</item>
|
||||
@@ -32,6 +33,11 @@
|
||||
</style>
|
||||
|
||||
<style name="Widget.EV.Button.Outlined" parent="Widget.Material3.Button.OutlinedButton">
|
||||
<item name="android:textAllCaps">false</item>
|
||||
<item name="android:fontFamily">sans-serif-medium</item>
|
||||
<item name="backgroundTint">@color/ev_surface_raised</item>
|
||||
<item name="strokeColor">@color/ev_outline</item>
|
||||
<item name="android:textColor">@color/ev_text_primary</item>
|
||||
<item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay.EV.Button</item>
|
||||
<item name="android:minHeight">@dimen/touch_target</item>
|
||||
<item name="android:textSize">@dimen/text_body</item>
|
||||
@@ -64,14 +70,14 @@
|
||||
<item name="android:textStyle">bold</item>
|
||||
</style>
|
||||
|
||||
<!-- One Display element per screen: two 32sp numbers competing for attention are
|
||||
two glances, and the glance is the budget. -->
|
||||
<!-- Shared typography base; the overview uses larger hero and metric variants. -->
|
||||
<style name="Text.EV.Display" parent="TextAppearance.Material3.HeadlineSmall">
|
||||
<item name="android:textSize">@dimen/text_display</item>
|
||||
<item name="android:textColor">@color/ev_text_primary</item>
|
||||
</style>
|
||||
|
||||
<style name="Text.EV.Title" parent="TextAppearance.Material3.TitleLarge">
|
||||
<item name="android:fontFamily">sans-serif-medium</item>
|
||||
<item name="android:textSize">@dimen/text_title</item>
|
||||
<item name="android:textColor">@color/ev_text_primary</item>
|
||||
</style>
|
||||
@@ -86,11 +92,8 @@
|
||||
<item name="android:textColor">@color/ev_text_secondary</item>
|
||||
</style>
|
||||
|
||||
<!-- The suite radius applied to buttons. Material3 buttons are fully rounded by
|
||||
default, which reads as a different design language from every card and dialog
|
||||
around them. This lived in EVSwipe only, in a generated file, so the first sync
|
||||
deleted it — one radius across the suite has to be a token, not a local edit. -->
|
||||
<!-- Rounded corners echo the glass panels without making every button a pill. -->
|
||||
<style name="ShapeAppearanceOverlay.EV.Button" parent="">
|
||||
<item name="cornerSize">@dimen/ev_corner</item>
|
||||
<item name="cornerSize">18dp</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<!-- DayNight, not a forced dark theme: the suite follows the vehicle's day/night
|
||||
setting. Dark is still the mode that matters - a light background filling the
|
||||
windscreen at night is glare - which is why the light palette was raised to
|
||||
the same 7:1 floor as the dark one rather than the other way round.
|
||||
Shared component styles live in styles_ev.xml. -->
|
||||
<!-- User-requested OLED theme. MainActivity fixes night mode for system widgets too. -->
|
||||
<style name="Theme.EVABRPUploader" parent="Theme.Material3.DayNight.NoActionBar">
|
||||
<item name="colorPrimary">@color/ev_accent</item>
|
||||
<item name="colorSecondary">@color/ev_cyan</item>
|
||||
<item name="colorControlActivated">@color/ev_cyan</item>
|
||||
<item name="android:fontFamily">sans-serif</item>
|
||||
<item name="android:windowLightStatusBar">false</item>
|
||||
<item name="android:windowLightNavigationBar">false</item>
|
||||
<item name="android:navigationBarColor">@color/ev_background</item>
|
||||
<item name="android:forceDarkAllowed" tools:targetApi="q">false</item>
|
||||
<item name="colorOnPrimary">@color/ev_on_accent</item>
|
||||
<item name="colorSurface">@color/ev_surface</item>
|
||||
<item name="colorSurfaceContainer">@color/ev_surface_raised</item>
|
||||
|
||||
Reference in New Issue
Block a user