Introduce DEVICE_PROFILE_APP_STREAMING
Introducing DEVICE_PROFILE_APP_STREAMING to CDM and a corresponding signature|privileged permission - REQUEST_COMPANION_PROFILE_APP_STREAMING. Bug: 202245486 Test: make Change-Id: I6116662ba2bb97d8e88a5df1cba3ff47a8b9c6c7
This commit is contained in:
committed by
Sergey Nikolaienkov
parent
0cc800c66e
commit
269cb1d724
@@ -242,6 +242,7 @@ package android {
|
||||
field public static final String REMOVE_DRM_CERTIFICATES = "android.permission.REMOVE_DRM_CERTIFICATES";
|
||||
field public static final String REMOVE_TASKS = "android.permission.REMOVE_TASKS";
|
||||
field public static final String RENOUNCE_PERMISSIONS = "android.permission.RENOUNCE_PERMISSIONS";
|
||||
field public static final String REQUEST_COMPANION_PROFILE_APP_STREAMING = "android.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING";
|
||||
field public static final String REQUEST_NETWORK_SCORES = "android.permission.REQUEST_NETWORK_SCORES";
|
||||
field public static final String REQUEST_NOTIFICATION_ASSISTANT_SERVICE = "android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE";
|
||||
field public static final String RESET_PASSWORD = "android.permission.RESET_PASSWORD";
|
||||
@@ -2292,6 +2293,10 @@ package android.bluetooth.le {
|
||||
|
||||
package android.companion {
|
||||
|
||||
public final class AssociationRequest implements android.os.Parcelable {
|
||||
field public static final String DEVICE_PROFILE_APP_STREAMING = "android.app.role.COMPANION_DEVICE_APP_STREAMING";
|
||||
}
|
||||
|
||||
public final class CompanionDeviceManager {
|
||||
method @RequiresPermission(android.Manifest.permission.ASSOCIATE_COMPANION_DEVICES) public void associate(@NonNull String, @NonNull android.net.MacAddress, @NonNull byte[]);
|
||||
method @RequiresPermission("android.permission.MANAGE_COMPANION_DEVICES") public boolean canPairWithoutPrompt(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
|
||||
|
||||
@@ -21,6 +21,7 @@ import static com.android.internal.util.CollectionUtils.emptyIfNull;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.StringDef;
|
||||
import android.annotation.SystemApi;
|
||||
import android.compat.annotation.UnsupportedAppUsage;
|
||||
import android.os.Build;
|
||||
import android.os.Parcel;
|
||||
@@ -74,6 +75,21 @@ public final class AssociationRequest implements Parcelable {
|
||||
*/
|
||||
public static final String DEVICE_PROFILE_WATCH = "android.app.role.COMPANION_DEVICE_WATCH";
|
||||
|
||||
/**
|
||||
* Device profile: a virtual display capable of rendering Android applications, and sending back
|
||||
* input events.
|
||||
*
|
||||
* Only applications that have been granted
|
||||
* {@link android.Manifest.permission#REQUEST_COMPANION_PROFILE_APP_STREAMING} are allowed to
|
||||
* request to be associated with such devices.
|
||||
*
|
||||
* @see AssociationRequest.Builder#setDeviceProfile
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final String DEVICE_PROFILE_APP_STREAMING =
|
||||
"android.app.role.COMPANION_DEVICE_APP_STREAMING";
|
||||
|
||||
/** @hide */
|
||||
@StringDef(value = { DEVICE_PROFILE_WATCH })
|
||||
public @interface DeviceProfile {}
|
||||
@@ -229,7 +245,7 @@ public final class AssociationRequest implements Parcelable {
|
||||
|
||||
|
||||
|
||||
// Code below generated by codegen v1.0.22.
|
||||
// Code below generated by codegen v1.0.23.
|
||||
//
|
||||
// DO NOT MODIFY!
|
||||
// CHECKSTYLE:OFF Generated code
|
||||
@@ -478,10 +494,10 @@ public final class AssociationRequest implements Parcelable {
|
||||
};
|
||||
|
||||
@DataClass.Generated(
|
||||
time = 1615252862756L,
|
||||
codegenVersion = "1.0.22",
|
||||
time = 1633625630103L,
|
||||
codegenVersion = "1.0.23",
|
||||
sourceFile = "frameworks/base/core/java/android/companion/AssociationRequest.java",
|
||||
inputSignatures = "private static final java.lang.String LOG_TAG\npublic static final java.lang.String DEVICE_PROFILE_WATCH\nprivate boolean mSingleDevice\nprivate @com.android.internal.util.DataClass.PluralOf(\"deviceFilter\") @android.annotation.NonNull java.util.List<android.companion.DeviceFilter<?>> mDeviceFilters\nprivate @android.annotation.Nullable @android.companion.AssociationRequest.DeviceProfile java.lang.String mDeviceProfile\nprivate @android.annotation.Nullable java.lang.String mCallingPackage\nprivate @android.annotation.Nullable java.lang.String mDeviceProfilePrivilegesDescription\nprivate long mCreationTime\nprivate boolean mSkipPrompt\nprivate void onConstructed()\npublic void setCallingPackage(java.lang.String)\npublic void setDeviceProfilePrivilegesDescription(java.lang.String)\npublic void setSkipPrompt(boolean)\npublic @android.compat.annotation.UnsupportedAppUsage boolean isSingleDevice()\npublic @android.annotation.NonNull @android.compat.annotation.UnsupportedAppUsage java.util.List<android.companion.DeviceFilter<?>> getDeviceFilters()\nclass AssociationRequest extends java.lang.Object implements [android.os.Parcelable]\nprivate boolean mSingleDevice\nprivate @android.annotation.Nullable java.util.ArrayList<android.companion.DeviceFilter<?>> mDeviceFilters\nprivate @android.annotation.Nullable java.lang.String mDeviceProfile\npublic @android.annotation.NonNull android.companion.AssociationRequest.Builder setSingleDevice(boolean)\npublic @android.annotation.NonNull android.companion.AssociationRequest.Builder addDeviceFilter(android.companion.DeviceFilter<?>)\npublic @android.annotation.NonNull android.companion.AssociationRequest.Builder setDeviceProfile(java.lang.String)\npublic @android.annotation.NonNull @java.lang.Override android.companion.AssociationRequest build()\nclass Builder extends android.provider.OneTimeUseBuilder<android.companion.AssociationRequest> implements []\n@com.android.internal.util.DataClass(genToString=true, genEqualsHashCode=true, genHiddenGetters=true, genParcelable=true, genHiddenConstructor=true, genBuilder=false)")
|
||||
inputSignatures = "private static final java.lang.String LOG_TAG\npublic static final java.lang.String DEVICE_PROFILE_WATCH\npublic static final @android.annotation.SystemApi java.lang.String DEVICE_PROFILE_APP_STREAMING\nprivate boolean mSingleDevice\nprivate @com.android.internal.util.DataClass.PluralOf(\"deviceFilter\") @android.annotation.NonNull java.util.List<android.companion.DeviceFilter<?>> mDeviceFilters\nprivate @android.annotation.Nullable @android.companion.AssociationRequest.DeviceProfile java.lang.String mDeviceProfile\nprivate @android.annotation.Nullable java.lang.String mCallingPackage\nprivate @android.annotation.Nullable java.lang.String mDeviceProfilePrivilegesDescription\nprivate long mCreationTime\nprivate boolean mSkipPrompt\nprivate void onConstructed()\npublic void setCallingPackage(java.lang.String)\npublic void setDeviceProfilePrivilegesDescription(java.lang.String)\npublic void setSkipPrompt(boolean)\npublic @android.compat.annotation.UnsupportedAppUsage boolean isSingleDevice()\npublic @android.annotation.NonNull @android.compat.annotation.UnsupportedAppUsage java.util.List<android.companion.DeviceFilter<?>> getDeviceFilters()\nclass AssociationRequest extends java.lang.Object implements [android.os.Parcelable]\nprivate boolean mSingleDevice\nprivate @android.annotation.Nullable java.util.ArrayList<android.companion.DeviceFilter<?>> mDeviceFilters\nprivate @android.annotation.Nullable java.lang.String mDeviceProfile\npublic @android.annotation.NonNull android.companion.AssociationRequest.Builder setSingleDevice(boolean)\npublic @android.annotation.NonNull android.companion.AssociationRequest.Builder addDeviceFilter(android.companion.DeviceFilter<?>)\npublic @android.annotation.NonNull android.companion.AssociationRequest.Builder setDeviceProfile(java.lang.String)\npublic @android.annotation.NonNull @java.lang.Override android.companion.AssociationRequest build()\nclass Builder extends android.provider.OneTimeUseBuilder<android.companion.AssociationRequest> implements []\n@com.android.internal.util.DataClass(genToString=true, genEqualsHashCode=true, genHiddenGetters=true, genParcelable=true, genHiddenConstructor=true, genBuilder=false)")
|
||||
@Deprecated
|
||||
private void __metadata() {}
|
||||
|
||||
|
||||
@@ -281,7 +281,7 @@ public final class CompanionDeviceManager {
|
||||
* Wi-Fi MAC address for a given user.
|
||||
*
|
||||
* <p>This is a system API protected by the
|
||||
* {@link andrioid.Manifest.permission#MANAGE_COMPANION_DEVICES} permission, that’s currently
|
||||
* {@link android.Manifest.permission#MANAGE_COMPANION_DEVICES} permission, that’s currently
|
||||
* called by the Android Wi-Fi stack to determine whether user consent is required to connect
|
||||
* to a Wi-Fi network. Devices that have been pre-registered as companion devices will not
|
||||
* require user consent to connect.</p>
|
||||
|
||||
@@ -2976,6 +2976,17 @@
|
||||
<permission android:name="android.permission.REQUEST_COMPANION_PROFILE_WATCH"
|
||||
android:protectionLevel="normal" />
|
||||
|
||||
<!-- Allows application to request to be associated with a virtual display capable of streaming
|
||||
Android applications
|
||||
({@link android.companion.AssociationRequest#DEVICE_PROFILE_APP_STREAMING})
|
||||
by {@link android.companion.CompanionDeviceManager}.
|
||||
<p>Not for use by third-party applications.
|
||||
@hide
|
||||
@SystemApi
|
||||
-->
|
||||
<permission android:name="android.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING"
|
||||
android:protectionLevel="signature|privileged" />
|
||||
|
||||
<!-- Allows a companion app to associate to Wi-Fi.
|
||||
<p>Only for use by a single pre-approved app.
|
||||
@hide
|
||||
|
||||
@@ -20,6 +20,8 @@ package com.android.server.companion;
|
||||
import static android.Manifest.permission.BIND_COMPANION_DEVICE_SERVICE;
|
||||
import static android.bluetooth.le.ScanSettings.CALLBACK_TYPE_ALL_MATCHES;
|
||||
import static android.bluetooth.le.ScanSettings.SCAN_MODE_BALANCED;
|
||||
import static android.companion.AssociationRequest.DEVICE_PROFILE_APP_STREAMING;
|
||||
import static android.companion.AssociationRequest.DEVICE_PROFILE_WATCH;
|
||||
import static android.content.Context.BIND_IMPORTANT;
|
||||
import static android.content.pm.PackageManager.CERT_INPUT_SHA256;
|
||||
import static android.content.pm.PackageManager.MATCH_ALL;
|
||||
@@ -160,8 +162,9 @@ public class CompanionDeviceManagerService extends SystemService implements Bind
|
||||
private static final Map<String, String> DEVICE_PROFILE_TO_PERMISSION;
|
||||
static {
|
||||
final Map<String, String> map = new ArrayMap<>();
|
||||
map.put(AssociationRequest.DEVICE_PROFILE_WATCH,
|
||||
Manifest.permission.REQUEST_COMPANION_PROFILE_WATCH);
|
||||
map.put(DEVICE_PROFILE_WATCH, Manifest.permission.REQUEST_COMPANION_PROFILE_WATCH);
|
||||
map.put(DEVICE_PROFILE_APP_STREAMING,
|
||||
Manifest.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING);
|
||||
|
||||
DEVICE_PROFILE_TO_PERMISSION = Collections.unmodifiableMap(map);
|
||||
}
|
||||
@@ -551,6 +554,12 @@ public class CompanionDeviceManagerService extends SystemService implements Bind
|
||||
// Device profile can be null.
|
||||
if (deviceProfile == null) return;
|
||||
|
||||
if (DEVICE_PROFILE_APP_STREAMING.equals(deviceProfile)) {
|
||||
// TODO: remove, when properly supporting this profile.
|
||||
throw new UnsupportedOperationException(
|
||||
"DEVICE_PROFILE_APP_STREAMING is not fully supported yet.");
|
||||
}
|
||||
|
||||
if (!DEVICE_PROFILE_TO_PERMISSION.containsKey(deviceProfile)) {
|
||||
throw new IllegalArgumentException("Unsupported device profile: " + deviceProfile);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user