Log events during PS setup flow.

Log pages and user clicks during private
space setup flow.

Bug: 313170618
Test: statd_testdrive 97, output: https://paste.googleplex.com/4874404496932864
Change-Id: I1f59e9720ee4bdd21670b86a4f1f0f98a91fa0db
diff --git a/src/com/android/settings/privatespace/AutoAdvanceSetupFragment.java b/src/com/android/settings/privatespace/AutoAdvanceSetupFragment.java
index 036a13a..f9c4c4e 100644
--- a/src/com/android/settings/privatespace/AutoAdvanceSetupFragment.java
+++ b/src/com/android/settings/privatespace/AutoAdvanceSetupFragment.java
@@ -25,6 +25,7 @@
 import android.animation.ObjectAnimator;
 import android.animation.ValueAnimator;
 import android.annotation.SuppressLint;
+import android.app.settings.SettingsEnums;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
@@ -39,10 +40,10 @@
 
 import androidx.activity.OnBackPressedCallback;
 import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
 import androidx.navigation.fragment.NavHostFragment;
 
 import com.android.settings.R;
+import com.android.settings.core.InstrumentedFragment;
 
 import com.google.android.setupdesign.GlifLayout;
 import com.google.common.collect.ImmutableList;
@@ -52,7 +53,7 @@
 import java.util.List;
 
 /** Fragment to show screens that auto advance during private space setup flow */
