From c589e5f9e44dfff9d440b827fe4b1fe8ba852fff Mon Sep 17 00:00:00 2001 From: Andrew Ridgway Date: Sat, 18 Jul 2026 23:48:33 +1000 Subject: [PATCH] design: Material Design 3 redesign across all layouts and themes - colors.xml: replaced legacy palette with M3 semantic tokens (primary, secondary, tertiary, surface containers, outline, status) - themes.xml + values-night/themes.xml: switched to Theme.Material3.DayNight.NoActionBar, mapped all M3 color roles, transparent system bars for edge-to-edge, M3 typography - attrs.xml: custom semantic attrs (colorSuccess, colorWarning, colorInfo) - strings.xml: added accessibility labels, loading/empty/error strings - activity_login.xml: centered branding, M3 headline/body, skeleton card - activity_main.xml: edge-to-edge CoordinatorLayout, M3 AppBar/toolbar, health indicator group, M3 banner, M3 TabLayout - fragment_job_form.xml: grouped fields in outlined cards (12dp radius), FilledBox text inputs, TonalButtons, 16dp margins - fragment_job_status.xml: chip-style badge, LinearProgressIndicator, centered card with error/try-again states - fragment_result.xml: SuggestionChip badge, WebView fills space, bottom action bar in outlined card - activity_admin.xml + item_admin_user.xml: M3 card list items, proper type scale hierarchy - Updated drawables to use theme attributes Refs DESIGN.md Material Design 3 + Amazon/Google guidelines. --- .../main/res/drawable/bg_banner_warning.xml | 7 +- app/src/main/res/drawable/bg_status_badge.xml | 6 + .../main/res/drawable/ic_circle_status.xml | 7 +- app/src/main/res/layout/activity_admin.xml | 41 +++- app/src/main/res/layout/activity_login.xml | 105 +++++++-- app/src/main/res/layout/activity_main.xml | 90 +++++--- app/src/main/res/layout/fragment_job_form.xml | 208 ++++++++++++------ .../main/res/layout/fragment_job_status.xml | 48 ++-- app/src/main/res/layout/fragment_result.xml | 96 +++++--- app/src/main/res/layout/item_admin_user.xml | 34 ++- app/src/main/res/values-night/themes.xml | 102 +++++++-- app/src/main/res/values/attrs.xml | 18 ++ app/src/main/res/values/colors.xml | 94 ++++++-- app/src/main/res/values/strings.xml | 23 ++ app/src/main/res/values/themes.xml | 104 +++++++-- 15 files changed, 756 insertions(+), 227 deletions(-) create mode 100644 app/src/main/res/drawable/bg_status_badge.xml create mode 100644 app/src/main/res/values/attrs.xml diff --git a/app/src/main/res/drawable/bg_banner_warning.xml b/app/src/main/res/drawable/bg_banner_warning.xml index 24271aa..8899820 100644 --- a/app/src/main/res/drawable/bg_banner_warning.xml +++ b/app/src/main/res/drawable/bg_banner_warning.xml @@ -1,5 +1,6 @@ - - - + + + diff --git a/app/src/main/res/drawable/bg_status_badge.xml b/app/src/main/res/drawable/bg_status_badge.xml new file mode 100644 index 0000000..ca2b6e0 --- /dev/null +++ b/app/src/main/res/drawable/bg_status_badge.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_circle_status.xml b/app/src/main/res/drawable/ic_circle_status.xml index 7d3a35f..5aa801b 100644 --- a/app/src/main/res/drawable/ic_circle_status.xml +++ b/app/src/main/res/drawable/ic_circle_status.xml @@ -1,9 +1,10 @@ + diff --git a/app/src/main/res/layout/activity_admin.xml b/app/src/main/res/layout/activity_admin.xml index 8d6f461..0f03c45 100644 --- a/app/src/main/res/layout/activity_admin.xml +++ b/app/src/main/res/layout/activity_admin.xml @@ -1,25 +1,50 @@ - + android:background="?attr/colorSurface" + android:orientation="vertical" + tools:context=".ui.AdminActivity"> + android:layout_height="wrap_content" + android:background="?attr/colorSurface" + app:elevation="0dp" + app:liftOnScroll="false"> + app:titleCentered="true" + app:titleTextAppearance="?attr/textAppearanceTitleLarge" + app:titleTextColor="?attr/colorOnSurface" /> - + android:layout_height="0dp" + android:layout_margin="16dp" + android:layout_weight="1" + app:cardCornerRadius="12dp" + app:cardElevation="0dp" + app:strokeColor="?attr/colorOutlineVariant" + app:strokeWidth="1dp"> + + + diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 369520e..865c71e 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -1,42 +1,119 @@ + android:background="?attr/colorSurface" + android:padding="16dp" + tools:context=".ui.LoginActivity"> - + + + + + + + + + + + + + + app:layout_constraintStart_toStartOf="parent" + app:tint="?attr/colorOnPrimaryContainer" /> - + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 274b5b5..4bc971f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,25 +1,33 @@ - + android:background="?attr/colorSurface" + android:fitsSystemWindows="true" + app:elevation="0dp" + app:liftOnScroll="false"> + app:titleCentered="true" + app:titleTextAppearance="?attr/textAppearanceTitleLarge" + app:titleTextColor="?attr/colorOnSurface"> + android:minHeight="32dp" + android:orientation="horizontal" + android:paddingHorizontal="12dp" + android:paddingVertical="4dp"> - + android:textAppearance="?attr/textAppearanceLabelMedium" + android:textColor="?attr/colorOnSurface" /> + + + + - - - - + android:layout_height="match_parent" + android:background="?attr/colorSurface" + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> - + diff --git a/app/src/main/res/layout/fragment_job_form.xml b/app/src/main/res/layout/fragment_job_form.xml index 031e6d0..e05c1e5 100644 --- a/app/src/main/res/layout/fragment_job_form.xml +++ b/app/src/main/res/layout/fragment_job_form.xml @@ -1,111 +1,187 @@ + tools:context=".ui.JobFormFragment"> + android:orientation="vertical" + android:padding="16dp"> - + app:cardCornerRadius="12dp" + app:cardElevation="0dp" + app:strokeColor="?attr/colorOutlineVariant" + app:strokeWidth="1dp"> - - + android:orientation="vertical" + android:padding="16dp"> - + - - - - + android:layout_marginTop="12dp" + android:hint="@string/hint_job_title" + app:boxBackgroundColor="?attr/colorSurfaceContainer" + app:hintTextColor="?attr/colorOnSurfaceVariant" + style="@style/Widget.Material3.TextInputLayout.FilledBox"> - - + + - + + + + + + + + + + + + + + + + + + app:cardCornerRadius="12dp" + app:cardElevation="0dp" + app:strokeColor="?attr/colorOutlineVariant" + app:strokeWidth="1dp"> - - + android:orientation="vertical" + android:padding="16dp"> - + - + - - + + + + + + + + + - diff --git a/app/src/main/res/layout/fragment_job_status.xml b/app/src/main/res/layout/fragment_job_status.xml index 6fe9dbc..8aa4818 100644 --- a/app/src/main/res/layout/fragment_job_status.xml +++ b/app/src/main/res/layout/fragment_job_status.xml @@ -1,22 +1,28 @@ + android:padding="16dp"> + app:cardElevation="0dp" + app:strokeColor="?attr/colorOutlineVariant" + app:strokeWidth="1dp"> @@ -24,45 +30,53 @@ android:id="@+id/statusBadge" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center_horizontal" - android:background="@drawable/bg_banner_warning" + android:background="@drawable/bg_status_badge" + android:contentDescription="@string/status_queued" + android:gravity="center" + android:minHeight="32dp" android:paddingHorizontal="16dp" android:paddingVertical="4dp" android:text="@string/status_queued" - android:textAppearance="?attr/textAppearanceBody2" - android:textStyle="bold" /> + android:textAppearance="?attr/textAppearanceLabelLarge" + android:textColor="?attr/colorOnPrimary" /> - + android:layout_marginTop="24dp" + android:contentDescription="@string/content_generation_running" + android:indeterminate="true" + app:indicatorColor="?attr/colorPrimary" + app:trackColor="?attr/colorSurfaceContainerHighest" /> + android:textAppearance="?attr/textAppearanceBodyLarge" + android:textColor="?attr/colorOnSurface" /> diff --git a/app/src/main/res/layout/fragment_result.xml b/app/src/main/res/layout/fragment_result.xml index b991da0..7bc585e 100644 --- a/app/src/main/res/layout/fragment_result.xml +++ b/app/src/main/res/layout/fragment_result.xml @@ -1,21 +1,29 @@ - + android:background="?attr/colorSurface" + android:orientation="vertical" + tools:context=".ui.ResultFragment"> + android:layout_marginHorizontal="16dp" + android:layout_marginTop="16dp" + android:layout_marginBottom="8dp" + app:cardCornerRadius="12dp" + app:cardElevation="0dp" + app:strokeColor="?attr/colorOutlineVariant" + app:strokeWidth="1dp"> @@ -23,11 +31,15 @@ android:id="@+id/resultBadge" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:background="@drawable/bg_banner_warning" + android:background="@drawable/bg_status_badge" + android:contentDescription="@string/status_completed" + android:gravity="center" + android:minHeight="32dp" android:paddingHorizontal="12dp" android:paddingVertical="4dp" android:text="@string/status_completed" - android:textStyle="bold" /> + android:textAppearance="?attr/textAppearanceLabelLarge" + android:textColor="?attr/colorOnPrimary" /> @@ -54,31 +71,46 @@ android:id="@+id/resultWebView" android:layout_width="match_parent" android:layout_height="0dp" - android:layout_marginHorizontal="12dp" - android:layout_weight="1" /> + android:layout_marginHorizontal="16dp" + android:layout_weight="1" + android:contentDescription="@string/result_preview" /> - + android:layout_marginHorizontal="16dp" + android:layout_marginTop="8dp" + android:layout_marginBottom="16dp" + app:cardCornerRadius="12dp" + app:cardElevation="0dp" + app:strokeColor="?attr/colorOutlineVariant" + app:strokeWidth="1dp"> - + android:orientation="horizontal" + android:padding="12dp"> - - + + + + + diff --git a/app/src/main/res/layout/item_admin_user.xml b/app/src/main/res/layout/item_admin_user.xml index 0d8061e..848a510 100644 --- a/app/src/main/res/layout/item_admin_user.xml +++ b/app/src/main/res/layout/item_admin_user.xml @@ -1,15 +1,20 @@ - + android:layout_marginHorizontal="16dp" + android:layout_marginVertical="4dp" + app:cardCornerRadius="12dp" + app:cardElevation="0dp" + app:strokeColor="?attr/colorOutlineVariant" + app:strokeWidth="1dp"> @@ -23,28 +28,35 @@ android:id="@+id/userEmail" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textAppearance="?attr/textAppearanceBody1" - android:textStyle="bold" /> + android:textAppearance="?attr/textAppearanceBodyLarge" + android:textColor="?attr/colorOnSurface" /> + android:layout_marginTop="2dp" + android:textAppearance="?attr/textAppearanceBodyMedium" + android:textColor="?attr/colorOnSurfaceVariant" /> + android:layout_marginTop="4dp" + android:textAppearance="?attr/textAppearanceLabelSmall" + android:textColor="?attr/colorOnSurfaceVariant" /> + android:contentDescription="@string/cd_admin_action" + android:minWidth="72dp" + android:text="@string/block_user" + android:textColor="?attr/colorError" /> diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index 9d9df44..616ef8b 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,16 +1,90 @@ - - - \ No newline at end of file + diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 0000000..da6fcce --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index beaeb61..b32f2da 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,20 +1,86 @@ - #FFBB86FC - #FF6200EE - #FF3700B3 - #FF03DAC5 - #FF018786 + + + + #6750A4 + #FFFFFF + #EADDFF + #21005D + + + #625B71 + #FFFFFF + #E8DEF8 + #1D192B + + + #7D5260 + #FFFFFF + #FFD8E4 + #31111D + + + #FFFBFE + #1D1B20 + #E7E0EC + #49454F + #FFFFFF + #F5EFF7 + #F3EDF7 + #ECE6F0 + #E6E0E9 + + + #79747E + #CAC4D0 + + + #4CAF50 + #FFFFFF + #D9F6DA + #1F5E22 + + #FF9800 + #FFFFFF + #FFE3B6 + #693B00 + + #F44336 + #FFFFFF + #F9DEDC + #410E0B + + #2196F3 + #FFFFFF + #D4EAFB + #0B4576 + + + #322F35 + #F5EFF7 + #D0BCFF + + + @color/success + @color/warning + @color/error + + + @color/primary_container + @color/primary + @color/on_primary_container + @color/secondary_container + @color/secondary + #FF000000 #FFFFFFFF - #FF4CAF50 - #FFFFC107 - #FFF44336 - #FFFFF3E0 - #FFE65100 - #FF9E9E9E - #FF2196F3 - #FF4CAF50 - #FFF44336 + @color/warning_container + @color/on_warning_container + + @color/surface_container_highest + @color/info + @color/success + @color/error diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b86b09c..d89cd44 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -45,6 +45,19 @@ Copied to clipboard Nothing to copy + + resBuilder app logo + Sign in with Google + Loading + Service health indicator + Scrape job description from SEEK URL + Upload existing resume or cover letter + Copy generated text to clipboard + Start a new job + Export as PDF + Export as DOCX + Toggle user block status + Admin Panel Block @@ -52,4 +65,14 @@ Action completed Action failed %1$d / %2$d + + + Content generation is running + Estimated: %1$s + Nothing here yet + Submit a job to see results. + Something went wrong + We could not load this screen. Please try again. + Free limit reached + Result preview diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index bb472dc..3fd0e56 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,16 +1,92 @@ - - - \ No newline at end of file + +