OSDN Git Service

Do not retrive app detail if the fragment is exiting.
authorFan Zhang <zhfan@google.com>
Mon, 8 Apr 2019 19:29:27 +0000 (12:29 -0700)
committerFan Zhang <zhfan@google.com>
Mon, 8 Apr 2019 20:56:59 +0000 (13:56 -0700)
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

src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java

index 766fa50..8274634 100755 (executable)
@@ -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();
             }
         }
index 56e59f7..e46cd06 100644 (file)
@@ -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";