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

Commit 71328b28 authored by Songchun Fan's avatar Songchun Fan
Browse files

[pm] add IBackupManager to the pm injector

BUG: 199937291
Test: manual
Change-Id: Id5624b02cf05fe1765ca4f137b353060e9719f3a
parent 6321aedb
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -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 "
+4 −1
Original line number Diff line number Diff line
@@ -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!");
+9 −1
Original line number Diff line number Diff line
@@ -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<Handler> mHandlerProducer;
    private final Singleton<BackgroundDexOptService> mBackgroundDexOptService;
    private final Singleton<IBackupManager> 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> backgroundDexOptService) {
            Producer<BackgroundDexOptService> backgroundDexOptService,
            Producer<IBackupManager> 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();