diff --git a/res/layout/preference_list_fragment.xml b/res/layout/preference_list_fragment.xml index 03ba735db97..6dfec46fab1 100644 --- a/res/layout/preference_list_fragment.xml +++ b/res/layout/preference_list_fragment.xml @@ -20,7 +20,6 @@ + style="@style/SettingsLibTabsStyle"/> - - + diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java index f7a309effc1..47eaf845b75 100644 --- a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java +++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java @@ -23,12 +23,9 @@ import static android.content.Intent.EXTRA_USER_ID; import android.annotation.IntDef; import android.app.Activity; import android.app.admin.DevicePolicyManager; -import android.content.Context; -import android.content.res.ColorStateList; import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; -import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -37,9 +34,9 @@ import android.widget.LinearLayout; import androidx.annotation.VisibleForTesting; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.recyclerview.widget.RecyclerView; -import androidx.viewpager.widget.ViewPager; +import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.viewpager2.widget.ViewPager2; import com.android.settings.R; import com.android.settings.SettingsActivity; @@ -47,10 +44,10 @@ import com.android.settings.Utils; import com.android.settings.dashboard.DashboardFragment; import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import java.util.Locale; /** * Base fragment class for profile settings. @@ -111,14 +108,15 @@ public abstract class ProfileSelectFragment extends DashboardFragment { if (titleResId > 0) { activity.setTitle(titleResId); } - final int selectedTab = convertPosition(getTabId(activity, getArguments())); + final int selectedTab = getTabId(activity, getArguments()); final View tabContainer = mContentView.findViewById(R.id.tab_container); - final ViewPager viewPager = tabContainer.findViewById(R.id.view_pager); + final ViewPager2 viewPager = tabContainer.findViewById(R.id.view_pager); viewPager.setAdapter(new ProfileSelectFragment.ViewPagerAdapter(this)); final TabLayout tabs = tabContainer.findViewById(R.id.tabs); - tabs.setupWithViewPager(viewPager); - setupTabTextColor(tabs); + new TabLayoutMediator(tabs, viewPager, + (tab, position) -> tab.setText(getPageTitle(position)) + ).attach(); tabContainer.setVisibility(View.VISIBLE); final TabLayout.Tab tab = tabs.getTabAt(selectedTab); tab.select(); @@ -135,30 +133,6 @@ 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; @@ -210,47 +184,36 @@ public abstract class ProfileSelectFragment extends DashboardFragment { return PERSONAL_TAB; } - static class ViewPagerAdapter extends FragmentStatePagerAdapter { + private CharSequence getPageTitle(int position) { + final DevicePolicyManager devicePolicyManager = + getContext().getSystemService(DevicePolicyManager.class); + + if (position == WORK_TAB) { + return devicePolicyManager.getString(WORK_CATEGORY_HEADER, + () -> getContext().getString(R.string.category_work)); + } + + return devicePolicyManager.getString(PERSONAL_CATEGORY_HEADER, + () -> getContext().getString(R.string.category_personal)); + } + + static class ViewPagerAdapter extends FragmentStateAdapter { private final Fragment[] mChildFragments; - private final Context mContext; ViewPagerAdapter(ProfileSelectFragment fragment) { - super(fragment.getChildFragmentManager()); - mContext = fragment.getContext(); + super(fragment); mChildFragments = fragment.getFragments(); } @Override - public Fragment getItem(int position) { - return mChildFragments[convertPosition(position)]; + public Fragment createFragment(int position) { + return mChildFragments[position]; } @Override - public int getCount() { + public int getItemCount() { return mChildFragments.length; } - - @Override - public CharSequence getPageTitle(int position) { - DevicePolicyManager devicePolicyManager = - mContext.getSystemService(DevicePolicyManager.class); - - if (convertPosition(position) == WORK_TAB) { - return devicePolicyManager.getString(WORK_CATEGORY_HEADER, - () -> mContext.getString(R.string.category_work)); - } - - return devicePolicyManager.getString(PERSONAL_CATEGORY_HEADER, - () -> mContext.getString(R.string.category_personal)); - } - } - - private static int convertPosition(int index) { - if (TextUtils.getLayoutDirectionFromLocale(Locale.getDefault()) - == View.LAYOUT_DIRECTION_RTL) { - return 1 - index; - } - return index; } }