166 lines
5.3 KiB
C++
166 lines
5.3 KiB
C++
/*
|
|
* Copyright (C) 2021 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.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <teeui/button.h>
|
|
#include <teeui/label.h>
|
|
#include <teeui/localization/ConfirmationUITranslations.h>
|
|
#include <teeui/utils.h>
|
|
|
|
#include "fonts.h"
|
|
|
|
using teeui::localization::TranslationId;
|
|
|
|
namespace teeui {
|
|
|
|
DECLARE_PARAMETER(RightEdgeOfScreen);
|
|
DECLARE_PARAMETER(BottomOfScreen);
|
|
DECLARE_PARAMETER(DefaultFontSize); // 14_dp regular and 18_dp magnified
|
|
DECLARE_PARAMETER(BodyFontSize); // 16_dp regular and 20_dp magnified
|
|
DECLARE_TYPED_PARAMETER(ShieldColor, ::teeui::Color);
|
|
DECLARE_TYPED_PARAMETER(ColorText, ::teeui::Color);
|
|
DECLARE_TYPED_PARAMETER(ColorBG, ::teeui::Color);
|
|
|
|
CONSTANT(BorderWidth, 24_dp);
|
|
|
|
DECLARE_FONT_BUFFER(RobotoMedium, RobotoMedium, RobotoMedium_length);
|
|
DECLARE_FONT_BUFFER(RobotoRegular, RobotoRegular, RobotoRegular_length);
|
|
DECLARE_FONT_BUFFER(Shield, Shield, Shield_length);
|
|
|
|
CONSTANT(DefaultFont, FONT(RobotoRegular));
|
|
|
|
DECLARE_TYPED_PARAMETER(ColorButton, ::teeui::Color);
|
|
|
|
NEW_PARAMETER_SET(ConfUIParameters, RightEdgeOfScreen, BottomOfScreen,
|
|
DefaultFontSize, BodyFontSize, ShieldColor, ColorText,
|
|
ColorBG, ColorButton);
|
|
|
|
CONSTANT(IconShieldDistanceFromTop, 100_dp);
|
|
CONSTANT(LabelBorderZone, 4_dp);
|
|
CONSTANT(RightLabelEdge, RightEdgeOfScreen() - BorderWidth);
|
|
CONSTANT(LabelWidth, RightLabelEdge - BorderWidth);
|
|
CONSTANT(ButtonHeight, 72_dp);
|
|
CONSTANT(ButtonPositionX, 0);
|
|
CONSTANT(ButtonPositionY, BottomOfScreen() - ButtonHeight);
|
|
CONSTANT(ButtonWidth, 130_dp);
|
|
CONSTANT(ButtonLabelDistance, 12_dp);
|
|
|
|
BEGIN_ELEMENT(IconShield, teeui::Label)
|
|
FontSize(24_dp);
|
|
LineHeight(24_dp);
|
|
NumberOfLines(1);
|
|
Dimension(LabelWidth, HeightFromLines);
|
|
Position(BorderWidth, IconShieldDistanceFromTop);
|
|
DefaultText(
|
|
"A"); // ShieldTTF has just one glyph at the code point for capital A
|
|
TextColor(ShieldColor());
|
|
HorizontalTextAlignment(Alignment::CENTER);
|
|
Font(FONT(Shield));
|
|
END_ELEMENT();
|
|
|
|
BEGIN_ELEMENT(LabelTitle, teeui::Label)
|
|
FontSize(20_dp);
|
|
LineHeight(20_dp);
|
|
NumberOfLines(1);
|
|
Dimension(LabelWidth, HeightFromLines);
|
|
Position(BorderWidth, BOTTOM_EDGE_OF(IconShield) + 16_dp);
|
|
DefaultText("Android Protected Confirmation");
|
|
Font(FONT(RobotoMedium));
|
|
VerticallyCentered;
|
|
TextColor(ColorText());
|
|
TextID(TEXT_ID(TranslationId::TITLE));
|
|
END_ELEMENT();
|
|
|
|
BEGIN_ELEMENT(IconOk, teeui::Button, ConvexObjectCount(1))
|
|
Dimension(ButtonWidth, ButtonHeight - BorderWidth);
|
|
Position(RightEdgeOfScreen() - ButtonWidth - BorderWidth,
|
|
ButtonPositionY + ButtonLabelDistance);
|
|
CornerRadius(4_dp);
|
|
ButtonColor(ColorButton());
|
|
RoundTopLeft;
|
|
RoundBottomLeft;
|
|
RoundTopRight;
|
|
RoundBottomRight;
|
|
END_ELEMENT();
|
|
|
|
BEGIN_ELEMENT(LabelOK, teeui::Label)
|
|
FontSize(BodyFontSize());
|
|
LineHeight(BodyFontSize() * 1.4_px);
|
|
NumberOfLines(1);
|
|
Dimension(ButtonWidth - (LabelBorderZone * 2_dp),
|
|
ButtonHeight - BorderWidth - (LabelBorderZone * 2_dp));
|
|
Position(RightEdgeOfScreen() - ButtonWidth - BorderWidth + LabelBorderZone,
|
|
ButtonPositionY + ButtonLabelDistance + LabelBorderZone);
|
|
DefaultText("Confirm");
|
|
Font(FONT(RobotoMedium));
|
|
HorizontalTextAlignment(Alignment::CENTER);
|
|
VerticalTextAlignment(Alignment::CENTER);
|
|
TextColor(ColorBG());
|
|
TextID(TEXT_ID(TranslationId::CONFIRM));
|
|
END_ELEMENT();
|
|
|
|
BEGIN_ELEMENT(LabelCancel, teeui::Label)
|
|
FontSize(BodyFontSize());
|
|
LineHeight(BodyFontSize() * 1.4_px);
|
|
NumberOfLines(1);
|
|
Dimension(ButtonWidth - (LabelBorderZone * 2_dp),
|
|
ButtonHeight - BorderWidth - (LabelBorderZone * 2_dp));
|
|
Position(BorderWidth + LabelBorderZone,
|
|
ButtonPositionY + ButtonLabelDistance + LabelBorderZone);
|
|
DefaultText("Cancel");
|
|
HorizontalTextAlignment(Alignment::LEFT);
|
|
Font(FONT(RobotoMedium));
|
|
VerticallyCentered;
|
|
TextColor(ColorButton());
|
|
TextID(TEXT_ID(TranslationId::CANCEL));
|
|
END_ELEMENT();
|
|
|
|
BEGIN_ELEMENT(LabelHint, teeui::Label)
|
|
FontSize(DefaultFontSize());
|
|
LineHeight(DefaultFontSize() * 1.5_px);
|
|
NumberOfLines(4);
|
|
Dimension(LabelWidth, HeightFromLines);
|
|
Position(BorderWidth, ButtonPositionY - dim_h - 48_dp);
|
|
DefaultText(
|
|
"This confirmation provides an extra layer of security for the action "
|
|
"you're "
|
|
"about to take.");
|
|
VerticalTextAlignment(Alignment::BOTTOM);
|
|
TextColor(ColorText());
|
|
Font(DefaultFont);
|
|
TextID(TEXT_ID(TranslationId::DESCRIPTION));
|
|
END_ELEMENT();
|
|
|
|
BEGIN_ELEMENT(LabelBody, teeui::Label)
|
|
FontSize(BodyFontSize());
|
|
LineHeight(BodyFontSize() * 1.4_px);
|
|
NumberOfLines(20);
|
|
Position(BorderWidth, BOTTOM_EDGE_OF(LabelTitle) + 16_dp);
|
|
Dimension(LabelWidth, LabelHint::pos_y - pos_y - 24_dp);
|
|
DefaultText(
|
|
"12345678901234567890123456789012345678901234567890123456789012345678901234"
|
|
"567890123456"
|
|
"78901234567890");
|
|
TextColor(ColorText());
|
|
Font(FONT(RobotoRegular));
|
|
END_ELEMENT();
|
|
|
|
NEW_LAYOUT(ConfUILayout, IconShield, LabelTitle, LabelHint, LabelBody, IconOk,
|
|
LabelOK, LabelCancel);
|
|
|
|
} // namespace teeui
|