Loading README.md +2 −4 Original line number Diff line number Diff line Loading @@ -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 default_device.cpp +1 −28 Original line number Diff line number Diff line Loading @@ -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); } device.cpp +43 −7 Original line number Diff line number Diff line Loading @@ -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", Loading @@ -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) { Loading @@ -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; } } device.h +1 −1 Original line number Diff line number Diff line Loading @@ -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, Loading ui.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; } Loading Loading
README.md +2 −4 Original line number Diff line number Diff line Loading @@ -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
default_device.cpp +1 −28 Original line number Diff line number Diff line Loading @@ -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); }
device.cpp +43 −7 Original line number Diff line number Diff line Loading @@ -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", Loading @@ -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) { Loading @@ -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; } }
device.h +1 −1 Original line number Diff line number Diff line Loading @@ -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, Loading
ui.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; } Loading