blob: 3a927396527c4548045a9995b866bc521e83bb54 [file] [log] [blame]
/*
* Copyright (C) 2022 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.compose
import android.content.Context
import android.view.View
import android.view.WindowInsets
import androidx.activity.ComponentActivity
import androidx.lifecycle.LifecycleOwner
import com.android.systemui.communal.ui.viewmodel.BaseCommunalViewModel
import com.android.systemui.people.ui.viewmodel.PeopleViewModel
import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel
import com.android.systemui.scene.shared.model.Scene
import com.android.systemui.scene.shared.model.SceneKey
import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.StateFlow
/**
* A facade to interact with Compose, when it is available.
*
* You should access this facade by calling the static methods on
* [com.android.systemui.compose.ComposeFacade] directly.
*/
interface BaseComposeFacade {
/**
* Whether Compose is currently available. This function should be checked before calling any
* other functions on this facade.
*
* This value will never change at runtime.
*/
fun isComposeAvailable(): Boolean
/**
* Return the [ComposeInitializer] to make Compose usable in windows outside normal activities.
*/
fun composeInitializer(): ComposeInitializer
/** Bind the content of [activity] to [viewModel]. */
fun setPeopleSpaceActivityContent(
activity: ComponentActivity,
viewModel: PeopleViewModel,
onResult: (PeopleViewModel.Result) -> Unit,
)
/** Bind the content of [activity] to [viewModel]. */
fun setCommunalEditWidgetActivityContent(
activity: ComponentActivity,
viewModel: BaseCommunalViewModel,
onOpenWidgetPicker: () -> Unit,
onEditDone: () -> Unit,
)
/** Create a [View] to represent [viewModel] on screen. */
fun createFooterActionsView(
context: Context,
viewModel: FooterActionsViewModel,
qsVisibilityLifecycleOwner: LifecycleOwner,
): View
/** Create a [View] to represent [viewModel] on screen. */
fun createSceneContainerView(
scope: CoroutineScope,
context: Context,
viewModel: SceneContainerViewModel,
windowInsets: StateFlow<WindowInsets?>,
sceneByKey: Map<SceneKey, Scene>,
): View
/** Create a [View] to represent [viewModel] on screen. */
fun createCommunalView(
context: Context,
viewModel: BaseCommunalViewModel,
): View
/** Creates a container that hosts the communal UI and handles gesture transitions. */
fun createCommunalContainer(context: Context, viewModel: BaseCommunalViewModel): View
}