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

Commit 93df848c authored by Jordan Demeulenaere's avatar Jordan Demeulenaere Committed by Android (Google) Code Review
Browse files

Merge changes from topic "compose-build-flag" into tm-qpr-dev

* changes:
  Show the Compose implementation of PeopleSpace when Compose is available
  Add SystemUI build flag for Compose code (1/3)
parents 1bca22be bf43b1d3
Loading
Loading
Loading
Loading
+52 −0
Original line number Diff line number Diff line
@@ -31,6 +31,52 @@ license {
    ],
}

// Opt-in configuration for code depending on Jetpack Compose.
soong_config_module_type {
    name: "systemui_compose_java_defaults",
    module_type: "java_defaults",
    config_namespace: "ANDROID",
    bool_variables: ["SYSTEMUI_USE_COMPOSE"],
    properties: [
        "srcs",
        "static_libs",
    ],
}

systemui_compose_java_defaults {
    name: "SystemUI_compose_defaults",
    soong_config_variables: {
        SYSTEMUI_USE_COMPOSE: {
            // Because files in compose/features/ depend on SystemUI
            // code, we compile those files when compiling SystemUI-core.
            // We also compile the ComposeFacade in
            // compose/facade/enabled/.
            srcs: [
                "compose/features/src/**/*.kt",
                "compose/facade/enabled/src/**/*.kt",
            ],

            // The dependencies needed by SystemUIComposeFeatures,
            // except for SystemUI-core.
            // Copied from compose/features/Android.bp.
            static_libs: [
                "SystemUIComposeCore",

                "androidx.compose.runtime_runtime",
                "androidx.compose.material3_material3",
                "androidx.activity_activity-compose",
            ],

            // By default, Compose is disabled and we compile the ComposeFacade
            // in compose/facade/disabled/.
            conditions_default: {
                srcs: ["compose/facade/disabled/src/**/*.kt"],
                static_libs: [],
            },
        },
    },
}

java_library {
    name: "SystemUI-proto",

@@ -68,6 +114,9 @@ filegroup {

android_library {
    name: "SystemUI-core",
    defaults: [
        "SystemUI_compose_defaults",
    ],
    srcs: [
        "src/**/*.kt",
        "src/**/*.java",
@@ -227,6 +276,9 @@ android_library {

android_library {
    name: "SystemUI-tests",
    defaults: [
        "SystemUI_compose_defaults",
    ],
    manifest: "tests/AndroidManifest-base.xml",
    additional_manifests: ["tests/AndroidManifest.xml"],
    srcs: [
+41 −0
Original line number Diff line number Diff line
/*
 * 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 androidx.activity.ComponentActivity
import com.android.systemui.people.ui.viewmodel.PeopleViewModel

/** The Compose facade, when Compose is *not* available. */
object ComposeFacade : BaseComposeFacade {
    override fun isComposeAvailable(): Boolean = false

    override fun setPeopleSpaceActivityContent(
        activity: ComponentActivity,
        viewModel: PeopleViewModel,
        onResult: (PeopleViewModel.Result) -> Unit,
    ) {
        throwComposeUnavailableError()
    }

    private fun throwComposeUnavailableError() {
        error(
            "Compose is not available. Make sure to check isComposeAvailable() before calling any" +
                " other function on ComposeFacade."
        )
    }
}
+36 −0
Original line number Diff line number Diff line
/*
 * 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 androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import com.android.systemui.compose.theme.SystemUITheme
import com.android.systemui.people.ui.compose.PeopleScreen
import com.android.systemui.people.ui.viewmodel.PeopleViewModel

/** The Compose facade, when Compose is available. */
object ComposeFacade : BaseComposeFacade {
    override fun isComposeAvailable(): Boolean = true

    override fun setPeopleSpaceActivityContent(
        activity: ComponentActivity,
        viewModel: PeopleViewModel,
        onResult: (PeopleViewModel.Result) -> Unit,
    ) {
        activity.setContent { SystemUITheme { PeopleScreen(viewModel, onResult) } }
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ android_library {

        "androidx.compose.runtime_runtime",
        "androidx.compose.material3_material3",
        "androidx.activity_activity-compose",
    ],

    kotlincflags: ["-Xjvm-default=all"],
+44 −0
Original line number Diff line number Diff line
/*
 * 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 androidx.activity.ComponentActivity
import com.android.systemui.people.ui.viewmodel.PeopleViewModel

/**
 * 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

    /** Bind the content of [activity] to [viewModel]. */
    fun setPeopleSpaceActivityContent(
        activity: ComponentActivity,
        viewModel: PeopleViewModel,
        onResult: (PeopleViewModel.Result) -> Unit,
    )
}
Loading