screen_ui.h revision c87bab101893e8322b49d7c8600e3367b20ab50a
1211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker/* 2211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker * Copyright (C) 2011 The Android Open Source Project 3211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker * 4211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker * Licensed under the Apache License, Version 2.0 (the "License"); 5211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker * you may not use this file except in compliance with the License. 6211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker * You may obtain a copy of the License at 7211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker * 8211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker * http://www.apache.org/licenses/LICENSE-2.0 9211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker * 10211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker * Unless required by applicable law or agreed to in writing, software 11211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker * distributed under the License is distributed on an "AS IS" BASIS, 12211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker * See the License for the specific language governing permissions and 14211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker * limitations under the License. 15211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker */ 16211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 17211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker#ifndef RECOVERY_SCREEN_UI_H 18211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker#define RECOVERY_SCREEN_UI_H 19211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 20211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker#include <pthread.h> 21211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 22211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker#include "ui.h" 23211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker#include "minui/minui.h" 24211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 25211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker// Implementation of RecoveryUI appropriate for devices with a screen 26211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker// (shows an icon + a progress bar, text logging, menu, etc.) 27211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongkerclass ScreenRecoveryUI : public RecoveryUI { 28211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker public: 29211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker ScreenRecoveryUI(); 30211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 31211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void Init(); 325fa8c23911759a9e81af0e7fb5eb431277b8e9a6Doug Zongker void SetLocale(const char* locale); 33211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 34211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker // overall recovery state ("background image") 35211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void SetBackground(Icon icon); 36211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 37211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker // progress indicator 38211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void SetProgressType(ProgressType type); 39211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void ShowProgress(float portion, float seconds); 40211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void SetProgress(float fraction); 41211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 42c87bab101893e8322b49d7c8600e3367b20ab50aDoug Zongker void SetStage(int current, int max); 43c87bab101893e8322b49d7c8600e3367b20ab50aDoug Zongker 44211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker // text log 45211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void ShowText(bool visible); 46211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker bool IsTextVisible(); 47211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker bool WasTextEverVisible(); 48211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 49211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker // printing messages 50211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void Print(const char* fmt, ...); // __attribute__((format(printf, 1, 2))); 51211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 52211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker // menu display 53211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void StartMenu(const char* const * headers, const char* const * items, 54211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker int initial_selection); 55211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker int SelectMenu(int sel); 56211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void EndMenu(); 57211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 58c0441d171914e59941ec4f815ae0aabf56d6504fDoug Zongker void Redraw(); 59c0441d171914e59941ec4f815ae0aabf56d6504fDoug Zongker 60c0441d171914e59941ec4f815ae0aabf56d6504fDoug Zongker enum UIElement { HEADER, MENU, MENU_SEL_BG, MENU_SEL_FG, LOG, TEXT_FILL }; 61c0441d171914e59941ec4f815ae0aabf56d6504fDoug Zongker virtual void SetColor(UIElement e); 62c0441d171914e59941ec4f815ae0aabf56d6504fDoug Zongker 63211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker private: 64211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker Icon currentIcon; 65211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker int installingFrame; 665fa8c23911759a9e81af0e7fb5eb431277b8e9a6Doug Zongker bool rtl_locale; 67211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 68211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker pthread_mutex_t updateMutex; 6902ec6b88ed4e6cf40cc257572b07c7277b7b6341Doug Zongker gr_surface backgroundIcon[5]; 7002ec6b88ed4e6cf40cc257572b07c7277b7b6341Doug Zongker gr_surface backgroundText[5]; 71211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker gr_surface *installationOverlay; 72211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker gr_surface *progressBarIndeterminate; 73211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker gr_surface progressBarEmpty; 74211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker gr_surface progressBarFill; 75c87bab101893e8322b49d7c8600e3367b20ab50aDoug Zongker gr_surface stageMarkerEmpty; 76c87bab101893e8322b49d7c8600e3367b20ab50aDoug Zongker gr_surface stageMarkerFill; 77211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 78211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker ProgressType progressBarType; 79211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 80211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker float progressScopeStart, progressScopeSize, progress; 81211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker double progressScopeTime, progressScopeDuration; 82211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 83211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker // true when both graphics pages are the same (except for the 84211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker // progress bar) 85211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker bool pagesIdentical; 86211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 87211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker static const int kMaxCols = 96; 886fd59ac07d91eb373f4269a40e688aa82a6ccc6eDoug Zongker static const int kMaxRows = 96; 89211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 90211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker // Log text overlay, displayed when a magic key is pressed 91211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker char text[kMaxRows][kMaxCols]; 92211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker int text_cols, text_rows; 93211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker int text_col, text_row, text_top; 94211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker bool show_text; 95211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker bool show_text_ever; // has show_text ever been true? 96211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 97211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker char menu[kMaxRows][kMaxCols]; 98211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker bool show_menu; 99211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker int menu_top, menu_items, menu_sel; 100211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 101211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker pthread_t progress_t; 10232a0a47a596509792fde8cdbf8b4b0705708b2beDoug Zongker 10332a0a47a596509792fde8cdbf8b4b0705708b2beDoug Zongker int animation_fps; 10432a0a47a596509792fde8cdbf8b4b0705708b2beDoug Zongker int indeterminate_frames; 10532a0a47a596509792fde8cdbf8b4b0705708b2beDoug Zongker int installing_frames; 106c87bab101893e8322b49d7c8600e3367b20ab50aDoug Zongker protected: 107c87bab101893e8322b49d7c8600e3367b20ab50aDoug Zongker int install_overlay_offset_x, install_overlay_offset_y; 108c87bab101893e8322b49d7c8600e3367b20ab50aDoug Zongker private: 10902ec6b88ed4e6cf40cc257572b07c7277b7b6341Doug Zongker int overlay_offset_x, overlay_offset_y; 110211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 111c87bab101893e8322b49d7c8600e3367b20ab50aDoug Zongker int stage, max_stage; 112c87bab101893e8322b49d7c8600e3367b20ab50aDoug Zongker 113211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void draw_install_overlay_locked(int frame); 114211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void draw_background_locked(Icon icon); 115211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void draw_progress_locked(); 116211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void draw_screen_locked(); 117211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void update_screen_locked(); 118211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void update_progress_locked(); 119211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker static void* progress_thread(void* cookie); 12032a0a47a596509792fde8cdbf8b4b0705708b2beDoug Zongker void progress_loop(); 121211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 122211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void LoadBitmap(const char* filename, gr_surface* surface); 12302ec6b88ed4e6cf40cc257572b07c7277b7b6341Doug Zongker void LoadLocalizedBitmap(const char* filename, gr_surface* surface); 124211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker}; 125211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 126211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker#endif // RECOVERY_UI_H 127