Skip to content

Commit 115061a

Browse files
committed
feat: adopt MikuBoxForSingbox theme foundation
- Move to Material3 Expressive (material 1.14.0) with an AppThemeBase that mirrors MikuBoxForSingbox's theme: the MikuRay colour-role attrs (colorBg, colorCard, accentOr*, primaryOr*, fabColorBackground, selectedColorPrimary, whiteOrTextPrimary) and rounded 8/12/16dp shape appearances. - Declare the shape-image-view / DynamicShapeImageView / UwuHeaderIconView styleables the ported layouts will use. - Keep the Miku teal/cyan palette as Theme.MikuBoxCla on top of the base.
1 parent 63fc403 commit 115061a

5 files changed

Lines changed: 127 additions & 13 deletions

File tree

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="24.0"
5+
android:viewportHeight="24.0"
6+
android:tint="?attr/colorControlNormal">
7+
<path
8+
android:fillColor="#FFFFFFFF"
9+
android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
10+
</vector>

app/src/main/res/values-night/themes.xml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<resources xmlns:tools="http://schemas.android.com/tools">
33

4-
<style name="Theme.MikuBoxCla" parent="Theme.Material3.DayNight.NoActionBar">
4+
<style name="Theme.MikuBoxCla" parent="AppThemeBase">
55
<item name="colorPrimary">@color/miku_primary_dark</item>
66
<item name="colorOnPrimary">@color/miku_on_primary_dark</item>
77
<item name="colorPrimaryContainer">@color/miku_primary_container_dark</item>
@@ -11,9 +11,6 @@
1111
<item name="colorOnSecondaryContainer">@color/miku_on_secondary_container_dark</item>
1212
<item name="colorTertiary">@color/miku_tertiary_dark</item>
1313
<item name="colorTertiaryContainer">@color/miku_tertiary_container_dark</item>
14-
15-
<item name="android:statusBarColor">@android:color/transparent</item>
16-
<item name="android:navigationBarColor">@android:color/transparent</item>
1714
<item name="android:windowLightStatusBar" tools:targetApi="m">false</item>
1815
</style>
1916

app/src/main/res/values/attrs.xml

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,61 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<resources>
3+
<!-- MikuRay theme-system colour roles that the ported layouts reference. -->
4+
<attr name="colorMaterial100" format="color" />
5+
<attr name="colorMaterial300" format="color" />
6+
<attr name="accentOrTextSecondary" format="color" />
7+
<attr name="accentOrTextPrimary" format="color" />
8+
<attr name="primaryOrTextSecondary" format="color" />
9+
<attr name="primaryOrTextPrimary" format="color" />
10+
<attr name="fabColorBackground" format="color" />
11+
<attr name="selectedColorPrimary" format="color" />
12+
<attr name="whiteOrTextPrimary" format="color" />
13+
<attr name="colorBg" format="color" />
14+
<attr name="colorCard" format="color" />
15+
16+
<!-- Shape image view (DynamicShapeImageView / ProfileBannerImageView). -->
17+
<attr name="siArrowPosition">
18+
<enum name="left" value="0" />
19+
<enum name="right" value="1" />
20+
</attr>
21+
<attr name="siBorderType">
22+
<enum name="stroke" value="0" />
23+
<enum name="fill" value="1" />
24+
</attr>
25+
<attr name="siStrokeCap">
26+
<enum name="butt" value="0" />
27+
<enum name="round" value="1" />
28+
<enum name="square" value="2" />
29+
</attr>
30+
<attr name="siStrokeJoin">
31+
<enum name="bevel" value="0" />
32+
<enum name="miter" value="1" />
33+
<enum name="round" value="2" />
34+
</attr>
35+
<declare-styleable name="ShaderImageView">
36+
<attr name="siSquare" format="boolean" />
37+
<attr name="siBorderColor" format="color" />
38+
<attr name="siBorderWidth" format="dimension" />
39+
<attr name="siBorderAlpha" format="float" />
40+
<attr name="siForeground" format="integer|reference" />
41+
<attr name="siRadius" format="dimension" />
42+
<attr name="siArrowPosition" />
43+
<attr name="siTriangleHeight" format="dimension" />
44+
<attr name="siShape" format="integer|reference" />
45+
<attr name="siBorderType" />
46+
<attr name="siStrokeCap" />
47+
<attr name="siStrokeJoin" />
48+
<attr name="siStrokeMiter" format="dimension" />
49+
</declare-styleable>
50+
51+
<declare-styleable name="DynamicShapeImageView">
52+
<attr name="shapeBackgroundColor" format="color|reference" />
53+
</declare-styleable>
54+
55+
<declare-styleable name="UwuHeaderIconView">
56+
<attr name="sectionIcon" format="reference" />
57+
</declare-styleable>
58+
359
<declare-styleable name="ParticlesView">
460
<attr name="minDotRadius" format="dimension" />
561
<attr name="maxDotRadius" format="dimension" />

app/src/main/res/values/themes.xml

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,50 @@
22
<resources xmlns:tools="http://schemas.android.com/tools">
33

