Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 063fc5c4 authored by Joe Antonetti's avatar Joe Antonetti Committed by Android (Google) Code Review
Browse files

Merge "[Handoff] Add Android permissions to TaskContinuityManager APIs" into main

parents 232349b1 73f2b96e
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -341,6 +341,7 @@ package android {
    field public static final String READ_PRINT_SERVICE_RECOMMENDATIONS = "android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS";
    field public static final String READ_PRIVILEGED_PHONE_STATE = "android.permission.READ_PRIVILEGED_PHONE_STATE";
    field public static final String READ_PROJECTION_STATE = "android.permission.READ_PROJECTION_STATE";
    field @FlaggedApi("android.companion.enable_task_continuity") public static final String READ_REMOTE_TASKS = "android.permission.READ_REMOTE_TASKS";
    field public static final String READ_RESTRICTED_STATS = "android.permission.READ_RESTRICTED_STATS";
    field public static final String READ_RUNTIME_PROFILES = "android.permission.READ_RUNTIME_PROFILES";
    field public static final String READ_SAFETY_CENTER_STATUS = "android.permission.READ_SAFETY_CENTER_STATUS";
@@ -374,6 +375,7 @@ package android {
    field public static final String REPORT_USAGE_STATS = "android.permission.REPORT_USAGE_STATS";
    field @Deprecated 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 @FlaggedApi("android.companion.enable_task_continuity") public static final String REQUEST_TASK_HANDOFF = "android.permission.REQUEST_TASK_HANDOFF";
    field public static final String RESET_PASSWORD = "android.permission.RESET_PASSWORD";
    field @FlaggedApi("android.content.pm.uid_based_provider_lookup") public static final String RESOLVE_COMPONENT_FOR_UID = "android.permission.RESOLVE_COMPONENT_FOR_UID";
    field public static final String RESTART_WIFI_SUBSYSTEM = "android.permission.RESTART_WIFI_SUBSYSTEM";
@@ -3525,9 +3527,9 @@ package android.companion.datatransfer.continuity {
  }
  @FlaggedApi("android.companion.enable_task_continuity") public class TaskContinuityManager {
    method public void registerRemoteTaskListener(@NonNull java.util.concurrent.Executor, @NonNull android.companion.datatransfer.continuity.TaskContinuityManager.RemoteTaskListener);
    method public void requestHandoff(int, int, @NonNull java.util.concurrent.Executor, @NonNull android.companion.datatransfer.continuity.TaskContinuityManager.HandoffRequestCallback);
    method public void unregisterRemoteTaskListener(@NonNull android.companion.datatransfer.continuity.TaskContinuityManager.RemoteTaskListener);
    method @RequiresPermission(android.Manifest.permission.READ_REMOTE_TASKS) public void registerRemoteTaskListener(@NonNull java.util.concurrent.Executor, @NonNull android.companion.datatransfer.continuity.TaskContinuityManager.RemoteTaskListener);
    method @RequiresPermission(android.Manifest.permission.REQUEST_TASK_HANDOFF) public void requestHandoff(int, int, @NonNull java.util.concurrent.Executor, @NonNull android.companion.datatransfer.continuity.TaskContinuityManager.HandoffRequestCallback);
    method @RequiresPermission(android.Manifest.permission.READ_REMOTE_TASKS) public void unregisterRemoteTaskListener(@NonNull android.companion.datatransfer.continuity.TaskContinuityManager.RemoteTaskListener);
    field public static final int HANDOFF_REQUEST_RESULT_FAILURE_DEVICE_NOT_FOUND = 5; // 0x5
    field public static final int HANDOFF_REQUEST_RESULT_FAILURE_NO_DATA_PROVIDED_BY_TASK = 2; // 0x2
    field public static final int HANDOFF_REQUEST_RESULT_FAILURE_OTHER_INTERNAL_ERROR = 6; // 0x6
+5 −0
Original line number Diff line number Diff line
@@ -26,8 +26,13 @@ import android.companion.datatransfer.continuity.RemoteTask;
 */
oneway interface ITaskContinuityManager {

    @EnforcePermission("READ_REMOTE_TASKS")
    void registerRemoteTaskListener(IRemoteTaskListener listener);

    @EnforcePermission("READ_REMOTE_TASKS")
    void unregisterRemoteTaskListener(IRemoteTaskListener listener);

    @EnforcePermission("REQUEST_TASK_HANDOFF")
    void requestHandoff(
        in int associationId,
        in int remoteTaskId,
+10 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.companion.datatransfer.continuity.RemoteTask;

import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.annotation.NonNull;
@@ -154,7 +155,10 @@ public class TaskContinuityManager {
     *
     * @param executor The executor to be used to invoke the listener.
     * @param listener The listener to be registered.
     * @throws SecurityException if the caller does not hold the
     *      {@link android.Manifest.permission#READ_REMOTE_TASKS} permission.
     */
    @RequiresPermission(android.Manifest.permission.READ_REMOTE_TASKS)
    public void registerRemoteTaskListener(
        @NonNull Executor executor,
        @NonNull RemoteTaskListener listener) {
@@ -176,7 +180,10 @@ public class TaskContinuityManager {
     * {@link #registerRemoteTaskListener}.
     *
     * @param listener The listener to be unregistered.
     * @throws SecurityException if the caller does not hold the
     *      {@link android.Manifest.permission#READ_REMOTE_TASKS} permission.
     */
    @RequiresPermission(android.Manifest.permission.READ_REMOTE_TASKS)
    public void unregisterRemoteTaskListener(@NonNull RemoteTaskListener listener) {
        Objects.requireNonNull(listener);

@@ -195,7 +202,10 @@ public class TaskContinuityManager {
     * @param remoteTaskId The remote task to hand off.
     * @param executor The executor to be used to invoke the callback.
     * @param callback The callback to be invoked when the handoff request is finished.
     * @throws SecurityException if the caller does not hold the
     *      {@link android.Manifest.permission#REQUEST_TASK_HANDOFF} permission.
     */
    @RequiresPermission(android.Manifest.permission.REQUEST_TASK_HANDOFF)
    public void requestHandoff(
        int associationId,
        int remoteTaskId,
+22 −0
Original line number Diff line number Diff line
@@ -9319,6 +9319,28 @@
        android:protectionLevel="internal|installer"
        android:featureFlag="android.content.pm.verification_service" />
    <!-- Allows an application to read tasks on a remote device.
         <p>Protection level: signature|privileged
         @FlaggedApi(android.companion.Flags.FLAG_ENABLE_TASK_CONTINUITY)
         @SystemApi
         @hide
    -->
    <permission
        android:name="android.permission.READ_REMOTE_TASKS"
        android:protectionLevel="signature|privileged"
        android:featureFlag="android.companion.enable_task_continuity" />
    <!-- Allows an application to request a task be handed off to the current device.
         <p>Protection level: signature|privileged
         @FlaggedApi(android.companion.Flags.FLAG_ENABLE_TASK_CONTINUITY)
         @SystemApi
         @hide
    -->
    <permission
        android:name="android.permission.REQUEST_TASK_HANDOFF"
        android:protectionLevel="signature|privileged"
        android:featureFlag="android.companion.enable_task_continuity" />
    <!-- Permission required to access TV Watchdog Metrics
     <p>Not for use by third-party applications.</p>
     @hide -->
+10 −0
Original line number Diff line number Diff line
@@ -16,6 +16,10 @@

package com.android.server.companion.datatransfer.continuity;

import static android.Manifest.permission.READ_REMOTE_TASKS;
import static android.Manifest.permission.REQUEST_TASK_HANDOFF;

import android.annotation.EnforcePermission;
import android.annotation.NonNull;
import android.companion.AssociationInfo;
import android.companion.datatransfer.continuity.IHandoffRequestCallback;
@@ -84,22 +88,28 @@ public final class TaskContinuityManagerService

    private final class TaskContinuityManagerServiceImpl extends ITaskContinuityManager.Stub {
        @Override
        @EnforcePermission(READ_REMOTE_TASKS)
        public void registerRemoteTaskListener(@NonNull IRemoteTaskListener listener) {
            registerRemoteTaskListener_enforcePermission();
            Objects.requireNonNull(listener);
            mRemoteTaskStore.addListener(listener);
        }

        @Override
        @EnforcePermission(READ_REMOTE_TASKS)
        public void unregisterRemoteTaskListener(@NonNull IRemoteTaskListener listener) {
            unregisterRemoteTaskListener_enforcePermission();
            Objects.requireNonNull(listener);
            mRemoteTaskStore.removeListener(listener);
        }

        @Override
        @EnforcePermission(REQUEST_TASK_HANDOFF)
        public void requestHandoff(
            int associationId,
            int remoteTaskId,
            @NonNull IHandoffRequestCallback callback) {
            requestHandoff_enforcePermission();

            Objects.requireNonNull(callback);