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