diff options
-rw-r--r-- | Android.mk | 11 | ||||
-rw-r--r-- | default_device.cpp | 90 | ||||
-rw-r--r-- | device.cpp | 54 | ||||
-rw-r--r-- | device.h | 28 |
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; + } +} @@ -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 |