Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java +6 −67 Original line number Original line Diff line number Diff line Loading @@ -30,7 +30,6 @@ import android.content.IntentSender; import android.os.Handler; import android.os.Handler; import android.os.RemoteException; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserHandle; import android.util.Log; import android.view.View; import android.view.View; import android.view.ViewParent; import android.view.ViewParent; Loading @@ -49,8 +48,6 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController; import java.util.concurrent.atomic.AtomicReference; import javax.inject.Inject; import javax.inject.Inject; import javax.inject.Singleton; import javax.inject.Singleton; Loading @@ -58,8 +55,7 @@ import javax.inject.Singleton; */ */ @Singleton @Singleton public class StatusBarRemoteInputCallback implements Callback, Callbacks, public class StatusBarRemoteInputCallback implements Callback, Callbacks, StatusBarStateController.StateListener, KeyguardStateController.Callback { StatusBarStateController.StateListener { private static final String TAG = StatusBarRemoteInputCallback.class.getSimpleName(); private final KeyguardStateController mKeyguardStateController; private final KeyguardStateController mKeyguardStateController; private final SysuiStatusBarStateController mStatusBarStateController; private final SysuiStatusBarStateController mStatusBarStateController; Loading @@ -78,7 +74,6 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, private int mDisabled2; private int mDisabled2; protected BroadcastReceiver mChallengeReceiver = new ChallengeReceiver(); protected BroadcastReceiver mChallengeReceiver = new ChallengeReceiver(); private Handler mMainHandler = new Handler(); private Handler mMainHandler = new Handler(); private final AtomicReference<Intent> mPendingConfirmCredentialIntent = new AtomicReference(); /** /** */ */ Loading Loading @@ -107,9 +102,6 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, mActionClickLogger = clickLogger; mActionClickLogger = clickLogger; mActivityIntentHelper = new ActivityIntentHelper(mContext); mActivityIntentHelper = new ActivityIntentHelper(mContext); mGroupManager = groupManager; mGroupManager = groupManager; // Listen to onKeyguardShowingChanged in case a managed profile needs to be unlocked // once the primary profile's keyguard is no longer shown. mKeyguardStateController.addCallback(this); } } @Override @Override Loading Loading @@ -213,39 +205,12 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, // Clear pending remote view, as we do not want to trigger pending remote input view when // Clear pending remote view, as we do not want to trigger pending remote input view when // it's called by other code // it's called by other code mPendingWorkRemoteInputView = null; mPendingWorkRemoteInputView = null; // Begin old BaseStatusBar.startWorkChallengeIfNecessary. final Intent newIntent = createConfirmDeviceCredentialIntent( userId, intendSender, notificationKey); if (newIntent == null) { Log.w(TAG, String.format("Cannot create intent to unlock user %d", userId)); return false; } mPendingConfirmCredentialIntent.set(newIntent); // If the Keyguard is currently showing, starting the ConfirmDeviceCredentialActivity // would cause it to pause, not letting the user actually unlock the managed profile. // Instead, wait until we receive a callback indicating it is no longer showing and // then start the pending intent. if (mKeyguardStateController.isShowing()) { // Do nothing, since the callback will get the pending intent and start it. Log.w(TAG, String.format("Keyguard is showing, waiting until it's not")); } else { startPendingConfirmDeviceCredentialIntent(); } return true; } private Intent createConfirmDeviceCredentialIntent( int userId, IntentSender intendSender, String notificationKey) { final Intent newIntent = mKeyguardManager.createConfirmDeviceCredentialIntent(null, final Intent newIntent = mKeyguardManager.createConfirmDeviceCredentialIntent(null, null, userId); null, userId); if (newIntent == null) { if (newIntent == null) { return null; return false; } } final Intent callBackIntent = new Intent(NOTIFICATION_UNLOCKED_BY_WORK_CHALLENGE_ACTION); final Intent callBackIntent = new Intent(NOTIFICATION_UNLOCKED_BY_WORK_CHALLENGE_ACTION); callBackIntent.putExtra(Intent.EXTRA_INTENT, intendSender); callBackIntent.putExtra(Intent.EXTRA_INTENT, intendSender); callBackIntent.putExtra(Intent.EXTRA_INDEX, notificationKey); callBackIntent.putExtra(Intent.EXTRA_INDEX, notificationKey); Loading @@ -261,40 +226,14 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, newIntent.putExtra( newIntent.putExtra( Intent.EXTRA_INTENT, Intent.EXTRA_INTENT, callBackPendingIntent.getIntentSender()); callBackPendingIntent.getIntentSender()); return newIntent; } private void startPendingConfirmDeviceCredentialIntent() { final Intent pendingIntent = mPendingConfirmCredentialIntent.getAndSet(null); if (pendingIntent == null) { return; } try { try { if (mKeyguardStateController.isShowing()) { ActivityManager.getService().startConfirmDeviceCredentialIntent(newIntent, Log.w(TAG, "Keyguard is showing while starting confirm device credential intent."); } ActivityManager.getService().startConfirmDeviceCredentialIntent(pendingIntent, null /*options*/); null /*options*/); } catch (RemoteException ex) { } catch (RemoteException ex) { // ignore // ignore } } } return true; // End old BaseStatusBar.startWorkChallengeIfNecessary. @Override public void onKeyguardShowingChanged() { if (mKeyguardStateController.isShowing()) { // In order to avoid jarring UX where/ the managed profile challenge is shown and // immediately dismissed, do not attempt to start the confirm device credential // activity if the keyguard is still showing. if (mPendingConfirmCredentialIntent.get() != null) { Log.w(TAG, "There's a pending unlock intent but keyguard is still showing, abort."); } return; } startPendingConfirmDeviceCredentialIntent(); } } @Override @Override Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java +6 −67 Original line number Original line Diff line number Diff line Loading @@ -30,7 +30,6 @@ import android.content.IntentSender; import android.os.Handler; import android.os.Handler; import android.os.RemoteException; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserHandle; import android.util.Log; import android.view.View; import android.view.View; import android.view.ViewParent; import android.view.ViewParent; Loading @@ -49,8 +48,6 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController; import java.util.concurrent.atomic.AtomicReference; import javax.inject.Inject; import javax.inject.Inject; import javax.inject.Singleton; import javax.inject.Singleton; Loading @@ -58,8 +55,7 @@ import javax.inject.Singleton; */ */ @Singleton @Singleton public class StatusBarRemoteInputCallback implements Callback, Callbacks, public class StatusBarRemoteInputCallback implements Callback, Callbacks, StatusBarStateController.StateListener, KeyguardStateController.Callback { StatusBarStateController.StateListener { private static final String TAG = StatusBarRemoteInputCallback.class.getSimpleName(); private final KeyguardStateController mKeyguardStateController; private final KeyguardStateController mKeyguardStateController; private final SysuiStatusBarStateController mStatusBarStateController; private final SysuiStatusBarStateController mStatusBarStateController; Loading @@ -78,7 +74,6 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, private int mDisabled2; private int mDisabled2; protected BroadcastReceiver mChallengeReceiver = new ChallengeReceiver(); protected BroadcastReceiver mChallengeReceiver = new ChallengeReceiver(); private Handler mMainHandler = new Handler(); private Handler mMainHandler = new Handler(); private final AtomicReference<Intent> mPendingConfirmCredentialIntent = new AtomicReference(); /** /** */ */ Loading Loading @@ -107,9 +102,6 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, mActionClickLogger = clickLogger; mActionClickLogger = clickLogger; mActivityIntentHelper = new ActivityIntentHelper(mContext); mActivityIntentHelper = new ActivityIntentHelper(mContext); mGroupManager = groupManager; mGroupManager = groupManager; // Listen to onKeyguardShowingChanged in case a managed profile needs to be unlocked // once the primary profile's keyguard is no longer shown. mKeyguardStateController.addCallback(this); } } @Override @Override Loading Loading @@ -213,39 +205,12 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, // Clear pending remote view, as we do not want to trigger pending remote input view when // Clear pending remote view, as we do not want to trigger pending remote input view when // it's called by other code // it's called by other code mPendingWorkRemoteInputView = null; mPendingWorkRemoteInputView = null; // Begin old BaseStatusBar.startWorkChallengeIfNecessary. final Intent newIntent = createConfirmDeviceCredentialIntent( userId, intendSender, notificationKey); if (newIntent == null) { Log.w(TAG, String.format("Cannot create intent to unlock user %d", userId)); return false; } mPendingConfirmCredentialIntent.set(newIntent); // If the Keyguard is currently showing, starting the ConfirmDeviceCredentialActivity // would cause it to pause, not letting the user actually unlock the managed profile. // Instead, wait until we receive a callback indicating it is no longer showing and // then start the pending intent. if (mKeyguardStateController.isShowing()) { // Do nothing, since the callback will get the pending intent and start it. Log.w(TAG, String.format("Keyguard is showing, waiting until it's not")); } else { startPendingConfirmDeviceCredentialIntent(); } return true; } private Intent createConfirmDeviceCredentialIntent( int userId, IntentSender intendSender, String notificationKey) { final Intent newIntent = mKeyguardManager.createConfirmDeviceCredentialIntent(null, final Intent newIntent = mKeyguardManager.createConfirmDeviceCredentialIntent(null, null, userId); null, userId); if (newIntent == null) { if (newIntent == null) { return null; return false; } } final Intent callBackIntent = new Intent(NOTIFICATION_UNLOCKED_BY_WORK_CHALLENGE_ACTION); final Intent callBackIntent = new Intent(NOTIFICATION_UNLOCKED_BY_WORK_CHALLENGE_ACTION); callBackIntent.putExtra(Intent.EXTRA_INTENT, intendSender); callBackIntent.putExtra(Intent.EXTRA_INTENT, intendSender); callBackIntent.putExtra(Intent.EXTRA_INDEX, notificationKey); callBackIntent.putExtra(Intent.EXTRA_INDEX, notificationKey); Loading @@ -261,40 +226,14 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, newIntent.putExtra( newIntent.putExtra( Intent.EXTRA_INTENT, Intent.EXTRA_INTENT, callBackPendingIntent.getIntentSender()); callBackPendingIntent.getIntentSender()); return newIntent; } private void startPendingConfirmDeviceCredentialIntent() { final Intent pendingIntent = mPendingConfirmCredentialIntent.getAndSet(null); if (pendingIntent == null) { return; } try { try { if (mKeyguardStateController.isShowing()) { ActivityManager.getService().startConfirmDeviceCredentialIntent(newIntent, Log.w(TAG, "Keyguard is showing while starting confirm device credential intent."); } ActivityManager.getService().startConfirmDeviceCredentialIntent(pendingIntent, null /*options*/); null /*options*/); } catch (RemoteException ex) { } catch (RemoteException ex) { // ignore // ignore } } } return true; // End old BaseStatusBar.startWorkChallengeIfNecessary. @Override public void onKeyguardShowingChanged() { if (mKeyguardStateController.isShowing()) { // In order to avoid jarring UX where/ the managed profile challenge is shown and // immediately dismissed, do not attempt to start the confirm device credential // activity if the keyguard is still showing. if (mPendingConfirmCredentialIntent.get() != null) { Log.w(TAG, "There's a pending unlock intent but keyguard is still showing, abort."); } return; } startPendingConfirmDeviceCredentialIntent(); } } @Override @Override Loading