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 22 #include "ui.h" 23 #include "minui/minui.h" 24 25 // Implementation of RecoveryUI appropriate for devices with a screen 26 // (shows an icon + a progress bar, text logging, menu, etc.) 27 class ScreenRecoveryUI : public RecoveryUI { 28 public: 29 ScreenRecoveryUI(); 30 31 void Init(); 32 void SetLocale(const char* locale); 33 34 // overall recovery state ("background image") 35 void SetBackground(Icon icon); 36 37 // progress indicator 38 void SetProgressType(ProgressType type); 39 void ShowProgress(float portion, float seconds); 40 void SetProgress(float fraction); 41 42 void SetStage(int current, int max); 43 44 // text log 45 void ShowText(bool visible); 46 bool IsTextVisible(); 47 bool WasTextEverVisible(); 48 49 // printing messages 50 void Print(const char* fmt, ...); // __attribute__((format(printf, 1, 2))); 51 52 // menu display 53 void StartMenu(const char* const * headers, const char* const * items, 54 int initial_selection); 55 int SelectMenu(int sel); 56 void EndMenu(); 57 58 void Redraw(); 59 60 enum UIElement { HEADER, MENU, MENU_SEL_BG, MENU_SEL_FG, LOG, TEXT_FILL }; 61 virtual void SetColor(UIElement e); 62 63 private: 64 Icon currentIcon; 65 int installingFrame; 66 bool rtl_locale; 67 68 pthread_mutex_t updateMutex; 69 gr_surface backgroundIcon[5]; 70 gr_surface backgroundText[5]; 71 gr_surface *installationOverlay; 72 gr_surface *progressBarIndeterminate; 73 gr_surface progressBarEmpty; 74 gr_surface progressBarFill; 75 gr_surface stageMarkerEmpty; 76 gr_surface stageMarkerFill; 77 78 ProgressType progressBarType; 79 80 float progressScopeStart, progressScopeSize, progress; 81 double progressScopeTime, progressScopeDuration; 82 83 // true when both graphics pages are the same (except for the 84 // progress bar) 85 bool pagesIdentical; 86 87 static const int kMaxCols = 96; 88 static const int kMaxRows = 96; 89 90 // Log text overlay, displayed when a magic key is pressed 91 char text[kMaxRows][kMaxCols]; 92 int text_cols, text_rows; 93 int text_col, text_row, text_top; 94 bool show_text; 95 bool show_text_ever; // has show_text ever been true? 96 97 char menu[kMaxRows][kMaxCols]; 98 bool show_menu; 99 int menu_top, menu_items, menu_sel; 100 101 pthread_t progress_t; 102 103 int animation_fps; 104 int indeterminate_frames; 105 int installing_frames; 106 protected: 107 int install_overlay_offset_x, install_overlay_offset_y; 108 private: 109 int overlay_offset_x, overlay_offset_y; 110 111 int stage, max_stage; 112 113 void draw_install_overlay_locked(int frame); 114 void draw_background_locked(Icon icon); 115 void draw_progress_locked(); 116 void draw_screen_locked(); 117 void update_screen_locked(); 118 void update_progress_locked(); 119 static void* progress_thread(void* cookie); 120 void progress_loop(); 121 122 void LoadBitmap(const char* filename, gr_surface* surface); 123 void LoadLocalizedBitmap(const char* filename, gr_surface* surface); 124 }; 125 126 #endif // RECOVERY_UI_H 127