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

Commit d82f531c authored by Prem Edhara's avatar Prem Edhara Committed by Android (Google) Code Review
Browse files

Merge "Add shell command to toggle permission sync" into udc-dev

parents 2bdf8aa5 a5c88e43
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);
        }