Merge "Move default implementations into Device."

This commit is contained in:
Elliott Hughes
2015-04-09 22:53:34 +00:00
committed by Gerrit Code Review
4 changed files with 103 additions and 88 deletions
+10 -9
View File
@@ -30,16 +30,17 @@ include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS) include $(CLEAR_VARS)
LOCAL_SRC_FILES := \ LOCAL_SRC_FILES := \
recovery.cpp \
bootloader.cpp \
install.cpp \
roots.cpp \
ui.cpp \
screen_ui.cpp \
asn1_decoder.cpp \
verifier.cpp \
adb_install.cpp \ adb_install.cpp \
fuse_sdcard_provider.c asn1_decoder.cpp \
bootloader.cpp \
device.cpp \
fuse_sdcard_provider.c \
install.cpp \
recovery.cpp \
roots.cpp \
screen_ui.cpp \
ui.cpp \
verifier.cpp \
LOCAL_MODULE := recovery LOCAL_MODULE := recovery
+23 -67
View File
@@ -14,80 +14,36 @@
* limitations under the License. * limitations under the License.
*/ */
#include <linux/input.h>
#include "common.h"
#include "device.h" #include "device.h"
#include "screen_ui.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 { class DefaultDevice : public Device {
public: public:
DefaultDevice() : DefaultDevice() : Device(new ScreenRecoveryUI) {
ui(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;
}
} }
RecoveryUI* GetUI() { return ui; } return kNoAction;
}
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;
}
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;
}; };
Device* make_device() { Device* make_device() {
return new DefaultDevice(); return new DefaultDevice;
} }
+54
View File
@@ -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;
}
}
+16 -12
View File
@@ -21,13 +21,14 @@
class Device { class Device {
public: public:
Device(RecoveryUI* ui) : ui_(ui) { }
virtual ~Device() { } virtual ~Device() { }
// Called to obtain the UI object that should be used to display // Called to obtain the UI object that should be used to display
// the recovery user interface for this device. You should not // the recovery user interface for this device. You should not
// have called Init() on the UI object already, the caller will do // have called Init() on the UI object already, the caller will do
// that after this method returns. // 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 // Called when recovery starts up (after the UI has been obtained
// and initialized and after the arguments have been parsed, but // and initialized and after the arguments have been parsed, but
@@ -60,6 +61,17 @@ class Device {
APPLY_ADB_SIDELOAD, WIPE_DATA, WIPE_CACHE, APPLY_ADB_SIDELOAD, WIPE_DATA, WIPE_CACHE,
REBOOT_BOOTLOADER, SHUTDOWN, READ_RECOVERY_LASTLOG }; 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. // Perform a recovery action selected from the menu.
// 'menu_position' will be the item number of the selected menu // 'menu_position' will be the item number of the selected menu
// item, or a non-negative number returned from // item, or a non-negative number returned from
@@ -69,7 +81,7 @@ class Device {
// builtin actions, you can just return the corresponding enum // builtin actions, you can just return the corresponding enum
// value. If it is an action specific to your device, you // value. If it is an action specific to your device, you
// actually perform it here and return NO_ACTION. // 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 kNoAction = -1;
static const int kHighlightUp = -2; static const int kHighlightUp = -2;
@@ -84,16 +96,8 @@ class Device {
// are erased AFTER this returns (whether it returns success or not). // are erased AFTER this returns (whether it returns success or not).
virtual int WipeData() { return 0; } virtual int WipeData() { return 0; }
// Return the headers (an array of strings, one per line, private:
// NULL-terminated) for the main menu. Typically these tell users RecoveryUI* ui_;
// 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;
}; };
// The device-specific library must define this function (or the // The device-specific library must define this function (or the