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

Commit fdef4b6a authored by Nikita Ioffe's avatar Nikita Ioffe
Browse files

Populate activeApexChanged in ActiveApexInfo

PackageManager and ART wants to know whether a different version of an
APEX was activated during this boot compared to the last boot. This
change populates this field from binder call to apexd.

In a follow up CL PackageManager will use that information to drop
apk-in-apex cache on APEX updates.

Test: atest ApexManagerTest
Bug: 225435110
Change-Id: I0ecdf758567fb8677a676d7c39f6b35cdc1208ac
parent e642409a
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -121,18 +121,21 @@ public abstract class ApexManager {
        public final File preInstalledApexPath;
        public final boolean isFactory;
        public final File apexFile;
        public final boolean activeApexChanged;

        private ActiveApexInfo(File apexDirectory, File preInstalledApexPath, File apexFile) {
            this(null, apexDirectory, preInstalledApexPath, true, apexFile);
            this(null, apexDirectory, preInstalledApexPath, true, apexFile, false);
        }

        private ActiveApexInfo(@Nullable String apexModuleName, File apexDirectory,
                File preInstalledApexPath, boolean isFactory, File apexFile) {
                File preInstalledApexPath, boolean isFactory, File apexFile,
                boolean activeApexChanged) {
            this.apexModuleName = apexModuleName;
            this.apexDirectory = apexDirectory;
            this.preInstalledApexPath = preInstalledApexPath;
            this.isFactory = isFactory;
            this.apexFile = apexFile;
            this.activeApexChanged = activeApexChanged;
        }

        private ActiveApexInfo(ApexInfo apexInfo) {
@@ -142,7 +145,8 @@ public abstract class ApexManager {
                            + apexInfo.moduleName),
                    new File(apexInfo.preinstalledModulePath),
                    apexInfo.isFactory,
                    new File(apexInfo.modulePath));
                    new File(apexInfo.modulePath),
                    apexInfo.activeApexChanged);
        }
    }

+12 −0
Original line number Diff line number Diff line
@@ -524,6 +524,18 @@ public class ApexManagerTest {
        assertThat(backingApexFile).isNull();
    }

    @Test
    public void testActiveApexChanged() throws RemoteException {
        ApexInfo apex1 = createApexInfo(
                "com.apex1", 37, true, true, new File("/data/apex/active/com.apex@37.apex"));
        apex1.activeApexChanged = true;
        apex1.preinstalledModulePath = apex1.modulePath;
        when(mApexService.getActivePackages()).thenReturn(new ApexInfo[]{apex1});
        final ApexManager.ActiveApexInfo activeApex = mApexManager.getActiveApexInfos().get(0);
        assertThat(activeApex.apexModuleName).isEqualTo("com.apex1");
        assertThat(activeApex.activeApexChanged).isTrue();
    }

    private ApexInfo createApexInfoForTestPkg(boolean isActive, boolean isFactory, int version) {
        File apexFile = extractResource(TEST_APEX_PKG,  TEST_APEX_FILE_NAME);
        ApexInfo apexInfo = new ApexInfo();