diff options
2 files changed, 49 insertions, 5 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java index d1f88ac19274..200f0804e42b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java @@ -34,11 +34,15 @@ import android.view.ViewParent; import androidx.annotation.Nullable; +import com.android.compose.animation.scene.ObservableTransitionState; import com.android.systemui.ActivityIntentHelper; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; +import com.android.systemui.deviceentry.domain.interactor.DeviceUnlockedInteractor; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.scene.domain.interactor.SceneInteractor; +import com.android.systemui.scene.shared.flag.SceneContainerFlag; import com.android.systemui.shade.ShadeController; import com.android.systemui.statusbar.ActionClickLogger; import com.android.systemui.statusbar.CommandQueue; @@ -52,6 +56,9 @@ import com.android.systemui.statusbar.notification.collection.render.GroupExpans import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.util.kotlin.JavaAdapter; + +import dagger.Lazy; import java.util.concurrent.Executor; @@ -80,6 +87,8 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, private final ActionClickLogger mActionClickLogger; private int mDisabled2; protected BroadcastReceiver mChallengeReceiver = new ChallengeReceiver(); + private final Lazy<DeviceUnlockedInteractor> mDeviceUnlockedInteractorLazy; + private final Lazy<SceneInteractor> mSceneInteractorLazy; /** */ @@ -95,7 +104,10 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, ShadeController shadeController, CommandQueue commandQueue, ActionClickLogger clickLogger, - @Main Executor executor) { + @Main Executor executor, + Lazy<DeviceUnlockedInteractor> deviceUnlockedInteractorLazy, + Lazy<SceneInteractor> sceneInteractorLazy, + JavaAdapter javaAdapter) { mContext = context; mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; mShadeController = shadeController; @@ -113,6 +125,17 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, mActionClickLogger = clickLogger; mActivityIntentHelper = new ActivityIntentHelper(mContext); mGroupExpansionManager = groupExpansionManager; + mDeviceUnlockedInteractorLazy = deviceUnlockedInteractorLazy; + mSceneInteractorLazy = sceneInteractorLazy; + + if (SceneContainerFlag.isEnabled()) { + javaAdapter.alwaysCollectFlow( + mDeviceUnlockedInteractorLazy.get().getDeviceUnlockStatus(), + deviceUnlockStatus -> onStateChanged(mStatusBarStateController.getState())); + javaAdapter.alwaysCollectFlow( + mSceneInteractorLazy.get().getTransitionState(), + deviceUnlockStatus -> onStateChanged(mStatusBarStateController.getState())); + } } @Override @@ -318,11 +341,20 @@ public class StatusBarRemoteInputCallback implements Callback, Callbacks, } /** - * Returns {@code true} if it is safe to retry a pending remote input. + * Returns {@code true} if it is safe to retry a pending remote input. The exact criteria for + * this vary depending whether the scene container is enabled. */ private boolean canRetryPendingRemoteInput() { - return mKeyguardStateController.isUnlocked() - && !mStatusBarStateController.isKeyguardRequested(); + if (SceneContainerFlag.isEnabled()) { + final boolean isUnlocked = mDeviceUnlockedInteractorLazy.get() + .getDeviceUnlockStatus().getValue().isUnlocked(); + final boolean isIdle = mSceneInteractorLazy.get() + .getTransitionState().getValue() instanceof ObservableTransitionState.Idle; + return isUnlocked && isIdle; + } else { + return mKeyguardStateController.isUnlocked() + && !mStatusBarStateController.isKeyguardRequested(); + } } protected class ChallengeReceiver extends BroadcastReceiver { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java index c5238194d0a4..81c40dc1778e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java @@ -36,7 +36,9 @@ import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; +import com.android.systemui.deviceentry.domain.interactor.DeviceUnlockedInteractor; import com.android.systemui.plugins.ActivityStarter; +import com.android.systemui.scene.domain.interactor.SceneInteractor; import com.android.systemui.settings.FakeDisplayTracker; import com.android.systemui.shade.ShadeController; import com.android.systemui.statusbar.ActionClickLogger; @@ -50,8 +52,11 @@ import com.android.systemui.statusbar.notification.row.NotificationContentView; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.FakeExecutor; +import com.android.systemui.util.kotlin.JavaAdapter; import com.android.systemui.util.time.FakeSystemClock; +import dagger.Lazy; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -71,8 +76,14 @@ public class StatusBarRemoteInputCallbackTest extends SysuiTestCase { @Mock private SysuiStatusBarStateController mStatusBarStateController; @Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; @Mock private ActivityStarter mActivityStarter; + @Mock private Lazy<DeviceUnlockedInteractor> mDeviceUnlockedInteractorLazy; + @Mock private Lazy<SceneInteractor> mSceneInteractorLazy; + @Mock private JavaAdapter mJavaAdapter; private final FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock()); + @Mock private DeviceUnlockedInteractor mDeviceUnlockedInteractor; + @Mock private SceneInteractor mSceneInteractor; + private int mCurrentUserId = 0; private StatusBarRemoteInputCallback mRemoteInputCallback; @@ -90,7 +101,8 @@ public class StatusBarRemoteInputCallbackTest extends SysuiTestCase { mKeyguardStateController, mStatusBarStateController, mStatusBarKeyguardViewManager, mActivityStarter, mShadeController, new CommandQueue(mContext, new FakeDisplayTracker(mContext)), - mock(ActionClickLogger.class), mFakeExecutor)); + mock(ActionClickLogger.class), mFakeExecutor, mDeviceUnlockedInteractorLazy, + mSceneInteractorLazy, mJavaAdapter)); mRemoteInputCallback.mChallengeReceiver = mRemoteInputCallback.new ChallengeReceiver(); } |