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:
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user