diff --git a/src/com/android/settings/users/UserDetailsSettings.java b/src/com/android/settings/users/UserDetailsSettings.java index b84fc323edd..9a1798261b2 100644 --- a/src/com/android/settings/users/UserDetailsSettings.java +++ b/src/com/android/settings/users/UserDetailsSettings.java @@ -185,9 +185,13 @@ public class UserDetailsSettings extends SettingsPreferenceFragment enableCallsAndSms(false); } else if (preference == mGrantAdminPref) { if (Boolean.FALSE.equals(newValue)) { + mMetricsFeatureProvider.action(getActivity(), + SettingsEnums.ACTION_REVOKE_ADMIN_FROM_SETTINGS); showDialog(DIALOG_CONFIRM_REVOKE_ADMIN); return false; } + mMetricsFeatureProvider.action(getActivity(), + SettingsEnums.ACTION_GRANT_ADMIN_FROM_SETTINGS); updateUserAdminStatus(true); } return true; diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index ceef7690dc1..d904ed0f55c 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -948,6 +948,13 @@ public class UserSettings extends SettingsPreferenceFragment getActivity(), (grantAdmin) -> { mGrantAdmin = grantAdmin; + if (mGrantAdmin) { + mMetricsFeatureProvider.action(getActivity(), + SettingsEnums.ACTION_GRANT_ADMIN_FROM_SETTINGS_CREATION_DIALOG); + } else { + mMetricsFeatureProvider.action(getActivity(), + SettingsEnums.ACTION_NOT_GRANT_ADMIN_FROM_SETTINGS_CREATION_DIALOG); + } showDialog(DIALOG_USER_PROFILE_EDITOR_ADD_USER); }, () -> { diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java index 90e098cf61a..df38420f961 100644 --- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java @@ -263,4 +263,11 @@ public class ShadowUserManager extends org.robolectric.shadows.ShadowUserManager } return isSuccess; } + + @Implementation + protected void setUserAdmin(@UserIdInt int userId) { + for (int i = 0; i < mUserProfileInfos.size(); i++) { + mUserProfileInfos.get(i).flags |= UserInfo.FLAG_ADMIN; + } + } } diff --git a/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java index 42c1e9f98b4..b76ce10f01e 100644 --- a/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java +++ b/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java @@ -725,6 +725,32 @@ public class UserDetailsSettingsTest { verify(mFragment).removePreference(KEY_GRANT_ADMIN); } + @Test + public void onPreferenceChange_grantAdminClicked_isNotAdmin_shouldLogGrantAdmin() { + setupSelectedUser(); + mFragment.mUserInfo = mUserInfo; + mFragment.mGrantAdminPref = mGrantAdminPref; + doNothing().when(mFragment).showDialog(anyInt()); + + mFragment.onPreferenceChange(mGrantAdminPref, true); + + verify(mMetricsFeatureProvider).action(any(), + eq(SettingsEnums.ACTION_GRANT_ADMIN_FROM_SETTINGS)); + } + + @Test + public void onPreferenceChange_grantAdminClicked_isAdmin_shouldLogRevokeAdmin() { + setupSelectedAdminUser(); + mFragment.mUserInfo = mUserInfo; + mFragment.mGrantAdminPref = mGrantAdminPref; + doNothing().when(mFragment).showDialog(anyInt()); + + mFragment.onPreferenceChange(mGrantAdminPref, false); + + verify(mMetricsFeatureProvider).action(any(), + eq(SettingsEnums.ACTION_REVOKE_ADMIN_FROM_SETTINGS)); + } + private void setupSelectedUser() { mArguments.putInt("user_id", 1); mUserInfo = new UserInfo(1, "Tom", null, @@ -743,6 +769,15 @@ public class UserDetailsSettingsTest { mUserManager.addProfile(mUserInfo); } + private void setupSelectedAdminUser() { + mArguments.putInt("user_id", 12); + mUserInfo = new UserInfo(12, "Andy", null, + UserInfo.FLAG_FULL | UserInfo.FLAG_INITIALIZED | UserInfo.FLAG_ADMIN, + UserManager.USER_TYPE_FULL_SECONDARY); + + mUserManager.addProfile(mUserInfo); + } + private void setupSelectedGuest() { mArguments.putInt("user_id", 23); mUserInfo = new UserInfo(23, "Guest", null,