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

Commit a17840b8 authored by Aaron Liu's avatar Aaron Liu
Browse files

Migrate add view logic and bind logic

Adds views and binds the logic when a blueprint is set to the view
binder instead of doing this in KeyguardRootView and
KeyguardViewConfigurator.

Bug: 295555276
Test: turn on all migrate flags on keyguard rootview, observe views
exist and are interactable.
Test: turn off all migrate flags on keyguard rootview, observe views
exist and are interactable.
Test: test switching between blueprints
Test: wallpaper picker works fine.
Test: lazy inflate flag on and off.

Change-Id: I4af1e28a5a8aff58e4e9a8bee002722834ecf603
parent 56ec1ab2
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -16,10 +16,10 @@

package com.android.systemui.communal.ui.view.layout.blueprints

import androidx.constraintlayout.widget.ConstraintSet
import com.android.systemui.communal.ui.view.layout.sections.DefaultCommunalWidgetSection
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.data.repository.KeyguardBlueprint
import com.android.systemui.keyguard.shared.model.KeyguardBlueprint
import com.android.systemui.keyguard.shared.model.KeyguardSection
import javax.inject.Inject

/** Blueprint for communal mode. */
@@ -28,13 +28,10 @@ import javax.inject.Inject
class DefaultCommunalBlueprint
@Inject
constructor(
    private val defaultCommunalWidgetSection: DefaultCommunalWidgetSection,
    defaultCommunalWidgetSection: DefaultCommunalWidgetSection,
) : KeyguardBlueprint {
    override val id: String = COMMUNAL

    override fun apply(constraintSet: ConstraintSet) {
        defaultCommunalWidgetSection.apply(constraintSet)
    }
    override val sections: Array<KeyguardSection> = arrayOf(defaultCommunalWidgetSection)

    companion object {
        const val COMMUNAL = "communal"
+32 −3
Original line number Diff line number Diff line
@@ -17,18 +17,47 @@
package com.android.systemui.communal.ui.view.layout.sections

import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet
import androidx.constraintlayout.widget.ConstraintSet.BOTTOM
import androidx.constraintlayout.widget.ConstraintSet.END
import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID
import com.android.systemui.R
import com.android.systemui.keyguard.data.repository.KeyguardSection
import com.android.systemui.communal.ui.adapter.CommunalWidgetViewAdapter
import com.android.systemui.communal.ui.binder.CommunalWidgetViewBinder
import com.android.systemui.communal.ui.viewmodel.CommunalWidgetViewModel
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor
import com.android.systemui.keyguard.shared.model.KeyguardSection
import com.android.systemui.keyguard.ui.view.KeyguardRootView
import dagger.Lazy
import javax.inject.Inject

class DefaultCommunalWidgetSection @Inject constructor() : KeyguardSection {
class DefaultCommunalWidgetSection
@Inject
constructor(
    private val featureFlags: FeatureFlags,
    private val keyguardRootView: KeyguardRootView,
    private val communalWidgetViewModel: CommunalWidgetViewModel,
    private val communalWidgetViewAdapter: CommunalWidgetViewAdapter,
    private val keyguardBlueprintInteractor: Lazy<KeyguardBlueprintInteractor>,
) : KeyguardSection {
    private val widgetAreaViewId = R.id.communal_widget_wrapper
    override fun addViews(constraintLayout: ConstraintLayout) {
        if (!featureFlags.isEnabled(Flags.WIDGET_ON_KEYGUARD)) {
            return
        }

        CommunalWidgetViewBinder.bind(
            keyguardRootView,
            communalWidgetViewModel,
            communalWidgetViewAdapter,
            keyguardBlueprintInteractor.get(),
        )
    }

    override fun apply(constraintSet: ConstraintSet) {
    override fun applyConstraints(constraintSet: ConstraintSet) {
        constraintSet.apply {
            constrainWidth(widgetAreaViewId, WRAP_CONTENT)
            constrainHeight(widgetAreaViewId, WRAP_CONTENT)
+18 −15
Original line number Diff line number Diff line
@@ -124,10 +124,12 @@ constructor(

            return field
        }
        private set

    override fun start() {
        if (featureFlags.isEnabled(Flags.LAZY_INFLATE_KEYGUARD)) {
            keyguardRootView.removeAllViews()
            initializeViews()
        } else {
            bindKeyguardRootView()
            val notificationPanel =
                notificationShadeWindowView.requireViewById(R.id.notification_panel) as ViewGroup
@@ -141,6 +143,7 @@ constructor(
            bindAmbientIndicationArea()
            bindSettingsPopupMenu()
            bindCommunalWidgetArea()
        }

        KeyguardBlueprintViewBinder.bind(keyguardRootView, keyguardBlueprintViewModel)
        keyguardBlueprintCommandListener.start()
+1 −27
Original line number Diff line number Diff line
@@ -17,13 +17,10 @@

package com.android.systemui.keyguard.data.repository

import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet
import androidx.core.view.children
import com.android.systemui.common.ui.data.repository.ConfigurationRepository
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.shared.model.KeyguardBlueprint
import com.android.systemui.keyguard.ui.view.layout.blueprints.DefaultKeyguardBlueprint.Companion.DEFAULT
import com.android.systemui.keyguard.ui.view.layout.blueprints.KeyguardBlueprintModule
import java.io.PrintWriter
@@ -95,26 +92,3 @@ constructor(
        blueprintIdMap.forEach { entry -> pw.println("${entry.key}") }
    }
}

/** Determines the constraints for the ConstraintSet in the lockscreen root view. */
interface KeyguardBlueprint {
    val id: String
    val shouldRemoveUnconstrainedViews: Boolean
        get() = true

    fun apply(constraintLayout: ConstraintSet)
    fun removeUnConstrainedViews(constraintLayout: ConstraintLayout, constraintSet: ConstraintSet) {
        constraintLayout.children
            .map { it.id }
            .filterNot { constraintSet.knownIds.contains(it) }
            .forEach { constraintSet.setVisibility(it, View.GONE) }
    }
}

/**
 * Lower level modules that determine constraints for a particular section in the lockscreen root
 * view.
 */
interface KeyguardSection {
    fun apply(constraintSet: ConstraintSet)
}
+38 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 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.keyguard.shared.model

import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet

/** Determines the constraints for the ConstraintSet in the lockscreen root view. */
interface KeyguardBlueprint {
    val id: String
    val sections: Array<KeyguardSection>

    fun addViews(constraintLayout: ConstraintLayout) {
        sections.forEach { it.addViews(constraintLayout) }
    }

    fun applyConstraints(constraintSet: ConstraintSet) {
        sections.forEach { it.applyConstraints(constraintSet) }
    }

    fun onDestroy() {
        sections.forEach { it.onDestroy() }
    }
}
Loading