Loading services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java +12 −8 Original line number Diff line number Diff line Loading @@ -25,12 +25,12 @@ import static android.content.ComponentName.createRelative; import static android.content.pm.PackageManager.FEATURE_WATCH; import static com.android.server.companion.CompanionDeviceManagerService.DEBUG; import static com.android.server.companion.MetricUtils.logCreateAssociation; import static com.android.server.companion.PackageUtils.enforceUsesCompanionDeviceFeature; import static com.android.server.companion.PermissionsUtils.enforcePermissionsForAssociation; import static com.android.server.companion.RolesUtils.addRoleHolderForAssociation; import static com.android.server.companion.RolesUtils.isRoleHolder; import static com.android.server.companion.Utils.prepareForIpc; import static com.android.server.companion.utils.MetricUtils.logCreateAssociation; import static com.android.server.companion.utils.PackageUtils.enforceUsesCompanionDeviceFeature; import static com.android.server.companion.utils.PermissionsUtils.enforcePermissionForCreatingAssociation; import static com.android.server.companion.utils.RolesUtils.addRoleHolderForAssociation; import static com.android.server.companion.utils.RolesUtils.isRoleHolder; import static com.android.server.companion.utils.Utils.prepareForIpc; import static java.util.Objects.requireNonNull; Loading Loading @@ -59,6 +59,7 @@ import android.os.UserHandle; import android.util.Slog; import com.android.internal.R; import com.android.server.companion.utils.PackageUtils; import java.util.List; Loading Loading @@ -167,7 +168,7 @@ class AssociationRequestsProcessor { } // 1. Enforce permissions and other requirements. enforcePermissionsForAssociation(mContext, request, packageUid); enforcePermissionForCreatingAssociation(mContext, request, packageUid); enforceUsesCompanionDeviceFeature(mContext, userId, packageName); // 2a. Check if association can be created without launching UI (i.e. CDM needs NEITHER Loading Loading @@ -257,7 +258,7 @@ class AssociationRequestsProcessor { // 1. Need to check permissions again in case something changed, since we first received // this request. try { enforcePermissionsForAssociation(mContext, request, packageUid); enforcePermissionForCreatingAssociation(mContext, request, packageUid); } catch (SecurityException e) { // Since, at this point the caller is our own UI, we need to catch the exception on // forward it back to the application via the callback. Loading Loading @@ -316,6 +317,9 @@ class AssociationRequestsProcessor { // If it is null, then the operation will succeed without granting any role. addRoleHolderForAssociation(mService.getContext(), association, success -> { if (success) { Slog.i(TAG, "Added " + association.getDeviceProfile() + " role to userId=" + association.getUserId() + ", packageName=" + association.getPackageName()); addAssociationToStore(association); sendCallbackAndFinish(association, callback, resultReceiver); } else { Loading services/companion/java/com/android/server/companion/AssociationRevokeProcessor.java +4 −3 Original line number Diff line number Diff line Loading @@ -20,8 +20,8 @@ import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_VISIB import static android.companion.AssociationRequest.DEVICE_PROFILE_AUTOMOTIVE_PROJECTION; import static com.android.internal.util.CollectionUtils.any; import static com.android.server.companion.MetricUtils.logRemoveAssociation; import static com.android.server.companion.RolesUtils.removeRoleHolderForAssociation; import static com.android.server.companion.utils.MetricUtils.logRemoveAssociation; import static com.android.server.companion.utils.RolesUtils.removeRoleHolderForAssociation; import static com.android.server.companion.CompanionDeviceManagerService.PerUserAssociationSet; import android.annotation.NonNull; Loading Loading @@ -203,7 +203,8 @@ public class AssociationRevokeProcessor { return false; } removeRoleHolderForAssociation(mContext, association); removeRoleHolderForAssociation(mContext, association.getUserId(), association.getPackageName(), association.getDeviceProfile()); return true; } Loading services/companion/java/com/android/server/companion/CompanionApplicationController.java +26 −5 Original line number Diff line number Diff line Loading @@ -38,6 +38,9 @@ import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.infra.PerUser; import com.android.server.companion.presence.CompanionDevicePresenceMonitor; import com.android.server.companion.presence.ObservableUuid; import com.android.server.companion.presence.ObservableUuidStore; import com.android.server.companion.utils.PackageUtils; import java.io.PrintWriter; import java.util.ArrayList; Loading @@ -61,7 +64,7 @@ import java.util.Map; * <ul> * <li> {@link #bindCompanionApplication(int, String, boolean)} * <li> {@link #unbindCompanionApplication(int, String)} * <li> {@link #notifyCompanionApplicationDevicePresenceEvent(AssociationInfo, int)} * <li> {@link #notifyCompanionDevicePresenceEvent(AssociationInfo, int)} * <li> {@link #isCompanionApplicationBound(int, String)} * <li> {@link #isRebindingCompanionApplicationScheduled(int, String)} * </ul> Loading Loading @@ -251,7 +254,13 @@ public class CompanionApplicationController { serviceConnector.connect(); } void notifyCompanionApplicationDeviceAppeared(AssociationInfo association) { /** * Notify the app that the device appeared. * * @deprecated use {@link #notifyCompanionDevicePresenceEvent(AssociationInfo, int)} instead */ @Deprecated public void notifyCompanionApplicationDeviceAppeared(AssociationInfo association) { final int userId = association.getUserId(); final String packageName = association.getPackageName(); Loading @@ -273,7 +282,13 @@ public class CompanionApplicationController { primaryServiceConnector.postOnDeviceAppeared(association); } void notifyCompanionApplicationDeviceDisappeared(AssociationInfo association) { /** * Notify the app that the device disappeared. * * @deprecated use {@link #notifyCompanionDevicePresenceEvent(AssociationInfo, int)} instead */ @Deprecated public void notifyCompanionApplicationDeviceDisappeared(AssociationInfo association) { final int userId = association.getUserId(); final String packageName = association.getPackageName(); Loading @@ -295,7 +310,10 @@ public class CompanionApplicationController { primaryServiceConnector.postOnDeviceDisappeared(association); } void notifyCompanionApplicationDevicePresenceEvent(AssociationInfo association, int event) { /** * Notify the app that the device appeared. */ public void notifyCompanionDevicePresenceEvent(AssociationInfo association, int event) { final int userId = association.getUserId(); final String packageName = association.getPackageName(); final CompanionDeviceServiceConnector primaryServiceConnector = Loading @@ -318,7 +336,10 @@ public class CompanionApplicationController { primaryServiceConnector.postOnDevicePresenceEvent(devicePresenceEvent); } void notifyApplicationDevicePresenceEvent(ObservableUuid uuid, int event) { /** * Notify the app that the device disappeared. */ public void notifyUuidDevicePresenceEvent(ObservableUuid uuid, int event) { final int userId = uuid.getUserId(); final ParcelUuid parcelUuid = uuid.getUuid(); final String packageName = uuid.getPackageName(); Loading services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java +15 −13 Original line number Diff line number Diff line Loading @@ -38,15 +38,15 @@ import static com.android.internal.util.CollectionUtils.any; import static com.android.internal.util.Preconditions.checkState; import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage; import static com.android.server.companion.AssociationStore.CHANGE_TYPE_UPDATED_ADDRESS_UNCHANGED; import static com.android.server.companion.PackageUtils.isRestrictedSettingsAllowed; import static com.android.server.companion.PackageUtils.enforceUsesCompanionDeviceFeature; import static com.android.server.companion.PackageUtils.getPackageInfo; import static com.android.server.companion.PermissionsUtils.checkCallerCanManageCompanionDevice; import static com.android.server.companion.PermissionsUtils.enforceCallerCanManageAssociationsForPackage; import static com.android.server.companion.PermissionsUtils.enforceCallerCanObservingDevicePresenceByUuid; import static com.android.server.companion.PermissionsUtils.enforceCallerIsSystemOr; import static com.android.server.companion.PermissionsUtils.enforceCallerIsSystemOrCanInteractWithUserId; import static com.android.server.companion.PermissionsUtils.sanitizeWithCallerChecks; import static com.android.server.companion.utils.PackageUtils.isRestrictedSettingsAllowed; import static com.android.server.companion.utils.PackageUtils.enforceUsesCompanionDeviceFeature; import static com.android.server.companion.utils.PackageUtils.getPackageInfo; import static com.android.server.companion.utils.PermissionsUtils.checkCallerCanManageCompanionDevice; import static com.android.server.companion.utils.PermissionsUtils.enforceCallerCanManageAssociationsForPackage; import static com.android.server.companion.utils.PermissionsUtils.enforceCallerCanObservingDevicePresenceByUuid; import static com.android.server.companion.utils.PermissionsUtils.enforceCallerIsSystemOr; import static com.android.server.companion.utils.PermissionsUtils.enforceCallerIsSystemOrCanInteractWithUserId; import static com.android.server.companion.utils.PermissionsUtils.sanitizeWithCallerChecks; import static java.util.Objects.requireNonNull; import static java.util.concurrent.TimeUnit.DAYS; Loading Loading @@ -123,6 +123,8 @@ import com.android.server.companion.datatransfer.contextsync.CrossDeviceCall; import com.android.server.companion.datatransfer.contextsync.CrossDeviceSyncController; import com.android.server.companion.datatransfer.contextsync.CrossDeviceSyncControllerCallback; import com.android.server.companion.presence.CompanionDevicePresenceMonitor; import com.android.server.companion.presence.ObservableUuid; import com.android.server.companion.presence.ObservableUuidStore; import com.android.server.companion.transport.CompanionTransportManager; import com.android.server.pm.UserManagerInternal; import com.android.server.wm.ActivityTaskManagerInternal; Loading Loading @@ -435,7 +437,7 @@ public class CompanionDeviceManagerService extends SystemService { bindApplicationIfNeeded(association); mCompanionAppController.notifyCompanionApplicationDevicePresenceEvent( mCompanionAppController.notifyCompanionDevicePresenceEvent( association, event); break; case EVENT_BLE_DISAPPEARED: Loading @@ -446,7 +448,7 @@ public class CompanionDeviceManagerService extends SystemService { return; } if (association.shouldBindWhenPresent()) { mCompanionAppController.notifyCompanionApplicationDevicePresenceEvent( mCompanionAppController.notifyCompanionDevicePresenceEvent( association, event); } // Check if there are other devices associated to the app that are present. Loading Loading @@ -475,7 +477,7 @@ public class CompanionDeviceManagerService extends SystemService { Log.i(TAG, "u" + userId + "\\" + packageName + " is already bound"); } mCompanionAppController.notifyApplicationDevicePresenceEvent(uuid, event); mCompanionAppController.notifyUuidDevicePresenceEvent(uuid, event); break; case EVENT_BT_DISCONNECTED: Loading @@ -484,7 +486,7 @@ public class CompanionDeviceManagerService extends SystemService { return; } mCompanionAppController.notifyApplicationDevicePresenceEvent(uuid, event); mCompanionAppController.notifyUuidDevicePresenceEvent(uuid, event); // Check if there are other devices associated to the app or the UUID to be // observed are present. if (shouldBindPackage(userId, packageName)) return; Loading services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java +2 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ package com.android.server.companion; import static android.companion.CompanionDeviceManager.MESSAGE_REQUEST_CONTEXT_SYNC; import static com.android.server.companion.PermissionsUtils.sanitizeWithCallerChecks; import static com.android.server.companion.utils.PermissionsUtils.sanitizeWithCallerChecks; import android.companion.AssociationInfo; import android.companion.ContextSyncMessage; Loading @@ -36,6 +36,7 @@ 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.ObservableUuid; import com.android.server.companion.transport.CompanionTransportManager; import java.io.PrintWriter; Loading Loading
services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java +12 −8 Original line number Diff line number Diff line Loading @@ -25,12 +25,12 @@ import static android.content.ComponentName.createRelative; import static android.content.pm.PackageManager.FEATURE_WATCH; import static com.android.server.companion.CompanionDeviceManagerService.DEBUG; import static com.android.server.companion.MetricUtils.logCreateAssociation; import static com.android.server.companion.PackageUtils.enforceUsesCompanionDeviceFeature; import static com.android.server.companion.PermissionsUtils.enforcePermissionsForAssociation; import static com.android.server.companion.RolesUtils.addRoleHolderForAssociation; import static com.android.server.companion.RolesUtils.isRoleHolder; import static com.android.server.companion.Utils.prepareForIpc; import static com.android.server.companion.utils.MetricUtils.logCreateAssociation; import static com.android.server.companion.utils.PackageUtils.enforceUsesCompanionDeviceFeature; import static com.android.server.companion.utils.PermissionsUtils.enforcePermissionForCreatingAssociation; import static com.android.server.companion.utils.RolesUtils.addRoleHolderForAssociation; import static com.android.server.companion.utils.RolesUtils.isRoleHolder; import static com.android.server.companion.utils.Utils.prepareForIpc; import static java.util.Objects.requireNonNull; Loading Loading @@ -59,6 +59,7 @@ import android.os.UserHandle; import android.util.Slog; import com.android.internal.R; import com.android.server.companion.utils.PackageUtils; import java.util.List; Loading Loading @@ -167,7 +168,7 @@ class AssociationRequestsProcessor { } // 1. Enforce permissions and other requirements. enforcePermissionsForAssociation(mContext, request, packageUid); enforcePermissionForCreatingAssociation(mContext, request, packageUid); enforceUsesCompanionDeviceFeature(mContext, userId, packageName); // 2a. Check if association can be created without launching UI (i.e. CDM needs NEITHER Loading Loading @@ -257,7 +258,7 @@ class AssociationRequestsProcessor { // 1. Need to check permissions again in case something changed, since we first received // this request. try { enforcePermissionsForAssociation(mContext, request, packageUid); enforcePermissionForCreatingAssociation(mContext, request, packageUid); } catch (SecurityException e) { // Since, at this point the caller is our own UI, we need to catch the exception on // forward it back to the application via the callback. Loading Loading @@ -316,6 +317,9 @@ class AssociationRequestsProcessor { // If it is null, then the operation will succeed without granting any role. addRoleHolderForAssociation(mService.getContext(), association, success -> { if (success) { Slog.i(TAG, "Added " + association.getDeviceProfile() + " role to userId=" + association.getUserId() + ", packageName=" + association.getPackageName()); addAssociationToStore(association); sendCallbackAndFinish(association, callback, resultReceiver); } else { Loading
services/companion/java/com/android/server/companion/AssociationRevokeProcessor.java +4 −3 Original line number Diff line number Diff line Loading @@ -20,8 +20,8 @@ import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_VISIB import static android.companion.AssociationRequest.DEVICE_PROFILE_AUTOMOTIVE_PROJECTION; import static com.android.internal.util.CollectionUtils.any; import static com.android.server.companion.MetricUtils.logRemoveAssociation; import static com.android.server.companion.RolesUtils.removeRoleHolderForAssociation; import static com.android.server.companion.utils.MetricUtils.logRemoveAssociation; import static com.android.server.companion.utils.RolesUtils.removeRoleHolderForAssociation; import static com.android.server.companion.CompanionDeviceManagerService.PerUserAssociationSet; import android.annotation.NonNull; Loading Loading @@ -203,7 +203,8 @@ public class AssociationRevokeProcessor { return false; } removeRoleHolderForAssociation(mContext, association); removeRoleHolderForAssociation(mContext, association.getUserId(), association.getPackageName(), association.getDeviceProfile()); return true; } Loading
services/companion/java/com/android/server/companion/CompanionApplicationController.java +26 −5 Original line number Diff line number Diff line Loading @@ -38,6 +38,9 @@ import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.infra.PerUser; import com.android.server.companion.presence.CompanionDevicePresenceMonitor; import com.android.server.companion.presence.ObservableUuid; import com.android.server.companion.presence.ObservableUuidStore; import com.android.server.companion.utils.PackageUtils; import java.io.PrintWriter; import java.util.ArrayList; Loading @@ -61,7 +64,7 @@ import java.util.Map; * <ul> * <li> {@link #bindCompanionApplication(int, String, boolean)} * <li> {@link #unbindCompanionApplication(int, String)} * <li> {@link #notifyCompanionApplicationDevicePresenceEvent(AssociationInfo, int)} * <li> {@link #notifyCompanionDevicePresenceEvent(AssociationInfo, int)} * <li> {@link #isCompanionApplicationBound(int, String)} * <li> {@link #isRebindingCompanionApplicationScheduled(int, String)} * </ul> Loading Loading @@ -251,7 +254,13 @@ public class CompanionApplicationController { serviceConnector.connect(); } void notifyCompanionApplicationDeviceAppeared(AssociationInfo association) { /** * Notify the app that the device appeared. * * @deprecated use {@link #notifyCompanionDevicePresenceEvent(AssociationInfo, int)} instead */ @Deprecated public void notifyCompanionApplicationDeviceAppeared(AssociationInfo association) { final int userId = association.getUserId(); final String packageName = association.getPackageName(); Loading @@ -273,7 +282,13 @@ public class CompanionApplicationController { primaryServiceConnector.postOnDeviceAppeared(association); } void notifyCompanionApplicationDeviceDisappeared(AssociationInfo association) { /** * Notify the app that the device disappeared. * * @deprecated use {@link #notifyCompanionDevicePresenceEvent(AssociationInfo, int)} instead */ @Deprecated public void notifyCompanionApplicationDeviceDisappeared(AssociationInfo association) { final int userId = association.getUserId(); final String packageName = association.getPackageName(); Loading @@ -295,7 +310,10 @@ public class CompanionApplicationController { primaryServiceConnector.postOnDeviceDisappeared(association); } void notifyCompanionApplicationDevicePresenceEvent(AssociationInfo association, int event) { /** * Notify the app that the device appeared. */ public void notifyCompanionDevicePresenceEvent(AssociationInfo association, int event) { final int userId = association.getUserId(); final String packageName = association.getPackageName(); final CompanionDeviceServiceConnector primaryServiceConnector = Loading @@ -318,7 +336,10 @@ public class CompanionApplicationController { primaryServiceConnector.postOnDevicePresenceEvent(devicePresenceEvent); } void notifyApplicationDevicePresenceEvent(ObservableUuid uuid, int event) { /** * Notify the app that the device disappeared. */ public void notifyUuidDevicePresenceEvent(ObservableUuid uuid, int event) { final int userId = uuid.getUserId(); final ParcelUuid parcelUuid = uuid.getUuid(); final String packageName = uuid.getPackageName(); Loading
services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java +15 −13 Original line number Diff line number Diff line Loading @@ -38,15 +38,15 @@ import static com.android.internal.util.CollectionUtils.any; import static com.android.internal.util.Preconditions.checkState; import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage; import static com.android.server.companion.AssociationStore.CHANGE_TYPE_UPDATED_ADDRESS_UNCHANGED; import static com.android.server.companion.PackageUtils.isRestrictedSettingsAllowed; import static com.android.server.companion.PackageUtils.enforceUsesCompanionDeviceFeature; import static com.android.server.companion.PackageUtils.getPackageInfo; import static com.android.server.companion.PermissionsUtils.checkCallerCanManageCompanionDevice; import static com.android.server.companion.PermissionsUtils.enforceCallerCanManageAssociationsForPackage; import static com.android.server.companion.PermissionsUtils.enforceCallerCanObservingDevicePresenceByUuid; import static com.android.server.companion.PermissionsUtils.enforceCallerIsSystemOr; import static com.android.server.companion.PermissionsUtils.enforceCallerIsSystemOrCanInteractWithUserId; import static com.android.server.companion.PermissionsUtils.sanitizeWithCallerChecks; import static com.android.server.companion.utils.PackageUtils.isRestrictedSettingsAllowed; import static com.android.server.companion.utils.PackageUtils.enforceUsesCompanionDeviceFeature; import static com.android.server.companion.utils.PackageUtils.getPackageInfo; import static com.android.server.companion.utils.PermissionsUtils.checkCallerCanManageCompanionDevice; import static com.android.server.companion.utils.PermissionsUtils.enforceCallerCanManageAssociationsForPackage; import static com.android.server.companion.utils.PermissionsUtils.enforceCallerCanObservingDevicePresenceByUuid; import static com.android.server.companion.utils.PermissionsUtils.enforceCallerIsSystemOr; import static com.android.server.companion.utils.PermissionsUtils.enforceCallerIsSystemOrCanInteractWithUserId; import static com.android.server.companion.utils.PermissionsUtils.sanitizeWithCallerChecks; import static java.util.Objects.requireNonNull; import static java.util.concurrent.TimeUnit.DAYS; Loading Loading @@ -123,6 +123,8 @@ import com.android.server.companion.datatransfer.contextsync.CrossDeviceCall; import com.android.server.companion.datatransfer.contextsync.CrossDeviceSyncController; import com.android.server.companion.datatransfer.contextsync.CrossDeviceSyncControllerCallback; import com.android.server.companion.presence.CompanionDevicePresenceMonitor; import com.android.server.companion.presence.ObservableUuid; import com.android.server.companion.presence.ObservableUuidStore; import com.android.server.companion.transport.CompanionTransportManager; import com.android.server.pm.UserManagerInternal; import com.android.server.wm.ActivityTaskManagerInternal; Loading Loading @@ -435,7 +437,7 @@ public class CompanionDeviceManagerService extends SystemService { bindApplicationIfNeeded(association); mCompanionAppController.notifyCompanionApplicationDevicePresenceEvent( mCompanionAppController.notifyCompanionDevicePresenceEvent( association, event); break; case EVENT_BLE_DISAPPEARED: Loading @@ -446,7 +448,7 @@ public class CompanionDeviceManagerService extends SystemService { return; } if (association.shouldBindWhenPresent()) { mCompanionAppController.notifyCompanionApplicationDevicePresenceEvent( mCompanionAppController.notifyCompanionDevicePresenceEvent( association, event); } // Check if there are other devices associated to the app that are present. Loading Loading @@ -475,7 +477,7 @@ public class CompanionDeviceManagerService extends SystemService { Log.i(TAG, "u" + userId + "\\" + packageName + " is already bound"); } mCompanionAppController.notifyApplicationDevicePresenceEvent(uuid, event); mCompanionAppController.notifyUuidDevicePresenceEvent(uuid, event); break; case EVENT_BT_DISCONNECTED: Loading @@ -484,7 +486,7 @@ public class CompanionDeviceManagerService extends SystemService { return; } mCompanionAppController.notifyApplicationDevicePresenceEvent(uuid, event); mCompanionAppController.notifyUuidDevicePresenceEvent(uuid, event); // Check if there are other devices associated to the app or the UUID to be // observed are present. if (shouldBindPackage(userId, packageName)) return; Loading
services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java +2 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ package com.android.server.companion; import static android.companion.CompanionDeviceManager.MESSAGE_REQUEST_CONTEXT_SYNC; import static com.android.server.companion.PermissionsUtils.sanitizeWithCallerChecks; import static com.android.server.companion.utils.PermissionsUtils.sanitizeWithCallerChecks; import android.companion.AssociationInfo; import android.companion.ContextSyncMessage; Loading @@ -36,6 +36,7 @@ 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.ObservableUuid; import com.android.server.companion.transport.CompanionTransportManager; import java.io.PrintWriter; Loading