diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java index 7cc47e0c4a7..b93249664fb 100644 --- a/src/com/android/settings/applications/ManageApplications.java +++ b/src/com/android/settings/applications/ManageApplications.java @@ -115,6 +115,7 @@ public class ManageApplications extends InstrumentedPreferenceFragment public static final String EXTRA_VOLUME_UUID = "volumeUuid"; public static final String EXTRA_VOLUME_NAME = "volumeName"; public static final String EXTRA_STORAGE_TYPE = "storageType"; + public static final String EXTRA_WORK_ONLY = "workProfileOnly"; private static final String EXTRA_SORT_ORDER = "sortOrder"; private static final String EXTRA_SHOW_SYSTEM = "showSystem"; @@ -277,6 +278,7 @@ public class ManageApplications extends InstrumentedPreferenceFragment private ResetAppsHelper mResetAppsHelper; private String mVolumeUuid; private int mStorageType; + private boolean mIsWorkOnly; @Override public void onCreate(Bundle savedInstanceState) { @@ -328,6 +330,7 @@ public class ManageApplications extends InstrumentedPreferenceFragment mListType = LIST_TYPE_MAIN; } mFilter = getDefaultFilter(); + mIsWorkOnly = args != null ? args.getBoolean(EXTRA_WORK_ONLY) : false; if (savedInstanceState != null) { mSortOrder = savedInstanceState.getInt(EXTRA_SORT_ORDER, mSortOrder); @@ -423,6 +426,9 @@ public class ManageApplications extends InstrumentedPreferenceFragment } AppFilter compositeFilter = getCompositeFilter(mListType, mStorageType, mVolumeUuid); + if (mIsWorkOnly) { + compositeFilter = new CompoundFilter(compositeFilter, FILTERS[FILTER_APPS_WORK]); + } if (compositeFilter != null) { mApplications.setCompositeFilter(compositeFilter); } diff --git a/src/com/android/settings/deviceinfo/StorageProfileFragment.java b/src/com/android/settings/deviceinfo/StorageProfileFragment.java index 7a0a59e35e2..9f3ce0ca8d0 100644 --- a/src/com/android/settings/deviceinfo/StorageProfileFragment.java +++ b/src/com/android/settings/deviceinfo/StorageProfileFragment.java @@ -101,8 +101,13 @@ public class StorageProfileFragment extends DashboardFragment protected List getPreferenceControllers(Context context) { final List controllers = new ArrayList<>(); final StorageManager sm = context.getSystemService(StorageManager.class); - mPreferenceController = new StorageItemPreferenceController(context, this, - mVolume, new StorageManagerVolumeProvider(sm)); + mPreferenceController = + new StorageItemPreferenceController( + context, + this, + mVolume, + new StorageManagerVolumeProvider(sm), + /* isWorkProfile */ true); controllers.add(mPreferenceController); return controllers; } diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java index 7060779ae65..99679d6f1a7 100644 --- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java +++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java @@ -95,6 +95,7 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle private StorageItemPreference mSystemPreference; private static final String AUTHORITY_MEDIA = "com.android.providers.media.documents"; + private boolean mIsWorkProfile; public StorageItemPreferenceController( Context context, Fragment hostFragment, VolumeInfo volume, StorageVolumeProvider svp) { @@ -106,6 +107,16 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle mUserId = UserHandle.myUserId(); } + public StorageItemPreferenceController( + Context context, + Fragment hostFragment, + VolumeInfo volume, + StorageVolumeProvider svp, + boolean isWorkProfile) { + this(context, hostFragment, volume, svp); + mIsWorkProfile = isWorkProfile; + } + @Override public boolean isAvailable() { return true; @@ -212,7 +223,7 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle if (preference != null) { Drawable currentIcon = preference.getIcon(); // Sigh... Applying the badge to the icon clobbers the tint on the base drawable. - // For some reason, re-applying it here means the tint remains. + // For some reason, reapplying it here means the tint remains. currentIcon = applyTint(mContext, currentIcon); preference.setIcon(pm.getUserBadgedIcon(currentIcon, userHandle)); } @@ -220,7 +231,7 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle private static Drawable applyTint(Context context, Drawable icon) { TypedArray array = - context.obtainStyledAttributes(new int[]{android.R.attr.colorControlNormal}); + context.obtainStyledAttributes(new int[] {android.R.attr.colorControlNormal}); icon = icon.mutate(); icon.setTint(array.getColor(0, 0)); array.recycle(); @@ -320,6 +331,7 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle } Bundle args = new Bundle(); + args.putBoolean(ManageApplications.EXTRA_WORK_ONLY, mIsWorkProfile); args.putString(ManageApplications.EXTRA_CLASSNAME, Settings.StorageUseActivity.class.getName()); args.putString(ManageApplications.EXTRA_VOLUME_UUID, mVolume.getFsUuid()); @@ -336,6 +348,7 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle } Bundle args = new Bundle(); + args.putBoolean(ManageApplications.EXTRA_WORK_ONLY, mIsWorkProfile); args.putString(ManageApplications.EXTRA_CLASSNAME, Settings.StorageUseActivity.class.getName()); args.putString(ManageApplications.EXTRA_VOLUME_UUID, mVolume.getFsUuid()); @@ -347,6 +360,7 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle private Intent getGamesIntent() { Bundle args = new Bundle(1); + args.putBoolean(ManageApplications.EXTRA_WORK_ONLY, mIsWorkProfile); args.putString(ManageApplications.EXTRA_CLASSNAME, Settings.GamesStorageActivity.class.getName()); return Utils.onBuildStartFragmentIntent(mContext, @@ -356,6 +370,7 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle private Intent getMoviesIntent() { Bundle args = new Bundle(1); + args.putBoolean(ManageApplications.EXTRA_WORK_ONLY, mIsWorkProfile); args.putString(ManageApplications.EXTRA_CLASSNAME, Settings.MoviesStorageActivity.class.getName()); return Utils.onBuildStartFragmentIntent(mContext, diff --git a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java index c728a608e2d..107e4f31df8 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java @@ -16,6 +16,7 @@ package com.android.settings.deviceinfo.storage; +import static com.android.settings.applications.ManageApplications.EXTRA_WORK_ONLY; import static com.android.settings.utils.FileSizeFormatter.MEGABYTE_IN_BYTES; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.nullable; @@ -168,6 +169,29 @@ public class StorageItemPreferenceControllerTest { .isEqualTo(R.string.apps_storage); } + @Test + public void testClickAppsForWork() { + mController = new StorageItemPreferenceController(mContext, mFragment, mVolume, mSvp, true); + mPreference.setKey("pref_other_apps"); + mController.handlePreferenceTreeClick(mPreference); + + final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class); + verify(mFragment.getActivity()) + .startActivityAsUser(argumentCaptor.capture(), nullable(UserHandle.class)); + + Intent intent = argumentCaptor.getValue(); + assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MAIN); + assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName()); + assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) + .isEqualTo(ManageApplications.class.getName()); + assertThat(intent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0)) + .isEqualTo(R.string.apps_storage); + assertThat( + intent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS) + .getBoolean(EXTRA_WORK_ONLY)) + .isTrue(); + } + @Test public void handlePreferenceTreeClick_tappingAppsWhileUninitializedDoesntCrash() { mController.setVolume(null);