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

Commit 631842eb authored by Mohammad Samiul Islam's avatar Mohammad Samiul Islam Committed by Automerger Merge Worker
Browse files

Merge changes from topic "compos-cherry-pick" into stage-aosp-master am: 9ade5e2f

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15638982

Change-Id: I656ca5a4475cfa8a4f24d15233c845d448633d2b
parents 9178f580 9ade5e2f
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -260,6 +260,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
                new Lifecycle(context, this));
    }

    StagingManager getStagingManager() {
        return mStagingManager;
    }

    boolean okToSendBroadcasts()  {
        return mOkToSendBroadcasts;
    }
+25 −0
Original line number Diff line number Diff line
@@ -186,6 +186,7 @@ import android.content.pm.IPackageManager;
import android.content.pm.IPackageManagerNative;
import android.content.pm.IPackageMoveObserver;
import android.content.pm.IPackageStatsObserver;
import android.content.pm.IStagedApexObserver;
import android.content.pm.IncrementalStatesInfo;
import android.content.pm.InstallSourceInfo;
import android.content.pm.InstantAppInfo;
@@ -227,6 +228,7 @@ import android.content.pm.ServiceInfo;
import android.content.pm.SharedLibraryInfo;
import android.content.pm.Signature;
import android.content.pm.SigningInfo;
import android.content.pm.StagedApexInfo;
import android.content.pm.SuspendDialogInfo;
import android.content.pm.TestUtilityService;
import android.content.pm.UserInfo;
@@ -27003,6 +27005,29 @@ public class PackageManagerService extends IPackageManager.Stub
        public boolean hasSystemFeature(String featureName, int version) {
            return PackageManagerService.this.hasSystemFeature(featureName, version);
        }
        @Override
        public void registerStagedApexObserver(IStagedApexObserver observer) {
            mInstallerService.getStagingManager().registerStagedApexObserver(observer);
        }
        @Override
        public void unregisterStagedApexObserver(IStagedApexObserver observer) {
            mInstallerService.getStagingManager().unregisterStagedApexObserver(observer);
        }
        @Override
        public String[] getStagedApexModuleNames() {
            return mInstallerService.getStagingManager()
                    .getStagedApexModuleNames().toArray(new String[0]);
        }
        @Override
        @Nullable
        public StagedApexInfo getStagedApexInfo(String moduleName) {
            return mInstallerService.getStagingManager().getStagedApexInfo(moduleName);
        }
    }
    private AndroidPackage getPackage(String packageName) {
+27 −4
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import android.content.pm.PackageManagerInternal;
import android.content.pm.PackageParser.PackageParserException;
import android.content.pm.PackageParser.SigningDetails;
import android.content.pm.PackageParser.SigningDetails.SignatureSchemeVersion;
import android.content.pm.StagedApexInfo;
import android.content.pm.parsing.PackageInfoWithoutStateUtils;
import android.content.rollback.RollbackInfo;
import android.content.rollback.RollbackManager;
@@ -209,6 +210,23 @@ public class StagingManager {
    }

    void registerStagedApexObserver(IStagedApexObserver observer) {
        if (observer == null) {
            return;
        }
        if  (observer.asBinder() != null) {
            try {
                observer.asBinder().linkToDeath(new IBinder.DeathRecipient() {
                    @Override
                    public void binderDied() {
                        synchronized (mStagedApexObservers) {
                            mStagedApexObservers.remove(observer);
                        }
                    }
                }, 0);
            } catch (RemoteException re) {
                Slog.w(TAG, re.getMessage());
            }
        }
        synchronized (mStagedApexObservers) {
            mStagedApexObservers.add(observer);
        }
@@ -1222,7 +1240,7 @@ public class StagingManager {
     * Returns ApexInfo of the {@code moduleInfo} provided if it is staged, otherwise returns null.
     */
    @Nullable
    ApexInfo getStagedApexInfo(String moduleName) {
    StagedApexInfo getStagedApexInfo(String moduleName) {
        synchronized (mStagedSessions) {
            for (int i = 0; i < mStagedSessions.size(); i++) {
                final StagedSession session = mStagedSessions.valueAt(i);
@@ -1230,9 +1248,14 @@ public class StagingManager {
                        || session.hasParentSessionId() || !session.containsApexSession()) {
                    continue;
                }
                ApexInfo result = getStagedApexInfos(session).get(moduleName);
                if (result != null) {
                    return result;
                ApexInfo ai = getStagedApexInfos(session).get(moduleName);
                if (ai != null) {
                    StagedApexInfo info = new StagedApexInfo();
                    info.moduleName = ai.moduleName;
                    info.diskImagePath = ai.modulePath;
                    info.versionCode = ai.versionCode;
                    info.versionName = ai.versionName;
                    return info;
                }
            }
        }
+6 −2
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import android.content.pm.IStagedApexObserver;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageInstaller.SessionInfo;
import android.content.pm.PackageInstaller.SessionInfo.StagedSessionErrorCode;
import android.content.pm.StagedApexInfo;
import android.os.Message;
import android.os.SystemProperties;
import android.os.storage.IStorageManager;
@@ -693,12 +694,15 @@ public class StagingManagerTest {
        when(mApexManager.getStagedApexInfos(any())).thenReturn(fakeApexInfos);

        // Verify null is returned if module name is not found
        ApexInfo result = mStagingManager.getStagedApexInfo("not found");
        StagedApexInfo result = mStagingManager.getStagedApexInfo("not found");
        assertThat(result).isNull();
        verify(mApexManager, times(1)).getStagedApexInfos(any());
        // Otherwise, the correct object is returned
        result = mStagingManager.getStagedApexInfo("module1");
        assertThat(result).isEqualTo(fakeApexInfos[0]);
        assertThat(result.moduleName).isEqualTo(fakeApexInfos[0].moduleName);
        assertThat(result.diskImagePath).isEqualTo(fakeApexInfos[0].modulePath);
        assertThat(result.versionCode).isEqualTo(fakeApexInfos[0].versionCode);
        assertThat(result.versionName).isEqualTo(fakeApexInfos[0].versionName);
        verify(mApexManager, times(2)).getStagedApexInfos(any());
    }

+1 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ android_test_helper_app {
        ":test.rebootless_apex_v1",
        ":test.rebootless_apex_v2",
    ],
    platform_apis: true,
}

java_test_host {
Loading