diff --git a/CHANGELOG.md b/CHANGELOG.md index bf8ed852..ec9c1795 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +- Removes hardcoded Polaris-purple accents from legacy Nova XML/views so PSP / Portable Chrome uses theme-aware steel highlights. - Deepens the PSP / Portable Chrome theme into a sleeker smoked-graphite handheld shell with less washed-out white. - Adds a PSP / Portable Chrome Nova theme matching the Polaris dim Moonlight-grey early-2000s silver palette, including settings/theme-picker entries and restrained Compose library surfaces. diff --git a/app/src/main/java/com/papi/nova/AppView.kt b/app/src/main/java/com/papi/nova/AppView.kt index 12cf602a..b3de744e 100644 --- a/app/src/main/java/com/papi/nova/AppView.kt +++ b/app/src/main/java/com/papi/nova/AppView.kt @@ -278,7 +278,7 @@ class AppView : AppCompatActivity(), AdapterFragmentCallbacks { if (UiHelper.isTvDevice(this)) { swipeRefresh.isEnabled = false } - swipeRefresh.setColorSchemeColors(ContextCompat.getColor(this, R.color.nova_accent)) + swipeRefresh.setColorSchemeColors(NovaThemeManager.getAccentColor(this)) swipeRefresh.setProgressBackgroundColorSchemeColor( ContextCompat.getColor(this, R.color.nova_bg_elevated), ) diff --git a/app/src/main/java/com/papi/nova/PcView.kt b/app/src/main/java/com/papi/nova/PcView.kt index 3559eaef..259369fa 100644 --- a/app/src/main/java/com/papi/nova/PcView.kt +++ b/app/src/main/java/com/papi/nova/PcView.kt @@ -313,7 +313,7 @@ class PcView : AppCompatActivity(), AdapterFragmentCallbacks { spaceParticleView = findViewById(R.id.space_particles) val swipeRefresh = findViewById(R.id.swipe_refresh) if (swipeRefresh != null) { - swipeRefresh.setColorSchemeColors(ContextCompat.getColor(this, R.color.nova_accent)) + swipeRefresh.setColorSchemeColors(NovaThemeManager.getAccentColor(this)) swipeRefresh.setProgressBackgroundColorSchemeColor( ContextCompat.getColor(this, R.color.nova_bg_elevated), ) @@ -433,6 +433,8 @@ class PcView : AppCompatActivity(), AdapterFragmentCallbacks { swipeRefresh.setColorSchemeColors(accent) swipeRefresh.setProgressBackgroundColorSchemeColor(surface) } + findViewById(R.id.pcs_loading)?.indeterminateTintList = + ColorStateList.valueOf(accent) findViewById(R.id.pcViewTitle)?.setTextColor(textPrimary) findViewById(R.id.pcViewSectionLabel)?.setTextColor(textMuted) diff --git a/app/src/main/java/com/papi/nova/service/NovaStreamNotification.kt b/app/src/main/java/com/papi/nova/service/NovaStreamNotification.kt index 3a5e22f8..23260dac 100644 --- a/app/src/main/java/com/papi/nova/service/NovaStreamNotification.kt +++ b/app/src/main/java/com/papi/nova/service/NovaStreamNotification.kt @@ -6,6 +6,7 @@ import android.content.Context import android.os.Build import androidx.core.app.NotificationCompat import com.papi.nova.R +import com.papi.nova.ui.NovaThemeManager /** * Manages the persistent streaming notification. @@ -52,7 +53,7 @@ object NovaStreamNotification { .setPriority(NotificationCompat.PRIORITY_LOW) .setContentIntent(returnPending) .addAction(0, "Disconnect", disconnectPending) - .setColor(context.getColor(R.color.nova_accent)) + .setColor(NovaThemeManager.getAccentColor(context)) .build() val mgr = context.getSystemService(NotificationManager::class.java) diff --git a/app/src/main/java/com/papi/nova/ui/NovaSnackbar.kt b/app/src/main/java/com/papi/nova/ui/NovaSnackbar.kt index 6d2a5932..d85a740e 100644 --- a/app/src/main/java/com/papi/nova/ui/NovaSnackbar.kt +++ b/app/src/main/java/com/papi/nova/ui/NovaSnackbar.kt @@ -17,7 +17,7 @@ object NovaSnackbar { val snackbar = Snackbar.make(rootView, message, duration) snackbar.setBackgroundTint(activity.getColor(R.color.nova_bg_elevated)) snackbar.setTextColor(activity.getColor(R.color.nova_text_primary)) - snackbar.setActionTextColor(activity.getColor(R.color.nova_accent)) + snackbar.setActionTextColor(NovaThemeManager.getAccentColor(activity)) snackbar.show() } @@ -26,7 +26,7 @@ object NovaSnackbar { val snackbar = Snackbar.make(rootView, message, Snackbar.LENGTH_LONG) snackbar.setBackgroundTint(activity.getColor(R.color.nova_bg_elevated)) snackbar.setTextColor(activity.getColor(R.color.nova_error)) - snackbar.setActionTextColor(activity.getColor(R.color.nova_accent)) + snackbar.setActionTextColor(NovaThemeManager.getAccentColor(activity)) snackbar.show() } @@ -35,7 +35,7 @@ object NovaSnackbar { val snackbar = Snackbar.make(rootView, message, Snackbar.LENGTH_SHORT) snackbar.setBackgroundTint(activity.getColor(R.color.nova_bg_elevated)) snackbar.setTextColor(activity.getColor(R.color.nova_success)) - snackbar.setActionTextColor(activity.getColor(R.color.nova_accent)) + snackbar.setActionTextColor(NovaThemeManager.getAccentColor(activity)) snackbar.show() } } diff --git a/app/src/main/res/color/nova_chip_bg_selector.xml b/app/src/main/res/color/nova_chip_bg_selector.xml index 2e60e2df..9c117f14 100644 --- a/app/src/main/res/color/nova_chip_bg_selector.xml +++ b/app/src/main/res/color/nova_chip_bg_selector.xml @@ -1,5 +1,5 @@ - + diff --git a/app/src/main/res/color/nova_focus_stroke_selector.xml b/app/src/main/res/color/nova_focus_stroke_selector.xml index b03f869e..e8bf525f 100644 --- a/app/src/main/res/color/nova_focus_stroke_selector.xml +++ b/app/src/main/res/color/nova_focus_stroke_selector.xml @@ -1,6 +1,6 @@ - + diff --git a/app/src/main/res/drawable/ic_nova_star_foreground.xml b/app/src/main/res/drawable/ic_nova_star_foreground.xml index f9c0f515..5ba09c73 100644 --- a/app/src/main/res/drawable/ic_nova_star_foreground.xml +++ b/app/src/main/res/drawable/ic_nova_star_foreground.xml @@ -12,7 +12,7 @@ diff --git a/app/src/main/res/drawable/nova_atv_banner.xml b/app/src/main/res/drawable/nova_atv_banner.xml index c931660f..5f201e2e 100644 --- a/app/src/main/res/drawable/nova_atv_banner.xml +++ b/app/src/main/res/drawable/nova_atv_banner.xml @@ -20,7 +20,7 @@ android:pathData="M60,10 Q63,52 100,60 Q63,68 60,110 Q57,68 20,60 Q57,52 60,10 Z" /> + android:color="?attr/colorAccent" /> diff --git a/app/src/main/res/drawable/nova_card_focus_ring.xml b/app/src/main/res/drawable/nova_card_focus_ring.xml index 78cdf086..abf8c751 100644 --- a/app/src/main/res/drawable/nova_card_focus_ring.xml +++ b/app/src/main/res/drawable/nova_card_focus_ring.xml @@ -4,6 +4,6 @@ + android:color="?attr/colorAccent" /> diff --git a/app/src/main/res/drawable/nova_chip_default.xml b/app/src/main/res/drawable/nova_chip_default.xml index 89879899..477c025c 100644 --- a/app/src/main/res/drawable/nova_chip_default.xml +++ b/app/src/main/res/drawable/nova_chip_default.xml @@ -5,16 +5,16 @@ + android:color="?attr/colorAccent" /> - + + android:color="?attr/colorAccent" /> diff --git a/app/src/main/res/drawable/nova_chip_selected.xml b/app/src/main/res/drawable/nova_chip_selected.xml index dc7d09e4..db73bd13 100644 --- a/app/src/main/res/drawable/nova_chip_selected.xml +++ b/app/src/main/res/drawable/nova_chip_selected.xml @@ -2,7 +2,7 @@ - + @@ -11,7 +11,7 @@ - + diff --git a/app/src/main/res/drawable/nova_dialog_choice_bg.xml b/app/src/main/res/drawable/nova_dialog_choice_bg.xml index ade015f0..37babceb 100644 --- a/app/src/main/res/drawable/nova_dialog_choice_bg.xml +++ b/app/src/main/res/drawable/nova_dialog_choice_bg.xml @@ -3,28 +3,28 @@ - - + + - - + + - - + + - + diff --git a/app/src/main/res/drawable/nova_featured_action_bg.xml b/app/src/main/res/drawable/nova_featured_action_bg.xml index 0a810174..b7248d58 100644 --- a/app/src/main/res/drawable/nova_featured_action_bg.xml +++ b/app/src/main/res/drawable/nova_featured_action_bg.xml @@ -1,9 +1,9 @@ - + + android:color="?attr/colorControlHighlight" /> diff --git a/app/src/main/res/drawable/nova_ripple_accent.xml b/app/src/main/res/drawable/nova_ripple_accent.xml index 97038e9c..8866f3d1 100644 --- a/app/src/main/res/drawable/nova_ripple_accent.xml +++ b/app/src/main/res/drawable/nova_ripple_accent.xml @@ -1,7 +1,7 @@ + android:color="?attr/colorControlHighlight"> diff --git a/app/src/main/res/drawable/nova_server_row_focus_ring.xml b/app/src/main/res/drawable/nova_server_row_focus_ring.xml index 0d593e47..de7480ab 100644 --- a/app/src/main/res/drawable/nova_server_row_focus_ring.xml +++ b/app/src/main/res/drawable/nova_server_row_focus_ring.xml @@ -4,6 +4,6 @@ + android:color="?attr/colorAccent" /> diff --git a/app/src/main/res/drawable/nova_tv_banner.xml b/app/src/main/res/drawable/nova_tv_banner.xml index 564a575e..93f41f9f 100644 --- a/app/src/main/res/drawable/nova_tv_banner.xml +++ b/app/src/main/res/drawable/nova_tv_banner.xml @@ -20,7 +20,7 @@ android:fillColor="@android:color/transparent" android:pathData="M54,138 C96,116 128,106 160,104 C192,102 224,92 266,70" android:strokeAlpha="0.3" - android:strokeColor="#7c73ff" + android:strokeColor="?attr/colorAccent" android:strokeLineCap="round" android:strokeWidth="2" /> @@ -31,7 +31,7 @@ android:fillColor="#d4dde8" android:pathData="M60,10 Q63,52 100,60 Q63,68 60,110 Q57,68 20,60 Q57,52 60,10 Z" /> diff --git a/app/src/main/res/layout-land/activity_pc_view.xml b/app/src/main/res/layout-land/activity_pc_view.xml index ea28afd6..0f6c0828 100644 --- a/app/src/main/res/layout-land/activity_pc_view.xml +++ b/app/src/main/res/layout-land/activity_pc_view.xml @@ -147,7 +147,7 @@ app:cardBackgroundColor="@color/nova_bg_elevated" app:cardCornerRadius="18dp" app:cardElevation="0dp" - app:strokeColor="@color/nova_accent" + app:strokeColor="?attr/colorAccent" app:strokeWidth="1dp"> + android:indeterminate="true" /> @@ -273,7 +273,7 @@ android:layout_marginEnd="24dp" android:contentDescription="@string/profile_manager_choose_profile" app:icon="@drawable/ic_profiles" - app:backgroundTint="@color/nova_accent" + app:backgroundTint="?attr/colorAccent" app:iconTint="@color/nova_ice" /> diff --git a/app/src/main/res/layout/activity_nova_welcome.xml b/app/src/main/res/layout/activity_nova_welcome.xml index 8b0f0586..fe81bac7 100644 --- a/app/src/main/res/layout/activity_nova_welcome.xml +++ b/app/src/main/res/layout/activity_nova_welcome.xml @@ -67,7 +67,7 @@ android:letterSpacing="0.08" android:text="01 Find your host" android:textAllCaps="true" - android:textColor="@color/nova_accent" + android:textColor="?attr/colorAccent" android:textSize="11sp" /> diff --git a/app/src/main/res/layout/activity_pc_view.xml b/app/src/main/res/layout/activity_pc_view.xml index 68da4b68..ab4fe18c 100644 --- a/app/src/main/res/layout/activity_pc_view.xml +++ b/app/src/main/res/layout/activity_pc_view.xml @@ -147,7 +147,7 @@ app:cardBackgroundColor="@color/nova_bg_elevated" app:cardCornerRadius="18dp" app:cardElevation="0dp" - app:strokeColor="@color/nova_accent" + app:strokeColor="?attr/colorAccent" app:strokeWidth="1dp"> + android:indeterminate="true" /> diff --git a/app/src/main/res/layout/nova_qr_viewfinder.xml b/app/src/main/res/layout/nova_qr_viewfinder.xml index a0d26ff7..afb75294 100644 --- a/app/src/main/res/layout/nova_qr_viewfinder.xml +++ b/app/src/main/res/layout/nova_qr_viewfinder.xml @@ -11,8 +11,8 @@ android:id="@+id/zxing_viewfinder_view" android:layout_width="match_parent" android:layout_height="match_parent" - app:zxing_viewfinder_laser="@color/nova_accent" + app:zxing_viewfinder_laser="?attr/colorAccent" app:zxing_viewfinder_mask="@color/nova_overlay_dark" - app:zxing_possible_result_points="@color/nova_accent" /> + app:zxing_possible_result_points="?attr/colorAccent" /> diff --git a/app/src/main/res/layout/nova_spinner_dialog.xml b/app/src/main/res/layout/nova_spinner_dialog.xml index 65a3ceef..b85703ab 100644 --- a/app/src/main/res/layout/nova_spinner_dialog.xml +++ b/app/src/main/res/layout/nova_spinner_dialog.xml @@ -9,8 +9,7 @@ + android:indeterminate="true" /> + android:indeterminate="true" /> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 0873fd63..1e15d793 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -9,6 +9,7 @@ @color/nova_accent @android:color/transparent @color/nova_accent + @color/nova_accent_surface @color/nova_bg_elevated @color/nova_text_primary @color/nova_text_primary @@ -38,6 +39,7 @@ @android:color/black @color/nova_oled_accent @color/nova_oled_accent + @color/nova_oled_accent_surface @@ -51,6 +53,7 @@ @color/nova_miami_void @color/nova_miami_accent @color/nova_miami_accent + @color/nova_miami_accent_surface @color/nova_miami_bg_elevated @color/nova_miami_text_primary @@ -66,6 +69,7 @@ @color/nova_portable_deep @color/nova_portable_accent @color/nova_portable_accent + @color/nova_portable_accent_surface @color/nova_portable_bg_elevated @color/nova_portable_text_primary @@ -78,6 +82,7 @@ @color/nova_hc_text_secondary @color/nova_hc_accent @color/nova_hc_accent + @color/nova_hc_accent_surface @color/nova_hc_bg_elevated @color/nova_hc_text_primary @@ -121,6 +126,7 @@ @color/nova_oled_text_secondary @color/nova_oled_accent @color/nova_oled_accent + @color/nova_oled_accent_surface @color/nova_oled_bg_elevated @color/nova_oled_text_primary @android:color/black @@ -134,6 +140,7 @@ @color/nova_miami_text_secondary @color/nova_miami_accent @color/nova_miami_accent + @color/nova_miami_accent_surface @color/nova_miami_bg_elevated @color/nova_miami_text_primary @color/nova_miami_void @@ -147,6 +154,7 @@ @color/nova_portable_text_secondary @color/nova_portable_accent @color/nova_portable_accent + @color/nova_portable_accent_surface @color/nova_portable_bg_elevated @color/nova_portable_text_primary @color/nova_portable_deep @@ -159,6 +167,7 @@ @color/nova_hc_text_secondary @color/nova_hc_accent @color/nova_hc_accent + @color/nova_hc_accent_surface @color/nova_hc_bg_elevated @color/nova_hc_text_primary @@ -170,6 +179,7 @@ @color/nova_bg_window @color/nova_accent @color/nova_accent + @color/nova_accent_surface @color/nova_bg_elevated @color/nova_text_primary @color/nova_text_primary @@ -187,7 +197,7 @@ diff --git a/app/src/test/java/com/papi/nova/ui/NovaFocusDrawableTest.kt b/app/src/test/java/com/papi/nova/ui/NovaFocusDrawableTest.kt index ba24ff9c..3cc16092 100644 --- a/app/src/test/java/com/papi/nova/ui/NovaFocusDrawableTest.kt +++ b/app/src/test/java/com/papi/nova/ui/NovaFocusDrawableTest.kt @@ -21,14 +21,14 @@ class NovaFocusDrawableTest { doc.documentElement.tagName == "shape" ) assertTrue( - "focus ring should include a clear nova_accent stroke", - hasStroke(doc, "3dp", "@color/nova_accent") + "focus ring should follow the active theme accent instead of hardcoding Polaris violet", + hasStroke(doc, "3dp", "?attr/colorAccent") ) } @Test - fun chipFocusedStatesUseCleanHighContrastStroke() { - assertFocusedStroke("src/main/res/drawable/nova_chip_default.xml", "3dp", "@color/nova_accent") + fun chipFocusedStatesUseCleanThemeAwareStroke() { + assertFocusedStroke("src/main/res/drawable/nova_chip_default.xml", "3dp", "?attr/colorAccent") assertFocusedStroke("src/main/res/drawable/nova_chip_selected.xml", "3dp", "@color/nova_ice") } @@ -50,7 +50,7 @@ class NovaFocusDrawableTest { val rowRing = parseXml("src/main/res/drawable/nova_server_row_focus_ring.xml") assertTrue( "server row focus ring should use a slimmer accent stroke", - hasStroke(rowRing, "2dp", "@color/nova_accent") + hasStroke(rowRing, "2dp", "?attr/colorAccent") ) }