// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto2";

package location.nearby.proto.sharing;

// import "logs/proto/logs_annotations/logs_annotations.proto";

// option (logs_proto.file_not_used_for_logging_except_enums) = true;
option optimize_for = LITE_RUNTIME;
option java_package = "com.google.location.nearby.proto";
option java_outer_classname = "SharingEnums";
option objc_class_prefix = "GNSHP";

// We use event based logging (an event object can be constructed and logged
// immediately when they occur). To obtain session based information (e.g.
// durations, counting incoming introductions), we use flowId (sender/receiver)
// in NearbyClearcutLogger (for android, or clearcut_event_logger as the
// equivalence for Windows) for all events (may exclude settings), and
// session_id for a pair of events (start and end of a session).
// Next id: 67
enum EventType {
  UNKNOWN_EVENT_TYPE = 0;

  // LINT.IfChange(EventType)

  // When new users accept agreements (like grant permission to contacts for
  // CONTACT_ONLY visibility) and are enrolled into Nearby Sharing. This event
  // is used to count number of new users.
  ACCEPT_AGREEMENTS = 1;

  // User enables/disables nearby sharing from setting or tile service.
  ENABLE_NEARBY_SHARING = 2;

  // User sets visibility preference from setting.
  SET_VISIBILITY = 3;

  // Describe attachments immediately when Nearby Sharing is opened by another
  // app which is used to generate/attach attachments to be shared with other
  // devices.
  DESCRIBE_ATTACHMENTS = 4;

  // Start of a scanning phase at sender.
  SCAN_FOR_SHARE_TARGETS_START = 5;

  // End of the scanning phase at sender.
  SCAN_FOR_SHARE_TARGETS_END = 6;

  // Receiver advertises itself for presence (a pseudo session).
  ADVERTISE_DEVICE_PRESENCE_START = 7;

  // End of the advertising phase at receiver.
  ADVERTISE_DEVICE_PRESENCE_END = 8;

  // Sender sends a fast initialization to receiver.
  SEND_FAST_INITIALIZATION = 9;

  // Receiver receives the fast initialization.
  RECEIVE_FAST_INITIALIZATION = 10;

  // Sender discovers a share target.
  DISCOVER_SHARE_TARGET = 11;

  // Sender sends introduction (before attachments being sent).
  SEND_INTRODUCTION = 12;

  // Receiver receives introduction.
  RECEIVE_INTRODUCTION = 13;

  // Receiver responds to introduction (before attachments being sent).
  // Actions: Accept, Reject, or (for some reason) Fail.
  RESPOND_TO_INTRODUCTION = 14;

  // Start of the sending attachments phase at sender.
  SEND_ATTACHMENTS_START = 15;

  // End of sending attachments phase at sender.
  SEND_ATTACHMENTS_END = 16;

  // Start of the receiving attachments phase at receiver.
  RECEIVE_ATTACHMENTS_START = 17;

  // End of receiving attachments phase at receiver.
  RECEIVE_ATTACHMENTS_END = 18;

  // Sender cancels sending attachments.
  CANCEL_SENDING_ATTACHMENTS = 19;

  // Receiver cancels receiving attachments.
  CANCEL_RECEIVING_ATTACHMENTS = 20;

  // Receiver opens received attachments.
  OPEN_RECEIVED_ATTACHMENTS = 21;

  // User opens the setup activity.
  LAUNCH_SETUP_ACTIVITY = 22 [deprecated = true];

  // User adds a contact.
  ADD_CONTACT = 23;

  // User removes a contact.
  REMOVE_CONTACT = 24;

  // Local devices all Fast Share server.
  FAST_SHARE_SERVER_RESPONSE = 25;

  // The start of a sending session.
  SEND_START = 26;

  // Receiver accepts a fast initialization.
  ACCEPT_FAST_INITIALIZATION = 27;

  // Set data usage preference.
  SET_DATA_USAGE = 28;

  // Receiver dismisses a fast initialization
  DISMISS_FAST_INITIALIZATION = 29;

  // Cancel connection.
  CANCEL_CONNECTION = 30;

  // User starts a chimera activity (e.g. ConsentsChimeraActivity,
  // DeviceVisibilityChimeraActivity...)
  LAUNCH_ACTIVITY = 31;

  // Receiver dismisses a privacy notification.
  DISMISS_PRIVACY_NOTIFICATION = 32;

