/* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.qs.logging import android.service.quicksettings.Tile import com.android.systemui.log.LogBuffer import com.android.systemui.log.LogLevel import com.android.systemui.log.LogLevel.DEBUG import com.android.systemui.log.LogLevel.VERBOSE import com.android.systemui.log.LogMessage import com.android.systemui.log.dagger.QSLog import com.android.systemui.plugins.qs.QSTile import com.android.systemui.statusbar.StatusBarState import javax.inject.Inject private const val TAG = "QSLog" class QSLogger @Inject constructor( @QSLog private val buffer: LogBuffer ) { fun logTileAdded(tileSpec: String) { log(DEBUG, { str1 = tileSpec }, { "[$str1] Tile added" }) } fun logTileDestroyed(tileSpec: String, reason: String) { log(DEBUG, { str1 = tileSpec str2 = reason }, { "[$str1] Tile destroyed. Reason: $str2" }) } fun logTileChangeListening(tileSpec: String, listening: Boolean) { log(VERBOSE, { bool1 = listening str1 = tileSpec }, { "[$str1] Tile listening=$bool1" }) } fun logAllTilesChangeListening(listening: Boolean, containerName: String, allSpecs: String) { log(DEBUG, { bool1 = listening str1 = containerName str2 = allSpecs }, { "Tiles listening=$bool1 in $str1. $str2" }) } fun logTileClick(tileSpec: String, statusBarState: Int, state: Int) { log(DEBUG, { str1 = tileSpec int1 = statusBarState str2 = StatusBarState.toShortString(statusBarState) str3 = toStateString(state) }, { "[$str1] Tile clicked. StatusBarState=$str2. TileState=$str3" }) } fun logTileSecondaryClick(tileSpec: String, statusBarState: Int, state: Int) { log(DEBUG, { str1 = tileSpec int1 = statusBarState str2 = StatusBarState.toShortString(statusBarState) str3 = toStateString(state) }, { "[$str1] Tile long clicked. StatusBarState=$str2. TileState=$str3" }) } fun logTileLongClick(tileSpec: String, statusBarState: Int, state: Int) { log(DEBUG, { str1 = tileSpec int1 = statusBarState str2 = StatusBarState.toShortString(statusBarState) str3 = toStateString(state) }, { "[$str1] Tile long clicked. StatusBarState=$str2. TileState=$str3" }) } fun logTileUpdated(tileSpec: String, state: QSTile.State) { log(VERBOSE, { str1 = tileSpec str2 = state.label?.toString() str3 = state.icon?.toString() int1 = state.state if (state is QSTile.SignalState) { bool1 = true bool2 = state.activityIn bool3 = state.activityOut } }, { "[$str1] Tile updated. Label=$str2. State=$int1. Icon=$str3." + if (bool1) " Activity in/out=$bool2/$bool3" else "" }) } fun logPanelExpanded(expanded: Boolean, containerName: String) { log(DEBUG, { str1 = containerName bool1 = expanded }, { "$str1 expanded=$bool1" }) } private fun toStateString(state: Int): String { return when (state) { Tile.STATE_ACTIVE -> "active" Tile.STATE_INACTIVE -> "inactive" Tile.STATE_UNAVAILABLE -> "unavailable" else -> "wrong state" } } private inline fun log( logLevel: LogLevel, initializer: LogMessage.() -> Unit, noinline printer: LogMessage.() -> String ) { buffer.log(TAG, logLevel, initializer, printer) } }