From f686b13f8b629be9f90805a2f1f02bd7e24aa8fc Mon Sep 17 00:00:00 2001 From: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com> Date: Sun, 11 Feb 2024 09:00:46 +0800 Subject: [PATCH] Re-theme Launcher3 components (#4068) There were some themes that were remove during the 14 and 13 merge. This commit attempt to fix it. --------- Co-authored-by: John Andrew Camu --- .../theme/color/ColorStateListTokens.kt | 2 +- .../app/lawnchair/theme/color/ColorTokens.kt | 4 +- .../theme/drawable/DrawableTokens.kt | 61 ++++++++++++++++++- res/drawable/all_apps_tabs_background.xml | 2 +- res/layout/widgets_list_row_view.xml | 49 --------------- .../allapps/ActivityAllAppsContainerView.java | 5 +- .../launcher3/allapps/WorkEduCard.java | 1 + .../widget/picker/WidgetsListHeader.java | 13 ++++ .../widget/picker/WidgetsListTableView.java | 13 ++++ .../WidgetsRecommendationTableLayout.java | 11 ++++ .../search/LauncherWidgetsSearchBar.java | 5 ++ .../PersonalWorkSlidingTabStrip.java | 12 ++++ 12 files changed, 122 insertions(+), 56 deletions(-) delete mode 100644 res/layout/widgets_list_row_view.xml diff --git a/lawnchair/src/app/lawnchair/theme/color/ColorStateListTokens.kt b/lawnchair/src/app/lawnchair/theme/color/ColorStateListTokens.kt index 3f54fd0965..a5a2de87df 100644 --- a/lawnchair/src/app/lawnchair/theme/color/ColorStateListTokens.kt +++ b/lawnchair/src/app/lawnchair/theme/color/ColorStateListTokens.kt @@ -11,7 +11,7 @@ object ColorStateListTokens { intArrayOf(), ) val colors = intArrayOf( - ColorTokens.TextColorPrimary.resolveColor(context, scheme, uiColorMode), + ColorTokens.TextColorPrimaryInverse.resolveColor(context, scheme, uiColorMode), ColorTokens.TextColorSecondary.resolveColor(context, scheme, uiColorMode), ) ColorStateList(states, colors) diff --git a/lawnchair/src/app/lawnchair/theme/color/ColorTokens.kt b/lawnchair/src/app/lawnchair/theme/color/ColorTokens.kt index 22368f26e1..04cd7d09b9 100644 --- a/lawnchair/src/app/lawnchair/theme/color/ColorTokens.kt +++ b/lawnchair/src/app/lawnchair/theme/color/ColorTokens.kt @@ -67,7 +67,7 @@ object ColorTokens { @JvmField val AllAppsScrimColor = ColorBackground - @JvmField val AllAppsTabBackgroundSelected = DayNightColorToken(Accent1_100, Accent2_100) + @JvmField val AllAppsTabBackgroundSelected = DayNightColorToken(Accent1_500, Accent2_500) @JvmField val FocusHighlight = DayNightColorToken(Neutral1_0, Neutral1_700) @@ -119,6 +119,8 @@ object ColorTokens { @JvmField val WorkspaceAccentColor = DarkTextColorToken(Accent1_100, Accent2_600) + @JvmField val WidgetListRowColor = DayNightColorToken(Neutral1_10, Neutral2_800) + val SwitchThumbOn = Accent1_100 val SwitchThumbOff = DayNightColorToken(Neutral2_300, Neutral1_400) val SwitchThumbDisabled = DayNightColorToken(Neutral2_100, Neutral1_700) diff --git a/lawnchair/src/app/lawnchair/theme/drawable/DrawableTokens.kt b/lawnchair/src/app/lawnchair/theme/drawable/DrawableTokens.kt index dfee2d62a5..aaa0439b57 100644 --- a/lawnchair/src/app/lawnchair/theme/drawable/DrawableTokens.kt +++ b/lawnchair/src/app/lawnchair/theme/drawable/DrawableTokens.kt @@ -75,9 +75,55 @@ object DrawableTokens { val WidgetsBottomSheetBackground = ResourceDrawableToken(R.drawable.bg_rounded_corner_bottom_sheet) .setColor(ColorTokens.Surface) + @JvmField + val WidgetsListBackground = NewDrawable { context, scheme, uiColorMode -> + val list = StateListDrawable() + list.setEnterFadeDuration(100) + + val unselected = AppCompatResources.getDrawable( + context, + R.drawable.bg_widgets_header, + ) + unselected?.setTint(ColorTokens.Surface.resolveColor(context, scheme, uiColorMode)) + + val selected = AppCompatResources.getDrawable( + context, + R.drawable.bg_widgets_header, + ) + selected?.setTint(ColorTokens.WidgetListRowColor.resolveColor(context, scheme, uiColorMode)) + + list.addState(intArrayOf(-android.R.attr.state_selected), unselected) + list.addState(intArrayOf(android.R.attr.state_selected), selected) + + list + } + + @JvmField + val WidgetsContentBackground = NewDrawable { context, scheme, uiColorMode -> + val list = StateListDrawable() + list.setEnterFadeDuration(100) + + val unselected = AppCompatResources.getDrawable( + context, + R.drawable.bg_widgets_content, + ) + unselected?.setTint(ColorTokens.Surface.resolveColor(context, scheme, uiColorMode)) + + val selected = AppCompatResources.getDrawable( + context, + R.drawable.bg_widgets_content, + ) + selected?.setTint(ColorTokens.WidgetListRowColor.resolveColor(context, scheme, uiColorMode)) + + list.addState(intArrayOf(-android.R.attr.state_selected), unselected) + list.addState(intArrayOf(android.R.attr.state_selected), selected) + + list + } + @JvmField val WidgetsRecommendationBackground = ResourceDrawableToken(R.drawable.widgets_surface_background) - .setColor(ColorTokens.Surface) + .setColor(ColorTokens.WidgetListRowColor) @JvmField val WidgetResizeFrame = ResourceDrawableToken(R.drawable.widget_resize_frame) @@ -106,6 +152,16 @@ object DrawableTokens { list } + @JvmField + val AllAppsTabsMaskDrawable = NewDrawable { context, scheme, uiColorMode -> + val mask = GradientDrawable() + val radius = context.resources.getDimension(R.dimen.all_apps_header_pill_corner_radius) + mask.cornerRadius = radius + mask.setColor(ColorTokens.FocusHighlight.resolveColor(context, scheme, uiColorMode)) + + mask + } + @JvmField val WorkAppsToggleBackground = NewDrawable { context, scheme, uiColorMode -> val list = StateListDrawable() @@ -127,6 +183,7 @@ object DrawableTokens { list } - @JvmField val WorkCard = ResourceDrawableToken(R.drawable.work_card) + @JvmField + val WorkCard = ResourceDrawableToken(R.drawable.work_card) .setColor(ColorTokens.Surface) } diff --git a/res/drawable/all_apps_tabs_background.xml b/res/drawable/all_apps_tabs_background.xml index 1e7cff2e93..7b27273f28 100644 --- a/res/drawable/all_apps_tabs_background.xml +++ b/res/drawable/all_apps_tabs_background.xml @@ -14,7 +14,7 @@ limitations under the License. --> + android:color="?android:colorControlHighlight"> diff --git a/res/layout/widgets_list_row_view.xml b/res/layout/widgets_list_row_view.xml deleted file mode 100644 index 5942ba65d1..0000000000 --- a/res/layout/widgets_list_row_view.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - diff --git a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java index b4aa84922a..893c18ec3a 100644 --- a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java @@ -99,6 +99,7 @@ import java.util.stream.Stream; import app.lawnchair.allapps.LawnchairAlphabeticalAppsList; import app.lawnchair.font.FontManager; +import app.lawnchair.theme.color.ColorTokens; import app.lawnchair.ui.StretchRecyclerViewContainer; /** @@ -207,10 +208,10 @@ public class ActivityAllAppsContainerView mActivityContext = ActivityContext.lookupContext(context); mAllAppsStore = new AllAppsStore<>(mActivityContext); - mScrimColor = Themes.getAttrColor(context, R.attr.allAppsScrimColor); + mScrimColor = ColorTokens.AllAppsScrimColor.resolveColor(context); mHeaderThreshold = getResources().getDimensionPixelSize( R.dimen.dynamic_grid_cell_border_spacing); - mHeaderProtectionColor = Themes.getAttrColor(context, R.attr.allappsHeaderProtectionColor); + mHeaderProtectionColor = ColorTokens.AllAppsHeaderProtectionColor.resolveColor(context); mWorkManager = new WorkProfileManager( mActivityContext.getSystemService(UserManager.class), diff --git a/src/com/android/launcher3/allapps/WorkEduCard.java b/src/com/android/launcher3/allapps/WorkEduCard.java index 84265844d2..e703d49613 100644 --- a/src/com/android/launcher3/allapps/WorkEduCard.java +++ b/src/com/android/launcher3/allapps/WorkEduCard.java @@ -87,6 +87,7 @@ public class WorkEduCard extends FrameLayout implements TextView title = findViewById(R.id.work_apps_paused_title); title.setText(R.string.work_profile_edu_work_apps); title.setTextColor(ColorTokens.TextColorPrimary.resolveColor(getContext())); + findViewById(R.id.wrapper).setBackground(DrawableTokens.WorkCard.resolve(getContext())); } @Override diff --git a/src/com/android/launcher3/widget/picker/WidgetsListHeader.java b/src/com/android/launcher3/widget/picker/WidgetsListHeader.java index b5e7401e10..62d55f8453 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsListHeader.java +++ b/src/com/android/launcher3/widget/picker/WidgetsListHeader.java @@ -29,6 +29,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; import androidx.annotation.UiThread; +import androidx.core.view.ViewCompat; import com.android.launcher3.DeviceProfile; import com.android.launcher3.LauncherAppState; @@ -41,6 +42,10 @@ import com.android.launcher3.model.data.PackageItemInfo; import com.android.launcher3.views.ActivityContext; import com.android.launcher3.widget.model.WidgetsListHeaderEntry; +import app.lawnchair.font.FontManager; +import app.lawnchair.theme.color.ColorTokens; +import app.lawnchair.theme.drawable.DrawableTokens; + /** * A UI represents a header of an app shown in the full widgets tray. * @@ -87,6 +92,14 @@ public final class WidgetsListHeader extends LinearLayout implements ItemInfoUpd mAppIcon = findViewById(R.id.app_icon); mTitle = findViewById(R.id.app_title); mSubtitle = findViewById(R.id.app_subtitle); + + var mContent = ViewCompat.requireViewById(this, R.id.widgets_list_header); + mContent.setBackground(DrawableTokens.WidgetsListBackground.resolve(getContext())); + + FontManager fontManager = FontManager.INSTANCE.get(getContext()); + fontManager.setCustomFont(mTitle, R.id.font_body_medium); + fontManager.setCustomFont(mTitle, R.id.font_body); + setAccessibilityDelegate(new AccessibilityDelegate() { @Override diff --git a/src/com/android/launcher3/widget/picker/WidgetsListTableView.java b/src/com/android/launcher3/widget/picker/WidgetsListTableView.java index d30e7b68ae..e85ec6defa 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsListTableView.java +++ b/src/com/android/launcher3/widget/picker/WidgetsListTableView.java @@ -21,6 +21,11 @@ import android.widget.TableLayout; import androidx.annotation.Nullable; import androidx.annotation.UiThread; +import androidx.core.view.ViewCompat; + +import com.android.launcher3.R; + +import app.lawnchair.theme.drawable.DrawableTokens; /** * Extension of {@link TableLayout} to support the drawable states used by @@ -46,6 +51,14 @@ public class WidgetsListTableView extends TableLayout { refreshDrawableState(); } + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + var mContent = ViewCompat.requireViewById(this, R.id.widgets_table); + mContent.setBackground(DrawableTokens.WidgetsContentBackground.resolve(getContext())); + } + @Override protected int[] onCreateDrawableState(int extraSpace) { if (mListDrawableState == null) return super.onCreateDrawableState(extraSpace); diff --git a/src/com/android/launcher3/widget/picker/WidgetsRecommendationTableLayout.java b/src/com/android/launcher3/widget/picker/WidgetsRecommendationTableLayout.java index 06cc65e4c1..6d403c43c6 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsRecommendationTableLayout.java +++ b/src/com/android/launcher3/widget/picker/WidgetsRecommendationTableLayout.java @@ -29,6 +29,7 @@ import android.widget.TableLayout; import android.widget.TableRow; import androidx.annotation.Nullable; +import androidx.core.view.ViewCompat; import com.android.launcher3.DeviceProfile; import com.android.launcher3.Launcher; @@ -40,6 +41,8 @@ import com.android.launcher3.widget.util.WidgetSizes; import java.util.ArrayList; import java.util.List; +import app.lawnchair.theme.drawable.DrawableTokens; + /** A {@link TableLayout} for showing recommended widgets. */ public final class WidgetsRecommendationTableLayout extends TableLayout { private static final String TAG = "WidgetsRecommendationTableLayout"; @@ -77,6 +80,14 @@ public final class WidgetsRecommendationTableLayout extends TableLayout { mWidgetCellOnClickListener = widgetCellOnClickListener; } + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + var mContent = ViewCompat.requireViewById(this, R.id.recommended_widget_table); + mContent.setBackground(DrawableTokens.WidgetsRecommendationBackground.resolve(getContext())); + } + /** * Sets a list of recommended widgets that would like to be displayed in this table within the * desired {@code recommendationTableMaxHeight}. diff --git a/src/com/android/launcher3/widget/picker/search/LauncherWidgetsSearchBar.java b/src/com/android/launcher3/widget/picker/search/LauncherWidgetsSearchBar.java index 86968911aa..3b4b604bd0 100644 --- a/src/com/android/launcher3/widget/picker/search/LauncherWidgetsSearchBar.java +++ b/src/com/android/launcher3/widget/picker/search/LauncherWidgetsSearchBar.java @@ -28,6 +28,8 @@ import com.android.launcher3.ExtendedEditText; import com.android.launcher3.R; import com.android.launcher3.popup.PopupDataProvider; +import app.lawnchair.font.FontManager; +import app.lawnchair.theme.color.ColorTokens; import app.lawnchair.theme.drawable.DrawableTokens; /** @@ -70,6 +72,9 @@ public class LauncherWidgetsSearchBar extends LinearLayout implements WidgetsSea mEditText = findViewById(R.id.widgets_search_bar_edit_text); mCancelButton = findViewById(R.id.widgets_search_cancel_button); setBackground(DrawableTokens.BgWidgetsSearchbox.resolve(getContext())); + + FontManager fontManager = FontManager.INSTANCE.get(getContext()); + fontManager.setCustomFont(mEditText, R.id.font_body_medium); } @Override diff --git a/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java b/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java index 317833e03b..34ac561301 100644 --- a/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java +++ b/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java @@ -18,6 +18,7 @@ package com.android.launcher3.workprofile; import android.content.Context; import android.graphics.drawable.Drawable; import android.content.res.TypedArray; +import android.graphics.drawable.RippleDrawable; import android.util.AttributeSet; import android.widget.Button; import android.widget.LinearLayout; @@ -54,6 +55,17 @@ public class PersonalWorkSlidingTabStrip extends LinearLayout implements PageInd @Override protected void onFinishInflate() { super.onFinishInflate(); + + FontManager fontManager = FontManager.INSTANCE.get(getContext()); + for (int i = 0; i < getChildCount(); i++) { + Button tab = (Button) getChildAt(i); + tab.setAllCaps(false); + RippleDrawable background = (RippleDrawable) tab.getBackground(); + background.setDrawableByLayerId(android.R.id.mask, DrawableTokens.AllAppsTabsMaskDrawable.resolve(getContext())); + tab.setBackground(DrawableTokens.AllAppsTabsBackground.resolve(getContext())); + tab.setTextColor(ColorStateListTokens.AllAppsTabText.resolve(getContext())); + fontManager.setCustomFont(tab, R.id.font_body_medium); + } } /**