Show other users in storage settings
Bug: 232969364 Test: croot && make RunSettingsRoboTests -j40 ROBOTEST_FILTER="com.android.settings.deviceinfo.storage.NonCurrentUserControllerTest" Change-Id: I8d933bec8f12faa971684939b722cfae957f4953
This commit is contained in:
@@ -32,11 +32,12 @@ import android.os.storage.VolumeRecord;
|
||||
import android.provider.SearchIndexableResource;
|
||||
import android.text.TextUtils;
|
||||
import android.util.SparseArray;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
import androidx.loader.content.Loader;
|
||||
import androidx.preference.PreferenceGroup;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.Utils;
|
||||
@@ -44,7 +45,7 @@ import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settings.deviceinfo.storage.AutomaticStorageManagementSwitchPreferenceController;
|
||||
import com.android.settings.deviceinfo.storage.DiskInitFragment;
|
||||
import com.android.settings.deviceinfo.storage.ManageStoragePreferenceController;
|
||||
import com.android.settings.deviceinfo.storage.SecondaryUserController;
|
||||
import com.android.settings.deviceinfo.storage.NonCurrentUserController;
|
||||
import com.android.settings.deviceinfo.storage.StorageAsyncLoader;
|
||||
import com.android.settings.deviceinfo.storage.StorageCacheHelper;
|
||||
import com.android.settings.deviceinfo.storage.StorageEntry;
|
||||
@@ -64,7 +65,6 @@ import com.android.settingslib.search.SearchIndexable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Storage Settings main UI is composed by 3 fragments:
|
||||
@@ -86,6 +86,7 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
private static final String TAG = "StorageDashboardFrag";
|
||||
private static final String SUMMARY_PREF_KEY = "storage_summary";
|
||||
private static final String SELECTED_STORAGE_ENTRY_KEY = "selected_storage_entry_key";
|
||||
private static final String TARGET_PREFERENCE_GROUP_KEY = "pref_non_current_users";
|
||||
private static final int STORAGE_JOB_ID = 0;
|
||||
private static final int ICON_JOB_ID = 1;
|
||||
private static final int VOLUME_SIZE_JOB_ID = 2;
|
||||
@@ -101,7 +102,7 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
private VolumeOptionMenuController mOptionMenuController;
|
||||
private StorageSelectionPreferenceController mStorageSelectionController;
|
||||
private StorageUsageProgressBarPreferenceController mStorageUsageProgressBarController;
|
||||
private List<AbstractPreferenceController> mSecondaryUsers;
|
||||
private List<NonCurrentUserController> mNonCurrentUsers;
|
||||
private boolean mIsWorkProfile;
|
||||
private int mUserId;
|
||||
private boolean mIsLoadedFromCache;
|
||||
@@ -232,9 +233,9 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
mOptionMenuController.setSelectedStorageEntry(mSelectedStorageEntry);
|
||||
getActivity().invalidateOptionsMenu();
|
||||
|
||||
// To prevent flicker, hides secondary users preference.
|
||||
// To prevent flicker, hides non-current users preference.
|
||||
// onReceivedSizes will set it visible for private storage.
|
||||
setSecondaryUsersVisible(false);
|
||||
setNonCurrentUsersVisible(false);
|
||||
|
||||
if (!mSelectedStorageEntry.isMounted()) {
|
||||
// Set null volume to hide category stats.
|
||||
@@ -254,7 +255,7 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
mAppsResult = null;
|
||||
// Hide the loading spinner if there is cached data.
|
||||
if (mStorageCacheHelper.hasCachedSizeInfo()) {
|
||||
//TODO(b/220259287): apply cache mechanism to secondary user
|
||||
//TODO(b/220259287): apply cache mechanism to non-current user
|
||||
mPreferenceController.onLoadFinished(mAppsResult, mUserId);
|
||||
} else {
|
||||
maybeSetLoading(isQuotaSupported());
|
||||
@@ -297,8 +298,8 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
mStorageEntries.addAll(
|
||||
StorageUtils.getAllStorageEntries(getContext(), mStorageManager));
|
||||
refreshUi();
|
||||
updateSecondaryUserControllers(mSecondaryUsers, mAppsResult);
|
||||
setSecondaryUsersVisible(true);
|
||||
updateNonCurrentUserControllers(mNonCurrentUsers, mAppsResult);
|
||||
setNonCurrentUsersVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -393,17 +394,13 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
// Cache total size and used size
|
||||
mStorageCacheHelper
|
||||
.cacheTotalSizeAndTotalUsedSize(mStorageInfo.totalBytes, privateUsedBytes);
|
||||
for (int i = 0, size = mSecondaryUsers.size(); i < size; i++) {
|
||||
final AbstractPreferenceController controller = mSecondaryUsers.get(i);
|
||||
if (controller instanceof SecondaryUserController) {
|
||||
SecondaryUserController userController = (SecondaryUserController) controller;
|
||||
userController.setTotalSize(mStorageInfo.totalBytes);
|
||||
}
|
||||
for (NonCurrentUserController userController : mNonCurrentUsers) {
|
||||
userController.setTotalSize(mStorageInfo.totalBytes);
|
||||
}
|
||||
|
||||
mPreferenceController.onLoadFinished(mAppsResult, mUserId);
|
||||
updateSecondaryUserControllers(mSecondaryUsers, mAppsResult);
|
||||
setSecondaryUsersVisible(true);
|
||||
updateNonCurrentUserControllers(mNonCurrentUsers, mAppsResult);
|
||||
setNonCurrentUsersVisible(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -429,20 +426,19 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
null /* volume */, new StorageManagerVolumeProvider(sm), mIsWorkProfile);
|
||||
controllers.add(mPreferenceController);
|
||||
|
||||
mSecondaryUsers = SecondaryUserController.getSecondaryUserControllers(context,
|
||||
mUserManager, mIsWorkProfile /* isWorkProfileOnly */);
|
||||
controllers.addAll(mSecondaryUsers);
|
||||
mNonCurrentUsers = NonCurrentUserController.getNonCurrentUserControllers(context,
|
||||
mUserManager);
|
||||
controllers.addAll(mNonCurrentUsers);
|
||||
|
||||
return controllers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the secondary user controller sizes.
|
||||
* Updates the non-current user controller sizes.
|
||||
*/
|
||||
private void updateSecondaryUserControllers(List<AbstractPreferenceController> controllers,
|
||||
private void updateNonCurrentUserControllers(List<NonCurrentUserController> controllers,
|
||||
SparseArray<StorageAsyncLoader.StorageResult> stats) {
|
||||
for (int i = 0, size = controllers.size(); i < size; i++) {
|
||||
final AbstractPreferenceController controller = controllers.get(i);
|
||||
for (AbstractPreferenceController controller : controllers) {
|
||||
if (controller instanceof StorageAsyncLoader.ResultHandler) {
|
||||
StorageAsyncLoader.ResultHandler userController =
|
||||
(StorageAsyncLoader.ResultHandler) controller;
|
||||
@@ -473,8 +469,8 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
controllers.add(new StorageItemPreferenceController(context, null /* host */,
|
||||
null /* volume */, new StorageManagerVolumeProvider(sm),
|
||||
false /* isWorkProfile */));
|
||||
controllers.addAll(SecondaryUserController.getSecondaryUserControllers(
|
||||
context, userManager, false /* isWorkProfileOnly */));
|
||||
controllers.addAll(NonCurrentUserController.getNonCurrentUserControllers(
|
||||
context, userManager));
|
||||
return controllers;
|
||||
}
|
||||
|
||||
@@ -501,6 +497,16 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
public void onLoaderReset(Loader<SparseArray<StorageAsyncLoader.StorageResult>> loader) {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void displayResourceTilesToScreen(PreferenceScreen screen) {
|
||||
final PreferenceGroup group = screen.findPreference(TARGET_PREFERENCE_GROUP_KEY);
|
||||
if (mNonCurrentUsers.isEmpty()) {
|
||||
screen.removePreference(group);
|
||||
}
|
||||
super.displayResourceTilesToScreen(screen);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public PrivateStorageInfo getPrivateStorageInfo() {
|
||||
return mStorageInfo;
|
||||
@@ -540,13 +546,9 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
.isQuotaSupported(mSelectedStorageEntry.getFsUuid());
|
||||
}
|
||||
|
||||
private void setSecondaryUsersVisible(boolean visible) {
|
||||
final Optional<SecondaryUserController> secondaryUserController = mSecondaryUsers.stream()
|
||||
.filter(controller -> controller instanceof SecondaryUserController)
|
||||
.map(controller -> (SecondaryUserController) controller)
|
||||
.findAny();
|
||||
if (secondaryUserController.isPresent()) {
|
||||
secondaryUserController.get().setPreferenceGroupVisible(visible);
|
||||
private void setNonCurrentUsersVisible(boolean visible) {
|
||||
if (!mNonCurrentUsers.isEmpty()) {
|
||||
mNonCurrentUsers.get(0).setPreferenceGroupVisible(visible);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -566,7 +568,7 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
@Override
|
||||
public void onLoadFinished(
|
||||
Loader<SparseArray<Drawable>> loader, SparseArray<Drawable> data) {
|
||||
mSecondaryUsers
|
||||
mNonCurrentUsers
|
||||
.stream()
|
||||
.filter(controller -> controller instanceof UserIconLoader.UserIconHandler)
|
||||
.forEach(
|
||||
|
Reference in New Issue
Block a user