diff --git a/res/drawable/ic_trash_can.xml b/res/drawable/ic_trash_can.xml
new file mode 100644
index 00000000000..ed4a4cbbd09
--- /dev/null
+++ b/res/drawable/ic_trash_can.xml
@@ -0,0 +1,26 @@
+
+
+
+
diff --git a/res/values/config.xml b/res/values/config.xml
index 984906f718e..2546d8d0f76 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -509,4 +509,17 @@
com.android.cellbroadcastreceiver.module
+
+
+
+ content://com.android.providers.media.documents/root/images_root
+
+
+ content://com.android.providers.media.documents/root/videos_root
+
+
+ content://com.android.providers.media.documents/root/audio_root
+
+
+ content://com.android.providers.media.documents/root/documents_root
diff --git a/res/xml/storage_dashboard_fragment.xml b/res/xml/storage_dashboard_fragment.xml
index b49228ea6f4..076405fa00e 100644
--- a/res/xml/storage_dashboard_fragment.xml
+++ b/res/xml/storage_dashboard_fragment.xml
@@ -21,68 +21,64 @@
android:orderingFromXml="false">
-
+ settings:controller="com.android.settings.deviceinfo.storage.StorageUsageProgressBarPreferenceController"
+ settings:allowDividerBelow="true"/>
+ settings:controller="com.android.settings.deviceinfo.storage.AutomaticStorageManagementSwitchPreferenceController"/>
+
+
+ android:key="pref_images"
+ android:title="@string/storage_images"
+ android:icon="@drawable/ic_photo_library"/>
+ android:key="pref_videos"
+ android:title="@string/storage_videos"
+ android:icon="@drawable/ic_local_movies"/>
+
+
+ android:icon="@drawable/ic_videogame_vd_theme_24"/>
-
-
+ android:key="pref_documents_and_other"
+ android:title="@string/storage_documents_and_other"
+ android:icon="@drawable/ic_folder_vd_theme_24"/>
+ android:title="@string/storage_system"
+ android:icon="@drawable/ic_system_update"/>
+
+
+ android:order="201" />
diff --git a/src/com/android/settings/deviceinfo/StorageItemPreference.java b/src/com/android/settings/deviceinfo/StorageItemPreference.java
index 0766a740b3f..65ef6f4849e 100644
--- a/src/com/android/settings/deviceinfo/StorageItemPreference.java
+++ b/src/com/android/settings/deviceinfo/StorageItemPreference.java
@@ -35,6 +35,7 @@ public class StorageItemPreference extends Preference {
private ProgressBar mProgressBar;
private static final int PROGRESS_MAX = 100;
private int mProgressPercent = UNINITIALIZED;
+ private long mStorageSize;
public StorageItemPreference(Context context) {
this(context, null);
@@ -47,6 +48,7 @@ public class StorageItemPreference extends Preference {
}
public void setStorageSize(long size, long total) {
+ mStorageSize = size;
setSummary(
FileSizeFormatter.formatFileSize(
getContext(),
@@ -61,6 +63,10 @@ public class StorageItemPreference extends Preference {
updateProgressBar();
}
+ public long getStorageSize() {
+ return mStorageSize;
+ }
+
protected void updateProgressBar() {
if (mProgressBar == null || mProgressPercent == UNINITIALIZED)
return;
diff --git a/src/com/android/settings/deviceinfo/storage/EmptyTrashFragment.java b/src/com/android/settings/deviceinfo/storage/EmptyTrashFragment.java
new file mode 100644
index 00000000000..da7b9ba8773
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/storage/EmptyTrashFragment.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2021 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.settings.deviceinfo.storage;
+
+import android.app.Dialog;
+import android.app.settings.SettingsEnums;
+import android.os.Bundle;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.Fragment;
+
+import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+
+/**
+ * Dialog asks if users want to empty trash files.
+ */
+public class EmptyTrashFragment extends InstrumentedDialogFragment {
+ private static final String TAG_EMPTY_TRASH = "empty_trash";
+
+ /** Shows the empty trash dialog. */
+ public static void show(Fragment parent) {
+ final EmptyTrashFragment dialog = new EmptyTrashFragment();
+ dialog.setTargetFragment(parent, 0 /* requestCode */);
+ dialog.show(parent.getFragmentManager(), TAG_EMPTY_TRASH);
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.DIALOG_EMPTY_TRASH;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ return builder.setTitle(R.string.storage_trash_dialog_title)
+ .setMessage(R.string.storage_trash_dialog_ask_message)
+ .setPositiveButton(R.string.storage_trash_dialog_confirm, (dialog, which) -> {
+ // TODO(170918505): Implement the logic in worker thread.
+ }).setNegativeButton(android.R.string.cancel, null)
+ .create();
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
index e007090f3eb..7d7768799d8 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
@@ -19,12 +19,13 @@ 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.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.net.TrafficStats;
+import android.net.Uri;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
@@ -53,6 +54,8 @@ import com.android.settingslib.deviceinfo.StorageMeasurement;
import com.android.settingslib.deviceinfo.StorageVolumeProvider;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.Map;
@@ -67,20 +70,31 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
private static final String SYSTEM_FRAGMENT_TAG = "SystemInfo";
@VisibleForTesting
- static final String PHOTO_KEY = "pref_photos_videos";
+ static final String IMAGES_KEY = "pref_images";
@VisibleForTesting
- static final String AUDIO_KEY = "pref_music_audio";
+ static final String VIDEOS_KEY = "pref_videos";
@VisibleForTesting
- static final String GAME_KEY = "pref_games";
+ static final String AUDIOS_KEY = "pref_audios";
@VisibleForTesting
- static final String MOVIES_KEY = "pref_movies";
+ static final String APPS_KEY = "pref_apps";
@VisibleForTesting
- static final String OTHER_APPS_KEY = "pref_other_apps";
+ static final String GAMES_KEY = "pref_games";
+ @VisibleForTesting
+ static final String DOCUMENTS_AND_OTHER_KEY = "pref_documents_and_other";
@VisibleForTesting
static final String SYSTEM_KEY = "pref_system";
@VisibleForTesting
- static final String FILES_KEY = "pref_files";
+ static final String TRASH_KEY = "pref_trash";
+ private final Uri mImagesUri;
+ private final Uri mVideosUri;
+ private final Uri mAudiosUri;
+ private final Uri mDocumentsAndOtherUri;
+
+ // This value should align with the design of storage_dashboard_fragment.xml
+ private static final int LAST_STORAGE_CATEGORY_PREFERENCE_ORDER = 200;
+
+ private PackageManager mPackageManager;
private final Fragment mFragment;
private final MetricsFeatureProvider mMetricsFeatureProvider;
private final StorageVolumeProvider mSvp;
@@ -89,14 +103,25 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
private long mUsedBytes;
private long mTotalSize;
+ private List mStorageItemPreferences;
private PreferenceScreen mScreen;
- private StorageItemPreference mPhotoPreference;
- private StorageItemPreference mAudioPreference;
- private StorageItemPreference mGamePreference;
- private StorageItemPreference mMoviesPreference;
- private StorageItemPreference mAppPreference;
- private StorageItemPreference mFilePreference;
- private StorageItemPreference mSystemPreference;
+ @VisibleForTesting
+ StorageItemPreference mImagesPreference;
+ @VisibleForTesting
+ StorageItemPreference mVideosPreference;
+ @VisibleForTesting
+ StorageItemPreference mAudiosPreference;
+ @VisibleForTesting
+ StorageItemPreference mAppsPreference;
+ @VisibleForTesting
+ StorageItemPreference mGamesPreference;
+ @VisibleForTesting
+ StorageItemPreference mDocumentsAndOtherPreference;
+ @VisibleForTesting
+ StorageItemPreference mSystemPreference;
+ @VisibleForTesting
+ StorageItemPreference mTrashPreference;
+
private boolean mIsWorkProfile;
private static final String AUTHORITY_MEDIA = "com.android.providers.media.documents";
@@ -104,11 +129,21 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
public StorageItemPreferenceController(
Context context, Fragment hostFragment, VolumeInfo volume, StorageVolumeProvider svp) {
super(context);
+ mPackageManager = context.getPackageManager();
mFragment = hostFragment;
mVolume = volume;
mSvp = svp;
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
mUserId = UserHandle.myUserId();
+
+ mImagesUri = Uri.parse(context.getResources()
+ .getString(R.string.config_images_storage_category_uri));
+ mVideosUri = Uri.parse(context.getResources()
+ .getString(R.string.config_videos_storage_category_uri));
+ mAudiosUri = Uri.parse(context.getResources()
+ .getString(R.string.config_audios_storage_category_uri));
+ mDocumentsAndOtherUri = Uri.parse(context.getResources()
+ .getString(R.string.config_documents_and_other_storage_category_uri));
}
public StorageItemPreferenceController(
@@ -128,57 +163,39 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
- if (preference == null) {
- return false;
- }
-
- Intent intent = null;
if (preference.getKey() == null) {
return false;
}
switch (preference.getKey()) {
- case PHOTO_KEY:
- intent = getPhotosIntent();
- break;
- case AUDIO_KEY:
- intent = getAudioIntent();
- break;
- case GAME_KEY:
- intent = getGamesIntent();
- break;
- case MOVIES_KEY:
- intent = getMoviesIntent();
- break;
- case OTHER_APPS_KEY:
- // Because we are likely constructed with a null volume, this is theoretically
- // possible.
- if (mVolume == null) {
- break;
- }
- intent = getAppsIntent();
- break;
- case FILES_KEY:
- if (mVolume == null) {
- break;
- }
- intent = getFilesIntent();
- FeatureFactory.getFactory(mContext).getMetricsFeatureProvider().action(
- mContext, SettingsEnums.STORAGE_FILES);
- break;
+ case IMAGES_KEY:
+ launchImagesIntent();
+ return true;
+ case VIDEOS_KEY:
+ launchVideosIntent();
+ return true;
+ case AUDIOS_KEY:
+ launchAudiosIntent();
+ return true;
+ case APPS_KEY:
+ launchAppsIntent();
+ return true;
+ case GAMES_KEY:
+ launchGamesIntent();
+ return true;
+ case DOCUMENTS_AND_OTHER_KEY:
+ launchDocumentsAndOtherIntent();
+ return true;
case SYSTEM_KEY:
final SystemInfoFragment dialog = new SystemInfoFragment();
dialog.setTargetFragment(mFragment, 0);
dialog.show(mFragment.getFragmentManager(), SYSTEM_FRAGMENT_TAG);
return true;
+ case TRASH_KEY:
+ launchTrashIntent();
+ return true;
+ default:
+ // Do nothing.
}
-
- if (intent != null) {
- intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
-
- Utils.launchIntent(mFragment, intent);
- return true;
- }
-
return super.handlePreferenceTreeClick(preference);
}
@@ -192,57 +209,97 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
*/
public void setVolume(VolumeInfo volume) {
mVolume = volume;
- updateCategoryPreferencesVisibility();
- }
-
- private void updateCategoryPreferencesVisibility() {
- // Stats data is only available on private volumes.
- final boolean isValidVolume = mVolume != null
- && mVolume.getType() == VolumeInfo.TYPE_PRIVATE
- && (mVolume.getState() == VolumeInfo.STATE_MOUNTED
- || mVolume.getState() == VolumeInfo.STATE_MOUNTED_READ_ONLY);
-
- mPhotoPreference.setVisible(isValidVolume);
- mAudioPreference.setVisible(isValidVolume);
- mGamePreference.setVisible(isValidVolume);
- mMoviesPreference.setVisible(isValidVolume);
- mAppPreference.setVisible(isValidVolume);
- mFilePreference.setVisible(isValidVolume);
- mSystemPreference.setVisible(isValidVolume);
+ final boolean isValidVolume = isValidVolume();
+ setCategoryPreferencesVisibility(isValidVolume);
if (isValidVolume) {
- setFilesPreferenceVisibility();
+ updateCategoryPreferencesOrder();
}
}
- private void setFilesPreferenceVisibility() {
- if (mScreen != null) {
+ // Stats data is only available on private volumes.
+ private boolean isValidVolume() {
+ return mVolume != null
+ && mVolume.getType() == VolumeInfo.TYPE_PRIVATE
+ && (mVolume.getState() == VolumeInfo.STATE_MOUNTED
+ || mVolume.getState() == VolumeInfo.STATE_MOUNTED_READ_ONLY);
+ }
+
+ private void setCategoryPreferencesVisibility(boolean visible) {
+ if (mScreen == null) {
+ return;
+ }
+
+ mImagesPreference.setVisible(visible);
+ mVideosPreference.setVisible(visible);
+ mAudiosPreference.setVisible(visible);
+ mAppsPreference.setVisible(visible);
+ mGamesPreference.setVisible(visible);
+ mDocumentsAndOtherPreference.setVisible(visible);
+ mSystemPreference.setVisible(visible);
+ // TODO(b/170918505): Shows trash category after trash category feature complete.
+ mTrashPreference.setVisible(false);
+
+ if (visible) {
final VolumeInfo sharedVolume = mSvp.findEmulatedForPrivate(mVolume);
// If we don't have a shared volume for our internal storage (or the shared volume isn't
// mounted as readable for whatever reason), we should hide the File preference.
- final boolean hideFilePreference =
- (sharedVolume == null) || !sharedVolume.isMountedReadable();
- if (hideFilePreference) {
- mScreen.removePreference(mFilePreference);
- } else {
- mScreen.addPreference(mFilePreference);
+ if (sharedVolume == null || !sharedVolume.isMountedReadable()) {
+ mDocumentsAndOtherPreference.setVisible(false);
}
}
}
+ private void updateCategoryPreferencesOrder() {
+ if (mScreen == null) {
+ return;
+ }
+
+ if (mStorageItemPreferences == null) {
+ mStorageItemPreferences = new ArrayList<>();
+
+ mStorageItemPreferences.add(mImagesPreference);
+ mStorageItemPreferences.add(mVideosPreference);
+ mStorageItemPreferences.add(mAudiosPreference);
+ mStorageItemPreferences.add(mAppsPreference);
+ mStorageItemPreferences.add(mGamesPreference);
+ mStorageItemPreferences.add(mDocumentsAndOtherPreference);
+ mStorageItemPreferences.add(mSystemPreference);
+ mStorageItemPreferences.add(mTrashPreference);
+ }
+ mScreen.removePreference(mImagesPreference);
+ mScreen.removePreference(mVideosPreference);
+ mScreen.removePreference(mAudiosPreference);
+ mScreen.removePreference(mAppsPreference);
+ mScreen.removePreference(mGamesPreference);
+ mScreen.removePreference(mDocumentsAndOtherPreference);
+ mScreen.removePreference(mSystemPreference);
+ mScreen.removePreference(mTrashPreference);
+
+ // Sort display order by size.
+ Collections.sort(mStorageItemPreferences,
+ Comparator.comparingLong(StorageItemPreference::getStorageSize));
+ int orderIndex = LAST_STORAGE_CATEGORY_PREFERENCE_ORDER;
+ for (StorageItemPreference preference : mStorageItemPreferences) {
+ preference.setOrder(orderIndex--);
+ mScreen.addPreference(preference);
+ }
+ }
+
/**
* Sets the user id for which this preference controller is handling.
*/
public void setUserId(UserHandle userHandle) {
mUserId = userHandle.getIdentifier();
- tintPreference(mPhotoPreference);
- tintPreference(mMoviesPreference);
- tintPreference(mAudioPreference);
- tintPreference(mGamePreference);
- tintPreference(mAppPreference);
+ tintPreference(mImagesPreference);
+ tintPreference(mVideosPreference);
+ tintPreference(mAudiosPreference);
+ tintPreference(mAppsPreference);
+ tintPreference(mGamesPreference);
+ tintPreference(mDocumentsAndOtherPreference);
tintPreference(mSystemPreference);
- tintPreference(mFilePreference);
+ tintPreference(mTrashPreference);
}
private void tintPreference(Preference preference) {
@@ -263,15 +320,20 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
@Override
public void displayPreference(PreferenceScreen screen) {
mScreen = screen;
- mPhotoPreference = screen.findPreference(PHOTO_KEY);
- mAudioPreference = screen.findPreference(AUDIO_KEY);
- mGamePreference = screen.findPreference(GAME_KEY);
- mMoviesPreference = screen.findPreference(MOVIES_KEY);
- mAppPreference = screen.findPreference(OTHER_APPS_KEY);
+ mImagesPreference = screen.findPreference(IMAGES_KEY);
+ mVideosPreference = screen.findPreference(VIDEOS_KEY);
+ mAudiosPreference = screen.findPreference(AUDIOS_KEY);
+ mAppsPreference = screen.findPreference(APPS_KEY);
+ mGamesPreference = screen.findPreference(GAMES_KEY);
+ mDocumentsAndOtherPreference = screen.findPreference(DOCUMENTS_AND_OTHER_KEY);
mSystemPreference = screen.findPreference(SYSTEM_KEY);
- mFilePreference = screen.findPreference(FILES_KEY);
+ mTrashPreference = screen.findPreference(TRASH_KEY);
- updateCategoryPreferencesVisibility();
+ final boolean isValidVolume = isValidVolume();
+ setCategoryPreferencesVisibility(isValidVolume);
+ if (isValidVolume) {
+ updateCategoryPreferencesOrder();
+ }
}
public void onLoadFinished(SparseArray result,
@@ -280,12 +342,14 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
final StorageAsyncLoader.AppsStorageResult profileData = result.get(
Utils.getManagedProfileId(mContext.getSystemService(UserManager.class), userId));
- mPhotoPreference.setStorageSize(getPhotosSize(data, profileData), mTotalSize);
- mAudioPreference.setStorageSize(getAudioSize(data, profileData), mTotalSize);
- mGamePreference.setStorageSize(getGamesSize(data, profileData), mTotalSize);
- mMoviesPreference.setStorageSize(getMoviesSize(data, profileData), mTotalSize);
- mAppPreference.setStorageSize(getAppsSize(data, profileData), mTotalSize);
- mFilePreference.setStorageSize(getFilesSize(data, profileData), mTotalSize);
+ mImagesPreference.setStorageSize(getImagesSize(data, profileData), mTotalSize);
+ mVideosPreference.setStorageSize(getVideosSize(data, profileData), mTotalSize);
+ mAudiosPreference.setStorageSize(getAudiosSize(data, profileData), mTotalSize);
+ mAppsPreference.setStorageSize(getAppsSize(data, profileData), mTotalSize);
+ mGamesPreference.setStorageSize(getGamesSize(data, profileData), mTotalSize);
+ mDocumentsAndOtherPreference.setStorageSize(getDocumentsAndOtherSize(data, profileData),
+ mTotalSize);
+ mTrashPreference.setStorageSize(getTrashSize(data, profileData), mTotalSize);
if (mSystemPreference != null) {
// Everything else that hasn't already been attributed is tracked as
@@ -306,6 +370,8 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
final long systemSize = Math.max(TrafficStats.GB_IN_BYTES, mUsedBytes - attributedSize);
mSystemPreference.setStorageSize(systemSize, mTotalSize);
}
+
+ updateCategoryPreferencesOrder();
}
public void setUsedSize(long usedSizeBytes) {
@@ -316,37 +382,32 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
mTotalSize = totalSizeBytes;
}
- /**
- * Returns a list of keys used by this preference controller.
- */
- public static List getUsedKeys() {
- List list = new ArrayList<>();
- list.add(PHOTO_KEY);
- list.add(AUDIO_KEY);
- list.add(GAME_KEY);
- list.add(MOVIES_KEY);
- list.add(OTHER_APPS_KEY);
- list.add(SYSTEM_KEY);
- list.add(FILES_KEY);
- return list;
+ // TODO(b/183078080): To simplify StorageItemPreferenceController, move launchxxxIntent to a
+ // utility object.
+ private void launchImagesIntent() {
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(mImagesUri);
+
+ if (intent.resolveActivity(mPackageManager) == null) {
+ final Bundle args = getWorkAnnotatedBundle(2);
+ args.putString(ManageApplications.EXTRA_CLASSNAME,
+ Settings.PhotosStorageActivity.class.getName());
+ args.putInt(ManageApplications.EXTRA_STORAGE_TYPE,
+ ManageApplications.STORAGE_TYPE_PHOTOS_VIDEOS);
+ intent = new SubSettingLauncher(mContext)
+ .setDestination(ManageApplications.class.getName())
+ .setTitleRes(R.string.storage_photos_videos)
+ .setArguments(args)
+ .setSourceMetricsCategory(mMetricsFeatureProvider.getMetricsCategory(mFragment))
+ .toIntent();
+ intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+ Utils.launchIntent(mFragment, intent);
+ } else {
+ mContext.startActivity(intent);
+ }
}
- private Intent getPhotosIntent() {
- Bundle args = getWorkAnnotatedBundle(2);
- args.putString(
- ManageApplications.EXTRA_CLASSNAME, Settings.PhotosStorageActivity.class.getName());
- args.putInt(
- ManageApplications.EXTRA_STORAGE_TYPE,
- ManageApplications.STORAGE_TYPE_PHOTOS_VIDEOS);
- return new SubSettingLauncher(mContext)
- .setDestination(ManageApplications.class.getName())
- .setTitleRes(R.string.storage_photos_videos)
- .setArguments(args)
- .setSourceMetricsCategory(mMetricsFeatureProvider.getMetricsCategory(mFragment))
- .toIntent();
- }
-
- private long getPhotosSize(StorageAsyncLoader.AppsStorageResult data,
+ private long getImagesSize(StorageAsyncLoader.AppsStorageResult data,
StorageAsyncLoader.AppsStorageResult profileData) {
if (profileData != null) {
return data.photosAppsSize + data.externalStats.imageBytes
@@ -359,26 +420,62 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
}
}
- private Intent getAudioIntent() {
- if (mVolume == null) {
- return null;
- }
+ private void launchVideosIntent() {
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(mVideosUri);
- Bundle args = getWorkAnnotatedBundle(4);
- args.putString(ManageApplications.EXTRA_CLASSNAME,
- Settings.StorageUseActivity.class.getName());
- args.putString(ManageApplications.EXTRA_VOLUME_UUID, mVolume.getFsUuid());
- args.putString(ManageApplications.EXTRA_VOLUME_NAME, mVolume.getDescription());
- args.putInt(ManageApplications.EXTRA_STORAGE_TYPE, ManageApplications.STORAGE_TYPE_MUSIC);
- return new SubSettingLauncher(mContext)
- .setDestination(ManageApplications.class.getName())
- .setTitleRes(R.string.storage_music_audio)
- .setArguments(args)
- .setSourceMetricsCategory(mMetricsFeatureProvider.getMetricsCategory(mFragment))
- .toIntent();
+ if (intent.resolveActivity(mPackageManager) == null) {
+ final Bundle args = getWorkAnnotatedBundle(1);
+ args.putString(ManageApplications.EXTRA_CLASSNAME,
+ Settings.MoviesStorageActivity.class.getName());
+ intent = new SubSettingLauncher(mContext)
+ .setDestination(ManageApplications.class.getName())
+ .setTitleRes(R.string.storage_movies_tv)
+ .setArguments(args)
+ .setSourceMetricsCategory(mMetricsFeatureProvider.getMetricsCategory(mFragment))
+ .toIntent();
+ intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+ Utils.launchIntent(mFragment, intent);
+ } else {
+ mContext.startActivity(intent);
+ }
}
- private long getAudioSize(StorageAsyncLoader.AppsStorageResult data,
+ private long getVideosSize(StorageAsyncLoader.AppsStorageResult data,
+ StorageAsyncLoader.AppsStorageResult profileData) {
+ if (profileData != null) {
+ return data.videoAppsSize + profileData.videoAppsSize;
+ } else {
+ return data.videoAppsSize;
+ }
+ }
+
+ private void launchAudiosIntent() {
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(mAudiosUri);
+
+ if (intent.resolveActivity(mPackageManager) == null) {
+ final Bundle args = getWorkAnnotatedBundle(4);
+ args.putString(ManageApplications.EXTRA_CLASSNAME,
+ Settings.StorageUseActivity.class.getName());
+ args.putString(ManageApplications.EXTRA_VOLUME_UUID, mVolume.getFsUuid());
+ args.putString(ManageApplications.EXTRA_VOLUME_NAME, mVolume.getDescription());
+ args.putInt(ManageApplications.EXTRA_STORAGE_TYPE,
+ ManageApplications.STORAGE_TYPE_MUSIC);
+ intent = new SubSettingLauncher(mContext)
+ .setDestination(ManageApplications.class.getName())
+ .setTitleRes(R.string.storage_music_audio)
+ .setArguments(args)
+ .setSourceMetricsCategory(mMetricsFeatureProvider.getMetricsCategory(mFragment))
+ .toIntent();
+ intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+ Utils.launchIntent(mFragment, intent);
+ } else {
+ mContext.startActivity(intent);
+ }
+ }
+
+ private long getAudiosSize(StorageAsyncLoader.AppsStorageResult data,
StorageAsyncLoader.AppsStorageResult profileData) {
if (profileData != null) {
return data.musicAppsSize + data.externalStats.audioBytes
@@ -388,21 +485,20 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
}
}
- private Intent getAppsIntent() {
- if (mVolume == null) {
- return null;
- }
+ private void launchAppsIntent() {
final Bundle args = getWorkAnnotatedBundle(3);
args.putString(ManageApplications.EXTRA_CLASSNAME,
Settings.StorageUseActivity.class.getName());
args.putString(ManageApplications.EXTRA_VOLUME_UUID, mVolume.getFsUuid());
args.putString(ManageApplications.EXTRA_VOLUME_NAME, mVolume.getDescription());
- return new SubSettingLauncher(mContext)
+ final Intent intent = new SubSettingLauncher(mContext)
.setDestination(ManageApplications.class.getName())
.setTitleRes(R.string.apps_storage)
.setArguments(args)
.setSourceMetricsCategory(mMetricsFeatureProvider.getMetricsCategory(mFragment))
.toIntent();
+ intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+ Utils.launchIntent(mFragment, intent);
}
private long getAppsSize(StorageAsyncLoader.AppsStorageResult data,
@@ -414,16 +510,18 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
}
}
- private Intent getGamesIntent() {
+ private void launchGamesIntent() {
final Bundle args = getWorkAnnotatedBundle(1);
args.putString(ManageApplications.EXTRA_CLASSNAME,
Settings.GamesStorageActivity.class.getName());
- return new SubSettingLauncher(mContext)
+ final Intent intent = new SubSettingLauncher(mContext)
.setDestination(ManageApplications.class.getName())
.setTitleRes(R.string.game_storage_settings)
.setArguments(args)
.setSourceMetricsCategory(mMetricsFeatureProvider.getMetricsCategory(mFragment))
.toIntent();
+ intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+ Utils.launchIntent(mFragment, intent);
}
private long getGamesSize(StorageAsyncLoader.AppsStorageResult data,
@@ -435,27 +533,6 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
}
}
- private Intent getMoviesIntent() {
- final Bundle args = getWorkAnnotatedBundle(1);
- args.putString(ManageApplications.EXTRA_CLASSNAME,
- Settings.MoviesStorageActivity.class.getName());
- return new SubSettingLauncher(mContext)
- .setDestination(ManageApplications.class.getName())
- .setTitleRes(R.string.storage_movies_tv)
- .setArguments(args)
- .setSourceMetricsCategory(mMetricsFeatureProvider.getMetricsCategory(mFragment))
- .toIntent();
- }
-
- private long getMoviesSize(StorageAsyncLoader.AppsStorageResult data,
- StorageAsyncLoader.AppsStorageResult profileData) {
- if (profileData != null) {
- return data.videoAppsSize + profileData.videoAppsSize;
- } else {
- return data.videoAppsSize;
- }
- }
-
private Bundle getWorkAnnotatedBundle(int additionalCapacity) {
final Bundle args = new Bundle(1 + additionalCapacity);
args.putInt(SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB,
@@ -463,11 +540,20 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
return args;
}
- private Intent getFilesIntent() {
- return mSvp.findEmulatedForPrivate(mVolume).buildBrowseIntent();
+ private void launchDocumentsAndOtherIntent() {
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(mDocumentsAndOtherUri);
+
+ if (intent.resolveActivity(mPackageManager) == null) {
+ intent = mSvp.findEmulatedForPrivate(mVolume).buildBrowseIntent();
+ intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
+ Utils.launchIntent(mFragment, intent);
+ } else {
+ mContext.startActivity(intent);
+ }
}
- private long getFilesSize(StorageAsyncLoader.AppsStorageResult data,
+ private long getDocumentsAndOtherSize(StorageAsyncLoader.AppsStorageResult data,
StorageAsyncLoader.AppsStorageResult profileData) {
if (profileData != null) {
return data.externalStats.totalBytes
@@ -489,6 +575,22 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
}
}
+ private void launchTrashIntent() {
+ final Intent intent = new Intent("android.settings.VIEW_TRASH");
+
+ if (intent.resolveActivity(mPackageManager) == null) {
+ EmptyTrashFragment.show(mFragment);
+ } else {
+ mContext.startActivity(intent);
+ }
+ }
+
+ private long getTrashSize(StorageAsyncLoader.AppsStorageResult data,
+ StorageAsyncLoader.AppsStorageResult profileData) {
+ // TODO(170918505): Implement it.
+ return 0L;
+ }
+
private static long totalValues(StorageMeasurement.MeasurementDetails details, int userId,
String... keys) {
long total = 0;
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/StorageItemPreferenceTest.java b/tests/robotests/src/com/android/settings/deviceinfo/StorageItemPreferenceTest.java
index 06194b4df33..5795157e684 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/StorageItemPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/StorageItemPreferenceTest.java
@@ -69,4 +69,11 @@ public class StorageItemPreferenceTest {
assertThat(progressBar).isNotNull();
assertThat(progressBar.getProgress()).isEqualTo(10);
}
+
+ @Test
+ public void getStorageSize_setStorageSize_getCorrectStorageSize() {
+ mPreference.setStorageSize(MEGABYTE_IN_BYTES, MEGABYTE_IN_BYTES * 10);
+
+ assertThat(mPreference.getStorageSize()).isEqualTo(MEGABYTE_IN_BYTES);
+ }
}
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 5e49aa0a39d..6f9c4514c69 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
@@ -43,7 +43,6 @@ import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.preference.PreferenceScreen;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.SubSettings;
@@ -51,10 +50,8 @@ import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
import com.android.settings.deviceinfo.PrivateVolumeSettings;
import com.android.settings.deviceinfo.StorageItemPreference;
-import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settingslib.applications.StorageStatsSource;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.deviceinfo.StorageVolumeProvider;
import org.junit.Before;
@@ -84,8 +81,7 @@ public class StorageItemPreferenceControllerTest {
private FragmentTransaction mFragmentTransaction;
private StorageItemPreferenceController mController;
private StorageItemPreference mPreference;
- private FakeFeatureFactory mFakeFeatureFactory;
- private MetricsFeatureProvider mMetricsFeatureProvider;
+ private PreferenceScreen mPreferenceScreen;
@Before
public void setUp() {
@@ -94,8 +90,6 @@ public class StorageItemPreferenceControllerTest {
when(mFragment.getFragmentManager()).thenReturn(mFragmentManager);
when(mFragmentManager.beginTransaction()).thenReturn(mFragmentTransaction);
mContext = spy(RuntimeEnvironment.application.getApplicationContext());
- mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
- mMetricsFeatureProvider = mFakeFeatureFactory.getMetricsFeatureProvider();
mVolume = spy(new VolumeInfo("id", 0, null, "id"));
// Note: null is passed as the Lifecycle because we are handling it outside of the normal
// Settings fragment lifecycle for test purposes.
@@ -105,6 +99,47 @@ public class StorageItemPreferenceControllerTest {
// Inflate the preference and the widget.
final LayoutInflater inflater = LayoutInflater.from(mContext);
inflater.inflate(mPreference.getLayoutResource(), new LinearLayout(mContext), false);
+
+ mPreferenceScreen = getPreferenceScreen();
+ }
+
+ private PreferenceScreen getPreferenceScreen() {
+ final StorageItemPreference images = spy(new StorageItemPreference(mContext));
+ images.setIcon(R.drawable.ic_photo_library);
+ final StorageItemPreference videos = spy(new StorageItemPreference(mContext));
+ videos.setIcon(R.drawable.ic_local_movies);
+ final StorageItemPreference audios = spy(new StorageItemPreference(mContext));
+ audios.setIcon(R.drawable.ic_media_stream);
+ final StorageItemPreference apps = spy(new StorageItemPreference(mContext));
+ apps.setIcon(R.drawable.ic_storage_apps);
+ final StorageItemPreference games = spy(new StorageItemPreference(mContext));
+ games.setIcon(R.drawable.ic_videogame_vd_theme_24);
+ final StorageItemPreference documentsAndOther = spy(new StorageItemPreference(mContext));
+ documentsAndOther.setIcon(R.drawable.ic_folder_vd_theme_24);
+ final StorageItemPreference system = spy(new StorageItemPreference(mContext));
+ system.setIcon(R.drawable.ic_system_update);
+ final StorageItemPreference trash = spy(new StorageItemPreference(mContext));
+ trash.setIcon(R.drawable.ic_trash_can);
+
+ final PreferenceScreen screen = mock(PreferenceScreen.class);
+ when(screen.findPreference(eq(StorageItemPreferenceController.IMAGES_KEY)))
+ .thenReturn(images);
+ when(screen.findPreference(eq(StorageItemPreferenceController.VIDEOS_KEY)))
+ .thenReturn(videos);
+ when(screen.findPreference(eq(StorageItemPreferenceController.AUDIOS_KEY)))
+ .thenReturn(audios);
+ when(screen.findPreference(eq(StorageItemPreferenceController.APPS_KEY)))
+ .thenReturn(apps);
+ when(screen.findPreference(eq(StorageItemPreferenceController.GAMES_KEY)))
+ .thenReturn(games);
+ when(screen.findPreference(eq(StorageItemPreferenceController.DOCUMENTS_AND_OTHER_KEY)))
+ .thenReturn(documentsAndOther);
+ when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY)))
+ .thenReturn(system);
+ when(screen.findPreference(eq(StorageItemPreferenceController.TRASH_KEY)))
+ .thenReturn(trash);
+
+ return screen;
}
@Test
@@ -114,8 +149,8 @@ public class StorageItemPreferenceControllerTest {
}
@Test
- public void testClickPhotos() {
- mPreference.setKey("pref_photos_videos");
+ public void launchImagesIntent_resolveActionViewNull_settingsIntent() {
+ mPreference.setKey(StorageItemPreferenceController.IMAGES_KEY);
mController.handlePreferenceTreeClick(mPreference);
final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class);
@@ -132,8 +167,8 @@ public class StorageItemPreferenceControllerTest {
}
@Test
- public void testClickAudio() {
- mPreference.setKey("pref_music_audio");
+ public void launchAudiosIntent_resolveActionViewNull_settingsIntent() {
+ mPreference.setKey(StorageItemPreferenceController.AUDIOS_KEY);
mController.handlePreferenceTreeClick(mPreference);
final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class);
@@ -151,16 +186,24 @@ public class StorageItemPreferenceControllerTest {
}
@Test
- public void handlePreferenceTreeClick_tappingAudioWhileUninitializedDoesntCrash() {
+ public void setVolume_nullVolume_hidePreferences() {
+ mController.displayPreference(mPreferenceScreen);
+
mController.setVolume(null);
- mPreference.setKey("pref_music_audio");
- mController.handlePreferenceTreeClick(mPreference);
+ assertThat(mController.mImagesPreference.isVisible()).isFalse();
+ assertThat(mController.mVideosPreference.isVisible()).isFalse();
+ assertThat(mController.mAudiosPreference.isVisible()).isFalse();
+ assertThat(mController.mAppsPreference.isVisible()).isFalse();
+ assertThat(mController.mGamesPreference.isVisible()).isFalse();
+ assertThat(mController.mDocumentsAndOtherPreference.isVisible()).isFalse();
+ assertThat(mController.mSystemPreference.isVisible()).isFalse();
+ assertThat(mController.mTrashPreference.isVisible()).isFalse();
}
@Test
- public void testClickApps() {
- mPreference.setKey("pref_other_apps");
+ public void launchAppsIntent_forPersonal_settingsIntent() {
+ mPreference.setKey(StorageItemPreferenceController.APPS_KEY);
mController.handlePreferenceTreeClick(mPreference);
final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class);
@@ -177,9 +220,9 @@ public class StorageItemPreferenceControllerTest {
}
@Test
- public void testClickAppsForWork() {
+ public void launchAppsIntent_forWork_settingsIntent() {
mController = new StorageItemPreferenceController(mContext, mFragment, mVolume, mSvp, true);
- mPreference.setKey("pref_other_apps");
+ mPreference.setKey(StorageItemPreferenceController.APPS_KEY);
mController.handlePreferenceTreeClick(mPreference);
final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class);
@@ -204,18 +247,10 @@ public class StorageItemPreferenceControllerTest {
}
@Test
- public void handlePreferenceTreeClick_tappingAppsWhileUninitializedDoesntCrash() {
- mController.setVolume(null);
-
- mPreference.setKey("pref_other_apps");
- mController.handlePreferenceTreeClick(mPreference);
- }
-
- @Test
- public void testClickFiles() {
+ public void launchDocumentsAndOtherIntent_resolveActionViewNull_settingsIntent() {
when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(mVolume);
when(mVolume.buildBrowseIntent()).thenReturn(new Intent());
- mPreference.setKey("pref_files");
+ mPreference.setKey(StorageItemPreferenceController.DOCUMENTS_AND_OTHER_KEY);
assertThat(mController.handlePreferenceTreeClick(mPreference))
.isTrue();
@@ -227,13 +262,11 @@ public class StorageItemPreferenceControllerTest {
Intent browseIntent = mVolume.buildBrowseIntent();
assertThat(intent.getAction()).isEqualTo(browseIntent.getAction());
assertThat(intent.getData()).isEqualTo(browseIntent.getData());
- verify(mMetricsFeatureProvider, times(1))
- .action(nullable(Context.class), eq(MetricsEvent.STORAGE_FILES));
}
@Test
- public void testClickGames() {
- mPreference.setKey("pref_games");
+ public void launchGamesIntent_settingsIntent() {
+ mPreference.setKey(StorageItemPreferenceController.GAMES_KEY);
mController.handlePreferenceTreeClick(mPreference);
final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class);
@@ -250,8 +283,8 @@ public class StorageItemPreferenceControllerTest {
}
@Test
- public void testClickMovies() {
- mPreference.setKey("pref_movies");
+ public void launchVideosIntent_resolveActionViewNull_settingsIntent() {
+ mPreference.setKey(StorageItemPreferenceController.VIDEOS_KEY);
mController.handlePreferenceTreeClick(mPreference);
final ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class);
@@ -269,7 +302,7 @@ public class StorageItemPreferenceControllerTest {
@Test
public void testClickSystem() {
- mPreference.setKey("pref_system");
+ mPreference.setKey(StorageItemPreferenceController.SYSTEM_KEY);
assertThat(mController.handlePreferenceTreeClick(mPreference)).isTrue();
verify(mFragment.getFragmentManager().beginTransaction())
@@ -279,29 +312,7 @@ public class StorageItemPreferenceControllerTest {
@Test
@Config(shadows = ShadowUserManager.class)
public void testMeasurementCompletedUpdatesPreferences() {
- final StorageItemPreference audio = new StorageItemPreference(mContext);
- final StorageItemPreference image = new StorageItemPreference(mContext);
- final StorageItemPreference games = new StorageItemPreference(mContext);
- final StorageItemPreference movies = new StorageItemPreference(mContext);
- final StorageItemPreference apps = new StorageItemPreference(mContext);
- final StorageItemPreference system = new StorageItemPreference(mContext);
- final StorageItemPreference files = new StorageItemPreference(mContext);
- final PreferenceScreen screen = mock(PreferenceScreen.class);
- when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY)))
- .thenReturn(games);
- when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY)))
- .thenReturn(audio);
- when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY)))
- .thenReturn(image);
- when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY)))
- .thenReturn(files);
- when(screen.findPreference(eq(StorageItemPreferenceController.MOVIES_KEY)))
- .thenReturn(movies);
- when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY)))
- .thenReturn(system);
- when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY)))
- .thenReturn(apps);
- mController.displayPreference(screen);
+ mController.displayPreference(mPreferenceScreen);
mController.setUsedSize(MEGABYTE_IN_BYTES * 970); // There should 870MB attributed.
final StorageAsyncLoader.AppsStorageResult result =
@@ -321,211 +332,90 @@ public class StorageItemPreferenceControllerTest {
results.put(0, result);
mController.onLoadFinished(results, 0);
- assertThat(audio.getSummary().toString()).isEqualTo("0.14 GB");
- assertThat(image.getSummary().toString()).isEqualTo("0.35 GB");
- assertThat(games.getSummary().toString()).isEqualTo("0.08 GB");
- assertThat(movies.getSummary().toString()).isEqualTo("0.16 GB");
- assertThat(apps.getSummary().toString()).isEqualTo("0.09 GB");
- assertThat(files.getSummary().toString()).isEqualTo("0.05 GB");
+ assertThat(mController.mImagesPreference.getSummary().toString()).isEqualTo("0.35 GB");
+ assertThat(mController.mVideosPreference.getSummary().toString()).isEqualTo("0.16 GB");
+ assertThat(mController.mAudiosPreference.getSummary().toString()).isEqualTo("0.14 GB");
+ assertThat(mController.mAppsPreference.getSummary().toString()).isEqualTo("0.09 GB");
+ assertThat(mController.mGamesPreference.getSummary().toString()).isEqualTo("0.08 GB");
+ assertThat(mController.mDocumentsAndOtherPreference.getSummary().toString())
+ .isEqualTo("0.05 GB");
}
@Test
public void settingUserIdAppliesNewIcons() {
- final StorageItemPreference audio = spy(new StorageItemPreference(mContext));
- audio.setIcon(R.drawable.ic_media_stream);
- final StorageItemPreference video = spy(new StorageItemPreference(mContext));
- video.setIcon(R.drawable.ic_local_movies);
- final StorageItemPreference image = spy(new StorageItemPreference(mContext));
- image.setIcon(R.drawable.ic_photo_library);
- final StorageItemPreference games = spy(new StorageItemPreference(mContext));
- games.setIcon(R.drawable.ic_videogame_vd_theme_24);
- final StorageItemPreference apps = spy(new StorageItemPreference(mContext));
- apps.setIcon(R.drawable.ic_storage_apps);
- final StorageItemPreference system = spy(new StorageItemPreference(mContext));
- system.setIcon(R.drawable.ic_system_update);
- final StorageItemPreference files = spy(new StorageItemPreference(mContext));
- files.setIcon(R.drawable.ic_folder_vd_theme_24);
- final PreferenceScreen screen = mock(PreferenceScreen.class);
- when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY)))
- .thenReturn(games);
- when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY)))
- .thenReturn(audio);
- when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY)))
- .thenReturn(image);
- when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY)))
- .thenReturn(files);
- when(screen.findPreference(eq(StorageItemPreferenceController.MOVIES_KEY)))
- .thenReturn(video);
- when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY)))
- .thenReturn(system);
- when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY)))
- .thenReturn(apps);
- mController.displayPreference(screen);
+ mController.displayPreference(mPreferenceScreen);
mController.setUserId(new UserHandle(10));
- verify(audio, times(2)).setIcon(nullable(Drawable.class));
- verify(video, times(2)).setIcon(nullable(Drawable.class));
- verify(image, times(2)).setIcon(nullable(Drawable.class));
- verify(games, times(2)).setIcon(nullable(Drawable.class));
- verify(apps, times(2)).setIcon(nullable(Drawable.class));
- verify(system, times(2)).setIcon(nullable(Drawable.class));
- verify(files, times(2)).setIcon(nullable(Drawable.class));
+ verify(mController.mImagesPreference, times(2)).setIcon(nullable(Drawable.class));
+ verify(mController.mVideosPreference, times(2)).setIcon(nullable(Drawable.class));
+ verify(mController.mAudiosPreference, times(2)).setIcon(nullable(Drawable.class));
+ verify(mController.mAppsPreference, times(2)).setIcon(nullable(Drawable.class));
+ verify(mController.mGamesPreference, times(2)).setIcon(nullable(Drawable.class));
+ verify(mController.mDocumentsAndOtherPreference, times(2))
+ .setIcon(nullable(Drawable.class));
+ verify(mController.mSystemPreference, times(2)).setIcon(nullable(Drawable.class));
+ verify(mController.mTrashPreference, times(2)).setIcon(nullable(Drawable.class));
}
@Test
public void displayPreference_dontHideFilePreferenceWhenEmulatedInternalStorageUsed() {
- final StorageItemPreference audio = new StorageItemPreference(mContext);
- final StorageItemPreference image = new StorageItemPreference(mContext);
- final StorageItemPreference games = new StorageItemPreference(mContext);
- final StorageItemPreference apps = new StorageItemPreference(mContext);
- final StorageItemPreference system = new StorageItemPreference(mContext);
- final StorageItemPreference files = new StorageItemPreference(mContext);
- final PreferenceScreen screen = mock(PreferenceScreen.class);
- when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY)))
- .thenReturn(games);
- when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY)))
- .thenReturn(audio);
- when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY)))
- .thenReturn(image);
- when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY)))
- .thenReturn(files);
- when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY)))
- .thenReturn(system);
- when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY)))
- .thenReturn(apps);
-
when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(mVolume);
+ when(mVolume.getType()).thenReturn(VolumeInfo.TYPE_PRIVATE);
+ when(mVolume.getState()).thenReturn(VolumeInfo.STATE_MOUNTED);
when(mVolume.isMountedReadable()).thenReturn(true);
- mController.displayPreference(screen);
+ mController.displayPreference(mPreferenceScreen);
- verify(screen, times(0)).removePreference(files);
+ assertThat(mController.mDocumentsAndOtherPreference.isVisible()).isTrue();
}
@Test
public void displayPreference_hideFilePreferenceWhenEmulatedStorageUnreadable() {
- final StorageItemPreference audio = new StorageItemPreference(mContext);
- final StorageItemPreference image = new StorageItemPreference(mContext);
- final StorageItemPreference games = new StorageItemPreference(mContext);
- final StorageItemPreference apps = new StorageItemPreference(mContext);
- final StorageItemPreference system = new StorageItemPreference(mContext);
- final StorageItemPreference files = new StorageItemPreference(mContext);
- final PreferenceScreen screen = mock(PreferenceScreen.class);
- when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY)))
- .thenReturn(games);
- when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY)))
- .thenReturn(audio);
- when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY)))
- .thenReturn(image);
- when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY)))
- .thenReturn(files);
- when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY)))
- .thenReturn(system);
- when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY)))
- .thenReturn(apps);
-
when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(mVolume);
when(mVolume.isMountedReadable()).thenReturn(false);
- mController.displayPreference(screen);
+ mController.displayPreference(mPreferenceScreen);
- verify(screen).removePreference(files);
+ assertThat(mController.mDocumentsAndOtherPreference.isVisible()).isFalse();
}
@Test
- public void displayPreference_hideFilePreferenceWhenNoEmulatedInternalStorage() {
- final StorageItemPreference audio = new StorageItemPreference(mContext);
- final StorageItemPreference image = new StorageItemPreference(mContext);
- final StorageItemPreference games = new StorageItemPreference(mContext);
- final StorageItemPreference apps = new StorageItemPreference(mContext);
- final StorageItemPreference system = new StorageItemPreference(mContext);
- final StorageItemPreference files = new StorageItemPreference(mContext);
- final PreferenceScreen screen = mock(PreferenceScreen.class);
- when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY)))
- .thenReturn(games);
- when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY)))
- .thenReturn(audio);
- when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY)))
- .thenReturn(image);
- when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY)))
- .thenReturn(files);
- when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY)))
- .thenReturn(system);
- when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY)))
- .thenReturn(apps);
-
+ public void displayPreference_noEmulatedInternalStorage_hidePreference() {
when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(null);
- mController.displayPreference(screen);
+ mController.displayPreference(mPreferenceScreen);
- verify(screen).removePreference(files);
+ assertThat(mController.mDocumentsAndOtherPreference.isVisible()).isFalse();
}
@Test
- public void displayPreference_updateFilePreferenceToHideAfterSettingVolume() {
- final StorageItemPreference audio = new StorageItemPreference(mContext);
- final StorageItemPreference image = new StorageItemPreference(mContext);
- final StorageItemPreference games = new StorageItemPreference(mContext);
- final StorageItemPreference apps = new StorageItemPreference(mContext);
- final StorageItemPreference system = new StorageItemPreference(mContext);
- final StorageItemPreference files = new StorageItemPreference(mContext);
- final PreferenceScreen screen = mock(PreferenceScreen.class);
- when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY)))
- .thenReturn(games);
- when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY)))
- .thenReturn(audio);
- when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY)))
- .thenReturn(image);
- when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY)))
- .thenReturn(files);
- when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY)))
- .thenReturn(system);
- when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY)))
- .thenReturn(apps);
-
+ public void setVolume_updateFilePreferenceToHideAfterSettingVolume_hidePreference() {
when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(mVolume);
+ when(mVolume.getType()).thenReturn(VolumeInfo.TYPE_PRIVATE);
+ when(mVolume.getState()).thenReturn(VolumeInfo.STATE_MOUNTED);
when(mVolume.isMountedReadable()).thenReturn(true);
- mController.displayPreference(screen);
+ mController.displayPreference(mPreferenceScreen);
when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(null);
mController.setVolume(mVolume);
- verify(screen).removePreference(files);
+ assertThat(mController.mDocumentsAndOtherPreference.isVisible()).isFalse();
}
@Test
- public void displayPreference_updateFilePreferenceToShowAfterSettingVolume() {
- final StorageItemPreference audio = new StorageItemPreference(mContext);
- final StorageItemPreference image = new StorageItemPreference(mContext);
- final StorageItemPreference games = new StorageItemPreference(mContext);
- final StorageItemPreference apps = new StorageItemPreference(mContext);
- final StorageItemPreference system = new StorageItemPreference(mContext);
- final StorageItemPreference files = new StorageItemPreference(mContext);
- final PreferenceScreen screen = mock(PreferenceScreen.class);
- when(screen.findPreference(eq(StorageItemPreferenceController.GAME_KEY)))
- .thenReturn(games);
- when(screen.findPreference(eq(StorageItemPreferenceController.AUDIO_KEY)))
- .thenReturn(audio);
- when(screen.findPreference(eq(StorageItemPreferenceController.PHOTO_KEY)))
- .thenReturn(image);
- when(screen.findPreference(eq(StorageItemPreferenceController.FILES_KEY)))
- .thenReturn(files);
- when(screen.findPreference(eq(StorageItemPreferenceController.SYSTEM_KEY)))
- .thenReturn(system);
- when(screen.findPreference(eq(StorageItemPreferenceController.OTHER_APPS_KEY)))
- .thenReturn(apps);
-
+ public void setVolume_updateFilePreferenceToShowAfterSettingVolume_showPreference() {
// This will hide it initially.
- mController.displayPreference(screen);
-
+ mController.displayPreference(mPreferenceScreen);
when(mSvp.findEmulatedForPrivate(nullable(VolumeInfo.class))).thenReturn(mVolume);
+ when(mVolume.getType()).thenReturn(VolumeInfo.TYPE_PRIVATE);
+ when(mVolume.getState()).thenReturn(VolumeInfo.STATE_MOUNTED);
when(mVolume.isMountedReadable()).thenReturn(true);
// And we bring it back.
mController.setVolume(mVolume);
- verify(screen).addPreference(files);
+ assertThat(mController.mDocumentsAndOtherPreference.isVisible()).isTrue();
}
}