44
<!--
5-
Miku base theme. A Material3 DayNight theme seeded from Hatsune Miku's
6-
teal with a pink accent, providing the brand colour roles the UwU-style
7-
home shell consumes (?colorPrimary, ?colorSecondaryContainer, …).
5+
Base theme ported from MikuBoxForSingbox: Material3 Expressive with the
6+
MikuRay colour-role shims (colorBg / colorCard / accentOr* / …) that the
7+
ported layouts reference. The concrete palette is applied by the child
8+
Theme.MikuBoxCla below.
89
-->
9-
<style name="Theme.MikuBoxCla" parent="Theme.Material3.DayNight.NoActionBar">
10+
<style name="AppThemeBase" parent="Theme.Material3Expressive.DayNight.NoActionBar">
11+
<item name="android:statusBarColor">@android:color/transparent</item>
12+
<item name="android:navigationBarColor">@android:color/transparent</item>
13+
<item name="android:windowLightStatusBar">true</item>
14+
<item name="shapeAppearanceSmallComponent">@style/ShapeAppearance.App.SmallComponent</item>
15+
<item name="shapeAppearanceMediumComponent">@style/ShapeAppearance.App.MediumComponent</item>
16+
<item name="shapeAppearanceLargeComponent">@style/ShapeAppearance.App.LargeComponent</item>
17+
<item name="android:colorBackground">?colorBg</item>
18+
<item name="android:windowBackground">?colorBg</item>
19+
<item name="colorBg">?colorSurfaceVariant</item>
20+
<item name="colorCard">?colorSurfaceContainerLow</item>
21+
<item name="android:scrollbarSize">0.0dip</item>
22+
<item name="android:listDivider">@null</item>
23+
<item name="android:colorEdgeEffect">@null</item>
24+
<item name="elevation">0.0dip</item>
25+
26+
<item name="colorMaterial100">?attr/colorPrimaryContainer</item>
27+
<item name="colorMaterial300">?attr/colorSecondaryContainer</item>
28+
<item name="accentOrTextSecondary">?attr/colorSecondary</item>
29+
<item name="accentOrTextPrimary">?attr/colorSecondary</item>
30+
<item name="primaryOrTextSecondary">?attr/colorPrimary</item>
31+
<item name="primaryOrTextPrimary">?attr/colorPrimary</item>
32+
<item name="fabColorBackground">?attr/colorPrimary</item>
33+
<item name="selectedColorPrimary">?attr/colorPrimary</item>
34+
<item name="whiteOrTextPrimary">?attr/colorOnPrimary</item>
35+
<item name="itemShapeFillColor">?attr/colorSecondaryContainer</item>
36+
<item name="tabTextColor">?attr/colorOnSurfaceVariant</item>
37+
<item name="tabSelectedTextColor">?attr/colorPrimary</item>
38+
<item name="tabIndicatorColor">?attr/colorPrimary</item>
39+
<item name="tabRippleColor">?attr/colorPrimary</item>
40+
<item name="windowActionModeOverlay">true</item>
41+
<item name="actionModeCloseDrawable">@drawable/ic_navigation_close</item>
42+
<item name="windowActionBar">false</item>
43+
<item name="windowNoTitle">true</item>
44+
<item name="itemShapeAppearance">@style/ShapeAppearance.App.MediumComponent</item>
45+
</style>
46+
47+
<!-- Hatsune Miku teal/cyan palette on top of the Expressive base. -->
48+
<style name="Theme.MikuBoxCla" parent="AppThemeBase">
1049
<item name="colorPrimary">@color/miku_primary</item>
1150
<item name="colorOnPrimary">@color/miku_on_primary</item>
1251
<item name="colorPrimaryContainer">@color/miku_primary_container</item>
@@ -16,14 +55,26 @@
1655
<item name="colorOnSecondaryContainer">@color/miku_on_secondary_container</item>
1756
<item name="colorTertiary">@color/miku_tertiary</item>
1857
<item name="colorTertiaryContainer">@color/miku_tertiary_container</item>
19-
20-
<item name="android:statusBarColor">@android:color/transparent</item>
21-
<item name="android:navigationBarColor">@android:color/transparent</item>
2258
<item name="android:windowLightStatusBar" tools:targetApi="m">true</item>
2359
</style>
2460

61+
<style name="ShapeAppearance.App.SmallComponent" parent="ShapeAppearance.Material3.Corner.Small">
62+
<item name="cornerFamily">rounded</item>
63+
<item name="cornerSize">8dp</item>
64+
</style>
65+
66+
<style name="ShapeAppearance.App.MediumComponent" parent="ShapeAppearance.Material3.Corner.Medium">
67+
<item name="cornerFamily">rounded</item>
68+
<item name="cornerSize">12dp</item>
69+
</style>
70+
71+
<style name="ShapeAppearance.App.LargeComponent" parent="ShapeAppearance.Material3.Corner.Large">
72+
<item name="cornerFamily">rounded</item>
73+
<item name="cornerSize">16dp</item>
74+
</style>
75+
2576
<!-- Invisible host for the VpnService consent handshake. -->
26-
<style name="Theme.MikuBoxCla.Translucent" parent="Theme.Material3.DayNight.NoActionBar">
77+
<style name="Theme.MikuBoxCla.Translucent" parent="Theme.Material3Expressive.DayNight.NoActionBar">
2778
<item name="android:windowIsTranslucent">true</item>
2879
<item name="android:windowBackground">@android:color/transparent</item>
2980
<item name="android:windowContentOverlay">@null</item>

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ kotlin = "2.4.10-RC"
66
# AndroidX / Material (stable)
77
coreKtx = "1.13.1"
88
appcompat = "1.7.0"
9-
material = "1.12.0"
9+
material = "1.14.0"
1010
constraintlayout = "2.1.4"
1111
activity = "1.9.3"
1212
coroutines = "1.10.2"

0 commit comments

Comments
 (0)