From 50a7e3ea4113a3f6fb4e21c36fc7da89862f36e1 Mon Sep 17 00:00:00 2001 From: Andrey Epin Date: Tue, 20 Dec 2022 10:17:36 -0800 Subject: Feature flags support in Chooser A minimalistic replica of the SysUI feature flag infrastructure so the app could both reuse some of the existing flag infrastructure (local flag flipping) and have features controlled remotely (through DeviceConfig). A re-introduction of reverted ag/20796272 with the fixed release build variant. Bug: 262578843 Test: Manual tests with some injected debug code and local flag flipping Test: Smoke tests both build variants Change-Id: Ie536172020bcb7e6cd96f44c228a6941004858f8 --- .../intentresolver/flags/DeviceConfigProxy.kt | 28 ++++++++++++++++++++++ .../intentresolver/flags/FeatureFlagRepository.kt | 25 +++++++++++++++++++ java/src/com/android/intentresolver/flags/Flags.kt | 28 ++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 java/src/com/android/intentresolver/flags/DeviceConfigProxy.kt create mode 100644 java/src/com/android/intentresolver/flags/FeatureFlagRepository.kt create mode 100644 java/src/com/android/intentresolver/flags/Flags.kt (limited to 'java/src') diff --git a/java/src/com/android/intentresolver/flags/DeviceConfigProxy.kt b/java/src/com/android/intentresolver/flags/DeviceConfigProxy.kt new file mode 100644 index 00000000..ac782471 --- /dev/null +++ b/java/src/com/android/intentresolver/flags/DeviceConfigProxy.kt @@ -0,0 +1,28 @@ +/* + * 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.intentresolver.flags + +import android.provider.DeviceConfig +import com.android.systemui.flags.ParcelableFlag + +internal class DeviceConfigProxy { + fun isEnabled(flag: ParcelableFlag): Boolean? { + return runCatching { + DeviceConfig.getBoolean(flag.namespace, flag.name, flag.default) + }.getOrDefault(null) + } +} diff --git a/java/src/com/android/intentresolver/flags/FeatureFlagRepository.kt b/java/src/com/android/intentresolver/flags/FeatureFlagRepository.kt new file mode 100644 index 00000000..5b5d769c --- /dev/null +++ b/java/src/com/android/intentresolver/flags/FeatureFlagRepository.kt @@ -0,0 +1,25 @@ +/* + * 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.intentresolver.flags + +import com.android.systemui.flags.ReleasedFlag +import com.android.systemui.flags.UnreleasedFlag + +interface FeatureFlagRepository { + fun isEnabled(flag: UnreleasedFlag): Boolean + fun isEnabled(flag: ReleasedFlag): Boolean +} diff --git a/java/src/com/android/intentresolver/flags/Flags.kt b/java/src/com/android/intentresolver/flags/Flags.kt new file mode 100644 index 00000000..c9271a6a --- /dev/null +++ b/java/src/com/android/intentresolver/flags/Flags.kt @@ -0,0 +1,28 @@ +/* + * 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.intentresolver.flags + +import com.android.systemui.flags.UnreleasedFlag + +// keep in sync with com.android.systemui.flags.Flags to make the flags available in the +// flag flipper app (see go/sysui-flags) +object Flags { + @JvmField + val SHARESHEET_CUSTOM_ACTIONS = UnreleasedFlag( + id = 1501, name = "sharesheet_custom_actions", namespace = "systemui", teamfood = false + ) +} -- cgit v1.2.3-59-g8ed1b