// Copyright 2015 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 arc;

// These values must be matched with the NOTIFICATION_EVENT_* constants in
// com.android.server.ArcNotificationListenerService.
enum ArcNotificationEvent {
  BODY_CLICKED = 0,
  CLOSED = 1,
  // Five buttons at maximum (message_center::kNotificationMaximumItems = 5).
  BUTTON_1_CLICKED = 2,
  BUTTON_2_CLICKED = 3,
  BUTTON_3_CLICKED = 4,
  BUTTON_4_CLICKED = 5,
  BUTTON_5_CLICKED = 6,
  MAX = BUTTON_5_CLICKED
};

// These values must be matched with the NOTIFICATION_TYPE_* constants in
// com.android.server.ArcNotificationListenerService.
enum ArcNotificationType {
  BASIC = 0,
  IMAGE = 1,
  PROGRESS = 2,
  MAX = PROGRESS
};

struct ArcNotificationButton {
  // Title
  string label;
};

struct ArcNotificationData {
  // Identifier of notification
  string key;
  // Type of notification
  ArcNotificationType type;
  // Body message of notification
  string message;
  // Title of notification
  string title;
  // Mimetype of |icon_data|
  string icon_mimetype;
  // Binary data of the icon
  array<uint8> icon_data;
  // Priority of notification, must be [2,-2]
  int32 priority;
  // Timestamp related to the notification
  int64 time;
  // The current value of progress, must be [0, progress_max].
  int32 progress_current;
  // The maximum value of progress.
  int32 progress_max;
  // Action buttons
  array<ArcNotificationButton> buttons;
  // Flag if the notification has FLAG_NO_CLEAR.
  [MinVersion=1]
  bool no_clear;
  // Flag if the notification has FLAG_ONGOING_EVENT.
  [MinVersion=1]
  bool ongoing_event;
};

interface NotificationsHost {
  // Tells the Chrome that a notification is posted (created or updated) on
  // Android.
  // |notification_data| is the data of notification (id, texts, icon and ...).
  OnNotificationPosted(ArcNotificationData notification_data);

  // Notifies that a notification is removed on Android.
  // |key| is the identifier of the notification.
  OnNotificationRemoved(string key);
};

// TODO(lhchavez): Migrate all request/response messages to Mojo.
interface NotificationsInstance {
  // Establishes full-duplex communication with the host.
  Init(NotificationsHost host_ptr);

  // Sends an event from Chrome notification UI to Android.
  // |event| is a type of occured event.
  SendNotificationEventToAndroid(string key, ArcNotificationEvent event);
};