1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.accessibility; 18 19 import static com.android.settings.accessibility.TextReadingPreferenceFragment.BOLD_TEXT_KEY; 20 import static com.android.settings.accessibility.TextReadingPreferenceFragment.DISPLAY_SIZE_KEY; 21 import static com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint.ACCESSIBILITY_SETTINGS; 22 import static com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint.DISPLAY_SETTINGS; 23 import static com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint.HIGH_CONTRAST_TEXT_NOTIFICATION; 24 import static com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint.SUW_ANYTHING_ELSE; 25 import static com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint.SUW_VISION_SETTINGS; 26 import static com.android.settings.accessibility.TextReadingPreferenceFragment.FONT_SIZE_KEY; 27 import static com.android.settings.accessibility.TextReadingPreferenceFragment.HIGH_TEXT_CONTRAST_KEY; 28 import static com.android.settings.accessibility.TextReadingPreferenceFragment.RESET_KEY; 29 30 import android.content.ComponentName; 31 32 import com.android.internal.util.FrameworkStatsLog; 33 import com.android.settings.core.instrumentation.SettingsStatsLog; 34 35 /** Methods for logging accessibility states. */ 36 public final class AccessibilityStatsLogUtils { 37 AccessibilityStatsLogUtils()38 private AccessibilityStatsLogUtils() {} 39 40 /** 41 * Logs accessibility service name and its enabled status. Calls this when the user trigger 42 * the accessibility service to be enabled/disabled. 43 * 44 * @param componentName component name of the service 45 * @param enabled {@code true} if the service is enabled 46 */ logAccessibilityServiceEnabled(ComponentName componentName, boolean enabled)47 static void logAccessibilityServiceEnabled(ComponentName componentName, boolean enabled) { 48 SettingsStatsLog.write(SettingsStatsLog.ACCESSIBILITY_SERVICE_REPORTED, 49 componentName.flattenToString(), convertToLoggingServiceEnabled(enabled)); 50 } 51 convertToLoggingServiceEnabled(boolean enabled)52 private static int convertToLoggingServiceEnabled(boolean enabled) { 53 return enabled ? SettingsStatsLog.ACCESSIBILITY_SERVICE_REPORTED__SERVICE_STATUS__ENABLED 54 : SettingsStatsLog.ACCESSIBILITY_SERVICE_REPORTED__SERVICE_STATUS__DISABLED; 55 } 56 57 /** 58 * Logs when the non-a11y category service is disabled. Calls this when the user disables the 59 * non-a11y category service for the first time. 60 * 61 * @param packageName package name of the service 62 * @param durationMills duration in milliseconds between starting the page and disabling the 63 * service 64 */ logDisableNonA11yCategoryService(String packageName, long durationMills)65 static void logDisableNonA11yCategoryService(String packageName, long durationMills) { 66 com.android.internal.accessibility.util.AccessibilityStatsLogUtils 67 .logNonA11yToolServiceWarningReported( 68 packageName, 69 com.android.internal.accessibility.util.AccessibilityStatsLogUtils 70 .ACCESSIBILITY_PRIVACY_WARNING_STATUS_SERVICE_DISABLED, 71 durationMills); 72 } 73 74 /** 75 * Converts to the key name for logging. 76 * 77 * @param prefKey the preference key 78 * @return the int value which maps to the key name 79 */ convertToItemKeyName(String prefKey)80 static int convertToItemKeyName(String prefKey) { 81 switch (prefKey) { 82 case FONT_SIZE_KEY: 83 return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__NAME__TEXT_READING_FONT_SIZE; 84 case DISPLAY_SIZE_KEY: 85 return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__NAME__TEXT_READING_DISPLAY_SIZE; 86 case BOLD_TEXT_KEY: 87 return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__NAME__TEXT_READING_BOLD_TEXT; 88 case HIGH_TEXT_CONTRAST_KEY: 89 return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__NAME__TEXT_READING_HIGH_CONTRAST_TEXT; 90 case RESET_KEY: 91 return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__NAME__TEXT_READING_RESET; 92 default: 93 return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__NAME__TEXT_READING_UNKNOWN_ITEM; 94 } 95 } 96 97 /** 98 * Converts to the entry point for logging. 99 * 100 * @param entryPoint the entry point 101 * @return the int value which maps to the entry point 102 */ convertToEntryPoint(int entryPoint)103 static int convertToEntryPoint(int entryPoint) { 104 switch (entryPoint) { 105 case SUW_VISION_SETTINGS: 106 return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__ENTRY_POINT__TEXT_READING_SUW_VISION_SETTINGS; 107 case SUW_ANYTHING_ELSE: 108 return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__ENTRY_POINT__TEXT_READING_SUW_ANYTHING_ELSE; 109 case DISPLAY_SETTINGS: 110 return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__ENTRY_POINT__TEXT_READING_DISPLAY_SETTINGS; 111 case ACCESSIBILITY_SETTINGS: 112 return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__ENTRY_POINT__TEXT_READING_ACCESSIBILITY_SETTINGS; 113 case HIGH_CONTRAST_TEXT_NOTIFICATION: 114 return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__ENTRY_POINT__TEXT_READING_HIGH_CONTRAST_TEXT_NOTIFICATION; 115 default: 116 return SettingsStatsLog.ACCESSIBILITY_TEXT_READING_OPTIONS_CHANGED__ENTRY_POINT__TEXT_READING_UNKNOWN_ENTRY; 117 } 118 } 119 120 /** 121 * Converts the entering page id where the hearing aid binding process starts for logging. 122 * 123 * @param pageId the entry page id where the hearing aid binding process starts 124 * @return the int value for logging mapped from some page ids defined in 125 * {@link SettingsStatsLog} 126 */ convertToHearingAidInfoBondEntry(int pageId)127 public static int convertToHearingAidInfoBondEntry(int pageId) { 128 switch (pageId) { 129 case SettingsStatsLog.SETTINGS_UICHANGED__PAGE_ID__SETTINGS_CONNECTED_DEVICE_CATEGORY: 130 return FrameworkStatsLog.HEARING_AID_INFO_REPORTED__BOND_ENTRY__CONNECTED_DEVICES; 131 case SettingsStatsLog.SETTINGS_UICHANGED__PAGE_ID__DIALOG_ACCESSIBILITY_HEARINGAID: 132 return FrameworkStatsLog.HEARING_AID_INFO_REPORTED__BOND_ENTRY__ACCESSIBILITY_HEARING_AIDS; 133 case SettingsStatsLog.SETTINGS_UICHANGED__PAGE_ID__DIALOG_ACCESSIBILITY_HEARING_AID_PAIR_ANOTHER: 134 return FrameworkStatsLog.HEARING_AID_INFO_REPORTED__BOND_ENTRY__ACCESSIBILITY_HEARING_AID_PAIR_ANOTHER; 135 case SettingsStatsLog.SETTINGS_UICHANGED__PAGE_ID__BLUETOOTH_FRAGMENT: 136 return FrameworkStatsLog.HEARING_AID_INFO_REPORTED__BOND_ENTRY__BLUETOOTH; 137 case SettingsStatsLog.SETTINGS_UICHANGED__PAGE_ID__ACCESSIBILITY_HEARING_AID_SETTINGS: 138 return FrameworkStatsLog.HEARING_AID_INFO_REPORTED__BOND_ENTRY__ACCESSIBILITY_HEARING_AID_SETTINGS; 139 default: 140 return FrameworkStatsLog.HEARING_AID_INFO_REPORTED__BOND_ENTRY__PAGE_UNKNOWN; 141 } 142 } 143 } 144