Storage category UX changes in Storage Settings

- Change category types.
- Use Intent.ACTION_VIEW to show content of each category.
- Sort order of each category by storage size.

Bug: 170918505
Test: make RunSettingsRoboTests ROBOTEST_FILTER=StorageItemPreferenceTest
      make RunSettingsRoboTests ROBOTEST_FILTER=StorageItemPreferenceControllerTest
      manual
      Click each category in Storage Settings.
Change-Id: Ib7beb1779a0fcbfd7b8ec52446707b105fcebff5
This commit is contained in:
Arc Wang
2021-03-23 15:20:56 +08:00
parent 11ad3be029
commit 2b00ecdda9
8 changed files with 531 additions and 434 deletions

View File

@@ -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;

View File

@@ -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();
}
}

View File

@@ -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<StorageItemPreference> 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<StorageAsyncLoader.AppsStorageResult> 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<String> getUsedKeys() {
List<String> 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;