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
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user