Add shell command to toggle permission sync

Bug: 274947517

Test: Manual test using adb shell cmd companiondevice allow-permission-sync 0 1 false

Change-Id: I69d31cde400f91d78455a8c0aa0d2fd68337237f
This commit is contained in:
Prem
2023-03-29 20:58:44 +00:00
parent e7ff09513b
commit a5c88e4387
3 changed files with 32 additions and 4 deletions

View File

@@ -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);
}

View File

@@ -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();

View File

@@ -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<SystemDataTransferRequest> cachedRequests;
synchronized (mLock) {
// Write to cache
cachedRequests = readRequestsFromCache(userId);
cachedRequests.removeIf(
request1 -> request1.getAssociationId() == request.getAssociationId());
cachedRequests.add(request);
mCachedPerUser.set(userId, cachedRequests);
}