1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "device.h" 18 19 static const char* MENU_ITEMS[] = { 20 "Reboot system now", 21 "Reboot to bootloader", 22 "Apply update from ADB", 23 "Apply update from SD card", 24 "Wipe data/factory reset", 25 #ifndef AB_OTA_UPDATER 26 "Wipe cache partition", 27 #endif // !AB_OTA_UPDATER 28 "Mount /system", 29 "View recovery logs", 30 "Run graphics test", 31 "Run locale test", 32 "Power off", 33 nullptr, 34 }; 35 36 static const Device::BuiltinAction MENU_ACTIONS[] = { 37 Device::REBOOT, 38 Device::REBOOT_BOOTLOADER, 39 Device::APPLY_ADB_SIDELOAD, 40 Device::APPLY_SDCARD, 41 Device::WIPE_DATA, 42 #ifndef AB_OTA_UPDATER 43 Device::WIPE_CACHE, 44 #endif // !AB_OTA_UPDATER 45 Device::MOUNT_SYSTEM, 46 Device::VIEW_RECOVERY_LOGS, 47 Device::RUN_GRAPHICS_TEST, 48 Device::RUN_LOCALE_TEST, 49 Device::SHUTDOWN, 50 }; 51 52 static_assert(sizeof(MENU_ITEMS) / sizeof(MENU_ITEMS[0]) == 53 sizeof(MENU_ACTIONS) / sizeof(MENU_ACTIONS[0]) + 1, 54 "MENU_ITEMS and MENU_ACTIONS should have the same length, " 55 "except for the extra NULL entry in MENU_ITEMS."); 56 57 const char* const* Device::GetMenuItems() { 58 return MENU_ITEMS; 59 } 60 61 Device::BuiltinAction Device::InvokeMenuItem(int menu_position) { 62 return menu_position < 0 ? NO_ACTION : MENU_ACTIONS[menu_position]; 63 } 64 65 int Device::HandleMenuKey(int key, bool visible) { 66 if (!visible) { 67 return kNoAction; 68 } 69 70 switch (key) { 71 case KEY_DOWN: 72 case KEY_VOLUMEDOWN: 73 return kHighlightDown; 74 75 case KEY_UP: 76 case KEY_VOLUMEUP: 77 return kHighlightUp; 78 79 case KEY_ENTER: 80 case KEY_POWER: 81 return kInvokeItem; 82 83 default: 84 // If you have all of the above buttons, any other buttons 85 // are ignored. Otherwise, any button cycles the highlight. 86 return ui_->HasThreeButtons() ? kNoAction : kHighlightDown; 87 } 88 } 89