aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Marshall <tdm@cyngn.com>2015-02-03 09:56:57 -0800
committerTom Marshall <tdm@cyngn.com>2015-02-03 09:57:56 -0800
commit15800700b466a04acb2995d2a612774d1430572a (patch)
treee835e451bc22238d2a5253518f5b15d1e93166a7
parent1fc30d3c26cf71560638a98986c3ab67f13bb4c7 (diff)
downloadandroid_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.cpp13
-rw-r--r--res-hdpi/images/icon_headless.pngbin0 -> 1155 bytes
-rw-r--r--res-mdpi/images/icon_headless.pngbin0 -> 734 bytes
-rw-r--r--res-xhdpi/images/icon_headless.pngbin0 -> 1536 bytes
-rw-r--r--res-xxhdpi/images/icon_headless.pngbin0 -> 2395 bytes
-rw-r--r--res-xxxhdpi/images/icon_headless.pngbin0 -> 3300 bytes
-rw-r--r--screen_ui.cpp15
-rw-r--r--screen_ui.h1
-rw-r--r--ui.h3
-rw-r--r--verifier_test.cpp1
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
new file mode 100644
index 00000000..780836f3
--- /dev/null
+++ b/res-hdpi/images/icon_headless.png
Binary files differ
diff --git a/res-mdpi/images/icon_headless.png b/res-mdpi/images/icon_headless.png
new file mode 100644
index 00000000..5d134cd7
--- /dev/null
+++ b/res-mdpi/images/icon_headless.png
Binary files differ
diff --git a/res-xhdpi/images/icon_headless.png b/res-xhdpi/images/icon_headless.png
new file mode 100644
index 00000000..af283e23
--- /dev/null
+++ b/res-xhdpi/images/icon_headless.png
Binary files differ
diff --git a/res-xxhdpi/images/icon_headless.png b/res-xxhdpi/images/icon_headless.png
new file mode 100644
index 00000000..09a82340
--- /dev/null
+++ b/res-xxhdpi/images/icon_headless.png
Binary files differ
diff --git a/res-xxxhdpi/images/icon_headless.png b/res-xxxhdpi/images/icon_headless.png
new file mode 100644
index 00000000..a715e3ff
--- /dev/null
+++ b/res-xxxhdpi/images/icon_headless.png
Binary files differ
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; }
diff --git a/ui.h b/ui.h
index 657b50fc..e50c8589 100644
--- a/ui.h
+++ b/ui.h
@@ -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) { }