  // Receiver taps a privacy notification.
  TAP_PRIVACY_NOTIFICATION = 33;

  // Receiver taps a help page.
  TAP_HELP = 34;

  // Receiver taps a feedback.
  TAP_FEEDBACK = 35;

  // Receiver adds quick settings tile.
  ADD_QUICK_SETTINGS_TILE = 36;

  // Receiver removes quick settings tile.
  REMOVE_QUICK_SETTINGS_TILE = 37;

  // Receiver phone consent clicked.
  LAUNCH_PHONE_CONSENT = 38;

  // Devices show a phone consent banner in Nearby Share Settings
  DISPLAY_PHONE_CONSENT = 54;

  // Receiver taps quick settings tile.
  TAP_QUICK_SETTINGS_TILE = 39;

  // Receiver Installation of APKs status.
  INSTALL_APK = 40;

  // Receiver verification of APKs status.
  VERIFY_APK = 41;

  // User starts a consent.
  LAUNCH_CONSENT = 42;

  // After receiving payloads, Nearby Share still needs to transfer the payloads
  // to correct attachment formats and move files attachments from temporary
  // directory to final destination.
  PROCESS_RECEIVED_ATTACHMENTS_END = 43;

  // Toggle Show Notification setting item in Nearby Share setting.
  TOGGLE_SHOW_NOTIFICATION = 44;

  // Set device name
  SET_DEVICE_NAME = 45;

  // users dropped off opt-in page.
  DECLINE_AGREEMENTS = 46;

  // Request setting permissions (Wifi/BT/location/airplane mode).
  REQUEST_SETTING_PERMISSIONS = 47;

  // Set up a connection with the remote device.
  ESTABLISH_CONNECTION = 48;

  // Track device states in Nearby Share setting.
  DEVICE_SETTINGS = 49;

  // Receiver auto dismisses a fast initialization notification.
  AUTO_DISMISS_FAST_INITIALIZATION = 50;

  // App Crash event.
  // Used only for Windows App now.
  APP_CRASH = 51;

  // Sender taps the Send button in quick settings
  TAP_QUICK_SETTINGS_FILE_SHARE = 52;

  // Devices show a privacy notification
  DISPLAY_PRIVACY_NOTIFICATION = 53;

  // Preference usage event (e.g. load/save preferences, etc).
  // Used only for Windows App now.
  PREFERENCES_USAGE = 55;

  // Default opt in
  DEFAULT_OPT_IN = 56;

  // The result of the setup wizard flow
  SETUP_WIZARD = 57;

  // Sender taps a QR code
  TAP_QR_CODE = 58;

  // QR code link shown
  QR_CODE_LINK_SHOWN = 59;

  // Sender failed to parse endpoint id.
  PARSING_FAILED_ENDPOINT_ID = 60;

  // The device is discovered by fast initialization
  FAST_INIT_DISCOVER_DEVICE = 61;

  // Send desktop notification.
  SEND_DESKTOP_NOTIFICATION = 62;

  // User sets account preference
  SET_ACCOUNT = 63;

  // Decrypt certificate failure
  DECRYPT_CERTIFICATE_FAILURE = 64;

  // Show allow permission auto access UI
  SHOW_ALLOW_PERMISSION_AUTO_ACCESS = 65;

  // UI events for transferring files with desktop applications. It includes
  // event types such as DESKTOP_TRANSFER_EVENT_SEND_TYPE_SELECT_A_DEVICE.
  SEND_DESKTOP_TRANSFER_EVENT = 66;

  // LINT.ThenChange(//depot/google3/location/nearby/proto/nearby_event_codes.proto:SharingEventCode)
}

// Event category to differentiate whether this comes from sender or receiver,
// whether this is for communication flow, or for settings.
enum EventCategory {
  UNKNOWN_EVENT_CATEGORY = 0;
  SENDING_EVENT = 1;
  RECEIVING_EVENT = 2;
  SETTINGS_EVENT = 3;
}

// Status of nearby sharing.
enum NearbySharingStatus {
  UNKNOWN_NEARBY_SHARING_STATUS = 0;

  ON = 1;
  OFF = 2;
}

enum Visibility {
  UNKNOWN_VISIBILITY = 0;

  CONTACTS_ONLY = 1;
  EVERYONE = 2;
  SELECTED_CONTACTS_ONLY = 3;
  HIDDEN = 4;
  SELF_SHARE = 5;
}

