From 566d06af22e0f349f90482260d928dfd14f99d38 Mon Sep 17 00:00:00 2001 From: Arc Wang Date: Thu, 1 Jul 2021 11:53:09 +0800 Subject: [PATCH] Fix profile tab text contrast problem Spec specify textColorSecondary of default state, however, TabLayout uses a not expected state of the color. This change sets default state color of textColorSecondary instead of textColorSecondary. Bug: 189793243 Test: manual visual Change-Id: I025ffac68505016f4c4ffb7e1c0b2ff86308d3be --- .../ProfileSelectFragment.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java index 1e0a8dde1b3..82d524d9f06 100644 --- a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java +++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java @@ -21,6 +21,7 @@ import static android.content.Intent.EXTRA_USER_ID; import android.annotation.IntDef; import android.app.Activity; import android.content.Context; +import android.content.res.ColorStateList; import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; @@ -113,6 +114,7 @@ public abstract class ProfileSelectFragment extends DashboardFragment { viewPager.setAdapter(new ProfileSelectFragment.ViewPagerAdapter(this)); final TabLayout tabs = tabContainer.findViewById(R.id.tabs); tabs.setupWithViewPager(viewPager); + setupTabTextColor(tabs); tabContainer.setVisibility(View.VISIBLE); final TabLayout.Tab tab = tabs.getTabAt(selectedTab); tab.select(); @@ -129,6 +131,30 @@ public abstract class ProfileSelectFragment extends DashboardFragment { return mContentView; } + /** + * TabLayout uses ColorStateList of 2 states, selected state and empty state. + * It's expected to use textColorSecondary default state color as empty state tabTextColor. + * + * However, TabLayout uses textColorSecondary by a not expected state. + * This method sets tabTextColor with the color of expected textColorSecondary state. + */ + private void setupTabTextColor(TabLayout tabLayout) { + final ColorStateList defaultColorStateList = tabLayout.getTabTextColors(); + final ColorStateList resultColorStateList = new ColorStateList( + new int[][]{ + new int[]{android.R.attr.state_selected}, + new int[]{} + }, + new int[] { + defaultColorStateList.getColorForState(new int[]{android.R.attr.state_selected}, + Utils.getColorAttrDefaultColor(getContext(), + com.android.internal.R.attr.colorAccentPrimaryVariant)), + Utils.getColorAttrDefaultColor(getContext(), android.R.attr.textColorSecondary) + } + ); + tabLayout.setTabTextColors(resultColorStateList); + } + @Override public int getMetricsCategory() { return METRICS_CATEGORY_UNKNOWN;