/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef RECOVERY_WEAR_UI_H #define RECOVERY_WEAR_UI_H #include #include #include "ui.h" #include "minui/minui.h" class WearRecoveryUI : public RecoveryUI { public: WearRecoveryUI(); void Init(); void SetLocale(const char* locale); // overall recovery state ("background image") void SetBackground(Icon icon); // progress indicator void SetProgressType(ProgressType type); void ShowProgress(float portion, float seconds); void SetProgress(float fraction); void SetStage(int current, int max); // text log void ShowText(bool visible); bool IsTextVisible(); bool WasTextEverVisible(); // printing messages void Print(const char* fmt, ...); void ShowFile(const char* filename); void ShowFile(FILE* fp); // menu display void StartMenu(const char* const * headers, const char* const * items, int initial_selection); int SelectMenu(int sel, bool abs = false); void EndMenu(); void Redraw(); enum UIElement { HEADER, MENU, MENU_SEL_BG, MENU_SEL_FG, LOG, TEXT_FILL }; virtual void SetColor(UIElement e); protected: int progress_bar_height, progress_bar_width; // progress bar vertical position, it's centered horizontally int progress_bar_y; // outer of window int outer_height, outer_width; // Unusable rows when displaying the recovery menu, including the lines // for headers (Android Recovery, build id and etc) and the bottom lines // that may otherwise go out of the screen. int menu_unusable_rows; // number of intro frames (default: 22) and loop frames (default: 60) int intro_frames; int loop_frames; private: Icon currentIcon; bool intro_done; int current_frame; int animation_fps; bool rtl_locale; pthread_mutex_t updateMutex; GRSurface* backgroundIcon[NR_ICONS]; GRSurface* *introFrames; GRSurface* *loopFrames; ProgressType progressBarType; float progressScopeStart, progressScopeSize, progress; double progressScopeTime, progressScopeDuration; static const int kMaxCols = 96; static const int kMaxRows = 96; // Log text overlay, displayed when a magic key is pressed char text[kMaxRows][kMaxCols]; size_t text_cols, text_rows; // Number of text rows seen on screen int visible_text_rows; size_t text_col, text_row, text_top; bool show_text; bool show_text_ever; // has show_text ever been true? char menu[kMaxRows][kMaxCols]; bool show_menu; const char* const* menu_headers_; int menu_items, menu_sel; int menu_start, menu_end; pthread_t progress_t; private: void draw_background_locked(Icon icon); void draw_progress_locked(); void draw_screen_locked(); void update_screen_locked(); static void* progress_thread(void* cookie); void progress_loop(); void LoadBitmap(const char* filename, GRSurface** surface); void PutChar(char); void ClearText(); void DrawTextLine(int x, int* y, const char* line, bool bold); void DrawTextLines(int x, int* y, const char* const* lines); }; #endif // RECOVERY_WEAR_UI_H