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.wm.shell.onehanded; 18 19 import com.android.internal.annotations.VisibleForTesting; 20 import com.android.internal.logging.UiEvent; 21 import com.android.internal.logging.UiEventLogger; 22 23 /** 24 * Helper class that ends OneHanded mode log to UiEvent, see also go/uievent 25 */ 26 public class OneHandedUiEventLogger { 27 private static final String TAG = "OneHandedUiEventLogger"; 28 private final UiEventLogger mUiEventLogger; 29 30 /** 31 * One-Handed event types 32 */ 33 // Triggers 34 public static final int EVENT_ONE_HANDED_TRIGGER_GESTURE_IN = 0; 35 public static final int EVENT_ONE_HANDED_TRIGGER_GESTURE_OUT = 1; 36 public static final int EVENT_ONE_HANDED_TRIGGER_OVERSPACE_OUT = 2; 37 public static final int EVENT_ONE_HANDED_TRIGGER_POP_IME_OUT = 3; 38 public static final int EVENT_ONE_HANDED_TRIGGER_ROTATION_OUT = 4; 39 public static final int EVENT_ONE_HANDED_TRIGGER_APP_TAPS_OUT = 5; 40 public static final int EVENT_ONE_HANDED_TRIGGER_TIMEOUT_OUT = 6; 41 public static final int EVENT_ONE_HANDED_TRIGGER_SCREEN_OFF_OUT = 7; 42 // Settings toggles 43 public static final int EVENT_ONE_HANDED_SETTINGS_ENABLED_ON = 8; 44 public static final int EVENT_ONE_HANDED_SETTINGS_ENABLED_OFF = 9; 45 public static final int EVENT_ONE_HANDED_SETTINGS_APP_TAPS_EXIT_ON = 10; 46 public static final int EVENT_ONE_HANDED_SETTINGS_APP_TAPS_EXIT_OFF = 11; 47 public static final int EVENT_ONE_HANDED_SETTINGS_TIMEOUT_EXIT_ON = 12; 48 public static final int EVENT_ONE_HANDED_SETTINGS_TIMEOUT_EXIT_OFF = 13; 49 public static final int EVENT_ONE_HANDED_SETTINGS_TIMEOUT_SECONDS_NEVER = 14; 50 public static final int EVENT_ONE_HANDED_SETTINGS_TIMEOUT_SECONDS_4 = 15; 51 public static final int EVENT_ONE_HANDED_SETTINGS_TIMEOUT_SECONDS_8 = 16; 52 public static final int EVENT_ONE_HANDED_SETTINGS_TIMEOUT_SECONDS_12 = 17; 53 public static final int EVENT_ONE_HANDED_SETTINGS_SHOW_NOTIFICATION_ENABLED_ON = 18; 54 public static final int EVENT_ONE_HANDED_SETTINGS_SHOW_NOTIFICATION_ENABLED_OFF = 19; 55 public static final int EVENT_ONE_HANDED_SETTINGS_SHORTCUT_ENABLED_ON = 20; 56 public static final int EVENT_ONE_HANDED_SETTINGS_SHORTCUT_ENABLED_OFF = 21; 57 58 private static final String[] EVENT_TAGS = { 59 "one_handed_trigger_gesture_in", 60 "one_handed_trigger_gesture_out", 61 "one_handed_trigger_overspace_out", 62 "one_handed_trigger_pop_ime_out", 63 "one_handed_trigger_rotation_out", 64 "one_handed_trigger_app_taps_out", 65 "one_handed_trigger_timeout_out", 66 "one_handed_trigger_screen_off_out", 67 "one_handed_settings_enabled_on", 68 "one_handed_settings_enabled_off", 69 "one_handed_settings_app_taps_exit_on", 70 "one_handed_settings_app_taps_exit_off", 71 "one_handed_settings_timeout_exit_on", 72 "one_handed_settings_timeout_exit_off", 73 "one_handed_settings_timeout_seconds_never", 74 "one_handed_settings_timeout_seconds_4", 75 "one_handed_settings_timeout_seconds_8", 76 "one_handed_settings_timeout_seconds_12", 77 "one_handed_settings_show_notification_enabled_on", 78 "one_handed_settings_show_notification_enabled_off", 79 "one_handed_settings_shortcut_enabled_on", 80 "one_handed_settings_shortcut_enabled_off" 81 }; 82 OneHandedUiEventLogger(UiEventLogger uiEventLogger)83 public OneHandedUiEventLogger(UiEventLogger uiEventLogger) { 84 mUiEventLogger = uiEventLogger; 85 } 86 87 /** 88 * Events definition that related to One-Handed gestures. 89 */ 90 @VisibleForTesting 91 public enum OneHandedTriggerEvent implements UiEventLogger.UiEventEnum { 92 INVALID(0), 93 @UiEvent(doc = "One-Handed trigger in via NavigationBar area") 94 ONE_HANDED_TRIGGER_GESTURE_IN(366), 95 96 @UiEvent(doc = "One-Handed trigger out via NavigationBar area") 97 ONE_HANDED_TRIGGER_GESTURE_OUT(367), 98 99 @UiEvent(doc = "One-Handed trigger out via Overspace area") 100 ONE_HANDED_TRIGGER_OVERSPACE_OUT(368), 101 102 @UiEvent(doc = "One-Handed trigger out while IME pop up") 103 ONE_HANDED_TRIGGER_POP_IME_OUT(369), 104 105 @UiEvent(doc = "One-Handed trigger out while device rotation to landscape") 106 ONE_HANDED_TRIGGER_ROTATION_OUT(370), 107 108 @UiEvent(doc = "One-Handed trigger out when an Activity is launching") 109 ONE_HANDED_TRIGGER_APP_TAPS_OUT(371), 110 111 @UiEvent(doc = "One-Handed trigger out when one-handed mode times up") 112 ONE_HANDED_TRIGGER_TIMEOUT_OUT(372), 113 114 @UiEvent(doc = "One-Handed trigger out when screen off") 115 ONE_HANDED_TRIGGER_SCREEN_OFF_OUT(449); 116 117 private final int mId; 118 OneHandedTriggerEvent(int id)119 OneHandedTriggerEvent(int id) { 120 mId = id; 121 } 122 123 @Override getId()124 public int getId() { 125 return mId; 126 } 127 } 128 129 /** 130 * Events definition that related to Settings toggles. 131 */ 132 @VisibleForTesting 133 public enum OneHandedSettingsTogglesEvent implements UiEventLogger.UiEventEnum { 134 INVALID(0), 135 @UiEvent(doc = "One-Handed mode enabled toggle on") 136 ONE_HANDED_SETTINGS_TOGGLES_ENABLED_ON(356), 137 138 @UiEvent(doc = "One-Handed mode enabled toggle off") 139 ONE_HANDED_SETTINGS_TOGGLES_ENABLED_OFF(357), 140 141 @UiEvent(doc = "One-Handed mode app-taps-exit toggle on") 142 ONE_HANDED_SETTINGS_TOGGLES_APP_TAPS_EXIT_ON(358), 143 144 @UiEvent(doc = "One-Handed mode app-taps-exit toggle off") 145 ONE_HANDED_SETTINGS_TOGGLES_APP_TAPS_EXIT_OFF(359), 146 147 @UiEvent(doc = "One-Handed mode timeout-exit toggle on") 148 ONE_HANDED_SETTINGS_TOGGLES_TIMEOUT_EXIT_ON(360), 149 150 @UiEvent(doc = "One-Handed mode timeout-exit toggle off") 151 ONE_HANDED_SETTINGS_TOGGLES_TIMEOUT_EXIT_OFF(361), 152 153 @UiEvent(doc = "One-Handed mode timeout value changed to never timeout") 154 ONE_HANDED_SETTINGS_TOGGLES_TIMEOUT_SECONDS_NEVER(362), 155 156 @UiEvent(doc = "One-Handed mode timeout value changed to 4 seconds") 157 ONE_HANDED_SETTINGS_TOGGLES_TIMEOUT_SECONDS_4(363), 158 159 @UiEvent(doc = "One-Handed mode timeout value changed to 8 seconds") 160 ONE_HANDED_SETTINGS_TOGGLES_TIMEOUT_SECONDS_8(364), 161 162 @UiEvent(doc = "One-Handed mode timeout value changed to 12 seconds") 163 ONE_HANDED_SETTINGS_TOGGLES_TIMEOUT_SECONDS_12(365), 164 165 @UiEvent(doc = "One-Handed mode show notification toggle on") 166 ONE_HANDED_SETTINGS_TOGGLES_SHOW_NOTIFICATION_ENABLED_ON(847), 167 168 @UiEvent(doc = "One-Handed mode show notification toggle off") 169 ONE_HANDED_SETTINGS_TOGGLES_SHOW_NOTIFICATION_ENABLED_OFF(848), 170 171 @UiEvent(doc = "One-Handed mode shortcut toggle on") 172 ONE_HANDED_SETTINGS_TOGGLES_SHORTCUT_ENABLED_ON(870), 173 174 @UiEvent(doc = "One-Handed mode shortcut toggle off") 175 ONE_HANDED_SETTINGS_TOGGLES_SHORTCUT_ENABLED_OFF(871); 176 177 private final int mId; 178 OneHandedSettingsTogglesEvent(int id)179 OneHandedSettingsTogglesEvent(int id) { 180 mId = id; 181 } 182 183 @Override getId()184 public int getId() { 185 return mId; 186 } 187 } 188 189 190 /** 191 * Logs an event to the system log, to sCallback if present, and to the logEvent destinations. 192 * @param tag One of the EVENT_* codes above. 193 */ writeEvent(int tag)194 public void writeEvent(int tag) { 195 logEvent(tag); 196 } 197 198 /** 199 * Logs an event to the UiEvent (statsd) logging. 200 * @param event One of the EVENT_* codes above. 201 * @return String a readable description of the event. Begins "writeEvent <tag_description>" 202 * if the tag is valid. 203 */ logEvent(int event)204 private void logEvent(int event) { 205 switch (event) { 206 case EVENT_ONE_HANDED_TRIGGER_GESTURE_IN: 207 mUiEventLogger.log(OneHandedTriggerEvent.ONE_HANDED_TRIGGER_GESTURE_IN); 208 break; 209 case EVENT_ONE_HANDED_TRIGGER_GESTURE_OUT: 210 mUiEventLogger.log(OneHandedTriggerEvent.ONE_HANDED_TRIGGER_GESTURE_OUT); 211 break; 212 case EVENT_ONE_HANDED_TRIGGER_OVERSPACE_OUT: 213 mUiEventLogger.log(OneHandedTriggerEvent.ONE_HANDED_TRIGGER_OVERSPACE_OUT); 214 break; 215 case EVENT_ONE_HANDED_TRIGGER_POP_IME_OUT: 216 mUiEventLogger.log(OneHandedTriggerEvent.ONE_HANDED_TRIGGER_POP_IME_OUT); 217 break; 218 case EVENT_ONE_HANDED_TRIGGER_ROTATION_OUT: 219 mUiEventLogger.log(OneHandedTriggerEvent.ONE_HANDED_TRIGGER_ROTATION_OUT); 220 break; 221 case EVENT_ONE_HANDED_TRIGGER_APP_TAPS_OUT: 222 mUiEventLogger.log(OneHandedTriggerEvent.ONE_HANDED_TRIGGER_APP_TAPS_OUT); 223 break; 224 case EVENT_ONE_HANDED_TRIGGER_TIMEOUT_OUT: 225 mUiEventLogger.log(OneHandedTriggerEvent.ONE_HANDED_TRIGGER_TIMEOUT_OUT); 226 break; 227 case EVENT_ONE_HANDED_TRIGGER_SCREEN_OFF_OUT: 228 mUiEventLogger.log(OneHandedTriggerEvent.ONE_HANDED_TRIGGER_SCREEN_OFF_OUT); 229 break; 230 case EVENT_ONE_HANDED_SETTINGS_ENABLED_ON: 231 mUiEventLogger.log(OneHandedSettingsTogglesEvent 232 .ONE_HANDED_SETTINGS_TOGGLES_ENABLED_ON); 233 break; 234 case EVENT_ONE_HANDED_SETTINGS_ENABLED_OFF: 235 mUiEventLogger.log(OneHandedSettingsTogglesEvent 236 .ONE_HANDED_SETTINGS_TOGGLES_ENABLED_OFF); 237 break; 238 case EVENT_ONE_HANDED_SETTINGS_APP_TAPS_EXIT_ON: 239 mUiEventLogger.log(OneHandedSettingsTogglesEvent 240 .ONE_HANDED_SETTINGS_TOGGLES_APP_TAPS_EXIT_ON); 241 break; 242 case EVENT_ONE_HANDED_SETTINGS_APP_TAPS_EXIT_OFF: 243 mUiEventLogger.log(OneHandedSettingsTogglesEvent 244 .ONE_HANDED_SETTINGS_TOGGLES_APP_TAPS_EXIT_OFF); 245 break; 246 case EVENT_ONE_HANDED_SETTINGS_TIMEOUT_EXIT_ON: 247 mUiEventLogger.log(OneHandedSettingsTogglesEvent 248 .ONE_HANDED_SETTINGS_TOGGLES_TIMEOUT_EXIT_ON); 249 break; 250 case EVENT_ONE_HANDED_SETTINGS_TIMEOUT_EXIT_OFF: 251 mUiEventLogger.log(OneHandedSettingsTogglesEvent 252 .ONE_HANDED_SETTINGS_TOGGLES_TIMEOUT_EXIT_OFF); 253 break; 254 case EVENT_ONE_HANDED_SETTINGS_TIMEOUT_SECONDS_NEVER: 255 mUiEventLogger.log(OneHandedSettingsTogglesEvent 256 .ONE_HANDED_SETTINGS_TOGGLES_TIMEOUT_SECONDS_NEVER); 257 break; 258 case EVENT_ONE_HANDED_SETTINGS_TIMEOUT_SECONDS_4: 259 mUiEventLogger.log(OneHandedSettingsTogglesEvent 260 .ONE_HANDED_SETTINGS_TOGGLES_TIMEOUT_SECONDS_4); 261 break; 262 case EVENT_ONE_HANDED_SETTINGS_TIMEOUT_SECONDS_8: 263 mUiEventLogger.log(OneHandedSettingsTogglesEvent 264 .ONE_HANDED_SETTINGS_TOGGLES_TIMEOUT_SECONDS_8); 265 break; 266 case EVENT_ONE_HANDED_SETTINGS_TIMEOUT_SECONDS_12: 267 mUiEventLogger.log(OneHandedSettingsTogglesEvent 268 .ONE_HANDED_SETTINGS_TOGGLES_TIMEOUT_SECONDS_12); 269 break; 270 case EVENT_ONE_HANDED_SETTINGS_SHOW_NOTIFICATION_ENABLED_ON: 271 mUiEventLogger.log(OneHandedSettingsTogglesEvent 272 .ONE_HANDED_SETTINGS_TOGGLES_SHOW_NOTIFICATION_ENABLED_ON); 273 break; 274 case EVENT_ONE_HANDED_SETTINGS_SHOW_NOTIFICATION_ENABLED_OFF: 275 mUiEventLogger.log(OneHandedSettingsTogglesEvent 276 .ONE_HANDED_SETTINGS_TOGGLES_SHOW_NOTIFICATION_ENABLED_OFF); 277 break; 278 case EVENT_ONE_HANDED_SETTINGS_SHORTCUT_ENABLED_ON: 279 mUiEventLogger.log(OneHandedSettingsTogglesEvent 280 .ONE_HANDED_SETTINGS_TOGGLES_SHORTCUT_ENABLED_ON); 281 break; 282 case EVENT_ONE_HANDED_SETTINGS_SHORTCUT_ENABLED_OFF: 283 mUiEventLogger.log(OneHandedSettingsTogglesEvent 284 .ONE_HANDED_SETTINGS_TOGGLES_SHORTCUT_ENABLED_OFF); 285 break; 286 default: 287 // Do nothing 288 break; 289 } 290 } 291 } 292