diff --git a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java index 7cc5d1ab890..5790d34a478 100755 --- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java +++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java @@ -174,6 +174,12 @@ public class AppInfoDashboardFragment extends DashboardFragment setHasOptionsMenu(true); } + @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(); 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 fabf9aeeb36..b7e414c9a78 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 @@ 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); + } + }