Merge "Revert "Fix work challenge lockscreen being dismissed"" into rvc-dev am: 9e71cab67f
Change-Id: Ie53e13d8c5a7dd80b1dfc7fec95a80ebe0d9c614
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
@@ -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;
|
||||||
|
|
||||||
@@ -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;
|
||||||
@@ -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();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
@@ -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
|
||||||
@@ -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);
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user