From 20d7379b45ea9abb8ffe81a2d4beee6c0541b519 Mon Sep 17 00:00:00 2001 From: Chizhen Zhang Date: Wed, 16 Sep 2026 19:47:38 +0800 Subject: [PATCH 1/3] Restyle Home and Chat after OmniTavern's classic light/dark theme MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the Material-default purple look with the neutral, modern style of OmniTavern's built-in "经典白 / 经典黑" presets (values taken from its theme-store.js): cool-gray page, white surfaces, slate text, #199AFF accent, and a GitHub-dark-style night palette. Structural changes, not just color: - Home: character cards become flat list rows with a hairline divider inset past the avatar; avatars go from circles to 48dp rounded squares, and the muted hash-derived initial colors are mapped onto a saturated palette at render time (stored accent_color values are untouched). - Chat: assistant bubbles drop the 1dp stroke for a light elevation shadow; the "‹" text back button becomes a vector chevron; header and composer get hairline dividers; search/message inputs become bordered white pills. - Typography: header 28sp bold -> 22sp medium, names 16sp medium. - Fix: the theme never set colorSecondary, so the create-character FAB was rendering in Material's default teal (#03DAC6). It now follows the accent. Other screens pick up the new palette through the shared color tokens but keep their existing layouts for now. Verified: ./gradlew testDebugUnitTest lintDebug assembleDebug passes. No on-device screenshot this session (emulator lacks hypervisor support here). Co-Authored-By: Claude Opus 5 --- .../zcz/javatavern/ui/CharacterAdapter.java | 10 ++++- app/src/main/res/drawable/bg_agent_badge.xml | 2 +- app/src/main/res/drawable/bg_agent_card.xml | 7 +-- .../main/res/drawable/bg_character_card.xml | 19 ++++---- .../main/res/drawable/bg_character_tag.xml | 2 +- app/src/main/res/drawable/bg_input.xml | 5 ++- .../res/drawable/bg_message_assistant.xml | 3 -- app/src/main/res/layout/activity_chat.xml | 45 ++++++++++++------- app/src/main/res/layout/activity_main.xml | 18 ++++---- app/src/main/res/layout/item_character.xml | 31 +++++++------ app/src/main/res/layout/item_message.xml | 6 ++- app/src/main/res/values-night/colors.xml | 32 ++++++------- app/src/main/res/values/colors.xml | 25 ++++++----- app/src/main/res/values/strings.xml | 1 + app/src/main/res/values/styles.xml | 4 +- app/src/main/res/values/themes.xml | 2 + 16 files changed, 121 insertions(+), 91 deletions(-) diff --git a/app/src/main/java/com/zcz/javatavern/ui/CharacterAdapter.java b/app/src/main/java/com/zcz/javatavern/ui/CharacterAdapter.java index 50c4251..ee06988 100644 --- a/app/src/main/java/com/zcz/javatavern/ui/CharacterAdapter.java +++ b/app/src/main/java/com/zcz/javatavern/ui/CharacterAdapter.java @@ -30,6 +30,11 @@ public interface OnCharacterEditListener { } private static final String RESOURCE_PREFIX = "res:"; + // Stored accent colors are muted hash-derived RGB; map them onto a saturated palette at render time. + private static final int[] AVATAR_PALETTE = { + 0xFF3B82F6, 0xFF6366F1, 0xFF8B5CF6, 0xFFEC4899, 0xFFF43F5E, + 0xFFF97316, 0xFFF59E0B, 0xFF10B981, 0xFF14B8A6, 0xFF0EA5E9 + }; private final List items; private final OnCharacterClickListener listener; private final OnCharacterEditListener editListener; @@ -150,8 +155,9 @@ private void renderInitialFallback(CharacterViewHolder holder, CharacterProfile holder.portrait.setVisibility(View.GONE); holder.initialAvatar.setText(character.getName().substring(0, 1)); GradientDrawable background = new GradientDrawable(); - background.setShape(GradientDrawable.OVAL); - background.setColor(character.getAccentColor()); + background.setShape(GradientDrawable.RECTANGLE); + background.setCornerRadius(12f * holder.itemView.getResources().getDisplayMetrics().density); + background.setColor(AVATAR_PALETTE[Math.floorMod(character.getAccentColor(), AVATAR_PALETTE.length)]); holder.initialAvatar.setBackground(background); holder.initialAvatar.setVisibility(View.VISIBLE); } diff --git a/app/src/main/res/drawable/bg_agent_badge.xml b/app/src/main/res/drawable/bg_agent_badge.xml index ebe260c..5f83a88 100644 --- a/app/src/main/res/drawable/bg_agent_badge.xml +++ b/app/src/main/res/drawable/bg_agent_badge.xml @@ -2,5 +2,5 @@ - + diff --git a/app/src/main/res/drawable/bg_agent_card.xml b/app/src/main/res/drawable/bg_agent_card.xml index 9c34ac7..9c6d771 100644 --- a/app/src/main/res/drawable/bg_agent_card.xml +++ b/app/src/main/res/drawable/bg_agent_card.xml @@ -1,12 +1,9 @@ - + + android:color="@color/border" /> diff --git a/app/src/main/res/drawable/bg_character_card.xml b/app/src/main/res/drawable/bg_character_card.xml index fc22416..1251f28 100644 --- a/app/src/main/res/drawable/bg_character_card.xml +++ b/app/src/main/res/drawable/bg_character_card.xml @@ -1,9 +1,12 @@ - - - - - + + + + + + + + diff --git a/app/src/main/res/drawable/bg_character_tag.xml b/app/src/main/res/drawable/bg_character_tag.xml index eee74d8..5f83a88 100644 --- a/app/src/main/res/drawable/bg_character_tag.xml +++ b/app/src/main/res/drawable/bg_character_tag.xml @@ -2,5 +2,5 @@ - + diff --git a/app/src/main/res/drawable/bg_input.xml b/app/src/main/res/drawable/bg_input.xml index bea4d17..118b8a5 100644 --- a/app/src/main/res/drawable/bg_input.xml +++ b/app/src/main/res/drawable/bg_input.xml @@ -2,5 +2,8 @@ - + + diff --git a/app/src/main/res/drawable/bg_message_assistant.xml b/app/src/main/res/drawable/bg_message_assistant.xml index 9c6d771..e51d26d 100644 --- a/app/src/main/res/drawable/bg_message_assistant.xml +++ b/app/src/main/res/drawable/bg_message_assistant.xml @@ -3,7 +3,4 @@ android:shape="rectangle"> - diff --git a/app/src/main/res/layout/activity_chat.xml b/app/src/main/res/layout/activity_chat.xml index 0e1b8a1..0af4f58 100644 --- a/app/src/main/res/layout/activity_chat.xml +++ b/app/src/main/res/layout/activity_chat.xml @@ -1,5 +1,6 @@ + android:paddingStart="4dp" + android:paddingEnd="8dp"> - + android:contentDescription="@string/navigate_back" + android:src="@drawable/ic_chevron_left" + app:tint="@color/text_primary" /> + android:textSize="17sp" /> + + + + + android:insetTop="3dp" + android:insetBottom="3dp" + android:text="@string/send" + app:cornerRadius="22dp" /> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 10dc2ce..6e2f998 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -28,18 +28,18 @@ + android:textSize="22sp" /> + android:textSize="13sp" /> diff --git a/app/src/main/res/layout/item_character.xml b/app/src/main/res/layout/item_character.xml index ae7a8cc..ecb50c5 100644 --- a/app/src/main/res/layout/item_character.xml +++ b/app/src/main/res/layout/item_character.xml @@ -3,29 +3,30 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="12dp" android:background="@drawable/bg_character_card" android:clickable="true" - android:elevation="3dp" android:focusable="true" android:foreground="?attr/selectableItemBackground" android:gravity="center_vertical" - android:minHeight="96dp" + android:minHeight="72dp" android:orientation="horizontal" - android:padding="16dp"> + android:paddingStart="10dp" + android:paddingTop="12dp" + android:paddingEnd="4dp" + android:paddingBottom="12dp"> + android:layout_width="48dp" + android:layout_height="48dp"> + android:textSize="18sp" /> + app:shapeAppearanceOverlay="@style/ShapeAppearanceAvatar" /> @@ -58,10 +57,10 @@ android:layout_height="wrap_content" android:layout_weight="1" android:ellipsize="end" + android:fontFamily="sans-serif-medium" android:maxLines="1" android:textColor="@color/text_primary" - android:textSize="17sp" - android:textStyle="bold" /> + android:textSize="16sp" /> diff --git a/app/src/main/res/layout/item_message.xml b/app/src/main/res/layout/item_message.xml index f4d6755..fd809a5 100644 --- a/app/src/main/res/layout/item_message.xml +++ b/app/src/main/res/layout/item_message.xml @@ -3,13 +3,15 @@ android:id="@+id/messageContainer" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="10dp" - android:orientation="horizontal"> + android:layout_marginBottom="6dp" + android:orientation="horizontal" + android:padding="2dp"> diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 3f63731..ebd9d39 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -1,20 +1,22 @@ - #C9B8F0 - #B19CDD - #2E2740 - #241C38 - #141119 - #1E1A26 - #2A2434 - #3A3346 - #EBE6F2 - #A79EB2 - #E0A48F - #82C7A3 + #2F81F7 + #79C0FF + #2E79C0FF + #FFFFFF + #171B20 + #1E232A + #1D2229 + #30363D + #14F0F6FC + #F0F6FC + #8B98A7 + #FBBF24 + #2EA043 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 5a02e8e..2d8d61c 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,15 +1,20 @@ + - #65558F - #4F3F75 - #DFD4ED + #199AFF + #0B66C2 + #24199AFF #FFFFFF - #F7F4FA + #F4F5F6 #FFFFFF - #EEEAF2 - #E1DAE7 - #242126 - #6F6873 - #8B4A35 - #2F6B4F + #FFFFFF + #5294A3B8 + #0D000000 + #0F172A + #64748B + #D97706 + #16A34A diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 517c42f..7a3f656 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -87,6 +87,7 @@ 没有找到匹配消息 取消 ‹ + 返回 › 发送 停止 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 0be5448..43da13f 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,8 +1,8 @@ -