Commit ac14573e authored by Yicheng Li's avatar Yicheng Li Committed by Commit Bot

ash: Add fingerprint view to in-session auth dialog

The fingerprint view consists of a fingerprint icon and a prompt text.
A follow-up CL will enable/disable the fingerprint view based on
whether fingerprint is set and available.

Bug: b:156258540
Change-Id: I602a4d63abadeab735cae0bd6da27c50b2ef27d1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2350999Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Commit-Queue: Yicheng Li <yichengli@chromium.org>
Cr-Commit-Position: refs/heads/master@{#797717}
parent 7c364680
......@@ -12,10 +12,12 @@
#include "ash/login/ui/non_accessible_view.h"
#include "ash/login/ui/views_utils.h"
#include "ash/public/cpp/in_session_auth_dialog_controller.h"
#include "ash/resources/vector_icons/vector_icons.h"
#include "ash/strings/grit/ash_strings.h"
#include "base/bind_helpers.h"
#include "base/strings/utf_string_conversions.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/views/background.h"
#include "ui/views/controls/button/md_text_button.h"
#include "ui/views/controls/label.h"
......@@ -31,7 +33,7 @@ enum class ButtonId {
};
const char kTitle[] = "Verify it's you";
const char kFingerprintPrompt[] = "Touch the fingerprint sensor";
const char kFingerprintPrompt[] = "Authenticate with fingerprint";
// If fingerprint option is available, password input field will be hidden
// until the user taps the MoreOptions button.
const char kMoreOptionsButtonText[] = "More options";
......@@ -47,8 +49,56 @@ const int kButtonSpacing = 8;
const int kTitleFontSize = 14;
const int kPromptFontSize = 12;
constexpr int kFingerprintIconSizeDp = 28;
constexpr int kFingerprintIconTopSpacingDp = 20;
constexpr int kSpacingBetweenFingerprintIconAndLabelDp = 15;
constexpr int kFingerprintViewWidthDp = 204;
} // namespace
// Consists of fingerprint icon view and a label.
class AuthDialogDebugView::FingerprintView : public views::View {
public:
FingerprintView() {
SetBorder(views::CreateEmptyBorder(kFingerprintIconTopSpacingDp, 0, 0, 0));
auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kVertical, gfx::Insets(),
kSpacingBetweenFingerprintIconAndLabelDp));
layout->set_main_axis_alignment(
views::BoxLayout::MainAxisAlignment::kCenter);
icon_ = AddChildView(std::make_unique<AnimatedRoundedImageView>(
gfx::Size(kFingerprintIconSizeDp, kFingerprintIconSizeDp),
0 /*corner_radius*/));
icon_->SetImage(gfx::CreateVectorIcon(
kLockScreenFingerprintIcon, kFingerprintIconSizeDp, SK_ColorDKGRAY));
label_ = AddChildView(std::make_unique<views::Label>());
label_->SetSubpixelRenderingEnabled(false);
label_->SetAutoColorReadabilityEnabled(false);
label_->SetEnabledColor(SK_ColorDKGRAY);
label_->SetMultiLine(true);
label_->SetText(base::UTF8ToUTF16(kFingerprintPrompt));
SetVisible(true);
}
FingerprintView(const FingerprintView&) = delete;
FingerprintView& operator=(const FingerprintView&) = delete;
~FingerprintView() override = default;
// views::View:
gfx::Size CalculatePreferredSize() const override {
gfx::Size size = views::View::CalculatePreferredSize();
size.set_width(kFingerprintViewWidthDp);
return size;
}
private:
views::Label* label_ = nullptr;
AnimatedRoundedImageView* icon_ = nullptr;
};
AuthDialogDebugView::AuthDialogDebugView() {
SetLayoutManager(std::make_unique<views::FillLayout>());
container_ = AddChildView(std::make_unique<NonAccessibleView>());
......@@ -60,17 +110,19 @@ AuthDialogDebugView::AuthDialogDebugView() {
main_layout_->set_main_axis_alignment(
views::BoxLayout::MainAxisAlignment::kStart);
main_layout_->set_cross_axis_alignment(
views::BoxLayout::CrossAxisAlignment::kStart);
views::BoxLayout::CrossAxisAlignment::kCenter);
AddVerticalSpacing(kTopVerticalSpacing);
AddTitleView();
AddVerticalSpacing(kVerticalSpacingBetweenTitleAndPrompt);
AddPromptView();
// TODO(b/156258540): Add proper spacing once all elements are determined.
AddPasswordView();
AddPinView();
AddVerticalSpacing(kVerticalSpacingBetweenPasswordAndPINKeyboard);
// TODO(b/156258540): Add fingerprint icon view and proper spacing.
fingerprint_view_ =
container_->AddChildView(std::make_unique<FingerprintView>());
AddActionButtonsView();
AddVerticalSpacing(kBottomVerticalSpacing);
......
......@@ -34,6 +34,8 @@ class AuthDialogDebugView : public views::View, public views::ButtonListener {
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
private:
class FingerprintView;
// Add a view for dialog title.
void AddTitleView();
......@@ -84,6 +86,8 @@ class AuthDialogDebugView : public views::View, public views::ButtonListener {
// PIN pad view.
LoginPinView* pin_view_ = nullptr;
FingerprintView* fingerprint_view_ = nullptr;
// Show other authentication mechanisms if more than one.
views::LabelButton* more_options_button_ = nullptr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment