diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java index d2c41a461d1c7..efff112266835 100644 --- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java +++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java @@ -900,7 +900,7 @@ public class CompanionDeviceManagerService extends SystemService { String[] args, ShellCallback callback, ResultReceiver resultReceiver) throws RemoteException { new CompanionDeviceShellCommand(CompanionDeviceManagerService.this, mAssociationStore, - mDevicePresenceMonitor, mTransportManager) + mDevicePresenceMonitor, mTransportManager, mSystemDataTransferRequestStore) .exec(this, in, out, err, args, callback, resultReceiver); } diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java b/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java index 6de3585d8d173..669686adddb89 100644 --- a/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java +++ b/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java @@ -17,10 +17,12 @@ package com.android.server.companion; import android.companion.AssociationInfo; +import android.companion.datatransfer.PermissionSyncRequest; import android.net.MacAddress; import android.os.Binder; import android.os.ShellCommand; +import com.android.server.companion.datatransfer.SystemDataTransferRequestStore; import com.android.server.companion.presence.CompanionDevicePresenceMonitor; import com.android.server.companion.transport.CompanionTransportManager; @@ -35,14 +37,18 @@ class CompanionDeviceShellCommand extends ShellCommand { private final CompanionDevicePresenceMonitor mDevicePresenceMonitor; private final CompanionTransportManager mTransportManager; + private final SystemDataTransferRequestStore mSystemDataTransferRequestStore; + CompanionDeviceShellCommand(CompanionDeviceManagerService service, AssociationStore associationStore, CompanionDevicePresenceMonitor devicePresenceMonitor, - CompanionTransportManager transportManager) { + CompanionTransportManager transportManager, + SystemDataTransferRequestStore systemDataTransferRequestStore) { mService = service; mAssociationStore = associationStore; mDevicePresenceMonitor = devicePresenceMonitor; mTransportManager = transportManager; + mSystemDataTransferRequestStore = systemDataTransferRequestStore; } @Override @@ -59,7 +65,7 @@ class CompanionDeviceShellCommand extends ShellCommand { // TODO(b/212535524): use AssociationInfo.toShortString(), once it's not // longer referenced in tests. out.println(association.getPackageName() + " " - + association.getDeviceMacAddress()); + + association.getDeviceMacAddress() + " " + association.getId()); } } break; @@ -117,6 +123,17 @@ class CompanionDeviceShellCommand extends ShellCommand { mTransportManager.createDummyTransport(associationId); break; + case "allow-permission-sync": { + int userId = getNextIntArgRequired(); + associationId = getNextIntArgRequired(); + boolean enabled = getNextBooleanArgRequired(); + PermissionSyncRequest request = new PermissionSyncRequest(associationId); + request.setUserId(userId); + request.setUserConsented(enabled); + mSystemDataTransferRequestStore.writeRequest(userId, request); + } + break; + default: return handleDefaultCommands(cmd); } @@ -134,6 +151,15 @@ class CompanionDeviceShellCommand extends ShellCommand { return Integer.parseInt(getNextArgRequired()); } + private boolean getNextBooleanArgRequired() { + String arg = getNextArgRequired(); + if ("true".equalsIgnoreCase(arg) || "false".equalsIgnoreCase(arg)) { + return Boolean.parseBoolean(arg); + } else { + throw new IllegalArgumentException("Expected a boolean argument but was: " + arg); + } + } + @Override public void onHelp() { PrintWriter pw = getOutPrintWriter(); diff --git a/services/companion/java/com/android/server/companion/datatransfer/SystemDataTransferRequestStore.java b/services/companion/java/com/android/server/companion/datatransfer/SystemDataTransferRequestStore.java index 2c5d5821448e7..720cefa11d7cf 100644 --- a/services/companion/java/com/android/server/companion/datatransfer/SystemDataTransferRequestStore.java +++ b/services/companion/java/com/android/server/companion/datatransfer/SystemDataTransferRequestStore.java @@ -120,12 +120,14 @@ public class SystemDataTransferRequestStore { return requestsByAssociationId; } - void writeRequest(@UserIdInt int userId, SystemDataTransferRequest request) { + public void writeRequest(@UserIdInt int userId, SystemDataTransferRequest request) { Slog.i(LOG_TAG, "Writing request=" + request + " to store."); ArrayList cachedRequests; synchronized (mLock) { // Write to cache cachedRequests = readRequestsFromCache(userId); + cachedRequests.removeIf( + request1 -> request1.getAssociationId() == request.getAssociationId()); cachedRequests.add(request); mCachedPerUser.set(userId, cachedRequests); }