• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 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.statusbar.policy
18 
19 import android.media.MediaRouter.RouteInfo
20 import android.media.projection.MediaProjectionInfo
21 import com.android.systemui.dagger.SysUISingleton
22 import com.android.systemui.log.LogBuffer
23 import com.android.systemui.log.core.LogLevel
24 import com.android.systemui.log.core.MessageInitializer
25 import com.android.systemui.log.core.MessagePrinter
26 import com.android.systemui.statusbar.policy.dagger.CastControllerLog
27 import javax.inject.Inject
28 
29 /** Helper class for logging events to [CastControllerLog] from Java. */
30 @SysUISingleton
31 class CastControllerLogger
32 @Inject
33 constructor(
34     @CastControllerLog val logger: LogBuffer,
35 ) {
36     /** Passthrough to [logger]. */
lognull37     inline fun log(
38         tag: String,
39         level: LogLevel,
40         messageInitializer: MessageInitializer,
41         noinline messagePrinter: MessagePrinter,
42         exception: Throwable? = null,
43     ) {
44         logger.log(tag, level, messageInitializer, messagePrinter, exception)
45     }
46 
logDiscoveringnull47     fun logDiscovering(isDiscovering: Boolean) =
48         logger.log(TAG, LogLevel.DEBUG, { bool1 = isDiscovering }, { "setDiscovering: $bool1" })
49 
logStartCastingnull50     fun logStartCasting(route: RouteInfo) =
51         logger.log(TAG, LogLevel.DEBUG, { str1 = route.toLogString() }, { "startCasting: $str1" })
52 
logStopCastingnull53     fun logStopCasting(isProjection: Boolean) =
54         logger.log(
55             TAG,
56             LogLevel.DEBUG,
57             { bool1 = isProjection },
<lambda>null58             { "stopCasting. isProjection=$bool1" },
59         )
60 
logStopCastingNoProjectionnull61     fun logStopCastingNoProjection(projection: MediaProjectionInfo) =
62         logger.log(
63             TAG,
64             LogLevel.WARNING,
65             { str1 = projection.toString() },
<lambda>null66             { "stopCasting failed because projection is no longer active: $str1" },
67         )
68 
logStopCastingMediaRouternull69     fun logStopCastingMediaRouter() =
70         logger.log(
71             TAG,
72             LogLevel.DEBUG,
73             {},
<lambda>null74             { "stopCasting is selecting fallback route in MediaRouter" },
75         )
76 
logSetProjectionnull77     fun logSetProjection(oldInfo: MediaProjectionInfo?, newInfo: MediaProjectionInfo?) =
78         logger.log(
79             TAG,
80             LogLevel.DEBUG,
81             {
82                 str1 = oldInfo.toString()
83                 str2 = newInfo.toString()
84             },
<lambda>null85             { "setProjection: $str1 -> $str2" },
86         )
87 
logRouteAddednull88     fun logRouteAdded(route: RouteInfo) =
89         logger.log(TAG, LogLevel.DEBUG, { str1 = route.toLogString() }, { "onRouteAdded: $str1" })
90 
logRouteChangednull91     fun logRouteChanged(route: RouteInfo) =
92         logger.log(TAG, LogLevel.DEBUG, { str1 = route.toLogString() }, { "onRouteChanged: $str1" })
93 
logRouteRemovednull94     fun logRouteRemoved(route: RouteInfo) =
95         logger.log(TAG, LogLevel.DEBUG, { str1 = route.toLogString() }, { "onRouteRemoved: $str1" })
96 
logRouteSelectednull97     fun logRouteSelected(route: RouteInfo, type: Int) =
98         logger.log(
99             TAG,
100             LogLevel.DEBUG,
101             {
102                 str1 = route.toLogString()
103                 int1 = type
104             },
<lambda>null105             { "onRouteSelected($int1): $str1" },
106         )
107 
logRouteUnselectednull108     fun logRouteUnselected(route: RouteInfo, type: Int) =
109         logger.log(
110             TAG,
111             LogLevel.DEBUG,
112             {
113                 str1 = route.toLogString()
114                 int1 = type
115             },
<lambda>null116             { "onRouteUnselected($int1): $str1" },
117         )
118 
119     companion object {
120         @JvmStatic
toLogStringnull121         fun RouteInfo?.toLogString(): String? {
122             if (this == null) return null
123             val sb =
124                 StringBuilder()
125                     .append(name)
126                     .append('/')
127                     .append(description)
128                     .append('@')
129                     .append(deviceAddress)
130                     .append(",status=")
131                     .append(status)
132             if (isDefault) sb.append(",default")
133             if (isEnabled) sb.append(",enabled")
134             if (isConnecting) sb.append(",connecting")
135             if (isSelected) sb.append(",selected")
136             return sb.append(",id=").append(this.tag).toString()
137         }
138 
139         private const val TAG = "CastController"
140     }
141 }
142