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 --- .../settings/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 766fa50acc..8274634a01 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 56e59f7bd0..e46cd06afe 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java @@ -282,6 +282,13 @@ public final class AppInfoDashboardFragmentTest { } @Test + public void getPreferenceControllers_exiting_shouldReturnNull() { + mFragment.mFinishing = true; + + assertThat(mFragment.createPreferenceControllers(mShadowContext)).isNull(); + } + + @Test public void getNumberOfUserWithPackageInstalled_twoUsersInstalled_shouldReturnTwo() throws PackageManager.NameNotFoundException { final String packageName = "Package1"; -- 2.11.0