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

Commit d4838ac4 authored by Nikita Ioffe's avatar Nikita Ioffe Committed by Jiakai Zhang
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
Merged-In: I0ecdf758567fb8677a676d7c39f6b35cdc1208ac
(cherry picked from commit fdef4b6a)
parent 54c3414a
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -121,17 +121,19 @@ public abstract class ApexManager {
        public final File apexDirectory;
        public final File preInstalledApexPath;
        public final File apexFile;
        public final boolean activeApexChanged;

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

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

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

+12 −0
Original line number Diff line number Diff line
@@ -546,6 +546,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();