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; 66a418aa7dd5e94cbf1ab2a6fa1c63f60e5e087d42Doug Zongker const char* locale; 675fa8c23911759a9e81af0e7fb5eb431277b8e9a6Doug Zongker bool rtl_locale; 68211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 69211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker pthread_mutex_t updateMutex; 7002ec6b88ed4e6cf40cc257572b07c7277b7b6341Doug Zongker gr_surface backgroundIcon[5]; 7102ec6b88ed4e6cf40cc257572b07c7277b7b6341Doug Zongker gr_surface backgroundText[5]; 72eac881c952fc6be0beeb5f719e3a70e651f3610eDoug Zongker gr_surface *installation; 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 installing_frames; 105c87bab101893e8322b49d7c8600e3367b20ab50aDoug Zongker protected: 106c87bab101893e8322b49d7c8600e3367b20ab50aDoug Zongker private: 107eac881c952fc6be0beeb5f719e3a70e651f3610eDoug Zongker 108eac881c952fc6be0beeb5f719e3a70e651f3610eDoug Zongker int iconX, iconY; 109211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 110c87bab101893e8322b49d7c8600e3367b20ab50aDoug Zongker int stage, max_stage; 111c87bab101893e8322b49d7c8600e3367b20ab50aDoug Zongker 112211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void draw_background_locked(Icon icon); 113211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void draw_progress_locked(); 114211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void draw_screen_locked(); 115211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void update_screen_locked(); 116211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void update_progress_locked(); 117211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker static void* progress_thread(void* cookie); 11832a0a47a596509792fde8cdbf8b4b0705708b2beDoug Zongker void progress_loop(); 119211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 120211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker void LoadBitmap(const char* filename, gr_surface* surface); 121eac881c952fc6be0beeb5f719e3a70e651f3610eDoug Zongker void LoadBitmapArray(const char* filename, int* frames, gr_surface** surface); 12202ec6b88ed4e6cf40cc257572b07c7277b7b6341Doug Zongker void LoadLocalizedBitmap(const char* filename, gr_surface* surface); 123211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker}; 124211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker 125211aebc4e09ce7ca37003be4f01c83111cf0bb49Doug Zongker#endif // RECOVERY_UI_H 126