From 71328b2811393c118e2a8db815f3eec710eaf996 Mon Sep 17 00:00:00 2001 From: Songchun Fan Date: Wed, 15 Dec 2021 15:32:57 -0800 Subject: [PATCH] [pm] add IBackupManager to the pm injector BUG: 199937291 Test: manual Change-Id: Id5624b02cf05fe1765ca4f137b353060e9719f3a --- .../com/android/server/pm/InstallPackageHelper.java | 11 +++++------ .../com/android/server/pm/PackageManagerService.java | 5 ++++- .../server/pm/PackageManagerServiceInjector.java | 10 +++++++++- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java index 711fb2c6eb4c3..06cac9d2ec830 100644 --- a/services/core/java/com/android/server/pm/InstallPackageHelper.java +++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java @@ -128,7 +128,6 @@ import android.os.Environment; import android.os.Message; import android.os.Process; import android.os.RemoteException; -import android.os.ServiceManager; import android.os.SystemProperties; import android.os.Trace; import android.os.UserHandle; @@ -207,6 +206,7 @@ final class InstallPackageHelper { private final PackageDexOptimizer mPackageDexOptimizer; private final PackageAbiHelper mPackageAbiHelper; private final ViewCompiler mViewCompiler; + private final IBackupManager mIBackupManager; // TODO(b/198166813): remove PMS dependency InstallPackageHelper(PackageManagerService pm, AppDataHelper appDataHelper) { @@ -225,6 +225,7 @@ final class InstallPackageHelper { mPackageDexOptimizer = pm.mInjector.getPackageDexOptimizer(); mPackageAbiHelper = pm.mInjector.getAbiHelper(); mViewCompiler = pm.mInjector.getViewCompiler(); + mIBackupManager = pm.mInjector.getIBackupManager(); } InstallPackageHelper(PackageManagerService pm) { @@ -689,9 +690,7 @@ final class InstallPackageHelper { * Returns whether the restore successfully completed. */ private boolean performBackupManagerRestore(int userId, int token, PackageInstalledInfo res) { - IBackupManager bm = IBackupManager.Stub.asInterface( - ServiceManager.getService(Context.BACKUP_SERVICE)); - if (bm != null) { + if (mIBackupManager != null) { // For backwards compatibility as USER_ALL previously routed directly to USER_SYSTEM // in the BackupManager. USER_ALL is used in compatibility tests. if (userId == UserHandle.USER_ALL) { @@ -702,8 +701,8 @@ final class InstallPackageHelper { } Trace.asyncTraceBegin(TRACE_TAG_PACKAGE_MANAGER, "restore", token); try { - if (bm.isUserReadyForBackup(userId)) { - bm.restoreAtInstallForUser( + if (mIBackupManager.isUserReadyForBackup(userId)) { + mIBackupManager.restoreAtInstallForUser( userId, res.mPkg.getPackageName(), token); } else { Slog.w(TAG, "User " + userId + " is not ready. Restore at install " diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index dd22e496f54ab..6f8703bf5a5df 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -57,6 +57,7 @@ import android.app.ApplicationPackageManager; import android.app.IActivityManager; import android.app.admin.IDevicePolicyManager; import android.app.admin.SecurityLog; +import android.app.backup.IBackupManager; import android.app.role.RoleManager; import android.compat.annotation.ChangeId; import android.compat.annotation.EnabledAfter; @@ -1519,7 +1520,9 @@ public class PackageManagerService extends IPackageManager.Stub new DefaultSystemWrapper(), LocalServices::getService, context::getSystemService, - (i, pm) -> new BackgroundDexOptService(i.getContext(), i.getDexManager(), pm)); + (i, pm) -> new BackgroundDexOptService(i.getContext(), i.getDexManager(), pm), + (i, pm) -> IBackupManager.Stub.asInterface(ServiceManager.getService( + Context.BACKUP_SERVICE))); if (Build.VERSION.SDK_INT <= 0) { Slog.w(TAG, "**** ro.build.version.sdk not set!"); diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceInjector.java b/services/core/java/com/android/server/pm/PackageManagerServiceInjector.java index 97a09ffc810f3..d14cc1f3ebd9e 100644 --- a/services/core/java/com/android/server/pm/PackageManagerServiceInjector.java +++ b/services/core/java/com/android/server/pm/PackageManagerServiceInjector.java @@ -17,6 +17,7 @@ package com.android.server.pm; import android.app.ActivityManagerInternal; +import android.app.backup.IBackupManager; import android.content.ComponentName; import android.content.Context; import android.os.Handler; @@ -135,6 +136,7 @@ public class PackageManagerServiceInjector { mDomainVerificationManagerInternalProducer; private final Singleton mHandlerProducer; private final Singleton mBackgroundDexOptService; + private final Singleton mIBackupManager; PackageManagerServiceInjector(Context context, PackageManagerTracedLock lock, Installer installer, Object installLock, PackageAbiHelper abiHelper, @@ -170,7 +172,8 @@ public class PackageManagerServiceInjector { SystemWrapper systemWrapper, ServiceProducer getLocalServiceProducer, ServiceProducer getSystemServiceProducer, - Producer backgroundDexOptService) { + Producer backgroundDexOptService, + Producer iBackupManager) { mContext = context; mLock = lock; mInstaller = installer; @@ -220,6 +223,7 @@ public class PackageManagerServiceInjector { domainVerificationManagerInternalProducer); mHandlerProducer = new Singleton<>(handlerProducer); mBackgroundDexOptService = new Singleton<>(backgroundDexOptService); + mIBackupManager = new Singleton<>(iBackupManager); } /** @@ -384,6 +388,10 @@ public class PackageManagerServiceInjector { return mBackgroundDexOptService.get(this, mPackageManager); } + public IBackupManager getIBackupManager() { + return mIBackupManager.get(this, mPackageManager); + } + /** Provides an abstraction to static access to system state. */ public interface SystemWrapper { void disablePackageCaches();