// Copyright 2017 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.

module ash.mojom;

import "mojo/public/mojom/base/string16.mojom";

// Top-level items in the system tray bubble.
// TODO(jamescook): Consolidate with SystemTrayItem::UmaType.
enum TrayItem {
  kAccessibility,
  kNetwork,
};

// All methods operate on the system tray on the primary display.
interface SystemTrayTestApi {
  // Disables animations (e.g. the tray view icon slide-in).
  DisableAnimations() => ();

  // Returns true if the system tray bubble menu is open.
  IsTrayBubbleOpen() => (bool is_open);

  // Returns true if the view exists and is visible in the system tray area
  // at the bottom of the screen. Usually these views are icons, like the Wi-Fi
  // or battery icon.
  IsTrayViewVisible(int32 view_id) => (bool visible);

  // Shows the system tray bubble menu.
  ShowBubble() => ();

  // Closes the system tray bubble menu.
  CloseBubble() => ();

  // Shows the submenu view for |item| in the system tray bubble menu.
  ShowDetailedView(TrayItem item) => ();

  // Returns true if the view exists in the bubble and is visible.
  // If |open_tray| is true, it also opens system tray bubble.
  IsBubbleViewVisible(int32 view_id, bool open_tray) => (bool visible);

  // Clicks the view |view_id|.
  ClickBubbleView(int32 view_id) => ();

  // Returns the tooltip for a bubble view, or the empty string if the view
  // does not exist.
  GetBubbleViewTooltip(int32 view_id) => (mojo_base.mojom.String16 tooltip);

  // Returns the label for a bubble view, or the empty string if the view does
  // not exist. The view must be a views::Label.
  GetBubbleLabelText(int32 view_id) => (mojo_base.mojom.String16 tooltip);

  // Returns true if the clock is using 24 hour time.
  Is24HourClock() => (bool is_24_hour);
};
