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

Commit 47b10dd3 authored by Matt Pietal's avatar Matt Pietal
Browse files

Selectively share KeyguardQuickAffordancesCombinedViewModel

Since the indication area and shortcuts section refer to the
same quick affordances, they should share the same model, which
will greatly reduce the number of continuations running.

Also add a bit more logging for when quick affordances update.

Fixes: 360066410
Test: atest PlatformScenarioTests:LockscreenShortcutTest
Flag: EXEMPT bugfix

Change-Id: I6fb579e37f79d8210e86996dda8623654078e645
parent eff91c9f
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.keyguard.logging

import com.android.systemui.keyguard.ui.viewmodel.KeyguardQuickAffordanceViewModel
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.core.LogLevel
import com.android.systemui.log.dagger.KeyguardQuickAffordancesLog
@@ -63,6 +64,15 @@ constructor(
        )
    }

    fun logUpdate(viewModel: KeyguardQuickAffordanceViewModel) {
        buffer.log(
            TAG,
            LogLevel.DEBUG,
            { str1 = viewModel.toString() },
            { "QuickAffordance updated: $str1" }
        )
    }

    private fun String.decode(): Pair<String, String> {
        val splitUp = this.split(DELIMITER)
        return Pair(splitUp[0], splitUp[1])
+2 −0
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ import com.android.systemui.keyguard.domain.interactor.StartKeyguardTransitionMo
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger;
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLoggerImpl;
import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransitionModule;
import com.android.systemui.keyguard.ui.viewmodel.KeyguardQuickAffordancesCombinedViewModelModule;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.process.ProcessWrapper;
@@ -111,6 +112,7 @@ import java.util.concurrent.Executor;
            DeviceEntryIconTransitionModule.class,
            FalsingModule.class,
            KeyguardDataQuickAffordanceModule.class,
            KeyguardQuickAffordancesCombinedViewModelModule.class,
            KeyguardRepositoryModule.class,
            DeviceEntryFaceAuthModule.class,
            KeyguardDisplayModule.class,
+2 −1
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ constructor(
        val configurationBasedDimensions = MutableStateFlow(loadFromResources(view))
        val disposableHandle =
            view.repeatWhenAttached {
                repeatOnLifecycle(Lifecycle.State.CREATED) {
                repeatOnLifecycle(Lifecycle.State.STARTED) {
                    launch {
                        viewModel.collect { buttonModel ->
                            updateButton(
@@ -141,6 +141,7 @@ constructor(
        viewModel: KeyguardQuickAffordanceViewModel,
        messageDisplayer: (Int) -> Unit,
    ) {
        logger.logUpdate(viewModel)
        if (!viewModel.isVisible) {
            view.isInvisible = true
            return
+4 −1
Original line number Diff line number Diff line
@@ -4,10 +4,10 @@ import android.view.View
import android.widget.ImageView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.res.ResourcesCompat
import com.android.systemui.res.R
import com.android.systemui.animation.view.LaunchableImageView
import com.android.systemui.keyguard.shared.model.KeyguardSection
import com.android.systemui.keyguard.ui.binder.KeyguardQuickAffordanceViewBinder
import com.android.systemui.res.R

abstract class BaseShortcutSection : KeyguardSection() {
    protected var leftShortcutHandle: KeyguardQuickAffordanceViewBinder.Binding? = null
@@ -15,7 +15,9 @@ abstract class BaseShortcutSection : KeyguardSection() {

    override fun removeViews(constraintLayout: ConstraintLayout) {
        leftShortcutHandle?.destroy()
        leftShortcutHandle = null
        rightShortcutHandle?.destroy()
        rightShortcutHandle = null
        constraintLayout.removeView(R.id.start_button)
        constraintLayout.removeView(R.id.end_button)
    }
@@ -75,6 +77,7 @@ abstract class BaseShortcutSection : KeyguardSection() {
            }
        constraintLayout.addView(view)
    }

    /**
     * Defines equality as same class.
     *
+5 −0
Original line number Diff line number Diff line
@@ -33,16 +33,19 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteract
import com.android.systemui.keyguard.ui.binder.KeyguardQuickAffordanceViewBinder
import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition
import com.android.systemui.keyguard.ui.viewmodel.KeyguardQuickAffordancesCombinedViewModel
import com.android.systemui.keyguard.ui.viewmodel.KeyguardQuickAffordancesCombinedViewModelModule.Companion.LOCKSCREEN_INSTANCE
import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel
import com.android.systemui.res.R
import com.android.systemui.statusbar.KeyguardIndicationController
import dagger.Lazy
import javax.inject.Inject
import javax.inject.Named

class DefaultShortcutsSection
@Inject
constructor(
    @Main private val resources: Resources,
    @Named(LOCKSCREEN_INSTANCE)
    private val keyguardQuickAffordancesCombinedViewModel:
        KeyguardQuickAffordancesCombinedViewModel,
    private val keyguardRootViewModel: KeyguardRootViewModel,
@@ -76,6 +79,7 @@ constructor(

    override fun bindData(constraintLayout: ConstraintLayout) {
        if (KeyguardBottomAreaRefactor.isEnabled) {
            leftShortcutHandle?.destroy()
            leftShortcutHandle =
                keyguardQuickAffordanceViewBinder.bind(
                    constraintLayout.requireViewById(R.id.start_button),
@@ -84,6 +88,7 @@ constructor(
                ) {
                    indicationController.showTransientIndication(it)
                }
            rightShortcutHandle?.destroy()
            rightShortcutHandle =
                keyguardQuickAffordanceViewBinder.bind(
                    constraintLayout.requireViewById(R.id.end_button),
Loading