[go: nahoru, domu]

blob: 78ecae045d4df79ffa1ac0615899d02ad41ecdb4 [file] [log] [blame]
// Copyright 2020 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/gesture_education/gesture_education_notification_controller.h"
#include "ash/public/cpp/ash_features.h"
#include "ash/public/cpp/ash_pref_names.h"
#include "ash/public/cpp/notification_utils.h"
#include "ash/public/cpp/shelf_config.h"
#include "ash/public/cpp/system_tray_client.h"
#include "ash/session/session_controller_impl.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/model/system_tray_model.h"
#include "components/prefs/pref_registry_simple.h"
#include "components/prefs/pref_service.h"
#include "components/vector_icons/vector_icons.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/message_center/message_center.h"
#include "ui/message_center/public/cpp/notification.h"
namespace ash {
// static
const char GestureEducationNotificationController::kNotificationId[] =
"chrome://gesture_education";
GestureEducationNotificationController::
GestureEducationNotificationController() {
Shell::Get()->session_controller()->AddObserver(this);
tablet_mode_observation_.Observe(Shell::Get()->tablet_mode_controller());
}
GestureEducationNotificationController::
~GestureEducationNotificationController() {
Shell::Get()->session_controller()->RemoveObserver(this);
tablet_mode_observation_.Reset();
}
void GestureEducationNotificationController::MaybeShowNotification() {
bool is_user_session_blocked =
Shell::Get()->session_controller()->IsUserSessionBlocked();
if (features::IsHideShelfControlsInTabletModeEnabled() &&
TabletModeController::Get()->InTabletMode() && !is_user_session_blocked &&
(active_user_prefs_ && !active_user_prefs_->GetBoolean(
prefs::kGestureEducationNotificationShown)) &&
!ShelfConfig::Get()->ShelfControlsForcedShownForAccessibility()) {
GenerateGestureEducationNotification();
active_user_prefs_->SetBoolean(prefs::kGestureEducationNotificationShown,
true);
}
}
void GestureEducationNotificationController::OnActiveUserPrefServiceChanged(
PrefService* prefs) {
active_user_prefs_ = prefs;
MaybeShowNotification();
}
void GestureEducationNotificationController::OnSessionStateChanged(
session_manager::SessionState state) {
MaybeShowNotification();
}
void GestureEducationNotificationController::OnTabletModeStarted() {
MaybeShowNotification();
}
void GestureEducationNotificationController::OnTabletControllerDestroyed() {
tablet_mode_observation_.Reset();
}
void GestureEducationNotificationController::RegisterProfilePrefs(
PrefRegistrySimple* registry,
bool for_test) {
// Some tests fail when the notification shows up. Use |for_test|
// as the default value so that it is true in test to suppress the
// notification there.
registry->RegisterBooleanPref(prefs::kGestureEducationNotificationShown,
for_test);
}
void GestureEducationNotificationController::
GenerateGestureEducationNotification() {
std::unique_ptr<message_center::Notification> notification =
CreateSystemNotification(
message_center::NOTIFICATION_TYPE_SIMPLE, kNotificationId,
GetNotificationTitle(), GetNotificationMessage(),
std::u16string() /* display_source */, GURL(),
message_center::NotifierId(
message_center::NotifierType::SYSTEM_COMPONENT, kNotificationId),
message_center::RichNotificationData(),
base::MakeRefCounted<message_center::HandleNotificationClickDelegate>(
base::BindRepeating(&GestureEducationNotificationController::
HandleNotificationClick,
weak_ptr_factory_.GetWeakPtr())),
vector_icons::kSettingsIcon,
message_center::SystemNotificationWarningLevel::NORMAL);
message_center::MessageCenter::Get()->AddNotification(
std::move(notification));
}
void GestureEducationNotificationController::HandleNotificationClick() {
Shell::Get()->system_tray_model()->client()->ShowGestureEducationHelp();
}
void GestureEducationNotificationController::ResetPrefForTest() {
if (active_user_prefs_) {
active_user_prefs_->SetBoolean(prefs::kGestureEducationNotificationShown,
false);
}
}
std::u16string GestureEducationNotificationController::GetNotificationMessage()
const {
return l10n_util::GetStringUTF16(IDS_GESTURE_NOTIFICATION_MESSAGE_LEARN_MORE);
}
std::u16string GestureEducationNotificationController::GetNotificationTitle()
const {
return l10n_util::GetStringUTF16(IDS_GESTURE_NOTIFICATION_TITLE);
}
} // namespace ash