From 7f94301cd43d5a16173b4755d4ae86f4989593dd Mon Sep 17 00:00:00 2001 From: lucychang Date: Thu, 19 Aug 2021 22:41:07 +0800 Subject: [PATCH] Log accessibility privacy warning status (2/2) Uses the atom NonA11yToolServiceWarningReported in westworld to log the accessibility privacy warning service has been disabled in accessibility setting. Bug: 180983963 Test: m statsd_testdrive && statsd_testdrive 384 Change-Id: I4fb23066159f3086aaaeff521f305266e58cf42d --- .../AccessibilityDetailsSettingsFragment.java | 5 +++ .../accessibility/AccessibilitySettings.java | 1 + .../AccessibilityStatsLogUtils.java | 17 ++++++++++ ...ccessibilityServicePreferenceFragment.java | 31 +++++++++++++++++++ 4 files changed, 54 insertions(+) diff --git a/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java b/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java index 7ff3dba7fcd..7c5297b4ccf 100644 --- a/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java +++ b/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java @@ -211,6 +211,11 @@ public class AccessibilityDetailsSettingsFragment extends InstrumentedFragment { final String htmlDescription = info.loadHtmlDescription(getActivity().getPackageManager()); extras.putString(AccessibilitySettings.EXTRA_HTML_DESCRIPTION, htmlDescription); + + // We will log nonA11yTool status from PolicyWarningUIController; others none. + extras.putLong(AccessibilitySettings.EXTRA_TIME_FOR_LOGGING, + getActivity().getIntent().getLongExtra( + AccessibilitySettings.EXTRA_TIME_FOR_LOGGING, 0)); return extras; } diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java index 78bea0f00a9..56f3e9ffeff 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettings.java +++ b/src/com/android/settings/accessibility/AccessibilitySettings.java @@ -101,6 +101,7 @@ public class AccessibilitySettings extends DashboardFragment { static final String EXTRA_LAUNCHED_FROM_SUW = "from_suw"; static final String EXTRA_ANIMATED_IMAGE_RES = "animated_image_res"; static final String EXTRA_HTML_DESCRIPTION = "html_description"; + static final String EXTRA_TIME_FOR_LOGGING = "start_time_to_log_a11y_tool"; // Timeout before we update the services if packages are added/removed // since the AccessibilityManagerService has to do that processing first diff --git a/src/com/android/settings/accessibility/AccessibilityStatsLogUtils.java b/src/com/android/settings/accessibility/AccessibilityStatsLogUtils.java index d15988f6980..434157dc2b7 100644 --- a/src/com/android/settings/accessibility/AccessibilityStatsLogUtils.java +++ b/src/com/android/settings/accessibility/AccessibilityStatsLogUtils.java @@ -41,4 +41,21 @@ public final class AccessibilityStatsLogUtils { return enabled ? SettingsStatsLog.ACCESSIBILITY_SERVICE_REPORTED__SERVICE_STATUS__ENABLED : SettingsStatsLog.ACCESSIBILITY_SERVICE_REPORTED__SERVICE_STATUS__DISABLED; } + + /** + * Logs when the non-a11y category service is disabled. Calls this when the user disables the + * non-a11y category service for the first time. + * + * @param packageName package name of the service + * @param durationMills duration in milliseconds between starting the page and disabling the + * service + */ + static void logDisableNonA11yCategoryService(String packageName, long durationMills) { + com.android.internal.accessibility.util.AccessibilityStatsLogUtils + .logNonA11yToolServiceWarningReported( + packageName, + com.android.internal.accessibility.util.AccessibilityStatsLogUtils + .ACCESSIBILITY_PRIVACY_WARNING_STATUS_SERVICE_DISABLED, + durationMills); + } } diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java index 0e209aa77af..e959cf9df71 100644 --- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java @@ -38,6 +38,7 @@ import android.content.pm.ServiceInfo; import android.net.Uri; import android.os.Bundle; import android.os.Handler; +import android.os.SystemClock; import android.os.UserHandle; import android.os.storage.StorageManager; import android.provider.Settings; @@ -66,6 +67,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends private static final String TAG = "ToggleAccessibilityServicePreferenceFragment"; private static final int ACTIVITY_REQUEST_CONFIRM_CREDENTIAL_FOR_WEAKER_ENCRYPTION = 1; + private static final String KEY_HAS_LOGGED = "has_logged"; private LockPatternUtils mLockPatternUtils; private AtomicBoolean mIsDialogShown = new AtomicBoolean(/* initialValue= */ false); @@ -81,6 +83,8 @@ public class ToggleAccessibilityServicePreferenceFragment extends private Dialog mDialog; private BroadcastReceiver mPackageRemovedReceiver; + private boolean mDisabledStateLogged = false; + private long mStartTimeMillsForLogging = 0; @Override public int getMetricsCategory() { @@ -98,6 +102,11 @@ public class ToggleAccessibilityServicePreferenceFragment extends public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mLockPatternUtils = new LockPatternUtils(getPrefContext()); + if (savedInstanceState != null) { + if (savedInstanceState.containsKey(KEY_HAS_LOGGED)) { + mDisabledStateLogged = savedInstanceState.getBoolean(KEY_HAS_LOGGED); + } + } } @Override @@ -118,10 +127,21 @@ public class ToggleAccessibilityServicePreferenceFragment extends mSettingsContentObserver.register(getContentResolver()); } + @Override + public void onSaveInstanceState(Bundle outState) { + if (mStartTimeMillsForLogging > 0) { + outState.putBoolean(KEY_HAS_LOGGED, mDisabledStateLogged); + } + super.onSaveInstanceState(outState); + } + @Override public void onPreferenceToggled(String preferenceKey, boolean enabled) { ComponentName toggledService = ComponentName.unflattenFromString(preferenceKey); logAccessibilityServiceEnabled(toggledService, enabled); + if (!enabled) { + logDisabledState(toggledService.getPackageName()); + } AccessibilityUtils.setAccessibilityServiceState(getPrefContext(), toggledService, enabled); } @@ -396,6 +416,8 @@ public class ToggleAccessibilityServicePreferenceFragment extends // Get Accessibility service name. mPackageName = getAccessibilityServiceInfo().getResolveInfo().loadLabel( getPackageManager()); + + mStartTimeMillsForLogging = arguments.getLong(AccessibilitySettings.EXTRA_TIME_FOR_LOGGING); } private void onDialogButtonFromDisableToggleClicked(DialogInterface dialog, int which) { @@ -558,4 +580,13 @@ public class ToggleAccessibilityServicePreferenceFragment extends false)); } } + + private void logDisabledState(String packageName) { + if (mStartTimeMillsForLogging > 0 && !mDisabledStateLogged) { + AccessibilityStatsLogUtils.logDisableNonA11yCategoryService( + packageName, + SystemClock.elapsedRealtime() - mStartTimeMillsForLogging); + mDisabledStateLogged = true; + } + } }