enum DataUsage {
  UNKNOWN_DATA_USAGE = 0;

  ONLINE = 1;
  WIFI_ONLY = 2;
  OFFLINE = 3;
}

// The status of establishing a connection. Used by ESTABLISH_CONNECTION.
enum EstablishConnectionStatus {
  CONNECTION_STATUS_UNKNOWN = 0;

  CONNECTION_STATUS_SUCCESS = 1;
  CONNECTION_STATUS_FAILURE = 2;
  CONNECTION_STATUS_CANCELLATION = 3;
  CONNECTION_STATUS_MEDIA_UNAVAILABLE_ATTACHMENT = 4;
  CONNECTION_STATUS_FAILED_PAIRED_KEYHANDSHAKE = 5;
  CONNECTION_STATUS_FAILED_WRITE_INTRODUCTION = 6;
  CONNECTION_STATUS_FAILED_NULL_CONNECTION = 7;
  CONNECTION_STATUS_FAILED_NO_TRANSFER_UPDATE_CALLBACK = 8;
  CONNECTION_STATUS_LOST_CONNECTIVITY = 9;
  CONNECTION_STATUS_INVALID_ADVERTISEMENT = 10;
}

// The status of sending and receiving attachments. Used by SEND_ATTACHMENTS.
enum AttachmentTransmissionStatus {
  UNKNOWN_ATTACHMENT_TRANSMISSION_STATUS = 0;

  COMPLETE_ATTACHMENT_TRANSMISSION_STATUS = 1;
  CANCELED_ATTACHMENT_TRANSMISSION_STATUS = 2;
  FAILED_ATTACHMENT_TRANSMISSION_STATUS = 3;

  REJECTED_ATTACHMENT = 4 [deprecated = true];
  TIMED_OUT_ATTACHMENT = 5 [deprecated = true];
  AWAITING_REMOTE_ACCEPTANCE_FAILED_ATTACHMENT = 6 [deprecated = true];
  NOT_ENOUGH_SPACE_ATTACHMENT = 7 [deprecated = true];
  FAILED_NO_TRANSFER_UPDATE_CALLBACK = 8 [deprecated = true];
  MEDIA_UNAVAILABLE_ATTACHMENT = 9 [deprecated = true];
  UNSUPPORTED_ATTACHMENT_TYPE_ATTACHMENT = 10 [deprecated = true];
  NO_ATTACHMENT_FOUND = 11 [deprecated = true];
  FAILED_NO_SHARE_TARGET_ENDPOINT = 12 [deprecated = true];
  FAILED_PAIRED_KEYHANDSHAKE = 13 [deprecated = true];
  FAILED_NULL_CONNECTION = 14 [deprecated = true];
  FAILED_NO_PAYLOAD = 15 [deprecated = true];
  FAILED_WRITE_INTRODUCTION = 16 [deprecated = true];

  // The remote response is either missing or has an unknown type.
  FAILED_UNKNOWN_REMOTE_RESPONSE = 17 [deprecated = true];

  // Breakdowns of FAILED_NULL_CONNECTION (Desktop side)
  FAILED_NULL_CONNECTION_INIT_OUTGOING = 18;
  FAILED_NULL_CONNECTION_DISCONNECTED = 19;

  // Breakdowns of FAILED_NULL_CONNECTION (android side)
  // Connection failed due to Wifi is disconnected or Bluetooth setting is off
  // or user turn on airplane mode.
  FAILED_NULL_CONNECTION_LOST_CONNECTIVITY = 20 [deprecated = true];
  // Unexpected connection failure.
  FAILED_NULL_CONNECTION_FAILURE = 21 [deprecated = true];

  REJECTED_ATTACHMENT_TRANSMISSION_STATUS = 22;
  TIMED_OUT_ATTACHMENT_TRANSMISSION_STATUS = 23;
  NOT_ENOUGH_SPACE_ATTACHMENT_TRANSMISSION_STATUS = 24;
  UNSUPPORTED_ATTACHMENT_TYPE_ATTACHMENT_TRANSMISSION_STATUS = 25;
  FAILED_UNKNOWN_REMOTE_RESPONSE_TRANSMISSION_STATUS = 26;
  // Connection failed due to Wifi is disconnected or Bluetooth setting is off
  // or user turn on airplane mode.
  NO_RESPONSE_FRAME_CONNECTION_CLOSED_LOST_CONNECTIVITY_TRANSMISSION_STATUS = 27
      [deprecated = true];
  // Unexpected connection failure due to no response frame.
  NO_RESPONSE_FRAME_CONNECTION_CLOSED_TRANSMISSION_STATUS = 28;
  // Connection failed due to Wifi is disconnected or Bluetooth setting is off
  // or user turn on airplane mode.
  LOST_CONNECTIVITY_TRANSMISSION_STATUS = 29;
}

