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 private: 57 Icon currentIcon; 58 int installingFrame; 59 bool rtl_locale; 60 61 pthread_mutex_t updateMutex; 62 gr_surface backgroundIcon[5]; 63 gr_surface backgroundText[5]; 64 gr_surface *installationOverlay; 65 gr_surface *progressBarIndeterminate; 66 gr_surface progressBarEmpty; 67 gr_surface progressBarFill; 68 69 ProgressType progressBarType; 70 71 float progressScopeStart, progressScopeSize, progress; 72 double progressScopeTime, progressScopeDuration; 73 74 // true when both graphics pages are the same (except for the 75 // progress bar) 76 bool pagesIdentical; 77 78 static const int kMaxCols = 96; 79 static const int kMaxRows = 96; 80 81 // Log text overlay, displayed when a magic key is pressed 82 char text[kMaxRows][kMaxCols]; 83 int text_cols, text_rows; 84 int text_col, text_row, text_top; 85 bool show_text; 86 bool show_text_ever; // has show_text ever been true? 87 88 char menu[kMaxRows][kMaxCols]; 89 bool show_menu; 90 int menu_top, menu_items, menu_sel; 91 92 pthread_t progress_t; 93 94 int animation_fps; 95 int indeterminate_frames; 96 int installing_frames; 97 int install_overlay_offset_x, install_overlay_offset_y; 98 int overlay_offset_x, overlay_offset_y; 99 100 void draw_install_overlay_locked(int frame); 101 void draw_background_locked(Icon icon); 102 void draw_progress_locked(); 103 void draw_screen_locked(); 104 void update_screen_locked(); 105 void update_progress_locked(); 106 static void* progress_thread(void* cookie); 107 void progress_loop(); 108 109 void LoadBitmap(const char* filename, gr_surface* surface); 110 void LoadLocalizedBitmap(const char* filename, gr_surface* surface); 111 }; 112 113 #endif // RECOVERY_UI_H 114