// 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.
#ifndef CHROME_BROWSER_ASH_EXTENDED_UPDATES_EXTENDED_UPDATES_NOTIFICATION_H_
#define CHROME_BROWSER_ASH_EXTENDED_UPDATES_EXTENDED_UPDATES_NOTIFICATION_H_
#include <string_view>
#include "base/callback_list.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/notifications/notification_handler.h"
#include "chrome/browser/profiles/profile.h"
#include "ui/message_center/public/cpp/notification_delegate.h"
namespace ash {
// Class that is responsible for showing the Extended Updates notification and
// acts as the delegate that handles interactions.
class ExtendedUpdatesNotification
: public message_center::NotificationDelegate {
public:
// Maps notification buttons to their ordered indices.
enum class IndexedButton : int {
kSetUp = 0,
kLearnMore = 1,
};
static constexpr std::string_view kNotificationId =
"ash.extended_updates.available";
static constexpr NotificationHandler::Type kNotificationType =
NotificationHandler::Type::TRANSIENT;
// Shows the notification.
static void Show(Profile* profile);
static void Show(scoped_refptr<ExtendedUpdatesNotification> delegate);
// Returns true if Extended Updates notification was dismissed by the user.
static bool IsNotificationDismissed(Profile* profile);
explicit ExtendedUpdatesNotification(Profile* profile);
ExtendedUpdatesNotification(const ExtendedUpdatesNotification&) = delete;
ExtendedUpdatesNotification& operator=(const ExtendedUpdatesNotification&) =
delete;
// message_center::NotificationDelegate overrides.
void Close(bool by_user) override;
void Click(const std::optional<int>& button_index,
const std::optional<std::u16string>& reply) override;
protected:
// Ref-counted class requires protected destructor.
~ExtendedUpdatesNotification() override;
virtual void ShowExtendedUpdatesDialog();
virtual void OpenLearnMoreUrl();
private:
Profile* profile() { return profile_.get(); }
void SubscribeToDeviceSettingsChanges();
void OnDeviceSettingsChanged();
base::WeakPtr<Profile> profile_;
base::CallbackListSubscription settings_change_subscription_;
base::WeakPtrFactory<ExtendedUpdatesNotification> weak_factory_{this};
};
} // namespace ash
#endif // CHROME_BROWSER_ASH_EXTENDED_UPDATES_EXTENDED_UPDATES_NOTIFICATION_H_