diff options
author | Tao Bao <tbao@google.com> | 2017-08-03 23:49:24 +0200 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2017-08-03 23:49:24 +0200 |
commit | f49cc02e86f5c0ccda2b9979a004670cf559c050 (patch) | |
tree | 2f43eb09b2fb9512a7fe85c4725eca7cdcdc7a43 | |
parent | Merge "ui: Move the support for touch inputs into RecoveryUI." (diff) | |
parent | ui: Check for bootreason=recovery_ui. (diff) | |
download | android_bootable_recovery-f49cc02e86f5c0ccda2b9979a004670cf559c050.tar android_bootable_recovery-f49cc02e86f5c0ccda2b9979a004670cf559c050.tar.gz android_bootable_recovery-f49cc02e86f5c0ccda2b9979a004670cf559c050.tar.bz2 android_bootable_recovery-f49cc02e86f5c0ccda2b9979a004670cf559c050.tar.lz android_bootable_recovery-f49cc02e86f5c0ccda2b9979a004670cf559c050.tar.xz android_bootable_recovery-f49cc02e86f5c0ccda2b9979a004670cf559c050.tar.zst android_bootable_recovery-f49cc02e86f5c0ccda2b9979a004670cf559c050.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; |