Navigate to personal/work tab based on intent extra

Bug: 141601408
Test: Settings->Storage, click work tab, click Other apps. It should
navigate to Apps storage page and focus on WORK tab.
Change-Id: Ida91b279e771a2c7c960ce83b8e13310c87112e8
This commit is contained in:
Raff Tsai
2019-12-04 10:56:43 +08:00
parent 810f7861f0
commit 910ea66615
3 changed files with 29 additions and 2 deletions

View File

@@ -135,6 +135,14 @@ public class SettingsActivity extends SettingsBaseActivity
public static final String EXTRA_SHOW_FRAGMENT_AS_SUBSETTING = public static final String EXTRA_SHOW_FRAGMENT_AS_SUBSETTING =
":settings:show_fragment_as_subsetting"; ":settings:show_fragment_as_subsetting";
/**
* Personal or Work profile tab of {@link ProfileSelectFragment}
* <p>0: Personal tab.
* <p>1: Work profile tab.
*/
public static final String EXTRA_SHOW_FRAGMENT_TAB =
":settings:show_fragment_tab";
public static final String META_DATA_KEY_FRAGMENT_CLASS = public static final String META_DATA_KEY_FRAGMENT_CLASS =
"com.android.settings.FRAGMENT_CLASS"; "com.android.settings.FRAGMENT_CLASS";

View File

@@ -31,6 +31,7 @@ import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.ViewPager; import androidx.viewpager.widget.ViewPager;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
@@ -74,12 +75,23 @@ public abstract class ProfileSelectFragment extends DashboardFragment {
*/ */
public static final String EXTRA_PROFILE = "profile"; public static final String EXTRA_PROFILE = "profile";
/**
* Used in fragment argument with Extra key {@link SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB}
*/
public static final int PERSONAL_TAB = 0;
/**
* Used in fragment argument with Extra key {@link SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB}
*/
public static final int WORK_TAB = 1;
private ViewGroup mContentView; private ViewGroup mContentView;
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
mContentView = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState); mContentView = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState);
final int selected = getArguments().getInt(SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB, 0);
final View tabContainer = mContentView.findViewById(R.id.tab_container); final View tabContainer = mContentView.findViewById(R.id.tab_container);
final ViewPager viewPager = tabContainer.findViewById(R.id.view_pager); final ViewPager viewPager = tabContainer.findViewById(R.id.view_pager);
@@ -87,6 +99,8 @@ public abstract class ProfileSelectFragment extends DashboardFragment {
final TabLayout tabs = tabContainer.findViewById(R.id.tabs); final TabLayout tabs = tabContainer.findViewById(R.id.tabs);
tabs.setupWithViewPager(viewPager); tabs.setupWithViewPager(viewPager);
tabContainer.setVisibility(View.VISIBLE); tabContainer.setVisibility(View.VISIBLE);
final TabLayout.Tab tab = tabs.getTabAt(selected);
tab.select();
final FrameLayout listContainer = mContentView.findViewById(android.R.id.list_container); final FrameLayout listContainer = mContentView.findViewById(android.R.id.list_container);
listContainer.setLayoutParams(new LinearLayout.LayoutParams( listContainer.setLayoutParams(new LinearLayout.LayoutParams(
@@ -96,6 +110,7 @@ public abstract class ProfileSelectFragment extends DashboardFragment {
final RecyclerView recyclerView = getListView(); final RecyclerView recyclerView = getListView();
recyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER); recyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER);
Utils.setActionBarShadowAnimation(getActivity(), getSettingsLifecycle(), recyclerView); Utils.setActionBarShadowAnimation(getActivity(), getSettingsLifecycle(), recyclerView);
return mContentView; return mContentView;
} }

View File

@@ -16,6 +16,9 @@
package com.android.settings.deviceinfo.storage; package com.android.settings.deviceinfo.storage;
import static com.android.settings.dashboard.profileselector.ProfileSelectFragment.PERSONAL_TAB;
import static com.android.settings.dashboard.profileselector.ProfileSelectFragment.WORK_TAB;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.Context; import android.content.Context;
@@ -37,6 +40,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Settings; import com.android.settings.Settings;
import com.android.settings.SettingsActivity;
import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.core.FeatureFlags; import com.android.settings.core.FeatureFlags;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
@@ -394,8 +398,8 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
private Bundle getWorkAnnotatedBundle(int additionalCapacity) { private Bundle getWorkAnnotatedBundle(int additionalCapacity) {
if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.PERSONAL_WORK_PROFILE)) { if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.PERSONAL_WORK_PROFILE)) {
final Bundle args = new Bundle(2 + additionalCapacity); final Bundle args = new Bundle(2 + additionalCapacity);
args.putInt(ProfileSelectFragment.EXTRA_PROFILE, args.putInt(SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB,
mIsWorkProfile ? ProfileSelectFragment.WORK : ProfileSelectFragment.PERSONAL); mIsWorkProfile ? WORK_TAB : PERSONAL_TAB);
args.putInt(ManageApplications.EXTRA_WORK_ID, mUserId); args.putInt(ManageApplications.EXTRA_WORK_ID, mUserId);
return args; return args;
} else { } else {