blob: 822d01ea2fe8430331a1b6e9c0bba52f96f262e0 [file]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/login/ui/auth_panel_debug_view.h"
#include <memory>
#include <string>
#include "ash/accessibility/accessibility_controller.h"
#include "ash/auth/views/auth_container_view.h"
#include "ash/keyboard/ui/keyboard_ui_controller.h"
#include "ash/login/ui/non_accessible_view.h"
#include "ash/strings/grit/ash_strings.h"
#include "base/functional/bind.h"
#include "base/notimplemented.h"
#include "chromeos/ash/components/auth_panel/impl/auth_factor_store.h"
#include "chromeos/ash/components/auth_panel/impl/auth_panel.h"
#include "chromeos/ash/components/auth_panel/impl/auth_panel_event_dispatcher.h"
#include "chromeos/ash/components/auth_panel/impl/factor_auth_view_factory.h"
#include "chromeos/ash/components/osauth/public/auth_hub.h"
#include "chromeos/ash/components/osauth/public/common_types.h"
#include "components/account_id/account_id.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/models/image_model.h"
#include "ui/base/mojom/ui_base_types.mojom-shared.h"
#include "ui/chromeos/resources/grit/ui_chromeos_resources.h"
#include "ui/chromeos/styles/cros_tokens_color_mappings.h"
#include "ui/compositor/layer.h"
#include "ui/views/background.h"
#include "ui/views/controls/label.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/layout/fill_layout.h"
#include "ui/views/layout/flex_layout.h"
#include "ui/views/layout/layout_types.h"
#include "ui/views/vector_icons.h"
namespace ash {
AuthPanelDebugView::AuthPanelDebugView(const AccountId& account_id,
bool use_legacy_authpanel) {
// ModalType::kSystem is used to get a semi-transparent background behind the
// local authentication request view, when it is used directly on a widget.
// The overlay consumes all the inputs from the user, so that they can only
// interact with the local authentication request view while it is visible.
// SetModalType(ui::mojom::ModalType::kSystem);
// SetButtons(static_cast<int>(ui::mojom::DialogButton::kNone));
// Main view contains all other views aligned vertically and centered.
SetLayoutManager(std::make_unique<views::FlexLayout>())
->SetOrientation(views::LayoutOrientation::kVertical)
.SetMainAxisAlignment(views::LayoutAlignment::kCenter)
.SetCrossAxisAlignment(views::LayoutAlignment::kCenter)
.SetCollapseMargins(false);
ui::ColorId background_color_id = cros_tokens::kCrosSysSystemBaseElevated;
SetBackground(views::CreateThemedSolidBackground(background_color_id));
if (use_legacy_authpanel) {
auto* auth_hub = AuthHub::Get();
auto continuation = base::BindOnce(&AuthHub::StartAuthentication,
base::Unretained(auth_hub), account_id,
AuthPurpose::kLogin, this);
auth_hub->EnsureInitialized(std::move(continuation));
} else {
auto* auth_panel = AddChildView(std::make_unique<AuthContainerView>(
AuthFactorSet{AuthInputType::kPassword, AuthInputType::kPin}));
auth_panel->SetBackground(views::CreateThemedRoundedRectBackground(
cros_tokens::kCrosSysSystemBase, /*radius=*/8));
}
}
AuthPanelDebugView::~AuthPanelDebugView() = default;
void AuthPanelDebugView::ChildPreferredSizeChanged(views::View* child) {
if (GetWidget()) {
GetWidget()->CenterWindow(
GetWidget()->GetContentsView()->GetPreferredSize());
}
}
void AuthPanelDebugView::OnEndAuthentication() {
LOG(ERROR) << "AuthPanelDebugView::OnEndAuthentication";
NOTIMPLEMENTED();
}
void AuthPanelDebugView::OnAuthPanelPreferredSizeChanged() {
LOG(ERROR) << "AuthPanelDebugView::OnAuthPanelPreferredSizeChanged";
NOTIMPLEMENTED();
}
void AuthPanelDebugView::OnUserAuthAttemptRejected() {
LOG(ERROR) << "AuthPanelDebugView::OnUserAuthAttemptRejected";
NOTIMPLEMENTED();
}
void AuthPanelDebugView::OnUserAuthAttemptConfirmed(
AuthHubConnector* connector,
raw_ptr<AuthFactorStatusConsumer>& out_consumer) {
LOG(ERROR) << "AuthPanelDebugView::OnUserAuthAttemptConfirmed";
// AddAuthPanel
auto* auth_panel = AddChildView(std::make_unique<AuthPanel>(
std::make_unique<FactorAuthViewFactory>(),
std::make_unique<AuthFactorStoreFactory>(AuthHub::Get()),
std::make_unique<AuthPanelEventDispatcherFactory>(),
base::BindOnce(&AuthPanelDebugView::OnEndAuthentication,
weak_ptr_factory_.GetWeakPtr()),
base::BindRepeating(&AuthPanelDebugView::OnAuthPanelPreferredSizeChanged,
weak_ptr_factory_.GetWeakPtr()),
connector));
auth_panel->SetBackground(views::CreateThemedRoundedRectBackground(
cros_tokens::kCrosSysSystemBase, /*radius=*/8));
LOG(ERROR) << "auth panel visible: " << auth_panel->GetVisible();
LOG(ERROR) << "auth panel visible bounds: "
<< auth_panel->GetVisibleBounds().ToString();
out_consumer = auth_panel;
}
void AuthPanelDebugView::OnAccountNotFound() {
LOG(ERROR) << "AuthPanelDebugView::OnAccountNotFound";
NOTIMPLEMENTED();
}
void AuthPanelDebugView::OnUserAuthAttemptCancelled() {
LOG(ERROR) << "AuthPanelDebugView::OnUserAuthAttemptCancelled";
NOTIMPLEMENTED();
}
void AuthPanelDebugView::OnFactorAttemptFailed(AshAuthFactor factor) {
LOG(ERROR) << "AuthPanelDebugView::OnFactorAttemptFailed";
NOTIMPLEMENTED();
}
void AuthPanelDebugView::OnUserAuthSuccess(AshAuthFactor factor,
const AuthProofToken& token) {
LOG(ERROR) << "AuthPanelDebugView::OnUserAuthSuccess";
NOTIMPLEMENTED();
}
} // namespace ash