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

Commit fe5294ad authored by Elliott Hughes's avatar Elliott Hughes Committed by Android Git Automerger
Browse files

am 47733eaf: Merge "Fix wipe command when using sideload in recovery"

* commit '47733eaf':
  Fix wipe command when using sideload in recovery
parents cd3d3592 47733eaf
Loading
Loading
Loading
Loading
+47 −52
Original line number Diff line number Diff line
@@ -825,6 +825,30 @@ static void choose_recovery_file(Device* device) {
    }
}

static int apply_from_sdcard(Device* device, int* wipe_cache) {
    if (ensure_path_mounted(SDCARD_ROOT) != 0) {
        ui->Print("\n-- Couldn't mount %s.\n", SDCARD_ROOT);
        return INSTALL_ERROR;
    }

    char* path = browse_directory(SDCARD_ROOT, device);
    if (path == NULL) {
        ui->Print("\n-- No package file selected.\n", path);
        return INSTALL_ERROR;
    }

    ui->Print("\n-- Install %s ...\n", path);
    set_sdcard_update_bootloader_message();
    void* token = start_sdcard_fuse(path);

    int status = install_package(FUSE_SIDELOAD_HOST_PATHNAME, wipe_cache,
                                 TEMPORARY_INSTALL_FILE, false);

    finish_sdcard_fuse(token);
    ensure_path_unmounted(SDCARD_ROOT);
    return status;
}

// Return REBOOT, SHUTDOWN, or REBOOT_BOOTLOADER.  Returning NO_ACTION
// means to take the default, which is to reboot or shutdown depending
// on if the --shutdown_after flag was passed to recovery.
@@ -876,49 +900,35 @@ prompt_and_wait(Device* device, int status) {
                if (!ui->IsTextVisible()) return Device::NO_ACTION;
                break;

            case Device::APPLY_EXT: {
                if (ensure_path_mounted(SDCARD_ROOT) != 0) {
                    ui->Print("\n-- Couldn't mount %s.\n", SDCARD_ROOT);
                    break;
                }

                char* path = browse_directory(SDCARD_ROOT, device);
                if (path == NULL) {
                    ui->Print("\n-- No package file selected.\n", path);
                    break;
            case Device::APPLY_ADB_SIDELOAD:
            case Device::APPLY_EXT:
                {
                    bool adb = (chosen_action == Device::APPLY_ADB_SIDELOAD);
                    if (adb) {
                        status = apply_from_adb(ui, &wipe_cache, TEMPORARY_INSTALL_FILE);
                    } else {
                        status = apply_from_sdcard(device, &wipe_cache);
                    }

                ui->Print("\n-- Install %s ...\n", path);
                set_sdcard_update_bootloader_message();
                void* token = start_sdcard_fuse(path);

                int status = install_package(FUSE_SIDELOAD_HOST_PATHNAME, &wipe_cache,
                                             TEMPORARY_INSTALL_FILE, false);

                finish_sdcard_fuse(token);
                ensure_path_unmounted(SDCARD_ROOT);

                    if (status == INSTALL_SUCCESS && wipe_cache) {
                        ui->Print("\n-- Wiping cache (at package request)...\n");
                    if (erase_volume("/cache")) {
                        ui->Print("Cache wipe failed.\n");
                    } else {
                        ui->Print("Cache wipe complete.\n");
                    }
                        bool okay = erase_volume("/cache");
                        ui->Print("Cache wipe %s.\n", okay ? "succeeded" : "failed");
                    }

                    if (status >= 0) {
                        if (status != INSTALL_SUCCESS) {
                            ui->SetBackground(RecoveryUI::ERROR);
                            ui->Print("Installation aborted.\n");
                            copy_logs();
                        } else if (!ui->IsTextVisible()) {
                            return Device::NO_ACTION;  // reboot if logs aren't visible
                        } else {
                        ui->Print("\nInstall from SD card complete.\n");
                            ui->Print("\nInstall from %s complete.\n", adb ? "ADB" : "SD card");
                        }
                    }
                break;
                }
                break;

            case Device::APPLY_CACHE:
                ui->Print("\nAPPLY_CACHE is deprecated.\n");
@@ -927,21 +937,6 @@ prompt_and_wait(Device* device, int status) {
            case Device::READ_RECOVERY_LASTLOG:
                choose_recovery_file(device);
                break;

            case Device::APPLY_ADB_SIDELOAD:
                status = apply_from_adb(ui, &wipe_cache, TEMPORARY_INSTALL_FILE);
                if (status >= 0) {
                    if (status != INSTALL_SUCCESS) {
                        ui->SetBackground(RecoveryUI::ERROR);
                        ui->Print("Installation aborted.\n");
                        copy_logs();
                    } else if (!ui->IsTextVisible()) {
                        return Device::NO_ACTION;  // reboot if logs aren't visible
                    } else {
                        ui->Print("\nInstall from ADB complete.\n");
                    }
                }
                break;
        }
    }
}