1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
/*
* Copyright (C) 2023 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.server.deviceconfig;
import android.annotation.NonNull;
import android.content.Context;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.provider.aidl.IDeviceConfigManager;
import android.provider.DeviceConfigInitializer;
import com.android.server.deviceconfig.db.DeviceConfigDbAdapter;
import com.android.server.deviceconfig.db.DeviceConfigDbHelper;
import java.io.PrintWriter;
import java.util.Map;
import com.android.modules.utils.BasicShellCommandHandler;
/**
* DeviceConfig Service implementation (updatable via Mainline) that uses a SQLite database as a storage mechanism
* for the configuration values.
*
* @hide
*/
public class DeviceConfigServiceImpl extends IDeviceConfigManager.Stub {
private final DeviceConfigDbAdapter mDbAdapter;
public DeviceConfigServiceImpl(Context context) {
DeviceConfigDbHelper dbHelper = new DeviceConfigDbHelper(context);
mDbAdapter = new DeviceConfigDbAdapter(dbHelper.getWritableDatabase());
DeviceConfigInitializer.getDeviceConfigServiceManager()
.getDeviceConfigUpdatableServiceRegisterer()
.register(this);
}
@Override
public Map<String, String> getProperties(String namespace, String[] names) throws RemoteException {
return mDbAdapter.getValuesForNamespace(namespace, names);
}
@Override
public boolean setProperties(String namespace, Map<String, String> values) {
return mDbAdapter.setValues(namespace, values);
}
@Override
public boolean setProperty(String namespace, String key, String value, boolean makeDefault) {
return mDbAdapter.setValue(namespace, key, value, makeDefault);
}
@Override
public boolean deleteProperty(String namespace, String key) {
return mDbAdapter.deleteValue(namespace, key);
}
@Override
public int handleShellCommand(@NonNull ParcelFileDescriptor in,
@NonNull ParcelFileDescriptor out, @NonNull ParcelFileDescriptor err,
@NonNull String[] args) {
return (new MyShellCommand()).exec(
this, in.getFileDescriptor(), out.getFileDescriptor(), err.getFileDescriptor(),
args);
}
static final class MyShellCommand extends BasicShellCommandHandler {
// TODO(b/265948938) implement this
@Override
public int onCommand(String cmd) {
if (cmd == null || "help".equals(cmd) || "-h".equals(cmd)) {
onHelp();
return -1;
}
return -1;
}
@Override
public void onHelp() {
PrintWriter pw = getOutPrintWriter();
pw.println("Device Config implemented in mainline");
}
}
}
|