aboutsummaryrefslogtreecommitdiffstats
path: root/screen_ui.h
diff options
context:
space:
mode:
authorDoug Zongker <dougz@android.com>2011-10-28 15:13:10 -0700
committerDoug Zongker <dougz@android.com>2011-10-31 14:15:02 -0700
commit211aebc4e09ce7ca37003be4f01c83111cf0bb49 (patch)
tree395aa8bc2d1d0412a52d42a3bb2d75a54f96685c /screen_ui.h
parent0890a0ce8ecc47afb1f892dcd770e8dc519add14 (diff)
downloadbootable_recovery-211aebc4e09ce7ca37003be4f01c83111cf0bb49.zip
bootable_recovery-211aebc4e09ce7ca37003be4f01c83111cf0bb49.tar.gz
bootable_recovery-211aebc4e09ce7ca37003be4f01c83111cf0bb49.tar.bz2
refactor ui functions into a class
Move all the functions in ui.c to be members of a ScreenRecoveryUI class, which is a subclass of an abstract RecoveryUI class. Recovery then creates a global singleton instance of this class and then invoke the methods to drive the UI. We use this to allow substitution of a different RecoveryUI implementation for devices with radically different form factors (eg, that don't have a screen). Change-Id: I76bdd34eca506149f4cc07685df6a4890473f3d9
Diffstat (limited to 'screen_ui.h')
-rw-r--r--screen_ui.h121
1 files changed, 121 insertions, 0 deletions
diff --git a/screen_ui.h b/screen_ui.h
new file mode 100644
index 0000000..544f154
--- /dev/null
+++ b/screen_ui.h
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef RECOVERY_SCREEN_UI_H
+#define RECOVERY_SCREEN_UI_H
+
+#include <pthread.h>
+
+#include "ui.h"
+#include "minui/minui.h"
+
+// Implementation of RecoveryUI appropriate for devices with a screen
+// (shows an icon + a progress bar, text logging, menu, etc.)
+class ScreenRecoveryUI : public RecoveryUI {
+ public:
+ ScreenRecoveryUI();
+
+ void Init();
+
+ // overall recovery state ("background image")
+ void SetBackground(Icon icon);
+
+ // progress indicator
+ void SetProgressType(ProgressType type);
+ void ShowProgress(float portion, float seconds);
+ void SetProgress(float fraction);
+
+ // text log
+ void ShowText(bool visible);
+ bool IsTextVisible();
+ bool WasTextEverVisible();
+
+ // key handling
+ int WaitKey();
+ bool IsKeyPressed(int key);
+ void FlushKeys();
+
+ // printing messages
+ void Print(const char* fmt, ...); // __attribute__((format(printf, 1, 2)));
+
+ // menu display
+ void StartMenu(const char* const * headers, const char* const * items,
+ int initial_selection);
+ int SelectMenu(int sel);
+ void EndMenu();
+
+ private:
+ Icon currentIcon;
+ int installingFrame;
+
+ pthread_mutex_t updateMutex;
+ gr_surface backgroundIcon[3];
+ gr_surface *installationOverlay;
+ gr_surface *progressBarIndeterminate;
+ gr_surface progressBarEmpty;
+ gr_surface progressBarFill;
+
+ ProgressType progressBarType;
+
+ float progressScopeStart, progressScopeSize, progress;
+ double progressScopeTime, progressScopeDuration;
+
+ // true when both graphics pages are the same (except for the
+ // progress bar)
+ bool pagesIdentical;
+
+ static const int kMaxCols = 96;
+ static const int kMaxRows = 32;
+
+ // Log text overlay, displayed when a magic key is pressed
+ char text[kMaxRows][kMaxCols];
+ int text_cols, text_rows;
+ int text_col, text_row, text_top;
+ bool show_text;
+ bool show_text_ever; // has show_text ever been true?
+
+ char menu[kMaxRows][kMaxCols];
+ bool show_menu;
+ int menu_top, menu_items, menu_sel;
+
+ // Key event input queue
+ pthread_mutex_t key_queue_mutex;
+ pthread_cond_t key_queue_cond;
+ int key_queue[256], key_queue_len;
+ volatile char key_pressed[KEY_MAX + 1];
+ int rel_sum;
+
+ pthread_t progress_t;
+ pthread_t input_t;
+
+ void draw_install_overlay_locked(int frame);
+ void draw_background_locked(Icon icon);
+ void draw_progress_locked();
+ void draw_text_line(int row, const char* t);
+ void draw_screen_locked();
+ void update_screen_locked();
+ void update_progress_locked();
+ static void* progress_thread(void* cookie);
+ static int input_callback(int fd, short revents, void* data);
+ static void* input_thread(void* cookie);
+
+ bool usb_connected();
+
+ void LoadBitmap(const char* filename, gr_surface* surface);
+
+};
+
+#endif // RECOVERY_UI_H