From c3e4619af17c6c6afce98ce536a712243dacdcca Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Mon, 30 Apr 2018 17:38:29 -0700 Subject: [PATCH] Fix crash in ExternalSourceDetailPreferenceController. - Add null check for the package info when trying to retrieve the install app state. During package update, the package info might becomes null. The App info activity will finish in that case, but this method might be called before the activity actually finishes. Change-Id: I18ff448666dfb403bb6693fccd3e54276db36f37 Fixes: 78257414 Test: make RunSettingsRoboTests --- .../appinfo/ExternalSourceDetailPreferenceController.java | 7 ++++++- .../ExternalSourceDetailPreferenceControllerTest.java | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceController.java b/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceController.java index a1e85364266..d9b9d6a7d0b 100644 --- a/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceController.java @@ -17,6 +17,7 @@ package com.android.settings.applications.appinfo; import android.content.Context; +import android.content.pm.PackageInfo; import android.os.UserManager; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; @@ -57,9 +58,13 @@ public class ExternalSourceDetailPreferenceController extends AppInfoPreferenceC @VisibleForTesting boolean isPotentialAppSource() { + final PackageInfo packageInfo = mParent.getPackageInfo(); + if (packageInfo == null) { + return false; + } AppStateInstallAppsBridge.InstallAppsState appState = new AppStateInstallAppsBridge(mContext, null, null).createInstallAppsStateFor( - mPackageName, mParent.getPackageInfo().applicationInfo.uid); + mPackageName, packageInfo.applicationInfo.uid); return appState.isPotentialAppSource(); } diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceControllerTest.java index dae72fc7ac2..fba4d763207 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceControllerTest.java @@ -101,4 +101,12 @@ public class ExternalSourceDetailPreferenceControllerTest { verify(mPreference).setSummary(summary); } + + @Test + public void isPotentialAppSource_nullPackageInfo_shouldNotCrash() { + when(mUserManager.isManagedProfile()).thenReturn(false); + + mController.isPotentialAppSource(); + // no crash + } }