diff --git a/src/com/android/settings/privatespace/AutoAdvanceSetupFragment.java b/src/com/android/settings/privatespace/AutoAdvanceSetupFragment.java index 036a13ad13d..f9c4c4e41d0 100644 --- a/src/com/android/settings/privatespace/AutoAdvanceSetupFragment.java +++ b/src/com/android/settings/privatespace/AutoAdvanceSetupFragment.java @@ -25,6 +25,7 @@ import android.animation.AnimatorSet; 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 android.widget.ImageView; 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 org.jetbrains.annotations.NotNull; 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 @@ public class AutoAdvanceSetupFragment extends Fragment { 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 @@ public class AutoAdvanceSetupFragment extends Fragment { 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 80826dd326d..91c35a31b97 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 android.view.ViewGroup; 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 @@ public class PrivateProfileCreationError extends Fragment { 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 @@ public class PrivateProfileCreationError extends Fragment { 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 2d263d7be18..ac3518ec848 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.ACCOUN 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 android.view.ViewGroup; 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 @@ public class PrivateSpaceAccountLoginError extends Fragment { 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 0c87b2bd030..887854b5919 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 @@ public class PrivateSpaceEducation extends Fragment { 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 @@ public class PrivateSpaceEducation extends Fragment { 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 dd60dc4fd81..56f48a8cc05 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.EXTRA_ 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 android.view.ViewGroup; 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 @@ public class PrivateSpaceSetLockFragment extends Fragment { 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 @@ public class PrivateSpaceSetLockFragment extends Fragment { 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 4eb61e53c0d..d6e1a3f41d8 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 androidx.navigation.fragment.NavHostFragment; 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 class PrivateSpaceSetupActivity extends FragmentActivity { 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 @@ public class PrivateSpaceSetupActivity extends FragmentActivity { 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 @@ public class PrivateSpaceSetupActivity extends FragmentActivity { 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 f6796be0b5d..fc2ce46e73b 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 android.widget.Toast; 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 @@ public class SetupSuccessFragment extends Fragment { 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());