From f6126e7a00defc36fefc659af6c99dd67b69bcc8 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Mon, 24 Apr 2017 16:57:35 -0700 Subject: [PATCH] Fix ANR in installed app details. InstalledAppDetails tries to refreshUi whenever something about a package changes. It does not need to refresh when the changing package is different from what's being displayed. Change-Id: Ib45289c39ee402cf8974bf52c881f44d225b8be5 Fix: 37424866 Test: make RunSettingsRoboTests --- .../settings/applications/InstalledAppDetails.java | 4 ++++ .../applications/InstalledAppDetailsTest.java | 22 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java index 16621f4930..c0d2dd88c4 100755 --- a/src/com/android/settings/applications/InstalledAppDetails.java +++ b/src/com/android/settings/applications/InstalledAppDetails.java @@ -454,6 +454,10 @@ public class InstalledAppDetails extends AppInfoBase @Override public void onPackageSizeChanged(String packageName) { + if (!TextUtils.equals(packageName, mPackageName)) { + Log.d(LOG_TAG, "Package change irrelevant, skipping"); + return; + } refreshUi(); } diff --git a/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java b/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java index 9c91ccfcb0..6cf4a599f7 100644 --- a/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java +++ b/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java @@ -18,7 +18,6 @@ package com.android.settings.applications; import static com.google.common.truth.Truth.assertThat; - import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doReturn; @@ -69,6 +68,9 @@ import org.robolectric.util.ReflectionHelpers; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public final class InstalledAppDetailsTest { + + private static final String PACKAGE_NAME = "test_package_name"; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Context mContext; @Mock @@ -182,6 +184,24 @@ public final class InstalledAppDetailsTest { } @Test + public void packageSizeChange_isOtherPackage_shouldNotRefreshUi() { + ReflectionHelpers.setField(mAppDetail, "mPackageName", PACKAGE_NAME); + mAppDetail.onPackageSizeChanged("Not_" + PACKAGE_NAME); + + verify(mAppDetail, never()).refreshUi(); + } + + @Test + public void packageSizeChange_isOwnPackage_shouldRefreshUi() { + doReturn(Boolean.TRUE).when(mAppDetail).refreshUi(); + ReflectionHelpers.setField(mAppDetail, "mPackageName", PACKAGE_NAME); + + mAppDetail.onPackageSizeChanged(PACKAGE_NAME); + + verify(mAppDetail).refreshUi(); + } + + @Test public void launchPowerUsageDetailFragment_shouldNotCrash() { mAppDetail.mBatteryPreference = mBatteryPreference; mAppDetail.mSipper = mBatterySipper; -- 2.11.0