Merge "Reduce Data Saver Settings launch time"
diff --git a/src/com/android/settings/datausage/DataSaverSummary.java b/src/com/android/settings/datausage/DataSaverSummary.java
index 744f692..31a62d4 100644
--- a/src/com/android/settings/datausage/DataSaverSummary.java
+++ b/src/com/android/settings/datausage/DataSaverSummary.java
@@ -55,17 +55,21 @@
// Flag used to avoid infinite loop due if user switch it on/off too quicky.
private boolean mSwitching;
+ private Runnable mLoadAppRunnable = () -> {
+ mApplicationsState = ApplicationsState.getInstance(
+ (Application) getContext().getApplicationContext());
+ mDataUsageBridge = new AppStateDataUsageBridge(mApplicationsState, this, mDataSaverBackend);
+ mSession = mApplicationsState.newSession(this, getSettingsLifecycle());
+ mDataUsageBridge.resume(true /* forceLoadAllApps */);
+ };
+
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.data_saver);
mUnrestrictedAccess = findPreference(KEY_UNRESTRICTED_ACCESS);
- mApplicationsState = ApplicationsState.getInstance(
- (Application) getContext().getApplicationContext());
mDataSaverBackend = new DataSaverBackend(getContext());
- mDataUsageBridge = new AppStateDataUsageBridge(mApplicationsState, this, mDataSaverBackend);
- mSession = mApplicationsState.newSession(this, getSettingsLifecycle());
}
@Override
@@ -83,14 +87,20 @@
mDataSaverBackend.refreshAllowlist();
mDataSaverBackend.refreshDenylist();
mDataSaverBackend.addListener(this);
- mDataUsageBridge.resume(true /* forceLoadAllApps */);
+ if (mDataUsageBridge != null) {
+ mDataUsageBridge.resume(true /* forceLoadAllApps */);
+ } else {
+ getView().post(mLoadAppRunnable);
+ }
}
@Override
public void onPause() {
super.onPause();
mDataSaverBackend.remListener(this);
- mDataUsageBridge.pause();
+ if (mDataUsageBridge != null) {
+ mDataUsageBridge.pause();
+ }
}
@Override
@@ -132,24 +142,7 @@
@Override
public void onExtraInfoUpdated() {
- if (!isAdded()) {
- return;
- }
- int count = 0;
- final ArrayList<AppEntry> allApps = mSession.getAllApps();
- final int N = allApps.size();
- for (int i = 0; i < N; i++) {
- final AppEntry entry = allApps.get(i);
- if (!ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER.filterApp(entry)) {
- continue;
- }
- if (entry.extraInfo != null && ((AppStateDataUsageBridge.DataUsageState)
- entry.extraInfo).isDataSaverAllowlisted) {
- count++;
- }
- }
- mUnrestrictedAccess.setSummary(getResources().getQuantityString(
- R.plurals.data_saver_unrestricted_summary, count, count));
+ updateUnrestrictedAccessSummary();
}
@Override
@@ -179,12 +172,12 @@
@Override
public void onAllSizesComputed() {
-
+ updateUnrestrictedAccessSummary();
}
@Override
public void onLauncherInfoChanged() {
-
+ updateUnrestrictedAccessSummary();
}
@Override
@@ -192,6 +185,23 @@
}
+ private void updateUnrestrictedAccessSummary() {
+ if (!isAdded() || isFinishingOrDestroyed() || mSession == null) return;
+
+ int count = 0;
+ for (AppEntry entry : mSession.getAllApps()) {
+ if (!ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER.filterApp(entry)) {
+ continue;
+ }
+ if (entry.extraInfo != null && ((AppStateDataUsageBridge.DataUsageState)
+ entry.extraInfo).isDataSaverAllowlisted) {
+ count++;
+ }
+ }
+ mUnrestrictedAccess.setSummary(getResources().getQuantityString(
+ R.plurals.data_saver_unrestricted_summary, count, count));
+ }
+
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.data_saver) {