From 1d88f4c61b622f03ba5ba2cdf6911dcee5449e6a Mon Sep 17 00:00:00 2001 From: Raff Tsai Date: Mon, 29 Oct 2018 13:50:47 +0800 Subject: [PATCH] Fix Settings crash on changing device orientation - AppDataUsage assign preferences to Applist in loaderCallback. When device rotate we will assign preference to Applist second time which throw IllegalStateException Exception. We will use restartLoader which create new loader rather than use existed loader. Change-Id: I540d645e930a29f989c4fe374e2103ca201da198 Fixes: 118195540 Test: manual --- src/com/android/settings/datausage/AppDataUsage.java | 5 +++-- src/com/android/settings/datausage/AppDataUsageV2.java | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/datausage/AppDataUsage.java b/src/com/android/settings/datausage/AppDataUsage.java index 4dddeab6b2e..78aa6c27868 100644 --- a/src/com/android/settings/datausage/AppDataUsage.java +++ b/src/com/android/settings/datausage/AppDataUsage.java @@ -190,7 +190,8 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC if (mPackages.size() > 1) { mAppList = (PreferenceCategory) findPreference(KEY_APP_LIST); - getLoaderManager().initLoader(LOADER_APP_PREF, Bundle.EMPTY, mAppPrefCallbacks); + LoaderManager.getInstance(this).restartLoader(LOADER_APP_PREF, Bundle.EMPTY, + mAppPrefCallbacks); } else { removePreference(KEY_APP_LIST); } @@ -221,7 +222,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC mDataSaverBackend.addListener(this); } mPolicy = services.mPolicyEditor.getPolicy(mTemplate); - getLoaderManager().restartLoader(LOADER_CHART_DATA, + LoaderManager.getInstance(this).restartLoader(LOADER_CHART_DATA, ChartDataLoaderCompat.buildArgs(mTemplate, mAppItem), mChartDataCallbacks); updatePrefs(); } diff --git a/src/com/android/settings/datausage/AppDataUsageV2.java b/src/com/android/settings/datausage/AppDataUsageV2.java index 7515c51d5c5..6a31726ea06 100644 --- a/src/com/android/settings/datausage/AppDataUsageV2.java +++ b/src/com/android/settings/datausage/AppDataUsageV2.java @@ -177,7 +177,8 @@ public class AppDataUsageV2 extends DataUsageBaseFragment implements OnPreferenc if (mPackages.size() > 1) { mAppList = (PreferenceCategory) findPreference(KEY_APP_LIST); - getLoaderManager().initLoader(LOADER_APP_PREF, Bundle.EMPTY, mAppPrefCallbacks); + LoaderManager.getInstance(this).restartLoader(LOADER_APP_PREF, Bundle.EMPTY, + mAppPrefCallbacks); } else { removePreference(KEY_APP_LIST); } @@ -201,7 +202,8 @@ public class AppDataUsageV2 extends DataUsageBaseFragment implements OnPreferenc if (mDataSaverBackend != null) { mDataSaverBackend.addListener(this); } - getLoaderManager().restartLoader(LOADER_APP_USAGE_DATA, null /* args */, mUidDataCallbacks); + LoaderManager.getInstance(this).restartLoader(LOADER_APP_USAGE_DATA, null /* args */, + mUidDataCallbacks); updatePrefs(); }