diff options
author | Tao Bao <tbao@google.com> | 2017-08-04 00:05:27 +0200 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-08-04 00:05:27 +0200 |
commit | 7f5b51441145df3c2ffb445fc0637a88d588cc21 (patch) | |
tree | 4ad6114b59a6596bf3f6813c895f55c6fda3a15c | |
parent | Merge "ui: Move the support for touch inputs into RecoveryUI." am: faa5b1f773 (diff) | |
parent | Merge "ui: Check for bootreason=recovery_ui." (diff) | |
download | android_bootable_recovery-7f5b51441145df3c2ffb445fc0637a88d588cc21.tar android_bootable_recovery-7f5b51441145df3c2ffb445fc0637a88d588cc21.tar.gz android_bootable_recovery-7f5b51441145df3c2ffb445fc0637a88d588cc21.tar.bz2 android_bootable_recovery-7f5b51441145df3c2ffb445fc0637a88d588cc21.tar.lz android_bootable_recovery-7f5b51441145df3c2ffb445fc0637a88d588cc21.tar.xz android_bootable_recovery-7f5b51441145df3c2ffb445fc0637a88d588cc21.tar.zst android_bootable_recovery-7f5b51441145df3c2ffb445fc0637a88d588cc21.zip |
-rw-r--r-- | ui.cpp | 20 | ||||
-rw-r--r-- | ui.h | 1 |
2 files changed, 21 insertions, 0 deletions
@@ -69,6 +69,7 @@ RecoveryUI::RecoveryUI() has_down_key(false), has_touch_screen(false), touch_slot_(0), + is_bootreason_recovery_ui_(false), screensaver_state_(ScreensaverState::DISABLED) { pthread_mutex_init(&key_queue_mutex, nullptr); pthread_cond_init(&key_queue_cond, nullptr); @@ -142,6 +143,19 @@ bool RecoveryUI::Init(const std::string& locale) { if (touch_screen_allowed_) { ev_iterate_touch_inputs(std::bind(&RecoveryUI::OnKeyDetected, this, std::placeholders::_1)); + + // Parse /proc/cmdline to determine if it's booting into recovery with a bootreason of + // "recovery_ui". This specific reason is set by some (wear) bootloaders, to allow an easier way + // to turn on text mode. It will only be set if the recovery boot is triggered from fastboot, or + // with 'adb reboot recovery'. Note that this applies to all build variants. Otherwise the text + // mode will be turned on automatically on debuggable builds, even without a swipe. + std::string cmdline; + if (android::base::ReadFileToString("/proc/cmdline", &cmdline)) { + is_bootreason_recovery_ui_ = cmdline.find("bootreason=recovery_ui") != std::string::npos; + } else { + // Non-fatal, and won't affect Init() result. + PLOG(WARNING) << "Failed to read /proc/cmdline"; + } } if (!InitScreensaver()) { @@ -168,6 +182,12 @@ void RecoveryUI::OnTouchDetected(int dx, int dy) { return; } + // Allow turning on text mode with any swipe, if bootloader has set a bootreason of recovery_ui. + if (is_bootreason_recovery_ui_ && !IsTextVisible()) { + ShowText(true); + return; + } + LOG(DEBUG) << "Swipe direction=" << direction; switch (direction) { case SwipeDirection::UP: @@ -170,6 +170,7 @@ class RecoveryUI { int touch_start_Y_; bool touch_finger_down_; bool touch_swiping_; + bool is_bootreason_recovery_ui_; struct key_timer_t { RecoveryUI* ui; |