From 0dbe2107ace6aaccb63e567df8adc86f52d70c67 Mon Sep 17 00:00:00 2001 From: Jordan Demeulenaere Date: Tue, 3 May 2022 16:21:11 +0200 Subject: [PATCH] Introduce the SystemUIComposeFeatures library (1/2) This CL introduces the SystemUIComposeFeatures library, which will contain all feature-specific Compose code. Bug: 231131244 Test: atest SystemUIComposeFeaturesTests Change-Id: Ic133df0dd58eeb9f392d4618c320d2c3bc426d68 --- packages/SystemUI/compose/core/TEST_MAPPING | 11 ++++ packages/SystemUI/compose/features/Android.bp | 40 ++++++++++++++ .../compose/features/AndroidManifest.xml | 22 ++++++++ .../SystemUI/compose/features/TEST_MAPPING | 15 +++++ .../com/android/systemui/ExampleFeature.kt | 55 +++++++++++++++++++ .../compose/features/tests/Android.bp | 48 ++++++++++++++++ .../features/tests/AndroidManifest.xml | 28 ++++++++++ .../android/systemui/ExampleFeatureTest.kt | 53 ++++++++++++++++++ 8 files changed, 272 insertions(+) create mode 100644 packages/SystemUI/compose/features/Android.bp create mode 100644 packages/SystemUI/compose/features/AndroidManifest.xml create mode 100644 packages/SystemUI/compose/features/TEST_MAPPING create mode 100644 packages/SystemUI/compose/features/src/com/android/systemui/ExampleFeature.kt create mode 100644 packages/SystemUI/compose/features/tests/Android.bp create mode 100644 packages/SystemUI/compose/features/tests/AndroidManifest.xml create mode 100644 packages/SystemUI/compose/features/tests/src/com/android/systemui/ExampleFeatureTest.kt diff --git a/packages/SystemUI/compose/core/TEST_MAPPING b/packages/SystemUI/compose/core/TEST_MAPPING index 92a654a63228c..6b7f69e981456 100644 --- a/packages/SystemUI/compose/core/TEST_MAPPING +++ b/packages/SystemUI/compose/core/TEST_MAPPING @@ -10,6 +10,17 @@ "exclude-annotation": "androidx.test.filters.FlakyTest" } ] + }, + { + "name": "SystemUIComposeFeaturesTests", + "options": [ + { + "exclude-annotation": "org.junit.Ignore" + }, + { + "exclude-annotation": "androidx.test.filters.FlakyTest" + } + ] } ] } \ No newline at end of file diff --git a/packages/SystemUI/compose/features/Android.bp b/packages/SystemUI/compose/features/Android.bp new file mode 100644 index 0000000000000..40218de94258b --- /dev/null +++ b/packages/SystemUI/compose/features/Android.bp @@ -0,0 +1,40 @@ +// 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 { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["frameworks_base_packages_SystemUI_license"], +} + +android_library { + name: "SystemUIComposeFeatures", + manifest: "AndroidManifest.xml", + + srcs: [ + "src/**/*.kt", + ], + + static_libs: [ + "SystemUIComposeCore", + + "androidx.compose.runtime_runtime", + "androidx.compose.material3_material3", + ], + + kotlincflags: ["-Xjvm-default=all"], +} diff --git a/packages/SystemUI/compose/features/AndroidManifest.xml b/packages/SystemUI/compose/features/AndroidManifest.xml new file mode 100644 index 0000000000000..0aea99d4e9606 --- /dev/null +++ b/packages/SystemUI/compose/features/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/packages/SystemUI/compose/features/TEST_MAPPING b/packages/SystemUI/compose/features/TEST_MAPPING new file mode 100644 index 0000000000000..55d8e2f737534 --- /dev/null +++ b/packages/SystemUI/compose/features/TEST_MAPPING @@ -0,0 +1,15 @@ +{ + "presubmit": [ + { + "name": "SystemUIComposeFeaturesTests", + "options": [ + { + "exclude-annotation": "org.junit.Ignore" + }, + { + "exclude-annotation": "androidx.test.filters.FlakyTest" + } + ] + } + ] +} \ No newline at end of file diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/ExampleFeature.kt b/packages/SystemUI/compose/features/src/com/android/systemui/ExampleFeature.kt new file mode 100644 index 0000000000000..73d5e3521d0c7 --- /dev/null +++ b/packages/SystemUI/compose/features/src/com/android/systemui/ExampleFeature.kt @@ -0,0 +1,55 @@ +/* + * 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 + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +/** + * This is an example Compose feature, which shows a text and a count that is incremented when + * clicked. + */ +@Composable +fun ExampleFeature(text: String, modifier: Modifier = Modifier) { + Surface( + modifier, + color = MaterialTheme.colorScheme.primaryContainer, + shape = RoundedCornerShape(28.dp), + ) { + var count by remember { mutableStateOf(0) } + Column( + Modifier + .clickable { count++ } + .padding(16.dp), + ) { + Text(text) + Text("I was clicked $count times.") + } + } +} \ No newline at end of file diff --git a/packages/SystemUI/compose/features/tests/Android.bp b/packages/SystemUI/compose/features/tests/Android.bp new file mode 100644 index 0000000000000..ff534bd01fd38 --- /dev/null +++ b/packages/SystemUI/compose/features/tests/Android.bp @@ -0,0 +1,48 @@ +// 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 { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["frameworks_base_packages_SystemUI_license"], +} + +// TODO(b/230606318): Make those host tests instead of device tests. +android_test { + name: "SystemUIComposeFeaturesTests", + manifest: "AndroidManifest.xml", + test_suites: ["device-tests"], + sdk_version: "current", + certificate: "platform", + + srcs: [ + "src/**/*.kt", + ], + + static_libs: [ + "SystemUIComposeFeatures", + + "androidx.test.runner", + "androidx.test.ext.junit", + + "androidx.compose.runtime_runtime", + "androidx.compose.ui_ui-test-junit4", + "androidx.compose.ui_ui-test-manifest", + ], + + kotlincflags: ["-Xjvm-default=enable"], +} diff --git a/packages/SystemUI/compose/features/tests/AndroidManifest.xml b/packages/SystemUI/compose/features/tests/AndroidManifest.xml new file mode 100644 index 0000000000000..5e54c1f353d2e --- /dev/null +++ b/packages/SystemUI/compose/features/tests/AndroidManifest.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/compose/features/tests/src/com/android/systemui/ExampleFeatureTest.kt b/packages/SystemUI/compose/features/tests/src/com/android/systemui/ExampleFeatureTest.kt new file mode 100644 index 0000000000000..b120b963ae5e4 --- /dev/null +++ b/packages/SystemUI/compose/features/tests/src/com/android/systemui/ExampleFeatureTest.kt @@ -0,0 +1,53 @@ +/* + * 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 + +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class ExampleFeatureTest { + @get:Rule + val composeRule = createComposeRule() + + @Test + fun testProvidedTextIsDisplayed() { + composeRule.setContent { + ExampleFeature("foo") + } + + composeRule.onNodeWithText("foo").assertIsDisplayed() + } + + @Test + fun testCountIsIncreasedWhenClicking() { + composeRule.setContent { + ExampleFeature("foo") + } + + composeRule.onNodeWithText("I was clicked 0 times.") + .assertIsDisplayed() + .performClick() + composeRule.onNodeWithText("I was clicked 1 times.").assertIsDisplayed() + } +} \ No newline at end of file