From 1724dfdb88fd4aa38978e499e7e4e49e678812c0 Mon Sep 17 00:00:00 2001 From: Edgar Wang Date: Tue, 18 Oct 2022 17:13:54 +0800 Subject: Create ProfileSelector to provide TabLayout with Material Next style - Create ProfileSelectFragment - Move Tabs related resource into ProfileSelector Bug: 195009187 Test: visual test & robotest Change-Id: Ica20a6e1e7e534c35cb3ac3ed2d69f3cb9682fb7 --- packages/SettingsLib/Android.bp | 1 + packages/SettingsLib/ProfileSelector/Android.bp | 26 +++++ .../ProfileSelector/AndroidManifest.xml | 22 ++++ .../settingslib_tabs_indicator_color.xml | 19 ++++ .../color-night/settingslib_tabs_text_color.xml | 21 ++++ .../res/color/settingslib_tabs_indicator_color.xml | 19 ++++ .../res/color/settingslib_tabs_text_color.xml | 21 ++++ .../res/drawable/settingslib_tabs_background.xml | 44 ++++++++ .../settingslib_tabs_indicator_background.xml | 26 +++++ .../ProfileSelector/res/layout/tab_fragment.xml | 38 +++++++ .../ProfileSelector/res/values/strings.xml | 24 +++++ .../ProfileSelector/res/values/styles.xml | 41 +++++++ .../settingslib/widget/ProfileSelectFragment.java | 118 +++++++++++++++++++++ .../widget/ProfileViewPagerAdapter.java | 43 ++++++++ .../settingslib_tabs_indicator_color.xml | 19 ---- .../settingslib_tabs_text_color.xml | 21 ---- .../color-v31/settingslib_tabs_indicator_color.xml | 19 ---- .../res/color-v31/settingslib_tabs_text_color.xml | 21 ---- .../drawable-v31/settingslib_tabs_background.xml | 44 -------- .../settingslib_tabs_indicator_background.xml | 26 ----- packages/SettingsLib/res/values-v31/styles.xml | 41 ------- 21 files changed, 463 insertions(+), 191 deletions(-) create mode 100644 packages/SettingsLib/ProfileSelector/Android.bp create mode 100644 packages/SettingsLib/ProfileSelector/AndroidManifest.xml create mode 100644 packages/SettingsLib/ProfileSelector/res/color-night/settingslib_tabs_indicator_color.xml create mode 100644 packages/SettingsLib/ProfileSelector/res/color-night/settingslib_tabs_text_color.xml create mode 100644 packages/SettingsLib/ProfileSelector/res/color/settingslib_tabs_indicator_color.xml create mode 100644 packages/SettingsLib/ProfileSelector/res/color/settingslib_tabs_text_color.xml create mode 100644 packages/SettingsLib/ProfileSelector/res/drawable/settingslib_tabs_background.xml create mode 100644 packages/SettingsLib/ProfileSelector/res/drawable/settingslib_tabs_indicator_background.xml create mode 100644 packages/SettingsLib/ProfileSelector/res/layout/tab_fragment.xml create mode 100644 packages/SettingsLib/ProfileSelector/res/values/strings.xml create mode 100644 packages/SettingsLib/ProfileSelector/res/values/styles.xml create mode 100644 packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileSelectFragment.java create mode 100644 packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileViewPagerAdapter.java delete mode 100644 packages/SettingsLib/res/color-night-v31/settingslib_tabs_indicator_color.xml delete mode 100644 packages/SettingsLib/res/color-night-v31/settingslib_tabs_text_color.xml delete mode 100644 packages/SettingsLib/res/color-v31/settingslib_tabs_indicator_color.xml delete mode 100644 packages/SettingsLib/res/color-v31/settingslib_tabs_text_color.xml delete mode 100644 packages/SettingsLib/res/drawable-v31/settingslib_tabs_background.xml delete mode 100644 packages/SettingsLib/res/drawable-v31/settingslib_tabs_indicator_background.xml delete mode 100644 packages/SettingsLib/res/values-v31/styles.xml diff --git a/packages/SettingsLib/Android.bp b/packages/SettingsLib/Android.bp index c659525d42a5..f170ead70b77 100644 --- a/packages/SettingsLib/Android.bp +++ b/packages/SettingsLib/Android.bp @@ -54,6 +54,7 @@ android_library { "SettingsLibSettingsTransition", "SettingsLibButtonPreference", "SettingsLibDeviceStateRotationLock", + "SettingsLibProfileSelector", "setupdesign", "zxing-core-1.7", "androidx.room_room-runtime", diff --git a/packages/SettingsLib/ProfileSelector/Android.bp b/packages/SettingsLib/ProfileSelector/Android.bp new file mode 100644 index 000000000000..7846e67a80d1 --- /dev/null +++ b/packages/SettingsLib/ProfileSelector/Android.bp @@ -0,0 +1,26 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "frameworks_base_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["frameworks_base_license"], +} + +android_library { + name: "SettingsLibProfileSelector", + + srcs: ["src/**/*.java"], + resource_dirs: ["res"], + + static_libs: [ + "com.google.android.material_material", + "SettingsLibSettingsTheme", + ], + + sdk_version: "system_current", + min_sdk_version: "23", + apex_available: [ + "//apex_available:platform", + ], +} diff --git a/packages/SettingsLib/ProfileSelector/AndroidManifest.xml b/packages/SettingsLib/ProfileSelector/AndroidManifest.xml new file mode 100644 index 000000000000..a57469e39eb6 --- /dev/null +++ b/packages/SettingsLib/ProfileSelector/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/packages/SettingsLib/ProfileSelector/res/color-night/settingslib_tabs_indicator_color.xml b/packages/SettingsLib/ProfileSelector/res/color-night/settingslib_tabs_indicator_color.xml new file mode 100644 index 000000000000..9a093601a92c --- /dev/null +++ b/packages/SettingsLib/ProfileSelector/res/color-night/settingslib_tabs_indicator_color.xml @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/packages/SettingsLib/ProfileSelector/res/color-night/settingslib_tabs_text_color.xml b/packages/SettingsLib/ProfileSelector/res/color-night/settingslib_tabs_text_color.xml new file mode 100644 index 000000000000..33f96df8d5b5 --- /dev/null +++ b/packages/SettingsLib/ProfileSelector/res/color-night/settingslib_tabs_text_color.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/packages/SettingsLib/ProfileSelector/res/color/settingslib_tabs_indicator_color.xml b/packages/SettingsLib/ProfileSelector/res/color/settingslib_tabs_indicator_color.xml new file mode 100644 index 000000000000..57fef52f15bd --- /dev/null +++ b/packages/SettingsLib/ProfileSelector/res/color/settingslib_tabs_indicator_color.xml @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/packages/SettingsLib/ProfileSelector/res/color/settingslib_tabs_text_color.xml b/packages/SettingsLib/ProfileSelector/res/color/settingslib_tabs_text_color.xml new file mode 100644 index 000000000000..df2346d7175e --- /dev/null +++ b/packages/SettingsLib/ProfileSelector/res/color/settingslib_tabs_text_color.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/packages/SettingsLib/ProfileSelector/res/drawable/settingslib_tabs_background.xml b/packages/SettingsLib/ProfileSelector/res/drawable/settingslib_tabs_background.xml new file mode 100644 index 000000000000..5378eeef97e0 --- /dev/null +++ b/packages/SettingsLib/ProfileSelector/res/drawable/settingslib_tabs_background.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/SettingsLib/ProfileSelector/res/drawable/settingslib_tabs_indicator_background.xml b/packages/SettingsLib/ProfileSelector/res/drawable/settingslib_tabs_indicator_background.xml new file mode 100644 index 000000000000..9c10a5b59281 --- /dev/null +++ b/packages/SettingsLib/ProfileSelector/res/drawable/settingslib_tabs_indicator_background.xml @@ -0,0 +1,26 @@ + + + + + + + + \ No newline at end of file diff --git a/packages/SettingsLib/ProfileSelector/res/layout/tab_fragment.xml b/packages/SettingsLib/ProfileSelector/res/layout/tab_fragment.xml new file mode 100644 index 000000000000..0448c6c4f467 --- /dev/null +++ b/packages/SettingsLib/ProfileSelector/res/layout/tab_fragment.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/packages/SettingsLib/ProfileSelector/res/values/strings.xml b/packages/SettingsLib/ProfileSelector/res/values/strings.xml new file mode 100644 index 000000000000..68d4047a497c --- /dev/null +++ b/packages/SettingsLib/ProfileSelector/res/values/strings.xml @@ -0,0 +1,24 @@ + + + + + + + Personal + + Work + \ No newline at end of file diff --git a/packages/SettingsLib/ProfileSelector/res/values/styles.xml b/packages/SettingsLib/ProfileSelector/res/values/styles.xml new file mode 100644 index 000000000000..0b703c99884b --- /dev/null +++ b/packages/SettingsLib/ProfileSelector/res/values/styles.xml @@ -0,0 +1,41 @@ + + + + + + + \ No newline at end of file diff --git a/packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileSelectFragment.java b/packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileSelectFragment.java new file mode 100644 index 000000000000..ac426ed8b5d4 --- /dev/null +++ b/packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileSelectFragment.java @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.widget; + +import android.app.Activity; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.fragment.app.Fragment; +import androidx.viewpager2.widget.ViewPager2; + +import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; + +/** + * Base fragment class for profile settings. + */ +public abstract class ProfileSelectFragment extends Fragment { + + /** + * Personal or Work profile tab of {@link ProfileSelectFragment} + *

0: Personal tab. + *

1: Work profile tab. + */ + public static final String EXTRA_SHOW_FRAGMENT_TAB = + ":settings:show_fragment_tab"; + + /** + * Used in fragment argument with Extra key EXTRA_SHOW_FRAGMENT_TAB + */ + public static final int PERSONAL_TAB = 0; + + /** + * Used in fragment argument with Extra key EXTRA_SHOW_FRAGMENT_TAB + */ + public static final int WORK_TAB = 1; + + private ViewGroup mContentView; + + private ViewPager2 mViewPager; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Defines the xml file for the fragment + mContentView = (ViewGroup) inflater.inflate(R.layout.tab_fragment, container, false); + + final Activity activity = getActivity(); + final int titleResId = getTitleResId(); + if (titleResId > 0) { + activity.setTitle(titleResId); + } + final int selectedTab = getTabId(activity, getArguments()); + + final View tabContainer = mContentView.findViewById(R.id.tab_container); + mViewPager = tabContainer.findViewById(R.id.view_pager); + mViewPager.setAdapter(new ProfileViewPagerAdapter(this)); + final TabLayout tabs = tabContainer.findViewById(R.id.tabs); + new TabLayoutMediator(tabs, mViewPager, + (tab, position) -> tab.setText(getPageTitle(position)) + ).attach(); + + tabContainer.setVisibility(View.VISIBLE); + final TabLayout.Tab tab = tabs.getTabAt(selectedTab); + tab.select(); + + return mContentView; + } + + /** + * create Personal or Work profile fragment + *

0: Personal profile. + *

1: Work profile. + */ + public abstract Fragment createFragment(int position); + + /** + * Returns a resource ID of the title + * Override this if the title needs to be updated dynamically. + */ + public int getTitleResId() { + return 0; + } + + int getTabId(Activity activity, Bundle bundle) { + if (bundle != null) { + final int extraTab = bundle.getInt(EXTRA_SHOW_FRAGMENT_TAB, -1); + if (extraTab != -1) { + return extraTab; + } + } + return PERSONAL_TAB; + } + + private CharSequence getPageTitle(int position) { + if (position == WORK_TAB) { + return getContext().getString(R.string.settingslib_category_work); + } + + return getString(R.string.settingslib_category_personal); + } +} diff --git a/packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileViewPagerAdapter.java b/packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileViewPagerAdapter.java new file mode 100644 index 000000000000..daf2564a674e --- /dev/null +++ b/packages/SettingsLib/ProfileSelector/src/com/android/settingslib/widget/ProfileViewPagerAdapter.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.widget; + +import androidx.fragment.app.Fragment; +import androidx.viewpager2.adapter.FragmentStateAdapter; + +/** + * ViewPager Adapter to handle between TabLayout and ViewPager2 + */ +public class ProfileViewPagerAdapter extends FragmentStateAdapter { + + private final ProfileSelectFragment mParentFragments; + + ProfileViewPagerAdapter(ProfileSelectFragment fragment) { + super(fragment); + mParentFragments = fragment; + } + + @Override + public Fragment createFragment(int position) { + return mParentFragments.createFragment(position); + } + + @Override + public int getItemCount() { + return 2; + } +} diff --git a/packages/SettingsLib/res/color-night-v31/settingslib_tabs_indicator_color.xml b/packages/SettingsLib/res/color-night-v31/settingslib_tabs_indicator_color.xml deleted file mode 100644 index 9a093601a92c..000000000000 --- a/packages/SettingsLib/res/color-night-v31/settingslib_tabs_indicator_color.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - \ No newline at end of file diff --git a/packages/SettingsLib/res/color-night-v31/settingslib_tabs_text_color.xml b/packages/SettingsLib/res/color-night-v31/settingslib_tabs_text_color.xml deleted file mode 100644 index 33f96df8d5b5..000000000000 --- a/packages/SettingsLib/res/color-night-v31/settingslib_tabs_text_color.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/packages/SettingsLib/res/color-v31/settingslib_tabs_indicator_color.xml b/packages/SettingsLib/res/color-v31/settingslib_tabs_indicator_color.xml deleted file mode 100644 index 57fef52f15bd..000000000000 --- a/packages/SettingsLib/res/color-v31/settingslib_tabs_indicator_color.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - \ No newline at end of file diff --git a/packages/SettingsLib/res/color-v31/settingslib_tabs_text_color.xml b/packages/SettingsLib/res/color-v31/settingslib_tabs_text_color.xml deleted file mode 100644 index df2346d7175e..000000000000 --- a/packages/SettingsLib/res/color-v31/settingslib_tabs_text_color.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/packages/SettingsLib/res/drawable-v31/settingslib_tabs_background.xml b/packages/SettingsLib/res/drawable-v31/settingslib_tabs_background.xml deleted file mode 100644 index 5378eeef97e0..000000000000 --- a/packages/SettingsLib/res/drawable-v31/settingslib_tabs_background.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/SettingsLib/res/drawable-v31/settingslib_tabs_indicator_background.xml b/packages/SettingsLib/res/drawable-v31/settingslib_tabs_indicator_background.xml deleted file mode 100644 index 9c10a5b59281..000000000000 --- a/packages/SettingsLib/res/drawable-v31/settingslib_tabs_indicator_background.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/packages/SettingsLib/res/values-v31/styles.xml b/packages/SettingsLib/res/values-v31/styles.xml deleted file mode 100644 index 0b703c99884b..000000000000 --- a/packages/SettingsLib/res/values-v31/styles.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - \ No newline at end of file -- cgit v1.2.3-59-g8ed1b