// Generic result status of NearbyConnections API calls.
enum ConnectionLayerStatus {
  // No status is available
  CONNECTION_LAYER_STATUS_UNKNOWN = 0;
  // The operation was successful.
  CONNECTION_LAYER_STATUS_SUCCESS = 1;
  // The operation failed, without any more information.
  CONNECTION_LAYER_STATUS_ERROR = 2;
  // The app called an API method out of order (i.e. another method is expected
  // to be called first).
  CONNECTION_LAYER_STATUS_OUT_OF_ORDER_API_CALL = 3;
  // The app already has active operations (advertising, discovering, or
  // connected to other devices) with another Strategy. Stop these operations on
  // the current Strategy before trying to advertise or discover with a new
  // Strategy.
  CONNECTION_LAYER_STATUS_ALREADY_HAVE_ACTIVE_STRATEGY = 4;
  // The app is already advertising; call StopAdvertising() before trying to
  // advertise again.
  CONNECTION_LAYER_STATUS_ALREADY_ADVERTISING = 5;
  // The app is already discovering; call StopDiscovery() before trying to
  // discover again.
  CONNECTION_LAYER_STATUS_ALREADY_DISCOVERING = 6;
  // NC is already listening for incoming connections from remote endpoints.
  CONNECTION_LAYER_STATUS_ALREADY_LISTENING = 7;
  // An attempt to read from/write to a connected remote endpoint failed. If
  // this occurs repeatedly, consider invoking DisconnectFromEndpoint().
  CONNECTION_LAYER_STATUS_END_POINT_IO_ERROR = 8;
  // An attempt to interact with a remote endpoint failed because it's unknown
  // to us -- it's either an endpoint that was never discovered, or an endpoint
  // that never connected to us (both of which are indicative of bad input from
  // the client app).
  CONNECTION_LAYER_STATUS_END_POINT_UNKNOWN = 9;
  // The remote endpoint rejected the connection request.
  CONNECTION_LAYER_STATUS_CONNECTION_REJECTED = 10;
  // The app is already connected to the specified endpoint. Multiple
  // connections to a remote endpoint cannot be maintained simultaneously.
  CONNECTION_LAYER_STATUS_ALREADY_CONNECTED_TO_END_POINT = 11;
  // The remote endpoint is not connected; messages cannot be sent to it.
  CONNECTION_LAYER_STATUS_NOT_CONNECTED_TO_END_POINT = 12;
  // There was an error trying to use the device's Bluetooth capabilities.
  CONNECTION_LAYER_STATUS_BLUETOOTH_ERROR = 13;
  // There was an error trying to use the device's Bluetooth Low Energy
  // capabilities.
  CONNECTION_LAYER_STATUS_BLE_ERROR = 14;
  // There was an error trying to use the device's Wi-Fi capabilities.
  CONNECTION_LAYER_STATUS_WIFI_LAN_ERROR = 15;
  // An attempt to interact with an in-flight Payload failed because it's
  // unknown to us.
  CONNECTION_LAYER_STATUS_PAYLOAD_UNKNOWN = 16;
  // The connection was reset
  CONNECTION_LAYER_STATUS_RESET = 17;
  // The connection timed out
  CONNECTION_LAYER_STATUS_TIMEOUT = 18;
}

// The status of processing attachments after receiver received payloads
// successfully.
enum ProcessReceivedAttachmentsStatus {
  PROCESSING_STATUS_UNKNOWN = 0;

  PROCESSING_STATUS_COMPLETE_PROCESSING_ATTACHMENTS = 1;
  PROCESSING_STATUS_FAILED_MOVING_FILES = 2;
  PROCESSING_STATUS_FAILED_RECEIVING_APK = 3;
  PROCESSING_STATUS_FAILED_RECEIVING_TEXT = 4;
  PROCESSING_STATUS_FAILED_RECEIVING_WIFI_CREDENTIALS = 5;
}

