Storage Settings hides categories when loading
To hide sorting animation. - Storage Settings always loads cache and updates UI, then loads storage size and updates UI. Remove the chche design because storage category preferences will hide during loading, it no meaning to load from cache and update UI. - Hides loading circle before storage category preferences become visible, it prevents flickers. - Remove Calculating... summary of StorageItemPreference. - Private storage category preferences and secondary user preference become visible at StorageItemPreferenceController#onLoadFinished. Bug: 188731179 Bug: 185547228 Bug: 188615591 Test: atest com.android.settings.deviceinfo atest com.android.settings.deviceinfo.storage make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.deviceinfo make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.deviceinfo.storage manual visual Change-Id: I3ebef5829ef4f806add07f58fa02520804768be5
This commit is contained in:
@@ -44,7 +44,6 @@ import com.android.settings.R;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settings.deviceinfo.storage.AutomaticStorageManagementSwitchPreferenceController;
|
||||
import com.android.settings.deviceinfo.storage.CachedStorageValuesHelper;
|
||||
import com.android.settings.deviceinfo.storage.DiskInitFragment;
|
||||
import com.android.settings.deviceinfo.storage.SecondaryUserController;
|
||||
import com.android.settings.deviceinfo.storage.StorageAsyncLoader;
|
||||
@@ -68,6 +67,7 @@ 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:
|
||||
@@ -101,7 +101,6 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
private StorageEntry mSelectedStorageEntry;
|
||||
private PrivateStorageInfo mStorageInfo;
|
||||
private SparseArray<StorageAsyncLoader.StorageResult> mAppsResult;
|
||||
private CachedStorageValuesHelper mCachedStorageValuesHelper;
|
||||
|
||||
private StorageItemPreferenceController mPreferenceController;
|
||||
private VolumeOptionMenuController mOptionMenuController;
|
||||
@@ -232,6 +231,10 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
mOptionMenuController.setSelectedStorageEntry(mSelectedStorageEntry);
|
||||
getActivity().invalidateOptionsMenu();
|
||||
|
||||
// To prevent flicker, hides secondary users preference.
|
||||
// onReceivedSizes will set it visible for private storage.
|
||||
setSecondaryUsersVisible(false);
|
||||
|
||||
if (!mSelectedStorageEntry.isMounted()) {
|
||||
// Set null volume to hide category stats.
|
||||
mPreferenceController.setVolume(null);
|
||||
@@ -242,6 +245,10 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
mAppsResult = null;
|
||||
maybeSetLoading(isQuotaSupported());
|
||||
|
||||
// To prevent flicker, sets null volume to hide category preferences.
|
||||
// onReceivedSizes will setVolume with the volume of selected storage.
|
||||
mPreferenceController.setVolume(null);
|
||||
|
||||
// Stats data is only available on private volumes.
|
||||
getLoaderManager().restartLoader(STORAGE_JOB_ID, Bundle.EMPTY, this);
|
||||
getLoaderManager()
|
||||
@@ -316,7 +323,6 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
@Override
|
||||
public void onViewCreated(View v, Bundle savedInstanceState) {
|
||||
super.onViewCreated(v, savedInstanceState);
|
||||
initializeCacheProvider();
|
||||
|
||||
EntityHeaderController.newInstance(getActivity(), this /*fragment*/,
|
||||
null /* header view */)
|
||||
@@ -355,6 +361,10 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
return;
|
||||
}
|
||||
|
||||
if (getView().findViewById(R.id.loading_container).getVisibility() == View.VISIBLE) {
|
||||
setLoading(false /* loading */, true /* animate */);
|
||||
}
|
||||
|
||||
final long privateUsedBytes = mStorageInfo.totalBytes - mStorageInfo.freeBytes;
|
||||
mPreferenceController.setVolume(mSelectedStorageEntry.getVolumeInfo());
|
||||
mPreferenceController.setUsedSize(privateUsedBytes);
|
||||
@@ -369,10 +379,7 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
|
||||
mPreferenceController.onLoadFinished(mAppsResult, mUserId);
|
||||
updateSecondaryUserControllers(mSecondaryUsers, mAppsResult);
|
||||
|
||||
if (getView().findViewById(R.id.loading_container).getVisibility() == View.VISIBLE) {
|
||||
setLoading(false, true);
|
||||
}
|
||||
setSecondaryUsersVisible(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -463,7 +470,6 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
public void onLoadFinished(Loader<SparseArray<StorageAsyncLoader.StorageResult>> loader,
|
||||
SparseArray<StorageAsyncLoader.StorageResult> data) {
|
||||
mAppsResult = data;
|
||||
maybeCacheFreshValues();
|
||||
onReceivedSizes();
|
||||
}
|
||||
|
||||
@@ -486,11 +492,6 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
return false;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public void setCachedStorageValuesHelper(CachedStorageValuesHelper helper) {
|
||||
mCachedStorageValuesHelper = helper;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public PrivateStorageInfo getPrivateStorageInfo() {
|
||||
return mStorageInfo;
|
||||
@@ -511,19 +512,6 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
mAppsResult = info;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void initializeCachedValues() {
|
||||
final PrivateStorageInfo info = mCachedStorageValuesHelper.getCachedPrivateStorageInfo();
|
||||
final SparseArray<StorageAsyncLoader.StorageResult> loaderResult =
|
||||
mCachedStorageValuesHelper.getCachedStorageResult();
|
||||
if (info == null || loaderResult == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
mStorageInfo = info;
|
||||
mAppsResult = loaderResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate loading UI and animation if it's necessary.
|
||||
*/
|
||||
@@ -537,24 +525,22 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeCacheProvider() {
|
||||
mCachedStorageValuesHelper = new CachedStorageValuesHelper(getContext(), mUserId);
|
||||
initializeCachedValues();
|
||||
onReceivedSizes();
|
||||
}
|
||||
|
||||
private void maybeCacheFreshValues() {
|
||||
if (mStorageInfo != null && mAppsResult != null) {
|
||||
mCachedStorageValuesHelper.cacheResult(mStorageInfo, mAppsResult.get(mUserId));
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isQuotaSupported() {
|
||||
return mSelectedStorageEntry.isMounted()
|
||||
&& getActivity().getSystemService(StorageStatsManager.class)
|
||||
.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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* IconLoaderCallbacks exists because StorageDashboardFragment already implements
|
||||
* LoaderCallbacks for a different type.
|
||||
@@ -614,7 +600,6 @@ public class StorageDashboardFragment extends DashboardFragment
|
||||
}
|
||||
|
||||
mStorageInfo = privateStorageInfo;
|
||||
maybeCacheFreshValues();
|
||||
onReceivedSizes();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user