blob: f508236884c24fcf0b15d04622df90de27dbbef4 [file] [log] [blame]
Tao Bao337db142015-08-20 14:52:57 -07001/*
2 * Copyright (C) 2014 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
Tao Bao736d59c2017-01-03 10:15:33 -080017#include "wear_ui.h"
18
Tao Bao337db142015-08-20 14:52:57 -070019#include <string.h>
Tao Bao337db142015-08-20 14:52:57 -070020
Tao Bao736d59c2017-01-03 10:15:33 -080021#include <string>
Tao Bao1fe1afe2018-05-01 15:56:05 -070022#include <vector>
Tao Bao337db142015-08-20 14:52:57 -070023
Tao Bao0ecbd762017-01-16 21:16:58 -080024#include <android-base/properties.h>
Tao Baoee8a96a2017-09-01 11:37:50 -070025#include <android-base/strings.h>
Tao Bao0ecbd762017-01-16 21:16:58 -080026#include <minui/minui.h>
27
Tao Bao5d2e3bd2017-06-23 22:23:50 -070028WearRecoveryUI::WearRecoveryUI()
Tianjie Xu5fe5eb62018-03-20 16:07:39 -070029 : ScreenRecoveryUI(true),
30 kProgressBarBaseline(RECOVERY_UI_PROGRESS_BAR_BASELINE),
Tao Baoeea3af32017-08-11 13:50:24 -070031 kMenuUnusableRows(RECOVERY_UI_MENU_UNUSABLE_ROWS) {
32 // TODO: kMenuUnusableRows should be computed based on the lines in draw_screen_locked().
Tao Bao0470cee2017-08-02 17:11:04 -070033
Tao Bao0470cee2017-08-02 17:11:04 -070034 touch_screen_allowed_ = true;
Tao Bao337db142015-08-20 14:52:57 -070035}
36
Tao Bao99b2d772017-06-23 22:47:03 -070037int WearRecoveryUI::GetProgressBaseline() const {
Tao Bao0470cee2017-08-02 17:11:04 -070038 return kProgressBarBaseline;
Damien Bargiacchi5e7cfb92016-08-24 18:28:43 -070039}
40
Tao Bao337db142015-08-20 14:52:57 -070041// Draw background frame on the screen. Does not flip pages.
42// Should only be called with updateMutex locked.
Damien Bargiacchi5e7cfb92016-08-24 18:28:43 -070043// TODO merge drawing routines with screen_ui
Tao Bao5d2e3bd2017-06-23 22:23:50 -070044void WearRecoveryUI::draw_background_locked() {
45 pagesIdentical = false;
46 gr_color(0, 0, 0, 255);
47 gr_fill(0, 0, gr_fb_width(), gr_fb_height());
Tao Bao337db142015-08-20 14:52:57 -070048
Tao Bao5d2e3bd2017-06-23 22:23:50 -070049 if (currentIcon != NONE) {
Tao Bao79127102017-08-30 15:23:34 -070050 GRSurface* frame = GetCurrentFrame();
51 int frame_width = gr_get_width(frame);
52 int frame_height = gr_get_height(frame);
53 int frame_x = (gr_fb_width() - frame_width) / 2;
54 int frame_y = (gr_fb_height() - frame_height) / 2;
55 gr_blit(frame, 0, 0, frame_width, frame_height, frame_x, frame_y);
Karl Shaffer633c01b2018-07-19 11:58:54 -070056
57 // Draw recovery text on screen above progress bar.
58 GRSurface* text = GetCurrentText();
59 int text_x = (ScreenWidth() - gr_get_width(text)) / 2;
60 int text_y = GetProgressBaseline() - gr_get_height(text) - 10;
61 gr_color(255, 255, 255, 255);
62 gr_texticon(text_x, text_y, text);
Tao Bao5d2e3bd2017-06-23 22:23:50 -070063 }
Tao Bao337db142015-08-20 14:52:57 -070064}
65
Tao Bao5d2e3bd2017-06-23 22:23:50 -070066void WearRecoveryUI::draw_screen_locked() {
Tao Bao5d2e3bd2017-06-23 22:23:50 -070067 draw_background_locked();
68 if (!show_text) {
69 draw_foreground_locked();
70 } else {
71 SetColor(TEXT_FILL);
72 gr_fill(0, 0, gr_fb_width(), gr_fb_height());
Tao Bao337db142015-08-20 14:52:57 -070073
Tao Bao93e46ad2018-05-02 14:57:21 -070074 // clang-format off
75 static std::vector<std::string> SWIPE_HELP = {
76 "Swipe up/down to move.",
77 "Swipe left/right to select.",
78 "",
79 };
80 // clang-format on
Tianjie Xu5fe5eb62018-03-20 16:07:39 -070081 draw_menu_and_text_buffer_locked(SWIPE_HELP);
Tao Bao5d2e3bd2017-06-23 22:23:50 -070082 }
Tao Bao337db142015-08-20 14:52:57 -070083}
84
Damien Bargiacchiad8b5a62016-09-09 08:18:06 -070085// TODO merge drawing routines with screen_ui
86void WearRecoveryUI::update_progress_locked() {
Tao Bao5d2e3bd2017-06-23 22:23:50 -070087 draw_screen_locked();
88 gr_flip();
Tao Bao337db142015-08-20 14:52:57 -070089}
90
Tao Bao99f0d9e2016-10-13 12:46:38 -070091void WearRecoveryUI::SetStage(int /* current */, int /* max */) {}
Tao Bao337db142015-08-20 14:52:57 -070092
Tao Bao1fe1afe2018-05-01 15:56:05 -070093void WearRecoveryUI::StartMenu(const std::vector<std::string>& headers,
94 const std::vector<std::string>& items, size_t initial_selection) {
Jerry Zhangb31f9ce2018-05-21 16:04:57 -070095 std::lock_guard<std::mutex> lg(updateMutex);
Tao Bao5d2e3bd2017-06-23 22:23:50 -070096 if (text_rows_ > 0 && text_cols_ > 0) {
Tianjie Xu5fe5eb62018-03-20 16:07:39 -070097 menu_ = std::make_unique<Menu>(scrollable_menu_, text_rows_ - kMenuUnusableRows - 1,
Tao Baoe02a5b22018-05-02 15:46:11 -070098 text_cols_ - 1, headers, items, initial_selection);
Tao Bao5d2e3bd2017-06-23 22:23:50 -070099 update_screen_locked();
100 }
Tao Bao93e46ad2018-05-02 14:57:21 -0700101}