Add a new system service for blob store management.

This change adds a bare-bones system service, implementation will follow
later.

Bug: 143559646
Test: atest cts/tests/BlobStore/src/com/android/cts/blob/BlobStoreManagerTest.java
Change-Id: Idf21dfcd11dd32a42b62c6ad965d6f5ad7eed1b4
This commit is contained in:
Sudheer Shanka 2019-10-04 16:16:13 -07:00
parent 9bf17be527
commit f5b36964e0
12 changed files with 227 additions and 0 deletions

View File

@ -212,6 +212,7 @@ filegroup {
name: "framework-non-updatable-sources",
srcs: [
// Java/AIDL sources under frameworks/base
":framework-blobstore-sources",
":framework-core-sources",
":framework-drm-sources",
":framework-graphics-sources",

View File

@ -0,0 +1,40 @@
// 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.
filegroup {
name: "framework-blobstore-sources",
srcs: [
"java/**/*.java",
"java/**/*.aidl"
],
path: "java",
}
java_library {
name: "blobstore-framework",
installable: false,
compile_dex: true,
sdk_version: "core_platform",
srcs: [
":framework-blobstore-sources",
],
aidl: {
export_include_dirs: [
"java",
],
},
libs: [
"framework-minus-apex",
],
}

View File

@ -0,0 +1,41 @@
/*
* Copyright 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 android.app.blob;
import android.annotation.SystemService;
import android.content.Context;
/**
* This class provides access to the blob store maintained by the system.
*
* Apps can publish data blobs which might be useful for other apps on the device to be
* maintained by the system and apps that would like to access these data blobs can do so
* by addressing them via their cryptographically secure hashes.
*
* TODO: make this public once the APIs are added.
* @hide
*/
@SystemService(Context.BLOB_STORE_SERVICE)
public class BlobStoreManager {
private final Context mContext;
private final IBlobStoreManager mService;
/** @hide */
public BlobStoreManager(Context context, IBlobStoreManager service) {
mContext = context;
mService = service;
}
}

View File

@ -0,0 +1,34 @@
/*
* Copyright 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 android.app.blob;
import android.app.SystemServiceRegistry;
import android.content.Context;
/**
* This is where the BlobStoreManagerService wrapper is registered.
*
* @hide
*/
public class BlobStoreManagerFrameworkInitializer {
/** Register the BlobStoreManager wrapper class */
public static void initialize() {
SystemServiceRegistry.registerCachedService(
Context.BLOB_STORE_SERVICE, BlobStoreManager.class,
(context, service) ->
new BlobStoreManager(context, IBlobStoreManager.Stub.asInterface(service)));
}
}

View File

@ -0,0 +1,20 @@
/**
* Copyright 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 android.app.blob;
/** {@hide} */
interface IBlobStoreManager {
}

View File

@ -0,0 +1,27 @@
// 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.
java_library {
name: "blobstore-service",
installable: true,
srcs: [
"java/**/*.java",
],
libs: [
"framework",
"services.core",
],
}

View File

@ -0,0 +1,39 @@
/*
* Copyright 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.server.blob;
import android.app.blob.IBlobStoreManager;
import android.content.Context;
import com.android.server.SystemService;
/**
* Service responsible for maintaining and facilitating access to data blobs published by apps.
*/
public class BlobStoreManagerService extends SystemService {
public BlobStoreManagerService(Context context) {
super(context);
}
@Override
public void onStart() {
publishBinderService(Context.BLOB_STORE_SERVICE, new Stub());
}
private class Stub extends IBlobStoreManager.Stub {
}
}

View File

@ -701,6 +701,7 @@ package android.content {
method public int getUserId();
method public void setAutofillOptions(@Nullable android.content.AutofillOptions);
method public void setContentCaptureOptions(@Nullable android.content.ContentCaptureOptions);
field public static final String BLOB_STORE_SERVICE = "blob_store";
field public static final String BUGREPORT_SERVICE = "bugreport";
field public static final String CONTENT_CAPTURE_MANAGER_SERVICE = "content_capture";
field public static final String DEVICE_IDLE_CONTROLLER = "deviceidle";

View File

@ -546,6 +546,7 @@ android.app.backup.IBackupManager$Stub$Proxy
android.app.backup.IBackupManager$Stub
android.app.backup.IBackupManager
android.app.backup.SharedPreferencesBackupHelper
android.app.blob.BlobStoreManagerFrameworkInitializer
android.app.contentsuggestions.ContentSuggestionsManager
android.app.job.IJobCallback$Stub$Proxy
android.app.job.IJobCallback$Stub

View File

@ -21,6 +21,7 @@ import android.accounts.IAccountManager;
import android.app.ContextImpl.ServiceInitializationState;
import android.app.admin.DevicePolicyManager;
import android.app.admin.IDevicePolicyManager;
import android.app.blob.BlobStoreManagerFrameworkInitializer;
import android.app.contentsuggestions.ContentSuggestionsManager;
import android.app.contentsuggestions.IContentSuggestionsManager;
import android.app.job.JobSchedulerFrameworkInitializer;
@ -1311,6 +1312,8 @@ public final class SystemServiceRegistry {
JobSchedulerFrameworkInitializer.initialize();
DeviceIdleFrameworkInitializer.initialize();
BlobStoreManagerFrameworkInitializer.initialize();
}
/**

View File

@ -4781,6 +4781,20 @@ public abstract class Context {
*/
public static final String DYNAMIC_SYSTEM_SERVICE = "dynamic_system";
/**
* Use with {@link #getSystemService(String)} to retrieve a {@link
* android.app.blob.BlobStoreManager} for contributing and accessing data blobs
* from the blob store maintained by the system.
*
* @see #getSystemService(String)
* @see android.app.blob.BlobStoreManager
*
* TODO: make this public once BlobStoreManager is ready.
* @hide
*/
@TestApi
public static final String BLOB_STORE_SERVICE = "blob_store";
/**
* Use with {@link #getSystemService(String)} to retrieve an
* {@link TelephonyRegistryManager}.

View File

@ -277,6 +277,8 @@ public final class SystemServer {
"com.android.server.contentsuggestions.ContentSuggestionsManagerService";
private static final String DEVICE_IDLE_CONTROLLER_CLASS =
"com.android.server.DeviceIdleController";
private static final String BLOB_STORE_MANAGER_SERVICE_CLASS =
"com.android.server.blob.BlobStoreManagerService";
private static final String PERSISTENT_DATA_BLOCK_PROP = "ro.frp.pst";
@ -1902,6 +1904,10 @@ public final class SystemServer {
mSystemServiceManager.startService(ClipboardService.class);
t.traceEnd();
t.traceBegin("StartBlobStoreManagerService");
mSystemServiceManager.startService(BLOB_STORE_MANAGER_SERVICE_CLASS);
t.traceEnd();
t.traceBegin("AppServiceManager");
mSystemServiceManager.startService(AppBindingService.Lifecycle.class);
t.traceEnd();