blob: 0e7af988679cd02ef1627e613eed3ee8411f06bf [file] [log] [blame]
// Copyright 2019 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.
#include "ash/system/unified/unified_managed_device_view.h"
#include "ash/resources/vector_icons/vector_icons.h"
#include "ash/session/session_controller_impl.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/style/ash_color_provider.h"
#include "ash/system/enterprise/enterprise_domain_observer.h"
#include "ash/system/model/enterprise_domain_model.h"
#include "ash/system/model/system_tray_model.h"
#include "ash/system/supervised/supervised_icon_string.h"
#include "ash/system/tray/tray_constants.h"
#include "ash/system/tray/tray_utils.h"
#include "base/strings/utf_string_conversions.h"
#include "chromeos/strings/grit/chromeos_strings.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/views/controls/image_view.h"
#include "ui/views/controls/label.h"
#include "ui/views/layout/box_layout.h"
namespace ash {
UnifiedManagedDeviceView::UnifiedManagedDeviceView()
: icon_(new views::ImageView), label_(new views::Label) {
auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kHorizontal,
kUnifiedManagedDeviceViewPadding, kUnifiedManagedDeviceSpacing));
layout->set_cross_axis_alignment(
views::BoxLayout::CrossAxisAlignment::kCenter);
icon_->SetPreferredSize(
gfx::Size(kUnifiedSystemInfoHeight, kUnifiedSystemInfoHeight));
AddChildView(icon_);
label_->SetAutoColorReadabilityEnabled(false);
label_->SetSubpixelRenderingEnabled(false);
label_->SetEnabledColor(AshColorProvider::Get()->GetContentLayerColor(
AshColorProvider::ContentLayerType::kTextSecondary,
AshColorProvider::AshColorMode::kDark));
AddChildView(label_);
Shell::Get()->session_controller()->AddObserver(this);
Shell::Get()->system_tray_model()->enterprise_domain()->AddObserver(this);
Update();
}
UnifiedManagedDeviceView::~UnifiedManagedDeviceView() {
Shell::Get()->system_tray_model()->enterprise_domain()->RemoveObserver(this);
Shell::Get()->session_controller()->RemoveObserver(this);
}
void UnifiedManagedDeviceView::OnLoginStatusChanged(LoginStatus status) {
Update();
}
void UnifiedManagedDeviceView::OnEnterpriseDomainChanged() {
Update();
}
const char* UnifiedManagedDeviceView::GetClassName() const {
return "UnifiedManagedDeviceView";
}
void UnifiedManagedDeviceView::Update() {
SessionControllerImpl* session = Shell::Get()->session_controller();
EnterpriseDomainModel* model =
Shell::Get()->system_tray_model()->enterprise_domain();
std::string enterprise_domain_name = model->enterprise_display_domain();
const SkColor icon_color = AshColorProvider::Get()->GetContentLayerColor(
AshColorProvider::ContentLayerType::kIconSecondary,
AshColorProvider::AshColorMode::kDark);
if (session->ShouldDisplayManagedUI() || model->active_directory_managed() ||
!enterprise_domain_name.empty()) {
// Show enterpised managed UI.
icon_->SetImage(gfx::CreateVectorIcon(kSystemTrayManagedIcon, icon_color));
if (!enterprise_domain_name.empty()) {
label_->SetText(l10n_util::GetStringFUTF16(
IDS_ASH_ENTERPRISE_DEVICE_MANAGED_BY,
base::UTF8ToUTF16(enterprise_domain_name)));
} else {
label_->SetText(
l10n_util::GetStringUTF16(IDS_ASH_ENTERPRISE_DEVICE_MANAGED));
}
SetVisible(true);
} else if (session->IsUserSupervised()) {
// Show supervised user UI (locally supervised or Family Link).
icon_->SetImage(gfx::CreateVectorIcon(GetSupervisedUserIcon(), icon_color));
label_->SetText(GetSupervisedUserMessage());
SetVisible(true);
} else {
SetVisible(false);
}
}
} // namespace ash