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

Commit d50bda40 authored by Chandan Nath's avatar Chandan Nath Committed by Android (Google) Code Review
Browse files

Merge "[Multi-user] Transport changes"

parents a5e892f5 1b99948e
Loading
Loading
Loading
Loading
+9 −7
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.backup;
package com.android.server.backup;


import android.annotation.Nullable;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.annotation.WorkerThread;
import android.annotation.WorkerThread;
import android.app.backup.BackupManager;
import android.app.backup.BackupManager;
import android.app.backup.BackupTransport;
import android.app.backup.BackupTransport;
@@ -29,7 +30,6 @@ import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.ArraySet;
import android.util.Slog;
import android.util.Slog;
@@ -61,7 +61,7 @@ public class TransportManager {
    public static final String SERVICE_ACTION_TRANSPORT_HOST = "android.backup.TRANSPORT_HOST";
    public static final String SERVICE_ACTION_TRANSPORT_HOST = "android.backup.TRANSPORT_HOST";


    private final Intent mTransportServiceIntent = new Intent(SERVICE_ACTION_TRANSPORT_HOST);
    private final Intent mTransportServiceIntent = new Intent(SERVICE_ACTION_TRANSPORT_HOST);
    private final Context mContext;
    private final @UserIdInt int mUserId;
    private final PackageManager mPackageManager;
    private final PackageManager mPackageManager;
    private final Set<ComponentName> mTransportWhitelist;
    private final Set<ComponentName> mTransportWhitelist;
    private final TransportClientManager mTransportClientManager;
    private final TransportClientManager mTransportClientManager;
@@ -86,22 +86,24 @@ public class TransportManager {
    @Nullable
    @Nullable
    private volatile String mCurrentTransportName;
    private volatile String mCurrentTransportName;


    TransportManager(Context context, Set<ComponentName> whitelist, String selectedTransport) {
    TransportManager(@UserIdInt int userId, Context context, Set<ComponentName> whitelist,
        mContext = context;
            String selectedTransport) {
        mUserId = userId;
        mPackageManager = context.getPackageManager();
        mPackageManager = context.getPackageManager();
        mTransportWhitelist = Preconditions.checkNotNull(whitelist);
        mTransportWhitelist = Preconditions.checkNotNull(whitelist);
        mCurrentTransportName = selectedTransport;
        mCurrentTransportName = selectedTransport;
        mTransportStats = new TransportStats();
        mTransportStats = new TransportStats();
        mTransportClientManager = new TransportClientManager(context, mTransportStats);
        mTransportClientManager = new TransportClientManager(mUserId, context, mTransportStats);
    }
    }


    @VisibleForTesting
    @VisibleForTesting
    TransportManager(
    TransportManager(
            @UserIdInt int userId,
            Context context,
            Context context,
            Set<ComponentName> whitelist,
            Set<ComponentName> whitelist,
            String selectedTransport,
            String selectedTransport,
            TransportClientManager transportClientManager) {
            TransportClientManager transportClientManager) {
        mContext = context;
        mUserId = userId;
        mPackageManager = context.getPackageManager();
        mPackageManager = context.getPackageManager();
        mTransportWhitelist = Preconditions.checkNotNull(whitelist);
        mTransportWhitelist = Preconditions.checkNotNull(whitelist);
        mCurrentTransportName = selectedTransport;
        mCurrentTransportName = selectedTransport;
@@ -575,7 +577,7 @@ public class TransportManager {
    private void registerTransportsForIntent(
    private void registerTransportsForIntent(
            Intent intent, Predicate<ComponentName> transportComponentFilter) {
            Intent intent, Predicate<ComponentName> transportComponentFilter) {
        List<ResolveInfo> hosts =
        List<ResolveInfo> hosts =
                mPackageManager.queryIntentServicesAsUser(intent, 0, UserHandle.USER_SYSTEM);
                mPackageManager.queryIntentServicesAsUser(intent, 0, mUserId);
        if (hosts == null) {
        if (hosts == null) {
            return;
            return;
        }
        }
+1 −1
Original line number Original line Diff line number Diff line
@@ -384,7 +384,7 @@ public class UserBackupManagerService {
            Slog.v(TAG, "Starting with transport " + currentTransport);
            Slog.v(TAG, "Starting with transport " + currentTransport);
        }
        }
        TransportManager transportManager =
        TransportManager transportManager =
                new TransportManager(context, transportWhitelist, currentTransport);
                new TransportManager(userId, context, transportWhitelist, currentTransport);


        File baseStateDir = UserBackupManagerFiles.getBaseStateDir(userId);
        File baseStateDir = UserBackupManagerFiles.getBaseStateDir(userId);
        File dataDir = UserBackupManagerFiles.getDataDir(userId);
        File dataDir = UserBackupManagerFiles.getDataDir(userId);
+7 −2
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.server.backup.transport.TransportUtils.formatMessage;


import android.annotation.IntDef;
import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.annotation.WorkerThread;
import android.annotation.WorkerThread;
import android.content.ComponentName;
import android.content.ComponentName;
import android.content.Context;
import android.content.Context;
@@ -34,7 +35,6 @@ import android.os.UserHandle;
import android.text.format.DateFormat;
import android.text.format.DateFormat;
import android.util.ArrayMap;
import android.util.ArrayMap;
import android.util.EventLog;
import android.util.EventLog;
import android.util.Slog;


import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
@@ -79,6 +79,7 @@ public class TransportClient {
    @VisibleForTesting static final String TAG = "TransportClient";
    @VisibleForTesting static final String TAG = "TransportClient";
    private static final int LOG_BUFFER_SIZE = 5;
    private static final int LOG_BUFFER_SIZE = 5;


    private final @UserIdInt int mUserId;
    private final Context mContext;
    private final Context mContext;
    private final TransportStats mTransportStats;
    private final TransportStats mTransportStats;
    private final Intent mBindIntent;
    private final Intent mBindIntent;
@@ -106,6 +107,7 @@ public class TransportClient {
    private volatile IBackupTransport mTransport;
    private volatile IBackupTransport mTransport;


    TransportClient(
    TransportClient(
            @UserIdInt int userId,
            Context context,
            Context context,
            TransportStats transportStats,
            TransportStats transportStats,
            Intent bindIntent,
            Intent bindIntent,
@@ -113,6 +115,7 @@ public class TransportClient {
            String identifier,
            String identifier,
            String caller) {
            String caller) {
        this(
        this(
                userId,
                context,
                context,
                transportStats,
                transportStats,
                bindIntent,
                bindIntent,
@@ -124,6 +127,7 @@ public class TransportClient {


    @VisibleForTesting
    @VisibleForTesting
    TransportClient(
    TransportClient(
            @UserIdInt int userId,
            Context context,
            Context context,
            TransportStats transportStats,
            TransportStats transportStats,
            Intent bindIntent,
            Intent bindIntent,
@@ -131,6 +135,7 @@ public class TransportClient {
            String identifier,
            String identifier,
            String caller,
            String caller,
            Handler listenerHandler) {
            Handler listenerHandler) {
        mUserId = userId;
        mContext = context;
        mContext = context;
        mTransportStats = transportStats;
        mTransportStats = transportStats;
        mTransportComponent = transportComponent;
        mTransportComponent = transportComponent;
@@ -213,7 +218,7 @@ public class TransportClient {
                                    mBindIntent,
                                    mBindIntent,
                                    mConnection,
                                    mConnection,
                                    Context.BIND_AUTO_CREATE,
                                    Context.BIND_AUTO_CREATE,
                                    UserHandle.SYSTEM);
                                    UserHandle.of(mUserId));
                    if (hasBound) {
                    if (hasBound) {
                        // We don't need to set a time-out because we are guaranteed to get a call
                        // We don't need to set a time-out because we are guaranteed to get a call
                        // back in ServiceConnection, either an onServiceConnected() or
                        // back in ServiceConnection, either an onServiceConnected() or
+8 −1
Original line number Original line Diff line number Diff line
@@ -19,12 +19,15 @@ package com.android.server.backup.transport;
import static com.android.server.backup.TransportManager.SERVICE_ACTION_TRANSPORT_HOST;
import static com.android.server.backup.TransportManager.SERVICE_ACTION_TRANSPORT_HOST;
import static com.android.server.backup.transport.TransportUtils.formatMessage;
import static com.android.server.backup.transport.TransportUtils.formatMessage;


import android.annotation.UserIdInt;
import android.content.ComponentName;
import android.content.ComponentName;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.os.Bundle;
import android.os.Bundle;

import com.android.server.backup.TransportManager;
import com.android.server.backup.TransportManager;
import com.android.server.backup.transport.TransportUtils.Priority;
import com.android.server.backup.transport.TransportUtils.Priority;

import java.io.PrintWriter;
import java.io.PrintWriter;
import java.util.Map;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.WeakHashMap;
@@ -36,13 +39,16 @@ import java.util.WeakHashMap;
public class TransportClientManager {
public class TransportClientManager {
    private static final String TAG = "TransportClientManager";
    private static final String TAG = "TransportClientManager";


    private final @UserIdInt int mUserId;
    private final Context mContext;
    private final Context mContext;
    private final TransportStats mTransportStats;
    private final TransportStats mTransportStats;
    private final Object mTransportClientsLock = new Object();
    private final Object mTransportClientsLock = new Object();
    private int mTransportClientsCreated = 0;
    private int mTransportClientsCreated = 0;
    private Map<TransportClient, String> mTransportClientsCallerMap = new WeakHashMap<>();
    private Map<TransportClient, String> mTransportClientsCallerMap = new WeakHashMap<>();


    public TransportClientManager(Context context, TransportStats transportStats) {
    public TransportClientManager(@UserIdInt int userId, Context context,
            TransportStats transportStats) {
        mUserId = userId;
        mContext = context;
        mContext = context;
        mTransportStats = transportStats;
        mTransportStats = transportStats;
    }
    }
@@ -89,6 +95,7 @@ public class TransportClientManager {
        synchronized (mTransportClientsLock) {
        synchronized (mTransportClientsLock) {
            TransportClient transportClient =
            TransportClient transportClient =
                    new TransportClient(
                    new TransportClient(
                            mUserId,
                            mContext,
                            mContext,
                            mTransportStats,
                            mTransportStats,
                            bindIntent,
                            bindIntent,
+5 −0
Original line number Original line Diff line number Diff line
@@ -41,6 +41,7 @@ import static java.util.stream.Collectors.toSet;
import static java.util.stream.Stream.concat;
import static java.util.stream.Stream.concat;


import android.annotation.Nullable;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.app.backup.BackupManager;
import android.app.backup.BackupManager;
import android.app.backup.BackupTransport;
import android.app.backup.BackupTransport;
import android.content.ComponentName;
import android.content.ComponentName;
@@ -48,6 +49,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInfo;
import android.os.UserHandle;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.Presubmit;


import com.android.server.backup.testing.TransportData;
import com.android.server.backup.testing.TransportData;
@@ -84,12 +86,14 @@ public class TransportManagerTest {
    private TransportData mTransportA2;
    private TransportData mTransportA2;
    private TransportData mTransportB1;
    private TransportData mTransportB1;
    private ShadowPackageManager mShadowPackageManager;
    private ShadowPackageManager mShadowPackageManager;
    private @UserIdInt int mUserId;
    private Context mContext;
    private Context mContext;


    @Before
    @Before
    public void setUp() throws Exception {
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);


        mUserId = UserHandle.USER_SYSTEM;
        mContext = RuntimeEnvironment.application;
        mContext = RuntimeEnvironment.application;
        mShadowPackageManager = shadowOf(mContext.getPackageManager());
        mShadowPackageManager = shadowOf(mContext.getPackageManager());


@@ -684,6 +688,7 @@ public class TransportManagerTest {
            @Nullable TransportData selectedTransport, TransportData... transports) {
            @Nullable TransportData selectedTransport, TransportData... transports) {
        TransportManager transportManager =
        TransportManager transportManager =
                new TransportManager(
                new TransportManager(
                        mUserId,
                        mContext,
                        mContext,
                        merge(selectedTransport, transports)
                        merge(selectedTransport, transports)
                                .stream()
                                .stream()
Loading