Fix screen will flicker when swipe-down around NavigationBar to
trigger One-Handed mode many times quickly in a short time To prevent entering or exiting OHM quilcky in a shot time. Bug: 185304468 Test: manual Test: atest WMShellUnitTests Change-Id: Ibc5ade564da241d5871b3b037c97bd68a6b03a5d
This commit is contained in:
@@ -29,6 +29,7 @@ import android.content.om.IOverlayManager;
|
||||
import android.content.om.OverlayInfo;
|
||||
import android.content.res.Configuration;
|
||||
import android.database.ContentObserver;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Handler;
|
||||
import android.os.RemoteException;
|
||||
import android.os.ServiceManager;
|
||||
@@ -61,7 +62,8 @@ import java.io.PrintWriter;
|
||||
/**
|
||||
* Manages and manipulates the one handed states, transitions, and gesture for phones.
|
||||
*/
|
||||
public class OneHandedController implements RemoteCallable<OneHandedController> {
|
||||
public class OneHandedController implements RemoteCallable<OneHandedController>,
|
||||
OneHandedTransitionCallback {
|
||||
private static final String TAG = "OneHandedController";
|
||||
|
||||
private static final String ONE_HANDED_MODE_OFFSET_PERCENTAGE =
|
||||
@@ -73,6 +75,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
|
||||
|
||||
private volatile boolean mIsOneHandedEnabled;
|
||||
private volatile boolean mIsSwipeToNotificationEnabled;
|
||||
private volatile boolean mIsTransitioning;
|
||||
private boolean mTaskChangeToExit;
|
||||
private boolean mLockedDisabled;
|
||||
private int mUserId;
|
||||
@@ -327,7 +330,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
|
||||
|
||||
@VisibleForTesting
|
||||
void startOneHanded() {
|
||||
if (isLockedDisabled()) {
|
||||
if (isLockedDisabled() || mIsTransitioning) {
|
||||
Slog.d(TAG, "Temporary lock disabled");
|
||||
return;
|
||||
}
|
||||
@@ -337,6 +340,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
|
||||
return;
|
||||
}
|
||||
if (!mDisplayAreaOrganizer.isInOneHanded()) {
|
||||
mIsTransitioning = true;
|
||||
final int yOffSet = Math.round(
|
||||
mDisplayAreaOrganizer.getDisplayLayout().height() * mOffSetFraction);
|
||||
mOneHandedAccessibilityUtil.announcementForScreenReader(
|
||||
@@ -354,7 +358,8 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
|
||||
}
|
||||
|
||||
private void stopOneHanded(int uiEvent) {
|
||||
if (mDisplayAreaOrganizer.isInOneHanded()) {
|
||||
if (mDisplayAreaOrganizer.isInOneHanded() && !mIsTransitioning) {
|
||||
mIsTransitioning = true;
|
||||
mOneHandedAccessibilityUtil.announcementForScreenReader(
|
||||
mOneHandedAccessibilityUtil.getOneHandedStopDescription());
|
||||
mDisplayAreaOrganizer.scheduleOffset(0, 0);
|
||||
@@ -383,6 +388,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
|
||||
mDisplayAreaOrganizer.registerTransitionCallback(mGestureHandler);
|
||||
mDisplayAreaOrganizer.registerTransitionCallback(mTutorialHandler);
|
||||
mDisplayAreaOrganizer.registerTransitionCallback(mBackgroundPanelOrganizer);
|
||||
mDisplayAreaOrganizer.registerTransitionCallback(this);
|
||||
if (mTaskChangeToExit) {
|
||||
mTaskStackListener.addListener(mTaskStackListenerCallback);
|
||||
}
|
||||
@@ -609,6 +615,8 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
|
||||
pw.println(mLockedDisabled);
|
||||
pw.print(innerPrefix + "mUserId=");
|
||||
pw.println(mUserId);
|
||||
pw.print(innerPrefix + "mIsTransitioning=");
|
||||
pw.println(mIsTransitioning);
|
||||
|
||||
if (mBackgroundPanelOrganizer != null) {
|
||||
mBackgroundPanelOrganizer.dump(pw);
|
||||
@@ -654,6 +662,26 @@ public class OneHandedController implements RemoteCallable<OneHandedController>
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO(b/185558765) To implement a state machine for One-Handed transition state machine.
|
||||
* ONE_HANDDE_STATE_TRANSITION {
|
||||
* STATE_DEFAULT,
|
||||
* STATE_TRANSITIONING,
|
||||
* STATE_ENTER_ONE_HANED,
|
||||
* STATE_EXIT_ONE_HANDED
|
||||
* }
|
||||
* and we need to align the state to launcher3 quick steps through SysuiProxy.
|
||||
*/
|
||||
@Override
|
||||
public void onStartFinished(Rect bounds) {
|
||||
mIsTransitioning = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStopFinished(Rect bounds) {
|
||||
mIsTransitioning = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* The interface for calls from outside the Shell, within the host process.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user