From 8f7edfa108c58e8eb3101e238e349ee9fcdb06a3 Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Thu, 22 Feb 2018 10:39:13 -0800 Subject: [PATCH] Fix NPE in InstantAppButtonsPreferenceController - check for valid install options menu before trying to disable it. Change-Id: Ibe644a506094e66b0f657092a25557f5096d4942 Fixes: 73767192 Test: make RunSettingsRoboTests --- .../appinfo/InstantAppButtonsPreferenceController.java | 7 ++++--- .../InstantAppButtonsPreferenceControllerTest.java | 9 +++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java b/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java index dcae5ef506a..df64d76b43d 100644 --- a/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceController.java @@ -112,9 +112,10 @@ public class InstantAppButtonsPreferenceController extends BasePreferenceControl @Override public void onPrepareOptionsMenu(Menu menu) { mInstallMenu = menu.findItem(AppInfoDashboardFragment.INSTALL_INSTANT_APP_MENU); - final Intent appStoreIntent = AppStoreUtil.getAppStoreLink(mContext, mPackageName); - if (appStoreIntent == null) { - mInstallMenu.setEnabled(false); + if (mInstallMenu != null) { + if (AppStoreUtil.getAppStoreLink(mContext, mPackageName) == null) { + mInstallMenu.setEnabled(false); + } } } diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java index 935389c10a3..24823fe9d50 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/InstantAppButtonsPreferenceControllerTest.java @@ -179,6 +179,15 @@ public class InstantAppButtonsPreferenceControllerTest { verify(menuItem, never()).setEnabled(false); } + @Test + public void onPrepareOptionsMenu_installMenuNotFound_shoulNotCrash() { + final Menu menu = mock(Menu.class); + + mController.onPrepareOptionsMenu(menu); + + // no crash + } + @Test public void onOptionsItemSelected_shouldOpenAppStore() { final ResolveInfo resolveInfo = mock(ResolveInfo.class);