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

Commit a5c88e43 authored by Prem's avatar Prem
Browse files

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
parent e7ff0951
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
        }

+28 −2
Original line number Diff line number Diff line
@@ -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();
+3 −1
Original line number Diff line number Diff line
@@ -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);
        }