Loading Android.mk +12 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,18 @@ endif LOCAL_CFLAGS += -DRECOVERY_API_VERSION=$(RECOVERY_API_VERSION) LOCAL_CFLAGS += -Wno-unused-parameter -Werror ifneq ($(TARGET_RECOVERY_UI_MARGIN_HEIGHT),) LOCAL_CFLAGS += -DRECOVERY_UI_MARGIN_HEIGHT=$(TARGET_RECOVERY_UI_MARGIN_HEIGHT) else LOCAL_CFLAGS += -DRECOVERY_UI_MARGIN_HEIGHT=0 endif ifneq ($(TARGET_RECOVERY_UI_MARGIN_WIDTH),) LOCAL_CFLAGS += -DRECOVERY_UI_MARGIN_WIDTH=$(TARGET_RECOVERY_UI_MARGIN_WIDTH) else LOCAL_CFLAGS += -DRECOVERY_UI_MARGIN_WIDTH=0 endif LOCAL_C_INCLUDES += \ system/vold \ Loading screen_ui.cpp +69 −69 Original line number Diff line number Diff line Loading @@ -43,8 +43,6 @@ #include "screen_ui.h" #include "ui.h" #define TEXT_INDENT 4 // Return the current time as a double (including fractions of a second). static double now() { struct timeval tv; Loading @@ -53,7 +51,10 @@ static double now() { } ScreenRecoveryUI::ScreenRecoveryUI() : currentIcon(NONE), : kMarginWidth(RECOVERY_UI_MARGIN_WIDTH), kMarginHeight(RECOVERY_UI_MARGIN_HEIGHT), density_(static_cast<float>(android::base::GetIntProperty("ro.sf.lcd_density", 160)) / 160.f), currentIcon(NONE), progressBarType(EMPTY), progressScopeStart(0), progressScopeSize(0), Loading Loading @@ -282,30 +283,34 @@ static const char* LONG_PRESS_HELP[] = { NULL }; // Redraw everything on the screen. Does not flip pages. // Should only be called with updateMutex locked. // Redraws everything on the screen. Does not flip pages. Should only be called with updateMutex // locked. void ScreenRecoveryUI::draw_screen_locked() { if (!show_text) { draw_background_locked(); draw_foreground_locked(); } else { return; } gr_color(0, 0, 0, 255); gr_clear(); int y = 0; static constexpr int TEXT_INDENT = 4; int x = TEXT_INDENT + kMarginWidth; int y = kMarginHeight; if (show_menu) { std::string recovery_fingerprint = android::base::GetProperty("ro.bootimage.build.fingerprint", ""); SetColor(INFO); DrawTextLine(TEXT_INDENT, &y, "Android Recovery", true); for (auto& chunk : android::base::Split(recovery_fingerprint, ":")) { DrawTextLine(TEXT_INDENT, &y, chunk.c_str(), false); DrawTextLine(x, &y, "Android Recovery", true); for (const auto& chunk : android::base::Split(recovery_fingerprint, ":")) { DrawTextLine(x, &y, chunk.c_str(), false); } DrawTextLines(TEXT_INDENT, &y, HasThreeButtons() ? REGULAR_HELP : LONG_PRESS_HELP); DrawTextLines(x, &y, HasThreeButtons() ? REGULAR_HELP : LONG_PRESS_HELP); SetColor(HEADER); DrawTextLines(TEXT_INDENT, &y, menu_headers_); DrawTextLines(x, &y, menu_headers_); SetColor(MENU); DrawHorizontalRule(&y); Loading @@ -317,31 +322,28 @@ void ScreenRecoveryUI::draw_screen_locked() { DrawHighlightBar(0, y - 2, gr_fb_width(), char_height_ + 4); // Bold white text for the selected item. SetColor(MENU_SEL_FG); DrawTextLine(TEXT_INDENT, &y, menu_[i], true); DrawTextLine(x, &y, menu_[i], true); SetColor(MENU); } else { DrawTextLine(TEXT_INDENT, &y, menu_[i], false); DrawTextLine(x, &y, menu_[i], false); } } DrawHorizontalRule(&y); } // display from the bottom up, until we hit the top of the // screen, the bottom of the menu, or we've displayed the // entire text buffer. // Display from the bottom up, until we hit the top of the screen, the bottom of the menu, or // we've displayed the entire text buffer. SetColor(LOG); int row = (text_top_ + text_rows_ - 1) % text_rows_; size_t count = 0; for (int ty = gr_fb_height() - char_height_ - log_bottom_offset_; ty >= y && count < text_rows_; ty -= char_height_, ++count) { for (int ty = gr_fb_height() - kMarginHeight - char_height_ - log_bottom_offset_; ty >= y && count < text_rows_; ty -= char_height_, ++count) { int temp_y = ty; DrawTextLine(0, &temp_y, text_[row], false); DrawTextLine(x, &temp_y, text_[row], false); --row; if (row < 0) row = text_rows_ - 1; } } } // Redraw everything on the screen and flip the screen (make it visible). // Should only be called with updateMutex locked. Loading Loading @@ -455,8 +457,8 @@ bool ScreenRecoveryUI::InitTextParams() { } gr_font_size(gr_sys_font(), &char_width_, &char_height_); text_rows_ = gr_fb_height() / char_height_; text_cols_ = gr_fb_width() / char_width_; text_rows_ = (gr_fb_height() - kMarginHeight * 2) / char_height_; text_cols_ = (gr_fb_width() - kMarginWidth * 2) / char_width_; log_bottom_offset_ = 0; return true; } Loading @@ -467,8 +469,6 @@ bool ScreenRecoveryUI::Init(const std::string& locale) { return false; } density_ = static_cast<float>(android::base::GetIntProperty("ro.sf.lcd_density", 160)) / 160.f; // Are we portrait or landscape? layout_ = (gr_fb_width() > gr_fb_height()) ? LANDSCAPE : PORTRAIT; // Are we the large variant of our base layout? Loading screen_ui.h +9 −2 Original line number Diff line number Diff line Loading @@ -72,10 +72,16 @@ class ScreenRecoveryUI : public RecoveryUI { void SetColor(UIElement e); protected: Icon currentIcon; // The margin that we don't want to use for showing texts (e.g. round screen, or screen with // rounded corners). const int kMarginWidth; const int kMarginHeight; // The scale factor from dp to pixels. 1.0 for mdpi, 4.0 for xxxhdpi. float density_; const float density_; Icon currentIcon; // The layout to use. int layout_; Loading Loading @@ -136,6 +142,7 @@ class ScreenRecoveryUI : public RecoveryUI { int char_width_; int char_height_; pthread_mutex_t updateMutex; virtual bool InitTextParams(); Loading Loading
Android.mk +12 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,18 @@ endif LOCAL_CFLAGS += -DRECOVERY_API_VERSION=$(RECOVERY_API_VERSION) LOCAL_CFLAGS += -Wno-unused-parameter -Werror ifneq ($(TARGET_RECOVERY_UI_MARGIN_HEIGHT),) LOCAL_CFLAGS += -DRECOVERY_UI_MARGIN_HEIGHT=$(TARGET_RECOVERY_UI_MARGIN_HEIGHT) else LOCAL_CFLAGS += -DRECOVERY_UI_MARGIN_HEIGHT=0 endif ifneq ($(TARGET_RECOVERY_UI_MARGIN_WIDTH),) LOCAL_CFLAGS += -DRECOVERY_UI_MARGIN_WIDTH=$(TARGET_RECOVERY_UI_MARGIN_WIDTH) else LOCAL_CFLAGS += -DRECOVERY_UI_MARGIN_WIDTH=0 endif LOCAL_C_INCLUDES += \ system/vold \ Loading
screen_ui.cpp +69 −69 Original line number Diff line number Diff line Loading @@ -43,8 +43,6 @@ #include "screen_ui.h" #include "ui.h" #define TEXT_INDENT 4 // Return the current time as a double (including fractions of a second). static double now() { struct timeval tv; Loading @@ -53,7 +51,10 @@ static double now() { } ScreenRecoveryUI::ScreenRecoveryUI() : currentIcon(NONE), : kMarginWidth(RECOVERY_UI_MARGIN_WIDTH), kMarginHeight(RECOVERY_UI_MARGIN_HEIGHT), density_(static_cast<float>(android::base::GetIntProperty("ro.sf.lcd_density", 160)) / 160.f), currentIcon(NONE), progressBarType(EMPTY), progressScopeStart(0), progressScopeSize(0), Loading Loading @@ -282,30 +283,34 @@ static const char* LONG_PRESS_HELP[] = { NULL }; // Redraw everything on the screen. Does not flip pages. // Should only be called with updateMutex locked. // Redraws everything on the screen. Does not flip pages. Should only be called with updateMutex // locked. void ScreenRecoveryUI::draw_screen_locked() { if (!show_text) { draw_background_locked(); draw_foreground_locked(); } else { return; } gr_color(0, 0, 0, 255); gr_clear(); int y = 0; static constexpr int TEXT_INDENT = 4; int x = TEXT_INDENT + kMarginWidth; int y = kMarginHeight; if (show_menu) { std::string recovery_fingerprint = android::base::GetProperty("ro.bootimage.build.fingerprint", ""); SetColor(INFO); DrawTextLine(TEXT_INDENT, &y, "Android Recovery", true); for (auto& chunk : android::base::Split(recovery_fingerprint, ":")) { DrawTextLine(TEXT_INDENT, &y, chunk.c_str(), false); DrawTextLine(x, &y, "Android Recovery", true); for (const auto& chunk : android::base::Split(recovery_fingerprint, ":")) { DrawTextLine(x, &y, chunk.c_str(), false); } DrawTextLines(TEXT_INDENT, &y, HasThreeButtons() ? REGULAR_HELP : LONG_PRESS_HELP); DrawTextLines(x, &y, HasThreeButtons() ? REGULAR_HELP : LONG_PRESS_HELP); SetColor(HEADER); DrawTextLines(TEXT_INDENT, &y, menu_headers_); DrawTextLines(x, &y, menu_headers_); SetColor(MENU); DrawHorizontalRule(&y); Loading @@ -317,31 +322,28 @@ void ScreenRecoveryUI::draw_screen_locked() { DrawHighlightBar(0, y - 2, gr_fb_width(), char_height_ + 4); // Bold white text for the selected item. SetColor(MENU_SEL_FG); DrawTextLine(TEXT_INDENT, &y, menu_[i], true); DrawTextLine(x, &y, menu_[i], true); SetColor(MENU); } else { DrawTextLine(TEXT_INDENT, &y, menu_[i], false); DrawTextLine(x, &y, menu_[i], false); } } DrawHorizontalRule(&y); } // display from the bottom up, until we hit the top of the // screen, the bottom of the menu, or we've displayed the // entire text buffer. // Display from the bottom up, until we hit the top of the screen, the bottom of the menu, or // we've displayed the entire text buffer. SetColor(LOG); int row = (text_top_ + text_rows_ - 1) % text_rows_; size_t count = 0; for (int ty = gr_fb_height() - char_height_ - log_bottom_offset_; ty >= y && count < text_rows_; ty -= char_height_, ++count) { for (int ty = gr_fb_height() - kMarginHeight - char_height_ - log_bottom_offset_; ty >= y && count < text_rows_; ty -= char_height_, ++count) { int temp_y = ty; DrawTextLine(0, &temp_y, text_[row], false); DrawTextLine(x, &temp_y, text_[row], false); --row; if (row < 0) row = text_rows_ - 1; } } } // Redraw everything on the screen and flip the screen (make it visible). // Should only be called with updateMutex locked. Loading Loading @@ -455,8 +457,8 @@ bool ScreenRecoveryUI::InitTextParams() { } gr_font_size(gr_sys_font(), &char_width_, &char_height_); text_rows_ = gr_fb_height() / char_height_; text_cols_ = gr_fb_width() / char_width_; text_rows_ = (gr_fb_height() - kMarginHeight * 2) / char_height_; text_cols_ = (gr_fb_width() - kMarginWidth * 2) / char_width_; log_bottom_offset_ = 0; return true; } Loading @@ -467,8 +469,6 @@ bool ScreenRecoveryUI::Init(const std::string& locale) { return false; } density_ = static_cast<float>(android::base::GetIntProperty("ro.sf.lcd_density", 160)) / 160.f; // Are we portrait or landscape? layout_ = (gr_fb_width() > gr_fb_height()) ? LANDSCAPE : PORTRAIT; // Are we the large variant of our base layout? Loading
screen_ui.h +9 −2 Original line number Diff line number Diff line Loading @@ -72,10 +72,16 @@ class ScreenRecoveryUI : public RecoveryUI { void SetColor(UIElement e); protected: Icon currentIcon; // The margin that we don't want to use for showing texts (e.g. round screen, or screen with // rounded corners). const int kMarginWidth; const int kMarginHeight; // The scale factor from dp to pixels. 1.0 for mdpi, 4.0 for xxxhdpi. float density_; const float density_; Icon currentIcon; // The layout to use. int layout_; Loading Loading @@ -136,6 +142,7 @@ class ScreenRecoveryUI : public RecoveryUI { int char_width_; int char_height_; pthread_mutex_t updateMutex; virtual bool InitTextParams(); Loading