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

Commit ed9db0fd authored by Dmitri Plotnikov's avatar Dmitri Plotnikov
Browse files

Adding support for quiescent reboot to recovery

Bug: 37401320
Test: build and push OTA and hit adb reboot recovery,quiescent. The screen should remain off throughout the upgrade process.

(cherry picked from commit 8706a98a)

Change-Id: I79789a151f6faafda8ecc6198c2182cc2a91da70
parent b4c0de6c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -43,4 +43,6 @@ void ui_print(const char* format, ...);

bool is_ro_debuggable();

bool reboot(const std::string& command);

#endif  // RECOVERY_COMMON_H
+20 −6
Original line number Diff line number Diff line
@@ -209,6 +209,14 @@ bool is_ro_debuggable() {
    return android::base::GetBoolProperty("ro.debuggable", false);
}

bool reboot(const std::string& command) {
    std::string cmd = command;
    if (android::base::GetBoolProperty("ro.boot.quiescent", false)) {
        cmd += ",quiescent";
    }
    return android::base::SetProperty(ANDROID_RB_PROPERTY, cmd);
}

static void redirect_stdio(const char* filename) {
    int pipefd[2];
    if (pipe(pipefd) == -1) {
@@ -1449,12 +1457,18 @@ int main(int argc, char **argv) {
    printf("reason is [%s]\n", reason);

    Device* device = make_device();
    if (android::base::GetBoolProperty("ro.boot.quiescent", false)) {
        printf("Quiescent recovery mode.\n");
        ui = new StubRecoveryUI();
    } else {
        ui = device->GetUI();

        if (!ui->Init(locale)) {
      printf("Failed to initialize UI, use stub UI instead.");
            printf("Failed to initialize UI, use stub UI instead.\n");
            ui = new StubRecoveryUI();
        }
    }

    // Set background string to "installing security update" for security update,
    // otherwise set it to "installing system update".
    ui->SetSystemUpdateText(security_update);
@@ -1526,7 +1540,7 @@ int main(int argc, char **argv) {
                    ui->Print("Retry attempt %d\n", retry_count);

                    // Reboot and retry the update
                    if (!android::base::SetProperty(ANDROID_RB_PROPERTY, "reboot,recovery")) {
                    if (!reboot("reboot,recovery")) {
                        ui->Print("Reboot failed\n");
                    } else {
                        while (true) {
@@ -1623,7 +1637,7 @@ int main(int argc, char **argv) {

        default:
            ui->Print("Rebooting...\n");
            android::base::SetProperty(ANDROID_RB_PROPERTY, "reboot,");
            reboot("reboot,");
            break;
    }
    while (true) {
+1 −1
Original line number Diff line number Diff line
@@ -227,7 +227,7 @@ void RecoveryUI::ProcessKey(int key_code, int updown) {

          case RecoveryUI::REBOOT:
            if (reboot_enabled) {
                android::base::SetProperty(ANDROID_RB_PROPERTY, "reboot,");
                reboot("reboot,");
                while (true) { pause(); }
            }
            break;
+4 −1
Original line number Diff line number Diff line
@@ -890,7 +890,10 @@ Value* RebootNowFn(const char* name, State* state, const std::vector<std::unique
    return StringValue("");
  }

  const std::string reboot_cmd = "reboot," + property;
  std::string reboot_cmd = "reboot," + property;
  if (android::base::GetBoolProperty("ro.boot.quiescent", false)) {
    reboot_cmd += ",quiescent";
  }
  android::base::SetProperty(ANDROID_RB_PROPERTY, reboot_cmd);

  sleep(5);