am e001074f: Merge "Move default implementations into Device."

* commit 'e001074f227fb74f6ebf5b26c222d09fe69712c0':
  Move default implementations into Device.
This commit is contained in:
Elliott Hughes 2015-04-09 22:59:07 +00:00 committed by Android Git Automerger
commit 7b66aaebef
4 changed files with 103 additions and 88 deletions

View file

@ -30,16 +30,17 @@ include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
recovery.cpp \
bootloader.cpp \
install.cpp \
roots.cpp \
ui.cpp \
screen_ui.cpp \
asn1_decoder.cpp \
verifier.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

View file

@ -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) {
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;
}
}
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;
}
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;
}

54
device.cpp Normal file
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;
}
}

View file

@ -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