diff --git a/quickstep/res/layout/activity_allset.xml b/quickstep/res/layout/activity_allset.xml index 06dfa37263..0cae733dbe 100644 --- a/quickstep/res/layout/activity_allset.xml +++ b/quickstep/res/layout/activity_allset.xml @@ -72,12 +72,11 @@ = 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()) diff --git a/quickstep/src/com/android/quickstep/interaction/HomeGestureTutorialFragment.java b/quickstep/src/com/android/quickstep/interaction/HomeGestureTutorialFragment.java index e987d5a83b..95eafdae33 100644 --- a/quickstep/src/com/android/quickstep/interaction/HomeGestureTutorialFragment.java +++ b/quickstep/src/com/android/quickstep/interaction/HomeGestureTutorialFragment.java @@ -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); } } diff --git a/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialFragment.java b/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialFragment.java index c7e24dbd7c..4e1521f161 100644 --- a/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialFragment.java +++ b/quickstep/src/com/android/quickstep/interaction/OverviewGestureTutorialFragment.java @@ -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); } } diff --git a/quickstep/src/com/android/quickstep/interaction/SandboxModeTutorialFragment.java b/quickstep/src/com/android/quickstep/interaction/SandboxModeTutorialFragment.java index 92a27314bc..5183e2c961 100644 --- a/quickstep/src/com/android/quickstep/interaction/SandboxModeTutorialFragment.java +++ b/quickstep/src/com/android/quickstep/interaction/SandboxModeTutorialFragment.java @@ -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 } } diff --git a/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java b/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java index 7556bf4c29..33e800d1c0 100644 --- a/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java +++ b/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java @@ -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 updatedCompletedSteps = new ArraySet<>(mSharedPrefs.getStringSet( - COMPLETED_TUTORIAL_STEPS_PREFERENCE_KEY, new ArraySet<>())); + SharedPreferences sharedPrefs = getSharedPreferences(); + if (sharedPrefs != null) { + Set 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; + } }