-public class AutoAdvanceSetupFragment extends Fragment {
+public class AutoAdvanceSetupFragment extends InstrumentedFragment {
     private static final String TAG = "AutoAdvanceFragment";
     private static final String TITLE_INDEX = "title_index";
     private static final int DELAY_BETWEEN_SCREENS = 5000; // 5 seconds in millis
@@ -78,13 +79,24 @@
                             startFadeOutAnimation();
                             mHandler.postDelayed(mUpdateScreenResources, DELAY_BETWEEN_SCREENS);
                         } else {
-                            PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer
-                                    .getInstance(getActivity());
+                            PrivateSpaceMaintainer privateSpaceMaintainer =
+                                    PrivateSpaceMaintainer.getInstance(getActivity());
                             UserHandle userHandle;
-                            if (privateSpaceMaintainer.doesPrivateSpaceExist() && (userHandle =
-                                    privateSpaceMaintainer.getPrivateProfileHandle()) != null) {
+                            if (privateSpaceMaintainer.doesPrivateSpaceExist()
+                                    && (userHandle =
+                                                    privateSpaceMaintainer
+                                                            .getPrivateProfileHandle())
+                                            != null) {
+                                mMetricsFeatureProvider.action(
+                                        getContext(),
+                                        SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_SPACE_CREATED,
+                                        true);
                                 startActivityInPrivateUser(userHandle);
                             } else {
+                                mMetricsFeatureProvider.action(
+                                        getContext(),
+                                        SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_SPACE_CREATED,
+                                        false);
                                 showPrivateSpaceErrorScreen();
                             }
                         }
@@ -144,6 +156,11 @@
         super.onDestroy();
     }
 
+    @Override
+    public int getMetricsCategory() {
+        return SettingsEnums.PRIVATE_SPACE_SETUP_SPACE_CREATION;
+    }
+
     @SuppressLint("MissingPermission")
     private void startActivityInPrivateUser(UserHandle userHandle) {
         /* Start new activity in private profile which is needed to set private profile lock */
diff --git a/src/com/android/settings/privatespace/PrivateProfileCreationError.java b/src/com/android/settings/privatespace/PrivateProfileCreationError.java
index 80826dd..91c35a3 100644
--- a/src/com/android/settings/privatespace/PrivateProfileCreationError.java
+++ b/src/com/android/settings/privatespace/PrivateProfileCreationError.java
@@ -17,6 +17,7 @@
 package com.android.settings.privatespace;
 
 import android.app.Activity;
+import android.app.settings.SettingsEnums;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -24,17 +25,17 @@
 
 import androidx.activity.OnBackPressedCallback;
 import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
 import androidx.navigation.fragment.NavHostFragment;
 
 import com.android.settings.R;
+import com.android.settings.core.InstrumentedFragment;
 
 import com.google.android.setupcompat.template.FooterBarMixin;
 import com.google.android.setupcompat.template.FooterButton;
 import com.google.android.setupdesign.GlifLayout;
 
 /** Fragment to display error screen if creation of private profile failed for any reason. */
-public class PrivateProfileCreationError extends Fragment {
+public class PrivateProfileCreationError extends InstrumentedFragment {
     @Override
     public View onCreateView(
             LayoutInflater inflater,
@@ -73,10 +74,17 @@
         return rootView;
     }
 
+    @Override
+    public int getMetricsCategory() {
+        return SettingsEnums.PRIVATE_SPACE_SETUP_SPACE_CREATION_ERROR;
+    }
+
     private View.OnClickListener onTryAgain() {
         return v -> {
+            mMetricsFeatureProvider.action(
+                    getContext(), SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_TRY_CREATE_SPACE_AGAIN);
             NavHostFragment.findNavController(PrivateProfileCreationError.this)
-                                        .navigate(R.id.action_retry_profile_creation);
+                    .navigate(R.id.action_retry_profile_creation);
         };
     }
 
@@ -84,6 +92,8 @@
         return v -> {
             Activity activity = getActivity();
             if (activity != null) {
+                mMetricsFeatureProvider.action(
+                        getContext(), SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_CANCEL_CREATE_SPACE);
                 activity.finish();
             }
         };
diff --git a/src/com/android/settings/privatespace/PrivateSpaceAccountLoginError.java b/src/com/android/settings/privatespace/PrivateSpaceAccountLoginError.java
index 2d263d7..ac3518e 100644
--- a/src/com/android/settings/privatespace/PrivateSpaceAccountLoginError.java
+++ b/src/com/android/settings/privatespace/PrivateSpaceAccountLoginError.java
@@ -20,6 +20,7 @@
 import static com.android.settings.privatespace.PrivateSpaceSetupActivity.EXTRA_ACTION_TYPE;
 
 import android.annotation.SuppressLint;
+import android.app.settings.SettingsEnums;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.UserHandle;
@@ -29,16 +30,16 @@
 
 import androidx.activity.OnBackPressedCallback;
 import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
 
 import com.android.settings.R;
+import com.android.settings.core.InstrumentedFragment;
 
 import com.google.android.setupcompat.template.FooterBarMixin;
 import com.google.android.setupcompat.template.FooterButton;
 import com.google.android.setupdesign.GlifLayout;
 
 /** Fragment to display error screen if the profile is not signed in with a Google account. */
-public class PrivateSpaceAccountLoginError extends Fragment {
+public class PrivateSpaceAccountLoginError extends InstrumentedFragment {
     @Override
     public View onCreateView(
             LayoutInflater inflater,
@@ -67,18 +68,26 @@
         return rootView;
     }
 
+    @Override
+    public int getMetricsCategory() {
+        return SettingsEnums.PRIVATE_SPACE_SETUP_ACCOUNT_LOGIN_ERROR;
+    }
+
     @SuppressLint("MissingPermission")
     private View.OnClickListener nextScreen() {
         return v -> {
-            PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer
-                    .getInstance(getActivity());
+            mMetricsFeatureProvider.action(
+                    getContext(),
+                    SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_TRY_CREATE_ACCOUNT_AGAIN);
+            PrivateSpaceMaintainer privateSpaceMaintainer =
+                    PrivateSpaceMaintainer.getInstance(getActivity());
             UserHandle userHandle;
-            if (privateSpaceMaintainer.doesPrivateSpaceExist() && (userHandle =
-                    privateSpaceMaintainer.getPrivateProfileHandle()) != null) {
+            if (privateSpaceMaintainer.doesPrivateSpaceExist()
+                    && (userHandle = privateSpaceMaintainer.getPrivateProfileHandle()) != null) {
                 Intent intent = new Intent(getContext(), PrivateProfileContextHelperActivity.class);
                 intent.putExtra(EXTRA_ACTION_TYPE, ACCOUNT_LOGIN_ACTION);
-                getActivity().startActivityForResultAsUser(intent, ACCOUNT_LOGIN_ACTION,
-                        userHandle);
+                getActivity()
+                        .startActivityForResultAsUser(intent, ACCOUNT_LOGIN_ACTION, userHandle);
             }
         };
     }
diff --git a/src/com/android/settings/privatespace/PrivateSpaceEducation.java b/src/com/android/settings/privatespace/PrivateSpaceEducation.java
index 0c87b2b..887854b 100644
--- a/src/com/android/settings/privatespace/PrivateSpaceEducation.java
+++ b/src/com/android/settings/privatespace/PrivateSpaceEducation.java
@@ -17,23 +17,25 @@
 package com.android.settings.privatespace;
 
 import android.app.Activity;
+import android.app.settings.SettingsEnums;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
 import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
 import androidx.navigation.fragment.NavHostFragment;
 
 import com.android.settings.R;
+import com.android.settings.core.InstrumentedFragment;
 
 import com.google.android.setupcompat.template.FooterBarMixin;
 import com.google.android.setupcompat.template.FooterButton;
 import com.google.android.setupdesign.GlifLayout;
 
 /** Fragment educating about the usage of Private Space. */
-public class PrivateSpaceEducation extends Fragment {
+public class PrivateSpaceEducation extends InstrumentedFragment {
+
     @Override
     public View onCreateView(
             LayoutInflater inflater,
@@ -66,11 +68,17 @@
         return rootView;
     }
 
+    @Override
+    public int getMetricsCategory() {
+        return SettingsEnums.PRIVATE_SPACE_SETUP_EDUCATION;
+    }
+
     private View.OnClickListener onSetup() {
         return v -> {
+            mMetricsFeatureProvider.action(
+                    getContext(), SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_START);
             NavHostFragment.findNavController(PrivateSpaceEducation.this)
-                                        .navigate(R.id.action_education_to_auto_advance);
-
+                    .navigate(R.id.action_education_to_auto_advance);
         };
     }
 
@@ -78,6 +86,8 @@
         return v -> {
             Activity activity = getActivity();
             if (activity != null) {
+                mMetricsFeatureProvider.action(
+                        getContext(), SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_CANCEL);
                 activity.finish();
             }
         };
diff --git a/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java b/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java
index dd60dc4..56f48a8 100644
--- a/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java
+++ b/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java
@@ -20,6 +20,7 @@
 import static com.android.settings.privatespace.PrivateSpaceSetupActivity.SET_LOCK_ACTION;
 
 import android.annotation.SuppressLint;
+import android.app.settings.SettingsEnums;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.UserHandle;
@@ -29,18 +30,20 @@
 
 import androidx.activity.OnBackPressedCallback;
 import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
 import androidx.navigation.fragment.NavHostFragment;
 
 import com.android.settings.R;
+import com.android.settings.core.InstrumentedFragment;
 
 import com.google.android.setupcompat.template.FooterBarMixin;
 import com.google.android.setupcompat.template.FooterButton;
 import com.google.android.setupdesign.GlifLayout;
 
-/** Fragment that provides an option to user to choose between the existing screen lock or set a
- * separate private profile lock. */
-public class PrivateSpaceSetLockFragment extends Fragment {
+/**
+ * Fragment that provides an option to user to choose between the existing screen lock or set a
+ * separate private profile lock.
+ */
+public class PrivateSpaceSetLockFragment extends InstrumentedFragment {
 
     @Override
     public View onCreateView(
@@ -83,8 +86,15 @@
         return rootView;
     }
 
+    @Override
+    public int getMetricsCategory() {
+        return SettingsEnums.PRIVATE_SPACE_SETUP_LOCK;
+    }
+
     private View.OnClickListener onClickUse() {
         return v -> {
+            mMetricsFeatureProvider.action(
+                    getContext(), SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_USE_SCREEN_LOCK);
             // Simply Use default screen lock. No need to handle
             NavHostFragment.findNavController(PrivateSpaceSetLockFragment.this)
                     .navigate(R.id.action_success_fragment);
@@ -93,6 +103,8 @@
 
     private View.OnClickListener onClickNewLock() {
         return v -> {
+            mMetricsFeatureProvider.action(
+                    getContext(), SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_NEW_LOCK);
             createPrivateSpaceLock();
         };
     }
diff --git a/src/com/android/settings/privatespace/PrivateSpaceSetupActivity.java b/src/com/android/settings/privatespace/PrivateSpaceSetupActivity.java
index 4eb61e5..d6e1a3f 100644
--- a/src/com/android/settings/privatespace/PrivateSpaceSetupActivity.java
+++ b/src/com/android/settings/privatespace/PrivateSpaceSetupActivity.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.privatespace;
 
+import android.app.settings.SettingsEnums;
 import android.content.Intent;
 import android.os.Bundle;
 
@@ -25,6 +26,8 @@
 
 import com.android.settings.R;
 import com.android.settings.SetupWizardUtils;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
 import com.google.android.setupdesign.util.ThemeHelper;
 
@@ -34,6 +37,8 @@
     public static final int ACCOUNT_LOGIN_ACTION = 2;
     public static final String EXTRA_ACTION_TYPE = "action_type";
     private NavHostFragment mNavHostFragment;
+    private MetricsFeatureProvider mMetricsFeatureProvider;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         if (!android.os.Flags.allowPrivateProfile()) {
@@ -42,6 +47,7 @@
         setTheme(SetupWizardUtils.getTheme(this, getIntent()));
         ThemeHelper.trySetDynamicColor(this);
         super.onCreate(savedInstanceState);
+        mMetricsFeatureProvider = FeatureFactory.getFeatureFactory().getMetricsFeatureProvider();
         setContentView(R.layout.privatespace_setup_root);
         mNavHostFragment = (NavHostFragment) getSupportFragmentManager()
                 .findFragmentById(R.id.ps_nav_host_fragment);
@@ -54,8 +60,14 @@
             mNavHostFragment.getNavController().navigate(R.id.action_success_fragment);
         } else if (requestCode == ACCOUNT_LOGIN_ACTION) {
             if (resultCode == RESULT_OK) {
+                mMetricsFeatureProvider.action(
+                        this, SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_ACCOUNT_LOGIN_SUCCESS, true);
                 mNavHostFragment.getNavController().navigate(R.id.action_set_lock_fragment);
             } else {
+                mMetricsFeatureProvider.action(
+                        this,
+                        SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_ACCOUNT_LOGIN_SUCCESS,
+                        false);
                 mNavHostFragment.getNavController().navigate(R.id.action_advance_login_error);
             }
         }
diff --git a/src/com/android/settings/privatespace/SetupSuccessFragment.java b/src/com/android/settings/privatespace/SetupSuccessFragment.java
index f6796be..fc2ce46 100644
--- a/src/com/android/settings/privatespace/SetupSuccessFragment.java
+++ b/src/com/android/settings/privatespace/SetupSuccessFragment.java
@@ -17,6 +17,7 @@
 package com.android.settings.privatespace;
 
 import android.app.Activity;
+import android.app.settings.SettingsEnums;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
@@ -28,16 +29,16 @@
 
 import androidx.activity.OnBackPressedCallback;
 import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
 
 import com.android.settings.R;
+import com.android.settings.core.InstrumentedFragment;
 
 import com.google.android.setupcompat.template.FooterBarMixin;
 import com.google.android.setupcompat.template.FooterButton;
 import com.google.android.setupdesign.GlifLayout;
 
 /** Fragment for the final screen shown on successful completion of private space setup. */
-public class SetupSuccessFragment extends Fragment {
+public class SetupSuccessFragment extends InstrumentedFragment {
     private static final String TAG = "SetupSuccessFragment";
 
     @Override
@@ -72,14 +73,25 @@
         return rootView;
     }
 
+    @Override
+    public int getMetricsCategory() {
+        return SettingsEnums.PRIVATE_SPACE_SETUP_FINISH;
+    }
+
     private View.OnClickListener onClickNext() {
         return v -> {
             Activity activity = getActivity();
             if (activity != null) {
+                mMetricsFeatureProvider.action(
+                        getContext(), SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_DONE);
                 Intent allAppsIntent = new Intent(Intent.ACTION_ALL_APPS);
-                ResolveInfo resolveInfo = activity.getPackageManager().resolveActivityAsUser(
-                        new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME),
-                        PackageManager.MATCH_SYSTEM_ONLY, activity.getUserId());
+                ResolveInfo resolveInfo =
+                        activity.getPackageManager()
+                                .resolveActivityAsUser(
+                                        new Intent(Intent.ACTION_MAIN)
+                                                .addCategory(Intent.CATEGORY_HOME),
+                                        PackageManager.MATCH_SYSTEM_ONLY,
+                                        activity.getUserId());
                 if (resolveInfo != null) {
                     allAppsIntent.setPackage(resolveInfo.activityInfo.packageName);
                     allAppsIntent.setComponent(resolveInfo.activityInfo.getComponentName());