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 @@ ...@@ -12,10 +12,12 @@
#include "ash/login/ui/non_accessible_view.h" #include "ash/login/ui/non_accessible_view.h"
#include "ash/login/ui/views_utils.h" #include "ash/login/ui/views_utils.h"
#include "ash/public/cpp/in_session_auth_dialog_controller.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 "ash/strings/grit/ash_strings.h"
#include "base/bind_helpers.h" #include "base/bind_helpers.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/views/background.h" #include "ui/views/background.h"
#include "ui/views/controls/button/md_text_button.h" #include "ui/views/controls/button/md_text_button.h"
#include "ui/views/controls/label.h" #include "ui/views/controls/label.h"
...@@ -31,7 +33,7 @@ enum class ButtonId { ...@@ -31,7 +33,7 @@ enum class ButtonId {
}; };
const char kTitle[] = "Verify it's you"; 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 // If fingerprint option is available, password input field will be hidden
// until the user taps the MoreOptions button. // until the user taps the MoreOptions button.
const char kMoreOptionsButtonText[] = "More options"; const char kMoreOptionsButtonText[] = "More options";
...@@ -47,8 +49,56 @@ const int kButtonSpacing = 8; ...@@ -47,8 +49,56 @@ const int kButtonSpacing = 8;
const int kTitleFontSize = 14; const int kTitleFontSize = 14;
const int kPromptFontSize = 12; const int kPromptFontSize = 12;
constexpr int kFingerprintIconSizeDp = 28;
constexpr int kFingerprintIconTopSpacingDp = 20;
constexpr int kSpacingBetweenFingerprintIconAndLabelDp = 15;
constexpr int kFingerprintViewWidthDp = 204;
} // namespace } // 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() { AuthDialogDebugView::AuthDialogDebugView() {
SetLayoutManager(std::make_unique<views::FillLayout>()); SetLayoutManager(std::make_unique<views::FillLayout>());
container_ = AddChildView(std::make_unique<NonAccessibleView>()); container_ = AddChildView(std::make_unique<NonAccessibleView>());
...@@ -60,17 +110,19 @@ AuthDialogDebugView::AuthDialogDebugView() { ...@@ -60,17 +110,19 @@ AuthDialogDebugView::AuthDialogDebugView() {
main_layout_->set_main_axis_alignment( main_layout_->set_main_axis_alignment(
views::BoxLayout::MainAxisAlignment::kStart); views::BoxLayout::MainAxisAlignment::kStart);
main_layout_->set_cross_axis_alignment( main_layout_->set_cross_axis_alignment(
views::BoxLayout::CrossAxisAlignment::kStart); views::BoxLayout::CrossAxisAlignment::kCenter);
AddVerticalSpacing(kTopVerticalSpacing); AddVerticalSpacing(kTopVerticalSpacing);
AddTitleView(); AddTitleView();
AddVerticalSpacing(kVerticalSpacingBetweenTitleAndPrompt); AddVerticalSpacing(kVerticalSpacingBetweenTitleAndPrompt);
AddPromptView();
// TODO(b/156258540): Add proper spacing once all elements are determined. // TODO(b/156258540): Add proper spacing once all elements are determined.
AddPasswordView(); AddPasswordView();
AddPinView(); AddPinView();
AddVerticalSpacing(kVerticalSpacingBetweenPasswordAndPINKeyboard); AddVerticalSpacing(kVerticalSpacingBetweenPasswordAndPINKeyboard);
// TODO(b/156258540): Add fingerprint icon view and proper spacing.
fingerprint_view_ =
container_->AddChildView(std::make_unique<FingerprintView>());
AddActionButtonsView(); AddActionButtonsView();
AddVerticalSpacing(kBottomVerticalSpacing); AddVerticalSpacing(kBottomVerticalSpacing);
......
...@@ -34,6 +34,8 @@ class AuthDialogDebugView : public views::View, public views::ButtonListener { ...@@ -34,6 +34,8 @@ class AuthDialogDebugView : public views::View, public views::ButtonListener {
void ButtonPressed(views::Button* sender, const ui::Event& event) override; void ButtonPressed(views::Button* sender, const ui::Event& event) override;
private: private:
class FingerprintView;
// Add a view for dialog title. // Add a view for dialog title.
void AddTitleView(); void AddTitleView();
...@@ -84,6 +86,8 @@ class AuthDialogDebugView : public views::View, public views::ButtonListener { ...@@ -84,6 +86,8 @@ class AuthDialogDebugView : public views::View, public views::ButtonListener {
// PIN pad view. // PIN pad view.
LoginPinView* pin_view_ = nullptr; LoginPinView* pin_view_ = nullptr;
FingerprintView* fingerprint_view_ = nullptr;
// Show other authentication mechanisms if more than one. // Show other authentication mechanisms if more than one.
views::LabelButton* more_options_button_ = nullptr; 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