From ddd78b2d4faf9a504b236abf8bae22f07ba4aa34 Mon Sep 17 00:00:00 2001 From: Gustav Sennton Date: Mon, 18 Feb 2019 17:58:12 +0000 Subject: [PATCH] Move NotificationAssistant flags into SystemUi namespace. Create SystemUi DeviceConfig namespace and add a class to store all its flags in. These flags will be shared between the SystemUi package and other Notification packages - like ExtServices and NotificationManagerService. Performing experiments across different packages is much more involved than performed single-package experiments. Therefore, we put flags related to Notifications into the System UI experiment flag package. Bug: 120792826 Test: atest AssistantSettingsTest Change-Id: I83992291e660ab092bed8d22d1abaaa2bd9d6f9a --- api/system-current.txt | 9 +- core/java/android/provider/DeviceConfig.java | 19 +--- .../sysui/SystemUiDeviceConfigFlags.java | 49 +++++++++ .../notification/AssistantSettings.java | 18 ++-- .../notification/AssistantSettingsTest.java | 99 ++++++++++--------- 5 files changed, 112 insertions(+), 82 deletions(-) create mode 100644 core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java diff --git a/api/system-current.txt b/api/system-current.txt index b580deb68c707..0e87fc74cc12f 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5791,6 +5791,7 @@ package android.provider { field public static final String NAMESPACE_GAME_DRIVER = "game_driver"; field public static final String NAMESPACE_INPUT_NATIVE_BOOT = "input_native_boot"; field public static final String NAMESPACE_NETD_NATIVE = "netd_native"; + field public static final String NAMESPACE_SYSTEMUI = "systemui"; } public static interface DeviceConfig.ActivityManager { @@ -5833,14 +5834,6 @@ package android.provider { field public static final String NAMESPACE = "media_native"; } - public static interface DeviceConfig.NotificationAssistant { - field public static final String GENERATE_ACTIONS = "generate_actions"; - field public static final String GENERATE_REPLIES = "generate_replies"; - field public static final String MAX_MESSAGES_TO_EXTRACT = "max_messages_to_extract"; - field public static final String MAX_SUGGESTIONS = "max_suggestions"; - field public static final String NAMESPACE = "notification_assistant"; - } - public static interface DeviceConfig.OnPropertyChangedListener { method public void onPropertyChanged(String, String, String); } diff --git a/core/java/android/provider/DeviceConfig.java b/core/java/android/provider/DeviceConfig.java index 868a36b56bf43..c6ee257904c51 100644 --- a/core/java/android/provider/DeviceConfig.java +++ b/core/java/android/provider/DeviceConfig.java @@ -100,27 +100,12 @@ public final class DeviceConfig { public static final String NAMESPACE_NETD_NATIVE = "netd_native"; /** - * Namespace for features related to the ExtServices Notification Assistant. - * These features are applied immediately. + * Namespace for System UI related features. * * @hide */ @SystemApi - public interface NotificationAssistant { - String NAMESPACE = "notification_assistant"; - /** - * Whether the Notification Assistant should generate replies for notifications. - */ - String GENERATE_REPLIES = "generate_replies"; - /** - * Whether the Notification Assistant should generate contextual actions for notifications. - */ - String GENERATE_ACTIONS = "generate_actions"; - - String MAX_MESSAGES_TO_EXTRACT = "max_messages_to_extract"; - - String MAX_SUGGESTIONS = "max_suggestions"; - } + public static final String NAMESPACE_SYSTEMUI = "systemui"; /** * Namespace for all runtime related features. diff --git a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java new file mode 100644 index 0000000000000..5b778d2a6acd4 --- /dev/null +++ b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2019 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.internal.config.sysui; + +/** + * Keeps the flags related to the SystemUI namespace in {@link DeviceConfig}. + * + * @hide + */ +public final class SystemUiDeviceConfigFlags { + + /** + * Whether the Notification Assistant should generate replies for notifications. + */ + public static final String NAS_GENERATE_REPLIES = "nas_generate_replies"; + + /** + * Whether the Notification Assistant should generate contextual actions for notifications. + */ + public static final String NAS_GENERATE_ACTIONS = "nas_generate_actions"; + + /** + * The maximum number of messages the Notification Assistant should extract from a + * conversation when constructing responses for that conversation. + */ + public static final String NAS_MAX_MESSAGES_TO_EXTRACT = "nas_max_messages_to_extract"; + + /** + * The maximum number of suggestions the Notification Assistant should provide for a + * messaging conversation. + */ + public static final String NAS_MAX_SUGGESTIONS = "nas_max_suggestions"; + + private SystemUiDeviceConfigFlags() { } +} diff --git a/packages/ExtServices/src/android/ext/services/notification/AssistantSettings.java b/packages/ExtServices/src/android/ext/services/notification/AssistantSettings.java index 6cf72a45a06be..ba361c40f5c6f 100644 --- a/packages/ExtServices/src/android/ext/services/notification/AssistantSettings.java +++ b/packages/ExtServices/src/android/ext/services/notification/AssistantSettings.java @@ -26,6 +26,7 @@ import android.text.TextUtils; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; /** * Observes the settings for {@link Assistant}. @@ -103,7 +104,7 @@ final class AssistantSettings extends ContentObserver { private void registerDeviceConfigs() { DeviceConfig.addOnPropertyChangedListener( - DeviceConfig.NotificationAssistant.NAMESPACE, + DeviceConfig.NAMESPACE_SYSTEMUI, this::postToHandler, this::onDeviceConfigPropertyChanged); @@ -117,7 +118,7 @@ final class AssistantSettings extends ContentObserver { @VisibleForTesting void onDeviceConfigPropertyChanged(String namespace, String name, String value) { - if (!DeviceConfig.NotificationAssistant.NAMESPACE.equals(namespace)) { + if (!DeviceConfig.NAMESPACE_SYSTEMUI.equals(namespace)) { Log.e(LOG_TAG, "Received update from DeviceConfig for unrelated namespace: " + namespace + " " + name + "=" + value); return; @@ -128,17 +129,17 @@ final class AssistantSettings extends ContentObserver { private void updateFromDeviceConfigFlags() { mGenerateReplies = DeviceConfigHelper.getBoolean( - DeviceConfig.NotificationAssistant.GENERATE_REPLIES, DEFAULT_GENERATE_REPLIES); + SystemUiDeviceConfigFlags.NAS_GENERATE_REPLIES, DEFAULT_GENERATE_REPLIES); mGenerateActions = DeviceConfigHelper.getBoolean( - DeviceConfig.NotificationAssistant.GENERATE_ACTIONS, DEFAULT_GENERATE_ACTIONS); + SystemUiDeviceConfigFlags.NAS_GENERATE_ACTIONS, DEFAULT_GENERATE_ACTIONS); mMaxMessagesToExtract = DeviceConfigHelper.getInteger( - DeviceConfig.NotificationAssistant.MAX_MESSAGES_TO_EXTRACT, + SystemUiDeviceConfigFlags.NAS_MAX_MESSAGES_TO_EXTRACT, DEFAULT_MAX_MESSAGES_TO_EXTRACT); mMaxSuggestions = DeviceConfigHelper.getInteger( - DeviceConfig.NotificationAssistant.MAX_SUGGESTIONS, DEFAULT_MAX_SUGGESTIONS); + SystemUiDeviceConfigFlags.NAS_MAX_SUGGESTIONS, DEFAULT_MAX_SUGGESTIONS); mOnUpdateRunnable.run(); } @@ -193,8 +194,7 @@ final class AssistantSettings extends ContentObserver { private static String getValue(String key) { return DeviceConfig.getProperty( - DeviceConfig.NotificationAssistant.NAMESPACE, - key); + DeviceConfig.NAMESPACE_SYSTEMUI, key); } } @@ -202,4 +202,4 @@ final class AssistantSettings extends ContentObserver { AssistantSettings createAndRegister(Handler handler, ContentResolver resolver, int userId, Runnable onUpdateRunnable); } -} \ No newline at end of file +} diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/AssistantSettingsTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/AssistantSettingsTest.java index d890c1ae81fb7..851e2f269a956 100644 --- a/packages/ExtServices/tests/src/android/ext/services/notification/AssistantSettingsTest.java +++ b/packages/ExtServices/tests/src/android/ext/services/notification/AssistantSettingsTest.java @@ -17,7 +17,6 @@ package android.ext.services.notification; import static android.ext.services.notification.AssistantSettings.DEFAULT_MAX_SUGGESTIONS; -import static android.provider.DeviceConfig.NotificationAssistant; import static android.provider.DeviceConfig.setProperty; import static junit.framework.Assert.assertFalse; @@ -30,12 +29,15 @@ import static org.mockito.Mockito.verify; import android.content.ContentResolver; import android.os.Handler; import android.os.Looper; +import android.provider.DeviceConfig; import android.provider.Settings; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; import android.support.test.uiautomator.UiDevice; import android.testing.TestableContext; +import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; + import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -49,7 +51,7 @@ import java.io.IOException; @RunWith(AndroidJUnit4.class) public class AssistantSettingsTest { private static final String CLEAR_DEVICE_CONFIG_KEY_CMD = - "device_config delete " + NotificationAssistant.NAMESPACE; + "device_config delete " + DeviceConfig.NAMESPACE_SYSTEMUI; private static final int USER_ID = 5; @@ -87,13 +89,13 @@ public class AssistantSettingsTest { @Test public void testGenerateRepliesDisabled() { setProperty( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_REPLIES, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_REPLIES, "false", false /* makeDefault */); mAssistantSettings.onDeviceConfigPropertyChanged( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_REPLIES, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_REPLIES, "false"); assertFalse(mAssistantSettings.mGenerateReplies); @@ -102,13 +104,13 @@ public class AssistantSettingsTest { @Test public void testGenerateRepliesEnabled() { setProperty( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_REPLIES, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_REPLIES, "true", false /* makeDefault */); mAssistantSettings.onDeviceConfigPropertyChanged( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_REPLIES, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_REPLIES, "true"); assertTrue(mAssistantSettings.mGenerateReplies); @@ -117,25 +119,25 @@ public class AssistantSettingsTest { @Test public void testGenerateRepliesEmptyFlag() { setProperty( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_REPLIES, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_REPLIES, "false", false /* makeDefault */); mAssistantSettings.onDeviceConfigPropertyChanged( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_REPLIES, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_REPLIES, "false"); assertFalse(mAssistantSettings.mGenerateReplies); setProperty( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_REPLIES, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_REPLIES, "", false /* makeDefault */); mAssistantSettings.onDeviceConfigPropertyChanged( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_REPLIES, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_REPLIES, ""); // Go back to the default value. @@ -145,13 +147,13 @@ public class AssistantSettingsTest { @Test public void testGenerateActionsDisabled() { setProperty( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_ACTIONS, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_ACTIONS, "false", false /* makeDefault */); mAssistantSettings.onDeviceConfigPropertyChanged( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_ACTIONS, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_ACTIONS, "false"); assertFalse(mAssistantSettings.mGenerateActions); @@ -160,13 +162,13 @@ public class AssistantSettingsTest { @Test public void testGenerateActionsEnabled() { setProperty( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_ACTIONS, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_ACTIONS, "true", false /* makeDefault */); mAssistantSettings.onDeviceConfigPropertyChanged( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_ACTIONS, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_ACTIONS, "true"); assertTrue(mAssistantSettings.mGenerateActions); @@ -175,25 +177,25 @@ public class AssistantSettingsTest { @Test public void testGenerateActionsEmptyFlag() { setProperty( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_ACTIONS, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_ACTIONS, "false", false /* makeDefault */); mAssistantSettings.onDeviceConfigPropertyChanged( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_ACTIONS, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_ACTIONS, "false"); assertFalse(mAssistantSettings.mGenerateActions); setProperty( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_ACTIONS, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_ACTIONS, "", false /* makeDefault */); mAssistantSettings.onDeviceConfigPropertyChanged( - NotificationAssistant.NAMESPACE, - NotificationAssistant.GENERATE_ACTIONS, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_GENERATE_ACTIONS, ""); // Go back to the default value. @@ -203,13 +205,13 @@ public class AssistantSettingsTest { @Test public void testMaxMessagesToExtract() { setProperty( - NotificationAssistant.NAMESPACE, - NotificationAssistant.MAX_MESSAGES_TO_EXTRACT, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_MAX_MESSAGES_TO_EXTRACT, "10", false /* makeDefault */); mAssistantSettings.onDeviceConfigPropertyChanged( - NotificationAssistant.NAMESPACE, - NotificationAssistant.MAX_MESSAGES_TO_EXTRACT, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_MAX_MESSAGES_TO_EXTRACT, "10"); assertEquals(10, mAssistantSettings.mMaxMessagesToExtract); @@ -218,13 +220,13 @@ public class AssistantSettingsTest { @Test public void testMaxSuggestions() { setProperty( - NotificationAssistant.NAMESPACE, - NotificationAssistant.MAX_SUGGESTIONS, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_MAX_SUGGESTIONS, "5", false /* makeDefault */); mAssistantSettings.onDeviceConfigPropertyChanged( - NotificationAssistant.NAMESPACE, - NotificationAssistant.MAX_SUGGESTIONS, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_MAX_SUGGESTIONS, "5"); assertEquals(5, mAssistantSettings.mMaxSuggestions); @@ -233,8 +235,8 @@ public class AssistantSettingsTest { @Test public void testMaxSuggestionsEmpty() { mAssistantSettings.onDeviceConfigPropertyChanged( - NotificationAssistant.NAMESPACE, - NotificationAssistant.MAX_SUGGESTIONS, + DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.NAS_MAX_SUGGESTIONS, ""); assertEquals(DEFAULT_MAX_SUGGESTIONS, mAssistantSettings.mMaxSuggestions); @@ -278,13 +280,14 @@ public class AssistantSettingsTest { private static void clearDeviceConfig() throws IOException { UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); uiDevice.executeShellCommand( - CLEAR_DEVICE_CONFIG_KEY_CMD + " " + NotificationAssistant.GENERATE_ACTIONS); + CLEAR_DEVICE_CONFIG_KEY_CMD + " " + SystemUiDeviceConfigFlags.NAS_GENERATE_ACTIONS); uiDevice.executeShellCommand( - CLEAR_DEVICE_CONFIG_KEY_CMD + " " + NotificationAssistant.GENERATE_REPLIES); + CLEAR_DEVICE_CONFIG_KEY_CMD + " " + SystemUiDeviceConfigFlags.NAS_GENERATE_REPLIES); uiDevice.executeShellCommand( - CLEAR_DEVICE_CONFIG_KEY_CMD + " " + NotificationAssistant.MAX_MESSAGES_TO_EXTRACT); + CLEAR_DEVICE_CONFIG_KEY_CMD + " " + + SystemUiDeviceConfigFlags.NAS_MAX_MESSAGES_TO_EXTRACT); uiDevice.executeShellCommand( - CLEAR_DEVICE_CONFIG_KEY_CMD + " " + NotificationAssistant.MAX_SUGGESTIONS); + CLEAR_DEVICE_CONFIG_KEY_CMD + " " + SystemUiDeviceConfigFlags.NAS_MAX_SUGGESTIONS); } }