Merge "Add public constructors to gesture tutorial fragments." into tm-dev

This commit is contained in:
Schneider Victor-tulias
2022-03-31 17:30:14 +00:00
committed by Android (Google) Code Review
8 changed files with 89 additions and 84 deletions
+1 -2
View File
@@ -72,12 +72,11 @@
<TextView
android:id="@+id/subtitle"
style="@style/TextAppearance.GestureTutorial.Feedback.Subtitle.AllSet"
android:layout_width="0dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/allset_subtitle_margin_top"
app:layout_constraintTop_toBottomOf="@id/title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintWidth_max="@dimen/allset_subtitle_width_max"
android:gravity="start"/>
<androidx.constraintlayout.widget.Guideline
@@ -15,20 +15,18 @@
*/
package com.android.quickstep.interaction;
import android.content.SharedPreferences;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.NonNull;
import com.android.launcher3.logging.StatsLogManager;
import com.android.quickstep.interaction.TutorialController.TutorialType;
/** Shows the Home gesture interactive tutorial. */
public class AssistantGestureTutorialFragment extends TutorialFragment {
protected AssistantGestureTutorialFragment(
SharedPreferences sharedPrefs, StatsLogManager statsLogManager) {
super(sharedPrefs, statsLogManager);
}
public AssistantGestureTutorialFragment() {}
@Override
TutorialController createController(TutorialType type) {
@@ -49,12 +47,12 @@ public class AssistantGestureTutorialFragment extends TutorialFragment {
}
@Override
void logTutorialStepShown() {
void logTutorialStepShown(@NonNull StatsLogManager statsLogManager) {
// No-Op: tutorial step not currently shown to users
}
@Override
void logTutorialStepCompleted() {
void logTutorialStepCompleted(@NonNull StatsLogManager statsLogManager) {
// No-Op: tutorial step not currently shown to users
}
}
@@ -19,10 +19,10 @@ import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.SharedPreferences;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.launcher3.R;
@@ -34,10 +34,7 @@ import java.util.ArrayList;
/** Shows the Back gesture interactive tutorial. */
public class BackGestureTutorialFragment extends TutorialFragment {
protected BackGestureTutorialFragment(
SharedPreferences sharedPrefs, StatsLogManager statsLogManager) {
super(sharedPrefs, statsLogManager);
}
public BackGestureTutorialFragment() {}
@Nullable
@Override
@@ -126,14 +123,14 @@ public class BackGestureTutorialFragment extends TutorialFragment {
}
@Override
void logTutorialStepShown() {
mStatsLogManager.logger().log(
void logTutorialStepShown(@NonNull StatsLogManager statsLogManager) {
statsLogManager.logger().log(
StatsLogManager.LauncherEvent.LAUNCHER_GESTURE_TUTORIAL_BACK_STEP_SHOWN);
}
@Override
void logTutorialStepCompleted() {
mStatsLogManager.logger().log(
void logTutorialStepCompleted(@NonNull StatsLogManager statsLogManager) {
statsLogManager.logger().log(
StatsLogManager.LauncherEvent.LAUNCHER_GESTURE_TUTORIAL_BACK_STEP_COMPLETED);
}
}
@@ -65,10 +65,7 @@ public class GestureSandboxActivity extends FragmentActivity {
mTutorialSteps = getTutorialSteps(args);
mCurrentTutorialStep = mTutorialSteps[mCurrentStep - 1];
mFragment = TutorialFragment.newInstance(
mCurrentTutorialStep,
args.getBoolean(KEY_GESTURE_COMPLETE, false),
mSharedPrefs,
mStatsLogManager);
mCurrentTutorialStep, args.getBoolean(KEY_GESTURE_COMPLETE, false));
getSupportFragmentManager().beginTransaction()
.add(R.id.gesture_tutorial_fragment_container, mFragment)
.commit();
@@ -103,6 +100,14 @@ public class GestureSandboxActivity extends FragmentActivity {
super.onSaveInstanceState(savedInstanceState);
}
protected SharedPreferences getSharedPrefs() {
return mSharedPrefs;
}
protected StatsLogManager getStatsLogManager() {
return mStatsLogManager;
}
/** Returns true iff there aren't anymore tutorial types to display to the user. */
public boolean isTutorialComplete() {
return mCurrentStep >= mNumSteps;
@@ -128,7 +133,7 @@ public class GestureSandboxActivity extends FragmentActivity {
}
mCurrentTutorialStep = mTutorialSteps[mCurrentStep];
mFragment = TutorialFragment.newInstance(
mCurrentTutorialStep, /* gestureComplete= */ false, mSharedPrefs, mStatsLogManager);
mCurrentTutorialStep, /* gestureComplete= */ false);
getSupportFragmentManager().beginTransaction()
.replace(R.id.gesture_tutorial_fragment_container, mFragment)
.runOnCommit(() -> mFragment.onAttachedToWindow())
@@ -18,10 +18,10 @@ package com.android.quickstep.interaction;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.content.SharedPreferences;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.launcher3.R;
@@ -33,10 +33,7 @@ import java.util.ArrayList;
/** Shows the Home gesture interactive tutorial. */
public class HomeGestureTutorialFragment extends TutorialFragment {
protected HomeGestureTutorialFragment(
SharedPreferences sharedPrefs, StatsLogManager statsLogManager) {
super(sharedPrefs, statsLogManager);
}
public HomeGestureTutorialFragment() {}
@Nullable
@Override
@@ -108,14 +105,14 @@ public class HomeGestureTutorialFragment extends TutorialFragment {
}
@Override
void logTutorialStepShown() {
mStatsLogManager.logger().log(
void logTutorialStepShown(@NonNull StatsLogManager statsLogManager) {
statsLogManager.logger().log(
StatsLogManager.LauncherEvent.LAUNCHER_GESTURE_TUTORIAL_HOME_STEP_SHOWN);
}
@Override
void logTutorialStepCompleted() {
mStatsLogManager.logger().log(
void logTutorialStepCompleted(@NonNull StatsLogManager statsLogManager) {
statsLogManager.logger().log(
StatsLogManager.LauncherEvent.LAUNCHER_GESTURE_TUTORIAL_HOME_STEP_COMPLETED);
}
}
@@ -18,10 +18,10 @@ package com.android.quickstep.interaction;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.content.SharedPreferences;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.launcher3.R;
@@ -33,10 +33,7 @@ import java.util.ArrayList;
/** Shows the Overview gesture interactive tutorial. */
public class OverviewGestureTutorialFragment extends TutorialFragment {
protected OverviewGestureTutorialFragment(
SharedPreferences sharedPrefs, StatsLogManager statsLogManager) {
super(sharedPrefs, statsLogManager);
}
public OverviewGestureTutorialFragment() {}
@Nullable
@Override
@@ -120,14 +117,14 @@ public class OverviewGestureTutorialFragment extends TutorialFragment {
}
@Override
void logTutorialStepShown() {
mStatsLogManager.logger().log(
void logTutorialStepShown(@NonNull StatsLogManager statsLogManager) {
statsLogManager.logger().log(
StatsLogManager.LauncherEvent.LAUNCHER_GESTURE_TUTORIAL_OVERVIEW_STEP_SHOWN);
}
@Override
void logTutorialStepCompleted() {
mStatsLogManager.logger().log(
void logTutorialStepCompleted(@NonNull StatsLogManager statsLogManager) {
statsLogManager.logger().log(
StatsLogManager.LauncherEvent.LAUNCHER_GESTURE_TUTORIAL_OVERVIEW_STEP_COMPLETED);
}
}
@@ -15,20 +15,18 @@
*/
package com.android.quickstep.interaction;
import android.content.SharedPreferences;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.NonNull;
import com.android.launcher3.logging.StatsLogManager;
import com.android.quickstep.interaction.TutorialController.TutorialType;
/** Shows the general navigation gesture sandbox environment. */
public class SandboxModeTutorialFragment extends TutorialFragment {
protected SandboxModeTutorialFragment(
SharedPreferences sharedPrefs, StatsLogManager statsLogManager) {
super(sharedPrefs, statsLogManager);
}
public SandboxModeTutorialFragment() {}
@Override
TutorialController createController(TutorialType type) {
@@ -49,12 +47,12 @@ public class SandboxModeTutorialFragment extends TutorialFragment {
}
@Override
void logTutorialStepShown() {
void logTutorialStepShown(@NonNull StatsLogManager statsLogManager) {
// No-Op: tutorial step not currently shown to users
}
@Override
void logTutorialStepCompleted() {
void logTutorialStepCompleted(@NonNull StatsLogManager statsLogManager) {
// No-Op: tutorial step not currently shown to users
}
}
@@ -60,9 +60,6 @@ abstract class TutorialFragment extends Fragment implements OnTouchListener {
private static final String COMPLETED_TUTORIAL_STEPS_PREFERENCE_KEY =
"pref_completedTutorialSteps";
private final SharedPreferences mSharedPrefs;
protected final StatsLogManager mStatsLogManager;
TutorialType mTutorialType;
boolean mGestureComplete = false;
@Nullable TutorialController mTutorialController = null;
@@ -84,14 +81,10 @@ abstract class TutorialFragment extends Fragment implements OnTouchListener {
private boolean mIsFoldable;
public static TutorialFragment newInstance(
TutorialType tutorialType,
boolean gestureComplete,
SharedPreferences sharedPrefs,
StatsLogManager statsLogManager) {
TutorialFragment fragment =
getFragmentForTutorialType(tutorialType, sharedPrefs, statsLogManager);
TutorialType tutorialType, boolean gestureComplete) {
TutorialFragment fragment = getFragmentForTutorialType(tutorialType);
if (fragment == null) {
fragment = new BackGestureTutorialFragment(sharedPrefs, statsLogManager);
fragment = new BackGestureTutorialFragment();
tutorialType = TutorialType.BACK_NAVIGATION;
}
@@ -103,36 +96,28 @@ abstract class TutorialFragment extends Fragment implements OnTouchListener {
}
@Nullable
private static TutorialFragment getFragmentForTutorialType(
TutorialType tutorialType,
SharedPreferences sharedPrefs,
StatsLogManager statsLogManager) {
private static TutorialFragment getFragmentForTutorialType(TutorialType tutorialType) {
switch (tutorialType) {
case BACK_NAVIGATION:
case BACK_NAVIGATION_COMPLETE:
return new BackGestureTutorialFragment(sharedPrefs, statsLogManager);
return new BackGestureTutorialFragment();
case HOME_NAVIGATION:
case HOME_NAVIGATION_COMPLETE:
return new HomeGestureTutorialFragment(sharedPrefs, statsLogManager);
return new HomeGestureTutorialFragment();
case OVERVIEW_NAVIGATION:
case OVERVIEW_NAVIGATION_COMPLETE:
return new OverviewGestureTutorialFragment(sharedPrefs, statsLogManager);
return new OverviewGestureTutorialFragment();
case ASSISTANT:
case ASSISTANT_COMPLETE:
return new AssistantGestureTutorialFragment(sharedPrefs, statsLogManager);
return new AssistantGestureTutorialFragment();
case SANDBOX_MODE:
return new SandboxModeTutorialFragment(sharedPrefs, statsLogManager);
return new SandboxModeTutorialFragment();
default:
Log.e(LOG_TAG, "Failed to find an appropriate fragment for " + tutorialType.name());
}
return null;
}
protected TutorialFragment(SharedPreferences sharedPrefs, StatsLogManager statsLogManager) {
mSharedPrefs = sharedPrefs;
mStatsLogManager = statsLogManager;
}
@Nullable Integer getEdgeAnimationResId() {
return null;
}
@@ -340,7 +325,10 @@ abstract class TutorialFragment extends Fragment implements OnTouchListener {
}
void onAttachedToWindow() {
logTutorialStepShown();
StatsLogManager statsLogManager = getStatsLogManager();
if (statsLogManager != null) {
logTutorialStepShown(statsLogManager);
}
mEdgeBackGestureHandler.setViewGroupParent(getRootView());
}
@@ -374,14 +362,20 @@ abstract class TutorialFragment extends Fragment implements OnTouchListener {
}
void continueTutorial() {
Set<String> updatedCompletedSteps = new ArraySet<>(mSharedPrefs.getStringSet(
COMPLETED_TUTORIAL_STEPS_PREFERENCE_KEY, new ArraySet<>()));
SharedPreferences sharedPrefs = getSharedPreferences();
if (sharedPrefs != null) {
Set<String> updatedCompletedSteps = new ArraySet<>(sharedPrefs.getStringSet(
COMPLETED_TUTORIAL_STEPS_PREFERENCE_KEY, new ArraySet<>()));
updatedCompletedSteps.add(mTutorialType.toString());
updatedCompletedSteps.add(mTutorialType.toString());
mSharedPrefs.edit().putStringSet(
COMPLETED_TUTORIAL_STEPS_PREFERENCE_KEY, updatedCompletedSteps).apply();
logTutorialStepCompleted();
sharedPrefs.edit().putStringSet(
COMPLETED_TUTORIAL_STEPS_PREFERENCE_KEY, updatedCompletedSteps).apply();
}
StatsLogManager statsLogManager = getStatsLogManager();
if (statsLogManager != null) {
logTutorialStepCompleted(statsLogManager);
}
GestureSandboxActivity gestureSandboxActivity = getGestureSandboxActivity();
if (gestureSandboxActivity == null) {
@@ -397,9 +391,15 @@ abstract class TutorialFragment extends Fragment implements OnTouchListener {
void closeTutorial(boolean tutorialSkipped) {
if (tutorialSkipped) {
mSharedPrefs.edit().putBoolean(TUTORIAL_SKIPPED_PREFERENCE_KEY, true).apply();
mStatsLogManager.logger().log(
StatsLogManager.LauncherEvent.LAUNCHER_GESTURE_TUTORIAL_SKIPPED);
SharedPreferences sharedPrefs = getSharedPreferences();
if (sharedPrefs != null) {
sharedPrefs.edit().putBoolean(TUTORIAL_SKIPPED_PREFERENCE_KEY, true).apply();
}
StatsLogManager statsLogManager = getStatsLogManager();
if (statsLogManager != null) {
statsLogManager.logger().log(
StatsLogManager.LauncherEvent.LAUNCHER_GESTURE_TUTORIAL_SKIPPED);
}
}
FragmentActivity activity = getActivity();
if (activity != null) {
@@ -433,9 +433,9 @@ abstract class TutorialFragment extends Fragment implements OnTouchListener {
|| (mTutorialController != null && mTutorialController.isGestureCompleted());
}
abstract void logTutorialStepShown();
abstract void logTutorialStepShown(@NonNull StatsLogManager statsLogManager);
abstract void logTutorialStepCompleted();
abstract void logTutorialStepCompleted(@NonNull StatsLogManager statsLogManager);
@Nullable
private GestureSandboxActivity getGestureSandboxActivity() {
@@ -443,4 +443,18 @@ abstract class TutorialFragment extends Fragment implements OnTouchListener {
return context instanceof GestureSandboxActivity ? (GestureSandboxActivity) context : null;
}
@Nullable
private StatsLogManager getStatsLogManager() {
GestureSandboxActivity activity = getGestureSandboxActivity();
return activity != null ? activity.getStatsLogManager() : null;
}
@Nullable
private SharedPreferences getSharedPreferences() {
GestureSandboxActivity activity = getGestureSandboxActivity();
return activity != null ? activity.getSharedPrefs() : null;
}
}