1 /* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef RECOVERY_SCREEN_UI_H 18 #define RECOVERY_SCREEN_UI_H 19 20 #include <pthread.h> 21 #include <stdio.h> 22 23 #include "ui.h" 24 #include "minui/minui.h" 25 26 // Implementation of RecoveryUI appropriate for devices with a screen 27 // (shows an icon + a progress bar, text logging, menu, etc.) 28 class ScreenRecoveryUI : public RecoveryUI { 29 public: 30 ScreenRecoveryUI(); 31 32 void Init(); 33 void SetLocale(const char* locale); 34 35 // overall recovery state ("background image") 36 void SetBackground(Icon icon); 37 38 // progress indicator 39 void SetProgressType(ProgressType type); 40 void ShowProgress(float portion, float seconds); 41 void SetProgress(float fraction); 42 43 void SetStage(int current, int max); 44 45 // text log 46 void ShowText(bool visible); 47 bool IsTextVisible(); 48 bool WasTextEverVisible(); 49 50 // printing messages 51 void Print(const char* fmt, ...) __printflike(2, 3); 52 void ShowFile(const char* filename); 53 54 // menu display 55 void StartMenu(const char* const * headers, const char* const * items, 56 int initial_selection); 57 int SelectMenu(int sel); 58 void EndMenu(); 59 60 void KeyLongPress(int); 61 62 void Redraw(); 63 64 enum UIElement { 65 HEADER, MENU, MENU_SEL_BG, MENU_SEL_BG_ACTIVE, MENU_SEL_FG, LOG, TEXT_FILL, INFO 66 }; 67 void SetColor(UIElement e); 68 69 private: 70 Icon currentIcon; 71 int installingFrame; 72 const char* locale; 73 bool rtl_locale; 74 75 pthread_mutex_t updateMutex; 76 GRSurface* backgroundIcon[5]; 77 GRSurface* backgroundText[5]; 78 GRSurface** installation; 79 GRSurface* progressBarEmpty; 80 GRSurface* progressBarFill; 81 GRSurface* stageMarkerEmpty; 82 GRSurface* stageMarkerFill; 83 84 ProgressType progressBarType; 85 86 float progressScopeStart, progressScopeSize, progress; 87 double progressScopeTime, progressScopeDuration; 88 89 // true when both graphics pages are the same (except for the progress bar). 90 bool pagesIdentical; 91 92 size_t text_cols_, text_rows_; 93 94 // Log text overlay, displayed when a magic key is pressed. 95 char** text_; 96 size_t text_col_, text_row_, text_top_; 97 98 bool show_text; 99 bool show_text_ever; // has show_text ever been true? 100 101 char** menu_; 102 const char* const* menu_headers_; 103 bool show_menu; 104 int menu_items, menu_sel; 105 106 // An alternate text screen, swapped with 'text_' when we're viewing a log file. 107 char** file_viewer_text_; 108 109 pthread_t progress_thread_; 110 111 int animation_fps; 112 int installing_frames; 113 114 int iconX, iconY; 115 116 int stage, max_stage; 117 118 void draw_background_locked(Icon icon); 119 void draw_progress_locked(); 120 void draw_screen_locked(); 121 void update_screen_locked(); 122 void update_progress_locked(); 123 124 static void* ProgressThreadStartRoutine(void* data); 125 void ProgressThreadLoop(); 126 127 void ShowFile(FILE*); 128 void PutChar(char); 129 void ClearText(); 130 131 void DrawHorizontalRule(int* y); 132 void DrawTextLine(int* y, const char* line, bool bold); 133 void DrawTextLines(int* y, const char* const* lines); 134 135 void LoadBitmap(const char* filename, GRSurface** surface); 136 void LoadBitmapArray(const char* filename, int* frames, GRSurface*** surface); 137 void LoadLocalizedBitmap(const char* filename, GRSurface** surface); 138 }; 139 140 #endif // RECOVERY_UI_H 141