]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - android/platform-bootable-recovery.git/blob - screen_ui.h
Merge "tests: Add ApplyPatchModesTest.PatchModeEmmcTargetWithBsdiffPatch test."
[android/platform-bootable-recovery.git] / screen_ui.h
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  */
17 #ifndef RECOVERY_SCREEN_UI_H
18 #define RECOVERY_SCREEN_UI_H
20 #include <pthread.h>
21 #include <stdio.h>
23 #include <string>
24 #include <vector>
26 #include "ui.h"
28 // From minui/minui.h.
29 struct GRSurface;
31 // Implementation of RecoveryUI appropriate for devices with a screen
32 // (shows an icon + a progress bar, text logging, menu, etc.)
33 class ScreenRecoveryUI : public RecoveryUI {
34  public:
35   enum UIElement {
36     HEADER,
37     MENU,
38     MENU_SEL_BG,
39     MENU_SEL_BG_ACTIVE,
40     MENU_SEL_FG,
41     LOG,
42     TEXT_FILL,
43     INFO
44   };
46   ScreenRecoveryUI();
48   bool Init(const std::string& locale) override;
50   // overall recovery state ("background image")
51   void SetBackground(Icon icon) override;
52   void SetSystemUpdateText(bool security_update) override;
54   // progress indicator
55   void SetProgressType(ProgressType type) override;
56   void ShowProgress(float portion, float seconds) override;
57   void SetProgress(float fraction) override;
59   void SetStage(int current, int max) override;
61   // text log
62   void ShowText(bool visible) override;
63   bool IsTextVisible() override;
64   bool WasTextEverVisible() override;
66   // printing messages
67   void Print(const char* fmt, ...) override __printflike(2, 3);
68   void PrintOnScreenOnly(const char* fmt, ...) override __printflike(2, 3);
69   void ShowFile(const char* filename) override;
71   // menu display
72   void StartMenu(const char* const* headers, const char* const* items,
73                  int initial_selection) override;
74   int SelectMenu(int sel) override;
75   void EndMenu() override;
77   void KeyLongPress(int) override;
79   void Redraw();
81   void SetColor(UIElement e) const;
83   // Check the background text image. Use volume up/down button to cycle through the locales
84   // embedded in the png file, and power button to go back to recovery main menu.
85   void CheckBackgroundTextImages(const std::string& saved_locale);
87  protected:
88   // The margin that we don't want to use for showing texts (e.g. round screen, or screen with
89   // rounded corners).
90   const int kMarginWidth;
91   const int kMarginHeight;
93   // Number of frames per sec (default: 30) for both parts of the animation.
94   const int kAnimationFps;
96   // The scale factor from dp to pixels. 1.0 for mdpi, 4.0 for xxxhdpi.
97   const float kDensity;
99   virtual bool InitTextParams();
101   virtual void draw_background_locked();
102   virtual void draw_foreground_locked();
103   virtual void draw_screen_locked();
104   virtual void update_screen_locked();
105   virtual void update_progress_locked();
107   GRSurface* GetCurrentFrame() const;
108   GRSurface* GetCurrentText() const;
110   static void* ProgressThreadStartRoutine(void* data);
111   void ProgressThreadLoop();
113   virtual void ShowFile(FILE*);
114   virtual void PrintV(const char*, bool, va_list);
115   void PutChar(char);
116   void ClearText();
118   void LoadAnimation();
119   void LoadBitmap(const char* filename, GRSurface** surface);
120   void LoadLocalizedBitmap(const char* filename, GRSurface** surface);
122   int PixelsFromDp(int dp) const;
123   virtual int GetAnimationBaseline() const;
124   virtual int GetProgressBaseline() const;
125   virtual int GetTextBaseline() const;
127   // Returns pixel width of draw buffer.
128   virtual int ScreenWidth() const;
129   // Returns pixel height of draw buffer.
130   virtual int ScreenHeight() const;
132   // Draws a highlight bar at (x, y) - (x + width, y + height).
133   virtual void DrawHighlightBar(int x, int y, int width, int height) const;
134   // Draws a horizontal rule at Y. Returns the offset it should be moving along Y-axis.
135   virtual int DrawHorizontalRule(int y) const;
136   // Draws a line of text. Returns the offset it should be moving along Y-axis.
137   virtual int DrawTextLine(int x, int y, const char* line, bool bold) const;
138   // Draws surface portion (sx, sy, w, h) at screen location (dx, dy).
139   virtual void DrawSurface(GRSurface* surface, int sx, int sy, int w, int h, int dx, int dy) const;
140   // Draws rectangle at (x, y) - (x + w, y + h).
141   virtual void DrawFill(int x, int y, int w, int h) const;
142   // Draws given surface (surface->pixel_bytes = 1) as text at (x, y).
143   virtual void DrawTextIcon(int x, int y, GRSurface* surface) const;
144   // Draws multiple text lines. Returns the offset it should be moving along Y-axis.
145   int DrawTextLines(int x, int y, const char* const* lines) const;
146   // Similar to DrawTextLines() to draw multiple text lines, but additionally wraps long lines.
147   // Returns the offset it should be moving along Y-axis.
148   int DrawWrappedTextLines(int x, int y, const char* const* lines) const;
150   Icon currentIcon;
152   // The layout to use.
153   int layout_;
155   GRSurface* error_icon;
157   GRSurface* erasing_text;
158   GRSurface* error_text;
159   GRSurface* installing_text;
160   GRSurface* no_command_text;
162   GRSurface** introFrames;
163   GRSurface** loopFrames;
165   GRSurface* progressBarEmpty;
166   GRSurface* progressBarFill;
167   GRSurface* stageMarkerEmpty;
168   GRSurface* stageMarkerFill;
170   ProgressType progressBarType;
172   float progressScopeStart, progressScopeSize, progress;
173   double progressScopeTime, progressScopeDuration;
175   // true when both graphics pages are the same (except for the progress bar).
176   bool pagesIdentical;
178   size_t text_cols_, text_rows_;
180   // Log text overlay, displayed when a magic key is pressed.
181   char** text_;
182   size_t text_col_, text_row_;
184   bool show_text;
185   bool show_text_ever;  // has show_text ever been true?
187   std::vector<std::string> menu_;
188   const char* const* menu_headers_;
189   bool show_menu;
190   int menu_items, menu_sel;
192   // An alternate text screen, swapped with 'text_' when we're viewing a log file.
193   char** file_viewer_text_;
195   pthread_t progress_thread_;
197   // Number of intro frames and loop frames in the animation.
198   size_t intro_frames;
199   size_t loop_frames;
201   size_t current_frame;
202   bool intro_done;
204   int stage, max_stage;
206   int char_width_;
207   int char_height_;
209   // The locale that's used to show the rendered texts.
210   std::string locale_;
211   bool rtl_locale_;
213   pthread_mutex_t updateMutex;
215  private:
216   void SetLocale(const std::string&);
218   // Display the background texts for "erasing", "error", "no_command" and "installing" for the
219   // selected locale.
220   void SelectAndShowBackgroundText(const std::vector<std::string>& locales_entries, size_t sel);
221 };
223 #endif  // RECOVERY_UI_H