diff options
author | Tom Marshall <tdm@cyngn.com> | 2015-02-03 09:56:57 -0800 |
---|---|---|
committer | Tom Marshall <tdm@cyngn.com> | 2015-02-03 09:57:56 -0800 |
commit | 15800700b466a04acb2995d2a612774d1430572a (patch) | |
tree | e835e451bc22238d2a5253518f5b15d1e93166a7 | |
parent | 1fc30d3c26cf71560638a98986c3ab67f13bb4c7 (diff) | |
download | android_bootable_recovery-stable/cm-12.0-YNG1I.tar.gz android_bootable_recovery-stable/cm-12.0-YNG1I.tar.bz2 android_bootable_recovery-stable/cm-12.0-YNG1I.zip |
recovery: Headless modestable/cm-12.0-YNG1I
Change-Id: I6b54bde65264aee99cb51a19436e82054b31fe74
-rw-r--r-- | recovery.cpp | 13 | ||||
-rw-r--r-- | res-hdpi/images/icon_headless.png | bin | 0 -> 1155 bytes | |||
-rw-r--r-- | res-mdpi/images/icon_headless.png | bin | 0 -> 734 bytes | |||
-rw-r--r-- | res-xhdpi/images/icon_headless.png | bin | 0 -> 1536 bytes | |||
-rw-r--r-- | res-xxhdpi/images/icon_headless.png | bin | 0 -> 2395 bytes | |||
-rw-r--r-- | res-xxxhdpi/images/icon_headless.png | bin | 0 -> 3300 bytes | |||
-rw-r--r-- | screen_ui.cpp | 15 | ||||
-rw-r--r-- | screen_ui.h | 1 | ||||
-rw-r--r-- | ui.h | 3 | ||||
-rw-r--r-- | verifier_test.cpp | 1 |
10 files changed, 31 insertions, 2 deletions
diff --git a/recovery.cpp b/recovery.cpp index ca6ac365..7dd3aa7e 100644 --- a/recovery.cpp +++ b/recovery.cpp @@ -90,6 +90,7 @@ static OemLockOp oem_lock = OEM_LOCK_NONE; static const struct option OPTIONS[] = { { "send_intent", required_argument, NULL, 's' }, { "update_package", required_argument, NULL, 'u' }, + { "headless", no_argument, NULL, 'h' }, { "wipe_data", no_argument, NULL, 'w' }, { "wipe_cache", no_argument, NULL, 'c' }, { "wipe_media", no_argument, NULL, 'm' }, @@ -1208,6 +1209,7 @@ main(int argc, char **argv) { const char *send_intent = NULL; const char *update_package = NULL; int wipe_data = 0, wipe_cache = 0, wipe_media = 0, show_text = 0, sideload = 0; + bool headless = false; bool just_exit = false; bool shutdown_after = false; @@ -1216,6 +1218,7 @@ main(int argc, char **argv) { switch (arg) { case 's': send_intent = optarg; break; case 'u': update_package = optarg; break; + case 'h': headless = true; break; case 'w': wipe_data = wipe_cache = 1; break; case 'm': wipe_media = 1; break; case 'c': wipe_cache = 1; break; @@ -1358,7 +1361,15 @@ main(int argc, char **argv) { ui->SetBackground(RecoveryUI::ERROR); } Device::BuiltinAction after = shutdown_after ? Device::SHUTDOWN : Device::REBOOT; - if (status != INSTALL_SUCCESS || ui->IsTextVisible()) { + if (headless) { + ui->ShowText(true); + ui->SetHeadlessMode(); + finish_recovery(NULL); + for (;;) { + pause(); + } + } + else if (status != INSTALL_SUCCESS || ui->IsTextVisible()) { ui->ShowText(true); Device::BuiltinAction temp = prompt_and_wait(device, status); if (temp != Device::NO_ACTION) after = temp; diff --git a/res-hdpi/images/icon_headless.png b/res-hdpi/images/icon_headless.png Binary files differnew file mode 100644 index 00000000..780836f3 --- /dev/null +++ b/res-hdpi/images/icon_headless.png diff --git a/res-mdpi/images/icon_headless.png b/res-mdpi/images/icon_headless.png Binary files differnew file mode 100644 index 00000000..5d134cd7 --- /dev/null +++ b/res-mdpi/images/icon_headless.png diff --git a/res-xhdpi/images/icon_headless.png b/res-xhdpi/images/icon_headless.png Binary files differnew file mode 100644 index 00000000..af283e23 --- /dev/null +++ b/res-xhdpi/images/icon_headless.png diff --git a/res-xxhdpi/images/icon_headless.png b/res-xxhdpi/images/icon_headless.png Binary files differnew file mode 100644 index 00000000..09a82340 --- /dev/null +++ b/res-xxhdpi/images/icon_headless.png diff --git a/res-xxxhdpi/images/icon_headless.png b/res-xxxhdpi/images/icon_headless.png Binary files differnew file mode 100644 index 00000000..a715e3ff --- /dev/null +++ b/res-xxxhdpi/images/icon_headless.png diff --git a/screen_ui.cpp b/screen_ui.cpp index eb3352ef..c5319ef1 100644 --- a/screen_ui.cpp +++ b/screen_ui.cpp @@ -251,6 +251,9 @@ void ScreenRecoveryUI::draw_dialog() } else { draw_background_locked(dialog_icon); + if (dialog_icon == HEADLESS) { + return; + } } draw_header_icon(); @@ -483,6 +486,7 @@ void ScreenRecoveryUI::Init() LoadBitmap("icon_info", &backgroundIcon[INFO]); LoadBitmap("icon_error", &backgroundIcon[ERROR]); backgroundIcon[NO_COMMAND] = backgroundIcon[ERROR]; + LoadBitmap("icon_headless", &backgroundIcon[HEADLESS]); LoadBitmap("progress_empty", &progressBarEmpty); LoadBitmap("progress_fill", &progressBarFill); @@ -663,6 +667,17 @@ void ScreenRecoveryUI::DialogDismiss() pthread_mutex_unlock(&updateMutex); } +void ScreenRecoveryUI::SetHeadlessMode() +{ + pthread_mutex_lock(&updateMutex); + free(dialog_text); + dialog_text = strdup(""); + dialog_show_log = false; + dialog_icon = HEADLESS; + update_screen_locked(); + pthread_mutex_unlock(&updateMutex); +} + void ScreenRecoveryUI::StartMenu(const char* const * headers, const char* const * items, int initial_selection) { int i = 0; diff --git a/screen_ui.h b/screen_ui.h index 3d90a306..a724d7db 100644 --- a/screen_ui.h +++ b/screen_ui.h @@ -55,6 +55,7 @@ class ScreenRecoveryUI : public RecoveryUI { int DialogShowing() const { return (dialog_text != NULL); } bool DialogDismissable() const { return (dialog_icon == ERROR); } void DialogDismiss(); + void SetHeadlessMode(); // menu display virtual int MenuItemStart() const { return menu_item_start; } @@ -105,7 +105,7 @@ class RecoveryUI { virtual void SetLocale(const char* locale) { } // Set the overall recovery state ("background image"). - enum Icon { NONE, INSTALLING_UPDATE, VIEWING_LOG, ERASING, NO_COMMAND, INFO, ERROR, NR_ICONS }; + enum Icon { NONE, INSTALLING_UPDATE, VIEWING_LOG, ERASING, NO_COMMAND, INFO, ERROR, HEADLESS, NR_ICONS }; virtual void SetBackground(Icon icon) = 0; // --- progress indicator --- @@ -139,6 +139,7 @@ class RecoveryUI { virtual int DialogShowing() const = 0; virtual bool DialogDismissable() const = 0; virtual void DialogDismiss() = 0; + virtual void SetHeadlessMode() = 0; // --- key handling --- diff --git a/verifier_test.cpp b/verifier_test.cpp index 0fb5b783..942564a9 100644 --- a/verifier_test.cpp +++ b/verifier_test.cpp @@ -144,6 +144,7 @@ class FakeUI : public RecoveryUI { virtual int DialogShowing() const { return 0; } bool DialogDismissable() const { return false; } virtual void DialogDismiss() {} + virtual void SetHeadlessMode() {} void StartMenu(const char* const * headers, const char* const * items, int initial_selection) { } |