forked from rex12345/android_recovery_with_chinese
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrecovery_ui.c
133 lines (111 loc) · 3.38 KB
/
recovery_ui.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
* Copyright (C) 2009 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 <linux/input.h>
#include "recovery_ui.h"
#include "common.h"
char* MENU_HEADERS[] = { "Android系统恢复工具",
"",
"中文支持: www.goapk.com",
"",
NULL };
char* MENU_ITEMS[] = { "立即重启系统",
"U盘模式切换",
"快速安装update.zip",
"快速更新splash.bmp",
"从SD卡安装升级文件",
"从SD卡更新开机屏幕",
"清空数据",
"清空缓存",
"SD卡分区(vfat/ext3/swap)",
NULL };
int device_toggle_display(volatile char* key_pressed, int key_code) {
return key_code == KEY_HOME;
}
int device_reboot_now(volatile char* key_pressed, int key_code) {
return 0;
}
int device_handle_key(int key_code, int visible) {
if (visible) {
switch (key_code) {
case KEY_DOWN:
return HIGHLIGHT_DOWN;
case KEY_UP:
return HIGHLIGHT_UP;
case KEY_ENTER:
case KEY_CENTER:
case BTN_MOUSE:
case KEY_F21:
return SELECT_ITEM;
case KEY_BACK:
case KEY_POWER:
return SELECT_BACK;
case KEY_LEFT:
case KEY_SEND:
case KEY_VOLUMEDOWN:
return SELECT_LEFT;
case KEY_RIGHT:
case KEY_END:
case KEY_VOLUMEUP:
return SELECT_RIGHT;
}
}
return NO_ACTION;
}
int device_perform_action(int which) {
return which;
}
int device_wipe_data() {
return 0;
}
int get_menu_selection(char** headers, char** items, int menu_only) {
// throw away keys pressed previously, so user doesn't
// accidentally trigger menu items.
ui_clear_key_queue();
ui_start_menu(headers, items);
int selected = 0;
int chosen_item = -1;
while (chosen_item < 0) {
int key = ui_wait_key();
int visible = ui_text_visible();
int action = device_handle_key(key, visible);
if (action < 0) {
switch (action) {
case HIGHLIGHT_UP:
--selected;
selected = ui_menu_select(selected);
break;
case HIGHLIGHT_DOWN:
++selected;
selected = ui_menu_select(selected);
break;
case SELECT_ITEM:
chosen_item = selected;
break;
case NO_ACTION:
break;
}
if(action == SELECT_BACK)
{
chosen_item = action;
break;
}
} else if (!menu_only) {
chosen_item = action;
}
}
ui_end_menu();
return chosen_item;
}