// The status of advertising and discovering sessions. Used by
// SCAN_FOR_SHARE_TARGETS and ADVERTISE_DEVICE_PRESENCE.
enum SessionStatus {
  UNKNOWN_SESSION_STATUS = 0;

  SUCCEEDED_SESSION_STATUS = 1;
  FAILED_SESSION_STATUS = 2;
}

// User's response to introductions.
enum ResponseToIntroduction {
  UNKNOWN_RESPONSE_TO_INTRODUCTION = 0;

  ACCEPT_INTRODUCTION = 1;
  REJECT_INTRODUCTION = 2;
  FAIL_INTRODUCTION = 3;
}

// TODO(fdi): may eventually include desktop, etc.
// The type of a remote device.
enum DeviceType {
  UNKNOWN_DEVICE_TYPE = 0;

  PHONE = 1;
  TABLET = 2;
  LAPTOP = 3;
}

// TODO(fdi): may eventually include windows, iOS, etc.
// The OS type of a remote device.
enum OSType {
  UNKNOWN_OS_TYPE = 0;

  ANDROID = 1;
  CHROME_OS = 2;
  IOS = 3;
  WINDOWS = 4;
  MACOS = 5;
}

// Relationship of remote device to sender device.
enum DeviceRelationship {
  UNKNOWN_DEVICE_RELATIONSHIP = 0;

  // The remote device belongs to the same owner as sender device.
  IS_SELF = 1;
  // The remote device is a contact of sender.
  IS_CONTACT = 2;
  // The remote device is a stranger.
  IS_STRANGER = 3;
}

// The device sources of the clearcut log.
enum LogSource {
  UNSPECIFIED_SOURCE = 0;

  // Represents the devices in Nearby labs.
  LAB_DEVICES = 1;
  // Represents the devices tested by Nearby engs, in the long term can include
  // any devices with newest feature flags.
  INTERNAL_DEVICES = 2;
  // Represents the devices testing our in-development features before they're
  // released to the greater public.
  BETA_TESTER_DEVICES = 3;
  // Represents the OEM partners (like Samsung) that we're working with to
  // verify functionality on their devices.
  OEM_DEVICES = 4;
  // Represents the device for debugging.
  DEBUG_DEVICES = 5;
  // Represents the device for Nearby Module Food.
  NEARBY_MODULE_FOOD_DEVICES = 6;
}

// The Fast Share server action name.
enum ServerActionName {
  UNKNOWN_SERVER_ACTION = 0;

  UPLOAD_CERTIFICATES = 1;
  DOWNLOAD_CERTIFICATES = 2;
  CHECK_REACHABILITY = 3;
  UPLOAD_CONTACTS = 4;
  UPDATE_DEVICE_NAME = 5;
  UPLOAD_SENDER_CERTIFICATES = 6;
  DOWNLOAD_SENDER_CERTIFICATES = 7;
  UPLOAD_CONTACTS_AND_CERTIFICATES = 8;
  LIST_REACHABLE_PHONE_NUMBERS = 9;
  LIST_MY_DEVICES = 10;
  LIST_CONTACT_PEOPLE = 11;

  // used for analytics logger to record action name.
  DOWNLOAD_CERTIFICATES_INFO = 12;
}

// The Fast Share server response state.
enum ServerResponseState {
  UNKNOWN_SERVER_RESPONSE_STATE = 0;

  SERVER_RESPONSE_SUCCESS = 1;
  SERVER_RESPONSE_UNKNOWN_FAILURE = 2;

  // For StatusException.
  SERVER_RESPONSE_STATUS_OTHER_FAILURE = 3;
  SERVER_RESPONSE_STATUS_DEADLINE_EXCEEDED = 4;
  SERVER_RESPONSE_STATUS_PERMISSION_DENIED = 5;
  SERVER_RESPONSE_STATUS_UNAVAILABLE = 6;
  SERVER_RESPONSE_STATUS_UNAUTHENTICATED = 7;
  SERVER_RESPONSE_STATUS_INVALID_ARGUMENT = 9;

  // For GoogleAuthException.
  SERVER_RESPONSE_GOOGLE_AUTH_FAILURE = 8;

  // For Internet connect status.
  SERVER_RESPONSE_NOT_CONNECTED_TO_INTERNET = 10;
}

