Moved Content Capture settings to DeviceConfig.

To test, manually played with 'adb shell device_config'. Examples:

$ adb shell device_config list content_capture
$ adb shell device_config delete content_capture enable_contentcapture
$ adb shell stop && adb shell start
$ adb shell service check content_capture
Service content_capture: not found

$ adb shell device_config put content_capture enable_contentcapture always
$ adb shell stop && adb shell start
$ adb shell service check content_capture
Service content_capture: found

Then ran CTS and FrameworkCoreTests below...

Test: atest CtsContentCaptureServiceTestCases \
      FrameworksCoreTests:android.provider.SettingsBackupTest#secureSettingsBackedUpOrBlacklisted
Test: m update-api

Bug: 121037717
Bug: 121153631

Change-Id: Ib93bf8181253228ccbdb3edbd84c5d0431c84eb4
This commit is contained in:
Felipe Leme
2019-01-24 14:55:03 -08:00
parent d45ffc7977
commit 70bcf38e2c
7 changed files with 43 additions and 41 deletions

View File

@@ -5749,6 +5749,10 @@ package android.provider {
field public static final String PROPERTY_SERVICE_ENABLED = "service_enabled";
}
public static interface DeviceConfig.ContentCapture {
field public static final String NAMESPACE = "content_capture";
}
public static interface DeviceConfig.FsiBoot {
field public static final String NAMESPACE = "fsi_boot";
field public static final String OOB_ENABLED = "oob_enabled";

View File

@@ -69,6 +69,39 @@ public final class DeviceConfig {
@SystemApi
public static final String NAMESPACE_AUTOFILL = "autofill";
/**
* ContentCapture-related properties definitions.
*
* @hide
*/
@SystemApi
public interface ContentCapture {
String NAMESPACE = "content_capture";
/**
* Property used by {@code com.android.server.SystemServer} on start to decide whether
* the Content Capture service should be created or not.
*
* <p>Possible values are:
*
* <ul>
* <li>If set to {@code default}, it will only be set if the OEM provides and defines the
* service name by overlaying {@code config_defaultContentCaptureService} (this is the
* "default" mode)
* <li>If set to {@code always}, it will always be enabled, even when the resource is not
* overlaid (this is useful during development and to run the CTS tests on AOSP builds).
* <li>Otherwise, it's explicitly disabled (this could work as a "kill switch" so OEMs
* can disable it remotely in case of emergency by setting to something else (like
* {@code "false"}); notice that it's also disabled if the OEM doesn't explicitly set one
* of the values above).
* </ul>
*
* @hide
*/
// TODO(b/121153631): revert back to SERVICE_EXPLICITLY_ENABLED approach
String PROPERTY_CONTENTCAPTURE_ENABLED = "enable_contentcapture";
}
/**
* Namespace for content capture feature used by on-device machine intelligence
* to provide suggestions in a privacy-safe manner.

View File

@@ -13261,29 +13261,6 @@ public final class Settings {
public static final String MAX_SOUND_TRIGGER_DETECTION_SERVICE_OPS_PER_DAY =
"max_sound_trigger_detection_service_ops_per_day";
/**
* Property used by {@code com.android.server.SystemServer} on start to decide whether
* the Content Capture service should be created or not.
*
* <p>Possible values are:
*
* <ul>
* <li>If set to {@code default}, it will only be set if the OEM provides and defines the
* service name by overlaying {@code config_defaultContentCaptureService} (this is the
* "default" mode)
* <li>If set to {@code always}, it will always be enabled, even when the resource is not
* overlaid (this is useful during development and to run the CTS tests on AOSP builds).
* <li>Otherwise, it's explicitly disabled (this could work as a "kill switch" so OEMs
* can disable it remotely in case of emergency by setting to something else (like
* {@code "false"}); notice that it's also disabled if the OEM doesn't explicitly set one
* of the values above).
* </ul>
*
* @hide
*/
public static final String CONTENT_CAPTURE_SERVICE_EXPLICITLY_ENABLED =
"content_capture_service_explicitly_enabled";
/** {@hide} */
public static final String ISOLATED_STORAGE_LOCAL = "isolated_storage_local";
/** {@hide} */

View File

@@ -230,12 +230,7 @@ message GlobalSettingsProto {
}
optional Connectivity connectivity = 32;
message ContentCapture {
option (android.msg_privacy).dest = DEST_EXPLICIT;
optional SettingProto service_explicitly_enabled = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
}
optional ContentCapture content_capture = 145;
reserved 145; // Used to be ContentCapture, which moved to DeviceConfig
optional SettingProto contact_metadata_sync_enabled = 33 [ (android.privacy).dest = DEST_AUTOMATIC ];
optional SettingProto contacts_database_wal_enabled = 34 [ (android.privacy).dest = DEST_AUTOMATIC ];

View File

@@ -192,7 +192,6 @@ public class SettingsBackupTest {
Settings.Global.CONNECTIVITY_METRICS_BUFFER_SIZE,
Settings.Global.CONNECTIVITY_SAMPLING_INTERVAL_IN_SECONDS,
Settings.Global.CONTACT_METADATA_SYNC_ENABLED,
Settings.Global.CONTENT_CAPTURE_SERVICE_EXPLICITLY_ENABLED,
Settings.Global.CONVERSATION_ACTIONS_UPDATE_CONTENT_URL,
Settings.Global.CONVERSATION_ACTIONS_UPDATE_METADATA_URL,
Settings.Global.CONTACTS_DATABASE_WAL_ENABLED,

View File

@@ -422,12 +422,6 @@ class SettingsProtoDumpUtil {
Settings.Global.CONTACTS_DATABASE_WAL_ENABLED,
GlobalSettingsProto.CONTACTS_DATABASE_WAL_ENABLED);
final long contentCaptureToken = p.start(GlobalSettingsProto.CONTENT_CAPTURE);
dumpSetting(s, p,
Settings.Global.CONTENT_CAPTURE_SERVICE_EXPLICITLY_ENABLED,
GlobalSettingsProto.ContentCapture.SERVICE_EXPLICITLY_ENABLED);
p.end(contentCaptureToken);
final long dataToken = p.start(GlobalSettingsProto.DATA);
// Settings.Global.DEFAULT_RESTRICT_BACKGROUND_DATA intentionally excluded.
dumpSetting(s, p,

View File

@@ -55,6 +55,7 @@ import android.os.SystemProperties;
import android.os.Trace;
import android.os.UserHandle;
import android.os.storage.IStorageManager;
import android.provider.DeviceConfig;
import android.provider.Settings;
import android.sysprop.VoldProperties;
import android.text.TextUtils;
@@ -2212,10 +2213,9 @@ public final class SystemServer {
}
private void startContentCaptureService(@NonNull Context context) {
// Check if it was explicitly enabled by Settings
final String settings = Settings.Global.getString(context.getContentResolver(),
Settings.Global.CONTENT_CAPTURE_SERVICE_EXPLICITLY_ENABLED);
// Check if it was explicitly enabled by DeviceConfig
final String settings = DeviceConfig.getProperty(DeviceConfig.ContentCapture.NAMESPACE,
DeviceConfig.ContentCapture.PROPERTY_CONTENTCAPTURE_ENABLED);
if (settings == null) {
// Better be safe than sorry...
Slog.d(TAG, "ContentCaptureService disabled because its not set by OEM");
@@ -2224,7 +2224,7 @@ public final class SystemServer {
switch (settings) {
case "always":
// Should be used only during development
Slog.d(TAG, "ContentCaptureService explicitly enabled by Settings");
Slog.d(TAG, "ContentCaptureService explicitly enabled by DeviceConfig");
break;
case "default":
// Default case: check if OEM overlaid the resource that defines the service.