OSDN Git Service

Unregister broadcast receiver from AppInfoDashboardFragment.
authorDoris Ling <dling@google.com>
Sat, 3 Feb 2018 00:13:47 +0000 (16:13 -0800)
committerDoris Ling <dling@google.com>
Sat, 3 Feb 2018 00:13:47 +0000 (16:13 -0800)
- onDestroy() call is missing from the fragment. Added it to unregister
the receiver that listens to the package remover.

Change-Id: I27c67a19e11824116849b769f0a7951b80c40f84
Fixes: 72879457
Test: make RunSettingsRoboTests

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

index 7cc5d1a..5790d34 100755 (executable)
@@ -175,6 +175,12 @@ public class AppInfoDashboardFragment extends DashboardFragment
     }
 
     @Override
+    public void onDestroy() {
+        stopListeningToPackageRemove();
+        super.onDestroy();
+    }
+
+    @Override
     public int getMetricsCategory() {
         return MetricsEvent.APPLICATIONS_INSTALLED_APP_DETAILS;
     }
@@ -737,7 +743,8 @@ public class AppInfoDashboardFragment extends DashboardFragment
         }
     }
 
-    private void startListeningToPackageRemove() {
+    @VisibleForTesting
+    void startListeningToPackageRemove() {
         if (mListeningToPackageRemove) {
             return;
         }
@@ -755,7 +762,8 @@ public class AppInfoDashboardFragment extends DashboardFragment
         getContext().unregisterReceiver(mPackageRemovedReceiver);
     }
 
-    private final BroadcastReceiver mPackageRemovedReceiver = new BroadcastReceiver() {
+    @VisibleForTesting
+    final BroadcastReceiver mPackageRemovedReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
             final String packageName = intent.getData().getSchemeSpecificPart();
index fabf9ae..b7e414c 100644 (file)
@@ -18,6 +18,7 @@ package com.android.settings.applications.appinfo;
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
@@ -27,6 +28,7 @@ import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
@@ -42,6 +44,7 @@ import com.android.settings.wrapper.DevicePolicyManagerWrapper;
 import com.android.settingslib.applications.AppUtils;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
 import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
+import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -255,4 +258,18 @@ public final class AppInfoDashboardFragmentTest {
         assertThat(mFragment.getNumberOfUserWithPackageInstalled(packageName)).isEqualTo(1);
 
     }
+
+    @Test
+    public void onDestroy_shouldUnregisterReceiver() {
+        final Context context = mock(Context.class);
+        doReturn(context).when(mFragment).getContext();
+        ReflectionHelpers.setField(mFragment, "mLifecycle", mock(Lifecycle.class));
+        ReflectionHelpers.setField(mFragment, "mCheckedForLoaderManager", true);
+        mFragment.startListeningToPackageRemove();
+
+        mFragment.onDestroy();
+
+        verify(context).unregisterReceiver(mFragment.mPackageRemovedReceiver);
+    }
+
 }