// The purpose of requesting the server request.
enum SyncPurpose {
  SYNC_PURPOSE_UNKNOWN = 0;
  // When NearbySharingChimeraService#sync() is called.
  SYNC_PURPOSE_ON_DEMAND_SYNC = 1;
  // Requested by chime notification.
  SYNC_PURPOSE_CHIME_NOTIFICATION = 2;
  // For reqular daily sync.
  SYNC_PURPOSE_DAILY_SYNC = 3;
  // Wen a device opts into Nearby Share.
  SYNC_PURPOSE_OPT_IN_FIRST_SYNC = 4;
  // Requested when Nearby Share automatically enables a device that shares
  // a single account that has already opted in on another device.
  SYNC_PURPOSE_CHECK_DEFAULT_OPT_IN = 5;
  // When a device enables Nearby Share.
  SYNC_PURPOSE_NEARBY_SHARE_ENABLED = 6;
  // When a device is in fast init advertising.
  SYNC_PURPOSE_SYNC_AT_FAST_INIT = 7;
  // When device start discovery.
  SYNC_PURPOSE_SYNC_AT_DISCOVERY = 8;
  // When device tries to load valid private certificate.
  SYNC_PURPOSE_SYNC_AT_LOAD_PRIVATE_CERTIFICATE = 9;
  // When device start advertiseement.
  SYNC_PURPOSE_SYNC_AT_ADVERTISEMENT = 10;
  // When device contacts list changes.
  SYNC_PURPOSE_CONTACT_LIST_CHANGE = 11;
  // When showing the C11 banner in Neary Share setting.
  SYNC_PURPOSE_SHOW_C11N_VIEW = 12;
  // For regular check contact reachability.
  SYNC_PURPOSE_REGULAR_CHECK_CONTACT_REACHABILITY = 13;
  // When selected contacts list changes in visibility setting.
  SYNC_PURPOSE_VISIBILITY_SELECTED_CONTACT_CHANGE = 14;
  // When switching account.
  SYNC_PURPOSE_ACCOUNT_CHANGE = 15;
  // When regenerate certificates
  SYNC_PURPOSE_REGENERATE_CERTIFICATES = 16;
  // When Device Contacts consent changes
  SYNC_PURPOSE_DEVICE_CONTACTS_CONSENT_CHANGE = 17;
}

// The device role to trigger the server request.
enum ClientRole {
  CLIENT_ROLE_UNKNOWN = 0;
  CLIENT_ROLE_SENDER = 1;
  CLIENT_ROLE_RECEIVER = 2;
}

// The type of Nearby Sharing scanning.
enum ScanType {
  UNKNOWN_SCAN_TYPE = 0;
  FOREGROUND_SCAN = 1;
  FOREGROUND_RETRY_SCAN = 2;
  DIRECT_SHARE_SCAN = 3;
  BACKGROUND_SCAN = 4;
}

// The type of parsing endpoint id failed type.
enum ParsingFailedType {
  FAILED_UNKNOWN_TYPE = 0;
  // NULL advertisement is returned due to sender failing to parse advertisement
  // from endpointInfo byte stream from receiver advertisement.
  FAILED_PARSE_ADVERTISEMENT = 1;
  // NULL shareTarget is returned due to sender failing to create shareTarget
  // from a valid parsed advertisement stemming from issues in certificates, QR
  // code tokens or device names.
  FAILED_CONVERT_SHARE_TARGET = 2;
}

// The Nearby Sharing advertising mode.
enum AdvertisingMode {
  UNKNOWN_ADVERTISING_MODE = 0;
  SCREEN_OFF_ADVERTISING_MODE = 1;
  BACKGROUND_ADVERTISING_MODE = 2;
  MIDGROUND_ADVERTISING_MODE = 3;
  FOREGROUND_ADVERTISING_MODE = 4;
}

// The Nearby Sharing discovery mode.
enum DiscoveryMode {
  UNKNOWN_DISCOVERY_MODE = 0;
  SCREEN_OFF_DISCOVERY_MODE = 1;
  BACKGROUND_DISCOVERY_MODE = 2;
  MIDGROUND_DISCOVERY_MODE = 3;
  FOREGROUND_DISCOVERY_MODE = 4;
}

// The class name of chimera activity.
enum ActivityName {
  UNKNOWN_ACTIVITY = 0;

