From 276edc8d86b2a5164619c1d3224abd9d056acdf7 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Mon, 8 Apr 2019 12:29:27 -0700 Subject: [PATCH] Do not retrive app detail if the fragment is exiting. The exit flag can be set by a variety of things, such as when package is removed, or package is invalid (hidden mainline module). Loading such packages changes the internal state of ApplicationsState class (an app singleton), which leads to inconsistencies later. Fixes: 130166465 Test: robotest Change-Id: Ib09240cb694fa16692914a7aa9ce354869615c2d --- .../applications/appinfo/AppInfoDashboardFragment.java | 7 ++++--- .../applications/appinfo/AppInfoDashboardFragmentTest.java | 7 +++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java index 766fa50acc5..8274634a01f 100755 --- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java +++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java @@ -112,7 +112,8 @@ public class AppInfoDashboardFragment extends DashboardFragment private UserManager mUserManager; private PackageManager mPm; - private boolean mFinishing; + @VisibleForTesting + boolean mFinishing; private boolean mListeningToPackageRemove; @@ -544,7 +545,7 @@ public class AppInfoDashboardFragment extends DashboardFragment @VisibleForTesting void retrieveAppEntry() { final Activity activity = getActivity(); - if (activity == null) { + if (activity == null || mFinishing) { return; } if (mState == null) { @@ -650,7 +651,7 @@ public class AppInfoDashboardFragment extends DashboardFragment || TextUtils.equals(mAppEntry.info.packageName, packageName)) { onPackageRemoved(); } else if (mAppEntry.info.isResourceOverlay() - && TextUtils.equals(mPackageInfo.overlayTarget, packageName)) { + && TextUtils.equals(mPackageInfo.overlayTarget, packageName)) { refreshUi(); } } diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java index 56e59f7bd0e..e46cd06afe6 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java @@ -281,6 +281,13 @@ public final class AppInfoDashboardFragmentTest { assertThat(mFragment.createPreferenceControllers(mShadowContext)).isNull(); } + @Test + public void getPreferenceControllers_exiting_shouldReturnNull() { + mFragment.mFinishing = true; + + assertThat(mFragment.createPreferenceControllers(mShadowContext)).isNull(); + } + @Test public void getNumberOfUserWithPackageInstalled_twoUsersInstalled_shouldReturnTwo() throws PackageManager.NameNotFoundException {