Commit 1a7de568 authored by Sarah Hu's avatar Sarah Hu Committed by Commit Bot

Reland: cros: Add fingerprint UI to views lock screen

This contains the fix for Msan failures.
This CL adds some basic fingerprint UI to views lock screen to support
fingerprint fishfood.
The detailed specs are not ready and may be subject to change. So it
may need to be polished in the future for adding animation, adjusting
styles etc.

Current mocks:
https://gallery.googleplex.com/projects/MCHbtQVoQ2HCZdwfnbqy2eSi/files/MCHm5Lyh8lQ6SZ3vjzwd3Uo8wMSJbxAVNpw

TBR=tsepez@chromium.org

Bug: 835357
Change-Id: I5daed01a18b2235e8331c3d48bbfe5b63c491672
Reviewed-on: https://chromium-review.googlesource.com/1047958Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Commit-Queue: Xiaoyin Hu <xiaoyinh@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#557254}
Reviewed-on: https://chromium-review.googlesource.com/1054091
Cr-Commit-Position: refs/heads/master@{#558349}
parent 34882499
......@@ -1233,6 +1233,9 @@ This file contains the strings for ash.
<message name="IDS_ASH_LOGIN_KEYBOARD_SELECTION_SELECT" desc="Label for keyboard selection dropdown">
Set your keyboard
</message>
<message name="IDS_ASH_LOGIN_FINGERPRINT_UNLOCK_MESSAGE" desc="Text shown in the user pod to remind user that fingerprint unlock is supported">
Unlock with fingerprint
</message>
<!-- Multi-profiles intro dialog -->
<message name="IDS_ASH_MULTIPROFILES_INTRO_HEADLINE" desc="Describes which feature multi-profiles intro dialog presents.">
......
......@@ -382,6 +382,13 @@ void LoginScreenController::SetPublicSessionKeyboardLayouts(
}
}
void LoginScreenController::SetFingerprintUnlockState(
const AccountId& account_id,
mojom::FingerprintUnlockState state) {
if (DataDispatcher())
DataDispatcher()->SetFingerprintUnlockState(account_id, state);
}
void LoginScreenController::DoAuthenticateUser(const AccountId& account_id,
const std::string& password,
bool authenticated_by_pin,
......
......@@ -123,6 +123,8 @@ class ASH_EXPORT LoginScreenController : public mojom::LoginScreen {
const AccountId& account_id,
const std::string& locale,
std::vector<mojom::InputMethodItemPtr> keyboard_layouts) override;
void SetFingerprintUnlockState(const AccountId& account_id,
mojom::FingerprintUnlockState state) override;
// Flushes the mojo pipes - to be used in tests.
void FlushForTesting();
......
......@@ -392,8 +392,13 @@ void LockContentsView::OnUsersChanged(
}
// Build user state list.
for (const mojom::LoginUserInfoPtr& user : users)
users_.push_back(UserState{user->basic_user_info->account_id});
for (const mojom::LoginUserInfoPtr& user : users) {
UserState state(user->basic_user_info->account_id);
state.fingerprint_state = user->allow_fingerprint_unlock
? mojom::FingerprintUnlockState::AVAILABLE
: mojom::FingerprintUnlockState::UNAVAILABLE;
users_.push_back(std::move(state));
}
auto box_layout =
std::make_unique<views::BoxLayout>(views::BoxLayout::kHorizontal);
......@@ -643,6 +648,23 @@ void LockContentsView::OnDetachableBasePairingStatusChanged(
GetWidget()->GetFocusManager()->ClearFocus();
}
void LockContentsView::OnFingerprintUnlockStateChanged(
const AccountId& account_id,
mojom::FingerprintUnlockState state) {
UserState* user_state = FindStateForUser(account_id);
if (!user_state)
return;
user_state->fingerprint_state = state;
LoginBigUserView* big_view =
TryToFindBigUser(account_id, true /*require_auth_active*/);
if (!big_view || !big_view->auth_user())
return;
big_view->auth_user()->SetFingerprintState(user_state->fingerprint_state);
LayoutAuth(big_view, nullptr /*opt_to_hide*/, true /*animate*/);
}
void LockContentsView::SetAvatarForUser(const AccountId& account_id,
const mojom::UserAvatarPtr& avatar) {
auto replace = [&](const ash::mojom::LoginUserInfoPtr& user) {
......@@ -1207,10 +1229,17 @@ void LockContentsView::UpdateAuthForAuthUser(LoginAuthUserView* opt_to_update,
GetKeyboardController();
const bool keyboard_visible =
keyboard_controller ? keyboard_controller->keyboard_visible() : false;
if (state->show_pin && !keyboard_visible)
if (state->show_pin && !keyboard_visible &&
state->fingerprint_state ==
mojom::FingerprintUnlockState::UNAVAILABLE) {
to_update_auth |= LoginAuthUserView::AUTH_PIN;
}
if (state->enable_tap_auth)
to_update_auth |= LoginAuthUserView::AUTH_TAP;
if (state->fingerprint_state !=
mojom::FingerprintUnlockState::UNAVAILABLE) {
to_update_auth |= LoginAuthUserView::AUTH_FINGERPRINT;
}
}
opt_to_update->SetAuthMethods(to_update_auth);
}
......
......@@ -140,6 +140,9 @@ class ASH_EXPORT LockContentsView : public NonAccessibleView,
const std::vector<mojom::InputMethodItemPtr>& keyboard_layouts) override;
void OnDetachableBasePairingStatusChanged(
DetachableBasePairingStatus pairing_status) override;
void OnFingerprintUnlockStateChanged(
const AccountId& account_id,
mojom::FingerprintUnlockState state) override;
// SystemTrayFocusObserver:
void OnFocusLeavingSystemTray(bool reverse) override;
......@@ -174,6 +177,7 @@ class ASH_EXPORT LockContentsView : public NonAccessibleView,
bool enable_tap_auth = false;
bool force_online_sign_in = false;
mojom::EasyUnlockIconOptionsPtr easy_unlock_state;
mojom::FingerprintUnlockState fingerprint_state;
private:
DISALLOW_COPY_AND_ASSIGN(UserState);
......
......@@ -56,6 +56,17 @@ constexpr int kDistanceFromTopOfBigUserViewToUserIconDp = 54;
// The color of the online sign-in message text.
constexpr SkColor kOnlineSignInMessageColor = SkColorSetRGB(0xE6, 0x7C, 0x73);
constexpr SkColor kFingerprintIconViewBorderColor =
SkColorSetARGB(0x57, 0xFF, 0xFF, 0xFF);
constexpr SkColor kFingerprintIconAndTextColor =
SkColorSetARGB(0x8A, 0xFF, 0xFF, 0xFF);
constexpr int kFingerprintIconViewBorderThickness = 1;
constexpr int kFingerprintIconViewSizeDp = 64;
constexpr int kFingerprintIconSizeDp = 32;
constexpr int kResetToDefaultIconColorDelayMs = 500;
constexpr int kFingerprintIconTopSpacing = 50;
constexpr int kSpacingBetweenFingerprintIconAndLabel = 20;
// Returns an observer that will hide |view| when it fires. The observer will
// delete itself after firing. Make sure to call |observer->SetReady()| after
// attaching it.
......@@ -74,8 +85,113 @@ ui::CallbackLayerAnimationObserver* BuildObserverToHideView(views::View* view) {
view));
}
// A view which has a round border and a fingerprint icon at the center.
class FingerprintIconView : public views::View {
public:
FingerprintIconView() {
SetPreferredSize(
gfx::Size(kFingerprintIconViewSizeDp, kFingerprintIconViewSizeDp));
icon_ = new views::ImageView;
icon_->SetVerticalAlignment(views::ImageView::CENTER);
icon_->SetPreferredSize(
gfx::Size(kFingerprintIconSizeDp, kFingerprintIconSizeDp));
icon_->SetImage(gfx::CreateVectorIcon(kLockScreenFingerprintIcon,
kFingerprintIconSizeDp, color_));
AddChildView(icon_);
SetBorder(views::CreateRoundedRectBorder(
kFingerprintIconViewBorderThickness, kFingerprintIconViewSizeDp / 2,
kFingerprintIconViewBorderColor));
}
~FingerprintIconView() override = default;
// Set color of the icon. The color will be reset to
// kFingerprintIconAndTextColor after a short period if different.
void SetIconColor(SkColor color) {
if (color_ == color)
return;
color_ = color;
reset_icon_color_.Stop();
icon_->SetImage(gfx::CreateVectorIcon(kLockScreenFingerprintIcon,
kFingerprintIconSizeDp, color));
if (color_ != kFingerprintIconAndTextColor) {
reset_icon_color_.Start(
FROM_HERE,
base::TimeDelta::FromMilliseconds(kResetToDefaultIconColorDelayMs),
base::BindRepeating(&FingerprintIconView::SetIconColor,
base::Unretained(this),
kFingerprintIconAndTextColor));
}
}
void Layout() override {
gfx::Rect icon_bounds = GetContentsBounds();
icon_bounds.ClampToCenteredSize(
gfx::Size(kFingerprintIconSizeDp, kFingerprintIconSizeDp));
icon_->SetBoundsRect(icon_bounds);
}
private:
views::ImageView* icon_ = nullptr;
base::OneShotTimer reset_icon_color_;
SkColor color_ = kFingerprintIconAndTextColor;
DISALLOW_COPY_AND_ASSIGN(FingerprintIconView);
};
} // namespace
// Consists of fingerprint icon view and a label.
class LoginAuthUserView::FingerprintView : public views::View {
public:
FingerprintView() {
SetPaintToLayer();
layer()->SetFillsBoundsOpaquely(false);
icon_view_ = new FingerprintIconView();
AddChildView(icon_view_);
label_ = new views::Label(
l10n_util::GetStringUTF16(IDS_ASH_LOGIN_FINGERPRINT_UNLOCK_MESSAGE));
label_->SetSubpixelRenderingEnabled(false);
label_->SetAutoColorReadabilityEnabled(false);
label_->SetEnabledColor(kFingerprintIconAndTextColor);
AddChildView(label_);
}
void SetIconColor(SkColor color) { icon_view_->SetIconColor(color); }
void Layout() override {
gfx::Rect bounds = GetContentsBounds();
icon_view_->SizeToPreferredSize();
icon_view_->SetPosition(
gfx::Point((bounds.width() - icon_view_->width()) / 2,
bounds.y() + kFingerprintIconTopSpacing));
label_->SizeToPreferredSize();
label_->SetPosition(
gfx::Point(bounds.x(), icon_view_->bounds().bottom() +
kSpacingBetweenFingerprintIconAndLabel));
}
~FingerprintView() override = default;
gfx::Size CalculatePreferredSize() const override {
int preferred_height = label_->GetPreferredSize().height() +
icon_view_->GetPreferredSize().height() +
kFingerprintIconTopSpacing +
kSpacingBetweenFingerprintIconAndLabel;
int preferred_width = std::max(label_->GetPreferredSize().width(),
icon_view_->GetPreferredSize().width());
return gfx::Size(preferred_width, preferred_height);
}
private:
FingerprintIconView* icon_view_ = nullptr;
views::Label* label_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(FingerprintView);
};
struct LoginAuthUserView::AnimationState {
int non_pin_y_start_in_screen = 0;
gfx::Point pin_start_in_screen;
......@@ -165,6 +281,8 @@ LoginAuthUserView::LoginAuthUserView(const mojom::LoginUserInfoPtr& user,
this, base::UTF8ToUTF16(user->basic_user_info->display_name));
DecorateOnlineSignInMessage();
fingerprint_view_ = new FingerprintView();
SetPaintToLayer(ui::LayerType::LAYER_NOT_DRAWN);
// Build layout.
......@@ -176,10 +294,13 @@ LoginAuthUserView::LoginAuthUserView(const mojom::LoginUserInfoPtr& user,
login_layout_util::WrapViewForPreferredSize(user_view_);
auto* wrapped_pin_view =
login_layout_util::WrapViewForPreferredSize(pin_view_);
auto* wrapped_fingerprint_view =
login_layout_util::WrapViewForPreferredSize(fingerprint_view_);
// Add views in tabbing order; they are rendered in a different order below.
AddChildView(wrapped_password_view);
AddChildView(wrapped_message_view);
AddChildView(wrapped_fingerprint_view);
AddChildView(wrapped_pin_view);
AddChildView(wrapped_user_view);
......@@ -206,6 +327,7 @@ LoginAuthUserView::LoginAuthUserView(const mojom::LoginUserInfoPtr& user,
add_view(wrapped_password_view);
add_view(wrapped_message_view);
add_padding(kDistanceBetweenPasswordFieldAndPinKeyboard);
add_view(wrapped_fingerprint_view);
add_view(wrapped_pin_view);
add_padding(kDistanceFromPinKeyboardToBigUserViewBottom);
......@@ -224,6 +346,7 @@ void LoginAuthUserView::SetAuthMethods(uint32_t auth_methods) {
bool has_pin = HasAuthMethod(AUTH_PIN);
bool has_tap = HasAuthMethod(AUTH_TAP);
bool force_online_sign_in = HasAuthMethod(AUTH_ONLINE_SIGN_IN);
bool has_fingerprint = HasAuthMethod(AUTH_FINGERPRINT);
online_sign_in_message_->SetVisible(force_online_sign_in);
......@@ -236,6 +359,7 @@ void LoginAuthUserView::SetAuthMethods(uint32_t auth_methods) {
password_view_->RequestFocus();
pin_view_->SetVisible(has_pin);
fingerprint_view_->SetVisible(has_fingerprint);
// Note: if both |has_tap| and |has_pin| are true, prefer tap placeholder.
if (has_tap) {
......@@ -368,6 +492,20 @@ void LoginAuthUserView::UpdateForUser(const mojom::LoginUserInfoPtr& user) {
base::UTF8ToUTF16(user->basic_user_info->display_name));
}
void LoginAuthUserView::SetFingerprintState(
mojom::FingerprintUnlockState state) {
fingerprint_view_->SetVisible(state !=
mojom::FingerprintUnlockState::UNAVAILABLE);
SkColor color = kFingerprintIconAndTextColor;
if (state == mojom::FingerprintUnlockState::AUTH_SUCCESS) {
color = SK_ColorBLUE;
} else if (state == mojom::FingerprintUnlockState::AUTH_FAILED) {
color = SK_ColorRED;
}
fingerprint_view_->SetIconColor(color);
}
const mojom::LoginUserInfoPtr& LoginAuthUserView::current_user() const {
return user_view_->current_user();
}
......
......@@ -82,6 +82,7 @@ class ASH_EXPORT LoginAuthUserView : public NonAccessibleView,
AUTH_PIN = 1 << 1, // Display PIN keyboard.
AUTH_TAP = 1 << 2, // Tap to unlock.
AUTH_ONLINE_SIGN_IN = 1 << 3, // Force online sign-in.
AUTH_FINGERPRINT = 1 << 4, // Use fingerprint to unlock.
};
LoginAuthUserView(const mojom::LoginUserInfoPtr& user,
......@@ -107,6 +108,8 @@ class ASH_EXPORT LoginAuthUserView : public NonAccessibleView,
// Update the displayed name, icon, etc to that of |user|.
void UpdateForUser(const mojom::LoginUserInfoPtr& user);
void SetFingerprintState(mojom::FingerprintUnlockState state);
const mojom::LoginUserInfoPtr& current_user() const;
LoginPasswordView* password_view() { return password_view_; }
......@@ -121,6 +124,7 @@ class ASH_EXPORT LoginAuthUserView : public NonAccessibleView,
private:
struct AnimationState;
class FingerprintView;
// Called when the user submits an auth method. Runs mojo call.
void OnAuthSubmit(const base::string16& password);
......@@ -147,6 +151,7 @@ class ASH_EXPORT LoginAuthUserView : public NonAccessibleView,
LoginPasswordView* password_view_ = nullptr;
LoginPinView* pin_view_ = nullptr;
views::LabelButton* online_sign_in_message_ = nullptr;
FingerprintView* fingerprint_view_ = nullptr;
const OnAuthCallback on_auth_;
const LoginUserView::OnTap on_tap_;
......
......@@ -52,6 +52,10 @@ void LoginDataDispatcher::Observer::OnPublicSessionKeyboardLayoutsChanged(
void LoginDataDispatcher::Observer::OnDetachableBasePairingStatusChanged(
DetachableBasePairingStatus pairing_status) {}
void LoginDataDispatcher::Observer::OnFingerprintUnlockStateChanged(
const AccountId& account_id,
mojom::FingerprintUnlockState state) {}
LoginDataDispatcher::LoginDataDispatcher() = default;
LoginDataDispatcher::~LoginDataDispatcher() = default;
......@@ -143,4 +147,11 @@ void LoginDataDispatcher::SetDetachableBasePairingStatus(
observer.OnDetachableBasePairingStatusChanged(pairing_status);
}
void LoginDataDispatcher::SetFingerprintUnlockState(
const AccountId& account_id,
mojom::FingerprintUnlockState state) {
for (auto& observer : observers_)
observer.OnFingerprintUnlockStateChanged(account_id, state);
}
} // namespace ash
......@@ -96,6 +96,11 @@ class ASH_EXPORT LoginDataDispatcher {
// base is attached or detached.
virtual void OnDetachableBasePairingStatusChanged(
DetachableBasePairingStatus pairing_status);
// Called when fingerprint unlock state changes for user with |account_id|.
virtual void OnFingerprintUnlockStateChanged(
const AccountId& account_id,
mojom::FingerprintUnlockState state);
};
LoginDataDispatcher();
......@@ -126,6 +131,8 @@ class ASH_EXPORT LoginDataDispatcher {
const std::vector<mojom::InputMethodItemPtr>& keyboard_layouts);
void SetDetachableBasePairingStatus(
DetachableBasePairingStatus pairing_status);
void SetFingerprintUnlockState(const AccountId& account_id,
mojom::FingerprintUnlockState state);
private:
base::ObserverList<Observer> observers_;
......
......@@ -112,6 +112,10 @@ interface LoginScreen {
SetPublicSessionKeyboardLayouts(signin.mojom.AccountId account_id,
string locale,
array<InputMethodItem> keyboard_layouts);
// Set the fingerprint unlock state for user with |account_id|.
SetFingerprintUnlockState(signin.mojom.AccountId account_id,
FingerprintUnlockState state);
};
// Allows ash lock screen to control a client (e.g. Chrome browser). Requests
......
......@@ -38,6 +38,18 @@ enum EasyUnlockIconId {
SPINNER,
};
// Fingerprint unlock state in the views lock screen.
enum FingerprintUnlockState {
// Fingerprint unlock is not available.
UNAVAILABLE,
// Fingerprint unlock is available.
AVAILABLE,
// The unlock attempt is successful, the fingerprint is matched.
AUTH_SUCCESS,
// The unlock attempt is unsuccessful, the fingerprint is not recognized.
AUTH_FAILED,
};
// Information about the custom icon in the user pod.
struct EasyUnlockIconOptions {
// Icon that should be displayed.
......
......@@ -22,6 +22,7 @@ aggregate_vector_icons("ash_vector_icons") {
"lock_screen_backspace.icon",
"lock_screen_caps_lock.icon",
"lock_screen_dropdown.icon",
"lock_screen_fingerprint.icon",
"login_screen_button_dropdown.icon",
"login_screen_menu_dropdown.icon",
"login_screen_enterprise.icon",
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
CANVAS_DIMENSIONS, 54,
MOVE_TO, 40.07f, 10.06f,
CUBIC_TO, 39.89f, 10.06f, 39.72f, 10.01f, 39.56f, 9.93f,
CUBIC_TO, 35.25f, 7.71f, 31.5f, 6.75f, 27.02f, 6.75f,
CUBIC_TO, 22.56f, 6.75f, 18.35f, 7.82f, 14.49f, 9.92f,
CUBIC_TO, 13.94f, 10.22f, 13.26f, 10.02f, 12.96f, 9.47f,
CUBIC_TO, 12.67f, 8.92f, 12.86f, 8.25f, 13.41f, 7.94f,
CUBIC_TO, 17.61f, 5.66f, 22.19f, 4.5f, 27.02f, 4.5f,
CUBIC_TO, 31.82f, 4.5f, 36, 5.56f, 40.59f, 7.93f,
CUBIC_TO, 41.14f, 8.21f, 41.36f, 8.9f, 41.07f, 9.45f,
CUBIC_TO, 40.87f, 9.83f, 40.48f, 10.06f, 40.07f, 10.06f,
LINE_TO, 40.07f, 10.06f,
CLOSE,
MOVE_TO, 7.88f, 21.87f,
CUBIC_TO, 7.65f, 21.87f, 7.43f, 21.8f, 7.22f, 21.67f,
CUBIC_TO, 6.72f, 21.31f, 6.59f, 20.61f, 6.95f, 20.1f,
CUBIC_TO, 9.18f, 16.95f, 12.03f, 14.48f, 15.4f, 12.74f,
CUBIC_TO, 22.48f, 9.08f, 31.52f, 9.07f, 38.61f, 12.71f,
CUBIC_TO, 41.97f, 14.45f, 44.81f, 16.9f, 47.05f, 20.02f,
CUBIC_TO, 47.41f, 20.53f, 47.3f, 21.23f, 46.79f, 21.59f,
CUBIC_TO, 46.28f, 21.95f, 45.57f, 21.84f, 45.21f, 21.33f,
CUBIC_TO, 43.19f, 18.5f, 40.62f, 16.27f, 37.59f, 14.72f,
CUBIC_TO, 31.13f, 11.4f, 22.88f, 11.41f, 16.44f, 14.74f,
CUBIC_TO, 13.39f, 16.31f, 10.81f, 18.55f, 8.8f, 21.41f,
CUBIC_TO, 8.57f, 21.71f, 8.22f, 21.87f, 7.88f, 21.87f,
LINE_TO, 7.88f, 21.87f,
CLOSE,
MOVE_TO, 21.95f, 49.02f,
CUBIC_TO, 21.66f, 49.02f, 21.38f, 48.9f, 21.15f, 48.68f,
CUBIC_TO, 19.2f, 46.71f, 18.15f, 45.46f, 16.63f, 42.75f,
CUBIC_TO, 15.08f, 39.98f, 14.25f, 36.6f, 14.25f, 32.97f,
CUBIC_TO, 14.25f, 26.29f, 19.97f, 20.85f, 27, 20.85f,
CUBIC_TO, 34.03f, 20.85f, 39.75f, 26.28f, 39.75f, 32.97f,
CUBIC_TO, 39.75f, 33.59f, 39.24f, 34.1f, 38.62f, 34.1f,
CUBIC_TO, 38, 34.1f, 37.5f, 33.59f, 37.5f, 32.97f,
CUBIC_TO, 37.5f, 27.53f, 32.79f, 23.1f, 27, 23.1f,
CUBIC_TO, 21.22f, 23.1f, 16.5f, 27.53f, 16.5f, 32.97f,
CUBIC_TO, 16.5f, 36.21f, 17.22f, 39.21f, 18.59f, 41.65f,
CUBIC_TO, 20.04f, 44.24f, 21, 45.35f, 22.74f, 47.09f,
CUBIC_TO, 23.18f, 47.53f, 23.18f, 48.25f, 22.73f, 48.68f,
CUBIC_TO, 22.52f, 48.92f, 22.23f, 49.02f, 21.95f, 49.02f,
LINE_TO, 21.95f, 49.02f,
CLOSE,
MOVE_TO, 38.07f, 44.85f,
CUBIC_TO, 35.39f, 44.85f, 33.04f, 44.18f, 31.1f, 42.86f,
CUBIC_TO, 27.75f, 40.59f, 25.75f, 36.9f, 25.75f, 32.99f,
CUBIC_TO, 25.75f, 32.37f, 26.26f, 31.86f, 26.88f, 31.86f,
CUBIC_TO, 27.5f, 31.86f, 28, 32.37f, 28, 32.99f,
CUBIC_TO, 28, 36.15f, 29.63f, 39.14f, 32.37f, 41,
CUBIC_TO, 33.95f, 42.08f, 35.82f, 42.6f, 38.07f, 42.6f,
CUBIC_TO, 38.61f, 42.6f, 39.52f, 42.55f, 40.42f, 42.39f,
CUBIC_TO, 41.03f, 42.28f, 41.61f, 42.69f, 41.73f, 43.3f,
CUBIC_TO, 41.84f, 43.91f, 41.42f, 44.49f, 40.82f, 44.61f,
CUBIC_TO, 39.5f, 44.84f, 38.39f, 44.85f, 38.07f, 44.85f,
LINE_TO, 38.07f, 44.85f,
CLOSE,
MOVE_TO, 33.54f, 49.5f,
CUBIC_TO, 33.44f, 49.5f, 33.33f, 49.49f, 33.24f, 49.46f,
CUBIC_TO, 29.66f, 48.48f, 27.32f, 47.15f, 24.89f, 44.73f,
CUBIC_TO, 21.75f, 41.6f, 20.01f, 37.43f, 20.01f, 32.99f,
CUBIC_TO, 20.01f, 29.33f, 23.12f, 26.36f, 26.94f, 26.36f,
CUBIC_TO, 30.77f, 26.36f, 33.87f, 29.33f, 33.87f, 32.99f,
CUBIC_TO, 33.87f, 35.39f, 35.98f, 37.36f, 38.55f, 37.36f,
CUBIC_TO, 41.13f, 37.36f, 43.23f, 35.4f, 43.23f, 32.99f,
CUBIC_TO, 43.23f, 24.5f, 35.92f, 17.61f, 26.93f, 17.61f,
CUBIC_TO, 20.53f, 17.61f, 14.69f, 21.16f, 12.06f, 26.67f,
CUBIC_TO, 11.18f, 28.5f, 10.74f, 30.62f, 10.74f, 32.99f,
CUBIC_TO, 10.74f, 34.74f, 10.9f, 37.51f, 12.24f, 41.1f,
CUBIC_TO, 12.45f, 41.68f, 12.16f, 42.32f, 11.58f, 42.55f,
CUBIC_TO, 10.99f, 42.76f, 10.35f, 42.47f, 10.13f, 41.88f,
CUBIC_TO, 9.02f, 38.92f, 8.48f, 36.02f, 8.48f, 32.99f,
CUBIC_TO, 8.48f, 30.29f, 9, 27.83f, 10.02f, 25.71f,
CUBIC_TO, 13.03f, 19.43f, 19.67f, 15.37f, 26.92f, 15.37f,
CUBIC_TO, 37.15f, 15.37f, 45.47f, 23.28f, 45.47f, 33,
CUBIC_TO, 45.47f, 36.65f, 42.36f, 39.62f, 38.54f, 39.62f,
CUBIC_TO, 34.73f, 39.62f, 31.61f, 36.65f, 31.61f, 33,
CUBIC_TO, 31.61f, 30.59f, 29.51f, 28.62f, 26.93f, 28.62f,
CUBIC_TO, 24.36f, 28.62f, 22.25f, 30.58f, 22.25f, 33,
CUBIC_TO, 22.25f, 36.83f, 23.75f, 40.44f, 26.46f, 43.14f,
CUBIC_TO, 28.59f, 45.26f, 30.66f, 46.43f, 33.83f, 47.3f,
CUBIC_TO, 34.42f, 47.46f, 34.78f, 48.08f, 34.62f, 48.68f,
CUBIC_TO, 34.48f, 49.17f, 34.03f, 49.5f, 33.54f, 49.5f,
LINE_TO, 33.54f, 49.5f,
CLOSE
CANVAS_DIMENSIONS, 27,
MOVE_TO, 20.04f, 5.03f,
CUBIC_TO, 19.95f, 5.03f, 19.86f, 5.01f, 19.78f, 4.97f,
CUBIC_TO, 17.62f, 3.85f, 15.75f, 3.38f, 13.51f, 3.38f,
CUBIC_TO, 11.28f, 3.38f, 9.17f, 3.91f, 7.25f, 4.96f,
CUBIC_TO, 6.97f, 5.11f, 6.63f, 5.01f, 6.48f, 4.74f,
CUBIC_TO, 6.33f, 4.46f, 6.43f, 4.12f, 6.71f, 3.97f,
CUBIC_TO, 8.8f, 2.83f, 11.09f, 2.25f, 13.51f, 2.25f,
CUBIC_TO, 15.91f, 2.25f, 18, 2.78f, 20.3f, 3.97f,
CUBIC_TO, 20.57f, 4.11f, 20.68f, 4.45f, 20.54f, 4.72f,
CUBIC_TO, 20.44f, 4.92f, 20.24f, 5.03f, 20.04f, 5.03f,
LINE_TO, 20.04f, 5.03f,
CLOSE,
MOVE_TO, 3.94f, 10.94f,
CUBIC_TO, 3.83f, 10.94f, 3.71f, 10.9f, 3.61f, 10.83f,
CUBIC_TO, 3.36f, 10.65f, 3.3f, 10.31f, 3.48f, 10.05f,
CUBIC_TO, 4.59f, 8.48f, 6.01f, 7.24f, 7.7f, 6.37f,
CUBIC_TO, 11.24f, 4.54f, 15.76f, 4.53f, 19.31f, 6.36f,
CUBIC_TO, 20.99f, 7.22f, 22.4f, 8.45f, 23.52f, 10.01f,
CUBIC_TO, 23.7f, 10.27f, 23.65f, 10.61f, 23.39f, 10.79f,
CUBIC_TO, 23.14f, 10.97f, 22.79f, 10.92f, 22.61f, 10.67f,
CUBIC_TO, 21.59f, 9.25f, 20.31f, 8.13f, 18.79f, 7.36f,
CUBIC_TO, 15.56f, 5.7f, 11.44f, 5.7f, 8.22f, 7.37f,
CUBIC_TO, 6.69f, 8.16f, 5.41f, 9.28f, 4.4f, 10.7f,
CUBIC_TO, 4.29f, 10.86f, 4.11f, 10.94f, 3.94f, 10.94f,
LINE_TO, 3.94f, 10.94f,
CLOSE,
MOVE_TO, 10.97f, 24.51f,
CUBIC_TO, 10.83f, 24.51f, 10.69f, 24.45f, 10.58f, 24.34f,
CUBIC_TO, 9.6f, 23.36f, 9.07f, 22.73f, 8.31f, 21.38f,
CUBIC_TO, 7.54f, 19.99f, 7.13f, 18.3f, 7.13f, 16.49f,
CUBIC_TO, 7.13f, 13.15f, 9.98f, 10.42f, 13.5f, 10.42f,
CUBIC_TO, 17.02f, 10.42f, 19.87f, 13.14f, 19.87f, 16.49f,
CUBIC_TO, 19.87f, 16.8f, 19.62f, 17.05f, 19.31f, 17.05f,
CUBIC_TO, 19, 17.05f, 18.75f, 16.8f, 18.75f, 16.49f,
CUBIC_TO, 18.75f, 13.76f, 16.4f, 11.55f, 13.5f, 11.55f,
CUBIC_TO, 10.61f, 11.55f, 8.25f, 13.76f, 8.25f, 16.49f,
CUBIC_TO, 8.25f, 18.11f, 8.61f, 19.6f, 9.29f, 20.82f,
CUBIC_TO, 10.02f, 22.12f, 10.5f, 22.67f, 11.37f, 23.55f,
CUBIC_TO, 11.59f, 23.77f, 11.59f, 24.13f, 11.36f, 24.34f,
CUBIC_TO, 11.26f, 24.46f, 11.12f, 24.51f, 10.97f, 24.51f,
LINE_TO, 10.97f, 24.51f,
CLOSE,
MOVE_TO, 19.04f, 22.43f,
CUBIC_TO, 17.7f, 22.43f, 16.52f, 22.09f, 15.55f, 21.43f,
CUBIC_TO, 13.88f, 20.3f, 12.88f, 18.45f, 12.88f, 16.49f,
CUBIC_TO, 12.88f, 16.18f, 13.13f, 15.93f, 13.44f, 15.93f,
CUBIC_TO, 13.75f, 15.93f, 14, 16.18f, 14, 16.49f,
CUBIC_TO, 14, 18.07f, 14.82f, 19.57f, 16.18f, 20.5f,
CUBIC_TO, 16.98f, 21.04f, 17.91f, 21.3f, 19.04f, 21.3f,
CUBIC_TO, 19.31f, 21.3f, 19.76f, 21.27f, 20.21f, 21.2f,
CUBIC_TO, 20.51f, 21.14f, 20.81f, 21.35f, 20.86f, 21.65f,
CUBIC_TO, 20.92f, 21.95f, 20.71f, 22.25f, 20.41f, 22.3f,
CUBIC_TO, 19.75f, 22.42f, 19.19f, 22.43f, 19.04f, 22.43f,
LINE_TO, 19.04f, 22.43f,
CLOSE,
MOVE_TO, 16.77f, 24.75f,
CUBIC_TO, 16.72f, 24.75f, 16.67f, 24.74f, 16.62f, 24.73f,
CUBIC_TO, 14.83f, 24.24f, 13.66f, 23.57f, 12.44f, 22.37f,
CUBIC_TO, 10.87f, 20.8f, 10.01f, 18.71f, 10.01f, 16.49f,
CUBIC_TO, 10.01f, 14.66f, 11.56f, 13.18f, 13.47f, 13.18f,
CUBIC_TO, 15.38f, 13.18f, 16.94f, 14.66f, 16.94f, 16.49f,
CUBIC_TO, 16.94f, 17.7f, 17.99f, 18.68f, 19.28f, 18.68f,
CUBIC_TO, 20.57f, 18.68f, 21.62f, 17.7f, 21.62f, 16.49f,
CUBIC_TO, 21.62f, 12.25f, 17.96f, 8.8f, 13.47f, 8.8f,
CUBIC_TO, 10.27f, 8.8f, 7.35f, 10.58f, 6.03f, 13.34f,
CUBIC_TO, 5.59f, 14.25f, 5.37f, 15.31f, 5.37f, 16.49f,
CUBIC_TO, 5.37f, 17.37f, 5.45f, 18.75f, 6.12f, 20.55f,
CUBIC_TO, 6.23f, 20.84f, 6.08f, 21.16f, 5.79f, 21.27f,
CUBIC_TO, 5.5f, 21.38f, 5.18f, 21.23f, 5.06f, 20.94f,
CUBIC_TO, 4.51f, 19.46f, 4.24f, 18.01f, 4.24f, 16.49f,
CUBIC_TO, 4.24f, 15.14f, 4.5f, 13.92f, 5.01f, 12.85f,
CUBIC_TO, 6.51f, 9.71f, 9.83f, 7.68f, 13.46f, 7.68f,
CUBIC_TO, 18.57f, 7.68f, 22.74f, 11.64f, 22.74f, 16.5f,
CUBIC_TO, 22.74f, 18.33f, 21.18f, 19.81f, 19.27f, 19.81f,
CUBIC_TO, 17.36f, 19.81f, 15.81f, 18.33f, 15.81f, 16.5f,
CUBIC_TO, 15.81f, 15.29f, 14.75f, 14.31f, 13.47f, 14.31f,
CUBIC_TO, 12.18f, 14.31f, 11.13f, 15.29f, 11.13f, 16.5f,
CUBIC_TO, 11.13f, 18.42f, 11.87f, 20.22f, 13.23f, 21.57f,
CUBIC_TO, 14.29f, 22.63f, 15.33f, 23.21f, 16.91f, 23.65f,
CUBIC_TO, 17.21f, 23.73f, 17.39f, 24.04f, 17.31f, 24.34f,
CUBIC_TO, 17.24f, 24.59f, 17.02f, 24.75f, 16.77f, 24.75f,
LINE_TO, 16.77f, 24.75f,
CLOSE
......@@ -8,6 +8,7 @@
#include <string>
#include <utility>
#include "ash/public/interfaces/login_user_info.mojom.h"
#include "base/bind.h"
#include "base/i18n/time_formatting.h"
#include "base/metrics/histogram_macros.h"
......@@ -39,6 +40,21 @@ namespace chromeos {
namespace {
constexpr char kLockDisplay[] = "lock";
ash::mojom::FingerprintUnlockState ConvertFromFingerprintState(
ScreenLocker::FingerprintState state) {
switch (state) {
case ScreenLocker::FingerprintState::kRemoved:
case ScreenLocker::FingerprintState::kHidden:
case ScreenLocker::FingerprintState::kDefault:
return ash::mojom::FingerprintUnlockState::UNAVAILABLE;
case ScreenLocker::FingerprintState::kSignin:
return ash::mojom::FingerprintUnlockState::AUTH_SUCCESS;
case ScreenLocker::FingerprintState::kFailed:
return ash::mojom::FingerprintUnlockState::AUTH_FAILED;
}
}
} // namespace
ViewsScreenLocker::ViewsScreenLocker(ScreenLocker* screen_locker)
......@@ -150,7 +166,8 @@ void ViewsScreenLocker::OnAshLockAnimationFinished() {
void ViewsScreenLocker::SetFingerprintState(
const AccountId& account_id,
ScreenLocker::FingerprintState state) {
NOTIMPLEMENTED();
LoginScreenClient::Get()->login_screen()->SetFingerprintUnlockState(
account_id, ConvertFromFingerprintState(state));
}
content::WebContents* ViewsScreenLocker::GetWebContents() {
......
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