Merge "Hook WakefulnessLifecycle for best timing of LockedDisabled" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-06-21 16:42:36 +00:00
committed by Android (Google) Code Review
4 changed files with 46 additions and 16 deletions

View File

@@ -87,4 +87,9 @@ public interface OneHanded {
* Notifies when user switch complete * Notifies when user switch complete
*/ */
void onUserSwitch(int userId); void onUserSwitch(int userId);
/**
* Notifies when keyguard visibility changed
*/
void onKeyguardVisibilityChanged(boolean showing);
} }

View File

@@ -81,6 +81,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
private volatile boolean mIsSwipeToNotificationEnabled; private volatile boolean mIsSwipeToNotificationEnabled;
private boolean mTaskChangeToExit; private boolean mTaskChangeToExit;
private boolean mLockedDisabled; private boolean mLockedDisabled;
private boolean mKeyguardShowing;
private int mUserId; private int mUserId;
private float mOffSetFraction; private float mOffSetFraction;
@@ -357,7 +358,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
@VisibleForTesting @VisibleForTesting
void startOneHanded() { void startOneHanded() {
if (isLockedDisabled()) { if (isLockedDisabled() || mKeyguardShowing) {
Slog.d(TAG, "Temporary lock disabled"); Slog.d(TAG, "Temporary lock disabled");
return; return;
} }
@@ -692,6 +693,10 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
mTutorialHandler.onConfigurationChanged(); mTutorialHandler.onConfigurationChanged();
} }
private void onKeyguardVisibilityChanged(boolean showing) {
mKeyguardShowing = showing;
}
private void onUserSwitch(int newUserId) { private void onUserSwitch(int newUserId) {
unregisterSettingObservers(); unregisterSettingObservers();
mUserId = newUserId; mUserId = newUserId;
@@ -838,6 +843,13 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
OneHandedController.this.onUserSwitch(userId); OneHandedController.this.onUserSwitch(userId);
}); });
} }
@Override
public void onKeyguardVisibilityChanged(boolean showing) {
mMainExecutor.execute(() -> {
OneHandedController.this.onKeyguardVisibilityChanged(showing);
});
}
} }
/** /**

View File

@@ -45,6 +45,7 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.WMComponent; import com.android.systemui.dagger.WMComponent;
import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.keyguard.ScreenLifecycle;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.model.SysUiState; import com.android.systemui.model.SysUiState;
import com.android.systemui.navigationbar.NavigationModeController; import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.shared.tracing.ProtoTraceable; import com.android.systemui.shared.tracing.ProtoTraceable;
@@ -114,6 +115,7 @@ public final class WMShell extends SystemUI
private final NavigationModeController mNavigationModeController; private final NavigationModeController mNavigationModeController;
private final ScreenLifecycle mScreenLifecycle; private final ScreenLifecycle mScreenLifecycle;
private final SysUiState mSysUiState; private final SysUiState mSysUiState;
private final WakefulnessLifecycle mWakefulnessLifecycle;
private final ProtoTracer mProtoTracer; private final ProtoTracer mProtoTracer;
private final Executor mSysUiMainExecutor; private final Executor mSysUiMainExecutor;
@@ -121,6 +123,7 @@ public final class WMShell extends SystemUI
private KeyguardUpdateMonitorCallback mSplitScreenKeyguardCallback; private KeyguardUpdateMonitorCallback mSplitScreenKeyguardCallback;
private KeyguardUpdateMonitorCallback mPipKeyguardCallback; private KeyguardUpdateMonitorCallback mPipKeyguardCallback;
private KeyguardUpdateMonitorCallback mOneHandedKeyguardCallback; private KeyguardUpdateMonitorCallback mOneHandedKeyguardCallback;
private WakefulnessLifecycle.Observer mWakefulnessObserver;
@Inject @Inject
public WMShell(Context context, public WMShell(Context context,
@@ -136,6 +139,7 @@ public final class WMShell extends SystemUI
ScreenLifecycle screenLifecycle, ScreenLifecycle screenLifecycle,
SysUiState sysUiState, SysUiState sysUiState,
ProtoTracer protoTracer, ProtoTracer protoTracer,
WakefulnessLifecycle wakefulnessLifecycle,
@Main Executor sysUiMainExecutor) { @Main Executor sysUiMainExecutor) {
super(context); super(context);
mCommandQueue = commandQueue; mCommandQueue = commandQueue;
@@ -148,6 +152,7 @@ public final class WMShell extends SystemUI
mSplitScreenOptional = splitScreenOptional; mSplitScreenOptional = splitScreenOptional;
mOneHandedOptional = oneHandedOptional; mOneHandedOptional = oneHandedOptional;
mHideDisplayCutoutOptional = hideDisplayCutoutOptional; mHideDisplayCutoutOptional = hideDisplayCutoutOptional;
mWakefulnessLifecycle = wakefulnessLifecycle;
mProtoTracer = protoTracer; mProtoTracer = protoTracer;
mShellCommandHandler = shellCommandHandler; mShellCommandHandler = shellCommandHandler;
mSysUiMainExecutor = sysUiMainExecutor; mSysUiMainExecutor = sysUiMainExecutor;
@@ -265,22 +270,9 @@ public final class WMShell extends SystemUI
}); });
mOneHandedKeyguardCallback = new KeyguardUpdateMonitorCallback() { mOneHandedKeyguardCallback = new KeyguardUpdateMonitorCallback() {
@Override
public void onKeyguardBouncerChanged(boolean bouncer) {
if (bouncer) {
oneHanded.stopOneHanded();
}
}
@Override @Override
public void onKeyguardVisibilityChanged(boolean showing) { public void onKeyguardVisibilityChanged(boolean showing) {
if (showing) { oneHanded.onKeyguardVisibilityChanged(showing);
// When keyguard shown, temperory lock OHM disabled to avoid mis-trigger.
oneHanded.setLockedDisabled(true /* locked */, false /* enabled */);
} else {
// Reset locked.
oneHanded.setLockedDisabled(false /* locked */, false /* enabled */);
}
oneHanded.stopOneHanded(); oneHanded.stopOneHanded();
} }
@@ -291,6 +283,24 @@ public final class WMShell extends SystemUI
}; };
mKeyguardUpdateMonitor.registerCallback(mOneHandedKeyguardCallback); mKeyguardUpdateMonitor.registerCallback(mOneHandedKeyguardCallback);
mWakefulnessObserver =
new WakefulnessLifecycle.Observer() {
@Override
public void onFinishedWakingUp() {
// Reset locked for the case keyguard not shown.
oneHanded.setLockedDisabled(false /* locked */, false /* enabled */);
}
@Override
public void onStartedGoingToSleep() {
oneHanded.stopOneHanded();
// When user press power button going to sleep, temperory lock OHM disabled
// to avoid mis-trigger.
oneHanded.setLockedDisabled(true /* locked */, false /* enabled */);
}
};
mWakefulnessLifecycle.addObserver(mWakefulnessObserver);
mScreenLifecycle.addObserver(new ScreenLifecycle.Observer() { mScreenLifecycle.addObserver(new ScreenLifecycle.Observer() {
@Override @Override
public void onScreenTurningOff() { public void onScreenTurningOff() {

View File

@@ -27,6 +27,7 @@ import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.keyguard.ScreenLifecycle;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.model.SysUiState; import com.android.systemui.model.SysUiState;
import com.android.systemui.navigationbar.NavigationModeController; import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.CommandQueue;
@@ -70,6 +71,7 @@ public class WMShellTest extends SysuiTestCase {
@Mock LegacySplitScreen mLegacySplitScreen; @Mock LegacySplitScreen mLegacySplitScreen;
@Mock OneHanded mOneHanded; @Mock OneHanded mOneHanded;
@Mock HideDisplayCutout mHideDisplayCutout; @Mock HideDisplayCutout mHideDisplayCutout;
@Mock WakefulnessLifecycle mWakefulnessLifecycle;
@Mock ProtoTracer mProtoTracer; @Mock ProtoTracer mProtoTracer;
@Mock ShellCommandHandler mShellCommandHandler; @Mock ShellCommandHandler mShellCommandHandler;
@Mock ShellExecutor mSysUiMainExecutor; @Mock ShellExecutor mSysUiMainExecutor;
@@ -82,7 +84,8 @@ public class WMShellTest extends SysuiTestCase {
Optional.of(mOneHanded), Optional.of(mHideDisplayCutout), Optional.of(mOneHanded), Optional.of(mHideDisplayCutout),
Optional.of(mShellCommandHandler), mCommandQueue, mConfigurationController, Optional.of(mShellCommandHandler), mCommandQueue, mConfigurationController,
mKeyguardUpdateMonitor, mNavigationModeController, mKeyguardUpdateMonitor, mNavigationModeController,
mScreenLifecycle, mSysUiState, mProtoTracer, mSysUiMainExecutor); mScreenLifecycle, mSysUiState, mProtoTracer, mWakefulnessLifecycle,
mSysUiMainExecutor);
} }
@Test @Test