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.systemui.log.dagger; 18 19 import android.content.ContentResolver; 20 import android.os.Build; 21 import android.os.Looper; 22 23 import com.android.systemui.dagger.SysUISingleton; 24 import com.android.systemui.dagger.qualifiers.Main; 25 import com.android.systemui.log.LogBuffer; 26 import com.android.systemui.log.LogBufferFactory; 27 import com.android.systemui.log.LogcatEchoTracker; 28 import com.android.systemui.log.LogcatEchoTrackerDebug; 29 import com.android.systemui.log.LogcatEchoTrackerProd; 30 import com.android.systemui.log.table.TableLogBuffer; 31 import com.android.systemui.log.table.TableLogBufferFactory; 32 import com.android.systemui.statusbar.notification.NotifPipelineFlags; 33 import com.android.systemui.util.Compile; 34 import com.android.systemui.util.wakelock.WakeLockLog; 35 36 import dagger.Module; 37 import dagger.Provides; 38 39 /** 40 * Dagger module for providing instances of {@link LogBuffer}. 41 */ 42 @Module 43 public class LogModule { 44 /** Provides a logging buffer for doze-related logs. */ 45 @Provides 46 @SysUISingleton 47 @DozeLog provideDozeLogBuffer(LogBufferFactory factory)48 public static LogBuffer provideDozeLogBuffer(LogBufferFactory factory) { 49 return factory.create("DozeLog", 150); 50 } 51 52 /** Provides a logging buffer for all logs related to the data layer of notifications. */ 53 @Provides 54 @SysUISingleton 55 @NotificationLog provideNotificationsLogBuffer( LogBufferFactory factory, NotifPipelineFlags notifPipelineFlags)56 public static LogBuffer provideNotificationsLogBuffer( 57 LogBufferFactory factory, 58 NotifPipelineFlags notifPipelineFlags) { 59 int maxSize = 1000; 60 if (Compile.IS_DEBUG && notifPipelineFlags.isDevLoggingEnabled()) { 61 maxSize *= 10; 62 } 63 return factory.create("NotifLog", maxSize, Compile.IS_DEBUG /* systrace */); 64 } 65 66 /** Provides a logging buffer for all logs related to notifications on the lockscreen. */ 67 @Provides 68 @SysUISingleton 69 @NotificationLockscreenLog provideNotificationLockScreenLogBuffer( LogBufferFactory factory)70 public static LogBuffer provideNotificationLockScreenLogBuffer( 71 LogBufferFactory factory) { 72 return factory.create("NotifLockscreenLog", 50, false /* systrace */); 73 } 74 75 /** Provides a logging buffer for logs related to heads up presentation of notifications. */ 76 @Provides 77 @SysUISingleton 78 @NotificationHeadsUpLog provideNotificationHeadsUpLogBuffer(LogBufferFactory factory)79 public static LogBuffer provideNotificationHeadsUpLogBuffer(LogBufferFactory factory) { 80 return factory.create("NotifHeadsUpLog", 1000); 81 } 82 83 /** Provides a logging buffer for logs related to inflation of notifications. */ 84 @Provides 85 @SysUISingleton 86 @NotifInflationLog provideNotifInflationLogBuffer(LogBufferFactory factory)87 public static LogBuffer provideNotifInflationLogBuffer(LogBufferFactory factory) { 88 return factory.create("NotifInflationLog", 100); 89 } 90 91 /** Provides a logging buffer for notification interruption calculations. */ 92 @Provides 93 @SysUISingleton 94 @NotificationInterruptLog provideNotificationInterruptLogBuffer(LogBufferFactory factory)95 public static LogBuffer provideNotificationInterruptLogBuffer(LogBufferFactory factory) { 96 return factory.create("NotifInterruptLog", 100); 97 } 98 99 /** Provides a logging buffer for notification rendering events. */ 100 @Provides 101 @SysUISingleton 102 @NotificationRenderLog provideNotificationRenderLogBuffer(LogBufferFactory factory)103 public static LogBuffer provideNotificationRenderLogBuffer(LogBufferFactory factory) { 104 return factory.create("NotifRenderLog", 100); 105 } 106 107 /** Provides a logging buffer for all logs for lockscreen to shade transition events. */ 108 @Provides 109 @SysUISingleton 110 @LSShadeTransitionLog provideLSShadeTransitionControllerBuffer(LogBufferFactory factory)111 public static LogBuffer provideLSShadeTransitionControllerBuffer(LogBufferFactory factory) { 112 return factory.create("LSShadeTransitionLog", 50); 113 } 114 115 /** Provides a logging buffer for shade window messages. */ 116 @Provides 117 @SysUISingleton 118 @ShadeWindowLog provideShadeWindowLogBuffer(LogBufferFactory factory)119 public static LogBuffer provideShadeWindowLogBuffer(LogBufferFactory factory) { 120 return factory.create("ShadeWindowLog", 600, false); 121 } 122 123 /** Provides a logging buffer for Shade messages. */ 124 @Provides 125 @SysUISingleton 126 @ShadeLog provideShadeLogBuffer(LogBufferFactory factory)127 public static LogBuffer provideShadeLogBuffer(LogBufferFactory factory) { 128 return factory.create("ShadeLog", 500, false); 129 } 130 131 /** Provides a logging buffer for Shade messages. */ 132 @Provides 133 @SysUISingleton 134 @ShadeTouchLog provideShadeTouchLogBuffer(LogBufferFactory factory)135 public static LogBuffer provideShadeTouchLogBuffer(LogBufferFactory factory) { 136 return factory.create("ShadeTouchLog", 500, false); 137 } 138 139 /** Provides a logging buffer for all logs related to managing notification sections. */ 140 @Provides 141 @SysUISingleton 142 @NotificationSectionLog provideNotificationSectionLogBuffer(LogBufferFactory factory)143 public static LogBuffer provideNotificationSectionLogBuffer(LogBufferFactory factory) { 144 return factory.create("NotifSectionLog", 1000 /* maxSize */, false /* systrace */); 145 } 146 147 /** Provides a logging buffer for all logs related to remote input controller. */ 148 @Provides 149 @SysUISingleton 150 @NotificationRemoteInputLog provideNotificationRemoteInputLogBuffer(LogBufferFactory factory)151 public static LogBuffer provideNotificationRemoteInputLogBuffer(LogBufferFactory factory) { 152 return factory.create("NotifRemoteInputLog", 50 /* maxSize */, false /* systrace */); 153 } 154 155 /** Provides a logging buffer for all logs related to unseen notifications. */ 156 @Provides 157 @SysUISingleton 158 @UnseenNotificationLog provideUnseenNotificationLogBuffer(LogBufferFactory factory)159 public static LogBuffer provideUnseenNotificationLogBuffer(LogBufferFactory factory) { 160 return factory.create("UnseenNotifLog", 20 /* maxSize */, false /* systrace */); 161 } 162 163 /** Provides a logging buffer for all logs related to the data layer of notifications. */ 164 @Provides 165 @SysUISingleton 166 @NotifInteractionLog provideNotifInteractionLogBuffer(LogBufferFactory factory)167 public static LogBuffer provideNotifInteractionLogBuffer(LogBufferFactory factory) { 168 return factory.create("NotifInteractionLog", 50); 169 } 170 171 /** Provides a logging buffer for all logs related to Quick Settings. */ 172 @Provides 173 @SysUISingleton 174 @QSLog provideQuickSettingsLogBuffer(LogBufferFactory factory)175 public static LogBuffer provideQuickSettingsLogBuffer(LogBufferFactory factory) { 176 return factory.create("QSLog", 700 /* maxSize */, false /* systrace */); 177 } 178 179 /** Provides a logging buffer for logs related to Quick Settings configuration. */ 180 @Provides 181 @SysUISingleton 182 @QSConfigLog provideQSConfigLogBuffer(LogBufferFactory factory)183 public static LogBuffer provideQSConfigLogBuffer(LogBufferFactory factory) { 184 return factory.create("QSConfigLog", 100 /* maxSize */, true /* systrace */); 185 } 186 187 /** Provides a logging buffer for {@link com.android.systemui.broadcast.BroadcastDispatcher} */ 188 @Provides 189 @SysUISingleton 190 @BroadcastDispatcherLog provideBroadcastDispatcherLogBuffer(LogBufferFactory factory)191 public static LogBuffer provideBroadcastDispatcherLogBuffer(LogBufferFactory factory) { 192 return factory.create("BroadcastDispatcherLog", 500 /* maxSize */, 193 false /* systrace */); 194 } 195 196 /** Provides a logging buffer for {@link com.android.systemui.broadcast.BroadcastSender} */ 197 @Provides 198 @SysUISingleton 199 @WakeLockLog provideWakeLockLog(LogBufferFactory factory)200 public static LogBuffer provideWakeLockLog(LogBufferFactory factory) { 201 return factory.create("WakeLockLog", 500 /* maxSize */, false /* systrace */); 202 } 203 204 /** Provides a logging buffer for all logs related to Toasts shown by SystemUI. */ 205 @Provides 206 @SysUISingleton 207 @ToastLog provideToastLogBuffer(LogBufferFactory factory)208 public static LogBuffer provideToastLogBuffer(LogBufferFactory factory) { 209 return factory.create("ToastLog", 50); 210 } 211 212 /** Provides a logging buffer for all logs related to privacy indicators in SystemUI. */ 213 @Provides 214 @SysUISingleton 215 @PrivacyLog providePrivacyLogBuffer(LogBufferFactory factory)216 public static LogBuffer providePrivacyLogBuffer(LogBufferFactory factory) { 217 return factory.create("PrivacyLog", 100); 218 } 219 220 /** 221 * Provides a logging buffer for 222 * {@link com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment}. 223 */ 224 @Provides 225 @SysUISingleton 226 @CollapsedSbFragmentLog provideCollapsedSbFragmentLogBuffer(LogBufferFactory factory)227 public static LogBuffer provideCollapsedSbFragmentLogBuffer(LogBufferFactory factory) { 228 return factory.create("CollapsedSbFragmentLog", 40); 229 } 230 231 /** 232 * Provides a logging buffer for logs related to {@link com.android.systemui.qs.QSFragment}'s 233 * disable flag adjustments. 234 */ 235 @Provides 236 @SysUISingleton 237 @QSFragmentDisableLog provideQSFragmentDisableLogBuffer(LogBufferFactory factory)238 public static LogBuffer provideQSFragmentDisableLogBuffer(LogBufferFactory factory) { 239 return factory.create("QSFragmentDisableFlagsLog", 10 /* maxSize */, 240 false /* systrace */); 241 } 242 243 /** Provides a logging buffer for the disable flags repository. */ 244 @Provides 245 @SysUISingleton 246 @DisableFlagsRepositoryLog provideDisableFlagsRepositoryLogBuffer(LogBufferFactory factory)247 public static LogBuffer provideDisableFlagsRepositoryLogBuffer(LogBufferFactory factory) { 248 return factory.create("DisableFlagsRepository", 40 /* maxSize */, 249 false /* systrace */); 250 } 251 252 /** Provides a logging buffer for logs related to swipe up gestures. */ 253 @Provides 254 @SysUISingleton 255 @SwipeUpLog provideSwipeUpLogBuffer(LogBufferFactory factory)256 public static LogBuffer provideSwipeUpLogBuffer(LogBufferFactory factory) { 257 return factory.create("SwipeUpLog", 30); 258 } 259 260 /** 261 * Provides a logging buffer for logs related to the media mute-await connections. See 262 * {@link com.android.systemui.media.muteawait.MediaMuteAwaitConnectionManager}. 263 */ 264 @Provides 265 @SysUISingleton 266 @MediaMuteAwaitLog provideMediaMuteAwaitLogBuffer(LogBufferFactory factory)267 public static LogBuffer provideMediaMuteAwaitLogBuffer(LogBufferFactory factory) { 268 return factory.create("MediaMuteAwaitLog", 20); 269 } 270 271 /** 272 * Provides a logging buffer for logs related to the media mute-await connections. See 273 * {@link com.android.systemui.media.nearby.NearbyMediaDevicesManager}. 274 */ 275 @Provides 276 @SysUISingleton 277 @NearbyMediaDevicesLog provideNearbyMediaDevicesLogBuffer(LogBufferFactory factory)278 public static LogBuffer provideNearbyMediaDevicesLogBuffer(LogBufferFactory factory) { 279 return factory.create("NearbyMediaDevicesLog", 20); 280 } 281 282 /** 283 * Provides a buffer for logs related to media view events 284 */ 285 @Provides 286 @SysUISingleton 287 @MediaViewLog provideMediaViewLogBuffer(LogBufferFactory factory)288 public static LogBuffer provideMediaViewLogBuffer(LogBufferFactory factory) { 289 return factory.create("MediaView", 100); 290 } 291 292 /** 293 * Provides a buffer for media playback state changes 294 */ 295 @Provides 296 @SysUISingleton 297 @MediaTimeoutListenerLog providesMediaTimeoutListenerLogBuffer(LogBufferFactory factory)298 public static LogBuffer providesMediaTimeoutListenerLogBuffer(LogBufferFactory factory) { 299 return factory.create("MediaTimeout", 100); 300 } 301 302 /** 303 * Provides a buffer for our connections and disconnections to MediaBrowserService. 304 * 305 * See {@link com.android.systemui.media.controls.resume.ResumeMediaBrowser}. 306 */ 307 @Provides 308 @SysUISingleton 309 @MediaBrowserLog provideMediaBrowserBuffer(LogBufferFactory factory)310 public static LogBuffer provideMediaBrowserBuffer(LogBufferFactory factory) { 311 return factory.create("MediaBrowser", 100); 312 } 313 314 /** 315 * Provides a buffer for updates to the media carousel. 316 * 317 * See {@link com.android.systemui.media.controls.ui.MediaCarouselController}. 318 */ 319 @Provides 320 @SysUISingleton 321 @MediaCarouselControllerLog provideMediaCarouselControllerBuffer(LogBufferFactory factory)322 public static LogBuffer provideMediaCarouselControllerBuffer(LogBufferFactory factory) { 323 return factory.create("MediaCarouselCtlrLog", 20); 324 } 325 326 /** Allows logging buffers to be tweaked via adb on debug builds but not on prod builds. */ 327 @Provides 328 @SysUISingleton provideLogcatEchoTracker( ContentResolver contentResolver, @Main Looper looper)329 public static LogcatEchoTracker provideLogcatEchoTracker( 330 ContentResolver contentResolver, 331 @Main Looper looper) { 332 if (Build.isDebuggable()) { 333 return LogcatEchoTrackerDebug.create(contentResolver, looper); 334 } else { 335 return new LogcatEchoTrackerProd(); 336 } 337 } 338 339 /** 340 * Provides a {@link LogBuffer} for use by 341 * {@link com.android.systemui.biometrics.FaceHelpMessageDeferral}. 342 */ 343 @Provides 344 @SysUISingleton 345 @BiometricLog provideBiometricLogBuffer(LogBufferFactory factory)346 public static LogBuffer provideBiometricLogBuffer(LogBufferFactory factory) { 347 return factory.create("BiometricLog", 200); 348 } 349 350 /** 351 * Provides a {@link LogBuffer} for use by the status bar network controller. 352 */ 353 @Provides 354 @SysUISingleton 355 @StatusBarNetworkControllerLog provideStatusBarNetworkControllerBuffer(LogBufferFactory factory)356 public static LogBuffer provideStatusBarNetworkControllerBuffer(LogBufferFactory factory) { 357 return factory.create("StatusBarNetworkControllerLog", 20); 358 } 359 360 /** 361 * Provides a {@link LogBuffer} for general keyguard clock logs. 362 */ 363 @Provides 364 @SysUISingleton 365 @KeyguardClockLog provideKeyguardClockLog(LogBufferFactory factory)366 public static LogBuffer provideKeyguardClockLog(LogBufferFactory factory) { 367 return factory.create("KeyguardClockLog", 100); 368 } 369 370 /** 371 * Provides a {@link LogBuffer} for keyguard small clock logs. 372 */ 373 @Provides 374 @SysUISingleton 375 @KeyguardSmallClockLog provideKeyguardSmallClockLog(LogBufferFactory factory)376 public static LogBuffer provideKeyguardSmallClockLog(LogBufferFactory factory) { 377 return factory.create("KeyguardSmallClockLog", 100); 378 } 379 380 /** 381 * Provides a {@link LogBuffer} for keyguard large clock logs. 382 */ 383 @Provides 384 @SysUISingleton 385 @KeyguardLargeClockLog provideKeyguardLargeClockLog(LogBufferFactory factory)386 public static LogBuffer provideKeyguardLargeClockLog(LogBufferFactory factory) { 387 return factory.create("KeyguardLargeClockLog", 100); 388 } 389 390 /** 391 * Provides a {@link LogBuffer} for use by {@link com.android.keyguard.KeyguardUpdateMonitor}. 392 */ 393 @Provides 394 @SysUISingleton 395 @KeyguardUpdateMonitorLog provideKeyguardUpdateMonitorLogBuffer(LogBufferFactory factory)396 public static LogBuffer provideKeyguardUpdateMonitorLogBuffer(LogBufferFactory factory) { 397 return factory.create("KeyguardUpdateMonitorLog", 400); 398 } 399 400 /** 401 * Provides a {@link LogBuffer} for use by {@link com.android.keyguard.KeyguardUpdateMonitor}. 402 */ 403 @Provides 404 @SysUISingleton 405 @CarrierTextManagerLog provideCarrierTextManagerLog(LogBufferFactory factory)406 public static LogBuffer provideCarrierTextManagerLog(LogBufferFactory factory) { 407 return factory.create("CarrierTextManagerLog", 100); 408 } 409 410 /** 411 * Provides a {@link LogBuffer} for use by {@link com.android.systemui.ScreenDecorations}. 412 */ 413 @Provides 414 @SysUISingleton 415 @ScreenDecorationsLog provideScreenDecorationsLog(LogBufferFactory factory)416 public static LogBuffer provideScreenDecorationsLog(LogBufferFactory factory) { 417 return factory.create("ScreenDecorationsLog", 200); 418 } 419 420 /** 421 * Provides a {@link LogBuffer} for use by 422 * {@link com.android.systemui.keyguard.data.repository.DeviceEntryFaceAuthRepositoryImpl}. 423 */ 424 @Provides 425 @SysUISingleton 426 @FaceAuthLog provideFaceAuthLog(LogBufferFactory factory)427 public static LogBuffer provideFaceAuthLog(LogBufferFactory factory) { 428 return factory.create("DeviceEntryFaceAuthRepositoryLog", 300); 429 } 430 431 /** 432 * Provides a {@link LogBuffer} for use by classes in the 433 * {@link com.android.systemui.keyguard.bouncer} package. 434 */ 435 @Provides 436 @SysUISingleton 437 @BouncerLog provideBouncerLog(LogBufferFactory factory)438 public static LogBuffer provideBouncerLog(LogBufferFactory factory) { 439 return factory.create("BouncerLog", 100); 440 } 441 442 /** 443 * Provides a {@link LogBuffer} for Device State Auto-Rotation logs. 444 */ 445 @Provides 446 @SysUISingleton 447 @DeviceStateAutoRotationLog provideDeviceStateAutoRotationLogBuffer(LogBufferFactory factory)448 public static LogBuffer provideDeviceStateAutoRotationLogBuffer(LogBufferFactory factory) { 449 return factory.create("DeviceStateAutoRotationLog", 100); 450 } 451 452 /** 453 * Provides a {@link LogBuffer} for bluetooth-related logs. 454 */ 455 @Provides 456 @SysUISingleton 457 @BluetoothLog providerBluetoothLogBuffer(LogBufferFactory factory)458 public static LogBuffer providerBluetoothLogBuffer(LogBufferFactory factory) { 459 return factory.create("BluetoothLog", 50); 460 } 461 462 /** Provides a logging buffer for the primary bouncer. */ 463 @Provides 464 @SysUISingleton 465 @BouncerTableLog provideBouncerLogBuffer(TableLogBufferFactory factory)466 public static TableLogBuffer provideBouncerLogBuffer(TableLogBufferFactory factory) { 467 return factory.create("BouncerTableLog", 250); 468 } 469 470 /** Provides a table logging buffer for the Monitor. */ 471 @Provides 472 @SysUISingleton 473 @MonitorLog provideMonitorTableLogBuffer(TableLogBufferFactory factory)474 public static TableLogBuffer provideMonitorTableLogBuffer(TableLogBufferFactory factory) { 475 return factory.create("MonitorLog", 250); 476 } 477 478 /** 479 * Provides a {@link LogBuffer} for Udfps logs. 480 */ 481 @Provides 482 @SysUISingleton 483 @UdfpsLog provideUdfpsLogBuffer(LogBufferFactory factory)484 public static LogBuffer provideUdfpsLogBuffer(LogBufferFactory factory) { 485 return factory.create("UdfpsLog", 1000); 486 } 487 488 /** 489 * Provides a {@link LogBuffer} for general keyguard-related logs. 490 */ 491 @Provides 492 @SysUISingleton 493 @KeyguardLog provideKeyguardLogBuffer(LogBufferFactory factory)494 public static LogBuffer provideKeyguardLogBuffer(LogBufferFactory factory) { 495 return factory.create("KeyguardLog", 250); 496 } 497 498 /** 499 * Provides a {@link LogBuffer} for dream-related logs. 500 */ 501 @Provides 502 @SysUISingleton 503 @DreamLog provideDreamLogBuffer(LogBufferFactory factory)504 public static LogBuffer provideDreamLogBuffer(LogBufferFactory factory) { 505 return factory.create("DreamLog", 250); 506 } 507 508 /** Provides a {@link LogBuffer} for display metrics related logs. */ 509 @Provides 510 @SysUISingleton 511 @DisplayMetricsRepoLog provideDisplayMetricsRepoLogBuffer(LogBufferFactory factory)512 public static LogBuffer provideDisplayMetricsRepoLogBuffer(LogBufferFactory factory) { 513 return factory.create("DisplayMetricsRepo", 50); 514 } 515 516 /** Provides a {@link LogBuffer} for the scene framework. */ 517 @Provides 518 @SysUISingleton 519 @SceneFrameworkLog provideSceneFrameworkLogBuffer(LogBufferFactory factory)520 public static LogBuffer provideSceneFrameworkLogBuffer(LogBufferFactory factory) { 521 return factory.create("SceneFramework", 50); 522 } 523 } 524