  SHARE_SHEET_ACTIVITY = 1;
  SETTINGS_ACTIVITY = 2;
  RECEIVE_SURFACE_ACTIVITY = 3;
  SETUP_ACTIVITY = 4;
  DEVICE_VISIBILITY_ACTIVITY = 5;
  CONSENTS_ACTIVITY = 6;
  SET_DEVICE_NAME_DIALOG = 7;
  SET_DATA_USAGE_DIALOG = 8;
  QUICK_SETTINGS_ACTIVITY = 9;
  REMOTE_COPY_SHARE_SHEET_ACTIVITY = 10;
  SETUP_WIZARD_ACTIVITY = 11;
  SETTINGS_REVIEW_ACTIVITY = 12;
}

// The type of consent page user launches.
enum ConsentType {
  CONSENT_TYPE_UNKNOWN = 0;

  // launch Constellation consent page.
  CONSENT_TYPE_C11N = 1;
  // launch device contact consent page.
  CONSENT_TYPE_DEVICE_CONTACT = 2;
}

enum ConsentAcceptanceStatus {
  CONSENT_UNKNOWN_ACCEPT_STATUS = 0;

  CONSENT_ACCEPTED = 1;
  CONSENT_DECLINED = 2;
  // unable to enable consent.
  CONSENT_UNABLE_TO_ENABLE = 3;
}

enum ApkSource {
  UNKNOWN_APK_SOURCE = 0;

  APK_FROM_SD_CARD = 1;
  INSTALLED_APP = 2;
}

// The Installation status of APK.
enum InstallAPKStatus {
  UNKNOWN_INSTALL_APK_STATUS = 0;

  FAIL_INSTALLATION = 1;
  SUCCESS_INSTALLATION = 2;
}

// The verification status of APK.
enum VerifyAPKStatus {
  UNKNOWN_VERIFY_APK_STATUS = 0;

  NOT_INSTALLABLE = 1;
  INSTALLABLE = 2;
  ALREADY_INSTALLED = 3;
}

enum ShowNotificationStatus {
  UNKNOWN_SHOW_NOTIFICATION_STATUS = 0;

  SHOW = 1;
  NOT_SHOW = 2;
}

enum PermissionRequestResult {
  PERMISSION_UNKNOWN_REQUEST_RESULT = 0;

  PERMISSION_GRANTED = 1;
  PERMISSION_REJECTED = 2;
  PERMISSION_UNABLE_TO_GRANT = 3;
}

enum PermissionRequestType {
  PERMISSION_UNKNOWN_TYPE = 0;

  PERMISSION_AIRPLANE_MODE_OFF = 1;
  PERMISSION_WIFI = 2;
  PERMISSION_BLUETOOTH = 3;
  PERMISSION_LOCATION = 4;
  PERMISSION_WIFI_HOTSPOT = 5;
}

enum SharingUseCase {
  USE_CASE_UNKNOWN = 0;

  USE_CASE_NEARBY_SHARE = 1;
  USE_CASE_REMOTE_COPY_PASTE = 2;
  USE_CASE_WIFI_CREDENTIAL = 3;
  USE_CASE_APP_SHARE = 4;
  USE_CASE_QUICK_SETTING_FILE_SHARE = 5;
  USE_CASE_SETUP_WIZARD = 6;
  USE_CASE_NEARBY_SHARE_WITH_QR_CODE = 7;
}

// Used only for Windows App now.
enum AppCrashReason {
  APP_CRASH_REASON_UNKNOWN = 0;
}

// Thes source where the attachemnt comes from. It can be an action, app name,
// etc. The first 6 source types are being used as FileSenderType in Nearby
// Share Windows app.
enum AttachmentSourceType {
  ATTACHMENT_SOURCE_UNKNOWN = 0;
  ATTACHMENT_SOURCE_CONTEXT_MENU = 1;
  ATTACHMENT_SOURCE_DRAG_AND_DROP = 2;
  ATTACHMENT_SOURCE_SELECT_FILES_BUTTON = 3;
  ATTACHMENT_SOURCE_PASTE = 4;
  ATTACHMENT_SOURCE_SELECT_FOLDERS_BUTTON = 5;
}

// The action to interact with preferences.
// Used only for Windows App now.
enum PreferencesAction {
  PREFERENCES_ACTION_UNKNOWN = 0;
  PREFERENCES_ACTION_NO_ACTION = 1;

  // Primary actions/functions towards preferences
  PREFERENCES_ACTION_LOAD_PREFERENCES = 2;
  PREFERENCES_ACTION_SAVE_PREFERENCESS = 3;
  PREFERENCES_ACTION_ATTEMPT_LOAD = 4;
  PREFERENCES_ACTION_RESTORE_FROM_BACKUP = 5;

