Merge "Unregister broadcast receiver from AppInfoDashboardFragment."
diff --git a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
index 7cc5d1a..5790d34 100755
--- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
+++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
@@ -175,6 +175,12 @@
     }
 
     @Override
+    public void onDestroy() {
+        stopListeningToPackageRemove();
+        super.onDestroy();
+    }
+
+    @Override
     public int getMetricsCategory() {
         return MetricsEvent.APPLICATIONS_INSTALLED_APP_DETAILS;
     }
@@ -737,7 +743,8 @@
         }
     }
 
-    private void startListeningToPackageRemove() {
+    @VisibleForTesting
+    void startListeningToPackageRemove() {
         if (mListeningToPackageRemove) {
             return;
         }
@@ -755,7 +762,8 @@
         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();
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 fabf9ae..b7e414c 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java
@@ -18,6 +18,7 @@
 
 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.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.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 @@
         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);
+    }
+
 }