Merge "[Multi-user] Verfiy full backup/restore flow"
This commit is contained in:
committed by
Android (Google) Code Review
commit
cda504b718
@@ -16,6 +16,7 @@
|
||||
|
||||
package android.app.backup;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.app.IBackupAgent;
|
||||
import android.app.QueuedWork;
|
||||
import android.app.backup.FullBackup.BackupScheme.PathWithRequiredFlags;
|
||||
@@ -181,6 +182,8 @@ public abstract class BackupAgent extends ContextWrapper {
|
||||
|
||||
Handler mHandler = null;
|
||||
|
||||
@Nullable private UserHandle mUser;
|
||||
|
||||
Handler getHandler() {
|
||||
if (mHandler == null) {
|
||||
mHandler = new Handler(Looper.getMainLooper());
|
||||
@@ -232,6 +235,8 @@ public abstract class BackupAgent extends ContextWrapper {
|
||||
*/
|
||||
public void onCreate(UserHandle user) {
|
||||
onCreate();
|
||||
|
||||
mUser = user;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -528,6 +533,10 @@ public abstract class BackupAgent extends ContextWrapper {
|
||||
public void onQuotaExceeded(long backupDataBytes, long quotaBytes) {
|
||||
}
|
||||
|
||||
private int getBackupUserId() {
|
||||
return mUser == null ? super.getUserId() : mUser.getIdentifier();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the xml yielded any <include/> tag for the provided <code>domainToken</code>.
|
||||
* If so, perform a {@link #fullBackupFileTree} which backs up the file or recurses if the path
|
||||
@@ -1033,7 +1042,7 @@ public abstract class BackupAgent extends ContextWrapper {
|
||||
|
||||
Binder.restoreCallingIdentity(ident);
|
||||
try {
|
||||
callbackBinder.opComplete(token, 0);
|
||||
callbackBinder.opCompleteForUser(getBackupUserId(), token, 0);
|
||||
} catch (RemoteException e) {
|
||||
// we'll time out anyway, so we're safe
|
||||
}
|
||||
@@ -1082,7 +1091,7 @@ public abstract class BackupAgent extends ContextWrapper {
|
||||
|
||||
Binder.restoreCallingIdentity(ident);
|
||||
try {
|
||||
callbackBinder.opComplete(token, 0);
|
||||
callbackBinder.opCompleteForUser(getBackupUserId(), token, 0);
|
||||
} catch (RemoteException e) {
|
||||
// we'll time out anyway, so we're safe
|
||||
}
|
||||
@@ -1112,7 +1121,8 @@ public abstract class BackupAgent extends ContextWrapper {
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(ident);
|
||||
try {
|
||||
callbackBinder.opComplete(token, measureOutput.getSize());
|
||||
callbackBinder.opCompleteForUser(getBackupUserId(), token,
|
||||
measureOutput.getSize());
|
||||
} catch (RemoteException e) {
|
||||
// timeout, so we're safe
|
||||
}
|
||||
@@ -1137,7 +1147,7 @@ public abstract class BackupAgent extends ContextWrapper {
|
||||
|
||||
Binder.restoreCallingIdentity(ident);
|
||||
try {
|
||||
callbackBinder.opComplete(token, 0);
|
||||
callbackBinder.opCompleteForUser(getBackupUserId(), token, 0);
|
||||
} catch (RemoteException e) {
|
||||
// we'll time out anyway, so we're safe
|
||||
}
|
||||
@@ -1162,7 +1172,7 @@ public abstract class BackupAgent extends ContextWrapper {
|
||||
|
||||
Binder.restoreCallingIdentity(ident);
|
||||
try {
|
||||
callbackBinder.opComplete(token, 0);
|
||||
callbackBinder.opCompleteForUser(getBackupUserId(), token, 0);
|
||||
} catch (RemoteException e) {
|
||||
// we'll time out anyway, so we're safe
|
||||
}
|
||||
|
||||
@@ -547,6 +547,19 @@ interface IBackupManager {
|
||||
*/
|
||||
IRestoreSession beginRestoreSessionForUser(int userId, String packageName, String transportID);
|
||||
|
||||
/**
|
||||
* Notify the backup manager that a BackupAgent has completed the operation
|
||||
* corresponding to the given token and user id.
|
||||
*
|
||||
* @param userId User id for which the operation has been completed.
|
||||
* @param token The transaction token passed to the BackupAgent method being
|
||||
* invoked.
|
||||
* @param result In the case of a full backup measure operation, the estimated
|
||||
* total file size that would result from the operation. Unused in all other
|
||||
* cases.
|
||||
*/
|
||||
void opCompleteForUser(int userId, int token, long result);
|
||||
|
||||
/**
|
||||
* Notify the backup manager that a BackupAgent has completed the operation
|
||||
* corresponding to the given token.
|
||||
|
||||
@@ -164,7 +164,7 @@ public class PackageManagerBackupAgent extends BackupAgent {
|
||||
int N = pkgs.size();
|
||||
for (int a = N-1; a >= 0; a--) {
|
||||
PackageInfo pkg = pkgs.get(a);
|
||||
if (!AppBackupUtils.appIsEligibleForBackup(pkg.applicationInfo, pm)) {
|
||||
if (!AppBackupUtils.appIsEligibleForBackup(pkg.applicationInfo, userId)) {
|
||||
pkgs.remove(a);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,13 +636,17 @@ public class Trampoline extends IBackupManager.Stub {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void opComplete(int token, long result) throws RemoteException {
|
||||
int userId = binderGetCallingUserId();
|
||||
public void opCompleteForUser(int userId, int token, long result) throws RemoteException {
|
||||
if (isUserReadyForBackup(userId)) {
|
||||
mService.opComplete(binderGetCallingUserId(), token, result);
|
||||
mService.opComplete(userId, token, result);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void opComplete(int token, long result) throws RemoteException {
|
||||
opCompleteForUser(binderGetCallingUserId(), token, result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getAvailableRestoreTokenForUser(int userId, String packageName) {
|
||||
return isUserReadyForBackup(userId) ? mService.getAvailableRestoreToken(userId,
|
||||
|
||||
@@ -804,7 +804,7 @@ public class UserBackupManagerService {
|
||||
public BackupAgent makeMetadataAgent() {
|
||||
PackageManagerBackupAgent pmAgent = new PackageManagerBackupAgent(mPackageManager, mUserId);
|
||||
pmAgent.attach(mContext);
|
||||
pmAgent.onCreate();
|
||||
pmAgent.onCreate(UserHandle.of(mUserId));
|
||||
return pmAgent;
|
||||
}
|
||||
|
||||
@@ -815,7 +815,7 @@ public class UserBackupManagerService {
|
||||
PackageManagerBackupAgent pmAgent =
|
||||
new PackageManagerBackupAgent(mPackageManager, packages, mUserId);
|
||||
pmAgent.attach(mContext);
|
||||
pmAgent.onCreate();
|
||||
pmAgent.onCreate(UserHandle.of(mUserId));
|
||||
return pmAgent;
|
||||
}
|
||||
|
||||
@@ -910,10 +910,10 @@ public class UserBackupManagerService {
|
||||
long lastBackup = in.readLong();
|
||||
foundApps.add(pkgName); // all apps that we've addressed already
|
||||
try {
|
||||
PackageInfo pkg = mPackageManager.getPackageInfo(pkgName, 0);
|
||||
PackageInfo pkg = mPackageManager.getPackageInfoAsUser(pkgName, 0, mUserId);
|
||||
if (AppBackupUtils.appGetsFullBackup(pkg)
|
||||
&& AppBackupUtils.appIsEligibleForBackup(
|
||||
pkg.applicationInfo, mPackageManager)) {
|
||||
&& AppBackupUtils.appIsEligibleForBackup(pkg.applicationInfo,
|
||||
mUserId)) {
|
||||
schedule.add(new FullBackupEntry(pkgName, lastBackup));
|
||||
} else {
|
||||
if (DEBUG) {
|
||||
@@ -933,8 +933,8 @@ public class UserBackupManagerService {
|
||||
// scan to make sure that we're tracking all full-backup candidates properly
|
||||
for (PackageInfo app : apps) {
|
||||
if (AppBackupUtils.appGetsFullBackup(app)
|
||||
&& AppBackupUtils.appIsEligibleForBackup(
|
||||
app.applicationInfo, mPackageManager)) {
|
||||
&& AppBackupUtils.appIsEligibleForBackup(app.applicationInfo,
|
||||
mUserId)) {
|
||||
if (!foundApps.contains(app.packageName)) {
|
||||
if (MORE_DEBUG) {
|
||||
Slog.i(TAG, "New full backup app " + app.packageName + " found");
|
||||
@@ -960,7 +960,7 @@ public class UserBackupManagerService {
|
||||
schedule = new ArrayList<>(apps.size());
|
||||
for (PackageInfo info : apps) {
|
||||
if (AppBackupUtils.appGetsFullBackup(info) && AppBackupUtils.appIsEligibleForBackup(
|
||||
info.applicationInfo, mPackageManager)) {
|
||||
info.applicationInfo, mUserId)) {
|
||||
schedule.add(new FullBackupEntry(info.packageName, 0));
|
||||
}
|
||||
}
|
||||
@@ -1222,8 +1222,8 @@ public class UserBackupManagerService {
|
||||
mPackageManager.getPackageInfoAsUser(
|
||||
packageName, /* flags */ 0, mUserId);
|
||||
if (AppBackupUtils.appGetsFullBackup(app)
|
||||
&& AppBackupUtils.appIsEligibleForBackup(
|
||||
app.applicationInfo, mPackageManager)) {
|
||||
&& AppBackupUtils.appIsEligibleForBackup(app.applicationInfo,
|
||||
mUserId)) {
|
||||
enqueueFullBackup(packageName, now);
|
||||
scheduleNextFullBackupJob(0);
|
||||
} else {
|
||||
@@ -1618,8 +1618,7 @@ public class UserBackupManagerService {
|
||||
try {
|
||||
PackageInfo packageInfo = mPackageManager.getPackageInfoAsUser(packageName,
|
||||
PackageManager.GET_SIGNING_CERTIFICATES, mUserId);
|
||||
if (!AppBackupUtils.appIsEligibleForBackup(packageInfo.applicationInfo,
|
||||
mPackageManager)) {
|
||||
if (!AppBackupUtils.appIsEligibleForBackup(packageInfo.applicationInfo, mUserId)) {
|
||||
BackupObserverUtils.sendBackupOnPackageResult(observer, packageName,
|
||||
BackupManager.ERROR_BACKUP_NOT_ALLOWED);
|
||||
continue;
|
||||
@@ -2095,7 +2094,8 @@ public class UserBackupManagerService {
|
||||
}
|
||||
|
||||
try {
|
||||
PackageInfo appInfo = mPackageManager.getPackageInfo(entry.packageName, 0);
|
||||
PackageInfo appInfo = mPackageManager.getPackageInfoAsUser(
|
||||
entry.packageName, 0, mUserId);
|
||||
if (!AppBackupUtils.appGetsFullBackup(appInfo)) {
|
||||
// The head app isn't supposed to get full-data backups [any more];
|
||||
// so we cull it and force a loop around to consider the new head
|
||||
|
||||
@@ -286,7 +286,8 @@ public class PerformAdbBackupTask extends FullBackupTask implements BackupRestor
|
||||
Iterator<Entry<String, PackageInfo>> iter = packagesToBackup.entrySet().iterator();
|
||||
while (iter.hasNext()) {
|
||||
PackageInfo pkg = iter.next().getValue();
|
||||
if (!AppBackupUtils.appIsEligibleForBackup(pkg.applicationInfo, pm)
|
||||
if (!AppBackupUtils.appIsEligibleForBackup(pkg.applicationInfo,
|
||||
mUserBackupManagerService.getUserId())
|
||||
|| AppBackupUtils.appIsStopped(pkg.applicationInfo)) {
|
||||
iter.remove();
|
||||
if (DEBUG) {
|
||||
|
||||
@@ -143,6 +143,7 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba
|
||||
private final int mBackupRunnerOpToken;
|
||||
private final OnTaskFinishedListener mListener;
|
||||
private final TransportClient mTransportClient;
|
||||
private final int mUserId;
|
||||
|
||||
// This is true when a backup operation for some package is in progress.
|
||||
private volatile boolean mIsDoingBackup;
|
||||
@@ -173,6 +174,7 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba
|
||||
mAgentTimeoutParameters = Preconditions.checkNotNull(
|
||||
backupManagerService.getAgentTimeoutParameters(),
|
||||
"Timeout parameters cannot be null");
|
||||
mUserId = backupManagerService.getUserId();
|
||||
|
||||
if (backupManagerService.isBackupOperationInProgress()) {
|
||||
if (DEBUG) {
|
||||
@@ -187,9 +189,10 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba
|
||||
for (String pkg : whichPackages) {
|
||||
try {
|
||||
PackageManager pm = backupManagerService.getPackageManager();
|
||||
PackageInfo info = pm.getPackageInfo(pkg, PackageManager.GET_SIGNING_CERTIFICATES);
|
||||
PackageInfo info = pm.getPackageInfoAsUser(pkg,
|
||||
PackageManager.GET_SIGNING_CERTIFICATES, mUserId);
|
||||
mCurrentPackage = info;
|
||||
if (!AppBackupUtils.appIsEligibleForBackup(info.applicationInfo, pm)) {
|
||||
if (!AppBackupUtils.appIsEligibleForBackup(info.applicationInfo, mUserId)) {
|
||||
// Cull any packages that have indicated that backups are not permitted,
|
||||
// that run as system-domain uids but do not define their own backup agents,
|
||||
// as well as any explicit mention of the 'special' shared-storage agent
|
||||
@@ -633,7 +636,7 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba
|
||||
unregisterTask();
|
||||
|
||||
if (mJob != null) {
|
||||
mJob.finishBackupPass(backupManagerService.getUserId());
|
||||
mJob.finishBackupPass(mUserId);
|
||||
}
|
||||
|
||||
synchronized (backupManagerService.getQueueLock()) {
|
||||
|
||||
@@ -489,7 +489,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable {
|
||||
throw AgentException.permanent(e);
|
||||
}
|
||||
ApplicationInfo applicationInfo = packageInfo.applicationInfo;
|
||||
if (!AppBackupUtils.appIsEligibleForBackup(applicationInfo, mPackageManager)) {
|
||||
if (!AppBackupUtils.appIsEligibleForBackup(applicationInfo, mUserId)) {
|
||||
mReporter.onPackageNotEligibleForBackup(packageName);
|
||||
throw AgentException.permanent();
|
||||
}
|
||||
|
||||
@@ -230,7 +230,7 @@ public class FullRestoreEngine extends RestoreEngine {
|
||||
PackageManagerInternal.class);
|
||||
RestorePolicy restorePolicy = tarBackupReader.chooseRestorePolicy(
|
||||
mBackupManagerService.getPackageManager(), allowApks, info, signatures,
|
||||
pmi);
|
||||
pmi, mUserId);
|
||||
mManifestSignatures.put(info.packageName, signatures);
|
||||
mPackagePolicies.put(pkg, restorePolicy);
|
||||
mPackageInstallers.put(pkg, info.installerPackageName);
|
||||
@@ -332,8 +332,9 @@ public class FullRestoreEngine extends RestoreEngine {
|
||||
}
|
||||
|
||||
try {
|
||||
mTargetApp = mBackupManagerService.getPackageManager()
|
||||
.getApplicationInfoAsUser(pkg, 0, mUserId);
|
||||
mTargetApp =
|
||||
mBackupManagerService.getPackageManager()
|
||||
.getApplicationInfoAsUser(pkg, 0, mUserId);
|
||||
|
||||
// If we haven't sent any data to this app yet, we probably
|
||||
// need to clear it first. Check that.
|
||||
|
||||
@@ -232,7 +232,7 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (AppBackupUtils.appIsEligibleForBackup(info.applicationInfo, pm)) {
|
||||
if (AppBackupUtils.appIsEligibleForBackup(info.applicationInfo, mUserId)) {
|
||||
mAcceptSet.add(info);
|
||||
}
|
||||
} catch (NameNotFoundException e) {
|
||||
|
||||
@@ -18,19 +18,25 @@ package com.android.server.backup.utils;
|
||||
|
||||
import static com.android.server.backup.BackupManagerService.MORE_DEBUG;
|
||||
import static com.android.server.backup.BackupManagerService.TAG;
|
||||
import static com.android.server.backup.UserBackupManagerService.PACKAGE_MANAGER_SENTINEL;
|
||||
import static com.android.server.backup.UserBackupManagerService.SHARED_BACKUP_AGENT_PACKAGE;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.app.AppGlobals;
|
||||
import android.app.backup.BackupTransport;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManagerInternal;
|
||||
import android.content.pm.Signature;
|
||||
import android.content.pm.SigningInfo;
|
||||
import android.os.Process;
|
||||
import android.os.RemoteException;
|
||||
import android.os.UserHandle;
|
||||
import android.util.Slog;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.backup.IBackupTransport;
|
||||
import com.android.internal.util.ArrayUtils;
|
||||
import com.android.server.backup.transport.TransportClient;
|
||||
@@ -39,7 +45,6 @@ import com.android.server.backup.transport.TransportClient;
|
||||
* Utility methods wrapping operations on ApplicationInfo and PackageInfo.
|
||||
*/
|
||||
public class AppBackupUtils {
|
||||
|
||||
private static final boolean DEBUG = false;
|
||||
|
||||
/**
|
||||
@@ -54,15 +59,30 @@ public class AppBackupUtils {
|
||||
* <li>it is the special shared-storage backup package used for 'adb backup'
|
||||
* </ol>
|
||||
*/
|
||||
public static boolean appIsEligibleForBackup(ApplicationInfo app, PackageManager pm) {
|
||||
public static boolean appIsEligibleForBackup(ApplicationInfo app, int userId) {
|
||||
return appIsEligibleForBackup(app, AppGlobals.getPackageManager(), userId);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
static boolean appIsEligibleForBackup(ApplicationInfo app,
|
||||
IPackageManager packageManager, int userId) {
|
||||
// 1. their manifest states android:allowBackup="false"
|
||||
if ((app.flags & ApplicationInfo.FLAG_ALLOW_BACKUP) == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 2. they run as a system-level uid but do not supply their own backup agent
|
||||
if ((app.uid < Process.FIRST_APPLICATION_UID) && (app.backupAgentName == null)) {
|
||||
return false;
|
||||
// 2. they run as a system-level uid
|
||||
if ((app.uid < Process.FIRST_APPLICATION_UID)) {
|
||||
// and the backup is happening for non-system user
|
||||
if (userId != UserHandle.USER_SYSTEM && !app.packageName.equals(
|
||||
PACKAGE_MANAGER_SENTINEL)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// or do not supply their own backup agent
|
||||
if (app.backupAgentName == null) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 3. it is the special shared-storage backup package used for 'adb backup'
|
||||
@@ -75,9 +95,7 @@ public class AppBackupUtils {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Everything else checks out; the only remaining roadblock would be if the
|
||||
// package were disabled
|
||||
return !appIsDisabled(app, pm);
|
||||
return !appIsDisabled(app, packageManager, userId);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -99,9 +117,9 @@ public class AppBackupUtils {
|
||||
PackageInfo packageInfo = pm.getPackageInfoAsUser(packageName,
|
||||
PackageManager.GET_SIGNING_CERTIFICATES, userId);
|
||||
ApplicationInfo applicationInfo = packageInfo.applicationInfo;
|
||||
if (!appIsEligibleForBackup(applicationInfo, pm)
|
||||
if (!appIsEligibleForBackup(applicationInfo, userId)
|
||||
|| appIsStopped(applicationInfo)
|
||||
|| appIsDisabled(applicationInfo, pm)) {
|
||||
|| appIsDisabled(applicationInfo, userId)) {
|
||||
return false;
|
||||
}
|
||||
if (transportClient != null) {
|
||||
@@ -123,8 +141,22 @@ public class AppBackupUtils {
|
||||
}
|
||||
|
||||
/** Avoid backups of 'disabled' apps. */
|
||||
public static boolean appIsDisabled(ApplicationInfo app, PackageManager pm) {
|
||||
switch (pm.getApplicationEnabledSetting(app.packageName)) {
|
||||
static boolean appIsDisabled(ApplicationInfo app, int userId) {
|
||||
return appIsDisabled(app, AppGlobals.getPackageManager(), userId);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
static boolean appIsDisabled(ApplicationInfo app,
|
||||
IPackageManager packageManager, int userId) {
|
||||
int enabledSetting;
|
||||
try {
|
||||
enabledSetting = packageManager.getApplicationEnabledSetting(app.packageName, userId);
|
||||
} catch (RemoteException e) {
|
||||
Slog.e(TAG, "Failed to get application enabled setting: " + e);
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (enabledSetting) {
|
||||
case PackageManager.COMPONENT_ENABLED_STATE_DISABLED:
|
||||
case PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER:
|
||||
case PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED:
|
||||
|
||||
@@ -383,11 +383,12 @@ public class TarBackupReader {
|
||||
* @param allowApks - allow restore set to include apks.
|
||||
* @param info - file metadata.
|
||||
* @param signatures - array of signatures parsed from backup file.
|
||||
* @param userId - ID of the user for which restore is performed.
|
||||
* @return a restore policy constant.
|
||||
*/
|
||||
public RestorePolicy chooseRestorePolicy(PackageManager packageManager,
|
||||
boolean allowApks, FileMetadata info, Signature[] signatures,
|
||||
PackageManagerInternal pmi) {
|
||||
PackageManagerInternal pmi, int userId) {
|
||||
if (signatures == null) {
|
||||
return RestorePolicy.IGNORE;
|
||||
}
|
||||
@@ -396,8 +397,8 @@ public class TarBackupReader {
|
||||
|
||||
// Okay, got the manifest info we need...
|
||||
try {
|
||||
PackageInfo pkgInfo = packageManager.getPackageInfo(
|
||||
info.packageName, PackageManager.GET_SIGNING_CERTIFICATES);
|
||||
PackageInfo pkgInfo = packageManager.getPackageInfoAsUser(
|
||||
info.packageName, PackageManager.GET_SIGNING_CERTIFICATES, userId);
|
||||
// Fall through to IGNORE if the app explicitly disallows backup
|
||||
final int flags = pkgInfo.applicationInfo.flags;
|
||||
if ((flags & ApplicationInfo.FLAG_ALLOW_BACKUP) != 0) {
|
||||
|
||||
@@ -116,6 +116,7 @@ import com.android.server.backup.testing.TransportTestUtils;
|
||||
import com.android.server.backup.testing.TransportTestUtils.TransportMock;
|
||||
import com.android.server.testing.shadows.FrameworkShadowLooper;
|
||||
import com.android.server.testing.shadows.ShadowApplicationPackageManager;
|
||||
import com.android.server.testing.shadows.ShadowBackupActivityThread;
|
||||
import com.android.server.testing.shadows.ShadowBackupDataInput;
|
||||
import com.android.server.testing.shadows.ShadowBackupDataOutput;
|
||||
import com.android.server.testing.shadows.ShadowEventLog;
|
||||
@@ -163,6 +164,7 @@ import java.util.stream.Stream;
|
||||
ShadowBackupDataOutput.class,
|
||||
ShadowEventLog.class,
|
||||
ShadowQueuedWork.class,
|
||||
ShadowBackupActivityThread.class,
|
||||
})
|
||||
@Presubmit
|
||||
public class KeyValueBackupTaskTest {
|
||||
|
||||
@@ -62,7 +62,7 @@ public class ShadowAppBackupUtils {
|
||||
}
|
||||
|
||||
@Implementation
|
||||
protected static boolean appIsEligibleForBackup(ApplicationInfo app, PackageManager pm) {
|
||||
protected static boolean appIsEligibleForBackup(ApplicationInfo app, int userId) {
|
||||
return sAppsEligibleForBackup.contains(app.packageName);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright (C) 2019 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.server.testing.shadows;
|
||||
|
||||
import android.app.ActivityThread;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.RemoteException;
|
||||
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Implementation;
|
||||
import org.robolectric.annotation.Implements;
|
||||
import org.robolectric.shadows.ShadowActivityThread;
|
||||
|
||||
import java.lang.reflect.InvocationHandler;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Proxy;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
/**
|
||||
* Extends the existing {@link ShadowActivityThread} to add support for
|
||||
* {@link PackageManager#getApplicationEnabledSetting(String)} in the shadow {@link PackageManager}
|
||||
* returned by {@link ShadowBackupActivityThread#getPackageManager()}.
|
||||
*/
|
||||
@Implements(value = ActivityThread.class, isInAndroidSdk = false, looseSignatures = true)
|
||||
public class ShadowBackupActivityThread extends ShadowActivityThread {
|
||||
@Implementation
|
||||
public static Object getPackageManager() {
|
||||
ClassLoader classLoader = ShadowActivityThread.class.getClassLoader();
|
||||
Class<?> iPackageManagerClass;
|
||||
try {
|
||||
iPackageManagerClass = classLoader.loadClass("android.content.pm.IPackageManager");
|
||||
} catch (ClassNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
return Proxy.newProxyInstance(
|
||||
classLoader,
|
||||
new Class[] {iPackageManagerClass},
|
||||
new InvocationHandler() {
|
||||
@Override
|
||||
public Object invoke(Object proxy, @Nonnull Method method, Object[] args)
|
||||
throws Exception {
|
||||
if (method.getName().equals("getApplicationInfo")) {
|
||||
String packageName = (String) args[0];
|
||||
int flags = (Integer) args[1];
|
||||
|
||||
try {
|
||||
return RuntimeEnvironment.application
|
||||
.getPackageManager()
|
||||
.getApplicationInfo(packageName, flags);
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
throw new RemoteException(e.getMessage());
|
||||
}
|
||||
} else if (method.getName().equals("getApplicationEnabledSetting")) {
|
||||
return 0;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -48,11 +48,7 @@ public class PackageManagerStub extends PackageManager {
|
||||
@Override
|
||||
public PackageInfo getPackageInfo(String packageName, int flags)
|
||||
throws NameNotFoundException {
|
||||
if (sPackageInfo == null) {
|
||||
throw new NameNotFoundException();
|
||||
}
|
||||
|
||||
return sPackageInfo;
|
||||
return getPackageInfoAsUser(packageName, flags, UserHandle.USER_SYSTEM);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -64,7 +60,11 @@ public class PackageManagerStub extends PackageManager {
|
||||
@Override
|
||||
public PackageInfo getPackageInfoAsUser(String packageName, int flags, int userId)
|
||||
throws NameNotFoundException {
|
||||
return null;
|
||||
if (sPackageInfo == null) {
|
||||
throw new NameNotFoundException();
|
||||
}
|
||||
|
||||
return sPackageInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -29,13 +29,14 @@ import android.content.pm.PackageParser;
|
||||
import android.content.pm.Signature;
|
||||
import android.content.pm.SigningInfo;
|
||||
import android.os.Process;
|
||||
import android.os.UserHandle;
|
||||
import android.platform.test.annotations.Presubmit;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.server.backup.UserBackupManagerService;
|
||||
import com.android.server.backup.testutils.PackageManagerStub;
|
||||
import com.android.server.backup.testutils.IPackageManagerStub;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -53,13 +54,17 @@ public class AppBackupUtilsTest {
|
||||
private static final Signature SIGNATURE_3 = generateSignature((byte) 3);
|
||||
private static final Signature SIGNATURE_4 = generateSignature((byte) 4);
|
||||
|
||||
private PackageManagerStub mPackageManagerStub;
|
||||
private IPackageManagerStub mPackageManagerStub;
|
||||
private PackageManagerInternal mMockPackageManagerInternal;
|
||||
|
||||
private int mUserId;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
mPackageManagerStub = new PackageManagerStub();
|
||||
mPackageManagerStub = new IPackageManagerStub();
|
||||
mMockPackageManagerInternal = mock(PackageManagerInternal.class);
|
||||
|
||||
mUserId = UserHandle.USER_SYSTEM;
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -71,7 +76,7 @@ public class AppBackupUtilsTest {
|
||||
applicationInfo.packageName = TEST_PACKAGE_NAME;
|
||||
|
||||
boolean isEligible = AppBackupUtils.appIsEligibleForBackup(applicationInfo,
|
||||
mPackageManagerStub);
|
||||
mPackageManagerStub, mUserId);
|
||||
|
||||
assertThat(isEligible).isFalse();
|
||||
}
|
||||
@@ -86,7 +91,7 @@ public class AppBackupUtilsTest {
|
||||
applicationInfo.packageName = TEST_PACKAGE_NAME;
|
||||
|
||||
boolean isEligible = AppBackupUtils.appIsEligibleForBackup(applicationInfo,
|
||||
mPackageManagerStub);
|
||||
mPackageManagerStub, mUserId);
|
||||
|
||||
assertThat(isEligible).isFalse();
|
||||
}
|
||||
@@ -100,7 +105,7 @@ public class AppBackupUtilsTest {
|
||||
applicationInfo.packageName = UserBackupManagerService.SHARED_BACKUP_AGENT_PACKAGE;
|
||||
|
||||
boolean isEligible = AppBackupUtils.appIsEligibleForBackup(applicationInfo,
|
||||
mPackageManagerStub);
|
||||
mPackageManagerStub, mUserId);
|
||||
|
||||
assertThat(isEligible).isFalse();
|
||||
}
|
||||
@@ -114,11 +119,11 @@ public class AppBackupUtilsTest {
|
||||
applicationInfo.backupAgentName = CUSTOM_BACKUP_AGENT_NAME;
|
||||
applicationInfo.packageName = TEST_PACKAGE_NAME;
|
||||
|
||||
PackageManagerStub.sApplicationEnabledSetting =
|
||||
IPackageManagerStub.sApplicationEnabledSetting =
|
||||
PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
|
||||
|
||||
boolean isEligible = AppBackupUtils.appIsEligibleForBackup(applicationInfo,
|
||||
mPackageManagerStub);
|
||||
mPackageManagerStub, mUserId);
|
||||
|
||||
assertThat(isEligible).isTrue();
|
||||
}
|
||||
@@ -132,11 +137,11 @@ public class AppBackupUtilsTest {
|
||||
applicationInfo.backupAgentName = null;
|
||||
applicationInfo.packageName = TEST_PACKAGE_NAME;
|
||||
|
||||
PackageManagerStub.sApplicationEnabledSetting =
|
||||
IPackageManagerStub.sApplicationEnabledSetting =
|
||||
PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
|
||||
|
||||
boolean isEligible = AppBackupUtils.appIsEligibleForBackup(applicationInfo,
|
||||
mPackageManagerStub);
|
||||
mPackageManagerStub, mUserId);
|
||||
|
||||
assertThat(isEligible).isTrue();
|
||||
}
|
||||
@@ -150,11 +155,11 @@ public class AppBackupUtilsTest {
|
||||
applicationInfo.backupAgentName = CUSTOM_BACKUP_AGENT_NAME;
|
||||
applicationInfo.packageName = TEST_PACKAGE_NAME;
|
||||
|
||||
PackageManagerStub.sApplicationEnabledSetting =
|
||||
IPackageManagerStub.sApplicationEnabledSetting =
|
||||
PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
|
||||
|
||||
boolean isEligible = AppBackupUtils.appIsEligibleForBackup(applicationInfo,
|
||||
mPackageManagerStub);
|
||||
mPackageManagerStub, mUserId);
|
||||
|
||||
assertThat(isEligible).isTrue();
|
||||
}
|
||||
@@ -168,11 +173,11 @@ public class AppBackupUtilsTest {
|
||||
applicationInfo.backupAgentName = CUSTOM_BACKUP_AGENT_NAME;
|
||||
applicationInfo.packageName = TEST_PACKAGE_NAME;
|
||||
|
||||
PackageManagerStub.sApplicationEnabledSetting =
|
||||
IPackageManagerStub.sApplicationEnabledSetting =
|
||||
PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
|
||||
|
||||
boolean isEligible = AppBackupUtils.appIsEligibleForBackup(applicationInfo,
|
||||
mPackageManagerStub);
|
||||
mPackageManagerStub, mUserId);
|
||||
|
||||
assertThat(isEligible).isFalse();
|
||||
}
|
||||
@@ -186,11 +191,11 @@ public class AppBackupUtilsTest {
|
||||
applicationInfo.backupAgentName = null;
|
||||
applicationInfo.packageName = TEST_PACKAGE_NAME;
|
||||
|
||||
PackageManagerStub.sApplicationEnabledSetting =
|
||||
IPackageManagerStub.sApplicationEnabledSetting =
|
||||
PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
|
||||
|
||||
boolean isEligible = AppBackupUtils.appIsEligibleForBackup(applicationInfo,
|
||||
mPackageManagerStub);
|
||||
mPackageManagerStub, mUserId);
|
||||
|
||||
assertThat(isEligible).isFalse();
|
||||
}
|
||||
@@ -204,11 +209,11 @@ public class AppBackupUtilsTest {
|
||||
applicationInfo.backupAgentName = CUSTOM_BACKUP_AGENT_NAME;
|
||||
applicationInfo.packageName = TEST_PACKAGE_NAME;
|
||||
|
||||
PackageManagerStub.sApplicationEnabledSetting =
|
||||
IPackageManagerStub.sApplicationEnabledSetting =
|
||||
PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
|
||||
|
||||
boolean isEligible = AppBackupUtils.appIsEligibleForBackup(applicationInfo,
|
||||
mPackageManagerStub);
|
||||
mPackageManagerStub, mUserId);
|
||||
|
||||
assertThat(isEligible).isFalse();
|
||||
}
|
||||
@@ -222,10 +227,11 @@ public class AppBackupUtilsTest {
|
||||
applicationInfo.packageName = TEST_PACKAGE_NAME;
|
||||
applicationInfo.enabled = true;
|
||||
|
||||
PackageManagerStub.sApplicationEnabledSetting =
|
||||
IPackageManagerStub.sApplicationEnabledSetting =
|
||||
PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
|
||||
|
||||
boolean isDisabled = AppBackupUtils.appIsDisabled(applicationInfo, mPackageManagerStub);
|
||||
boolean isDisabled = AppBackupUtils.appIsDisabled(applicationInfo, mPackageManagerStub,
|
||||
mUserId);
|
||||
|
||||
assertThat(isDisabled).isFalse();
|
||||
}
|
||||
@@ -239,10 +245,11 @@ public class AppBackupUtilsTest {
|
||||
applicationInfo.packageName = TEST_PACKAGE_NAME;
|
||||
applicationInfo.enabled = false;
|
||||
|
||||
PackageManagerStub.sApplicationEnabledSetting =
|
||||
IPackageManagerStub.sApplicationEnabledSetting =
|
||||
PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
|
||||
|
||||
boolean isDisabled = AppBackupUtils.appIsDisabled(applicationInfo, mPackageManagerStub);
|
||||
boolean isDisabled = AppBackupUtils.appIsDisabled(applicationInfo, mPackageManagerStub,
|
||||
mUserId);
|
||||
|
||||
assertThat(isDisabled).isTrue();
|
||||
}
|
||||
@@ -255,10 +262,11 @@ public class AppBackupUtilsTest {
|
||||
applicationInfo.backupAgentName = CUSTOM_BACKUP_AGENT_NAME;
|
||||
applicationInfo.packageName = TEST_PACKAGE_NAME;
|
||||
|
||||
PackageManagerStub.sApplicationEnabledSetting =
|
||||
IPackageManagerStub.sApplicationEnabledSetting =
|
||||
PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
|
||||
|
||||
boolean isDisabled = AppBackupUtils.appIsDisabled(applicationInfo, mPackageManagerStub);
|
||||
boolean isDisabled = AppBackupUtils.appIsDisabled(applicationInfo, mPackageManagerStub,
|
||||
mUserId);
|
||||
|
||||
assertThat(isDisabled).isFalse();
|
||||
}
|
||||
@@ -271,10 +279,11 @@ public class AppBackupUtilsTest {
|
||||
applicationInfo.backupAgentName = CUSTOM_BACKUP_AGENT_NAME;
|
||||
applicationInfo.packageName = TEST_PACKAGE_NAME;
|
||||
|
||||
PackageManagerStub.sApplicationEnabledSetting =
|
||||
IPackageManagerStub.sApplicationEnabledSetting =
|
||||
PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
|
||||
|
||||
boolean isDisabled = AppBackupUtils.appIsDisabled(applicationInfo, mPackageManagerStub);
|
||||
boolean isDisabled = AppBackupUtils.appIsDisabled(applicationInfo, mPackageManagerStub,
|
||||
mUserId);
|
||||
|
||||
assertThat(isDisabled).isTrue();
|
||||
}
|
||||
@@ -287,10 +296,11 @@ public class AppBackupUtilsTest {
|
||||
applicationInfo.backupAgentName = CUSTOM_BACKUP_AGENT_NAME;
|
||||
applicationInfo.packageName = TEST_PACKAGE_NAME;
|
||||
|
||||
PackageManagerStub.sApplicationEnabledSetting =
|
||||
IPackageManagerStub.sApplicationEnabledSetting =
|
||||
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
|
||||
|
||||
boolean isDisabled = AppBackupUtils.appIsDisabled(applicationInfo, mPackageManagerStub);
|
||||
boolean isDisabled = AppBackupUtils.appIsDisabled(applicationInfo, mPackageManagerStub,
|
||||
mUserId);
|
||||
|
||||
assertThat(isDisabled).isTrue();
|
||||
}
|
||||
@@ -303,10 +313,11 @@ public class AppBackupUtilsTest {
|
||||
applicationInfo.backupAgentName = CUSTOM_BACKUP_AGENT_NAME;
|
||||
applicationInfo.packageName = TEST_PACKAGE_NAME;
|
||||
|
||||
PackageManagerStub.sApplicationEnabledSetting =
|
||||
IPackageManagerStub.sApplicationEnabledSetting =
|
||||
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
|
||||
|
||||
boolean isDisabled = AppBackupUtils.appIsDisabled(applicationInfo, mPackageManagerStub);
|
||||
boolean isDisabled = AppBackupUtils.appIsDisabled(applicationInfo, mPackageManagerStub,
|
||||
mUserId);
|
||||
|
||||
assertThat(isDisabled).isTrue();
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ import android.content.pm.Signature;
|
||||
import android.content.pm.SigningInfo;
|
||||
import android.os.Bundle;
|
||||
import android.os.Process;
|
||||
import android.os.UserHandle;
|
||||
import android.platform.test.annotations.Presubmit;
|
||||
|
||||
import androidx.test.InstrumentationRegistry;
|
||||
@@ -88,12 +89,14 @@ public class TarBackupReaderTest {
|
||||
|
||||
private final PackageManagerStub mPackageManagerStub = new PackageManagerStub();
|
||||
private Context mContext;
|
||||
private int mUserId;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mContext = InstrumentationRegistry.getContext();
|
||||
mUserId = UserHandle.USER_SYSTEM;
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -146,7 +149,7 @@ public class TarBackupReaderTest {
|
||||
fileMetadata);
|
||||
RestorePolicy restorePolicy = tarBackupReader.chooseRestorePolicy(
|
||||
mPackageManagerStub, false /* allowApks */, fileMetadata, signatures,
|
||||
mMockPackageManagerInternal);
|
||||
mMockPackageManagerInternal, mUserId);
|
||||
|
||||
assertThat(restorePolicy).isEqualTo(RestorePolicy.IGNORE);
|
||||
assertThat(fileMetadata.packageName).isEqualTo(TEST_PACKAGE_NAME);
|
||||
@@ -160,7 +163,7 @@ public class TarBackupReaderTest {
|
||||
fileMetadata);
|
||||
restorePolicy = tarBackupReader.chooseRestorePolicy(
|
||||
mPackageManagerStub, false /* allowApks */, fileMetadata, signatures,
|
||||
mMockPackageManagerInternal);
|
||||
mMockPackageManagerInternal, mUserId);
|
||||
|
||||
assertThat(restorePolicy).isEqualTo(RestorePolicy.IGNORE);
|
||||
assertThat(fileMetadata.packageName).isEqualTo(TEST_PACKAGE_NAME);
|
||||
@@ -223,7 +226,7 @@ public class TarBackupReaderTest {
|
||||
|
||||
RestorePolicy policy = tarBackupReader.chooseRestorePolicy(mPackageManagerStub,
|
||||
true /* allowApks */, new FileMetadata(), null /* signatures */,
|
||||
mMockPackageManagerInternal);
|
||||
mMockPackageManagerInternal, mUserId);
|
||||
|
||||
assertThat(policy).isEqualTo(RestorePolicy.IGNORE);
|
||||
verifyZeroInteractions(mBackupManagerMonitorMock);
|
||||
@@ -244,7 +247,7 @@ public class TarBackupReaderTest {
|
||||
|
||||
RestorePolicy policy = tarBackupReader.chooseRestorePolicy(mPackageManagerStub,
|
||||
true /* allowApks */, info, new Signature[0] /* signatures */,
|
||||
mMockPackageManagerInternal);
|
||||
mMockPackageManagerInternal, mUserId);
|
||||
|
||||
assertThat(policy).isEqualTo(RestorePolicy.ACCEPT_IF_APK);
|
||||
ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
|
||||
@@ -269,7 +272,7 @@ public class TarBackupReaderTest {
|
||||
|
||||
RestorePolicy policy = tarBackupReader.chooseRestorePolicy(mPackageManagerStub,
|
||||
true /* allowApks */, info, new Signature[0] /* signatures */,
|
||||
mMockPackageManagerInternal);
|
||||
mMockPackageManagerInternal, mUserId);
|
||||
|
||||
assertThat(policy).isEqualTo(RestorePolicy.ACCEPT_IF_APK);
|
||||
ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
|
||||
@@ -295,7 +298,7 @@ public class TarBackupReaderTest {
|
||||
|
||||
RestorePolicy policy = tarBackupReader.chooseRestorePolicy(mPackageManagerStub,
|
||||
false /* allowApks */, new FileMetadata(), new Signature[0] /* signatures */,
|
||||
mMockPackageManagerInternal);
|
||||
mMockPackageManagerInternal, mUserId);
|
||||
|
||||
assertThat(policy).isEqualTo(RestorePolicy.IGNORE);
|
||||
ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
|
||||
@@ -320,7 +323,7 @@ public class TarBackupReaderTest {
|
||||
|
||||
RestorePolicy policy = tarBackupReader.chooseRestorePolicy(mPackageManagerStub,
|
||||
false /* allowApks */, new FileMetadata(), new Signature[0] /* signatures */,
|
||||
mMockPackageManagerInternal);
|
||||
mMockPackageManagerInternal, mUserId);
|
||||
|
||||
assertThat(policy).isEqualTo(RestorePolicy.IGNORE);
|
||||
ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
|
||||
@@ -347,7 +350,7 @@ public class TarBackupReaderTest {
|
||||
|
||||
RestorePolicy policy = tarBackupReader.chooseRestorePolicy(mPackageManagerStub,
|
||||
false /* allowApks */, new FileMetadata(), new Signature[0] /* signatures */,
|
||||
mMockPackageManagerInternal);
|
||||
mMockPackageManagerInternal, mUserId);
|
||||
|
||||
assertThat(policy).isEqualTo(RestorePolicy.IGNORE);
|
||||
ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
|
||||
@@ -381,7 +384,8 @@ public class TarBackupReaderTest {
|
||||
PackageManagerStub.sPackageInfo = packageInfo;
|
||||
|
||||
RestorePolicy policy = tarBackupReader.chooseRestorePolicy(mPackageManagerStub,
|
||||
false /* allowApks */, new FileMetadata(), signatures, mMockPackageManagerInternal);
|
||||
false /* allowApks */, new FileMetadata(), signatures,
|
||||
mMockPackageManagerInternal, mUserId);
|
||||
|
||||
assertThat(policy).isEqualTo(RestorePolicy.IGNORE);
|
||||
ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
|
||||
@@ -419,7 +423,8 @@ public class TarBackupReaderTest {
|
||||
doReturn(true).when(mMockPackageManagerInternal).isDataRestoreSafe(FAKE_SIGNATURE_1,
|
||||
packageInfo.packageName);
|
||||
RestorePolicy policy = tarBackupReader.chooseRestorePolicy(mPackageManagerStub,
|
||||
false /* allowApks */, new FileMetadata(), signatures, mMockPackageManagerInternal);
|
||||
false /* allowApks */, new FileMetadata(), signatures,
|
||||
mMockPackageManagerInternal, mUserId);
|
||||
|
||||
assertThat(policy).isEqualTo(RestorePolicy.ACCEPT);
|
||||
ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
|
||||
@@ -456,7 +461,8 @@ public class TarBackupReaderTest {
|
||||
doReturn(true).when(mMockPackageManagerInternal).isDataRestoreSafe(FAKE_SIGNATURE_1,
|
||||
packageInfo.packageName);
|
||||
RestorePolicy policy = tarBackupReader.chooseRestorePolicy(mPackageManagerStub,
|
||||
false /* allowApks */, new FileMetadata(), signatures, mMockPackageManagerInternal);
|
||||
false /* allowApks */, new FileMetadata(), signatures,
|
||||
mMockPackageManagerInternal, mUserId);
|
||||
|
||||
assertThat(policy).isEqualTo(RestorePolicy.ACCEPT);
|
||||
ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
|
||||
@@ -497,7 +503,8 @@ public class TarBackupReaderTest {
|
||||
doReturn(true).when(mMockPackageManagerInternal).isDataRestoreSafe(FAKE_SIGNATURE_1,
|
||||
packageInfo.packageName);
|
||||
RestorePolicy policy = tarBackupReader.chooseRestorePolicy(mPackageManagerStub,
|
||||
false /* allowApks */, info, signatures, mMockPackageManagerInternal);
|
||||
false /* allowApks */, info, signatures, mMockPackageManagerInternal,
|
||||
mUserId);
|
||||
|
||||
assertThat(policy).isEqualTo(RestorePolicy.ACCEPT);
|
||||
ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
|
||||
@@ -540,7 +547,8 @@ public class TarBackupReaderTest {
|
||||
doReturn(true).when(mMockPackageManagerInternal).isDataRestoreSafe(FAKE_SIGNATURE_1,
|
||||
packageInfo.packageName);
|
||||
RestorePolicy policy = tarBackupReader.chooseRestorePolicy(mPackageManagerStub,
|
||||
true /* allowApks */, info, signatures, mMockPackageManagerInternal);
|
||||
true /* allowApks */, info, signatures, mMockPackageManagerInternal,
|
||||
mUserId);
|
||||
|
||||
assertThat(policy).isEqualTo(RestorePolicy.ACCEPT_IF_APK);
|
||||
verifyNoMoreInteractions(mBackupManagerMonitorMock);
|
||||
@@ -579,7 +587,8 @@ public class TarBackupReaderTest {
|
||||
doReturn(true).when(mMockPackageManagerInternal).isDataRestoreSafe(FAKE_SIGNATURE_1,
|
||||
packageInfo.packageName);
|
||||
RestorePolicy policy = tarBackupReader.chooseRestorePolicy(mPackageManagerStub,
|
||||
false /* allowApks */, info, signatures, mMockPackageManagerInternal);
|
||||
false /* allowApks */, info, signatures, mMockPackageManagerInternal,
|
||||
mUserId);
|
||||
|
||||
assertThat(policy).isEqualTo(RestorePolicy.IGNORE);
|
||||
ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
|
||||
|
||||
Reference in New Issue
Block a user