Merge "Fix one-handed-tutorial-overlay connection is permanently present"

This commit is contained in:
Jason Chang
2020-12-11 09:30:54 +00:00
committed by Android (Google) Code Review

View File

@@ -63,6 +63,16 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback {
private String mStartOneHandedDescription;
private String mStopOneHandedDescription;
private enum ONE_HANDED_TRIGGER_STATE {
UNSET, ENTERING, EXITING
}
/**
* Current One-Handed trigger state.
* Note: This is a dynamic state, whenever last state has been confirmed
* (i.e. onStartFinished() or onStopFinished()), the state should be set "UNSET" at final.
*/
private ONE_HANDED_TRIGGER_STATE mTriggerState = ONE_HANDED_TRIGGER_STATE.UNSET;
/**
* Container of the tutorial panel showing at outside region when one handed starting
*/
@@ -74,6 +84,21 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback {
public void onTutorialAnimationUpdate(int offset) {
mUpdateHandler.post(() -> onAnimationUpdate(offset));
}
@Override
public void onOneHandedAnimationStart(
OneHandedAnimationController.OneHandedTransitionAnimator animator) {
mUpdateHandler.post(() -> {
final Rect startValue = (Rect) animator.getStartValue();
if (mTriggerState == ONE_HANDED_TRIGGER_STATE.UNSET) {
mTriggerState = (startValue.top == 0)
? ONE_HANDED_TRIGGER_STATE.ENTERING : ONE_HANDED_TRIGGER_STATE.EXITING;
if (mCanShowTutorial && mTriggerState == ONE_HANDED_TRIGGER_STATE.ENTERING) {
createTutorialTarget();
}
}
});
}
};
public OneHandedTutorialHandler(Context context) {
@@ -100,9 +125,6 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback {
R.string.accessibility_action_start_one_handed);
mStopOneHandedDescription = context.getResources().getString(
R.string.accessibility_action_stop_one_handed);
if (mCanShowTutorial) {
createOrUpdateTutorialTarget();
}
}
@Override
@@ -111,6 +133,7 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback {
updateFinished(View.VISIBLE, 0f);
updateTutorialCount();
announcementForScreenReader(true);
mTriggerState = ONE_HANDED_TRIGGER_STATE.UNSET;
});
}
@@ -119,6 +142,8 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback {
mUpdateHandler.post(() -> {
updateFinished(View.INVISIBLE, -mTargetViewContainer.getHeight());
announcementForScreenReader(false);
removeTutorialFromWindowManager();
mTriggerState = ONE_HANDED_TRIGGER_STATE.UNSET;
});
}
@@ -126,7 +151,6 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback {
if (!canShowTutorial()) {
return;
}
mTargetViewContainer.setVisibility(visible);
mTargetViewContainer.setTranslationY(finalPosition);
}
@@ -155,24 +179,23 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback {
* Adds the tutorial target view to the WindowManager and update its layout, so it's ready
* to be animated in.
*/
private void createOrUpdateTutorialTarget() {
mUpdateHandler.post(() -> {
if (!mTargetViewContainer.isAttachedToWindow()) {
mTargetViewContainer.setVisibility(View.INVISIBLE);
try {
mWindowManager.addView(mTargetViewContainer, getTutorialTargetLayoutParams());
} catch (IllegalStateException e) {
// This shouldn't happen, but if the target is already added, just update its
// layout params.
mWindowManager.updateViewLayout(
mTargetViewContainer, getTutorialTargetLayoutParams());
}
} else {
mWindowManager.updateViewLayout(mTargetViewContainer,
getTutorialTargetLayoutParams());
private void createTutorialTarget() {
if (!mTargetViewContainer.isAttachedToWindow()) {
try {
mWindowManager.addView(mTargetViewContainer, getTutorialTargetLayoutParams());
} catch (IllegalStateException e) {
// This shouldn't happen, but if the target is already added, just update its
// layout params.
mWindowManager.updateViewLayout(
mTargetViewContainer, getTutorialTargetLayoutParams());
}
});
}
}
private void removeTutorialFromWindowManager() {
if (mTargetViewContainer.isAttachedToWindow()) {
mWindowManager.removeViewImmediate(mTargetViewContainer);
}
}
OneHandedAnimationCallback getAnimationCallback() {
@@ -193,7 +216,6 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback {
lp.privateFlags |= WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS;
lp.setFitInsetsTypes(0 /* types */);
lp.setTitle("one-handed-tutorial-overlay");
return lp;
}
@@ -206,10 +228,12 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback {
private boolean canShowTutorial() {
if (!mCanShowTutorial) {
// Since canSHowTutorial() will be called in onAnimationUpdate() and we still need to
// hide Tutorial text in the period of continuously onAnimationUpdate() API call,
// so we have to hide mTargetViewContainer here.
mTargetViewContainer.setVisibility(View.GONE);
return false;
}
return true;
}