blob: e2b78044516eed1b0423c10c2ad29d9346347d7b [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
syntax = "proto3";
package ash.phonehub.proto;
option optimize_for = LITE_RUNTIME;
// This enum is tied directly to a UMA enum defined in
// //tools/metrics/histograms/enums.xml, and should always reflect it (do not
// change one without changing the other). Entries should be never modified
// or deleted. Only additions possible.
enum MessageType {
PROVIDE_CROS_STATE = 0;
PHONE_STATUS_SNAPSHOT = 1;
PHONE_STATUS_UPDATE = 2;
UPDATE_NOTIFICATION_MODE_REQUEST = 3;
UPDATE_NOTIFICATION_MODE_RESPONSE = 4;
RING_DEVICE_REQUEST = 5;
RING_DEVICE_RESPONSE = 6;
UPDATE_BATTERY_MODE_REQUEST = 7;
UPDATE_BATTERY_MODE_RESPONSE = 8;
DISMISS_NOTIFICATION_REQUEST = 9;
DISMISS_NOTIFICATION_RESPONSE = 10;
NOTIFICATION_INLINE_REPLY_REQUEST = 11;
NOTIFICATION_INLINE_REPLY_RESPONSE = 12;
SHOW_NOTIFICATION_ACCESS_SETUP_REQUEST = 13;
SHOW_NOTIFICATION_ACCESS_SETUP_RESPONSE = 14;
FETCH_CAMERA_ROLL_ITEMS_REQUEST = 15;
FETCH_CAMERA_ROLL_ITEMS_RESPONSE = 16;
FETCH_CAMERA_ROLL_ITEM_DATA_REQUEST = 17;
FETCH_CAMERA_ROLL_ITEM_DATA_RESPONSE = 18;
INITIATE_CAMERA_ROLL_ITEM_TRANSFER_REQUEST = 19;
DECLINE_INCOMING_CALL_REQUEST = 20;
DECLINE_INCOMING_CALL_RESPONSE = 21;
HANGUP_ONGOING_CALL_REQUEST = 22;
HANGUP_ONGOING_CALL_RESPONSE = 23;
FEATURE_SETUP_REQUEST = 24;
FEATURE_SETUP_RESPONSE = 25;
PING_REQUEST = 26;
PING_RESPONSE = 27;
APP_STREAM_UPDATE = 28;
APP_LIST_UPDATE = 29;
}
enum NotificationSetting {
NOTIFICATIONS_OFF = 0;
NOTIFICATIONS_ON = 1;
}
enum CameraRollSetting {
CAMERA_ROLL_OFF = 0;
CAMERA_ROLL_ON = 1;
}
enum AppStreamabilityStatus {
STREAMABLE = 0;
BLOCK_LISTED = 1;
BLOCKED_BY_APP = 2;
}
enum ChargingState {
NOT_CHARGING = 0;
CHARGING_AC = 1;
CHARGING_USB = 2;
CHARGING_WIRELESS = 3;
}
enum BatteryMode {
BATTERY_SAVER_OFF = 0;
BATTERY_SAVER_ON = 1;
}
enum NotificationMode {
DO_NOT_DISTURB_OFF = 0;
DO_NOT_DISTURB_ON = 1;
}
enum NotificationAccessState {
ACCESS_NOT_GRANTED = 0;
ACCESS_GRANTED = 1;
}
enum FindMyDeviceRingStatus {
NOT_RINGING = 0;
RINGING = 1;
}
enum SignalStrength {
ZERO_BARS = 0;
ONE_BAR = 1;
TWO_BARS = 2;
THREE_BARS = 3;
FOUR_BARS = 4;
}
enum MobileConnectionState {
NO_SIM = 0;
SIM_BUT_NO_RECEPTION = 1;
SIM_WITH_RECEPTION = 2;
}
enum NotificationImportance {
UNSPECIFIED = 0;
NONE = 1;
MIN = 2;
LOW = 3;
DEFAULT = 4;
HIGH = 5;
}
enum ProfileType {
DEFAULT_PROFILE = 0;
WORK_PROFILE = 1;
}
enum ProfileDisableReason {
DISABLE_REASON_UNKNOWN = 0;
DISABLE_REASON_NOT_SUPPORTED = 1;
DISABLE_REASON_DISABLED_BY_POLICY = 2;
}
enum DoNotDisturbCapability {
DO_NOT_DISTURB_NORMAL = 0;
DO_NOT_DISTURB_NOT_ALLOWED = 1;
}
enum FindMyDeviceCapability {
NORMAL = 0;
NOT_ALLOWED = 1;
}
enum FeatureStatus {
FEATURE_STATUS_UNSPECIFIED = 0;
FEATURE_STATUS_UNSUPPORTED = 1;
FEATURE_STATUS_SUPPORTED = 2;
FEATURE_STATUS_ENABLED = 3;
// Feature is supported, but disabled by enterprise policy setting.
FEATURE_STATUS_PROHIBITED_BY_POLICY = 4;
// Feature is supported but requires attestation, and the connected device
// can not be verified.
FEATURE_STATUS_ATTESTATION_FAILED = 5;
}
// Information about the phone whether is secured with a PIN, pattern or
// password.
enum ScreenLockState {
SCREEN_LOCK_UNKNOWN = 0;
SCREEN_LOCK_OFF = 1;
SCREEN_LOCK_ON = 2;
}
enum FeatureSetupResult {
RESULT_NOT_ATTEMPTED = 0;
RESULT_PERMISSION_GRANTED = 1;
RESULT_ERROR_USER_REJECT = 2;
RESULT_ERROR_ACTION_TIMEOUT = 3;
RESULT_ERROR_ACTION_CANCELED = 4;
}
// Information about access to the camera roll feature on a connected Android
// device
message CameraRollAccessState {
// Whether the user has explicitly granted permission to enable the Camera
// Roll feature which allows connected Chromebooks to access the phone's
// recent photos and media.
bool feature_enabled = 1;
// Whether necessary Android storage permissions have been granted to access
// camera roll items.
bool storage_permission_granted = 2;
}
// Information about the phone's support for cross-device feature setup.
message FeatureSetupConfig {
// Whether the phone supports setting up multiple features at the same time
// using the FeatureSetupRequest. When this is false, the notification
// feature will be set up using the legacy
// ShowNotificationAccessSetupRequest.
bool feature_setup_request_supported = 1;
// Supports responding to ping requests from the Chromebook. When this is
// false, the Chromebook should not send pings to the Phone.
bool ping_capability_supported = 2;
}
message PhoneProperties {
int32 battery_percentage = 1;
ChargingState charging_state = 2;
BatteryMode battery_mode = 3;
// Note: If |connection_state| is not SIM_WITH_RECEPTION,
// |signal_strength| and |mobile_provider| should be ignored.
MobileConnectionState connection_state = 4;
SignalStrength signal_strength = 5;
string mobile_provider = 6;
NotificationMode notification_mode = 7;
NotificationAccessState notification_access_state = 8;
FindMyDeviceRingStatus ring_status = 9;
ProfileType profile_type = 10;
ProfileDisableReason profile_disable_reason = 17;
FindMyDeviceCapability find_my_device_capability = 11;
DoNotDisturbCapability do_not_disturb_capability = 12;
int32 android_version = 13;
int64 gmscore_version = 14;
CameraRollAccessState camera_roll_access_state = 15;
// Note: This is whether the phone uses a lock screen(and not whether the
// phone is currently locked).
ScreenLockState screen_lock_state = 16;
// To hide recent apps for users that turn on quiet mode.
repeated UserState user_states = 18;
FeatureSetupConfig feature_setup_config = 19;
FeatureStatus eche_feature_status = 20;
// Next ID: 21
}
message UserState {
// Records each user's ID for filter in ChromeOS.
int64 user_id = 1;
// The state when user turn on/off apps/notification, e.g. in work profile.
bool is_quiet_mode_enabled = 2;
}
message App {
string package_name = 1;
string visible_name = 2;
bytes icon = 3;
int64 user_id = 4;
// When unset, the ChromeOS side uses the system theme's default color.
ColorRgb monochrome_icon_color = 6;
AppStreamabilityStatus app_streamability_status = 7;
optional bytes monochrome_icon_mask = 8;
reserved 5; // deprecated icon_stying field.
}
// Data required to verify the remote device.
// Next ID: 3
message AttestationData {
enum Type {
UNKNOWN = 0;
// A Chrome OS "soft-bind" certificate chain.
// The |certificates| field holds a PEM encoded X.509 certificate chain
// ordered from leaf to root.
CROS_SOFT_BIND_CERT_CHAIN = 1;
}
Type type = 1;
// The certificate data as specified by |type|.
repeated bytes certificates = 2;
}
message CrosState {
NotificationSetting notification_setting = 1;
CameraRollSetting camera_roll_setting = 2;
// Optional for older Chromebooks pre-attestation.
AttestationData attestation_data = 4;
reserved 3; // deprecated notification_icon_styling field.
}
message Action {
enum InputType {
UNKNOWN = 0;
TEXT = 1;
CONFIRMATION = 2;
OPEN = 3;
CANNED_REPLY = 4;
}
enum CallAction {
UNSPECIFIED = 0;
ANSWER = 1; // User can answer call for the CallStyle notification
DECLINE = 2; // User can decline call for the CallStyle notification
HANGUP = 3; // User can hang up call for the CallStyle notification
// User can start the screening call for the CallStyle notification
SCREENING = 4;
}
int64 id = 1;
string title = 2;
// Optional, but not specifying a type implies no response can be sent.
InputType type = 3;
// Only specified for actions in phone call notifications.
CallAction call_action = 4;
}
message Notification {
enum Category {
UNSPECIFIED = 0;
CONVERSATION = 1;
INCOMING_CALL = 2;
ONGOING_CALL = 3;
SCREEN_CALL = 4;
}
int64 id = 1;
int64 epoch_time_millis = 2;
App origin_app = 3;
NotificationImportance importance = 4;
string title = 5;
string text_content = 6;
repeated Action actions = 7;
// Optionals:
bytes contact_image = 8; // for messages
bytes background_image = 9; // for media
bytes shared_image = 10; // for messages
// The category of the notification, phone hub in CrOS will decide which
// category will be processed and display on CrOS notification,
Category category = 11;
}
// Stores the information about the apps that are ready to be streamed.
// We used a dedicated proto for this instead of inlining this to make it
// future proof.
message StreamableApps {
// List of apps that are ready to be streamed.
// The order of the apps in the list is important and is set by the source.
// The client should show the apps in the same order.
repeated App apps = 1;
}
message PhoneStatusSnapshot {
PhoneProperties properties = 1;
repeated Notification notifications = 2;
// TODO(nayebi): remove this and use AppListUpdate.recent_apps instead
StreamableApps streamable_apps = 3;
}
message PhoneStatusUpdate {
PhoneProperties properties = 1;
// Notifications which have changed since the last update.
repeated Notification updated_notifications = 2;
// IDs of notification which have been removed since the last update.
repeated int64 removed_notification_ids = 3;
// Whether camera roll items has changed on the Android device and need to be
// refeteched.
bool has_camera_roll_updates = 4;
}
message UpdateNotificationModeRequest {
NotificationMode notification_mode = 1;
}
message UpdateNotificationModeResponse {}
message RingDeviceRequest {
FindMyDeviceRingStatus ring_status = 1;
}
message RingDeviceResponse {}
message UpdateBatteryModeRequest {
BatteryMode battery_mode = 1;
}
message UpdateBatteryModeResponse {}
message DismissNotificationRequest {
int64 notification_id = 1;
}
message DismissNotificationResponse {}
message NotificationInlineReplyRequest {
int64 notification_id = 1;
string reply_text = 2;
}
message NotificationInlineReplyResponse {}
message ShowNotificationAccessSetupRequest {}
message ShowNotificationAccessSetupResponse {}
message FeatureSetupRequest {
bool notification_setup_requested = 1;
bool camera_roll_setup_requested = 2;
}
message FeatureSetupResponse {
FeatureSetupResult notification_setup_result = 1;
FeatureSetupResult camera_roll_setup_result = 2;
}
message AppStreamUpdate {
// This is optional by design and is set when the streamed app is changed.
optional App foreground_app = 1;
}
message AppListUpdate {
// List of apps available to stream, sorted by recency.
optional StreamableApps all_apps = 1;
optional StreamableApps recent_apps = 2;
}
// When adding new fields to this message, update CameraRollItem#operator==
// Located in chromeos/ash/components/phonehub/camera_roll_item.cc.
message CameraRollItemMetadata {
// A unique and stable identifier for camera roll items on the Android device.
string key = 1;
string file_name = 5;
string mime_type = 2;
int64 last_modified_millis = 3;
int64 file_size_bytes = 4;
// Next ID: 6
}
// Contains data needed to display the thumbnail of a camera roll item.
message CameraRollItemThumbnail {
enum Format {
UNKNOWN = 0;
JPEG = 1;
PNG = 2;
}
// The format in which the thumbnail is encoded.
Format format = 1;
// Encoded thumbnail bytes.
bytes data = 2;
}
// Represents a photo or video from a connected Android device's gallery.
message CameraRollItem {
CameraRollItemMetadata metadata = 1;
// Thumbnail data of the item. May not be set by the Android device if the
// up-to-date thumbnail is already available on the Chrome OS device.
CameraRollItemThumbnail thumbnail = 2;
}
// A command used by the Chrome OS device to fetch the up-to-date set of camera
// roll items that should be displayed.
message FetchCameraRollItemsRequest {
// The maximum number of camera roll items that can be displayed.
int32 max_item_count = 1;
// Metadata of camera roll items already available on the Chrome OS device.
repeated CameraRollItemMetadata current_item_metadata = 2;
}
message FetchCameraRollItemsResponse {
// The up-to-date set of camera roll items that should be displayed.
repeated CameraRollItem items = 1;
}
// A command to request a full-quality photo or video file from the connected
// Android device.
message FetchCameraRollItemDataRequest {
// Metadata of the requested camera roll item.
CameraRollItemMetadata metadata = 1;
}
// Next ID: 4
message FetchCameraRollItemDataResponse {
CameraRollItemMetadata metadata = 3;
enum FileAvailability {
UNKNOWN = 0;
AVAILABLE = 1;
NOT_FOUND = 2;
}
// Indicates whether the requested file is available and can be sent to the
// Chrome OS device.
FileAvailability file_availability = 1;
// A payload ID that the Chrome OS device should use to create a new local
// file for storing the incoming file content via the Nearby Connections API.
int64 payload_id = 2;
}
// A command to let the connected Android device start transferring the
// requested camera roll item via Nearby Connections. This should be issued
// after the Chrome OS device has allocated a new file with the provided payload
// ID.
message InitiateCameraRollItemTransferRequest {
// Metadata of the camera roll item requested.
CameraRollItemMetadata metadata = 1;
// The payload ID provided by the connected Android device for the requested
// camera roll item.
int64 payload_id = 2;
}
message PingRequest {}
message PingResponse {}
message ColorRgb {
uint32 red = 1;
uint32 green = 2;
uint32 blue = 3;
};