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 33 // overall recovery state ("background image") 34 void SetBackground(Icon icon); 35 36 // progress indicator 37 void SetProgressType(ProgressType type); 38 void ShowProgress(float portion, float seconds); 39 void SetProgress(float fraction); 40 41 // text log 42 void ShowText(bool visible); 43 bool IsTextVisible(); 44 bool WasTextEverVisible(); 45 46 // printing messages 47 void Print(const char* fmt, ...); // __attribute__((format(printf, 1, 2))); 48 49 // menu display 50 void StartMenu(const char* const * headers, const char* const * items, 51 int initial_selection); 52 int SelectMenu(int sel); 53 void EndMenu(); 54 55 private: 56 Icon currentIcon; 57 int installingFrame; 58 59 pthread_mutex_t updateMutex; 60 gr_surface backgroundIcon[3]; 61 gr_surface *installationOverlay; 62 gr_surface *progressBarIndeterminate; 63 gr_surface progressBarEmpty; 64 gr_surface progressBarFill; 65 66 ProgressType progressBarType; 67 68 float progressScopeStart, progressScopeSize, progress; 69 double progressScopeTime, progressScopeDuration; 70 71 // true when both graphics pages are the same (except for the 72 // progress bar) 73 bool pagesIdentical; 74 75 static const int kMaxCols = 96; 76 static const int kMaxRows = 32; 77 78 // Log text overlay, displayed when a magic key is pressed 79 char text[kMaxRows][kMaxCols]; 80 int text_cols, text_rows; 81 int text_col, text_row, text_top; 82 bool show_text; 83 bool show_text_ever; // has show_text ever been true? 84 85 char menu[kMaxRows][kMaxCols]; 86 bool show_menu; 87 int menu_top, menu_items, menu_sel; 88 89 pthread_t progress_t; 90 91 int animation_fps; 92 int indeterminate_frames; 93 int installing_frames; 94 int install_overlay_offset_x, install_overlay_offset_y; 95 96 void draw_install_overlay_locked(int frame); 97 void draw_background_locked(Icon icon); 98 void draw_progress_locked(); 99 void draw_text_line(int row, const char* t); 100 void draw_screen_locked(); 101 void update_screen_locked(); 102 void update_progress_locked(); 103 static void* progress_thread(void* cookie); 104 void progress_loop(); 105 106 void LoadBitmap(const char* filename, gr_surface* surface); 107 108 }; 109 110 #endif // RECOVERY_UI_H 111