Index: chrome/browser/notifications/sync_notifier/chrome_notifier_service.cc |
diff --git a/chrome/browser/notifications/sync_notifier/chrome_notifier_service.cc b/chrome/browser/notifications/sync_notifier/chrome_notifier_service.cc |
index 84643d3ffbba454b18558a3e46e2025a3f699283..d19153b94d4e2f4cbc23bf4cf8596efd116db824 100644 |
--- a/chrome/browser/notifications/sync_notifier/chrome_notifier_service.cc |
+++ b/chrome/browser/notifications/sync_notifier/chrome_notifier_service.cc |
@@ -8,12 +8,16 @@ |
#include "chrome/browser/notifications/sync_notifier/chrome_notifier_service.h" |
+#include <string> |
+#include <vector> |
+ |
#include "chrome/browser/notifications/desktop_notification_service.h" |
#include "chrome/browser/notifications/desktop_notification_service_factory.h" |
#include "chrome/browser/notifications/notification.h" |
#include "chrome/browser/notifications/notification_ui_manager.h" |
#include "chrome/browser/profiles/profile.h" |
-#include "grit/ui_strings.h" |
+#include "grit/generated_resources.h" |
+#include "grit/theme_resources.h" |
#include "sync/api/sync_change.h" |
#include "sync/api/sync_change_processor.h" |
#include "sync/api/sync_error_factory.h" |
@@ -21,13 +25,14 @@ |
#include "sync/protocol/synced_notification_specifics.pb.h" |
#include "third_party/WebKit/public/web/WebTextDirection.h" |
#include "ui/base/l10n/l10n_util.h" |
+#include "ui/base/resource/resource_bundle.h" |
#include "ui/message_center/notifier_settings.h" |
#include "url/gurl.h" |
namespace notifier { |
namespace { |
-const char kSampleSyncedNotificationServiceId[] = "sample-synced-service"; |
+const char kFirstSyncedNotificationServiceId[] = "Google+"; |
} |
@@ -35,7 +40,8 @@ bool ChromeNotifierService::avoid_bitmap_fetching_for_test_ = false; |
ChromeNotifierService::ChromeNotifierService(Profile* profile, |
NotificationUIManager* manager) |
- : profile_(profile), notification_manager_(manager) {} |
+ : profile_(profile), notification_manager_(manager) { |
+} |
ChromeNotifierService::~ChromeNotifierService() {} |
// Methods from BrowserContextKeyedService. |
@@ -270,20 +276,31 @@ void ChromeNotifierService::GetSyncedNotificationServices( |
// TODO(mukai|petewil): Check the profile's eligibility before adding the |
// sample app. |
- // Currently we just use kSampleSyncedNotificationServiceId as a place holder. |
- // TODO(petewil): Really obtain the list of apps from the server and create |
- // the list of ids here. |
+ // TODO(petewil): Really obtain the list of synced notification sending |
+ // services from the server and create the list of ids here. Until then, we |
+ // are hardcoding the service names. Once that is done, remove this |
+ // hardcoding. |
+ // crbug.com/248337 |
DesktopNotificationService* desktop_notification_service = |
DesktopNotificationServiceFactory::GetForProfile(profile_); |
message_center::NotifierId notifier_id( |
message_center::NotifierId::SYNCED_NOTIFICATION_SERVICE, |
- kSampleSyncedNotificationServiceId); |
- notifiers->push_back(new message_center::Notifier( |
+ kFirstSyncedNotificationServiceId); |
+ message_center::Notifier* notifier_service = new message_center::Notifier( |
notifier_id, |
l10n_util::GetStringUTF16( |
- IDS_MESSAGE_CENTER_SAMPLE_SYNCED_NOTIFICATION_SERVICE_NAME), |
- desktop_notification_service->IsNotifierEnabled(notifier_id))); |
- // TODO(mukai): Add icon for the sample app. |
+ IDS_FIRST_SYNCED_NOTIFICATION_SERVICE_NAME), |
+ desktop_notification_service->IsNotifierEnabled(notifier_id)); |
+ |
+ // Add icons for our sending services. |
+ // TODO(petewil): Replace this temporary hardcoding with a new sync datatype |
+ // to dynamically get the name and icon for each synced notification sending |
+ // service. Until then, we use hardcoded service icons for all services. |
+ // crbug.com/248337 |
+ notifier_service->icon = ui::ResourceBundle::GetSharedInstance(). |
+ GetImageNamed(IDR_TEMPORARY_GOOGLE_PLUS_ICON); |
+ |
+ notifiers->push_back(notifier_service); |
} |
void ChromeNotifierService::MarkNotificationAsDismissed( |
@@ -311,6 +328,15 @@ void ChromeNotifierService::Add(scoped_ptr<SyncedNotification> notification) { |
// Take ownership of the object and put it into our local storage. |
notification_data_.push_back(notification.release()); |
+ // If the user is not interested in this type of notification, ignore it. |
+ std::vector<std::string>::iterator iter = |
+ find(enabled_sending_services_.begin(), |
+ enabled_sending_services_.end(), |
+ notification_copy->GetSendingServiceId()); |
+ if (iter == enabled_sending_services_.end()) { |
+ return; |
+ } |
+ |
Display(notification_copy); |
} |
@@ -320,6 +346,7 @@ void ChromeNotifierService::AddForTest( |
} |
void ChromeNotifierService::Display(SyncedNotification* notification) { |
+ |
// Set up to fetch the bitmaps. |
notification->QueueBitmapFetchJobs(notification_manager_, |
this, |
@@ -337,7 +364,23 @@ void ChromeNotifierService::Display(SyncedNotification* notification) { |
void ChromeNotifierService::OnSyncedNotificationServiceEnabled( |
const std::string& notifier_id, bool enabled) { |
- // TODO(petewil): start/stop syncing |
+ std::vector<std::string>::iterator iter; |
+ |
+ iter = find(enabled_sending_services_.begin(), |
+ enabled_sending_services_.end(), |
+ notifier_id); |
+ |
+ // Add the notifier_id if it is enabled and not already there. |
+ if (iter == enabled_sending_services_.end() && enabled) { |
+ enabled_sending_services_.push_back(notifier_id); |
+ // TODO(petewil) Check now for any outstanding notifications. |
+ // Remove the notifier_id if it is disabled and present. |
+ } else if (iter != enabled_sending_services_.end() && !enabled) { |
+ enabled_sending_services_.erase(iter); |
+ } |
+ |
+ // Otherwise, nothing to do, we can exit. |
+ return; |
} |
} // namespace notifier |