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

Commit aab4db2c authored by Guojing Yuan's avatar Guojing Yuan Committed by Android (Google) Code Review
Browse files

Merge "[CDM][Refactoring 4/N] Move device presence logic out of CDMS" into main

parents 60b866ea 55f1144b
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -1086,7 +1086,7 @@ public final class CompanionDeviceManager {
        }
        Objects.requireNonNull(deviceAddress, "address cannot be null");
        try {
            mService.registerDevicePresenceListenerService(deviceAddress,
            mService.legacyStartObservingDevicePresence(deviceAddress,
                    mContext.getOpPackageName(), mContext.getUserId());
        } catch (RemoteException e) {
            ExceptionUtils.propagateIfInstanceOf(e.getCause(), DeviceNotAssociatedException.class);
@@ -1128,7 +1128,7 @@ public final class CompanionDeviceManager {
        }
        Objects.requireNonNull(deviceAddress, "address cannot be null");
        try {
            mService.unregisterDevicePresenceListenerService(deviceAddress,
            mService.legacyStopObservingDevicePresence(deviceAddress,
                    mContext.getPackageName(), mContext.getUserId());
        } catch (RemoteException e) {
            ExceptionUtils.propagateIfInstanceOf(e.getCause(), DeviceNotAssociatedException.class);
@@ -1328,7 +1328,7 @@ public final class CompanionDeviceManager {
    @RequiresPermission(android.Manifest.permission.REQUEST_COMPANION_SELF_MANAGED)
    public void notifyDeviceAppeared(int associationId) {
        try {
            mService.notifyDeviceAppeared(associationId);
            mService.notifySelfManagedDeviceAppeared(associationId);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -1350,7 +1350,7 @@ public final class CompanionDeviceManager {
    @RequiresPermission(android.Manifest.permission.REQUEST_COMPANION_SELF_MANAGED)
    public void notifyDeviceDisappeared(int associationId) {
        try {
            mService.notifyDeviceDisappeared(associationId);
            mService.notifySelfManagedDeviceDisappeared(associationId);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
+12 −12
Original line number Diff line number Diff line
@@ -59,12 +59,16 @@ interface ICompanionDeviceManager {
        int userId);

    @EnforcePermission("REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE")
    void registerDevicePresenceListenerService(in String deviceAddress, in String callingPackage,
        int userId);
    void legacyStartObservingDevicePresence(in String deviceAddress, in String callingPackage, int userId);

    @EnforcePermission("REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE")
    void unregisterDevicePresenceListenerService(in String deviceAddress, in String callingPackage,
        int userId);
    void legacyStopObservingDevicePresence(in String deviceAddress, in String callingPackage, int userId);

    @EnforcePermission("REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE")
    void startObservingDevicePresence(in ObservingDevicePresenceRequest request, in String packageName, int userId);

    @EnforcePermission("REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE")
    void stopObservingDevicePresence(in ObservingDevicePresenceRequest request, in String packageName, int userId);

    boolean canPairWithoutPrompt(in String packageName, in String deviceMacAddress, int userId);

@@ -93,9 +97,11 @@ interface ICompanionDeviceManager {
    @EnforcePermission("USE_COMPANION_TRANSPORTS")
    void removeOnMessageReceivedListener(int messageType, IOnMessageReceivedListener listener);

    void notifyDeviceAppeared(int associationId);
    @EnforcePermission("REQUEST_COMPANION_SELF_MANAGED")
    void notifySelfManagedDeviceAppeared(int associationId);

    void notifyDeviceDisappeared(int associationId);
    @EnforcePermission("REQUEST_COMPANION_SELF_MANAGED")
    void notifySelfManagedDeviceDisappeared(int associationId);

    PendingIntent buildPermissionTransferUserConsentIntent(String callingPackage, int userId,
        int associationId);
@@ -135,10 +141,4 @@ interface ICompanionDeviceManager {
    byte[] getBackupPayload(int userId);

    void applyRestoredPayload(in byte[] payload, int userId);

    @EnforcePermission("REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE")
    void startObservingDevicePresence(in ObservingDevicePresenceRequest request, in String packageName, int userId);

    @EnforcePermission("REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE")
    void stopObservingDevicePresence(in ObservingDevicePresenceRequest request, in String packageName, int userId);
}
+66 −500

File changed.

Preview size limit exceeded, changes collapsed.

+2 −1
Original line number Diff line number Diff line
@@ -27,8 +27,9 @@ import java.util.Collection;
 * Companion Device Manager Local System Service Interface.
 */
public interface CompanionDeviceManagerServiceInternal {

    /**
     * @see CompanionDeviceManagerService#removeInactiveSelfManagedAssociations
     * Remove idle self-managed associations.
     */
    void removeInactiveSelfManagedAssociations();

+21 −20
Original line number Diff line number Diff line
@@ -18,8 +18,6 @@ package com.android.server.companion;

import static android.companion.CompanionDeviceManager.MESSAGE_REQUEST_CONTEXT_SYNC;

import static com.android.server.companion.utils.PermissionsUtils.sanitizeWithCallerChecks;

import android.companion.AssociationInfo;
import android.companion.ContextSyncMessage;
import android.companion.Flags;
@@ -38,7 +36,7 @@ import com.android.server.companion.association.DisassociationProcessor;
import com.android.server.companion.datatransfer.SystemDataTransferProcessor;
import com.android.server.companion.datatransfer.contextsync.BitmapUtils;
import com.android.server.companion.datatransfer.contextsync.CrossDeviceSyncController;
import com.android.server.companion.presence.CompanionDevicePresenceMonitor;
import com.android.server.companion.presence.DevicePresenceProcessor;
import com.android.server.companion.presence.ObservableUuid;
import com.android.server.companion.transport.CompanionTransportManager;

@@ -51,7 +49,7 @@ class CompanionDeviceShellCommand extends ShellCommand {
    private final CompanionDeviceManagerService mService;
    private final DisassociationProcessor mDisassociationProcessor;
    private final AssociationStore mAssociationStore;
    private final CompanionDevicePresenceMonitor mDevicePresenceMonitor;
    private final DevicePresenceProcessor mDevicePresenceProcessor;
    private final CompanionTransportManager mTransportManager;

    private final SystemDataTransferProcessor mSystemDataTransferProcessor;
@@ -60,7 +58,7 @@ class CompanionDeviceShellCommand extends ShellCommand {

    CompanionDeviceShellCommand(CompanionDeviceManagerService service,
            AssociationStore associationStore,
            CompanionDevicePresenceMonitor devicePresenceMonitor,
            DevicePresenceProcessor devicePresenceProcessor,
            CompanionTransportManager transportManager,
            SystemDataTransferProcessor systemDataTransferProcessor,
            AssociationRequestsProcessor associationRequestsProcessor,
@@ -68,7 +66,7 @@ class CompanionDeviceShellCommand extends ShellCommand {
            DisassociationProcessor disassociationProcessor) {
        mService = service;
        mAssociationStore = associationStore;
        mDevicePresenceMonitor = devicePresenceMonitor;
        mDevicePresenceProcessor = devicePresenceProcessor;
        mTransportManager = transportManager;
        mSystemDataTransferProcessor = systemDataTransferProcessor;
        mAssociationRequestsProcessor = associationRequestsProcessor;
@@ -85,7 +83,7 @@ class CompanionDeviceShellCommand extends ShellCommand {
            if ("simulate-device-event".equals(cmd) && Flags.devicePresence()) {
                associationId = getNextIntArgRequired();
                int event = getNextIntArgRequired();
                mDevicePresenceMonitor.simulateDeviceEvent(associationId, event);
                mDevicePresenceProcessor.simulateDeviceEvent(associationId, event);
                return 0;
            }

@@ -97,7 +95,7 @@ class CompanionDeviceShellCommand extends ShellCommand {
                ObservableUuid observableUuid = new ObservableUuid(
                        userId, ParcelUuid.fromString(uuid), packageName,
                        System.currentTimeMillis());
                mDevicePresenceMonitor.simulateDeviceEventByUuid(observableUuid, event);
                mDevicePresenceProcessor.simulateDeviceEventByUuid(observableUuid, event);
                return 0;
            }

@@ -124,8 +122,9 @@ class CompanionDeviceShellCommand extends ShellCommand {
                    String address = getNextArgRequired();
                    String deviceProfile = getNextArg();
                    final MacAddress macAddress = MacAddress.fromString(address);
                    mService.createNewAssociation(userId, packageName, macAddress,
                            /* displayName= */ deviceProfile, deviceProfile, false);
                    mAssociationRequestsProcessor.createAssociation(userId, packageName, macAddress,
                            deviceProfile, deviceProfile, /* associatedDevice */ null, false,
                            /* callback */ null, /* resultReceiver */ null);
                }
                break;

@@ -134,9 +133,14 @@ class CompanionDeviceShellCommand extends ShellCommand {
                    final String packageName = getNextArgRequired();
                    final String address = getNextArgRequired();
                    final AssociationInfo association =
                            mService.getAssociationWithCallerChecks(userId, packageName, address);
                            mAssociationStore.getFirstAssociationByAddress(userId, packageName,
                                    address);
                    if (association == null) {
                        out.println("Association doesn't exist.");
                    } else {
                        mDisassociationProcessor.disassociate(association.getId());
                    }
                }
                break;

                case "disassociate-all": {
@@ -144,11 +148,9 @@ class CompanionDeviceShellCommand extends ShellCommand {
                    final List<AssociationInfo> userAssociations =
                            mAssociationStore.getAssociationsByUser(userId);
                    for (AssociationInfo association : userAssociations) {
                        if (sanitizeWithCallerChecks(mService.getContext(), association) != null) {
                        mDisassociationProcessor.disassociate(association.getId());
                    }
                }
                }
                break;

                case "refresh-cache":
@@ -157,12 +159,12 @@ class CompanionDeviceShellCommand extends ShellCommand {

                case "simulate-device-appeared":
                    associationId = getNextIntArgRequired();
                    mDevicePresenceMonitor.simulateDeviceEvent(associationId, /* event */ 0);
                    mDevicePresenceProcessor.simulateDeviceEvent(associationId, /* event */ 0);
                    break;

                case "simulate-device-disappeared":
                    associationId = getNextIntArgRequired();
                    mDevicePresenceMonitor.simulateDeviceEvent(associationId, /* event */ 1);
                    mDevicePresenceProcessor.simulateDeviceEvent(associationId, /* event */ 1);
                    break;

                case "get-backup-payload": {
@@ -410,10 +412,9 @@ class CompanionDeviceShellCommand extends ShellCommand {
        pw.println("      Remove an existing Association.");
        pw.println("  disassociate-all USER_ID");
        pw.println("      Remove all Associations for a user.");
        pw.println("  clear-association-memory-cache");
        pw.println("  refresh-cache");
        pw.println("      Clear the in-memory association cache and reload all association ");
        pw.println("      information from persistent storage. USE FOR DEBUGGING PURPOSES ONLY.");
        pw.println("      USE FOR DEBUGGING AND/OR TESTING PURPOSES ONLY.");
        pw.println("      information from disk. USE FOR DEBUGGING AND/OR TESTING PURPOSES ONLY.");

        pw.println("  simulate-device-appeared ASSOCIATION_ID");
        pw.println("      Make CDM act as if the given companion device has appeared.");
Loading