Migrate app themes to Material 3

This commit is contained in:
Isira Seneviratne 2025-09-21 11:22:31 +05:30
parent abfde872f1
commit fa371849cb
17 changed files with 269 additions and 277 deletions

View File

@ -9,8 +9,6 @@ import static com.google.android.material.tabs.TabLayout.INDICATOR_GRAVITY_TOP;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
@ -21,7 +19,6 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
@ -44,7 +41,6 @@ import org.schabi.newpipe.settings.tabs.Tab;
import org.schabi.newpipe.settings.tabs.TabsManager;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.ServiceHelper;
import org.schabi.newpipe.util.ThemeHelper;
import org.schabi.newpipe.views.ScrollableTabLayout;
import java.util.ArrayList;
@ -242,18 +238,6 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
tabLayout.setLayoutParams(tabParams);
viewPager.setLayoutParams(pagerParams);
// change the background and icon color of the tab layout:
// service-colored at the top, app-background-colored at the bottom
tabLayout.setBackgroundColor(ThemeHelper.resolveColorFromAttr(requireContext(),
bottom ? android.R.attr.windowBackground : R.attr.colorPrimary));
@ColorInt final int iconColor = bottom
? ThemeHelper.resolveColorFromAttr(requireContext(), android.R.attr.colorAccent)
: Color.WHITE;
tabLayout.setTabRippleColor(ColorStateList.valueOf(iconColor).withAlpha(32));
tabLayout.setTabIconTint(ColorStateList.valueOf(iconColor));
tabLayout.setSelectedTabIndicatorColor(iconColor);
}
@Override

View File