  // Other actions within the 4 actions above
  PREFERENCES_ACTION_CREATE_PREFERENCES_PATH = 6;
  PREFERENCES_ACTION_MAKE_PREFERENCES_BACKUP_FILE = 7;
  PREFERENCES_ACTION_CHECK_IF_PREFERENCES_PATH_EXISTS = 8;
  PREFERENCES_ACTION_CHECK_IF_PREFERENCES_INPUT_STREAM_STATUS = 9;
  PREFERENCES_ACTION_CHECK_IF_PREFERENCES_FILE_IS_CORRUPTED = 10;
  PREFERENCES_ACTION_CHECK_IF_PREFERENCES_BACKUP_FILE_EXISTS = 11;
}

// The status of the action to interact with preferences.
// Used only for Windows App now.
enum PreferencesActionStatus {
  PREFERENCES_ACTION_STATUS_UNKNOWN = 0;
  PREFERENCES_ACTION_STATUS_SUCCESS = 1;
  PREFERENCES_ACTION_STATUS_FAIL = 2;
}

/** The distance of the found nearby fast init advertisement. */
enum FastInitState {
  FAST_INIT_UNKNOWN_STATE = 0;
  // A device was found in close proximity.
  // distance < fast_init_distance_close_centimeters(50 cm)
  FAST_INIT_CLOSE_STATE = 1;
  // A device was found in far proximity.
  // distance < fast_init_distance_close_centimeters(10 m)
  FAST_INIT_FAR_STATE = 2;
  // No devices have been found nearby. The default state.
  FAST_INIT_LOST_STATE = 3;
}

/** The type of FastInit advertisement. */
enum FastInitType {
  FAST_INIT_UNKNOWN_TYPE = 0;
  // Show HUN to notify the user.
  FAST_INIT_NOTIFY_TYPE = 1;
  // Not notify the user.
  FAST_INIT_SILENT_TYPE = 2;
}

// LINT.IfChange
/** The type of desktop notification event. */
enum DesktopNotification {
  DESKTOP_NOTIFICATION_UNKNOWN = 0;
  DESKTOP_NOTIFICATION_CONNECTING = 1;
  DESKTOP_NOTIFICATION_PROGRESS = 2;
  DESKTOP_NOTIFICATION_ACCEPT = 3;
  DESKTOP_NOTIFICATION_RECEIVED = 4;
  DESKTOP_NOTIFICATION_ERROR = 5;
}

enum DesktopTransferEventType {
  DESKTOP_TRANSFER_EVENT_TYPE_UNKNOWN = 0;

  // Receive attachments.
  DESKTOP_TRANSFER_EVENT_RECEIVE_TYPE_ACCEPT = 1;
  DESKTOP_TRANSFER_EVENT_RECEIVE_TYPE_PROGRESS = 2;
  DESKTOP_TRANSFER_EVENT_RECEIVE_TYPE_RECEIVED = 3;
  DESKTOP_TRANSFER_EVENT_RECEIVE_TYPE_ERROR = 4;

  // Send attachments.
  DESKTOP_TRANSFER_EVENT_SEND_TYPE_START = 5;
  DESKTOP_TRANSFER_EVENT_SEND_TYPE_SELECT_A_DEVICE = 6;
  DESKTOP_TRANSFER_EVENT_SEND_TYPE_PROGRESS = 7;
  DESKTOP_TRANSFER_EVENT_SEND_TYPE_SENT = 8;
  DESKTOP_TRANSFER_EVENT_SEND_TYPE_ERROR = 9;
}

enum DecryptCertificateFailureStatus {
  DECRYPT_CERT_UNKNOWN_FAILURE = 0;
  DECRYPT_CERT_NO_SUCH_ALGORITHM_FAILURE = 1;
  DECRYPT_CERT_NO_SUCH_PADDING_FAILURE = 2;
  DECRYPT_CERT_INVALID_KEY_FAILURE = 3;
  DECRYPT_CERT_INVALID_ALGORITHM_PARAMETER_FAILURE = 4;
  DECRYPT_CERT_ILLEGAL_BLOCK_SIZE_FAILURE = 5;
  DECRYPT_CERT_BAD_PADDING_FAILURE = 6;
}
// LINT.ThenChange(
//   //depot/google3/location/nearby/cpp/sharing/clients/dart/platform/lib/types/models.dart
// )
