blob: 65c4aeed65f4e915dbd1134577466c79c0cd7ebc [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);
Tao Bao5d2e3bd2017-06-23 22:23:50 -070056 }
Tao Bao337db142015-08-20 14:52:57 -070057}
58
Tao Bao5d2e3bd2017-06-23 22:23:50 -070059void WearRecoveryUI::draw_screen_locked() {
Tao Bao5d2e3bd2017-06-23 22:23:50 -070060 draw_background_locked();
61 if (!show_text) {
62 draw_foreground_locked();
63 } else {
64 SetColor(TEXT_FILL);
65 gr_fill(0, 0, gr_fb_width(), gr_fb_height());
Tao Bao337db142015-08-20 14:52:57 -070066
Tao Bao93e46ad2018-05-02 14:57:21 -070067 // clang-format off
68 static std::vector<std::string> SWIPE_HELP = {
69 "Swipe up/down to move.",
70 "Swipe left/right to select.",
71 "",
72 };
73 // clang-format on
Tianjie Xu5fe5eb62018-03-20 16:07:39 -070074 draw_menu_and_text_buffer_locked(SWIPE_HELP);
Tao Bao5d2e3bd2017-06-23 22:23:50 -070075 }
Tao Bao337db142015-08-20 14:52:57 -070076}
77
Damien Bargiacchiad8b5a62016-09-09 08:18:06 -070078// TODO merge drawing routines with screen_ui
79void WearRecoveryUI::update_progress_locked() {
Tao Bao5d2e3bd2017-06-23 22:23:50 -070080 draw_screen_locked();
81 gr_flip();
Tao Bao337db142015-08-20 14:52:57 -070082}
83
Tao Bao99f0d9e2016-10-13 12:46:38 -070084void WearRecoveryUI::SetStage(int /* current */, int /* max */) {}
Tao Bao337db142015-08-20 14:52:57 -070085
Tao Bao1fe1afe2018-05-01 15:56:05 -070086void WearRecoveryUI::StartMenu(const std::vector<std::string>& headers,
87 const std::vector<std::string>& items, size_t initial_selection) {
Jerry Zhangb31f9ce2018-05-21 16:04:57 -070088 std::lock_guard<std::mutex> lg(updateMutex);
Tao Bao5d2e3bd2017-06-23 22:23:50 -070089 if (text_rows_ > 0 && text_cols_ > 0) {
Tianjie Xu5fe5eb62018-03-20 16:07:39 -070090 menu_ = std::make_unique<Menu>(scrollable_menu_, text_rows_ - kMenuUnusableRows - 1,
Tao Baoe02a5b22018-05-02 15:46:11 -070091 text_cols_ - 1, headers, items, initial_selection);
Tao Bao5d2e3bd2017-06-23 22:23:50 -070092 update_screen_locked();
93 }
Tao Bao93e46ad2018-05-02 14:57:21 -070094}