From eee3aab91f54d898ec54e4a3d1337e96df97e146 Mon Sep 17 00:00:00 2001 From: Doug Zongker Date: Mon, 31 Oct 2011 15:12:04 -0700 Subject: convert crespo recovery UI to C++ model Change-Id: Ife6a8e199cfd2e66c145dedb1c5de1779e6cfdb5 --- recovery/Android.mk | 2 +- recovery/recovery_ui.c | 115 ----------------------------------------------- recovery/recovery_ui.cpp | 110 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 116 deletions(-) delete mode 100644 recovery/recovery_ui.c create mode 100644 recovery/recovery_ui.cpp diff --git a/recovery/Android.mk b/recovery/Android.mk index 2100f3d..0d65438 100644 --- a/recovery/Android.mk +++ b/recovery/Android.mk @@ -5,7 +5,7 @@ include $(CLEAR_VARS) LOCAL_MODULE_TAGS := eng LOCAL_C_INCLUDES += bootable/recovery -LOCAL_SRC_FILES := recovery_ui.c +LOCAL_SRC_FILES := recovery_ui.cpp # should match TARGET_RECOVERY_UI_LIB set in BoardConfig.mk LOCAL_MODULE := librecovery_ui_crespo diff --git a/recovery/recovery_ui.c b/recovery/recovery_ui.c deleted file mode 100644 index 81ed4f2..0000000 --- a/recovery/recovery_ui.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2010 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 -#include -#include -#include - -#include "recovery_ui.h" -#include "common.h" - -char* MENU_HEADERS[] = { "Volume up/down to move highlight;", - "power button to select.", - "", - NULL }; - -char* MENU_ITEMS[] = { "reboot system now", - "apply update from /sdcard", - "wipe data/factory reset", - "wipe cache partition", - NULL }; - -void device_ui_init(UIParameters* ui_parameters) { -} - -int device_recovery_start() { - // recovery can get started before the kernel has created the EMMC - // devices, which will make the wipe_data operation fail (trying - // to open a device that doesn't exist). Hold up the start of - // recovery for up to 5 seconds waiting for the userdata partition - // block device to exist. - - const char* fn = "/dev/block/platform/s3c-sdhci.0/by-name/userdata"; - - int tries = 0; - int ret; - struct stat buf; - do { - ++tries; - ret = stat(fn, &buf); - if (ret) { - printf("try %d: %s\n", tries, strerror(errno)); - sleep(1); - } - } while (ret && tries < 5); - if (!ret) { - printf("stat() of %s succeeded on try %d\n", fn, tries); - } else { - printf("failed to stat %s\n", fn); - } - - // We let recovery attempt to carry on even if the stat never - // succeeded. - - return 0; -} - -int device_toggle_display(volatile char* key_pressed, int key_code) { - // hold power and press volume-up - return key_pressed[KEY_POWER] && key_code == KEY_VOLUMEUP; -} - -int device_reboot_now(volatile char* key_pressed, int key_code) { - // Reboot if the power key is pressed five times in a row, with - // no other keys in between. - static int presses = 0; - if (key_code == KEY_POWER) { // power button - ++presses; - return presses == 5; - } else { - presses = 0; - return 0; - } -} - -int device_handle_key(int key_code, int visible) { - if (visible) { - switch (key_code) { - case KEY_DOWN: - case KEY_VOLUMEDOWN: - return HIGHLIGHT_DOWN; - - case KEY_UP: - case KEY_VOLUMEUP: - return HIGHLIGHT_UP; - - case KEY_ENTER: - case KEY_POWER: // crespo power - return SELECT_ITEM; - } - } - - return NO_ACTION; -} - -int device_perform_action(int which) { - return which; -} - -int device_wipe_data() { - return 0; -} diff --git a/recovery/recovery_ui.cpp b/recovery/recovery_ui.cpp new file mode 100644 index 0000000..4c615f8 --- /dev/null +++ b/recovery/recovery_ui.cpp @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2010 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 +#include +#include +#include + +#include "common.h" +#include "device.h" +#include "screen_ui.h" + +const char* HEADERS[] = { "Volume up/down to move highlight;", + "power button to select.", + "", + NULL }; + +const char* ITEMS[] = { "reboot system now", + "apply update from /sdcard", + "wipe data/factory reset", + "wipe cache partition", + NULL }; + + + +class CrespoUI : public ScreenRecoveryUI { + public: + CrespoUI() : + consecutive_power_keys(0) { + } + + virtual KeyAction CheckKey(int key) { + if (IsKeyPressed(KEY_POWER) && key == KEY_VOLUMEUP) { + return TOGGLE; + } + if (key == KEY_POWER) { + ++consecutive_power_keys; + if (consecutive_power_keys >= 7) { + return REBOOT; + } + } else { + consecutive_power_keys = 0; + } + return ENQUEUE; + } + + private: + int consecutive_power_keys; +}; + +class CrespoDevice : public Device { + public: + CrespoDevice() : + ui(new CrespoUI) { + } + + RecoveryUI* GetUI() { return ui; } + + int HandleMenuKey(int key_code, int visible) { + if (visible) { + switch (key_code) { + case KEY_DOWN: + case KEY_VOLUMEDOWN: + return kHighlightDown; + + case KEY_UP: + case KEY_VOLUMEUP: + return kHighlightUp; + + case KEY_POWER: + return kInvokeItem; + } + } + + return kNoAction; + } + + BuiltinAction InvokeMenuItem(int menu_position) { + switch (menu_position) { + case 0: return REBOOT; + case 1: return APPLY_EXT; + case 2: return WIPE_DATA; + case 3: return WIPE_CACHE; + default: return NO_ACTION; + } + } + + const char* const* GetMenuHeaders() { return HEADERS; } + const char* const* GetMenuItems() { return ITEMS; } + + private: + RecoveryUI* ui; +}; + +Device* make_device() { + return new CrespoDevice; +} -- cgit v1.1