chromium/ash/public/cpp/system_tray.h

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ASH_PUBLIC_CPP_SYSTEM_TRAY_H_
#define ASH_PUBLIC_CPP_SYSTEM_TRAY_H_

#include <string>

#include "ash/ash_export.h"

#include "base/memory/raw_ptr.h"

namespace ash {

class SystemTrayClient;
enum class DeferredUpdateState;
enum class NotificationStyle;
enum class UpdateSeverity;
struct DeviceEnterpriseInfo;
struct LocaleInfo;
struct RelaunchNotificationState;

namespace phonehub {
class PhoneHubManager;
}

// Public interface to control the system tray bubble in ash.
class ASH_EXPORT SystemTray {
 public:
  static SystemTray* Get();

  // Sets the client interface in the browser.
  virtual void SetClient(SystemTrayClient* client) = 0;

  // Sets the enabled state of the tray on the primary display. If not |enabled|
  // any open menu will be closed.
  virtual void SetPrimaryTrayEnabled(bool enabled) = 0;

  // Sets the visibility of the tray on the primary display.
  virtual void SetPrimaryTrayVisible(bool visible) = 0;

  // Sets the clock to use 24 hour time formatting if |use_24_hour| is true.
  // Otherwise sets 12 hour time formatting.
  virtual void SetUse24HourClock(bool use_24_hour) = 0;

  // Creates or updates an item in the system tray menu with information about
  // enterprise management.
  virtual void SetDeviceEnterpriseInfo(
      const DeviceEnterpriseInfo& device_enterprise_info) = 0;

  // Creates or updates an item in the system tray menu with information about
  // enterprise management.
  // |account_domain_manager| may be either a domain name (foo.com) or an email
  // address ([email protected]). These strings will not be sanitized and so must
  // come from a trusted location.
  virtual void SetEnterpriseAccountDomainInfo(
      const std::string& account_domain_manager) = 0;

  // Shows or hides an item in the system tray indicating that performance
  // tracing is running.
  virtual void SetPerformanceTracingIconVisible(bool visible) = 0;

  // Sets the list of supported UI locales. |current_locale_iso_code| refers to
  // the locale currently used by the UI.
  virtual void SetLocaleList(std::vector<LocaleInfo> locale_list,
                             const std::string& current_locale_iso_code) = 0;

  // Shows an icon in the system tray or a notification on the unified system
  // menu indicating that a software update is available. Once shown, the icon
  // or the notification persists until reboot.
  // |severity| specifies how critical is the update.
  // |factory_reset_required| is true if during the update the device will
  //     be wiped.
  // |rollback| specifies whether the update is actually an admin-initiated
  //     rollback. This implies that a the device will be wiped.
  // |update_type| specifies the component which has been updated.
  //
  // These values are used to control the icon, color and the text of the
  // tooltip or the notification.
  virtual void ShowUpdateIcon(UpdateSeverity severity,
                              bool factory_reset_required,
                              bool rollback) = 0;

  // Changes the update notification in the unified system menu,
  // according to different policies, when there is an update available
  // (it may be recommended or required, from Relaunch Notification policy,
  // for example).
  // Providing the `RelaunchNotificationState` allows the update countdown logic
  // to remain in //chrome/browser, where it is shared with other platforms.
  virtual void SetRelaunchNotificationState(
      const RelaunchNotificationState& relaunch_notification_state) = 0;

  // Resets update state to hide the update icon and notification. It is called
  // when a new update starts before the current update is applied.
  virtual void ResetUpdateState() = 0;

  // Set deferred update state to be either showing a dialog or showing an icon
  // in the system tray to indicate that a update is downloaded but deferred.
  virtual void SetUpdateDeferred(DeferredUpdateState state) = 0;

  // If |visible| is true, shows an icon in the system tray which indicates that
  // a software update is available but user's agreement is required as current
  // connection is cellular. If |visible| is false, hides the icon because the
  // user's one time permission on update over cellular connection has been
  // granted.
  virtual void SetUpdateOverCellularAvailableIconVisible(bool visible) = 0;

  // Sets whether end of life notice should be shown in quick settings.
  virtual void SetShowEolNotice(bool show) = 0;

  // Sets whether the extended updates support notice should be shown
  // in quick settings.
  virtual void SetShowExtendedUpdatesNotice(bool show) = 0;

  // Shows the volume slider bubble shown at the right bottom of screen.
  virtual void ShowVolumeSliderBubble() = 0;

  // Shows the network detailed view bubble at the right bottom of the primary
  // display.
  virtual void ShowNetworkDetailedViewBubble() = 0;

  // Provides Phone Hub functionality to the system tray.
  virtual void SetPhoneHubManager(
      phonehub::PhoneHubManager* phone_hub_manager) = 0;

 protected:
  SystemTray() = default;
  virtual ~SystemTray() = default;
};

}  // namespace ash

#endif  // ASH_PUBLIC_CPP_SYSTEM_TRAY_H_