From a961dfe289c1aeccb72abf6365eb04d6db30fcdf Mon Sep 17 00:00:00 2001 From: Pawan Wagh Date: Mon, 29 Apr 2024 22:14:51 +0000 Subject: [PATCH] Apply OTA from /vendor/boot_otas If BOARD_16K_OTA_MOVE_VENDOR := true is set, OTAs will be present at /vendor/boot_otas for 16KB developer option. Apply OTA from vendor if present, otherwise fallback to system OTAs Test: m, m Settings && adb install -r $ANDROID_PRODUCT_OUT/system_ext/priv-app/Settings/Settings.apk Bug: 335022191 Change-Id: I534b354c830de2c90fee76502667d5e4ef5a7714 --- .../Enable16kPagesPreferenceController.java | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/development/Enable16kPagesPreferenceController.java b/src/com/android/settings/development/Enable16kPagesPreferenceController.java index 1ad071fe025..7156f0b8963 100644 --- a/src/com/android/settings/development/Enable16kPagesPreferenceController.java +++ b/src/com/android/settings/development/Enable16kPagesPreferenceController.java @@ -87,8 +87,11 @@ public class Enable16kPagesPreferenceController extends DeveloperOptionsPreferen private static final int ENABLE_4K_PAGE_SIZE = 0; private static final int ENABLE_16K_PAGE_SIZE = 1; - private static final String OTA_16K_PATH = "/system/boot_otas/boot_ota_16k.zip"; - private static final String OTA_4K_PATH = "/system/boot_otas/boot_ota_4k.zip"; + private static final String SYSTEM_PATH = "/system"; + private static final String VENDOR_PATH = "/vendor"; + private static final String OTA_16K_PATH = "/boot_otas/boot_ota_16k.zip"; + private static final String OTA_4K_PATH = "/boot_otas/boot_ota_4k.zip"; + private static final String PAYLOAD_BINARY_FILE_NAME = "payload.bin"; private static final String PAYLOAD_PROPERTIES_FILE_NAME = "payload_properties.txt"; private static final int OFFSET_TO_FILE_NAME = 30; @@ -225,9 +228,9 @@ public class Enable16kPagesPreferenceController extends DeveloperOptionsPreferen PersistableBundle info = createUpdateInfo(SystemUpdateManager.STATUS_IN_PROGRESS); manager.updateSystemUpdateInfo(info); - String updateFilePath = mEnable16k ? OTA_16K_PATH : OTA_4K_PATH; try { - File updateFile = new File(updateFilePath); + File updateFile = getOtaFile(); + Log.i(TAG, "Update file path is " + updateFile.getAbsolutePath()); applyUpdateFile(updateFile); } catch (IOException e) { throw new RuntimeException(e); @@ -473,4 +476,23 @@ public class Enable16kPagesPreferenceController extends DeveloperOptionsPreferen return true; } + + // if BOARD_16K_OTA_MOVE_VENDOR, OTAs will be present on the /vendor partition + private File getOtaFile() throws FileNotFoundException { + String otaPath = mEnable16k ? OTA_16K_PATH : OTA_4K_PATH; + // Check if boot ota exists on vendor path and prefer vendor ota if present + String vendorOta = VENDOR_PATH + otaPath; + File vendorOtaFile = new File(vendorOta); + if (vendorOtaFile != null && vendorOtaFile.exists()) { + return vendorOtaFile; + } + + // otherwise, fallback to boot ota from system partition + String systemOta = SYSTEM_PATH + otaPath; + File systemOtaFile = new File(systemOta); + if (systemOtaFile == null || !systemOtaFile.exists()) { + throw new FileNotFoundException("File not found at path " + systemOta); + } + return systemOtaFile; + } }