// 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/common/string16.mojom";

// Top-level items in the system tray bubble.
// TODO(jamescook): Consolidate with SystemTrayItem::UmaType.
enum TrayItem {
  kEnterprise,
  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 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() => ();

  // 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.
  IsBubbleViewVisible(int32 view_id) => (bool visible);

  // Returns the tooltip for a bubble view, or the empty string if the view
  // does not exist.
  GetBubbleViewTooltip(int32 view_id) => (mojo.common.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.common.mojom.String16 tooltip);

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