Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 45b23c19 authored by Brad Hinegardner's avatar Brad Hinegardner
Browse files

Add logbuffer logging to quick affordances usage

Added logging around tapping a shortcut, triggering a shortcut, and
selecting a shortcut within the wallpaper picker

Bug: 329094171
Test: atest KeyguardQuickAffordanceInteractorTest
Flag: EXEMPT bugfix
Change-Id: I0dbf56ed587d01bd97471f14a621974abe1851d8
parent 2f54428d
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.content.res.ResourcesCompat
import com.android.compose.animation.scene.ElementKey
import com.android.compose.animation.scene.SceneScope
import com.android.keyguard.logging.KeyguardQuickAffordancesLogger
import com.android.systemui.animation.view.LaunchableImageView
import com.android.systemui.keyguard.ui.binder.KeyguardIndicationAreaBinder
import com.android.systemui.keyguard.ui.binder.KeyguardQuickAffordanceViewBinder
@@ -55,6 +56,7 @@ constructor(
    private val vibratorHelper: VibratorHelper,
    private val indicationController: KeyguardIndicationController,
    private val indicationAreaViewModel: KeyguardIndicationAreaViewModel,
    private val shortcutsLogger: KeyguardQuickAffordancesLogger,
) {
    /**
     * Renders a single lockscreen shortcut.
@@ -162,6 +164,7 @@ constructor(
                        transitionAlpha,
                        falsingManager,
                        vibratorHelper,
                        shortcutsLogger,
                    ) {
                        indicationController.showTransientIndication(it)
                    }
+4 −1
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.os.UserHandle
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.widget.LockPatternUtils
import com.android.keyguard.logging.KeyguardQuickAffordancesLogger
import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.common.shared.model.ContentDescription
@@ -86,7 +87,8 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
    @Mock private lateinit var launchAnimator: DialogTransitionAnimator
    @Mock private lateinit var devicePolicyManager: DevicePolicyManager
    @Mock private lateinit var shadeInteractor: ShadeInteractor
    @Mock private lateinit var logger: KeyguardQuickAffordancesMetricsLogger
    @Mock private lateinit var logger: KeyguardQuickAffordancesLogger
    @Mock private lateinit var metricsLogger: KeyguardQuickAffordancesMetricsLogger

    private val kosmos = testKosmos()

@@ -194,6 +196,7 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
                repository = { quickAffordanceRepository },
                launchAnimator = launchAnimator,
                logger = logger,
                metricsLogger = metricsLogger,
                devicePolicyManager = devicePolicyManager,
                dockManager = dockManager,
                biometricSettingsRepository = biometricSettingsRepository,
+75 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.keyguard.logging

import com.android.systemui.log.LogBuffer
import com.android.systemui.log.core.LogLevel
import com.android.systemui.log.dagger.KeyguardQuickAffordancesLog
import javax.inject.Inject

class KeyguardQuickAffordancesLogger
@Inject
constructor(
    @KeyguardQuickAffordancesLog val buffer: LogBuffer,
) {
    fun logQuickAffordanceTapped(configKey: String?) {
        val (slotId, affordanceId) = configKey?.decode() ?: ("" to "")
        buffer.log(
            TAG,
            LogLevel.DEBUG,
            {
                str1 = affordanceId
                str2 = slotId
            },
            { "QuickAffordance tapped with id: $str1, in slot: $str2" }
        )
    }

    fun logQuickAffordanceTriggered(slotId: String, affordanceId: String) {
        buffer.log(
            TAG,
            LogLevel.DEBUG,
            {
                str1 = affordanceId
                str2 = slotId
            },
            { "QuickAffordance triggered with id: $str1, in slot: $str2" }
        )
    }

    fun logQuickAffordanceSelected(slotId: String, affordanceId: String) {
        buffer.log(
            TAG,
            LogLevel.DEBUG,
            {
                str1 = affordanceId
                str2 = slotId
            },
            { "QuickAffordance selected with id: $str1, in slot: $str2" }
        )
    }

    private fun String.decode(): Pair<String, String> {
        val splitUp = this.split(DELIMITER)
        return Pair(splitUp[0], splitUp[1])
    }

    companion object {
        private const val TAG = "KeyguardQuickAffordancesLogger"
        private const val DELIMITER = "::"
    }
}
+7 −3
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.util.Log
import com.android.app.tracing.coroutines.withContext
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.internal.widget.LockPatternUtils
import com.android.keyguard.logging.KeyguardQuickAffordancesLogger
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.animation.Expandable
import com.android.systemui.dagger.SysUISingleton
@@ -80,7 +81,8 @@ constructor(
    private val featureFlags: FeatureFlags,
    private val repository: Lazy<KeyguardQuickAffordanceRepository>,
    private val launchAnimator: DialogTransitionAnimator,
    private val logger: KeyguardQuickAffordancesMetricsLogger,
    private val logger: KeyguardQuickAffordancesLogger,
    private val metricsLogger: KeyguardQuickAffordancesMetricsLogger,
    private val devicePolicyManager: DevicePolicyManager,
    private val dockManager: DockManager,
    private val biometricSettingsRepository: BiometricSettingsRepository,
@@ -171,7 +173,8 @@ constructor(
            Log.e(TAG, "Affordance config with key of \"$configKey\" not found!")
            return
        }
        logger.logOnShortcutTriggered(slotId, configKey)
        logger.logQuickAffordanceTriggered(decodedSlotId, decodedConfigKey)
        metricsLogger.logOnShortcutTriggered(slotId, configKey)

        when (val result = config.onTriggered(expandable)) {
            is KeyguardQuickAffordanceConfig.OnTriggeredResult.StartActivity ->
@@ -223,7 +226,8 @@ constructor(
                affordanceIds = selections,
            )

        logger.logOnShortcutSelected(slotId, affordanceId)
        logger.logQuickAffordanceSelected(slotId, affordanceId)
        metricsLogger.logOnShortcutSelected(slotId, affordanceId)
        return true
    }

+5 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle
import com.android.keyguard.logging.KeyguardQuickAffordancesLogger
import com.android.settingslib.Utils
import com.android.systemui.animation.Expandable
import com.android.systemui.animation.view.LaunchableImageView
@@ -74,6 +75,7 @@ object KeyguardQuickAffordanceViewBinder {
        alpha: Flow<Float>,
        falsingManager: FalsingManager?,
        vibratorHelper: VibratorHelper?,
        logger: KeyguardQuickAffordancesLogger,
        messageDisplayer: (Int) -> Unit,
    ): Binding {
        val button = view as ImageView
@@ -89,6 +91,7 @@ object KeyguardQuickAffordanceViewBinder {
                                falsingManager = falsingManager,
                                messageDisplayer = messageDisplayer,
                                vibratorHelper = vibratorHelper,
                                logger = logger,
                            )
                        }
                    }
@@ -131,6 +134,7 @@ object KeyguardQuickAffordanceViewBinder {
        falsingManager: FalsingManager?,
        messageDisplayer: (Int) -> Unit,
        vibratorHelper: VibratorHelper?,
        logger: KeyguardQuickAffordancesLogger,
    ) {
        if (!viewModel.isVisible) {
            view.isInvisible = true
@@ -228,6 +232,7 @@ object KeyguardQuickAffordanceViewBinder {
                    shakeAnimator.start()

                    vibratorHelper?.vibrate(KeyguardBottomAreaVibrations.Shake)
                    logger.logQuickAffordanceTapped(viewModel.configKey)
                }
                view.onLongClickListener =
                    OnLongClickListener(falsingManager, viewModel, vibratorHelper, onTouchListener)
Loading