Support click metrics logs in several pages
- Assign metrics category to perferences at an earlier stage in
DashboardFragment for better usability.
Bug: 137559984
Test: robotest
Change-Id: Icd4185efa0e655be20c4b673a1380fa42140923f
diff --git a/src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java b/src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java
index a21c024..57a2962 100644
--- a/src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java
@@ -20,9 +20,6 @@
import android.os.UserHandle;
import android.provider.Settings;
-import androidx.preference.Preference;
-import androidx.preference.SwitchPreference;
-
import com.android.settings.core.TogglePreferenceController;
/** Controller that shows the magnification enable mode summary. */
diff --git a/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java b/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java
index f73ca01..6883644 100644
--- a/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java
@@ -54,6 +54,7 @@
populateMagnificationGesturesPreferenceExtras(extras, mContext);
extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED, isChecked());
extras.putBoolean(AccessibilitySettings.EXTRA_LAUNCHED_FROM_SUW, mIsFromSUW);
+ return true;
}
return false;
}
diff --git a/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java b/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java
index 952f820..9813bde 100644
--- a/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java
@@ -59,6 +59,7 @@
mContext.getText(R.string.accessibility_screen_magnification_navbar_summary));
extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED, isChecked());
extras.putBoolean(AccessibilitySettings.EXTRA_LAUNCHED_FROM_SUW, mIsFromSUW);
+ return true;
}
return false;
}
diff --git a/src/com/android/settings/accounts/AccountPreferenceController.java b/src/com/android/settings/accounts/AccountPreferenceController.java
index db3a8eb..ff5bc78 100644
--- a/src/com/android/settings/accounts/AccountPreferenceController.java
+++ b/src/com/android/settings/accounts/AccountPreferenceController.java
@@ -80,6 +80,7 @@
private static final int ORDER_NEXT_TO_LAST = 1001;
private static final int ORDER_NEXT_TO_NEXT_TO_LAST = 1000;
+ private static final String PREF_KEY_ADD_ACCOUNT = "add_account";
private static final String PREF_KEY_REMOVE_PROFILE = "remove_profile";
private static final String PREF_KEY_WORK_PROFILE_SETTING = "work_profile_setting";
@@ -225,11 +226,13 @@
@Override
public boolean onPreferenceClick(Preference preference) {
+ final int metricsCategory = mFragment.getMetricsCategory();
// Check the preference
final int count = mProfiles.size();
for (int i = 0; i < count; i++) {
ProfileData profileData = mProfiles.valueAt(i);
if (preference == profileData.addAccountPreference) {
+ mMetricsFeatureProvider.logClickedPreference(preference, metricsCategory);
Intent intent = new Intent(ACTION_ADD_ACCOUNT);
intent.putExtra(EXTRA_USER, profileData.userInfo.getUserHandle());
intent.putExtra(EXTRA_AUTHORITIES, mAuthorities);
@@ -237,16 +240,18 @@
return true;
}
if (preference == profileData.removeWorkProfilePreference) {
+ mMetricsFeatureProvider.logClickedPreference(preference, metricsCategory);
final int userId = profileData.userInfo.id;
RemoveUserFragment.newInstance(userId).show(mFragment.getFragmentManager(),
"removeUser");
return true;
}
if (preference == profileData.managedProfilePreference) {
+ mMetricsFeatureProvider.logClickedPreference(preference, metricsCategory);
Bundle arguments = new Bundle();
arguments.putParcelable(Intent.EXTRA_USER, profileData.userInfo.getUserHandle());
new SubSettingLauncher(mContext)
- .setSourceMetricsCategory(mFragment.getMetricsCategory())
+ .setSourceMetricsCategory(metricsCategory)
.setDestination(ManagedProfileSettings.class.getName())
.setTitleRes(R.string.managed_profile_settings_title)
.setArguments(arguments)
@@ -360,6 +365,7 @@
private RestrictedPreference newAddAccountPreference() {
RestrictedPreference preference =
new RestrictedPreference(mFragment.getPreferenceManager().getContext());
+ preference.setKey(PREF_KEY_ADD_ACCOUNT);
preference.setTitle(R.string.add_account_label);
preference.setIcon(R.drawable.ic_add_24dp);
preference.setOnPreferenceClickListener(this);
diff --git a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
index 5c6e6bb..037f584 100644
--- a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
+++ b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
@@ -40,10 +40,12 @@
import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.widget.LayoutPreference;
import java.io.IOException;
@@ -53,20 +55,23 @@
private static final String KEY_REMOVE_ACCOUNT = "remove_account";
+ private final MetricsFeatureProvider mMetricsFeatureProvider;
private Account mAccount;
private Fragment mParentFragment;
private UserHandle mUserHandle;
+ private LayoutPreference mRemoveAccountPreference;
public RemoveAccountPreferenceController(Context context, Fragment parent) {
super(context);
mParentFragment = parent;
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
- final LayoutPreference removeAccountPreference = screen.findPreference(KEY_REMOVE_ACCOUNT);
- Button removeAccountButton = (Button) removeAccountPreference.findViewById(R.id.button);
+ mRemoveAccountPreference = screen.findPreference(KEY_REMOVE_ACCOUNT);
+ final Button removeAccountButton = mRemoveAccountPreference.findViewById(R.id.button);
removeAccountButton.setOnClickListener(this);
}
@@ -82,6 +87,8 @@
@Override
public void onClick(View v) {
+ mMetricsFeatureProvider.logClickedPreference(mRemoveAccountPreference,
+ mMetricsFeatureProvider.getMetricsCategory(mParentFragment));
if (mUserHandle != null) {
final EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfRestrictionEnforced(
mContext, UserManager.DISALLOW_MODIFY_ACCOUNTS, mUserHandle.getIdentifier());
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index c70d841..e4041fb 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -173,6 +173,13 @@
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
checkUiBlocker(mControllers);
refreshAllPreferences(getLogTag());
+ mControllers.stream()
+ .map(controller -> (Preference) findPreference(controller.getPreferenceKey()))
+ .filter(Objects::nonNull)
+ .forEach(preference -> {
+ // Give all controllers a chance to handle click.
+ preference.getExtras().putInt(CATEGORY, getMetricsCategory());
+ });
}
@Override
@@ -211,8 +218,6 @@
public boolean onPreferenceTreeClick(Preference preference) {
final Collection<List<AbstractPreferenceController>> controllers =
mPreferenceControllers.values();
- // Give all controllers a chance to handle click.
- preference.getExtras().putInt(CATEGORY, getMetricsCategory());
for (List<AbstractPreferenceController> controllerList : controllers) {
for (AbstractPreferenceController controller : controllerList) {
if (controller.handlePreferenceTreeClick(preference)) {
diff --git a/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java b/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java
index 3543832..f00a327 100644
--- a/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java
@@ -20,6 +20,7 @@
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.os.Bundle;
+import android.text.TextUtils;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
@@ -63,23 +64,29 @@
}
accountPreference.setSummary(mAccounts[0].name);
- accountPreference.setOnPreferenceClickListener(preference -> {
- final Bundle args = new Bundle();
- args.putParcelable(AccountDetailDashboardFragment.KEY_ACCOUNT,
- mAccounts[0]);
- args.putParcelable(AccountDetailDashboardFragment.KEY_USER_HANDLE,
- android.os.Process.myUserHandle());
- args.putString(AccountDetailDashboardFragment.KEY_ACCOUNT_TYPE,
- mAccountFeatureProvider.getAccountType());
+ }
- new SubSettingLauncher(mContext)
- .setDestination(AccountDetailDashboardFragment.class.getName())
- .setTitleRes(R.string.account_sync_title)
- .setArguments(args)
- .setSourceMetricsCategory(SettingsEnums.DEVICEINFO)
- .launch();
- return true;
- });
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
+ return false;
+ }
+
+ final Bundle args = new Bundle();
+ args.putParcelable(AccountDetailDashboardFragment.KEY_ACCOUNT,
+ mAccounts[0]);
+ args.putParcelable(AccountDetailDashboardFragment.KEY_USER_HANDLE,
+ android.os.Process.myUserHandle());
+ args.putString(AccountDetailDashboardFragment.KEY_ACCOUNT_TYPE,
+ mAccountFeatureProvider.getAccountType());
+
+ new SubSettingLauncher(mContext)
+ .setDestination(AccountDetailDashboardFragment.class.getName())
+ .setTitleRes(R.string.account_sync_title)
+ .setArguments(args)
+ .setSourceMetricsCategory(SettingsEnums.DEVICEINFO)
+ .launch();
+ return true;
}
@Override
diff --git a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
index b2e2980..4af5d79 100644
--- a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
+++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
@@ -23,7 +23,6 @@
import android.content.pm.UserInfo;
import android.os.Bundle;
import android.os.UserManager;
-import android.provider.SearchIndexableResource;
import android.view.View;
import com.android.settings.R;
@@ -50,7 +49,6 @@
import com.android.settingslib.widget.LayoutPreference;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
@SearchIndexable
diff --git a/src/com/android/settings/dream/StartNowPreferenceController.java b/src/com/android/settings/dream/StartNowPreferenceController.java
index a5db93b..fb0581f 100644
--- a/src/com/android/settings/dream/StartNowPreferenceController.java
+++ b/src/com/android/settings/dream/StartNowPreferenceController.java
@@ -16,7 +16,6 @@
package com.android.settings.dream;
-import android.app.settings.SettingsEnums;
import android.content.Context;
import android.widget.Button;
@@ -25,6 +24,7 @@
import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -62,7 +62,8 @@
LayoutPreference pref = screen.findPreference(getPreferenceKey());
Button startButton = pref.findViewById(R.id.dream_start_now_button);
startButton.setOnClickListener(v -> {
- mMetricsFeatureProvider.logClickedPreference(pref, SettingsEnums.DREAM);
+ mMetricsFeatureProvider.logClickedPreference(pref,
+ pref.getExtras().getInt(DashboardFragment.CATEGORY));
mBackend.startDreaming();
});
}
diff --git a/src/com/android/settings/location/AppSettingsInjector.java b/src/com/android/settings/location/AppSettingsInjector.java
index 8120821..bea623e 100644
--- a/src/com/android/settings/location/AppSettingsInjector.java
+++ b/src/com/android/settings/location/AppSettingsInjector.java
@@ -17,11 +17,14 @@
package com.android.settings.location;
import android.content.Context;
+import android.content.Intent;
import android.text.TextUtils;
import androidx.preference.Preference;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.RestrictedAppPreference;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.location.InjectedSetting;
import com.android.settingslib.location.SettingsInjector;
import com.android.settingslib.widget.apppreference.AppPreference;
@@ -31,8 +34,13 @@
*/
public class AppSettingsInjector extends SettingsInjector {
- public AppSettingsInjector(Context context) {
+ private final MetricsFeatureProvider mMetricsFeatureProvider;
+ private final int mMetricsCategory;
+
+ public AppSettingsInjector(Context context, int metricsCategory) {
super(context);
+ mMetricsCategory = metricsCategory;
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
@Override
@@ -41,4 +49,9 @@
? new AppPreference(prefContext)
: new RestrictedAppPreference(prefContext, setting.userRestriction);
}
+
+ @Override
+ protected void logPreferenceClick(Intent intent) {
+ mMetricsFeatureProvider.logStartedIntent(intent, mMetricsCategory);
+ }
}
diff --git a/src/com/android/settings/location/LocationServicePreferenceController.java b/src/com/android/settings/location/LocationServicePreferenceController.java
index 56a23bd..04a9250 100644
--- a/src/com/android/settings/location/LocationServicePreferenceController.java
+++ b/src/com/android/settings/location/LocationServicePreferenceController.java
@@ -58,7 +58,7 @@
@Override
public void init(DashboardFragment fragment) {
super.init(fragment);
- mInjector = new AppSettingsInjector(mContext);
+ mInjector = new AppSettingsInjector(mContext, getMetricsCategory());
}
@Override
diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java
index 755d158..5beacdd 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -311,8 +311,9 @@
@Override
public boolean onPreferenceTreeClick(Preference preference) {
- final String key = preference.getKey();
+ writePreferenceClickMetric(preference);
+ final String key = preference.getKey();
if (!isUnlockMethodSecure(key) && mLockPatternUtils.isSecure(mUserId)) {
// Show the disabling FRP warning only when the user is switching from a secure
// unlock method to an insecure one
diff --git a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java
index 650b1e3..d678d86 100644
--- a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java
+++ b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java
@@ -31,6 +31,7 @@
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.SubSettingLauncher;
+import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.security.screenlock.ScreenLockSettings;
@@ -39,6 +40,7 @@
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
public class ChangeScreenLockPreferenceController extends AbstractPreferenceController implements
PreferenceControllerMixin, GearPreference.OnGearClickListener {
@@ -52,6 +54,7 @@
protected final int mUserId = UserHandle.myUserId();
protected final int mProfileChallengeUserId;
+ private final MetricsFeatureProvider mMetricsFeatureProvider;
protected RestrictedPreference mPreference;
@@ -64,6 +67,7 @@
.getLockPatternUtils(context);
mHost = host;
mProfileChallengeUserId = Utils.getManagedProfileId(mUm, mUserId);
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
@Override
@@ -104,6 +108,8 @@
@Override
public void onGearClick(GearPreference p) {
if (TextUtils.equals(p.getKey(), getPreferenceKey())) {
+ mMetricsFeatureProvider.logClickedPreference(p,
+ p.getExtras().getInt(DashboardFragment.CATEGORY));
new SubSettingLauncher(mContext)
.setDestination(ScreenLockSettings.class.getName())
.setSourceMetricsCategory(mHost.getMetricsCategory())