Merge "Cache mechanism for Storage page with work profile" into tm-dev

This commit is contained in:
TreeHugger Robot
2022-03-02 09:49:42 +00:00
committed by Android (Google) Code Review
2 changed files with 66 additions and 10 deletions

View File

@@ -20,6 +20,7 @@ import android.app.Activity;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserHandle;
import android.os.storage.DiskInfo; import android.os.storage.DiskInfo;
import android.os.storage.StorageEventListener; import android.os.storage.StorageEventListener;
import android.os.storage.StorageManager; import android.os.storage.StorageManager;
@@ -36,6 +37,7 @@ import com.android.settings.deviceinfo.StorageCategoryFragment;
import com.android.settings.deviceinfo.VolumeOptionMenuController; import com.android.settings.deviceinfo.VolumeOptionMenuController;
import com.android.settings.deviceinfo.storage.AutomaticStorageManagementSwitchPreferenceController; import com.android.settings.deviceinfo.storage.AutomaticStorageManagementSwitchPreferenceController;
import com.android.settings.deviceinfo.storage.DiskInitFragment; import com.android.settings.deviceinfo.storage.DiskInitFragment;
import com.android.settings.deviceinfo.storage.StorageCacheHelper;
import com.android.settings.deviceinfo.storage.StorageEntry; import com.android.settings.deviceinfo.storage.StorageEntry;
import com.android.settings.deviceinfo.storage.StorageSelectionPreferenceController; import com.android.settings.deviceinfo.storage.StorageSelectionPreferenceController;
import com.android.settings.deviceinfo.storage.StorageUsageProgressBarPreferenceController; import com.android.settings.deviceinfo.storage.StorageUsageProgressBarPreferenceController;
@@ -71,6 +73,8 @@ public class ProfileSelectStorageFragment extends ProfileSelectFragment {
private StorageSelectionPreferenceController mStorageSelectionController; private StorageSelectionPreferenceController mStorageSelectionController;
private StorageUsageProgressBarPreferenceController mStorageUsageProgressBarController; private StorageUsageProgressBarPreferenceController mStorageUsageProgressBarController;
private VolumeOptionMenuController mOptionMenuController; private VolumeOptionMenuController mOptionMenuController;
private boolean mIsLoadedFromCache;
private StorageCacheHelper mStorageCacheHelper;
private final StorageEventListener mStorageEventListener = new StorageEventListener() { private final StorageEventListener mStorageEventListener = new StorageEventListener() {
@Override @Override
@@ -246,11 +250,20 @@ public class ProfileSelectStorageFragment extends ProfileSelectFragment {
} }
initializeOptionsMenu(activity); initializeOptionsMenu(activity);
if (mStorageCacheHelper.hasCachedSizeInfo()) {
mIsLoadedFromCache = true;
mStorageEntries.clear();
mStorageEntries.addAll(
StorageUtils.getAllStorageEntries(getContext(), mStorageManager));
refreshUi();
}
} }
@Override @Override
public void onAttach(Context context) { public void onAttach(Context context) {
super.onAttach(context); super.onAttach(context);
mStorageCacheHelper = new StorageCacheHelper(getContext(), UserHandle.myUserId());
use(AutomaticStorageManagementSwitchPreferenceController.class).setFragmentManager( use(AutomaticStorageManagementSwitchPreferenceController.class).setFragmentManager(
getFragmentManager()); getFragmentManager());
mStorageSelectionController = use(StorageSelectionPreferenceController.class); mStorageSelectionController = use(StorageSelectionPreferenceController.class);
@@ -281,9 +294,14 @@ public class ProfileSelectStorageFragment extends ProfileSelectFragment {
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
if (mIsLoadedFromCache) {
mIsLoadedFromCache = false;
} else {
mStorageEntries.clear(); mStorageEntries.clear();
mStorageEntries.addAll(StorageUtils.getAllStorageEntries(getContext(), mStorageManager)); mStorageEntries.addAll(
StorageUtils.getAllStorageEntries(getContext(), mStorageManager));
refreshUi(); refreshUi();
}
mStorageManager.registerListener(mStorageEventListener); mStorageManager.registerListener(mStorageEventListener);
} }

View File

@@ -39,6 +39,7 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.profileselector.ProfileSelectFragment; import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
import com.android.settings.deviceinfo.storage.SecondaryUserController; import com.android.settings.deviceinfo.storage.SecondaryUserController;
import com.android.settings.deviceinfo.storage.StorageAsyncLoader; import com.android.settings.deviceinfo.storage.StorageAsyncLoader;
import com.android.settings.deviceinfo.storage.StorageCacheHelper;
import com.android.settings.deviceinfo.storage.StorageEntry; import com.android.settings.deviceinfo.storage.StorageEntry;
import com.android.settings.deviceinfo.storage.StorageItemPreferenceController; import com.android.settings.deviceinfo.storage.StorageItemPreferenceController;
import com.android.settings.deviceinfo.storage.UserIconLoader; import com.android.settings.deviceinfo.storage.UserIconLoader;
@@ -90,6 +91,8 @@ public class StorageCategoryFragment extends DashboardFragment
private boolean mIsWorkProfile; private boolean mIsWorkProfile;
private int mUserId; private int mUserId;
private Preference mFreeUpSpacePreference; private Preference mFreeUpSpacePreference;
private boolean mIsLoadedFromCache;
private StorageCacheHelper mStorageCacheHelper;
/** /**
* Refresh UI for specified storageEntry. * Refresh UI for specified storageEntry.
@@ -111,14 +114,23 @@ public class StorageCategoryFragment extends DashboardFragment
mPreferenceController.setVolume(null); mPreferenceController.setVolume(null);
return; return;
} }
if (mStorageCacheHelper.hasCachedSizeInfo() && mSelectedStorageEntry.isPrivate()) {
StorageCacheHelper.StorageCache cachedData = mStorageCacheHelper.retrieveCachedSize();
mPreferenceController.setVolume(mSelectedStorageEntry.getVolumeInfo());
mPreferenceController.setUsedSize(cachedData.usedSize);
mPreferenceController.setTotalSize(cachedData.totalSize);
}
if (mSelectedStorageEntry.isPrivate()) { if (mSelectedStorageEntry.isPrivate()) {
mStorageInfo = null; mStorageInfo = null;
mAppsResult = null; mAppsResult = null;
if (mStorageCacheHelper.hasCachedSizeInfo()) {
mPreferenceController.onLoadFinished(mAppsResult, mUserId);
} else {
maybeSetLoading(isQuotaSupported()); maybeSetLoading(isQuotaSupported());
// To prevent flicker, sets null volume to hide category preferences. // To prevent flicker, sets null volume to hide category preferences.
// onReceivedSizes will setVolume with the volume of selected storage. // onReceivedSizes will setVolume with the volume of selected storage.
mPreferenceController.setVolume(null); mPreferenceController.setVolume(null);
}
// Stats data is only available on private volumes. // Stats data is only available on private volumes.
getLoaderManager().restartLoader(STORAGE_JOB_ID, Bundle.EMPTY, this); getLoaderManager().restartLoader(STORAGE_JOB_ID, Bundle.EMPTY, this);
@@ -141,6 +153,15 @@ public class StorageCategoryFragment extends DashboardFragment
} }
initializePreference(); initializePreference();
if (mStorageCacheHelper.hasCachedSizeInfo()) {
mIsLoadedFromCache = true;
if (mSelectedStorageEntry != null) {
refreshUi(mSelectedStorageEntry);
}
updateSecondaryUserControllers(mSecondaryUsers, mAppsResult);
setSecondaryUsersVisible(true);
}
} }
private void initializePreference() { private void initializePreference() {
@@ -156,6 +177,7 @@ public class StorageCategoryFragment extends DashboardFragment
mIsWorkProfile = getArguments().getInt(ProfileSelectFragment.EXTRA_PROFILE) mIsWorkProfile = getArguments().getInt(ProfileSelectFragment.EXTRA_PROFILE)
== ProfileSelectFragment.ProfileType.WORK; == ProfileSelectFragment.ProfileType.WORK;
mUserId = Utils.getCurrentUserId(mUserManager, mIsWorkProfile); mUserId = Utils.getCurrentUserId(mUserManager, mIsWorkProfile);
mStorageCacheHelper = new StorageCacheHelper(getContext(), mUserId);
super.onAttach(context); super.onAttach(context);
} }
@@ -164,10 +186,24 @@ public class StorageCategoryFragment extends DashboardFragment
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
if (mIsLoadedFromCache) {
mIsLoadedFromCache = false;
} else {
if (mSelectedStorageEntry != null) { if (mSelectedStorageEntry != null) {
refreshUi(mSelectedStorageEntry); refreshUi(mSelectedStorageEntry);
} }
} }
}
@Override
public void onPause() {
super.onPause();
// Destroy the data loaders to prevent unnecessary data loading when switching back to the
// page.
getLoaderManager().destroyLoader(STORAGE_JOB_ID);
getLoaderManager().destroyLoader(ICON_JOB_ID);
getLoaderManager().destroyLoader(VOLUME_SIZE_JOB_ID);
}
@Override @Override
public void onSaveInstanceState(Bundle outState) { public void onSaveInstanceState(Bundle outState) {
@@ -188,6 +224,8 @@ public class StorageCategoryFragment extends DashboardFragment
mPreferenceController.setVolume(mSelectedStorageEntry.getVolumeInfo()); mPreferenceController.setVolume(mSelectedStorageEntry.getVolumeInfo());
mPreferenceController.setUsedSize(privateUsedBytes); mPreferenceController.setUsedSize(privateUsedBytes);
mPreferenceController.setTotalSize(mStorageInfo.totalBytes); mPreferenceController.setTotalSize(mStorageInfo.totalBytes);
// Cache total size infor and used size info
mStorageCacheHelper.cacheTotalSizeAndUsedSize(mStorageInfo.totalBytes, privateUsedBytes);
for (int i = 0, size = mSecondaryUsers.size(); i < size; i++) { for (int i = 0, size = mSecondaryUsers.size(); i < size; i++) {
final AbstractPreferenceController controller = mSecondaryUsers.get(i); final AbstractPreferenceController controller = mSecondaryUsers.get(i);
if (controller instanceof SecondaryUserController) { if (controller instanceof SecondaryUserController) {