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 // text log 43 void ShowText(bool visible); 44 bool IsTextVisible(); 45 bool WasTextEverVisible(); 46 47 // printing messages 48 void Print(const char* fmt, ...); // __attribute__((format(printf, 1, 2))); 49 50 // menu display 51 void StartMenu(const char* const * headers, const char* const * items, 52 int initial_selection); 53 int SelectMenu(int sel); 54 void EndMenu(); 55 56 void Redraw(); 57 58 enum UIElement { HEADER, MENU, MENU_SEL_BG, MENU_SEL_FG, LOG, TEXT_FILL }; 59 virtual void SetColor(UIElement e); 60 61 protected: 62 int install_overlay_offset_x, install_overlay_offset_y; 63 64 private: 65 Icon currentIcon; 66 int installingFrame; 67 bool rtl_locale; 68 69 pthread_mutex_t updateMutex; 70 gr_surface backgroundIcon[5]; 71 gr_surface backgroundText[5]; 72 gr_surface *installationOverlay; 73 gr_surface *progressBarIndeterminate; 74 gr_surface progressBarEmpty; 75 gr_surface progressBarFill; 76 77 ProgressType progressBarType; 78 79 float progressScopeStart, progressScopeSize, progress; 80 double progressScopeTime, progressScopeDuration; 81 82 // true when both graphics pages are the same (except for the 83 // progress bar) 84 bool pagesIdentical; 85 86 static const int kMaxCols = 96; 87 static const int kMaxRows = 96; 88 89 // Log text overlay, displayed when a magic key is pressed 90 char text[kMaxRows][kMaxCols]; 91 int text_cols, text_rows; 92 int text_col, text_row, text_top; 93 bool show_text; 94 bool show_text_ever; // has show_text ever been true? 95 96 char menu[kMaxRows][kMaxCols]; 97 bool show_menu; 98 int menu_top, menu_items, menu_sel; 99 100 pthread_t progress_t; 101 102 int animation_fps; 103 int indeterminate_frames; 104 int installing_frames; 105 int overlay_offset_x, overlay_offset_y; 106 107 void draw_install_overlay_locked(int frame); 108 void draw_background_locked(Icon icon); 109 void draw_progress_locked(); 110 void draw_screen_locked(); 111 void update_screen_locked(); 112 void update_progress_locked(); 113 static void* progress_thread(void* cookie); 114 void progress_loop(); 115 116 void LoadBitmap(const char* filename, gr_surface* surface); 117 void LoadLocalizedBitmap(const char* filename, gr_surface* surface); 118 }; 119 120 #endif // RECOVERY_UI_H 121