summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk11
-rw-r--r--default_device.cpp90
-rw-r--r--device.cpp54
-rw-r--r--device.h28
4 files changed, 99 insertions, 84 deletions
diff --git a/Android.mk b/Android.mk
index dd1e96e7a..a567aa5a2 100644
--- a/Android.mk
+++ b/Android.mk
@@ -30,16 +30,17 @@ include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
- recovery.cpp \
+ adb_install.cpp \
+ asn1_decoder.cpp \
bootloader.cpp \
+ device.cpp \
+ fuse_sdcard_provider.c \
install.cpp \
+ recovery.cpp \
roots.cpp \
- ui.cpp \
screen_ui.cpp \
- asn1_decoder.cpp \
+ ui.cpp \
verifier.cpp \
- adb_install.cpp \
- fuse_sdcard_provider.c
LOCAL_MODULE := recovery
diff --git a/default_device.cpp b/default_device.cpp
index ed601f6c6..d7dd45283 100644
--- a/default_device.cpp
+++ b/default_device.cpp
@@ -14,80 +14,36 @@
* limitations under the License.
*/
-#include <linux/input.h>
-
-#include "common.h"
#include "device.h"
#include "screen_ui.h"
-static const char* HEADERS[] = {
- "Volume up/down to move highlight.",
- "Power button to select.",
- "",
- NULL
-};
-
-static const char* ITEMS[] = {
- "Reboot system now",
- "Reboot to bootloader",
- "Apply update from ADB",
- "Apply update from SD card",
- "Wipe data/factory reset",
- "Wipe cache partition",
- "View recovery logs",
- "Power off",
- NULL
-};
-
class DefaultDevice : public Device {
- public:
- DefaultDevice() :
- ui(new ScreenRecoveryUI) {
- }
-
- RecoveryUI* GetUI() { return ui; }
-
- int HandleMenuKey(int key, int visible) {
- if (visible) {
- switch (key) {
- case KEY_DOWN:
- case KEY_VOLUMEDOWN:
- return kHighlightDown;
-
- case KEY_UP:
- case KEY_VOLUMEUP:
- return kHighlightUp;
-
- case KEY_ENTER:
- case KEY_POWER:
- return kInvokeItem;
- }
- }
-
- return kNoAction;
+ public:
+ DefaultDevice() : Device(new ScreenRecoveryUI) {
+ }
+
+ // TODO: make this handle more cases, and move the default implementation into Device too.
+ int HandleMenuKey(int key, int visible) {
+ if (visible) {
+ switch (key) {
+ case KEY_DOWN:
+ case KEY_VOLUMEDOWN:
+ return kHighlightDown;
+
+ case KEY_UP:
+ case KEY_VOLUMEUP:
+ return kHighlightUp;
+
+ case KEY_ENTER:
+ case KEY_POWER:
+ return kInvokeItem;
+ }
}
- BuiltinAction InvokeMenuItem(int menu_position) {
- switch (menu_position) {
- case 0: return REBOOT;
- case 1: return REBOOT_BOOTLOADER;
- case 2: return APPLY_ADB_SIDELOAD;
- case 3: return APPLY_EXT;
- case 4: return WIPE_DATA;
- case 5: return WIPE_CACHE;
- case 6: return READ_RECOVERY_LASTLOG;
- case 7: return SHUTDOWN;
- default: return NO_ACTION;
- }
- }
-
- const char* const* GetMenuHeaders() { return HEADERS; }
- const char* const* GetMenuItems() { return ITEMS; }
-
- private:
- RecoveryUI* ui;
+ return kNoAction;
+ }
};
Device* make_device() {
- return new DefaultDevice();
+ return new DefaultDevice;
}
diff --git a/device.cpp b/device.cpp
new file mode 100644
index 000000000..20a763f2b
--- /dev/null
+++ b/device.cpp
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2015 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.
+ */
+
+#include "device.h"
+
+// TODO: this is a lie for, say, fugu.
+static const char* HEADERS[] = {
+ "Volume up/down to move highlight.",
+ "Power button to select.",
+ "",
+ NULL
+};
+
+static const char* ITEMS[] = {
+ "Reboot system now",
+ "Reboot to bootloader",
+ "Apply update from ADB",
+ "Apply update from SD card",
+ "Wipe data/factory reset",
+ "Wipe cache partition",
+ "View recovery logs",
+ "Power off",
+ NULL
+};
+
+const char* const* Device::GetMenuHeaders() { return HEADERS; }
+const char* const* Device::GetMenuItems() { return ITEMS; }
+
+Device::BuiltinAction Device::InvokeMenuItem(int menu_position) {
+ switch (menu_position) {
+ case 0: return REBOOT;
+ case 1: return REBOOT_BOOTLOADER;
+ case 2: return APPLY_ADB_SIDELOAD;
+ case 3: return APPLY_EXT;
+ case 4: return WIPE_DATA;
+ case 5: return WIPE_CACHE;
+ case 6: return READ_RECOVERY_LASTLOG;
+ case 7: return SHUTDOWN;
+ default: return NO_ACTION;
+ }
+}
diff --git a/device.h b/device.h
index 02f956489..97ec2fb41 100644
--- a/device.h
+++ b/device.h
@@ -21,13 +21,14 @@
class Device {
public:
+ Device(RecoveryUI* ui) : ui_(ui) { }
virtual ~Device() { }
// Called to obtain the UI object that should be used to display
// the recovery user interface for this device. You should not
// have called Init() on the UI object already, the caller will do
// that after this method returns.
- virtual RecoveryUI* GetUI() = 0;
+ virtual RecoveryUI* GetUI() { return ui_; }
// Called when recovery starts up (after the UI has been obtained
// and initialized and after the arguments have been parsed, but
@@ -60,6 +61,17 @@ class Device {
APPLY_ADB_SIDELOAD, WIPE_DATA, WIPE_CACHE,
REBOOT_BOOTLOADER, SHUTDOWN, READ_RECOVERY_LASTLOG };
+ // Return the headers (an array of strings, one per line,
+ // NULL-terminated) for the main menu. Typically these tell users
+ // what to push to move the selection and invoke the selected
+ // item.
+ virtual const char* const* GetMenuHeaders();
+
+ // Return the list of menu items (an array of strings,
+ // NULL-terminated). The menu_position passed to InvokeMenuItem
+ // will correspond to the indexes into this array.
+ virtual const char* const* GetMenuItems();
+
// Perform a recovery action selected from the menu.
// 'menu_position' will be the item number of the selected menu
// item, or a non-negative number returned from
@@ -69,7 +81,7 @@ class Device {
// builtin actions, you can just return the corresponding enum
// value. If it is an action specific to your device, you
// actually perform it here and return NO_ACTION.
- virtual BuiltinAction InvokeMenuItem(int menu_position) = 0;
+ virtual BuiltinAction InvokeMenuItem(int menu_position);
static const int kNoAction = -1;
static const int kHighlightUp = -2;
@@ -84,16 +96,8 @@ class Device {
// are erased AFTER this returns (whether it returns success or not).
virtual int WipeData() { return 0; }
- // Return the headers (an array of strings, one per line,
- // NULL-terminated) for the main menu. Typically these tell users
- // what to push to move the selection and invoke the selected
- // item.
- virtual const char* const* GetMenuHeaders() = 0;
-
- // Return the list of menu items (an array of strings,
- // NULL-terminated). The menu_position passed to InvokeMenuItem
- // will correspond to the indexes into this array.
- virtual const char* const* GetMenuItems() = 0;
+ private:
+ RecoveryUI* ui_;
};
// The device-specific library must define this function (or the