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

Commit fdb01b63 authored by Dave Mankoff's avatar Dave Mankoff Committed by Android (Google) Code Review
Browse files

Merge "Add a shared library for setting flags in SysUI." into sc-v2-dev

parents d1956470 93c9d9d6
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -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",
+31 −0
Original line number Diff line number Diff line
@@ -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",
+64 −0
Original line number Diff line number Diff line
/*
 * 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<Collection<Flag<*>>> {
        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<Collection<Flag<*>>> ->
                completer.set(knownFlagMap.values as Collection<Flag<*>>)
                "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
+5 −4
Original line number Diff line number Diff line
@@ -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<Integer, Boolean> mBooleanFlagCache = new HashMap<>();
Loading