Fix incorrect fragment in gesture tutorial when rotating the screen
This change makes the current fragment load on configuration changes for
the gesture navigation tutorial. Previously, the old fragment would be recreated causing inconsistencies when rotating the screen. Not marking a flag as this change is for both the previous gesture tutorial and the current one.
Fix: 317162126
Test: Run the tutorial and rotate the screen after each step. The
tutorial should progress like normal.
Flag: N/A
Change-Id: I09c40006dd0ef6e9e78fa44e36962a678918420a
diff --git a/quickstep/src/com/android/quickstep/interaction/GestureSandboxActivity.java b/quickstep/src/com/android/quickstep/interaction/GestureSandboxActivity.java
index 4198e2d..4f1dbbe 100644
--- a/quickstep/src/com/android/quickstep/interaction/GestureSandboxActivity.java
+++ b/quickstep/src/com/android/quickstep/interaction/GestureSandboxActivity.java
@@ -59,7 +59,6 @@
@Nullable private TutorialType[] mTutorialSteps;
private GestureSandboxFragment mCurrentFragment;
- private GestureSandboxFragment mPendingFragment;
private int mCurrentStep;
private int mNumSteps;
@@ -177,22 +176,16 @@
&& getResources().getConfiguration().orientation
== ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
- GestureSandboxFragment recreatedFragment =
- showRotationPrompt || mPendingFragment == null
- ? null : mPendingFragment.recreateFragment();
showFragment(showRotationPrompt
? new RotationPromptFragment()
- : recreatedFragment == null
- ? mCurrentFragment : recreatedFragment);
+ : mCurrentFragment.canRecreateFragment()
+ ? mCurrentFragment.recreateFragment() : mCurrentFragment);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
private void showFragment(@NonNull GestureSandboxFragment fragment) {
- if (mCurrentFragment.recreateFragment() != null) {
- mPendingFragment = mCurrentFragment;
- }
mCurrentFragment = fragment;
getSupportFragmentManager().beginTransaction()
.replace(R.id.gesture_tutorial_fragment_container, mCurrentFragment)
diff --git a/quickstep/src/com/android/quickstep/interaction/GestureSandboxFragment.java b/quickstep/src/com/android/quickstep/interaction/GestureSandboxFragment.java
index 08f2989..03bdd5d 100644
--- a/quickstep/src/com/android/quickstep/interaction/GestureSandboxFragment.java
+++ b/quickstep/src/com/android/quickstep/interaction/GestureSandboxFragment.java
@@ -28,6 +28,10 @@
void onDetachedFromWindow() {}
+ boolean canRecreateFragment() {
+ return false;
+ }
+
@Nullable
GestureSandboxFragment recreateFragment() {
return null;
diff --git a/quickstep/src/com/android/quickstep/interaction/MenuFragment.java b/quickstep/src/com/android/quickstep/interaction/MenuFragment.java
index dbf141b..8ead3dd 100644
--- a/quickstep/src/com/android/quickstep/interaction/MenuFragment.java
+++ b/quickstep/src/com/android/quickstep/interaction/MenuFragment.java
@@ -39,6 +39,11 @@
}
@Override
+ boolean canRecreateFragment() {
+ return true;
+ }
+
+ @Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
final View root = inflater.inflate(
diff --git a/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java b/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java
index c91ee81..0fafb94 100644
--- a/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java
+++ b/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java
@@ -114,6 +114,11 @@
return newInstance(tutorialType, isGestureComplete(), mFromTutorialMenu);
}
+ @Override
+ boolean canRecreateFragment() {
+ return true;
+ }
+
@NonNull
abstract TutorialType getDefaultTutorialType();