Add local transport parameters for transport flags GTS test
Added parameters for local transport in secure setting for setting up
local transport to test transport flags GTS test.
Test: GTS test in topic CL.
Bug: 73100304
Change-Id: If654175d91fdf1ea68db0f3320d59b2b770a4db3
diff --git a/core/java/android/app/backup/BackupAgent.java b/core/java/android/app/backup/BackupAgent.java
index 72eb494..d36a794 100644
--- a/core/java/android/app/backup/BackupAgent.java
+++ b/core/java/android/app/backup/BackupAgent.java
@@ -163,6 +163,16 @@
*/
public static final int FLAG_DEVICE_TO_DEVICE_TRANSFER = 2;
+ /**
+ * Flag for {@link BackupDataOutput#getTransportFlags()} and
+ * {@link FullBackupDataOutput#getTransportFlags()} only.
+ *
+ * <p>Used for internal testing only. Do not check this flag in production code.
+ *
+ * @hide
+ */
+ public static final int FLAG_FAKE_CLIENT_SIDE_ENCRYPTION_ENABLED = 1 << 31;
+
Handler mHandler = null;
Handler getHandler() {
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index e381693..df29fcb 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -7679,6 +7679,24 @@
*/
public static final String BACKUP_MANAGER_CONSTANTS = "backup_manager_constants";
+
+ /**
+ * Local transport parameters so we can configure it for tests.
+ * This is encoded as a key=value list, separated by commas.
+ *
+ * The following keys are supported:
+ *
+ * <pre>
+ * fake_encryption_flag (boolean)
+ * </pre>
+ *
+ * <p>
+ * Type: string
+ * @hide
+ */
+ public static final String BACKUP_LOCAL_TRANSPORT_PARAMETERS =
+ "backup_local_transport_parameters";
+
/**
* Flag to set if the system should predictively attempt to re-enable Bluetooth while
* the user is driving.
diff --git a/core/java/com/android/internal/backup/LocalTransport.java b/core/java/com/android/internal/backup/LocalTransport.java
index 543bd0c..b049db3 100644
--- a/core/java/com/android/internal/backup/LocalTransport.java
+++ b/core/java/com/android/internal/backup/LocalTransport.java
@@ -16,6 +16,7 @@
package com.android.internal.backup;
+import android.app.backup.BackupAgent;
import android.app.backup.BackupDataInput;
import android.app.backup.BackupDataOutput;
import android.app.backup.BackupTransport;
@@ -98,6 +99,7 @@
private FileInputStream mCurFullRestoreStream;
private FileOutputStream mFullRestoreSocketStream;
private byte[] mFullRestoreBuffer;
+ private final LocalTransportParameters mParameters;
private void makeDataDirs() {
mCurrentSetDir.mkdirs();
@@ -105,11 +107,16 @@
mCurrentSetIncrementalDir.mkdir();
}
- public LocalTransport(Context context) {
+ public LocalTransport(Context context, LocalTransportParameters parameters) {
mContext = context;
+ mParameters = parameters;
makeDataDirs();
}
+ LocalTransportParameters getParameters() {
+ return mParameters;
+ }
+
@Override
public String name() {
return new ComponentName(mContext, this.getClass()).flattenToShortString();
@@ -143,6 +150,17 @@
}
@Override
+ public int getTransportFlags() {
+ int flags = super.getTransportFlags();
+ // Testing for a fake flag and having it set as a boolean in settings prevents anyone from
+ // using this it to pull data from the agent
+ if (mParameters.isFakeEncryptionFlag()) {
+ flags |= BackupAgent.FLAG_FAKE_CLIENT_SIDE_ENCRYPTION_ENABLED;
+ }
+ return flags;
+ }
+
+ @Override
public long requestBackupTime() {
// any time is a good time for local backup
return 0;
diff --git a/core/java/com/android/internal/backup/LocalTransportParameters.java b/core/java/com/android/internal/backup/LocalTransportParameters.java
new file mode 100644
index 0000000..390fae9
--- /dev/null
+++ b/core/java/com/android/internal/backup/LocalTransportParameters.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2018 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.backup;
+
+import android.content.ContentResolver;
+import android.database.ContentObserver;
+import android.os.Handler;
+import android.provider.Settings;
+import android.util.KeyValueListParser;
+import android.util.Slog;
+
+class LocalTransportParameters {
+ private static final String TAG = "LocalTransportParams";
+ private static final String SETTING = Settings.Secure.BACKUP_LOCAL_TRANSPORT_PARAMETERS;
+ private static final String KEY_FAKE_ENCRYPTION_FLAG = "fake_encryption_flag";
+
+ private final KeyValueListParser mParser = new KeyValueListParser(',');
+ private final ContentObserver mObserver;
+ private final ContentResolver mResolver;
+ private boolean mFakeEncryptionFlag;
+
+ LocalTransportParameters(Handler handler, ContentResolver resolver) {
+ mObserver = new Observer(handler);
+ mResolver = resolver;
+ }
+
+ /** Observes for changes in the setting. This method MUST be paired with {@link #stop()}. */
+ void start() {
+ mResolver.registerContentObserver(Settings.Secure.getUriFor(SETTING), false, mObserver);
+ update();
+ }
+
+ /** Stop observing for changes in the setting. */
+ void stop() {
+ mResolver.unregisterContentObserver(mObserver);
+ }
+
+ boolean isFakeEncryptionFlag() {
+ return mFakeEncryptionFlag;
+ }
+
+ private void update() {
+ String parameters = "";
+ try {
+ parameters = Settings.Secure.getString(mResolver, SETTING);
+ } catch (IllegalArgumentException e) {
+ Slog.e(TAG, "Malformed " + SETTING + " setting: " + e.getMessage());
+ }
+ mParser.setString(parameters);
+ mFakeEncryptionFlag = mParser.getBoolean(KEY_FAKE_ENCRYPTION_FLAG, false);
+ }
+
+ private class Observer extends ContentObserver {
+ private Observer(Handler handler) {
+ super(handler);
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ update();
+ }
+ }
+}
diff --git a/core/java/com/android/internal/backup/LocalTransportService.java b/core/java/com/android/internal/backup/LocalTransportService.java
index 77ac313..69c48e2 100644
--- a/core/java/com/android/internal/backup/LocalTransportService.java
+++ b/core/java/com/android/internal/backup/LocalTransportService.java
@@ -26,8 +26,16 @@
@Override
public void onCreate() {
if (sTransport == null) {
- sTransport = new LocalTransport(this);
+ LocalTransportParameters parameters =
+ new LocalTransportParameters(getMainThreadHandler(), getContentResolver());
+ sTransport = new LocalTransport(this, parameters);
}
+ sTransport.getParameters().start();
+ }
+
+ @Override
+ public void onDestroy() {
+ sTransport.getParameters().stop();
}
@Override
diff --git a/core/proto/android/providers/settings.proto b/core/proto/android/providers/settings.proto
index ff0f4fd..34f716b 100644
--- a/core/proto/android/providers/settings.proto
+++ b/core/proto/android/providers/settings.proto
@@ -662,10 +662,11 @@
optional SettingProto backup_manager_constants = 169;
optional SettingProto show_first_crash_dialog_dev_option = 195 [ (android.privacy).dest = DEST_AUTOMATIC ];
optional SettingProto bluetooth_on_while_driving = 196 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto backup_local_transport_parameters = 197;
// Please insert fields in the same order as in
// frameworks/base/core/java/android/provider/Settings.java.
- // Next tag = 197
+ // Next tag = 198
}
message SystemSettingsProto {
diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
index da86c9f..370fc33 100644
--- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
@@ -17,9 +17,11 @@
package android.provider;
import static com.google.android.collect.Sets.newHashSet;
+
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.is;
+
import static java.lang.reflect.Modifier.isFinal;
import static java.lang.reflect.Modifier.isPublic;
import static java.lang.reflect.Modifier.isStatic;
@@ -556,6 +558,7 @@
Settings.Secure.VOICE_RECOGNITION_SERVICE,
Settings.Secure.INSTANT_APPS_ENABLED,
Settings.Secure.BACKUP_MANAGER_CONSTANTS,
+ Settings.Secure.BACKUP_LOCAL_TRANSPORT_PARAMETERS,
Settings.Secure.KEYGUARD_SLICE_URI,
Settings.Secure.PARENTAL_CONTROL_ENABLED,
Settings.Secure.PARENTAL_CONTROL_REDIRECT_URL,