Index: chrome/browser/chromeos/login/quick_unlock/feature_notification.cc |
diff --git a/chrome/browser/chromeos/login/quick_unlock/feature_notification.cc b/chrome/browser/chromeos/login/quick_unlock/feature_notification.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..10dff8502541c1ec491f067571977264167771ea |
--- /dev/null |
+++ b/chrome/browser/chromeos/login/quick_unlock/feature_notification.cc |
@@ -0,0 +1,108 @@ |
+// Copyright (c) 2016 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 "chrome/browser/chromeos/login/quick_unlock/feature_notification.h" |
+ |
+#include "ash/common/system/system_notifier.h" |
+#include "chrome/browser/browser_process.h" |
+#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" |
+#include "chrome/browser/notifications/notification_ui_manager.h" |
+#include "chrome/browser/profiles/profile.h" |
+#include "chrome/browser/ui/browser_navigator.h" |
+#include "chrome/browser/ui/browser_navigator_params.h" |
+#include "chrome/common/pref_names.h" |
+#include "chrome/common/url_constants.h" |
+#include "components/prefs/pref_service.h" |
+#include "grit/ash_strings.h" |
+#include "grit/theme_resources.h" |
+#include "ui/base/l10n/l10n_util.h" |
+#include "ui/base/resource/resource_bundle.h" |
+#include "ui/strings/grit/ui_strings.h" |
+ |
+namespace { |
+ |
+const char kDelegateId[] = "quickunlock_delegate"; |
+const char kNotificationId[] = "quickunlock_notification"; |
+ |
+} // namespace |
+ |
+namespace chromeos { |
+namespace quickunlock { |
+ |
+FeatureNotificationController::FeatureNotificationController(Profile* profile) |
+ : profile_(profile) { |
+ std::unique_ptr<Notification> notification(CreateNotification()); |
+ g_browser_process->notification_ui_manager()->Add(*notification, profile_); |
+} |
+ |
+FeatureNotificationController::~FeatureNotificationController() {} |
+ |
+// static |
+// TODO(http://crbug.com/291747): Add check for a policy that might disable |
+// quick unlock. |
+bool FeatureNotificationController::ShouldShowNotificationToProfile( |
+ Profile* profile) { |
+ // Do not show survey if this is a guest session. |
jdufault
2016/07/06 21:06:43
Update comment (don't mention 'survey')
malaykeshav
2016/07/07 21:39:22
Done
|
+ if (profile->IsGuestSession()) |
+ return false; |
+ |
+ // Do not show notification to user if already displayed in the past. |
+ if (profile->GetPrefs()->GetBoolean( |
+ prefs::kQuickUnlockFeatureNotificationShown)) |
+ return false; |
+ return true; |
+} |
+ |
+// NotificationDelegate override: |
+std::string FeatureNotificationController::id() const { |
+ return kDelegateId; |
+} |
+ |
+// message_center::NotificationDelegate override: |
+void FeatureNotificationController::Close(bool by_user) { |
+ if (by_user) |
+ UpdatePreferenceForProfile(profile_); |
+} |
+ |
+// message_center::NotificationDelegate override: |
+void FeatureNotificationController::Click() { |
+ // TODO(http://crbug.com/291747): Redirect to specific checkbox location in |
+ // settings page. |
+ chrome::NavigateParams params(profile_, GURL(chrome::kChromeUISettingsURL), |
+ ui::PAGE_TRANSITION_LINK); |
+ params.disposition = NEW_FOREGROUND_TAB; |
+ params.window_action = chrome::NavigateParams::SHOW_WINDOW; |
+ chrome::Navigate(¶ms); |
+ |
+ UpdatePreferenceForProfile(profile_); |
+ |
+ // Remove the notification from tray. |
+ g_browser_process->notification_ui_manager()->CancelById( |
+ id(), NotificationUIManager::GetProfileID(profile_)); |
+} |
+ |
+Notification* FeatureNotificationController::CreateNotification() { |
+ return new Notification( |
+ message_center::NOTIFICATION_TYPE_SIMPLE, |
+ l10n_util::GetStringUTF16(IDS_ASH_QUICK_UNLOCK_NOTIFICATION_TITLE), |
+ l10n_util::GetStringUTF16(IDS_ASH_QUICK_UNLOCK_NOTIFICATION_BODY), |
+ // TODO(http://crbug.com/291747): Change this to actual icon for |
+ // quick unlock feature notiifcation. |
+ ui::ResourceBundle::GetSharedInstance().GetImageNamed( |
+ IDR_SCREENSHOT_NOTIFICATION_ICON), |
+ message_center::NotifierId(message_center::NotifierId::SYSTEM_COMPONENT, |
+ ash::system_notifier::kNotifierQuickUnlock), |
+ l10n_util::GetStringUTF16( |
+ IDS_MESSAGE_CENTER_NOTIFIER_QUICK_UNLOCK_FEATURE_NAME), |
+ GURL(), kNotificationId, message_center::RichNotificationData(), this); |
+} |
+ |
+void FeatureNotificationController::UpdatePreferenceForProfile( |
+ Profile* profile) { |
jdufault
2016/07/06 21:06:43
Drop the profile parameter; just use profile_ dire
malaykeshav
2016/07/07 21:39:22
Isn't it cleaner and more readable to make the met
jdufault
2016/07/07 22:08:01
That's fine - but then you should move this functi
malaykeshav
2016/07/07 22:39:42
Moving to anonymous namespace.
|
+ PrefService* pref_service = profile->GetPrefs(); |
+ pref_service->SetBoolean(prefs::kQuickUnlockFeatureNotificationShown, true); |
+} |
+ |
+} // namespace quickunlock |
+} // namespace chromeos |