OSDN Git Service

Fix SystemUI crash for work challenge
authorRicky Wai <rickywai@google.com>
Tue, 5 Apr 2016 16:10:04 +0000 (17:10 +0100)
committerRicky Wai <rickywai@google.com>
Tue, 5 Apr 2016 16:28:59 +0000 (16:28 +0000)
We should not assume createConfirmDeviceCredentialIntent()
can always return an intent, for example, it has separate work challenge
but lock type is None, then createConfirmDeviceCredentialIntent() will
return null.

Bug: 27782917
Change-Id: I33e40f893f61e35a2e6ce732a47d651139f246a1

packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java

index 4ed6426..f5f5a92 100644 (file)
@@ -1843,11 +1843,12 @@ public abstract class BaseStatusBar extends SystemUI implements
                                             .getIdentifier();
                                     if (mLockPatternUtils.isSeparateProfileChallengeEnabled(userId)
                                             && mKeyguardManager.isDeviceLocked(userId)) {
-                                        // Show work challenge, do not run pendingintent and
-                                        // remove notification
-                                        startWorkChallenge(userId, intent.getIntentSender(),
-                                                notificationKey);
-                                        return;
+                                        if (startWorkChallengeIfNecessary(userId,
+                                                intent.getIntentSender(), notificationKey)) {
+                                            // Show work challenge, do not run pendingintent and
+                                            // remove notification
+                                            return;
+                                        }
                                     }
                                 }
                                 try {
@@ -1885,21 +1886,25 @@ public abstract class BaseStatusBar extends SystemUI implements
             }, afterKeyguardGone);
         }
 
-        public void startWorkChallenge(int userId, IntentSender intendSender,
+        public boolean startWorkChallengeIfNecessary(int userId, IntentSender intendSender,
                 String notificationKey) {
+            final Intent newIntent = mKeyguardManager.createConfirmDeviceCredentialIntent(null,
+                    null, userId);
+            if (newIntent == null) {
+                return false;
+            }
             final Intent callBackIntent = new Intent(
                     WORK_CHALLENGE_UNLOCKED_NOTIFICATION_ACTION);
             callBackIntent.putExtra(Intent.EXTRA_INTENT, intendSender);
             callBackIntent.putExtra(Intent.EXTRA_INDEX, notificationKey);
             callBackIntent.setPackage(mContext.getPackageName());
 
-            final Intent newIntent = mKeyguardManager.createConfirmDeviceCredentialIntent(null,
-                    null, userId);
             newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                     | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_CLEAR_TASK);
             newIntent.putExtra(Intent.EXTRA_INTENT, PendingIntent
                     .getBroadcast(mContext, 0, callBackIntent, 0).getIntentSender());
             mContext.startActivity(newIntent);
+            return true;
         }
 
         public void register(ExpandableNotificationRow row, StatusBarNotification sbn) {