Merge "Fix lost gesture nav progress on screen rotation." into sc-v2-dev

This commit is contained in:
Schneider Victor-tulias
2021-11-04 19:32:15 +00:00
committed by Android (Google) Code Review
6 changed files with 55 additions and 20 deletions

View File

@@ -42,6 +42,13 @@ final class BackGestureTutorialController extends TutorialController {
return R.string.back_gesture_intro_subtitle;
}
@Override
public Integer getSuccessFeedbackSubtitle() {
return mTutorialFragment.isAtFinalStep()
? R.string.back_gesture_feedback_complete_without_follow_up
: R.string.back_gesture_feedback_complete_with_overview_follow_up;
}
@Override
protected int getMockAppTaskLayoutResId() {
return getMockAppTaskCurrentPageLayoutResId();
@@ -85,10 +92,7 @@ final class BackGestureTutorialController extends TutorialController {
case BACK_COMPLETED_FROM_RIGHT:
mTutorialFragment.releaseFeedbackAnimation();
updateFakeAppTaskViewLayout(getMockAppTaskPreviousPageLayoutResId());
int subtitleResId = mTutorialFragment.isAtFinalStep()
? R.string.back_gesture_feedback_complete_without_follow_up
: R.string.back_gesture_feedback_complete_with_overview_follow_up;
showFeedback(subtitleResId, true);
showSuccessFeedback();
break;
case BACK_CANCELLED_FROM_LEFT:
case BACK_CANCELLED_FROM_RIGHT:

View File

@@ -35,10 +35,9 @@ import java.util.List;
/** Shows the gesture interactive sandbox in full screen mode. */
public class GestureSandboxActivity extends FragmentActivity {
private static final String LOG_TAG = "GestureSandboxActivity";
private static final String KEY_TUTORIAL_STEPS = "tutorial_steps";
private static final String KEY_CURRENT_STEP = "current_step";
private static final String KEY_GESTURE_COMPLETE = "gesture_complete";
private TutorialType[] mTutorialSteps;
private TutorialType mCurrentTutorialStep;
@@ -56,7 +55,8 @@ public class GestureSandboxActivity extends FragmentActivity {
Bundle args = savedInstanceState == null ? getIntent().getExtras() : savedInstanceState;
mTutorialSteps = getTutorialSteps(args);
mCurrentTutorialStep = mTutorialSteps[mCurrentStep - 1];
mFragment = TutorialFragment.newInstance(mCurrentTutorialStep);
mFragment = TutorialFragment.newInstance(
mCurrentTutorialStep, args.getBoolean(KEY_GESTURE_COMPLETE, false));
getSupportFragmentManager().beginTransaction()
.add(R.id.gesture_tutorial_fragment_container, mFragment)
.commit();
@@ -87,6 +87,7 @@ public class GestureSandboxActivity extends FragmentActivity {
protected void onSaveInstanceState(@NonNull Bundle savedInstanceState) {
savedInstanceState.putStringArray(KEY_TUTORIAL_STEPS, getTutorialStepNames());
savedInstanceState.putInt(KEY_CURRENT_STEP, mCurrentStep);
savedInstanceState.putBoolean(KEY_GESTURE_COMPLETE, mFragment.isGestureComplete());
super.onSaveInstanceState(savedInstanceState);
}
@@ -121,7 +122,7 @@ public class GestureSandboxActivity extends FragmentActivity {
return;
}
mCurrentTutorialStep = mTutorialSteps[mCurrentStep];
mFragment = TutorialFragment.newInstance(mCurrentTutorialStep);
mFragment = TutorialFragment.newInstance(mCurrentTutorialStep, false);
getSupportFragmentManager().beginTransaction()
.replace(R.id.gesture_tutorial_fragment_container, mFragment)
.runOnCommit(() -> mFragment.onAttachedToWindow())

View File

@@ -41,6 +41,13 @@ final class HomeGestureTutorialController extends SwipeUpGestureTutorialControll
return R.string.home_gesture_intro_subtitle;
}
@Override
public Integer getSuccessFeedbackSubtitle() {
return mTutorialFragment.isAtFinalStep()
? R.string.home_gesture_feedback_complete_without_follow_up
: R.string.home_gesture_feedback_complete_with_follow_up;
}
@Override
protected int getMockAppTaskLayoutResId() {
return mTutorialFragment.isLargeScreen()
@@ -84,10 +91,7 @@ final class HomeGestureTutorialController extends SwipeUpGestureTutorialControll
case HOME_GESTURE_COMPLETED: {
mTutorialFragment.releaseFeedbackAnimation();
animateFakeTaskViewHome(finalVelocity, null);
int subtitleResId = mTutorialFragment.isAtFinalStep()
? R.string.home_gesture_feedback_complete_without_follow_up
: R.string.home_gesture_feedback_complete_with_follow_up;
showFeedback(subtitleResId, true);
showSuccessFeedback();
break;
}
case HOME_NOT_STARTED_TOO_FAR_FROM_EDGE:

View File

@@ -51,6 +51,13 @@ final class OverviewGestureTutorialController extends SwipeUpGestureTutorialCont
return R.string.overview_gesture_intro_subtitle;
}
@Override
public Integer getSuccessFeedbackSubtitle() {
return mTutorialFragment.getNumSteps() > 1 && mTutorialFragment.isAtFinalStep()
? R.string.overview_gesture_feedback_complete_with_follow_up
: R.string.overview_gesture_feedback_complete_without_follow_up;
}
@Override
protected int getMockAppTaskLayoutResId() {
return mTutorialFragment.isLargeScreen()
@@ -106,11 +113,7 @@ final class OverviewGestureTutorialController extends SwipeUpGestureTutorialCont
mTutorialFragment.releaseFeedbackAnimation();
animateTaskViewToOverview();
onMotionPaused(true /*arbitrary value*/);
int subtitleResId = mTutorialFragment.getNumSteps() > 1
&& mTutorialFragment.isAtFinalStep()
? R.string.overview_gesture_feedback_complete_with_follow_up
: R.string.overview_gesture_feedback_complete_without_follow_up;
showFeedback(subtitleResId, true);
showSuccessFeedback();
break;
case HOME_OR_OVERVIEW_NOT_STARTED_WRONG_SWIPE_DIRECTION:
case HOME_OR_OVERVIEW_CANCELLED:

View File

@@ -223,6 +223,11 @@ abstract class TutorialController implements BackGestureAttemptCallback,
return null;
}
@StringRes
public Integer getSuccessFeedbackSubtitle() {
return null;
}
void showFeedback() {
if (mGestureCompleted) {
mFeedbackView.setTranslationY(0);
@@ -235,6 +240,13 @@ abstract class TutorialController implements BackGestureAttemptCallback,
}
}
/**
* Show feedback reflecting a successful gesture attempt.
**/
void showSuccessFeedback() {
showFeedback(getSuccessFeedbackSubtitle(), true);
}
/**
* Show feedback reflecting a failed gesture attempt.
*

View File

@@ -49,8 +49,10 @@ abstract class TutorialFragment extends Fragment implements OnTouchListener {
private static final String LOG_TAG = "TutorialFragment";
static final String KEY_TUTORIAL_TYPE = "tutorial_type";
static final String KEY_GESTURE_COMPLETE = "gesture_complete";
TutorialType mTutorialType;
boolean mGestureComplete = false;
@Nullable TutorialController mTutorialController = null;
RootSandboxLayout mRootView;
View mFingerDotView;
@@ -67,7 +69,7 @@ abstract class TutorialFragment extends Fragment implements OnTouchListener {
private boolean mIsLargeScreen;
public static TutorialFragment newInstance(TutorialType tutorialType) {
public static TutorialFragment newInstance(TutorialType tutorialType, boolean gestureComplete) {
TutorialFragment fragment = getFragmentForTutorialType(tutorialType);
if (fragment == null) {
fragment = new BackGestureTutorialFragment();
@@ -76,6 +78,7 @@ abstract class TutorialFragment extends Fragment implements OnTouchListener {
Bundle args = new Bundle();
args.putSerializable(KEY_TUTORIAL_TYPE, tutorialType);
args.putBoolean(KEY_GESTURE_COMPLETE, gestureComplete);
fragment.setArguments(args);
return fragment;
}
@@ -132,6 +135,7 @@ abstract class TutorialFragment extends Fragment implements OnTouchListener {
super.onCreate(savedInstanceState);
Bundle args = savedInstanceState != null ? savedInstanceState : getArguments();
mTutorialType = (TutorialType) args.getSerializable(KEY_TUTORIAL_TYPE);
mGestureComplete = args.getBoolean(KEY_GESTURE_COMPLETE, false);
mEdgeBackGestureHandler = new EdgeBackGestureHandler(getContext());
mNavBarGestureHandler = new NavBarGestureHandler(getContext());
@@ -186,11 +190,13 @@ abstract class TutorialFragment extends Fragment implements OnTouchListener {
}
void initializeFeedbackVideoView() {
if (!updateFeedbackAnimation()) {
if (!updateFeedbackAnimation() || mTutorialController == null) {
return;
}
if (!mIntroductionShown && mTutorialController != null) {
if (isGestureComplete()) {
mTutorialController.showSuccessFeedback();
} else if (!mIntroductionShown) {
Integer introTileStringResId = mTutorialController.getIntroductionTitle();
Integer introSubtitleResId = mTutorialController.getIntroductionSubtitle();
if (introTileStringResId != null && introSubtitleResId != null) {
@@ -372,6 +378,11 @@ abstract class TutorialFragment extends Fragment implements OnTouchListener {
return getCurrentStep() == getNumSteps();
}
boolean isGestureComplete() {
return mGestureComplete
|| (mTutorialController != null && mTutorialController.isGestureCompleted());
}
@Nullable
private GestureSandboxActivity getGestureSandboxActivity() {
Context context = getContext();