@ -8,11 +8,9 @@ import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
@ -28,14 +26,6 @@ fun ScaffoldWithToolbar(
topBar = {
TopAppBar(
title = { Text(text = title) },
// TODO decide whether to use default colors instead
colors = TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.primaryContainer,
scrolledContainerColor = MaterialTheme.colorScheme.primaryContainer,
navigationIconContentColor = MaterialTheme.colorScheme.onPrimaryContainer,
titleContentColor = MaterialTheme.colorScheme.onPrimaryContainer,
actionIconContentColor = MaterialTheme.colorScheme.onPrimaryContainer,
),
navigationIcon = {
IconButton(onClick = onBackClick) {
Icon(

View File

@ -44,10 +44,7 @@ fun AboutScreen(padding: PaddingValues) {
tabIndex = pagerState.currentPage
}
TabRow(
selectedTabIndex = tabIndex,
containerColor = MaterialTheme.colorScheme.primaryContainer
) {
TabRow(selectedTabIndex = tabIndex) {
TITLES.forEachIndexed { index, titleId ->
Tab(
text = { Text(text = stringResource(titleId)) },

View File

@ -12,8 +12,8 @@
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.DayNight.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.DayNight.ActionBar">
android:theme="@style/ThemeOverlay.Material3.ActionBar"
app:popupTheme="@style/ThemeOverlay.Material3.ActionBar">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
@ -21,7 +21,6 @@
android:layout_height="?attr/actionBarSize"
android:layout_weight="1"
android:background="?attr/colorPrimary"
android:theme="@style/ToolbarTheme"
app:layout_scrollFlags="scroll|enterAlways"
app:title="@string/app_name" />

View File

@ -12,8 +12,8 @@
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.DayNight.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.DayNight.ActionBar">
android:theme="@style/ThemeOverlay.Material3.ActionBar"
app:popupTheme="@style/ThemeOverlay.Material3.ActionBar">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
@ -21,7 +21,6 @@
android:layout_height="?attr/actionBarSize"
android:layout_weight="1"
android:background="?attr/colorPrimary"
android:theme="@style/ToolbarTheme"
app:layout_scrollFlags="scroll|enterAlways"
app:title="@string/app_name" />

View File

@ -5,13 +5,10 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- since ToolbarTheme sets the tint to icons, it would make images all white,
therefore app:tint="@null" is used to undo that setting -->
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ToolbarTheme"
app:elevation="0dp">
<org.schabi.newpipe.views.CustomCollapsingToolbarLayout
@ -37,7 +34,6 @@
android:scaleType="fitCenter"
android:src="@drawable/placeholder_channel_banner"
app:layout_constraintTop_toTopOf="parent"
app:tint="@null"
tools:ignore="ContentDescription" />
<com.google.android.material.imageview.ShapeableImageView
@ -54,8 +50,7 @@
app:layout_constraintVertical_bias="1.0"
app:shapeAppearance="@style/CircularImageView"
app:strokeColor="#ffffff"
app:strokeWidth="2dp"
app:tint="@null" />
app:strokeWidth="2dp" />
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/sub_channel_avatar_view"
@ -69,7 +64,6 @@
app:shapeAppearance="@style/CircularImageView"
app:strokeColor="#ffffff"
app:strokeWidth="2dp"
app:tint="@null"
tools:visibility="visible" />
<org.schabi.newpipe.views.NewPipeTextView
@ -146,12 +140,8 @@
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
app:tabGravity="fill"
app:tabIndicatorColor="@color/white"
app:tabMode="scrollable"
app:tabRippleColor="@color/white"
app:tabTextColor="@color/white" />
app:tabMode="scrollable" />
<androidx.viewpager.widget.ViewPager
android:id="@+id/view_pager"
@ -174,8 +164,7 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="gone"
tools:visibility="visible"
/>
tools:visibility="visible" />
<!--ERROR PANEL-->
<include

View File

@ -4,16 +4,11 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.schabi.newpipe.views.ScrollableTabLayout
android:id="@+id/main_tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="?attr/colorPrimary"
app:tabRippleColor="@color/white"
app:tabIconTint="@color/white"
app:tabIndicatorColor="@color/white"
app:tabGravity="fill"
app:tabMinWidth="60dp" />

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -10,10 +9,8 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:gravity="center_vertical"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ToolbarTheme">
android:minHeight="?attr/actionBarSize">
<include
android:id="@+id/toolbar_search_container"

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
@ -18,12 +17,10 @@
android:focusable="true"
android:focusableInTouchMode="true"
android:hint="@string/search"
android:textColor="?attr/toolbarSearchColor"
android:imeOptions="actionSearch|flagNoFullscreen"
android:inputType="textFilter|textNoSuggestions"
android:maxLines="1"
android:nextFocusDown="@+id/suggestions_list"
android:theme="@style/ToolbarSearchInputTheme"
tools:ignore="RtlHardcoded" />
<FrameLayout
@ -49,7 +46,6 @@
android:contentDescription="@string/search"
android:scaleType="fitCenter"
android:src="@drawable/ic_close"
app:tint="?attr/toolbarSearchColor"
tools:ignore="RtlHardcoded" />
</FrameLayout>

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="contrastColor">@color/white</color>
<color name="defaultIconTint">@color/white</color>
</resources>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Opening Theme -->
<style name="Base.OpeningTheme" parent="Base.V21.OpeningTheme">
<item name="android:navigationBarColor">@color/dark_youtube_primary_color</item>
</style>
</resources>

View File

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base Theme -->
<style name="Base.V27" parent="Base.V21">
<item name="android:navigationBarColor">@android:color/transparent</item>
</style>
<style name="Base" parent="Base.V27"/>
<!-- Light Theme -->
<style name="Base.V27.LightTheme" parent="Base.V21.LightTheme">
<item name="android:windowLightNavigationBar">true</item>
</style>
<style name="Base.LightTheme" parent="Base.V27.LightTheme" />
<!-- Dark Theme -->
<style name="Base.V27.DarkTheme" parent="Base.V21.DarkTheme">
<item name="android:windowLightNavigationBar">false</item>
</style>
<style name="Base.DarkTheme" parent="Base.V27.DarkTheme" />
<!-- Black Theme -->
<style name="Base.V27.BlackTheme" parent="Base.V21.BlackTheme">
<!-- BlackTheme inherits DarkTheme, so no need to specify windowLightNavigationBar here -->
</style>
<style name="Base.BlackTheme" parent="Base.V27.BlackTheme" />
</resources>

View File

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base Theme -->
<style name="Base.V29" parent="Base.V27">
<item name="android:enforceNavigationBarContrast">false</item>
</style>
<style name="Base" parent="Base.V29"/>
<!-- Light Theme -->
<style name="Base.V29.LightTheme" parent="Base.V27.LightTheme">
</style>
<style name="Base.LightTheme" parent="Base.V29.LightTheme" />
<!-- Dark Theme -->
<style name="Base.V29.DarkTheme" parent="Base.V27.DarkTheme">
</style>
<style name="Base.DarkTheme" parent="Base.V29.DarkTheme" />
<!-- Black Theme -->
<style name="Base.V29.BlackTheme" parent="Base.V27.BlackTheme">
</style>
<style name="Base.BlackTheme" parent="Base.V29.BlackTheme" />
</resources>

View File

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base Theme -->
<style name="Base.V35" parent="Base.V29">
<item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
</style>
<style name="Base" parent="Base.V35"/>
<!-- Light Theme -->
<style name="Base.V35.LightTheme" parent="Base.V29.LightTheme">
</style>
<style name="Base.LightTheme" parent="Base.V35.LightTheme" />
<!-- Dark Theme -->
<style name="Base.V35.DarkTheme" parent="Base.V29.DarkTheme">
</style>
<style name="Base.DarkTheme" parent="Base.V35.DarkTheme" />
<!-- Black Theme -->
<style name="Base.V35.BlackTheme" parent="Base.V29.BlackTheme">
</style>
<style name="Base.BlackTheme" parent="Base.V35.BlackTheme" />
</resources>

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Light Theme Colors from Color.kt -->
<color name="m3_primary_light">#904A45</color>
<color name="m3_on_primary_light">#FFFFFF</color>
<color name="m3_primary_container_light">#FFDAD6</color>
<color name="m3_on_primary_container_light">#3B0908</color>
<color name="m3_secondary_light">#775653</color>
<color name="m3_on_secondary_light">#FFFFFF</color>
<color name="m3_secondary_container_light">#FFDAD6</color>
<color name="m3_on_secondary_container_light">#2C1513</color>
<color name="m3_tertiary_light">#725B2E</color>
<color name="m3_on_tertiary_light">#FFFFFF</color>
<color name="m3_tertiary_container_light">#FEDEA6</color>
<color name="m3_on_tertiary_container_light">#261900</color>
<color name="m3_error_light">#BA1A1A</color>
<color name="m3_on_error_light">#FFFFFF</color>
<color name="m3_error_container_light">#FFDAD6</color>
<color name="m3_on_error_container_light">#410002</color>
<color name="m3_background_light">#FFF8F7</color>
<color name="m3_on_background_light">#231918</color>
<color name="m3_surface_light">#FFF8F7</color>
<color name="m3_on_surface_light">#231918</color>
<color name="m3_surface_variant_light">#F5DDDB</color>
<color name="m3_on_surface_variant_light">#534342</color>
<color name="m3_outline_light">#857371</color>
<color name="m3_outline_variant_light">#D8C2BF</color>
<color name="m3_scrim_light">#000000</color>
<color name="m3_inverse_surface_light">#392E2D</color>
<color name="m3_inverse_on_surface_light">#FFEDEB</color>
<color name="m3_inverse_primary_light">#FFB3AC</color>
<color name="m3_surface_dim_light">#E8D6D4</color>
<color name="m3_surface_bright_light">#FFF8F7</color>
<color name="m3_surface_container_lowest_light">#FFFFFF</color>
<color name="m3_surface_container_low_light">#FFF0EF</color>
<color name="m3_surface_container_light">#FCEAE8</color>
<color name="m3_surface_container_high_light">#F6E4E2</color>
<color name="m3_surface_container_highest_light">#F1DEDC</color>
<!-- Dark Theme Colors from Color.kt -->
<color name="m3_primary_dark">#FFB3AC</color>
<color name="m3_on_primary_dark">#571E1B</color>
<color name="m3_primary_container_dark">#73332F</color>
<color name="m3_on_primary_container_dark">#FFDAD6</color>
<color name="m3_secondary_dark">#E7BDB8</color>
<color name="m3_on_secondary_dark">#442927</color>
<color name="m3_secondary_container_dark">#5D3F3C</color>
<color name="m3_on_secondary_container_dark">#FFDAD6</color>
<color name="m3_tertiary_dark">#E1C38C</color>
<color name="m3_on_tertiary_dark">#402D04</color>
<color name="m3_tertiary_container_dark">#584419</color>
<color name="m3_on_tertiary_container_dark">#FEDEA6</color>
<color name="m3_error_dark">#FFB4AB</color>
<color name="m3_on_error_dark">#690005</color>
<color name="m3_error_container_dark">#93000A</color>
<color name="m3_on_error_container_dark">#FFDAD6</color>
<color name="m3_background_dark">#1A1110</color>
<color name="m3_on_background_dark">#F1DEDC</color>
<color name="m3_surface_dark">#1A1110</color>
<color name="m3_on_surface_dark">#F1DEDC</color>
<color name="m3_surface_variant_dark">#534342</color>
<color name="m3_on_surface_variant_dark">#D8C2BF</color>
<color name="m3_outline_dark">#A08C8A</color>
<color name="m3_outline_variant_dark">#534342</color>
<color name="m3_scrim_dark">#000000</color>
<color name="m3_inverse_surface_dark">#F1DEDC</color>
<color name="m3_inverse_on_surface_dark">#392E2D</color>
<color name="m3_inverse_primary_dark">#904A45</color>
<color name="m3_surface_dim_dark">#1A1110</color>
<color name="m3_surface_bright_dark">#423735</color>
<color name="m3_surface_container_lowest_dark">#140C0B</color>
<color name="m3_surface_container_low_dark">#231918</color>
<color name="m3_surface_container_dark">#271D1C</color>
<color name="m3_surface_container_high_dark">#322827</color>
<color name="m3_surface_container_highest_dark">#3D3231</color>
<!-- Black Theme Specific (surface is black, others from dark) -->
<color name="m3_surface_black">#000000</color>
</resources>

View File

@ -1,158 +1,227 @@
<resources>
<!-- Opening Theme -->
<style name="Base.V21.OpeningTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<style name="OpeningTheme" parent="Theme.Material3.DayNight.NoActionBar">
<item name="colorPrimary">@android:color/transparent</item>
<item name="colorPrimaryDark">@android:color/transparent</item>
<item name="colorAccent">@android:color/transparent</item>
<item name="colorSurface">@android:color/transparent</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowBackground">@drawable/splash_background</item>
</style>
<style name="Base.OpeningTheme" parent="Base.V21.OpeningTheme">
<item name="android:navigationBarColor">@color/light_youtube_primary_color</item>
</style>
<style name="OpeningTheme" parent="Base.OpeningTheme" />
<!-- Base Theme -->
<style name="Base.V21" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="actionColor">@color/white</item>
<item name="floatingActionButtonStyle">@style/FloatingActionButtonTheme</item>
<item name="toolbarSearchColor">@color/white</item>
<style name="LightTheme" parent="Theme.Material3.Light.NoActionBar">
<!-- Material 3 Color Attributes -->
<item name="colorPrimary">@color/m3_primary_light</item>
<item name="colorOnPrimary">@color/m3_on_primary_light</item>
<item name="colorPrimaryContainer">@color/m3_primary_container_light</item>
<item name="colorOnPrimaryContainer">@color/m3_on_primary_container_light</item>
<item name="colorSecondary">@color/m3_secondary_light</item>
<item name="colorOnSecondary">@color/m3_on_secondary_light</item>
<item name="colorSecondaryContainer">@color/m3_secondary_container_light</item>
<item name="colorOnSecondaryContainer">@color/m3_on_secondary_container_light</item>
<item name="colorTertiary">@color/m3_tertiary_light</item>
<item name="colorOnTertiary">@color/m3_on_tertiary_light</item>
<item name="colorTertiaryContainer">@color/m3_tertiary_container_light</item>
<item name="colorOnTertiaryContainer">@color/m3_on_tertiary_container_light</item>
<item name="colorError">@color/m3_error_light</item>
<item name="colorOnError">@color/m3_on_error_light</item>
<item name="colorErrorContainer">@color/m3_error_container_light</item>
<item name="colorOnErrorContainer">@color/m3_on_error_container_light</item>
<item name="android:colorBackground">@color/m3_background_light</item>
<item name="colorOnBackground">@color/m3_on_background_light</item>
<item name="colorSurface">@color/m3_surface_light</item>
<item name="colorOnSurface">@color/m3_on_surface_light</item>
<item name="colorSurfaceVariant">@color/m3_surface_variant_light</item>
<item name="colorOnSurfaceVariant">@color/m3_on_surface_variant_light</item>
<item name="colorOutline">@color/m3_outline_light</item>
<item name="colorOutlineVariant">@color/m3_outline_variant_light</item>
<item name="colorSurfaceInverse">@color/m3_inverse_surface_light</item>
<item name="colorOnSurfaceInverse">@color/m3_inverse_on_surface_light</item>
<item name="colorPrimaryInverse">@color/m3_inverse_primary_light</item>
<item name="android:windowLightStatusBar">true</item>
<item name="android:windowLightNavigationBar">true</item>
<item name="android:statusBarColor">?attr/colorSurface</item> <!-- Or colorPrimary, colorSurfaceContainer etc. -->
<item name="android:navigationBarColor">?attr/colorSurfaceContainer</item> <!-- M3 standard -->
<!-- AppCompat fallbacks if needed, M3 attributes are preferred -->
<item name="windowBackground">@color/m3_background_light</item> <!-- For AppCompat -->
<item name="colorAccent">?attr/colorPrimary</item> <!-- Deprecated, map to primary or secondary -->
<!-- Custom Attributes Mapping -->
<item name="actionColor">?attr/colorOnPrimary</item> <!-- Assuming toolbar uses colorPrimary -->
<item name="toolbarSearchColor">?attr/colorOnPrimary</item> <!-- Assuming toolbar uses colorPrimary -->
<item name="colorControlActivated">?attr/colorPrimary</item>
</style>
<style name="Base" parent="Base.V21"/>
<item name="separator_color">?attr/colorOutlineVariant</item>
<item name="contrast_background_color">@color/m3_surface_container_highest_light</item>
<item name="card_item_background_color">@color/m3_surface_container_low_light</item>
<item name="card_item_contrast_color">?attr/colorOnSurface</item> <!-- Text on surfaceContainerLow -->
<item name="border_color">?attr/colorOutline</item>
<!-- Light Theme -->
<style name="Base.V21.LightTheme" parent="Base">
<item name="colorPrimary">@color/light_youtube_primary_color</item>
<item name="colorPrimaryDark">@color/light_youtube_primary_color</item>
<item name="colorAccent">@color/light_youtube_accent_color</item>
<item name="android:windowBackground">@color/light_background_color</item>
<item name="windowBackground">@color/light_background_color</item>
<!-- Styles for components -->
<item name="floatingActionButtonStyle">@style/App.FloatingActionButton</item>
<item name="materialAlertDialogTheme">@style/App.MaterialAlertDialog.Light</item>
<item name="separator_color">@color/light_separator_color</item>
<item name="contrast_background_color">@color/light_contrast_background_color</item>
<!-- Existing Drawables (Review and Update for M3) -->
<item name="checked_selector">@drawable/selector_checked_light</item>
<item name="focused_selector">@drawable/selector_focused_light</item>
<item name="toolbar_shadow">@drawable/toolbar_shadow_light</item>
<item name="selector">@drawable/selector_light</item>
<item name="colorControlHighlight">@color/light_ripple_color</item>
<item name="progress_horizontal_drawable">@drawable/progress_youtube_horizontal_light</item>
<item name="card_item_background_color">@color/light_card_item_background_color</item>
<item name="card_item_contrast_color">@color/light_card_item_contrast_color</item>
<item name="border_color">@color/light_border_color</item>
<item name="dashed_border">@drawable/dashed_border_light</item>
</style>
<style name="Base.LightTheme" parent="Base.V21.LightTheme" />
<style name="LightTheme" parent="Base.LightTheme"/>
<!-- Dark Theme -->
<style name="Base.V21.DarkTheme" parent="Base">
<item name="colorPrimary">@color/dark_youtube_primary_color</item>
<item name="colorPrimaryDark">@color/dark_youtube_primary_color</item>
<item name="colorAccent">@color/dark_youtube_accent_color</item>
<item name="android:windowBackground">@color/dark_background_color</item>
<item name="windowBackground">@color/dark_background_color</item>
<style name="DarkTheme" parent="Theme.Material3.Dark.NoActionBar">
<item name="colorPrimary">@color/m3_primary_dark</item>
<item name="colorOnPrimary">@color/m3_on_primary_dark</item>
<item name="colorPrimaryContainer">@color/m3_primary_container_dark</item>
<item name="colorOnPrimaryContainer">@color/m3_on_primary_container_dark</item>
<item name="colorSecondary">@color/m3_secondary_dark</item>
<item name="colorOnSecondary">@color/m3_on_secondary_dark</item>
<item name="colorSecondaryContainer">@color/m3_secondary_container_dark</item>
<item name="colorOnSecondaryContainer">@color/m3_on_secondary_container_dark</item>
<item name="colorTertiary">@color/m3_tertiary_dark</item>
<item name="colorOnTertiary">@color/m3_on_tertiary_dark</item>
<item name="colorTertiaryContainer">@color/m3_tertiary_container_dark</item>
<item name="colorOnTertiaryContainer">@color/m3_on_tertiary_container_dark</item>
<item name="colorError">@color/m3_error_dark</item>
<item name="colorOnError">@color/m3_on_error_dark</item>
<item name="colorErrorContainer">@color/m3_error_container_dark</item>
<item name="colorOnErrorContainer">@color/m3_on_error_container_dark</item>
<item name="android:colorBackground">@color/m3_background_dark</item>
<item name="colorOnBackground">@color/m3_on_background_dark</item>
<item name="colorSurface">@color/m3_surface_dark</item>
<item name="colorOnSurface">@color/m3_on_surface_dark</item>
<item name="colorSurfaceVariant">@color/m3_surface_variant_dark</item>
<item name="colorOnSurfaceVariant">@color/m3_on_surface_variant_dark</item>
<item name="colorOutline">@color/m3_outline_dark</item>
<item name="colorOutlineVariant">@color/m3_outline_variant_dark</item>
<item name="colorSurfaceInverse">@color/m3_inverse_surface_dark</item>
<item name="colorOnSurfaceInverse">@color/m3_inverse_on_surface_dark</item>
<item name="colorPrimaryInverse">@color/m3_inverse_primary_dark</item>
<item name="android:windowLightStatusBar">false</item>
<item name="android:windowLightNavigationBar">false</item>
<item name="android:statusBarColor">?attr/colorSurface</item>
<item name="android:navigationBarColor">?attr/colorSurfaceContainer</item>
<item name="separator_color">@color/dark_separator_color</item>
<item name="contrast_background_color">@color/dark_contrast_background_color</item>
<!-- AppCompat fallbacks -->
<item name="windowBackground">@color/m3_background_dark</item>
<item name="colorAccent">?attr/colorPrimary</item>
<!-- Custom Attributes Mapping -->
<item name="actionColor">?attr/colorOnPrimary</item>
<item name="toolbarSearchColor">?attr/colorOnPrimary</item>
<item name="colorControlActivated">?attr/colorPrimary</item>
<item name="separator_color">?attr/colorOutlineVariant</item>
<item name="contrast_background_color">@color/m3_surface_container_highest_dark</item>
<item name="card_item_background_color">@color/m3_surface_container_low_dark</item>
<item name="card_item_contrast_color">?attr/colorOnSurface</item>
<item name="border_color">?attr/colorOutline</item>
<!-- Styles for components -->
<item name="floatingActionButtonStyle">@style/App.FloatingActionButton</item>
<item name="materialAlertDialogTheme">@style/App.MaterialAlertDialog.Dark</item>
<!-- Existing Drawables (Review and Update for M3) -->
<item name="checked_selector">@drawable/selector_checked_dark</item>
<item name="focused_selector">@drawable/selector_focused_dark</item>
<item name="toolbar_shadow">@drawable/toolbar_shadow_dark</item>
<item name="selector">@drawable/selector_dark</item>
<item name="colorControlHighlight">@color/dark_ripple_color</item>
<item name="progress_horizontal_drawable">@drawable/progress_youtube_horizontal_dark</item>
<item name="card_item_background_color">@color/dark_card_item_background_color</item>
<item name="card_item_contrast_color">@color/dark_card_item_contrast_color</item>
<item name="border_color">@color/dark_border_color</item>
<item name="dashed_border">@drawable/dashed_border_dark</item>
</style>
<style name="Base.DarkTheme" parent="Base.V21.DarkTheme" />
<style name="DarkTheme" parent="Base.DarkTheme"/>
<!-- Black Theme -->
<style name="Base.V21.BlackTheme" parent="DarkTheme">
<item name="android:windowBackground">@color/black_background_color</item>
<item name="windowBackground">@color/black_background_color</item>
<style name="BlackTheme" parent="DarkTheme"> <!-- Inherits from M3 Dark Theme -->
<item name="android:colorBackground">@color/m3_surface_black</item>
<item name="colorSurface">@color/m3_surface_black</item>
<item name="windowBackground">@color/m3_surface_black</item> <!-- For AppCompat -->
<item name="separator_color">@color/black_separator_color</item>
<item name="contrast_background_color">@color/black_contrast_background_color</item>
<!-- Override specific custom attributes for true black if needed -->
<item name="contrast_background_color">@color/m3_surface_container_low_dark</item> <!-- A very dark gray -->
<item name="card_item_background_color">@color/m3_surface_black</item> <!-- Cards are also black -->
<item name="card_item_contrast_color">@color/m3_on_surface_dark</item> <!-- Text on black surface -->
<item name="card_item_background_color">@color/black_card_item_background_color</item>
<item name="card_item_contrast_color">@color/black_card_item_contrast_color</item>
<item name="border_color">@color/black_border_color</item>
<item name="dashed_border">@drawable/dashed_border_black</item>
</style>
<style name="Base.BlackTheme" parent="Base.V21.BlackTheme" />
<style name="BlackTheme" parent="Base.BlackTheme"/>
<!-- Dialogs -->
<style name="LightDialogTheme" parent="Theme.AppCompat.DayNight.Dialog">
<item name="colorPrimary">@color/light_youtube_primary_color</item>
<item name="colorPrimaryDark">@color/light_youtube_primary_color</item>
<item name="colorAccent">@color/light_youtube_accent_color</item>
<item name="android:windowBackground">@color/light_dialog_background_color</item>
<item name="windowBackground">@color/light_dialog_background_color</item>
<!-- Other dark theme attributes are inherited, including drawables.
If specific black drawables are needed, override them here. e.g.
<item name="dashed_border">@drawable/dashed_border_black</item>
-->
</style>
<style name="DarkDialogTheme" parent="Theme.AppCompat.DayNight.Dialog">
<item name="colorPrimary">@color/dark_youtube_primary_color</item>
<item name="colorPrimaryDark">@color/dark_youtube_primary_color</item>
<item name="colorAccent">@color/dark_youtube_accent_color</item>
<item name="android:windowBackground">@color/dark_dialog_background_color</item>
<item name="windowBackground">@color/dark_dialog_background_color</item>
<!-- Component Styles -->
<style name="App.FloatingActionButton" parent="Widget.Material3.FloatingActionButton.Primary">
<!-- Example: customize if needed. By default, uses M3 theme colors.
<item name="containerColor">?attr/colorPrimaryContainer</item>
<item name="contentColor">?attr/colorOnPrimaryContainer</item>
-->
</style>
<style name="LightDialogMinWidthTheme" parent="Theme.AppCompat.DayNight.Dialog.MinWidth">
<item name="colorPrimary">@color/light_youtube_primary_color</item>
<item name="colorPrimaryDark">@color/light_youtube_primary_color</item>
<item name="colorAccent">@color/light_youtube_accent_color</item>
<item name="android:windowBackground">@color/light_dialog_background_color</item>
<item name="windowBackground">@color/light_dialog_background_color</item>
<!-- Dialog Themes -->
<style name="App.MaterialAlertDialog.Light" parent="ThemeOverlay.Material3.MaterialAlertDialog">
<item name="colorPrimary">@color/m3_primary_light</item>
<item name="colorSecondary">@color/m3_secondary_light</item>
<item name="colorSurface">@color/m3_surface_container_high_light</item> <!-- Dialog surface -->
<item name="colorOnSurface">@color/m3_on_surface_light</item>
<item name="alertDialogStyle">@style/MaterialAlertDialog.App.Light</item>
</style>
<style name="MaterialAlertDialog.App.Light" parent="MaterialAlertDialog.Material3">
<item name="shapeAppearance">@style/ShapeAppearance.Material3.Corner.ExtraLarge</item>
<item name="backgroundTint">?attr/colorSurfaceContainerHigh</item>
</style>
<style name="DarkDialogMinWidthTheme" parent="Theme.AppCompat.DayNight.Dialog.MinWidth">
<item name="colorPrimary">@color/dark_youtube_primary_color</item>
<item name="colorPrimaryDark">@color/dark_youtube_primary_color</item>
<item name="colorAccent">@color/dark_youtube_accent_color</item>
<item name="android:windowBackground">@color/dark_dialog_background_color</item>
<item name="windowBackground">@color/dark_dialog_background_color</item>
<style name="App.MaterialAlertDialog.Dark" parent="ThemeOverlay.Material3.MaterialAlertDialog">
<item name="colorPrimary">@color/m3_primary_dark</item>
<item name="colorSecondary">@color/m3_secondary_dark</item>
<item name="colorSurface">@color/m3_surface_container_high_dark</item> <!-- Dialog surface -->
<item name="colorOnSurface">@color/m3_on_surface_dark</item>
<item name="alertDialogStyle">@style/MaterialAlertDialog.App.Dark</item>
</style>
<style name="MaterialAlertDialog.App.Dark" parent="MaterialAlertDialog.Material3">
<item name="shapeAppearance">@style/ShapeAppearance.Material3.Corner.ExtraLarge</item>
<item name="backgroundTint">?attr/colorSurfaceContainerHigh</item>
</style>
<!-- Settings -->
<!-- Retain existing dialog theme names by parenting them -->
<style name="LightDialogTheme" parent="App.MaterialAlertDialog.Light"/>
<style name="DarkDialogTheme" parent="App.MaterialAlertDialog.Dark"/>
<style name="LightDialogMinWidthTheme" parent="App.MaterialAlertDialog.Light"/> <!-- M3 Dialogs handle min width well -->
<style name="DarkDialogMinWidthTheme" parent="App.MaterialAlertDialog.Dark"/>
<!-- Settings Themes -->
<!-- For preferences, M3 components within preferences (like SwitchPreferenceCompat)
will typically use colorControlActivated (mapped to ?attr/colorPrimary)
and other theme colors automatically.
If 'settings_accent_color' was very specific, map it to colorPrimary or colorSecondary here.
-->
<style name="LightSettingsTheme" parent="LightTheme">
<item name="colorAccent">@color/light_settings_accent_color</item>
<!-- If settings had a truly distinct accent, override colorPrimary or colorSecondary -->
<!-- <item name="colorPrimary">@color/your_specific_m3_settings_accent_light</item> -->
</style>
<style name="DarkSettingsTheme" parent="DarkTheme">
<item name="colorAccent">@color/dark_settings_accent_color</item>
<!-- <item name="colorPrimary">@color/your_specific_m3_settings_accent_dark</item> -->
</style>
<style name="BlackSettingsTheme" parent="BlackTheme">
<item name="colorAccent">@color/black_settings_accent_color</item>
<!-- <item name="colorPrimary">@color/your_specific_m3_settings_accent_black</item> -->
</style>
<!-- Router Activity -->
<style name="Base.RouterActivityThemeLight" parent="LightTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<!-- Router Activity Themes -->
<style name="RouterActivityThemeLight" parent="LightTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@null</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
<style name="RouterActivityThemeLight" parent="Base.RouterActivityThemeLight" />
<style name="Base.RouterActivityThemeDark" parent="DarkTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@null</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:statusBarColor">@android:color/transparent</item> <!-- Or specific color -->
</style>
<style name="RouterActivityThemeDark" parent="Base.RouterActivityThemeDark" />
<style name="RouterActivityThemeDark" parent="DarkTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowAnimationStyle">@null</item>
<item name="android:statusBarColor">@android:color/transparent</item> <!-- Or specific color -->
</style>
</resources>

View File

@ -2,7 +2,7 @@
<resources>
<!-- Follows service's primary color -->
<style name="ServiceColoredButton" parent="Widget.AppCompat.Button.Colored">
<style name="ServiceColoredButton" parent="Widget.Material3.Button">
<item name="colorButtonNormal">?attr/colorPrimary</item>
<item name="android:textColor">@color/subscribe_text_color</item>
<item name="colorControlHighlight">@color/dark_ripple_color</item>
@ -38,13 +38,13 @@
<item name="alertDialogTheme">@style/FilePickerAlertDialogThemeDark</item>
</style>
<style name="FilePickerAlertDialogThemeLight" parent="Theme.AppCompat.DayNight.Dialog.Alert">
<style name="FilePickerAlertDialogThemeLight" parent="ThemeOverlay.Material3.Dialog.Alert">
<item name="colorPrimary">@color/light_youtube_primary_color</item>
<item name="colorPrimaryDark">@color/light_youtube_primary_color</item>
<item name="colorAccent">@color/light_settings_accent_color</item>
</style>
<style name="FilePickerAlertDialogThemeDark" parent="Theme.AppCompat.DayNight.Dialog.Alert">
<style name="FilePickerAlertDialogThemeDark" parent="Theme.Material3.DayNight.Dialog.Alert">
<item name="colorPrimary">@color/dark_youtube_primary_color</item>
<item name="colorPrimaryDark">@color/dark_youtube_primary_color</item>
<item name="colorAccent">@color/dark_settings_accent_color</item>
@ -55,10 +55,10 @@
<item name="android:textAppearanceSmall">@style/PlayQueueItemSubtitle</item>
</style>
<style name="PlayQueueItemTitle" parent="TextAppearance.AppCompat.Large">
<style name="PlayQueueItemTitle" parent="TextAppearance.Material3.TitleLarge">
<item name="android:textColor">@color/white</item>
</style>
<style name="PlayQueueItemSubtitle" parent="TextAppearance.AppCompat.Small">
<style name="PlayQueueItemSubtitle" parent="TextAppearance.Material3.TitleSmall">
<item name="android:textColor">@color/white_secondary</item>
</style>
@ -66,19 +66,19 @@
<item name="tint">?attr/actionColor</item>
</style>
<style name="DarkPopupMenu" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="DarkPopupMenu" parent="ThemeOverlay.Material3.Dark.ActionBar" />
<style name="ToolbarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<style name="ToolbarTheme" parent="ThemeOverlay.Material3.Dark.ActionBar">
<item name="popupTheme">@style/ToolbarPopupTheme</item>
<item name="android:textColorPrimary">?attr/actionColor</item>
<item name="android:textColorSecondary">?attr/actionColor</item>
<item name="tint">?attr/actionColor</item>
<item name="iconTint">?attr/actionColor</item>
</style>
<style name="ToolbarPopupTheme" parent="ThemeOverlay.AppCompat.DayNight.ActionBar">
<style name="ToolbarPopupTheme" parent="ThemeOverlay.Material3.ActionBar">
<item name="tint">@color/contrastColor</item>
</style>
<style name="ContrastToolbarTheme" parent="ThemeOverlay.AppCompat.DayNight.ActionBar">
<style name="ContrastToolbarTheme" parent="ThemeOverlay.Material3.ActionBar">
<item name="popupTheme">@style/ToolbarPopupTheme</item>
<item name="android:textColorPrimary">@color/contrastColor</item>
<item name="android:textColorSecondary">@color/contrastColor</item>
@ -96,12 +96,6 @@
<item name="iconTint">@color/contrastColor</item>
</style>
<style name="ToolbarSearchInputTheme">
<item name="colorPrimary">?attr/toolbarSearchColor</item>
<item name="colorPrimaryDark">?attr/toolbarSearchColor</item>
<item name="colorAccent">?attr/toolbarSearchColor</item>
</style>
<style name="CircularImageView">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">50%</item>