Merge "Show work profile apps only on app list." into oc-mr1-dev
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index 7cc47e0..b932496 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -115,6 +115,7 @@
     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 @@
     private ResetAppsHelper mResetAppsHelper;
     private String mVolumeUuid;
     private int mStorageType;
+    private boolean mIsWorkOnly;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -328,6 +330,7 @@
             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 @@
         }
 
         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 7a0a59e..9f3ce0c 100644
--- a/src/com/android/settings/deviceinfo/StorageProfileFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageProfileFragment.java
@@ -101,8 +101,13 @@
     protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> 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 7060779..99679d6 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
@@ -95,6 +95,7 @@
     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 @@
         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 @@
         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 @@
 
     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 @@
         }
 
         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 @@
         }
 
         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 @@
 
     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 @@
 
     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 1599440..f3634cc 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
@@ -16,12 +16,12 @@
 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;
-import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
@@ -172,6 +172,29 @@
     }
 
     @Test
+    public void testClickAppsForWork() {
+        mController = new StorageItemPreferenceController(mContext, mFragment, mVolume, mSvp, true);
+        mPreference.setKey("pref_other_apps");
+        mController.handlePreferenceTreeClick(mPreference);
+
+        final ArgumentCaptor<Intent> 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);