diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp index 721b432099f5c..f44893e013ab5 100644 --- a/packages/SystemUI/Android.bp +++ b/packages/SystemUI/Android.bp @@ -50,6 +50,17 @@ java_library { srcs: ["src/com/android/systemui/EventLogTags.logtags"], } +java_library { + name: "SystemUI-flags", + srcs: [ + "src/com/android/systemui/flags/Flags.java", + ], + libs: [ + "SystemUI-flag-types", + ], + static_kotlin_stdlib: false, +} + filegroup { name: "ReleaseJavaFiles", srcs: [ @@ -116,6 +127,7 @@ android_library { "iconloader_base", "SystemUI-tags", "SystemUI-proto", + "SystemUI-flags", "monet", "dagger2", "jsr330", diff --git a/packages/SystemUI/shared/Android.bp b/packages/SystemUI/shared/Android.bp index 23307de519c86..7cf22a38837b2 100644 --- a/packages/SystemUI/shared/Android.bp +++ b/packages/SystemUI/shared/Android.bp @@ -45,9 +45,40 @@ android_library { ":wm_shell-aidls", ":wm_shell_util-sources", ], + libs: [ + "SystemUI-flags", + ], static_libs: [ "PluginCoreLib", "androidx.dynamicanimation_dynamicanimation", + "androidx.concurrent_concurrent-futures", + ], + java_version: "1.8", + min_sdk_version: "current", +} + +java_library { + name: "SystemUI-flag-types", + srcs: [ + "src/com/android/systemui/flags/Flag.kt", + ], + static_kotlin_stdlib: false, + java_version: "1.8", + min_sdk_version: "current", +} + +java_library { + name: "SystemUIFlagsLib", + srcs: [ + "src/com/android/systemui/flags/**/*.kt", + ], + static_kotlin_stdlib: false, + libs: [ + "androidx.concurrent_concurrent-futures", + "SystemUI-flags", + ], + static_libs: [ + "SystemUI-flag-types", ], java_version: "1.8", min_sdk_version: "current", diff --git a/packages/SystemUI/plugin/src/com/android/systemui/flags/Flag.kt b/packages/SystemUI/shared/src/com/android/systemui/flags/Flag.kt similarity index 100% rename from packages/SystemUI/plugin/src/com/android/systemui/flags/Flag.kt rename to packages/SystemUI/shared/src/com/android/systemui/flags/Flag.kt diff --git a/packages/SystemUI/shared/src/com/android/systemui/flags/FlagManager.kt b/packages/SystemUI/shared/src/com/android/systemui/flags/FlagManager.kt new file mode 100644 index 0000000000000..89fee7084332a --- /dev/null +++ b/packages/SystemUI/shared/src/com/android/systemui/flags/FlagManager.kt @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2021 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.flags + +import android.content.Context +import android.content.Intent +import androidx.concurrent.futures.CallbackToFutureAdapter +import com.google.common.util.concurrent.ListenableFuture + +class FlagManager constructor(val context: Context) { + companion object { + const val RECEIVING_PACKAGE = "com.android.systemui" + const val ACTION_SET_FLAG = "com.android.systemui.action.SET_FLAG" + const val FLAGS_PERMISSION = "com.android.systemui.permission.FLAGS" + const val FIELD_ID = "id" + const val FIELD_VALUE = "value" + } + + fun getFlagsFuture(): ListenableFuture>> { + val knownFlagMap = Flags.collectFlags() + // Possible todo in the future: query systemui async to actually get the known flag ids. + return CallbackToFutureAdapter.getFuture( + CallbackToFutureAdapter.Resolver { + completer: CallbackToFutureAdapter.Completer>> -> + completer.set(knownFlagMap.values as Collection>) + "Retrieving Flags" + }) + } + + fun setFlagValue(id: Int, enabled: Boolean) { + val intent = createIntent(id) + intent.putExtra(FIELD_VALUE, enabled) + + context.sendBroadcast(intent) + } + + fun eraseFlag(id: Int) { + val intent = createIntent(id) + + context.sendBroadcast(intent) + } + + private fun createIntent(id: Int): Intent { + val intent = Intent(ACTION_SET_FLAG) + intent.setPackage(RECEIVING_PACKAGE) + intent.putExtra(FIELD_ID, id) + + return intent + } +} \ No newline at end of file diff --git a/packages/SystemUI/src-debug/com/android/systemui/flags/FeatureFlagManager.java b/packages/SystemUI/src-debug/com/android/systemui/flags/FeatureFlagManager.java index 1eeb51601682d..c2ed1ac6f0e87 100644 --- a/packages/SystemUI/src-debug/com/android/systemui/flags/FeatureFlagManager.java +++ b/packages/SystemUI/src-debug/com/android/systemui/flags/FeatureFlagManager.java @@ -16,6 +16,11 @@ package com.android.systemui.flags; +import static com.android.systemui.flags.FlagManager.ACTION_SET_FLAG; +import static com.android.systemui.flags.FlagManager.FIELD_ID; +import static com.android.systemui.flags.FlagManager.FIELD_VALUE; +import static com.android.systemui.flags.FlagManager.FLAGS_PERMISSION; + import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -55,11 +60,7 @@ public class FeatureFlagManager implements FlagReader, FlagWriter, Dumpable { private static final String SYSPROP_PREFIX = "persist.systemui.flag_"; private static final String FIELD_TYPE = "type"; - private static final String FIELD_ID = "id"; - private static final String FIELD_VALUE = "value"; private static final String TYPE_BOOLEAN = "boolean"; - private static final String ACTION_SET_FLAG = "com.android.systemui.action.SET_FLAG"; - private static final String FLAGS_PERMISSION = "com.android.systemui.permission.FLAGS"; private final SystemPropertiesHelper mSystemPropertiesHelper; private final Map mBooleanFlagCache = new HashMap<>(); diff --git a/packages/SystemUI/plugin/src/com/android/systemui/flags/Flags.java b/packages/SystemUI/src/com/android/systemui/flags/Flags.java similarity index 100% rename from packages/SystemUI/plugin/src/com/android/systemui/flags/Flags.java rename to packages/SystemUI/src/com/android/systemui/flags/Flags.java