aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTao Bao <tbao@google.com>2017-07-31 23:15:09 -0700
committerTom Marshall <tdm.code@gmail.com>2017-09-09 04:25:41 +0000
commit56eb906207a8ff4f86d0fed48f9db18b8235fa82 (patch)
tree15d1a16dcccd4c7af09c66eb95ca1f230831e01e
parent349d0d0f0a1437c05585a5cb455ce58dcaf11399 (diff)
downloadandroid_bootable_recovery-56eb906207a8ff4f86d0fed48f9db18b8235fa82.tar.gz
android_bootable_recovery-56eb906207a8ff4f86d0fed48f9db18b8235fa82.tar.bz2
android_bootable_recovery-56eb906207a8ff4f86d0fed48f9db18b8235fa82.zip
ui: Check for bootreason=recovery_ui.
Some wear bootloaders are passing bootreason=recovery_ui when booting into recovery from fastboot, or via 'adb reboot recovery'. Allow turning on text mode with a swipe for such a bootreason. Since we will turn on text mode automatically for debuggable builds, this bootreason mainly handles the case for user builds. Note this change only applies to devices that allow touch screen inputs. Bug: 36169090 Test: Build and boot into user build recovery image. Toggle on text mode with a swipe. Change-Id: I55f19aed7b210352f8370de19935b4772cc12095
-rw-r--r--ui.cpp20
-rw-r--r--ui.h1
2 files changed, 21 insertions, 0 deletions
diff --git a/ui.cpp b/ui.cpp
index eadcdd43..e80d7ed0 100644
--- a/ui.cpp
+++ b/ui.cpp
@@ -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:
diff --git a/ui.h b/ui.h
index 5cda7af0..3d9afece 100644
--- a/ui.h
+++ b/ui.h
@@ -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;