// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
syntax = "proto2";
package personalization.context;
// Represents the parameters for a time-based fence.
message TimeFence {
enum TriggerType {
UNKNOWN_TIME_FENCE_TRIGGER_TYPE = 0;
ABSOLUTE_INTERVAL = 1;
DAILY_INTERVAL = 2;
WEEKEND_INTERVAL = 3;
WEEKDAY_INTERVAL = 4;
SUNDAY_INTERVAL = 5;
MONDAY_INTERVAL = 6;
TUESDAY_INTERVAL = 7;
WEDNESDAY_INTERVAL = 8;
THURSDAY_INTERVAL = 9;
FRIDAY_INTERVAL = 10;
SATURDAY_INTERVAL = 11;
// The enum type AFTER_LOCAL_TIME is not supported, and is here only for
// backwards compatibility
AFTER_LOCAL_TIME = 12;
}
optional TriggerType trigger_type = 1;
// Unused for ABSOLUTE_INTERVAL. For all other types, this
// represents the time zone to determine when the beginning of
// day is.
// If the flag use_local_time_zone is set to True, this is not set.
optional string time_zone = 2;
// For ABSOLUTE_INTERVAL, this is the time in millis since epoch
// January 1, 1970. For other intervals, this is the time in
// millis since the start of the day (where midnight is 0 and
// 24*60*60*1000 millis is the end of the day).
// This should not be set if triggerType is AFTER_LOCAL_TIME.
optional int64 start_time_millis = 3;
// For ABSOLUTE_INTERVAL, this is the time in millis since epoch
// January 1, 1970. For other intervals, this is the time in
// millis since the start of the day (where midnight is 0 and
// 24*60*60*1000 millis is the end of the day).
// This should not be set if triggerType is AFTER_LOCAL_TIME.
optional int64 stop_time_millis = 4;
// Used for representing the 'AFTER_LOCAL_TIME' trigger.
// NOTE: DEPRECATED, AND UNSUPPORTED. DO NOT USE.
optional DateTime date = 5 [deprecated = true];
// Used to specify whether a local time zone at device location should
// be used for the time fence.
optional bool use_local_time_zone = 6;
}
// Represents the parameters for a location-based fence.
message LocationFence {
// The type of trigger for this location fence.
enum TriggerType {
UNKNOWN_LOCATION_FENCE_TRIGGER_TYPE = 0;
// Represents a fence which is triggered when the user's location
// is within this location fence.
IN = 1;
// Represents a fence which is triggered when the user enters
// this location fence.
ENTERING = 2;
// Represents a fence which is triggered when the user exits
// this location fence.
EXITING = 3;
}
// The type indicating how this location fence's geometry is defined.
enum GeometryType {
UNKNOWN_LOCATION_FENCE_GEOMETRY_TYPE = 0;
// Represents a location fence's boundary as a center and radius.
CIRCLE = 1;
}
optional TriggerType trigger_type = 1;
optional GeometryType geometry_type = 2;
// Unused for trigger type IN.
// For trigger types ENTERING and EXITING, this is window of time
// in millis after detecting that the user has entered or exited the
// location fence, during which this fence is considered triggered.
// This parameter is needed to account for the async nature of context
// data collection.
optional int64 delta_time_millis = 3;
// For GeometryType CIRCLE, this represents the center latitude
// in E7 representation.
optional int32 center_latitude_e7 = 4;
// For GeometryType CIRCLE, this represents the center longitude
// in E7 representation.
optional int32 center_longitude_e7 = 5;
// For GeometryType CIRCLE, this represents the outer radius in meters of
// the circular region. A user's location transitions from inside to
// outside only when the user's location is found to be farther than
// outer_radius_meters away from the center.
// Note that the outer_radius_meters must be greater than or equal to
// inner_radius_meters, and effectively, implements hysteresis to deal
// with noisy location data.
optional double outer_radius_meters = 6;
// For GeometryType CIRCLE, this represents the inner radius of the circular
// region. A user's location transitions from outside to inside only when
// the user's location is found to be closer than inner_radius_meters away
// from the center.
// Note that the inner_radius_meters must be less than or equal to
// outer_radius_meters, and effectively, implement hysteresis to deal with
// noisy location data.
optional double inner_radius_meters = 7;
// Used for trigger type IN.
// For trigger type IN, it indicates the minimum dwell time at a location
// before triggering the location fence.
optional int64 dwell_time_millis = 8;
}
// Represents the parameters for a place-based fence.
message PlaceFence {
// The type of trigger for this place fence.
enum TriggerType {
UNKNOWN_PLACE_FENCE_TRIGGER_TYPE = 0;
// Represents a fence which is triggered when the user's place
// is one of the specified places (either matches one of the
// place types or matches one of the place ids).
IN = 1;
// Represents a fence which is triggered when the user enters
// one of the specified places from some other place.
ENTERING = 2;
// Represents a fence which is triggered when the user is
// currently in one of the specified places and exits to some
// other place.
EXITING = 3;
// Represents a fence which is triggered when the place changes
// in successive screen on events.
SCREEN_ON_CHANGE = 4;
// Represents a fence which is triggered when CURRENT_PLACE context changes.
AT_A_PLACE_CHANGE = 5;
}
optional TriggerType trigger_type = 1;
// Unused for trigger type IN.
// For trigger types ENTERING and EXITING, this is window of time
// in millis after detecting that the user has entered or exited the
// place fence, during which this fence is considered triggered.
// This parameter is needed to account for the async nature of context
// data collection.
optional int64 delta_time_millis = 2;
// List of place types as provided by the PlacesApi. This field will not be
// filled in for
// the SCREEN_ON_CHANGE trigger type. See
// https://cs.corp.google.com/piper///depot/google3/java/com/google/android/gmscore/dev/client/placefencing/src/com/google/android/gms/location/places/Place.java
// Only one place_type, or one place_id, or one place_alias, or one
// place_chain_name can be set.
repeated int32 place_type = 3;
// List of place ids. This field will not be filled in for the
// SCREEN_ON_CHANGE trigger type.
// See Places.getId()
// https://cs.corp.google.com/piper///depot/google3/java/com/google/android/gmscore/dev/client/placefencing/src/com/google/android/gms/location/places/Place.java
// Only one place_type, or one place_id, or one place_alias, or one
// place_chain_name can be set.
repeated string place_id = 4;
// Used for trigger type IN.
// For trigger type IN, it indicates the minimum dwell time in a place
// before triggering the Place fence.
optional int64 dwell_time_millis = 5;
// List of place aliases. This field will not be filled in for the
// SCREEN_ON_CHANGE trigger type.
// See PlaceAlias.getAlias()
// https://cs.corp.google.com/piper///depot/google3/java/com/google/android/gmscore/dev/client/places/src/com/google/android/gms/location/places/personalized/PlaceAlias.java
// Only one place_type, or one place_id, or one place_alias, or one
// place_chain_name can be set.
repeated string place_alias = 6;
// Name of the place chain like Walmart, AMC etc,.
// Only one place_type, or one place_id, or one place_alias, or one
// place_chain_name can be set.
optional string place_chain_name = 7;
// Optional field to set the timestamp for this fence.
// This is ignored by contextmanager, but can be used to force (AGSA) client
// into treating this fence as logically different, even if other fields are
// identical.
optional int64 creation_timestamp = 8;
}
// This message encapsulates the context specific data.
message ContextExtension {
// Context specific data is attached as an extension.
extensions 1000 to max;
}
message DetectedActivity {
extend ContextExtension { optional DetectedActivity data = 77815057; }
message ActivityRecord {
// NextId: 22
// Note: This enum must be kept in sync (including tag numbers) with
// google3/java/com/google/geo/sidekick/proto/detected_activity.proto
// google3/location/unified/proto/location_descriptor.proto
enum Type {
// LINT.IfChange
IN_VEHICLE = 0;
ON_BICYCLE = 1;
ON_FOOT = 2;
STILL = 3;
UNKNOWN = 4;
TILTING = 5;
EXITING_VEHICLE = 6;
WALKING = 7;
RUNNING = 8;
OFF_BODY = 9;
TRUSTED_GAIT = 10;
FLOOR_CHANGE = 11;
ON_STAIRS = 12;
ON_ESCALATOR = 13;
IN_ELEVATOR = 14;
SLEEPING = 15;
IN_ROAD_VEHICLE = 16;
IN_RAIL_VEHICLE = 17;
IN_TWO_WHEELER_VEHICLE = 18;
IN_FOUR_WHEELER_VEHICLE = 19;
IN_CAR = 20;
IN_BUS = 21;
// This is to support EXPERIMENTAL_EXTRA_PERSONAL_VEHICLE until
// Activity Recognition team figures out their API.
EXPERIMENTAL_EXTRA_PERSONAL_VEHICLE = -1000;
// LINT.ThenChange(
// //depot/google3/java/com/google/geo/sidekick/proto/detected_activity.proto,
// //depot/google3/location/unified/proto/location_descriptor.proto
// )
}
// The type of activity.
optional Type type = 1;
// The confidence of the detection. Range is [0, 100].
optional int32 confidence = 2;
}
repeated ActivityRecord activity_record = 2;
}
// Represents the parameters for an activity-based fence.
message ActivityFence {
enum TriggerType {
UKNOWN_ACTIVITY_FENCE_TRIGGER_TYPE = 0;
// Represents a fence which is triggered when the user's activity
// is one of the specified activity types.
DURING = 1;
// Represents a fence which is triggered when the user starts
// one of the specified activity types from some other activity type.
STARTING = 2;
// Represents a fence which is triggered when the user is
// currently in one of the specified activity types but transitions
// to some other activity type.
STOPPING = 3;
}
optional TriggerType trigger_type = 1;
// Unused for trigger type DURING.
// For trigger types STARTING and STOPPING, this is window of time
// in millis after detecting that the user has started or stopped the
// activity types, during which this fence is considered triggered.
// This parameter is needed to account for the async nature of context
// data collection.
optional int64 delta_time_millis = 2;
// List of activity types that are considered part of this fence.
repeated DetectedActivity.ActivityRecord.Type activity_type = 3;
}
// This represents the state of the device screen.
message Screen {
extend ContextExtension { optional Screen data = 79284926; }
enum State {
// Unknown screen state. All discrete states
// like this should have an UNKNOWN enum set to 0.
UNKNOWN = 0;
// Screen is off.
OFF = 1;
// Screen is on.
ON = 2;
}
// Screen state
optional State state = 1;
}
// Represents the parameters for a fence based on screen on/off state
message ScreenFence {
enum TriggerType {
UNKNOWN_SCREEN_FENCE_TRIGGER_TYPE = 0;
// Represents a fence which is triggered when the screen is either
// on or off
DURING = 1;
// Represents a fence which is triggered when the screen is turning
// on.
TURNING_ON = 2;
// Represents a fence which is triggered when the screen it turning
// off.
TURNING_OFF = 3;
}
optional TriggerType trigger_type = 1;
// Unused for trigger type DURING.
// For trigger types TURNING_ON and TURNING_OFF, this is the window of
// time in millis after detecting that the device's screen has turned
// on or off. This parameter is needed to account for the async nature
// of context data collection.
optional int64 delta_time_millis = 2;
// Used only for trigger type DURING. This indicates whether the screen is
// on or off.
optional Screen.State screen_state = 3;
}
// This represents the state of the headphones.
message AudioState {
extend ContextExtension { optional AudioState data = 91925232; }
enum HeadPhoneState {
UNKNOWN_HEADPHONE_STATE = 0;
// Headphone is plugged.
PLUGGED = 1;
// Headphone is unplugged.
UNPLUGGED = 2;
}
// Deprecated. Results may not be valid
enum BluetoothA2DPState {
UNKNOWN_BLUETOOTH_A2DP_STATE = 0;
// State when A2DP audio routing to the Bluetooth headset is
// on.
BLUETOOTH_A2DP_ON = 1;
// State when A2DP audio routing to the Bluetooth headset is
// off.
BLUETOOTH_A2DP_OFF = 2;
}
enum BluetoothSCOState {
UNKNOWN_BLUETOOTH_SCO_STATE = 0;
// State when SCO audio routing to the Bluetooth headset is
// on.
BLUETOOTH_SCO_ON = 1;
// State when SCO audio routing to the Bluetooth headset is
// off.
BLUETOOTH_SCO_OFF = 2;
}
enum MicrophoneState {
UNKNOWN_MICROPHONE_STATE = 0;
// State indicating if the microphone mute is on.
MICROPHONE_MUTE_ON = 1;
// State indicating if the microphone mute is off.
MICROPHONE_MUTE_OFF = 2;
}
enum MusicState {
UNKNOWN_MUSIC_STATE = 0;
// State indicating when some music is playing.
MUSIC_ACTIVE = 1;
// State indicating when music is not active.
MUSIC_INACTIVE = 2;
}
enum SpeakerPhoneState {
UNKNOWN_SPEAKERPHONE_STATE = 0;
// State indicating if the speakerphone is on.
SPEAKER_PHONE_ON = 1;
// State indicating if the speakerphone is off.
SPEAKER_PHONE_OFF = 2;
}
optional HeadPhoneState headphone_state = 1;
optional BluetoothA2DPState bluetooth_a2dp_state = 2 [deprecated = true];
optional BluetoothSCOState bluetooth_sco_state = 3 [deprecated = true];
optional MicrophoneState microphone_state = 4;
optional MusicState music_state = 5;
optional SpeakerPhoneState speakerphone_state = 6;
}
// Represents the parameters for a fence based on audio state.
// This audio state is derived from Android's AudioManager
// For More details about AudioManager API refer here -
// http://developer.android.com/reference/android/media/AudioManager.html
message AudioStateFence {
enum TriggerType {
UNKNOWN_AUDIO_STATE_FENCE_TRIGGER_TYPE = 0;
HEADPHONE_DURING = 1;
HEADPHONE_PLUGGING = 2;
HEADPHONE_UNPLUGGING = 3;
BLUETOOTH_A2DP_DURING = 4 [deprecated = true];
BLUETOOTH_A2DP_TURNING_ON = 5 [deprecated = true];
BLUETOOTH_A2DP_TURNING_OFF = 6 [deprecated = true];
BLUETOOTH_SCO_DURING = 7 [deprecated = true];
BLUETOOTH_SCO_TURNING_ON = 8 [deprecated = true];
BLUETOOTH_SCO_TURNING_OFF = 9 [deprecated = true];
MICROPHONE_DURING = 10;
MICROPHONE_MUTING = 11;
MICROPHONE_UNMUTING = 12;
MUSIC_DURING = 13;
MUSIC_ACTIVATING = 14;
MUSIC_DEACTIVATING = 15;
SPEAKER_PHONE_DURING = 16;
SPEAKER_PHONE_TURNING_ON = 17;
SPEAKER_PHONE_TURNING_OFF = 18;
}
optional TriggerType trigger_type = 1;
// Unused for trigger types *_DURING. Required for all others.
// This is the window of time in millis after detecting that the audio state
// has changed during which the context fence will still trigger. This
// parameter is needed to account for the async nature of context data
// collection. A non-zero value must be specified, otherwise the fence will
// never trigger.
optional int64 delta_time_millis = 2;
// Used only for trigger types during.
// Any give time at most one of these states will be set depending upon the
// During trigger type.
optional AudioState.HeadPhoneState headphone_state = 3;
optional AudioState.BluetoothA2DPState bluetooth_a2dp_state = 4
[deprecated = true];
optional AudioState.BluetoothSCOState bluetooth_sco_state = 5
[deprecated = true];
optional AudioState.MicrophoneState microphone_state = 6;
optional AudioState.MusicState music_state = 7;
optional AudioState.SpeakerPhoneState speakerphone_state = 8;
}
// This represents the state of the phone if it is locked or not.
message PhoneLock {
extend ContextExtension { optional PhoneLock data = 91835270; }
enum State {
// Unknown state. All discrete states
// like this should have an UNKNOWN enum set to 0.
UNKNOWN = 0;
// Phone is unlocked.
UNLOCKED = 1;
// Phone is locked.
LOCKED = 2;
}
optional State state = 1;
}
// Represents the parameters for a fence based on phone lock/unlock state
message PhoneLockFence {
enum TriggerType {
UNKNOWN_PHONE_LOCK_FENCE_TRIGGER_TYPE = 0;
// Represents a fence which is triggered when the screen is either
// on or off
DURING = 1;
// Represents a fence which is triggered when the phone is unlocked.
UNLOCKING = 2;
// Represents a fence which is triggered when the phone is locked.
LOCKING = 3;
}
optional TriggerType trigger_type = 1;
// Unused for trigger type DURING. Required for UNLOCKING and LOCKING.
// This is the window of time in millis after detecting that the device has
// been locked or unlocked during which the context fence will still trigger.
// This parameter is needed to account for the async nature of context data
// collection. A non-zero value must be specified, otherwise the fence will
// never trigger.
optional int64 delta_time_millis = 2;
// Used only for trigger type DURING. This indicates whether the phone is
// locked or unlocked.
optional PhoneLock.State phone_lock_state = 3;
}
// This represents whether the device is connected to power.
message PowerConnection {
extend ContextExtension { optional PowerConnection data = 87654321; }
enum State {
// Unknown power connection state. All discrete states
// like this should have an UNKNOWN enum set to 0.
UNKNOWN = 0;
// Device is not connected to a power source.
DISCONNECTED = 1;
// Device is connected to USB power.
CONNECTED_USB = 2;
// Device is connected to AC power.
CONNECTED_AC = 3;
// Device is connected to wireless power.
CONNECTED_WIRELESS = 4;
}
// Power connection state
optional State state = 1;
// The battery level of the device (0.0-1.0).
optional double battery_level = 2;
}
// Represents the parameters for a fence based on battery level or
// plugged in state.
message PowerConnectionFence {
enum TriggerType {
UNKNOWN_POWER_CONNECTION_FENCE_TRIGGER_TYPE = 0;
// Represents a fence for which the battery level is within an
// interval. For example, battery level between 30% and 80% is
// represented by battery_level_lower_bound=.3 and
// battery_level_upper_bound=.8. Because the battery level
// can only range from 0.0 to 1.0, you can represent battery level
// greater than a threshold, say 70%, by setting
// battery_level_lower_bound=.7 and
// battery_level_upper_bound=1.0. To represent battery level less
// than a threshold, say 20%, you can set
// battery_level_lower_bound=0.0 and battery_level_upper_bound=0.2.
BATTERY_LEVEL_IN = 1;
// Represents a fence when the battery level enters the interval.
BATTERY_LEVEL_ENTERING = 2;
// Represents a fence when the battery level exits the interval.
BATTERY_LEVEL_EXITING = 3;
// Represents a fence when the plugged in state is one of the
// specified states.
PLUGGED_IN_STATE_DURING = 4;
// Represents a fence when the plugged in state transitions to one
// of the specified states.
PLUGGED_IN_STATE_STARTING = 5;
// Represents a fence when the plugged in state transitions out
// of one of the specified states.
PLUGGED_IN_STATE_STOPPING = 6;
}
optional TriggerType trigger_type = 1;
// Used for BATTERY_LEVEL_IN, BATTERY_LEVEL_ENTERING, and
// BATTERY_LEVEL_EXITING. This is the lower bound of the
// battery level interval. This ranges in value from 0.0 to 1.0.
optional double battery_level_lower_bound = 2;
// Used for BATTERY_LEVEL_IN, BATTERY_LEVEL_ENTERING, and
// BATTERY_LEVEL_EXITING. This is the upper bound of the
// battery level interval. This ranges in value from 0.0 to 1.0.
// This value must be greater than or equal to
// battery_level_lower_bound.
optional double battery_level_upper_bound = 3;
// Required for trigger types BATTERY_LEVEL_ENTERING, BATTERY_LEVEL_EXITING,
// PLUGGED_IN_STATE_STARTING, and PLUGGED_IN_STATE_STOPPING.
// This is the window of time in millis after detecting that the device's
// state has changed during which the context fence will still trigger. This
// parameter is needed to account for the async nature of context data
// collection. A non-zero value must be specified, otherwise the fence will
// never trigger.
optional int64 delta_time_millis = 4;
// Used for DURING_PLUGGED_IN_STATE, STARTING_PLUGGED_IN_STATE, and
// STOPPING_PLUGGED_IN_STATE.
repeated PowerConnection.State plugged_in_state = 5;
}
// Represents a fence that is triggered when detecting a beacon
// that contains a beacon attachment of the given types.
message BeaconFence {
enum TriggerType {
UNKNOWN_BEACON_FENCE_TRIGGER_TYPE = 0;
// Represents a fence that is triggered when a beacon is
// detected. The fence is triggered every time a unique
// beacon is found that matches the set of beacon_type_filters.
// Uniqueness for a beacon means that the (namespace,type,content)
// triple is unique.
FOUND = 1;
// Represents a fence that is triggered when a beacon is
// no longer detectable. The fence is triggered every time
// a unique beacon is lost that matches the set of
// beacon_type_filters. Uniqueness for a beacon means that the
// (namespace,type,content) triple is unique.
LOST = 2;
// Represents a fence that is triggered when a beacon has been
// found and is not lost.
NEAR = 3;
}
optional TriggerType trigger_type = 1;
// Represents the set of beacon types (i.e., namespace/type pairs)
// that encompass this beacon fence. If none is set, then this
// beacon fence will never trigger.
// DEPRECATED, fill in beacon_type_filter instead.
// repeated detected_beacon.DetectedBeacon.Type beacon_type = 2;
// NOTE: do not reuse field number 2
// Used for FOUND and LOST. This is the window of time in millis
// after detecting that a beacon was either found or lost that
// the transition is considered true. This is needed to account
// for the async nature of context data collection.
optional int64 delta_time_millis = 3;
message BeaconTypeFilter {
// REQUIRED
// Namespace of the beacon attachment to match against.
// e.g., "com.google.location.beaconservice"
optional string namespace = 1;
// REQUIRED
// Type of the beacon attachment to match against.
// e.g., "geo-message-dogfood"
optional string type = 2;
// OPTIONAL
// Indicates the content to match against in terms of
// a byte array equals. Do not set this if you do not
// want to match against specific content.
optional bytes content = 3;
}
repeated BeaconTypeFilter beacon_type_filter = 4;
// Deprecated fields
reserved 2;
}
// This represents the state of the phone's network connection,
// i.e. whether the phone is connected to a network and if connected,
// whether it is on WiFi or Cellular.
message NetworkState {
extend ContextExtension { optional NetworkState data = 95555291; }
enum ConnectionState {
// Unknown state. All discrete states
// like this should have an UNKNOWN enum set to 0.
UNKNOWN_STATE = 0;
// Phone is not connected to network.
DISCONNECTED = 1;
// Phone is connected to network via WiFi
ON_WIFI = 2;
// Phone is connected to network via Cellular
ON_CELLULAR = 3;
}
// connection_state is a REQUIRED field
optional ConnectionState connection_state = 1;
enum MeterState {
// Unknown meter state
UNKNOWN_METER_TYPE = 0;
// Metered network connection
METERED = 1;
// Unmetered network connection
UNMETERED = 2;
}
// meter_state field is omitted when connection_state is UNKNOWN_STATE
// or DISCONNECTED; it is required when state is ON_CELLULAR or ON_WIFI
optional MeterState meter_state = 2;
message WifiInfo {
// bssid of the currently connected Wifi connection
optional string bssid = 1;
// ssid of the currently connected Wifi connection
optional string ssid = 2;
}
// connected_wifi_info is only populated when connection_state is connected
optional WifiInfo connected_wifi_info = 3;
}
// Represents the parameters for a fence pertaining to network state
// (disconnected, connected to network via WiFi, or Cellular.
message NetworkStateFence {
enum TriggerType {
UNKNOWN_NETWORK_STATE_FENCE_TRIGGER_TYPE = 0;
// Represents a fence which is triggered when the connection state of the
// device
// is one of the specified states in the connection_state field below.
CONNECTION_DURING = 1;
// Represents a fence which is triggered when the device gets into
// one of the specified connection states from some other connection state.
CONNECTION_STARTING = 2;
// Represents a fence which is triggered when the device is
// currently in one of the specified connection states but transitions
// to some other connection state.
CONNECTION_STOPPING = 3;
// Represents a fence which is triggered when the meter state of the device
// is one of the specified states in the connection_state field below.
METER_DURING = 4;
// Represents a fence which is triggered when the device gets into
// one of the specified meter states from some other meter state.
METER_STARTING = 5;
// Represents a fence which is triggered when the device is
// currently in one of the specified meter states but transitions
// to some other meter state.
METER_STOPPING = 6;
}
optional TriggerType trigger_type = 1;
// Unused for trigger types DURING. Required for STARTING and STOPPING.
// This is the window of time in millis after detecting that the network state
// has changed during which the context fence will still trigger. This
// parameter is needed to account for the async nature of context data
// collection. A non-zero value must be specified, otherwise the fence will
// never trigger.
optional int64 delta_time_millis = 2;
// A valid NetworkStateFence proto should have only one of the following two
// fields set. i.e. the fence can be over a subset of either connection
// states or meter states but not both.
// connection_state indicates the list of connection states that are
// considered part of this fence.
// connection_state is set in the proto only if the trigger_type is set to
// CONNECTION_DURING, CONNECTION_STARTING, or CONNECTION_STOPPING.
repeated NetworkState.ConnectionState connection_state = 3;
// meter_state indicates the list of meter states that are considered part of
// this fence.
// meter_state is set in the proto only if the trigger_type is set to
// METER_DURING, METER_STARTING, or METER_STOPPING.
repeated NetworkState.MeterState meter_state = 4;
}
// The fence defines a device to be 'IN wandering' state if it has moved more
// than 'wander_distance_meters' in past interval 'wander_time_interval_hours'.
message WanderStateFence {
enum TriggerType {
UNKNOWN_WANDER_STATE_FENCE_TRIGGER_TYPE = 0;
// Represents a fence which is triggered when the device is in a state
// where it is moving by at least 'wander_distance_meters' in a time
// interval of 'wander_time_millis'
IS_WANDERING = 1;
// Represents a fence which is triggered when the device is entering a
// wander state specified by the device moving by at least
// 'wander_distance_meters' in a time interval of 'wander_time_millis'
STARTING_WANDER = 2;
// Represents a fence which is triggered when the device is leaving a
// wander state specified by the device moving by at least
// 'wander_distance_meters' in a time interval of 'wander_time_millis'
STOPPING_WANDER = 3;
}
optional TriggerType trigger_type = 1;
// Unused for trigger type IS_WANDERING.
// For trigger types STARTING and STOPPING, this is window of time
// in millis after detecting that the wander state has changed,
// during which this fence is considered triggered.
// This parameter is needed to account for the async nature of context
// data collection.
optional int64 delta_time_millis = 2;
// the minimum distance that the phone needs to move for it to be evaluated
// to be in wander state for this fence
optional float wander_distance_meters = 3;
// the time interval in hours during which the device should have covered
// 'wander_distance_meters' for it to be evaluated to be in wander state
// for this fence. This must be an integer number of hours between 1 and 20.
// There is a 20 hour limit because the maximum period of location history
// available on the phone is only 20 hours.
optional int32 wander_time_interval_hours = 4;
}
// Represents the attributes of the day corresponding to the
// current time and locale.
// As examples, some attributes are: MORNING, AFTERNOON, EVENING,
// WEEKDAY, WEEKEND, HOLIDAY.
message DayAttributes {
extend ContextExtension { optional DayAttributes data = 121436786; }
enum DayAttributeType {
// Unknown attribute type. All discrete types
// like this should have an UNKNOWN enum set to 0.
UNKNOWN = 0;
// Denotes a weekday for the device locale at the current time
WEEKDAY = 1;
// Denotes a weekend for the device locale at the current time
WEEKEND = 2;
// Denotes a government-sanctioned holiday for the device locale
// at the current time
HOLIDAY = 3;
// Denotes the period of a day that is classified as morning
MORNING = 4;
// Denotes the period of a day that is classified as afternoon
AFTERNOON = 5;
// Denotes the period of a day that is classified as evening
EVENING = 6;
// Denotes the period of a day that is classified as night
NIGHT = 7;
}
repeated DayAttributeType day_attribute_types = 1;
}
// Represents the parameters for a time-based fence.
message TimeIntervalFence {
enum TriggerType {
UNKNOWN_TIME_INTERVAL_FENCE_TRIGGER_TYPE = 0;
// Represents a fence which is triggered when one of the attributes for
// the local time for the device is the attribute specified for the fence
// in 'day_attribute' parameter
IN = 1;
// Represents a fence which is triggered when one of the attributes for
// the local time for the device transitions into being equal to the
// attribute specified for the fence in 'day_attribute' parameter,
// and the previous attribute before the transition was not equal
// to the 'day_attribute' parameter
STARTING = 2;
// Represents a fence which is triggered when one of the attributes for
// the local time for the device transitions to being not equal to the
// attribute specified for the fence in 'day_attribute' parameter,
// and the previous attribute before the transition was equal
// to the 'day_attribute' parameter
STOPPING = 3;
}
optional TriggerType trigger_type = 1;
// Used to specify one of the DAY_ATTRIBUTE related triggers
optional DayAttributes.DayAttributeType time_interval_type = 2;
}
// Represents the installed apps fence
message InstalledAppsFence {
enum TriggerType {
UNKNOWN_INSTALLED_APPS_TRIGGER_TYPE = 0;
// Used for the fence which is triggered when the app is installed.
INSTALLED = 1;
// Used for the fence which is triggered when the app is not installed.
NOT_INSTALLED = 2;
}
optional TriggerType trigger_type = 1;
// The package to check for the installed status
optional string package_name = 2;
}
// Represents the phone call fence
message PhoneCallFence {
enum TriggerType {
UNKNOWN_PHONE_CALL_TRIGGER_TYPE = 0;
// Used for the fence which is triggered when the user is in a phone call.
IN_CALL = 1;
// Used for the fence which is triggered when the user is not in a phone
// call.
NOT_IN_CALL = 2;
}
optional TriggerType trigger_type = 1;
}
// Represents the proximity distance fence
message ProximityDistanceFence {
enum TriggerType {
UNKNOWN_PROXIMITY_DISTANCE_TRIGGER_TYPE = 0;
// Used for the fence which is triggered when the proximity sensor is far
// from an object.
FAR_AWAY = 1;
// Used for the fence which is triggered when the proximity sensor is near
// to an object.
NEAR = 2;
}
optional TriggerType trigger_type = 1;
}
// Represents a time fence expressed in terms of moments of the day
message SunStateFence {
enum TriggerType {
UNKNOWN_MOMENT_FENCE_TRIGGER_TYPE = 0;
// Time triggers specified based on sunrise times
AROUND_SUNRISE = 1;
// Time triggers specified based on sunset times
AROUND_SUNSET = 2;
}
optional TriggerType trigger_type = 1;
// Absolute value of begin_relative_to_sun_state_millis
// cannot exceed total millis in a day.
// begin_relative_to_sun_state_millis cannot be later than
// end_relative_to_sun_state_millis.
optional int64 begin_relative_to_sun_state_millis = 3;
// Absolute value of end_relative_to_sun_state_millis
// cannot exceed total millis in a day.
// end_relative_to_sun_state_millis cannot be earlier
// than begin_relative_to_sun_state_millis.
optional int64 end_relative_to_sun_state_millis = 4;
}
// Represents a weather fence that triggers when specified criteria
// on weather connditions, temperatures or humidity is met
message WeatherFence {
enum TriggerType {
UNKNOWN_WEATHER_FENCE_TRIGGER_TYPE = 0;
// Fence that triggers when the temperature in the device's location
// is in a specified range.
IN_TEMPERATURE_RANGE = 1;
// Fence that triggers when the feels-like temperature in the device's
// location is in a specified range.
IN_FEELS_LIKE_TEMPERATURE_RANGE = 2;
// Fence that triggers when the dew point in the device's location
// is in a specified range.
IN_DEW_POINT_RANGE = 3;
// Fence that triggers when the humidity in the device's location
// is in a specified range.
IN_HUMIDITY_RANGE = 4;
// Fence that triggers when the weather condition in the device's location
// is the specified condition
IN_CONDITION = 5;
}
optional TriggerType trigger_type = 1;
// Low value of the temperature range of the weather fence.
// Used only for trigger types IN_TEMPERATURE_RANGE,
// IN_FEELS_LIKE_TEMPERATURE_RANGE, IN_DEW_POINT_RANGE.
// Note: low_temp_f < high_temp_f for a valid fence.
optional float low_temp_f = 2;
// High value of the temperature range of the weather fence.
// Used only for trigger types IN_TEMPERATURE_RANGE,
// IN_FEELS_LIKE_TEMPERATURE_RANGE, IN_DEW_POINT_RANGE.
// Note: low_temp_f < high_temp_f for a valid fence.
optional float high_temp_f = 3;
// Low value of the humidity range of the weather fence.
// Used only for trigger type IN_HUMIDITY_RANGE.
// Note: low_humidity < high_temp_f for a valid fence.
optional int32 low_humidity = 4;
// High value of the temperature range of the weather fence.
// Used only for trigger type IN_HUMIDITY_RANGE.
// Note: low_humidity < high_humidity for a valid fence.
optional int32 high_humidity = 5;
// Desired type of weather condition for the fence.
// Used only for trigger types IN_CONDITION
// This should be set to one of the values in:
// Weather.WeatherCondition.Type or
// com.google.android.gms.awareness.state.Weather.WeatherCondition
optional int32 condition_type = 6;
}
// Represents the parameters for a shush state fence
message ShushStateFence {}
// Represents the parameters for a wifi state fence
message WifiStateFence {
enum TriggerType {
UNKNOWN_WIFI_FENCE_TRIGGER_TYPE = 0;
// Fence triggers when a matching access point is connected
CONNECTED = 1;
// Fence triggers when a matching access point is detectable
FOUND = 2;
}
optional TriggerType trigger_type = 1;
// If provided, matches when an access point has given bssid
optional string bssid = 2;
// If provided, matches when an access point has given ssid
optional string ssid = 3;
}
// Names of the different contexts. The enum here is meant to grow as more
// contexts are defined. Names are loosely organized (and corresponding proto
// tag numbers) by family. See ContextFamily for description of what families
// entail. It is understood that some context names may fall under multiple
// families but should be tagged with whatever is deemed the more prominent
// family grouping.
//
// The ContextName directly maps to a proto (if one exists) that is put in
// the extension of a Context object. These protos are stored
// in subdirectories under //personalization/context/proto according to the
// name. (E.g., for SCREEN and POWER_CONNECTION, the corresponding protos
// are stored in //personalization/context/proto/screen/screen.proto and
// //personalization/context/proto/power_connection/power_connection.proto.
//
// A ContextName can also be mapped to a model that may be used to generate
// a context for a particular type. Each model name should strictly be suffixed
// with '_MODEL' to indicate that it is a Model. It is also fine if multiple
// contexts share the same model.
//
// Namespaces of 1 - 10000 is reserved for Contexts.
// For any clarification, always contact context-team@
enum ContextName {
// The context name is unknown.
UNKNOWN_CONTEXT_NAME = 0;
// The user's current location.
USER_LOCATION = 1;
// How familiar the user is with their current location (tourist vs. local).
USER_LOCATION_FAMILIARITY = 2 [deprecated = true];
// Predicted future locations that the user will be at.
USER_LOCATION_FORECAST = 3 [deprecated = true];
// The Maps viewport that the user is currently looking at.
MAPS_VIEWPORT = 4;
// How familiar the user is with the Maps viewport they are currently looking
// at (tourist vs. local).
MAPS_VIEWPORT_FAMILIARITY = 5;
// Detected activity of the user.
DETECTED_ACTIVITY = 6;
// Device screen state: on/off
SCREEN = 7;
// Device power connection state: connected/disconnected
POWER_CONNECTION = 8;
// Signal related to current trust state of the device (ex. Connection state
// of devices, signals from facial recognition, user activity or location
// affinity.
TRUST_SIGNAL = 9;
// A decision evaluated by a decision engine about how much the device is
// currently secure.
TRUST_DECISION = 10;
// Use these context names if experimenting with the Context Manager for the
// first time. In order to query for experimental context types, be sure
// to include keys in the Key field when inserting Context objects into
// Context Manager. For more information see go/experimental-context-name
// EXPERIMENTAL1_UPLOAD_RESTRICTED is an upload restricted context name,
// meaning it will not be uploaded to the backend context manager server.
// Use this for experimental contexts that are prohibited from syncing.
EXPERIMENTAL1_UPLOAD_RESTRICTED = 11;
// The 2 and 3 are not upload restricted. These will be synced to the
// backend.
EXPERIMENTAL2_UPLOAD_OK = 12;
EXPERIMENTAL3_UPLOAD_OK = 13;
// Snapped-to-road locations as provided by GMM in navigation mode.
SNAPPED_TO_ROAD_LOCATION = 14;
// High-level semantic time, location and activity state of the user.
SEMANTIC_STATE = 15;
// User's travel context, e.g., trips, locations, travel modes, etc.
TRAVEL = 16;
// User's device wifi scan results.
WIFI_SCAN = 17;
// Places context. See android places api.
PLACES = 18;
// Calendar events for the user.
CALENDAR_EVENT = 19;
// APPS that are running at a given time interval. This is obtained via the
// UsageStatsManager for Lollipop+ platform versions, and via ActivityManager
// for pre Lollipop.
// Deprecated. consider using UsageStatsManager API directly.
RUNNING_APPS = 20 [deprecated = true];
// The topics about which the user will be interested in consuming content.
CONTENT_INTERESTS = 21;
// Cast events.
CAST_EVENT = 22;
// Places that are of interest to the user.
PLACE_INTERESTS = 23 [deprecated = true];
// Audio state for the device provided by Android's audio manager.
AUDIO_STATE = 24;
// State of the User's phone, whether it is locked or unlocked.
PHONE_LOCK = 25;
// Detected beacon attachments from scanned BLE beacons.
DETECTED_BEACON = 26;
// State of the network connection, if connected whether it is on WiFi or
// Cellular
NETWORK_STATE = 27;
// Locations the user recently visited.
RECENT_VISITS = 28;
// Snapped place location of the user. Obtained from Hulk STP backend
// based on user's lat/lng location, detected activity, nearby Wifi signals,
// BLE beacons, etc.
SNAPPED_PLACES = 29;
// Snapped city location of the user. Obtained by reverse geocoding
// the user's lat/lng location.
SNAPPED_CITY = 30 [deprecated = true];
// Context for the weather information.
WEATHER = 31;
// User's wandering state context, i.e. distance spanned by a device in
// a given time interval
WANDER_STATE = 32;
// User's affinities with service providers.
PROVIDER_AFFINITIES = 34;
// User's detected routines
ROUTINES = 35 [deprecated = true];
// Attributes of the day corresponding to the current time and locale
// As examples, some attributes are: MORNING, EVENING, WEEKDAY,
// WEEKEND, HOLIDAY.
DAY_ATTRIBUTES = 36;
// Phone call state
PHONE_CALL = 37 [deprecated = true];
// Proximity distance reported by the proximity sensor
PROXIMITY_DISTANCE = 38;
// Installed applications on the device
INSTALLED_APPS = 39;
// Shopping related contexts (e.g. Shopping product profiles from
// web and Chrome)
SHOPPING = 40;
// Users Personas. go/persona
PERSONAS = 41 [deprecated = true];
// Users language preferences. go/now-u-languages-design
LANGUAGES = 42;
// Sunrise and sunset times of the day at the device's location
SUN_STATE = 43;
// User demographics (e.g. age, gender, income bracket)
DEMOGRAPHICS = 44;
// Properties of time (such as time zone at device's locale). This is similar
// to LOCALE_BASED_TIME_MODEL but does not need a network call. The guiding
// principle has been to have flat organization for contexts despite possible
// overlap. The alternative of having the same context being produced from
// client or server introduces code complexity that gets unmaintainable.
// This context is part of the same SEMANTIC_TIME family.
TIME_PROPERTY = 45;
// Predicted future locations the user will go to.
// This context will eventually replace USER_LOCATION_FORECAST
DESTINATION_PREDICTION = 46;
// Where the user has a vehicle parked and related information such as how
// long they can park there, how to find the parking spot, etc.
PARKING_LOCATIONS = 47;
// User's current direction and speed
USER_VELOCITY = 48;
// Context from user's Gmail, e.g. movie tickets, flight information,
// restaurant reservation, etc.
PERSONAL_INTELLIGENCE = 49;
// The contextual pivot for a search query, e.g. a KG mid, a location, etc.
// This is provided as part of search requests to describe the thing that a
// query is pivoted around.
QUERY_PIVOT = 50;
// Intents predicted by the intent system (go/pips).
// Deprecated. This context is currently not supported. Please email to
// [email protected] before use it.
PROACTIVE_INTENTS = 51 [deprecated = true];
// XGeo header
XGEO_HEADER = 52 [deprecated = true];
// User's location history and location habits. See go/distill
DISTILL_LOCATION_PROFILE = 53 [deprecated = true];
// Trained user embeddings.
USER_EMBEDDING = 54;
// Weather context for internal (first-party) clients
WEATHER_INTERNAL = 55;
// Trained entity embeddings for user interests.
INTEREST_ENTITY_EMBEDDINGS = 56;
// Prediction for whether the device is indoors or outdoors
// automatic read/write permissions
INDOOR_OUTDOOR = 57;
// User's inferred task and task related suggestions.
VASCO_TASK_SUGGESTIONS = 58;
// Probability of user in DND mode
DND_MODE = 59;
// Filtered CurrentPlaces context, based on filtered PlaceUpdates.
CURRENT_PLACES = 60;
// Aware profile (go/search-aware).
AWARE_PROFILE = 61;
// The language (ISO 639-1) and country (ISO 3166-1) codes, such as "en_US",
// of the device that made the request. It belongs to the DEVICE_STATE family.
DEVICE_LOCALE = 62;
// All activity in a timeline (go/unified-activity-overview).
ACTIVITY_TIMELINE = 63;
// Current Maps turn-by-turn navigation state. See
// go/gmm-guided-navigation-state-export.
MAPS_NAVIGATION_STATE = 67;
// The user's device information as gathered in Search. Uses
// superroot/impls/web/proto/device.proto as representation.
SEARCH_DEVICE = 68;
// Scores related to sending geo notifications computed from internal ML
// models. (go/ml-for-ugc-notifications).
GEO_NOTIFICATION_SCORES = 70;
// Interest similarity. A list of related entity interests with support for
// different types and verticals.
INTEREST_ENTITY_SIMILARITY = 71;
// Entities consumed by a user and related metadata. (It covers use cases
// like metadata about watching a movie / tv show or buying a book etc).
CONTENT_CONSUMPTION = 73;
// User's semantic location state for at-home, at-work, and traveling.
SEMANTIC_LOCATION = 74 [deprecated = true];
// Set of locations (IP location, device location, historic location, etc)
LOCATION_CONTEXT = 75;
// The input method of the query, e.g. typed or voice.
SEARCH_INPUT_METHOD = 76;
// Knowledge-specific params.
KE_PARAMS = 77;
// State of the user w.r.t Product. This is intended to serve
// lightweight product specific information about a user e.g opt-in age,
// activity levels, etc.
PRODUCT_USER_STATE = 78;
// `ACTIVITY_TRANSPOSE` is deprecated.
ACTIVITY_TRANSPOSE = 79 [deprecated = true];
// Search ugc interests, contains entity-level and user-level aggregated
// signals about user's activities with Search UGC features.
SEARCH_UGC_INTERESTS = 80;
// Context indicating user is currently on commute.
ON_COMMUTE = 81;
// Relations (Caretaker, Owner, Employee) users have to places
// go/user-relation-to-place-anima.
USER_RELATION_TO_PLACES = 82;
// State capturing user interactions in Discover sliced by card category,
// content topic etc. which will be used by interest exploration efforts
// (go/exploration-state-design).
DISCOVER_ACTIONS_PROFILE = 84;
// Returns user's related activities given a set of input activities.
// (go/related-activity-api-proto-proposal).
RELATED_ACTIVITY = 85;
// Stateful Task APIs: go/stateful-task-apis
STATEFUL_ACTIVITY_RECOMMENDED = 86;
STATEFUL_ACTIVITY_RELATED = 87;
STATEFUL_ACTIVITY_RENDERABLE = 88;
STATEFUL_TASK_ACTIVE = 89;
STATEFUL_TASK_RELATED = 90;
// Stateful API v2 (go/stateful-api-v2)
STATEFUL_TASK = 128;
STATEFUL_TASK_ACTIVITY_CARD = 130;
STATEFUL_TASK_DISCOVER = 131;
STATEFUL_TASK_TASK_HUB = 137;
STATEFUL_TASK_NOTIFICATIONS = 142;
// State of the currently connected wifi connection
WIFI_CONNECTION_STATE = 91;
// User contribution data for geo UGC. go/ugc-motivation.
GEO_UGC_MOTIVATION = 92;
// User's search suggestion state, such as previous query and suggested
// queries from recent queries (go/suggest-context).
SEARCH_SUGGEST_STATE = 93;
// User's predicted Geo Merchant Identification state (go/mid-anima).
GEO_MERCHANT_IDENTIFICATION_STATE = 94;
// Affinity signals from Sherlock.
SHERLOCK_AFFINITY = 95;
// User Activity Counts (go/user-activity-counts).
USER_ACTIVITY_COUNTS = 96;
// Shopping preferences model
SHOPPING_PREFERENCE_PROFILE = 97;
// Users contribution data for Get-on-Google (go/gog). Includes stats about
// previous contributions, contribution views, topic interests, and topic
// tasks.
GOG_CONTRIBUTOR_PROFILE = 98;
// Crosspath representative items.
CROSSPATH_REPRESENTATIVE_ITEMS = 99;
// Entity History Model which holds entities the user might want to re-engage
// with in evergreen verticals like Books and Video Games. go/ehm
ENTITY_HISTORY = 100;
// Discover User Actions Profile which holds personalized aggregate counts of
// actions sliced by custom dimensions over longer term time windows.
// go/discover-uap-redesign
DISCOVER_USER_ACTIONS_PROFILE = 101;
// LOCAL_ADS_ENTITY_PREFERENCES represents the serving analog for the local
// ads entity preference model (go/anima-local-ads-entity-model). The model
// represents KG entities which the user has shown a preference for based on
// the Ads-approved activities across Google products.
LOCAL_ADS_ENTITY_PREFERENCES = 102;
// Aggregated clicks on merchant websites. See go/scaling-merchant-reviews.
MERCHANT_CLICK_COUNTS = 103;
// Model containing aggregated views of Get on Google Cameos across platforms
// (assistant, SRP, Discover, Topic Feed)
GOG_CAMEO_VIEWS = 104;
// Single-day aggregate counts of distinct Semantic User Needs (SUNs) in
// the user's activity timeline. (See: go/nash-pre-suns)
DAILY_SUN_COUNTS = 105;
// Representation Assistant Recipe Embeddings.
ASSISTANT_RECIPE_USER_EMBEDDINGS = 106;
// Representation of Assistant Recipe Embeddings inferred during request-time.
ASSISTANT_RECIPE_ONLINE_USER_EMBEDDINGS = 145;
// Representation of Core Interest Embeddings.
CORE_INTEREST_EMBEDDINGS = 107;
// Representation of Event User Embedding.
EVENT_USER_EMBEDDINGS = 108;
// Representation of Podcast User Embedding.
PODCAST_USER_EMBEDDINGS = 109;
// Representation of Long term interest embeddings.
LONG_TERM_INTEREST_EMBEDDINGS = 110;
// Representation of Horizontal User Embeddings.
HORIZONTAL_USER_EMBEDDINGS = 135;
// Monet online embeddings.
MONET_ONLINE_EMBEDDINGS = 138;
// Representation of Tvn Timeline Signals.
TVM_TIMELINE_SIGNALS_FEATURES = 111;
// Representation of qualia profile for Discover feed.
DISCOVER_QUALIA_PROFILE = 112;
// Representation of qualia profile for GNews.
NEWS_QUALIA_PROFILE = 127;
// Representation of monet embeddings model input features.
DISCOVER_MONET_EMBEDDINGS_FEATURES = 113;
// Representation of monet pilot embeddings model input features.
DISCOVER_MONET_PILOT_EMBEDDINGS_FEATURES = 144;
// Representation of monet holdback embeddings model input features.
DISCOVER_MONET_HOLDBACK_EMBEDDINGS_FEATURES = 148;
// TVM items click counts, within what-to-watch. Includes item clicks (W2W)
// and clicks on 'watch now' button (W2W and Amati).
W2W_CLICKS = 114;
// Aggregated TVM items clicks, impressions and other relevant signals in W2W,
// Amati and other surfaces. go/recomedia-freshness
W2W_STATEFULNESS = 132;
// Representation of user embeddings for recomedia TVM vertical.
RECOMEDIA_TVM_USER_EMBEDDINGS = 115;
// Representation of user embeddings for books vertical.
RECOMEDIA_BOOKS_USER_EMBEDDINGS = 136;
// User's implicit watch state across products, i.e. Search, Amati, and
// Primetime. go/ump-implicit-watch
UMP_IMPLICIT_WATCH = 116;
// Representation of Hobbes DeepTrends IDLE user embeddings.
HOBBES_DEEP_TRENDS_IDLE_USER_EMBEDDINGS = 117;
// Representation of Hobbes DeepTrends FaBLE user embeddings.
HOBBES_DEEP_TRENDS_FABLE_USER_EMBEDDINGS = 118;
// Representation of signals needed to determine churn probability of a user.
// go/aga-churn-notif-design
AGA_CHURN_PREVENTION_MODEL = 119;
// User Activity Store on Evergreen Content (a.k.a., RoutinesMemory Redesign).
// go/user-activity-store-on-evergreen-content
USER_ACTIVITY_STORE_ON_EVERGREEN_CONTENT = 120;
// Url view demotion PSM, containing counts of docids from Chrome, Search,
// and Discover per time ranges.
// go/psm-view-demotion-aggregates
VIEW_DEMOTION_AGGREGATES = 125;
// Representation of user embeddings model for Shopping Property user
// timeline.
SHOPPING_PROPERTY_USER_TIMELINE = 121;
// Representation of the signals needed to determine churn probability in
// opa for a user.
GROWTH_FACTORS_OPA_CHURN_MODEL = 122;
// LOCAL_ADS_CHAIN_ENTITY_PREFERENCES represents the serving analog for the
// local ads chain entity preference model. The model scores KG entities
// pertaining to business chains which the user has shown a preference for
// based on the Ads-approved activities across Google products.
LOCAL_ADS_CHAIN_ENTITY_PREFERENCES = 123;
// Representation of the user profile generated by Qualia model during serving
// time based on features extracted from both LTAT and STAT.
QUALIA_ONLINE_PROFILE = 126;
// Representation of Books Timeline Signals.
BOOKS_TIMELINE_SIGNALS_FEATURES = 129;
// Representation of Handbag Personalized entities.
HANDBAG_PERSONALIZED_ENTITIES = 133;
// Represents the backfill analog for the local
// ads entity preference model (go/anima-local-ads-entity-model). The model
// represents KG entities which the user has shown a preference for based on
// the Ads-approved activities across Google products.
LOCAL_ADS_HISTORICAL_ENTITY_PREFERENCES = 134;
// Representation of Deep Now `ContextFeatures` signals. Note that this is a
// temporary solution and should not be used for other external use cases.
// TODO(b/187311600): Clean up DEEP_NOW_CONTEXT_FEATURES
DEEP_NOW_CONTEXT_FEATURES = 139;
// Represents the Hobbes user embeddings model for Hotels Ranking.
HOTEL_HOBBES_USER_EMBEDDINGS = 140;
// Representation of the petacat profile generated by Petacat model during
// serving time.
PETACAT_ONLINE_PROFILE = 143;
// Represents user's recent actions on documents.
RECENT_URL_ACTIONS = 146;
// Represents user's recent activity signals that is local related.
LOCAL_RELATED_RECENT_ACTIVITY_SIGNALS = 147;
// Profile of documents by domain visited by the user across google e.g.
// Search and Chrome (go/wind-rose-data).
WIND_ROSE_PROFILE = 149;
// Represents the user's U-SERP profile, i.e. how much they like/dislike
// certain OneNamespace types (go/u-serp).
USERP = 150;
// Next Context Id: 151
//---------------------------------------------------------------------------
// Context Manager Internal Contexts. These are usually contexts such as
// models that are used by the first party apps for synchronization from
// cloud, or used by context manager for creating other higher level
// contexts.
// A range of [10000 - 19999] is reserved.
// Next Id: 10010
//---------------------------------------------------------------------------
// Model for the USER_LOCATION_FAMILIARITY context.
USER_LOCATION_FAMILIARITY_MODEL = 10000;
// Model that is trained for a user based upon the hotword detection.
// Hotword detection is also known as Keyword Spotting and is the task
// of detecting a pre-defined Hotword like “Ok Google” in a continuous
// audio stream.
// These already trained models can be pushed from cloud to device where
// they can be used as preconfigured for voice search on a new or resetted
// device.
HOTWORD_SPEAKER_MODEL = 10001;
// Model representing the UDC settings.
UDC_FOOTPRINTS_SETTINGS_MODEL = 10002;
// Model that is used for predicting safe locations for a user.
// These locations can be marked as trusted locations on the device,
// used for creating an overall trust/confidence score etc.
SAFE_LOCATION_MODEL = 10003;
// A set of places for which we have personal data for ELSA to use for place
// inference. This includes the user's home and work, and places for which
// they have interactions in the GeoJournalSummary. See
// http://go/elsa-geojournal.
PERSONALIZED_PLACES = 10004;
// A set of places which user has set aliases, such as HOME/WORK
ALIASED_PLACES = 10005;
// A special type of Context Manager's internal context that represents the
// encoded bytes of a differential context.
CONTEXT_DELTA = 10006;
// Model that represents information about time that is expressed
// semantically and dependent on locale. For example, notions of weekday,
// weekend, holiday refer to time but are dependent on country.
// In addition this includes personalized day parts such as start of day,
// morning, evening which is user dependent.
LOCALE_BASED_TIME_MODEL = 10007;
// Representation for the feedback to be collected about the fence states
FENCE_FEEDBACK = 10008;
// Information about the fence state. This includes the fence key, the event
// related to the fence and the condition of the fence
FENCE_STATE = 10009;
// Representation of domain interests
DOMAIN_INTERESTS = 10011;
reserved 33, 64, 65, 66, 69, 72, 83, 124, 141, 10010;
// Next Model Id: 10012
//---------------------------------------------------------------------------
// The following block is reserved by Context Manager for generic local
// contexts, that are produced by a local app or process.
// UNSPECIFIED_LOCAL_CONTEXTx tags are left in as placeholders so proto
// parsing does not eliminate them. Each tag should be renamed appropriately
// once claimed.
//---------------------------------------------------------------------------
// Marker for start of the block; default length is 100, expandable to 1000
LOCALLY_PRODUCED_BLOCK_START_MARKER = 10999;
// Next locally-produce Context Id: 11000 (claim the name below)
UNSPECIFIED_LOCAL_CONTEXT0 = 11000;
UNSPECIFIED_LOCAL_CONTEXT1 = 11001;
UNSPECIFIED_LOCAL_CONTEXT2 = 11002;
UNSPECIFIED_LOCAL_CONTEXT3 = 11003;
UNSPECIFIED_LOCAL_CONTEXT4 = 11004;
UNSPECIFIED_LOCAL_CONTEXT5 = 11005;
UNSPECIFIED_LOCAL_CONTEXT6 = 11006;
UNSPECIFIED_LOCAL_CONTEXT7 = 11007;
UNSPECIFIED_LOCAL_CONTEXT8 = 11008;
UNSPECIFIED_LOCAL_CONTEXT9 = 11009;
//---------------------------------------------------------------------------
// This block is reserved by Context Manager for generic remote
// contexts, that are produced on-demand via CMFE. The
// UNSPECIFIED_BACKEND_CONTEXTx tags are left in as placeholders so proto
// parsing does not eliminate them. Each tag should be renamed appropriately
// once claimed.
//---------------------------------------------------------------------------
// Marker for start of the block; default length is 100, expandable to 1000
BACKEND_PRODUCED_BLOCK_START_MARKER = 11999;
// Next Backend-produce Context Id: 12000 (claim the name below)
UNSPECIFIED_BACKEND_CONTEXT0 = 12000;
UNSPECIFIED_BACKEND_CONTEXT1 = 12001;
UNSPECIFIED_BACKEND_CONTEXT2 = 12002;
UNSPECIFIED_BACKEND_CONTEXT3 = 12003;
UNSPECIFIED_BACKEND_CONTEXT4 = 12004;
UNSPECIFIED_BACKEND_CONTEXT5 = 12005;
UNSPECIFIED_BACKEND_CONTEXT6 = 12006;
UNSPECIFIED_BACKEND_CONTEXT7 = 12007;
UNSPECIFIED_BACKEND_CONTEXT8 = 12008;
UNSPECIFIED_BACKEND_CONTEXT9 = 12009;
//---------------------------------------------------------------------------
// Context names > 100_000 are reserved for experimentation by various teams,
// These contexts will have automatic read/write permission for everyone, but
// should NOT be submitted!
// Next Id: 100001
//---------------------------------------------------------------------------
// Dummy context, used to mark beginning of range
DUMMY_EXPERIMENTAL_AUTO_RW_MARKER = 99999;
DUMMY_EXPERIMENTAL_AUTO_RW_1 = 100000;
}
// Represents a context fence, which can either be an AND,
// OR, or NOT of other context fences. Or, one of the fences for
// a particular context name.
message ContextFence {
// WARNING! This protocol buffer has a unique equals() method in its nano
// implementation. See cl/209825626 and b/112847166. The default nano
// equals method somehow causes pathological performance in dex2oat in
// Lollipop devices, so bad that GMS Core can never start. This is dependent
// also on which member messages are in different dex files dependent on
// which bytecode ProGuard generates. Instead, the equals() method generated
// for this just delegates to MessageNano.messageNanoEquals which is slower.
enum Type {
UNKNOWN_CONTEXT_FENCE_TYPE = 0;
AND = 1; // AND expression
OR = 2; // OR expression
NOT = 3; // NOT expression
TIME_FENCE = 4; // Time-based fence
LOCATION_FENCE = 5; // Location-based fence
PLACE_FENCE = 6; // Place-based fence
ACTIVITY_FENCE = 7; // Activity-based fence
SCREEN_FENCE = 8; // Screen-based fence
POWER_CONNECTION_FENCE = 9; // Power connection-based fence
PHONE_LOCK_FENCE = 10; // Phone lock fence
AUDIO_STATE_FENCE = 11; // Audio state fence
BEACON_FENCE = 12; // Beacon fence
NETWORK_STATE_FENCE = 13; // Network state fence
WANDER_STATE_FENCE = 14; // Wander state fence
TIME_INTERVAL_FENCE = 15; // Time fence specified using day attributes
INSTALLED_APPS_FENCE = 16; // Installed apps fence
PHONE_CALL_FENCE = 17; // Phone call based fence
PROXIMITY_DISTANCE_FENCE = 18; // Proximity distance based fence
SUN_STATE_FENCE = 19; // Sun-state based fence
LOCAL_TIME_FENCE = 20; // Local-time-based fence
WEATHER_FENCE = 21; // Weather-based fence
PREDICTIVE = 22; // Predictive fence
SHUSH_STATE_FENCE = 23; // Shush state fence
WIFI_STATE_FENCE = 24; // Wifi state fence
}
optional Type type = 1;
// For AND and OR types, this is the list of ContextFence messages
// that should be ANDed or ORed together. For NOT type, this
// should contain a single element.
repeated ContextFence fence_list = 2;
// Should be set only when type is TIME_FENCE.
optional TimeFence time_fence = 3;
// Should be set only when type is LOCATION_FENCE.
optional LocationFence location_fence = 4;
// Should be set only when type is PLACE_FENCE.
optional PlaceFence place_fence = 5;
// Should be set only when type is ACTIVITY_FENCE.
optional ActivityFence activity_fence = 6;
// Should be set only when type is SCREEN_FENCE.
optional ScreenFence screen_fence = 7;
// Should be set only when type is POWER_CONNECTION_FENCE.
optional PowerConnectionFence power_connection_fence = 8;
// Should be set only when the type is PHONE_LOCK_FENCE.
optional PhoneLockFence phone_lock_fence = 9;
// Should be set only when the type if AUDIO_STATE_FENCE.
optional AudioStateFence audio_state_fence = 10;
// Should be set only when the type is BEACON_FENCE.
optional BeaconFence beacon_fence = 11;
// Should be set only when the type is NETWORK_STATE_FENCE.
optional NetworkStateFence network_state_fence = 12;
// Encapsulates the source that evaluates this fence.
optional Source source = 13;
// Should be set only when the type is WANDER_STATE_FENCE.
optional WanderStateFence wander_state_fence = 14;
// Should be set only when the type is TIME_INTERVAL_FENCE.
optional TimeIntervalFence time_interval_fence = 15;
// Should be set only when the type is INSTALLED_APPS_FENCE.
optional InstalledAppsFence installed_apps_fence = 16;
// Should be set only when the type is PHONE_CALL_FENCE.
optional PhoneCallFence phone_call_fence = 17;
// Should be set only when the type is PROXIMITY_DISTANCE_FENCE.
optional ProximityDistanceFence proximity_distance_fence = 18;
// Should be set only when the type is SUN_STATE_FENCE.
optional SunStateFence sun_state_fence = 19;
// Should be set only when type is LOCAL_TIME_FENCE.
optional TimeFence local_time_fence = 20;
// Should be set only when type is WEATHER_FENCE.
optional WeatherFence weather_fence = 21;
// Contexts to be snapshot when fence triggers.
repeated ContextName requested_snapshot = 22;
// Contain parameters for predictive fences,
// null if the fence is not predictive
optional PredictiveParameters predictive_parameters = 23;
// Should be set only when type is SHUSH_STATE_FENCE.
optional ShushStateFence shush_state_fence = 24;
// Should be set only when type is WIFI_STATE_FENCE.
optional WifiStateFence wifi_state_fence = 25;
// Next Tag: 26
}
// Encapsulates the source metadata associated with a context fence.
// This is useful for the distributed fences, when a particular context fence
// can be remotely evaluated on a different device.
message Source {
// TODO(b112847166): Re-migrate to lite after we understand how to avoid this
// from getting pulled into the main dex and causing catastrophic failures.
// [REQUIRED]
optional string account_name = 1;
}
// Represents an expression for representing the date time.
message DateTime {
// TODO(b112847166): Re-migrate to lite after we understand how to avoid this
// from getting pulled into the main dex and causing catastrophic failures.
// Represents the year for the date time.
// For example: 2015
optional int32 year = 1;
// Represents the month for the date time with values ranging
// from 0 to 11. Example, January is represented as 0 and December
// as 11.
optional int32 month = 2;
// Represents the day of the month
// The first day of the month has a value of 1.
// Example January 1 will have day as 1, January 2 will
// have day as 2 respectively.
optional int32 day = 3;
// Represents the hour of the day as a 24 hour clock.
// Range of valid values is 0 - 23, example for 10:04:15 PM
// the HOUR_OF_DAY is 22
optional int32 hour = 4;
// Represents the minute with in the hour.
// Range of valid values is 0 - 59, example at 10:04:15 PM
// the MINUTE is 4
optional int32 minutes = 5;
// Represents the seconds with in the minute.
// Range of valid values is 0 - 59, example at 10:04:15 PM
// the SECOND is 15
optional int32 seconds = 6;
}
message PredictiveParameters {
// Minimum confidence level for a predictive fence to be triggered.
optional int32 prediction_confidence_level = 1;
// Time duration within which prediction will be considered.
optional int64 prediction_time_millis = 2;
// Next Tag: 25
}