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
This commit is contained in:
lucychang
2021-08-19 22:41:07 +08:00
parent 4056b335ce
commit 7f94301cd4
4 changed files with 54 additions and 0 deletions

View File

@@ -211,6 +211,11 @@ public class AccessibilityDetailsSettingsFragment extends InstrumentedFragment {
final String htmlDescription = info.loadHtmlDescription(getActivity().getPackageManager()); final String htmlDescription = info.loadHtmlDescription(getActivity().getPackageManager());
extras.putString(AccessibilitySettings.EXTRA_HTML_DESCRIPTION, htmlDescription); 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; return extras;
} }

View File

@@ -101,6 +101,7 @@ public class AccessibilitySettings extends DashboardFragment {
static final String EXTRA_LAUNCHED_FROM_SUW = "from_suw"; static final String EXTRA_LAUNCHED_FROM_SUW = "from_suw";
static final String EXTRA_ANIMATED_IMAGE_RES = "animated_image_res"; static final String EXTRA_ANIMATED_IMAGE_RES = "animated_image_res";
static final String EXTRA_HTML_DESCRIPTION = "html_description"; 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 // Timeout before we update the services if packages are added/removed
// since the AccessibilityManagerService has to do that processing first // since the AccessibilityManagerService has to do that processing first

View File

@@ -41,4 +41,21 @@ public final class AccessibilityStatsLogUtils {
return enabled ? SettingsStatsLog.ACCESSIBILITY_SERVICE_REPORTED__SERVICE_STATUS__ENABLED return enabled ? SettingsStatsLog.ACCESSIBILITY_SERVICE_REPORTED__SERVICE_STATUS__ENABLED
: SettingsStatsLog.ACCESSIBILITY_SERVICE_REPORTED__SERVICE_STATUS__DISABLED; : 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);
}
} }

View File

@@ -38,6 +38,7 @@ import android.content.pm.ServiceInfo;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.SystemClock;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.storage.StorageManager; import android.os.storage.StorageManager;
import android.provider.Settings; import android.provider.Settings;
@@ -66,6 +67,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends
private static final String TAG = "ToggleAccessibilityServicePreferenceFragment"; private static final String TAG = "ToggleAccessibilityServicePreferenceFragment";
private static final int ACTIVITY_REQUEST_CONFIRM_CREDENTIAL_FOR_WEAKER_ENCRYPTION = 1; 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 LockPatternUtils mLockPatternUtils;
private AtomicBoolean mIsDialogShown = new AtomicBoolean(/* initialValue= */ false); private AtomicBoolean mIsDialogShown = new AtomicBoolean(/* initialValue= */ false);
@@ -81,6 +83,8 @@ public class ToggleAccessibilityServicePreferenceFragment extends
private Dialog mDialog; private Dialog mDialog;
private BroadcastReceiver mPackageRemovedReceiver; private BroadcastReceiver mPackageRemovedReceiver;
private boolean mDisabledStateLogged = false;
private long mStartTimeMillsForLogging = 0;
@Override @Override
public int getMetricsCategory() { public int getMetricsCategory() {
@@ -98,6 +102,11 @@ public class ToggleAccessibilityServicePreferenceFragment extends
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
mLockPatternUtils = new LockPatternUtils(getPrefContext()); mLockPatternUtils = new LockPatternUtils(getPrefContext());
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(KEY_HAS_LOGGED)) {
mDisabledStateLogged = savedInstanceState.getBoolean(KEY_HAS_LOGGED);
}
}
} }
@Override @Override
@@ -118,10 +127,21 @@ public class ToggleAccessibilityServicePreferenceFragment extends
mSettingsContentObserver.register(getContentResolver()); mSettingsContentObserver.register(getContentResolver());
} }
@Override
public void onSaveInstanceState(Bundle outState) {
if (mStartTimeMillsForLogging > 0) {
outState.putBoolean(KEY_HAS_LOGGED, mDisabledStateLogged);
}
super.onSaveInstanceState(outState);
}
@Override @Override
public void onPreferenceToggled(String preferenceKey, boolean enabled) { public void onPreferenceToggled(String preferenceKey, boolean enabled) {
ComponentName toggledService = ComponentName.unflattenFromString(preferenceKey); ComponentName toggledService = ComponentName.unflattenFromString(preferenceKey);
logAccessibilityServiceEnabled(toggledService, enabled); logAccessibilityServiceEnabled(toggledService, enabled);
if (!enabled) {
logDisabledState(toggledService.getPackageName());
}
AccessibilityUtils.setAccessibilityServiceState(getPrefContext(), toggledService, enabled); AccessibilityUtils.setAccessibilityServiceState(getPrefContext(), toggledService, enabled);
} }
@@ -396,6 +416,8 @@ public class ToggleAccessibilityServicePreferenceFragment extends
// Get Accessibility service name. // Get Accessibility service name.
mPackageName = getAccessibilityServiceInfo().getResolveInfo().loadLabel( mPackageName = getAccessibilityServiceInfo().getResolveInfo().loadLabel(
getPackageManager()); getPackageManager());
mStartTimeMillsForLogging = arguments.getLong(AccessibilitySettings.EXTRA_TIME_FOR_LOGGING);
} }
private void onDialogButtonFromDisableToggleClicked(DialogInterface dialog, int which) { private void onDialogButtonFromDisableToggleClicked(DialogInterface dialog, int which) {
@@ -558,4 +580,13 @@ public class ToggleAccessibilityServicePreferenceFragment extends
false)); false));
} }
} }
private void logDisabledState(String packageName) {
if (mStartTimeMillsForLogging > 0 && !mDisabledStateLogged) {
AccessibilityStatsLogUtils.logDisableNonA11yCategoryService(
packageName,
SystemClock.elapsedRealtime() - mStartTimeMillsForLogging);
mDisabledStateLogged = true;
}
}
} }