Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 434db5cd authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Revert "Fix work challenge lockscreen being dismissed"" into rvc-dev...

Merge "Revert "Fix work challenge lockscreen being dismissed"" into rvc-dev am: 9e71cab6 am: 022bc437 am: dc6a9be3

Change-Id: Idb85ecbb2413e8056dfb56d5ea3449e3a63ae7de
parents f7c2fe98 dc6a9be3
Loading
Loading
Loading
Loading
+6 −67
Original line number Original line Diff line number Diff line
@@ -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