From 5fc96844e53b41d26bfd64faeb75271b72823320 Mon Sep 17 00:00:00 2001 From: Yi-Ling Chuang Date: Fri, 10 Sep 2021 15:52:14 +0800 Subject: [PATCH 1/3] Correct how the injection mechanism starts activities Settings Injection used to start activities with startActivityForResult() and its extension, where there was not result really being handled. Hence, this CL corrects the way it starts activities by removing the "ForResult" part. Fixes: 197704126 Test: robotest and launch Android Auto to see it being launched in another task. Change-Id: I259b2555cf62f8966afdf664b337af5f216b3843 --- .../dashboard/DashboardFeatureProviderImpl.java | 8 ++++---- .../DashboardFeatureProviderImplTest.java | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java index a03a4f9b301..4581f6caba8 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java @@ -422,19 +422,19 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory); if (tile.userHandle == null || tile.isPrimaryProfileOnly()) { - activity.startActivityForResult(intent, 0); + activity.startActivity(intent); } else if (tile.userHandle.size() == 1) { - activity.startActivityForResultAsUser(intent, 0, tile.userHandle.get(0)); + activity.startActivityAsUser(intent, tile.userHandle.get(0)); } else { final UserHandle userHandle = intent.getParcelableExtra(EXTRA_USER); if (userHandle != null && tile.userHandle.contains(userHandle)) { - activity.startActivityForResultAsUser(intent, 0, userHandle); + activity.startActivityAsUser(intent, userHandle); return; } final List resolvableUsers = getResolvableUsers(intent, tile); if (resolvableUsers.size() == 1) { - activity.startActivityForResultAsUser(intent, 0, resolvableUsers.get(0)); + activity.startActivityAsUser(intent, resolvableUsers.get(0)); return; } diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java index 6ef6b18ec68..5d6fdf98f1b 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java @@ -239,7 +239,7 @@ public class DashboardFeatureProviderImplTest { any(Intent.class), eq(MetricsEvent.SETTINGS_GESTURES)); verify(mActivity) - .startActivityForResultAsUser(any(Intent.class), anyInt(), any(UserHandle.class)); + .startActivityAsUser(any(Intent.class), any(UserHandle.class)); } @Test @@ -257,7 +257,7 @@ public class DashboardFeatureProviderImplTest { any(Intent.class), anyInt()); verify(mActivity) - .startActivityForResultAsUser(any(Intent.class), anyInt(), any(UserHandle.class)); + .startActivityAsUser(any(Intent.class), any(UserHandle.class)); } @Test @@ -568,7 +568,7 @@ public class DashboardFeatureProviderImplTest { mImpl.openTileIntent(mActivity, tile); verify(mActivity, never()) - .startActivityForResult(any(Intent.class), eq(0)); + .startActivity(any(Intent.class)); verify(mActivity).getSupportFragmentManager(); } @@ -585,7 +585,7 @@ public class DashboardFeatureProviderImplTest { mImpl.openTileIntent(mActivity, tile); verify(mActivity, never()) - .startActivityForResult(any(Intent.class), eq(0)); + .startActivity(any(Intent.class)); verify(mActivity).getSupportFragmentManager(); } @@ -602,7 +602,7 @@ public class DashboardFeatureProviderImplTest { mImpl.openTileIntent(mActivity, tile); verify(mActivity) - .startActivityForResult(any(Intent.class), eq(0)); + .startActivity(any(Intent.class)); verify(mActivity, never()).getSupportFragmentManager(); } @@ -623,7 +623,7 @@ public class DashboardFeatureProviderImplTest { final ArgumentCaptor argument = ArgumentCaptor.forClass(UserHandle.class); verify(mActivity) - .startActivityForResultAsUser(any(Intent.class), anyInt(), argument.capture()); + .startActivityAsUser(any(Intent.class), argument.capture()); assertThat(argument.getValue().getIdentifier()).isEqualTo(userId); verify(mActivity, never()).getSupportFragmentManager(); } @@ -642,7 +642,7 @@ public class DashboardFeatureProviderImplTest { mImpl.openTileIntent(mActivity, tile); verify(mActivity, never()) - .startActivityForResultAsUser(any(Intent.class), anyInt(), any(UserHandle.class)); + .startActivityAsUser(any(Intent.class), any(UserHandle.class)); verify(mActivity).getSupportFragmentManager(); } @@ -665,7 +665,7 @@ public class DashboardFeatureProviderImplTest { final ArgumentCaptor argument = ArgumentCaptor.forClass(UserHandle.class); verify(mActivity) - .startActivityForResultAsUser(any(Intent.class), anyInt(), argument.capture()); + .startActivityAsUser(any(Intent.class), argument.capture()); assertThat(argument.getValue().getIdentifier()).isEqualTo(0); verify(mActivity, never()).getSupportFragmentManager(); } From 36120b8a4cfec75c548a5b3b30212a6d0f74af20 Mon Sep 17 00:00:00 2001 From: Pavel Grafov Date: Tue, 7 Sep 2021 18:08:36 +0100 Subject: [PATCH 2/3] Respect PASSWORD_QUALITY_MANAGED for biometrics Bug: 195488124 Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=\ com.android.settings.password.ChooseLockGenericControllerTest Test: manual with a modified TestDPC Change-Id: Ifa15877c735bb0f396051af04a4e012a606bf9e1 --- .../password/ChooseLockGenericController.java | 3 ++- .../password/ChooseLockGenericControllerTest.java | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/password/ChooseLockGenericController.java b/src/com/android/settings/password/ChooseLockGenericController.java index 1b951d4f968..cd9eb2fd44d 100644 --- a/src/com/android/settings/password/ChooseLockGenericController.java +++ b/src/com/android/settings/password/ChooseLockGenericController.java @@ -190,7 +190,8 @@ public class ChooseLockGenericController { * requirements. The lock's visibility ({@link #isScreenLockVisible}) is not considered here. */ public boolean isScreenLockEnabled(ScreenLockType type) { - return type.maxQuality >= upgradeQuality(PASSWORD_QUALITY_UNSPECIFIED); + return !mLockPatternUtils.isCredentialsDisabledForUser(mUserId) + && type.maxQuality >= upgradeQuality(PASSWORD_QUALITY_UNSPECIFIED); } /** diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockGenericControllerTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockGenericControllerTest.java index 049a34969c1..996d5722693 100644 --- a/tests/robotests/src/com/android/settings/password/ChooseLockGenericControllerTest.java +++ b/tests/robotests/src/com/android/settings/password/ChooseLockGenericControllerTest.java @@ -22,6 +22,7 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_MEDIUM; import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_COMPLEX; +import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_MANAGED; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; @@ -189,6 +190,16 @@ public class ChooseLockGenericControllerTest { assertThat(mController.isScreenLockEnabled(ScreenLockType.PASSWORD)).isTrue(); } + @Test + public void isScreenLockEnabled_QualityManaged() { + setDevicePolicyPasswordQuality(PASSWORD_QUALITY_MANAGED); + assertThat(mController.isScreenLockEnabled(ScreenLockType.NONE)).isFalse(); + assertThat(mController.isScreenLockEnabled(ScreenLockType.SWIPE)).isFalse(); + assertThat(mController.isScreenLockEnabled(ScreenLockType.PATTERN)).isFalse(); + assertThat(mController.isScreenLockEnabled(ScreenLockType.PIN)).isFalse(); + assertThat(mController.isScreenLockEnabled(ScreenLockType.PASSWORD)).isFalse(); + } + @Test public void isScreenLockEnabled_NoneComplexity() { when(mLockPatternUtils.getRequestedPasswordComplexity(anyInt(), anyBoolean())) @@ -353,6 +364,9 @@ public class ChooseLockGenericControllerTest { when(mLockPatternUtils.getRequestedPasswordMetrics(anyInt(), anyBoolean())) .thenReturn(policy.getMinMetrics()); + + when(mLockPatternUtils.isCredentialsDisabledForUser(anyInt())) + .thenReturn(quality == PASSWORD_QUALITY_MANAGED); } private ChooseLockGenericController.Builder createBuilder() { From e12712dd1d53a6f922bca4c90f19c01efe67f2a9 Mon Sep 17 00:00:00 2001 From: ykhung Date: Tue, 14 Sep 2021 12:18:20 +0800 Subject: [PATCH 3/3] Add package name into the metric for enable/disable app user actions add package name into the metric per @wangkelly request to analyze users behavior in the battery setting relative CUJ: go/battery-setting-enums Bug: 199807285 Test: make SettingsRoboTests Change-Id: Ica6da59b933b0dcff940215d4e537a670bac52cb --- .../AppButtonsPreferenceController.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java index 09bf86a8120..1b270d63b4d 100644 --- a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java @@ -226,7 +226,8 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp uninstallDaIntent.putExtra(DeviceAdminAdd.EXTRA_DEVICE_ADMIN_PACKAGE_NAME, packageName); mMetricsFeatureProvider.action(mActivity, - SettingsEnums.ACTION_SETTINGS_UNINSTALL_DEVICE_ADMIN); + SettingsEnums.ACTION_SETTINGS_UNINSTALL_DEVICE_ADMIN, + getPackageNameForMetric()); mFragment.startActivityForResult(uninstallDaIntent, mRequestRemoveDeviceAdmin); return; } @@ -253,7 +254,8 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp mActivity, mAppEntry.info.enabled ? SettingsEnums.ACTION_SETTINGS_DISABLE_APP - : SettingsEnums.ACTION_SETTINGS_ENABLE_APP); + : SettingsEnums.ACTION_SETTINGS_ENABLE_APP, + getPackageNameForMetric()); AsyncTask.execute(new DisableChangerRunnable(mPm, mAppEntry.info.packageName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT)); } @@ -270,7 +272,9 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp @Override public void onClick(View v) { mMetricsFeatureProvider.action( - mActivity, SettingsEnums.ACTION_APP_INFO_FORCE_STOP); + mActivity, + SettingsEnums.ACTION_APP_INFO_FORCE_STOP, + getPackageNameForMetric()); // force stop if (mPm.isPackageStateProtected(mAppEntry.info.packageName, mUserId)) { RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mActivity, @@ -757,6 +761,14 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp || AppUtils.isMainlineModule(mPm, mAppEntry.info.packageName)); } + private String getPackageNameForMetric() { + final String packageName = + mAppEntry != null && mAppEntry.info != null + ? mAppEntry.info.packageName + : null; + return packageName != null ? packageName : ""; + } + /** * Changes the status of disable/enable for a package */