diff options
author | Elliott Hughes <enh@google.com> | 2015-04-11 01:03:07 +0200 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-04-11 01:03:07 +0200 |
commit | 68dfb5a9365adfa5bfb3cc8834b07c2bd00f9799 (patch) | |
tree | f327758d07cdb58a8e4a06f236f82f8df9515992 | |
parent | am a90ba39b: am 51697d27: Merge "Switch minadb over to C++." (diff) | |
parent | am f19007a5: Merge "Auto-detect whether to use the long-press UI." (diff) | |
download | android_bootable_recovery-68dfb5a9365adfa5bfb3cc8834b07c2bd00f9799.tar android_bootable_recovery-68dfb5a9365adfa5bfb3cc8834b07c2bd00f9799.tar.gz android_bootable_recovery-68dfb5a9365adfa5bfb3cc8834b07c2bd00f9799.tar.bz2 android_bootable_recovery-68dfb5a9365adfa5bfb3cc8834b07c2bd00f9799.tar.lz android_bootable_recovery-68dfb5a9365adfa5bfb3cc8834b07c2bd00f9799.tar.xz android_bootable_recovery-68dfb5a9365adfa5bfb3cc8834b07c2bd00f9799.tar.zst android_bootable_recovery-68dfb5a9365adfa5bfb3cc8834b07c2bd00f9799.zip |
-rw-r--r-- | README.md | 6 | ||||
-rw-r--r-- | default_device.cpp | 29 | ||||
-rw-r--r-- | device.cpp | 50 | ||||
-rw-r--r-- | device.h | 2 | ||||
-rw-r--r-- | ui.cpp | 6 | ||||
-rw-r--r-- | ui.h | 4 |
6 files changed, 56 insertions, 41 deletions
@@ -4,11 +4,9 @@ The Recovery Image Quick turn-around testing ------------------------- - mm -j - m ramdisk-nodeps - m recoveryimage-nodeps - adb reboot bootloader + mm -j && m ramdisk-nodeps && m recoveryimage-nodeps # To boot into the new recovery image # without flashing the recovery partition: + adb reboot bootloader fastboot boot $ANDROID_PRODUCT_OUT/recovery.img diff --git a/default_device.cpp b/default_device.cpp index d7dd45283..a9718668d 100644 --- a/default_device.cpp +++ b/default_device.cpp @@ -17,33 +17,6 @@ #include "device.h" #include "screen_ui.h" -class DefaultDevice : public Device { - public: - DefaultDevice() : Device(new ScreenRecoveryUI) { - } - - // TODO: make this handle more cases, and move the default implementation into Device too. - int HandleMenuKey(int key, int visible) { - if (visible) { - switch (key) { - case KEY_DOWN: - case KEY_VOLUMEDOWN: - return kHighlightDown; - - case KEY_UP: - case KEY_VOLUMEUP: - return kHighlightUp; - - case KEY_ENTER: - case KEY_POWER: - return kInvokeItem; - } - } - - return kNoAction; - } -}; - Device* make_device() { - return new DefaultDevice; + return new Device(new ScreenRecoveryUI); } diff --git a/device.cpp b/device.cpp index af92b15bd..024fc3465 100644 --- a/device.cpp +++ b/device.cpp @@ -16,15 +16,21 @@ #include "device.h" -// TODO: this is a lie for, say, fugu. -static const char* HEADERS[] = { - "Volume up/down to move highlight.", - "Power button to select.", +static const char* REGULAR_HEADERS[] = { + "Volume up/down move highlight.", + "Power button activates.", "", NULL }; -static const char* ITEMS[] = { +static const char* LONG_PRESS_HEADERS[] = { + "Any button cycles highlight.", + "Long-press activates.", + "", + NULL +}; + +static const char* MENU_ITEMS[] = { "Reboot system now", "Reboot to bootloader", "Apply update from ADB", @@ -37,8 +43,13 @@ static const char* ITEMS[] = { NULL }; -const char* const* Device::GetMenuHeaders() { return HEADERS; } -const char* const* Device::GetMenuItems() { return ITEMS; } +const char* const* Device::GetMenuHeaders() { + return ui_->HasThreeButtons() ? REGULAR_HEADERS : LONG_PRESS_HEADERS; +} + +const char* const* Device::GetMenuItems() { + return MENU_ITEMS; +} Device::BuiltinAction Device::InvokeMenuItem(int menu_position) { switch (menu_position) { @@ -54,3 +65,28 @@ Device::BuiltinAction Device::InvokeMenuItem(int menu_position) { default: return NO_ACTION; } } + +int Device::HandleMenuKey(int key, int visible) { + if (!visible) { + return kNoAction; + } + + switch (key) { + case KEY_DOWN: + case KEY_VOLUMEDOWN: + return kHighlightDown; + + case KEY_UP: + case KEY_VOLUMEUP: + return kHighlightUp; + + case KEY_ENTER: + case KEY_POWER: + return kInvokeItem; + + default: + // If you have all of the above buttons, any other buttons + // are ignored. Otherwise, any button cycles the highlight. + return ui_->HasThreeButtons() ? kNoAction : kHighlightDown; + } +} @@ -54,7 +54,7 @@ class Device { // - invoke the highlighted item (kInvokeItem) // - do nothing (kNoAction) // - invoke a specific action (a menu position: any non-negative number) - virtual int HandleMenuKey(int key, int visible) = 0; + virtual int HandleMenuKey(int key, int visible); enum BuiltinAction { NO_ACTION = 0, @@ -278,6 +278,10 @@ bool RecoveryUI::IsLongPress() { return result; } +bool RecoveryUI::HasThreeButtons() { + return has_power_key && has_up_key && has_down_key; +} + void RecoveryUI::FlushKeys() { pthread_mutex_lock(&key_queue_mutex); key_queue_len = 0; @@ -290,7 +294,7 @@ RecoveryUI::KeyAction RecoveryUI::CheckKey(int key, bool is_long_press) { pthread_mutex_unlock(&key_queue_mutex); // If we have power and volume up keys, that chord is the signal to toggle the text display. - if (has_power_key && has_up_key) { + if (HasThreeButtons()) { if (key == KEY_VOLUMEUP && IsKeyPressed(KEY_POWER)) { return TOGGLE; } @@ -75,6 +75,10 @@ class RecoveryUI { virtual bool IsKeyPressed(int key); virtual bool IsLongPress(); + // Returns true if you have the volume up/down and power trio typical + // of phones and tablets, false otherwise. + virtual bool HasThreeButtons(); + // Erase any queued-up keys. virtual void FlushKeys(); |