From 945fd0074a631722e10c63c0006bfd10729ca8a0 Mon Sep 17 00:00:00 2001 From: Rubin Xu Date: Fri, 29 Jan 2016 15:37:05 +0000 Subject: [PATCH] Watch out for null pointers when getting profile owner info Bug: 22776761 Change-Id: If9b7fe603c52b953633a81642b506c0b2fa8dc3a --- .../internal/app/UnlaunchableAppActivity.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/core/java/com/android/internal/app/UnlaunchableAppActivity.java b/core/java/com/android/internal/app/UnlaunchableAppActivity.java index aada6e3e83c89..29190f9baa0a7 100644 --- a/core/java/com/android/internal/app/UnlaunchableAppActivity.java +++ b/core/java/com/android/internal/app/UnlaunchableAppActivity.java @@ -32,6 +32,7 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; +import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -69,12 +70,11 @@ public class UnlaunchableAppActivity extends Activity } String dialogTitle; - String dialogMessage; + String dialogMessage = null; if (mReason == UNLAUNCHABLE_REASON_QUIET_MODE) { dialogTitle = getResources().getString(R.string.work_mode_off_title); dialogMessage = getResources().getString(R.string.work_mode_off_message); } else if (mReason == UNLAUNCHABLE_REASON_SUSPENDED_PACKAGE) { - PackageManager pm = getPackageManager(); DevicePolicyManager dpm = (DevicePolicyManager) getSystemService( Context.DEVICE_POLICY_SERVICE); String packageName = intent.getStringExtra(Intent.EXTRA_PACKAGE_NAME); @@ -91,12 +91,19 @@ public class UnlaunchableAppActivity extends Activity } dialogTitle = String.format(getResources().getString(R.string.suspended_package_title), packageLabel); - dialogMessage = dpm.getShortSupportMessageForUser(dpm.getProfileOwnerAsUser(mUserId), - mUserId); - if (dialogMessage == null) { - dialogMessage = String.format( - getResources().getString(R.string.suspended_package_message), - dpm.getProfileOwnerNameAsUser(mUserId)); + ComponentName profileOwner = dpm.getProfileOwnerAsUser(mUserId); + String profileOwnerName = null; + if (profileOwner != null) { + dialogMessage = dpm.getShortSupportMessageForUser(profileOwner, mUserId); + profileOwnerName = dpm.getProfileOwnerNameAsUser(mUserId); + } + // Fall back to standard message if profile owner hasn't set something specific. + if (TextUtils.isEmpty(dialogMessage)) { + if (TextUtils.isEmpty(profileOwnerName)) { + profileOwnerName = getResources().getString(R.string.unknownName); + } + dialogMessage = getResources().getString(R.string.suspended_package_message, + profileOwnerName); } } else { Log.wtf(TAG, "Invalid unlaunchable type: " + mReason);