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

// This file has been imported from
// https://github.com/flutter/engine/blob/master/sky/services/activity/activity.mojom
[DartPackage="mojo_services"]
module activity;

struct StringExtra {
  string name;
  string value;
};

struct ComponentName {
  string package_name;
  string class_name;
};

struct Intent {
  string action;
  string url;
  uint32 flags;
  ComponentName? component;
  array<StringExtra>? string_extras;
  string? type;
};

struct TaskDescription {
  string? label;
  uint32 primaryColor;
};

enum SystemUIVisibility {
  STANDARD,
  FULLSCREEN,
  IMMERSIVE,
};

// See http://developer.android.com/intl/es/reference/android/R.attr.html#screenOrientation
enum ScreenOrientation {
  UNSPECIFIED,
  LANDSCAPE,
  PORTRAIT,
  NOSENSOR,
};

// TODO(abarth): This interface seems very specific to Android. Do we want to
//               have a higher-level abstraction here? Do we want a collection
//               of services that only work on specific platforms? We need to
//               figure out how to rationalize this interface across platforms.
[ServiceName="activity::Activity"]
interface Activity {
  GetUserFeedback(UserFeedback& user_feedback);

  StartActivity(Intent intent);
  FinishCurrentActivity();
  SetTaskDescription(TaskDescription description);
  SetSystemUIVisibility(SystemUIVisibility visibility);
  SetRequestedOrientation(ScreenOrientation orientation);
};

[ServiceName="activity::PathService"]
interface PathService {
  // Where the application files are.
  GetAppDataDir() => (string path);

  // Where to store long-term files.
  GetFilesDir() => (string path);

  // Where to store short-term files.
  GetCacheDir() => (string path);
};

enum HapticFeedbackType {
  LONG_PRESS,
  VIRTUAL_KEY,
  KEYBOARD_TAP,
  CLOCK_TICK,
};

enum AuralFeedbackType {
  CLICK,
  NAVIGATION_LEFT,
  NAVIGATION_UP,
  NAVIGATION_RIGHT,
  NAVIGATION_DOWN,
};

interface UserFeedback {
  PerformHapticFeedback(HapticFeedbackType type);
  PerformAuralFeedback(AuralFeedbackType type);
};
