Merge "Update SoftAP metrics start failure codes" into udc-dev
diff --git a/stats/atoms.proto b/stats/atoms.proto
index 3524444..89dfc0c 100644
--- a/stats/atoms.proto
+++ b/stats/atoms.proto
@@ -223,7 +223,7 @@
                 64 [(module) = "sysui"];
         AppDied app_died = 65 [(module) = "framework"];
         ResourceConfigurationChanged resource_configuration_changed = 66 [(module) = "framework"];
-        BluetoothEnabledStateChanged bluetooth_enabled_state_changed = 67 [(module) = "framework"];
+        BluetoothEnabledStateChanged bluetooth_enabled_state_changed = 67 [(module) = "bluetooth"];
         BluetoothConnectionStateChanged bluetooth_connection_state_changed =
                 68 [(module) = "bluetooth"];
         GpsSignalQualityChanged gps_signal_quality_changed = 69 [(module) = "framework"];
@@ -1025,12 +1025,23 @@
     extensions 680; // SoftApStarted softap_started
     extensions 681; // SoftApStopped softap_stopped
     extensions 684; // MediaCodecRendered media_codec_rendered
+    extensions 685; // InTaskActivityStarted in_task_activity_started
+    extensions 687; // WifiLockReleased wifi_lock_released
+    extensions 688; // WifiLockDeactivated wifi_lock_deactivated
+    extensions 689; // WifiConfigSaved wifi_config_saved
+    extensions 690; // WifiAwareResourceUsingChanged wifi_aware_resource_using_changed
+    extensions 691; // WifiAwareHalApiCalled wifi_aware_hal_api_called
+    extensions 692; // WifiLocalOnlyRequestReceived wifi_local_only_request_received
+    extensions 693; // WifiLocalOnlyRequestScanTriggered wifi_local_only_request_scan_triggered
+    extensions 694; // WifiThreadTaskExecuted wifi_thread_task_executed
+    extensions 696; // BluetoothProfileConnectionAttempted bluetooth_profile_connection_attempted
+    extensions 702; // AdServicesConsentMigrated ad_services_consent_migrated
     extensions 9999; // Atom9999 atom_9999
     // StatsdStats tracks platform atoms with ids up to 900.
     // Update StatsdStats::kMaxPushedAtomId when atom ids here approach that value.
 
     // Pulled events will start at field 10000.
-    // Next: 10190
+    // Next: 10191
     oneof pulled {
         WifiBytesTransfer wifi_bytes_transfer = 10000 [(module) = "framework"];
         WifiBytesTransferByFgBg wifi_bytes_transfer_by_fg_bg = 10001 [(module) = "framework"];
@@ -1256,6 +1267,7 @@
     extensions 10187; // SatelliteSosMessageRecommender satellite_sos_message_recommender
     extensions 10188; // UwbActivityInfo uwb_activity_info
     extensions 10189; // CachedAppsHighWaterMark cached_apps_high_watermark
+    extensions 10190; // WifiAwareCapabilities wifi_aware_capabilities
     extensions 99999; // Atom99999 atom_99999
 
     // DO NOT USE field numbers above 100,000 in AOSP.
@@ -1695,6 +1707,8 @@
     optional bool is_carrier_wifi = 10;
     // Whether the OOB pseeudonym is enabled for the current connection.
     optional bool is_oob_pseudonym_enabled = 11;
+    // The client mode role for the connection, can use to determine the connection type.
+    optional android.net.wifi.ClientModeRole role = 12;
 }
 
 /**
@@ -1898,6 +1912,8 @@
     // fallback to negotiation if device receives invitation response status code "information is
     // currently unavailable"
     optional bool fallback_to_negotiation_on_invite_status_info_unavailable = 11;
+    // The try count of connection
+    optional int32 try_count = 12;
 }
 
 /**
@@ -2141,7 +2157,7 @@
  *   frameworks/base/services/core/java/com/android/server/job/JobSchedulerService.java
  *   frameworks/base/services/core/java/com/android/server/job/JobServiceContext.java
  *
- * Next tag: 40
+ * Next tag: 41
  */
 message ScheduledJobStateChanged {
     repeated AttributionNode attribution_node = 1;
@@ -2184,11 +2200,13 @@
         RARE = 3;
         NEVER = 4;
         RESTRICTED = 5;
+        EXEMPTED = 6;
     }
     optional Bucket standby_bucket = 5 [default = UNKNOWN];
 
-    // The job id (as assigned by the app).
-    optional int32 job_id = 6;
+    // On T- builds, this is the job id (as assigned by the app).
+    // On U+ builds, this is generated by the system, factoring in the job's namespace.
+    optional int64 job_id = 6;
 
     // One flag for each of the API constraints defined by JobScheduler. Does not include implicit
     // constraints as they are always assumed to be set.
@@ -2272,6 +2290,9 @@
 
     // Proc state of the UID of the logged event
     optional android.app.ProcessStateEnum proc_state = 39 [default = PROCESS_STATE_UNKNOWN];
+
+    // Hash of the namespace set via JobScheduler.forNamespace(String).
+    optional string namespace_hash = 40;
 }
 
 /**
@@ -5415,6 +5436,10 @@
 
     repeated int64 api_timestamp = 23;
 
+    optional int64 api_before_fgs_start_duration_millis = 28;
+
+    optional int64 api_after_fgs_end_duration_millis = 29;
+
     // Keep it in sync with ActivityManager.ProcessCapability.
     enum ProcessCapability {
         PROCESS_CAPABILITY_NONE = 0;
@@ -5760,6 +5785,10 @@
 
     // Field for tracking whether the notification is non-dismissible
     optional bool is_non_dismissible = 25;
+
+    // Time elapsed between the notify() API call and the NLSes being told about the notification.
+    // Will be 0 for NotificationReported protos that do not correspond to a notify() call.
+    optional int64 post_duration_millis = 26;
 }
 
 /**
@@ -6451,6 +6480,12 @@
 
     /** The package name of the service lunch request */
     optional string requester_package_name = 11;
+
+    /** The process state of the requester */
+    optional android.app.ProcessStateEnum requester_process_state = 12;
+
+    /** The process state of the service host before this service request */
+    optional android.app.ProcessStateEnum service_process_state = 13;
 }
 
 /**
@@ -6501,6 +6536,24 @@
 
     /** The package name of the broadcast sender */
     optional string sender_package_name = 11;
+
+    /** The type of the broadcast */
+    optional int32 broadcast_type = 12;
+
+    /** Delivery group policy set for the broadcast */
+    optional android.app.BroadcastDeliveryGroupPolicy delivery_group_policy = 13;
+
+    /** Flags set in the broadcast intent */
+    optional int32 intent_flags = 14;
+
+    /** The intent filter priority of the broadcast receiver */
+    optional int32 filter_priority = 15;
+
+    /** The procstate of the broadcast sender */
+    optional android.app.ProcessStateEnum sender_proc_state = 16;
+
+    /** The procstate of the broadcast receiver before receiving this broadcast */
+    optional android.app.ProcessStateEnum receiver_process_state = 17;
 }
 
 /**
@@ -6529,6 +6582,12 @@
 
     /** The package name of the content provider client who makes the request. */
     optional string client_package_name = 6;
+
+    /** The process state of the client */
+    optional android.app.ProcessStateEnum client_process_state = 7;
+
+    /** The process state of the content provider host before being acquired */
+    optional android.app.ProcessStateEnum provider_process_state = 8;
 }
 
 /**
@@ -10890,6 +10949,7 @@
     optional int32 flush_count = 74;
     optional int32 set_surface_count = 75;
     optional int32 resolution_change_count = 76;
+    optional int32 component_color_format = 77;
     // !!! WARNING
     // Keep synchronized with MediametricsCodecReported.CodecData in
     // mediametrics_message.proto.
@@ -12937,7 +12997,7 @@
 /**
  * Logs detailed stats for querying in AppSearch
  *
- * Next tag: 30
+ * Next tag: 33
  */
 message AppSearchQueryStatsReported {
     // The sampling interval for this specific type of stats
@@ -13040,6 +13100,18 @@
 
     // Time used to send data across the JNI boundary from native to java side.
     optional int32 native_to_java_jni_latency_millis = 29;
+
+    // The type of the join query.
+    //
+    // Needs to be sync with AppSearchSchema#JoinableValueType in
+    // packages/modules/AppSearch/framework/java/external/android/app/appsearch/AppSearchSchema.java
+    optional int32 join_type = 30;
+
+    // How many total documents were joined to the parent documents.
+    optional int32 native_num_joined_results_current_page = 31;
+
+    // Time taken to join child documents to parent documents.
+    optional int32 native_join_latency_millis = 32;
 }
 
 /**
@@ -14771,6 +14843,9 @@
         UPDATE = 3;
         DELETE = 4;
         CALL = 5;
+
+        // Call from CP2 to a GAL provider.
+        GAL_CALL = 6;
     }
 
     // Method called for ApiType.CALL
@@ -14811,6 +14886,11 @@
     optional TaskType task_type = 7;
     // Set when api_type == CALL
     optional MethodCall method_called = 8;
+
+    // Normally, it's the binder calling UID. (this could be CP2, for work profile or cloned
+    // profile cases.)
+    // For GAL_CALL, it's the GAL provider UID.
+    optional int32 uid = 9 [(is_uid) = true];
 }
 
 /**
@@ -20666,6 +20746,21 @@
     optional int32 ranging_interval_ms = 12;
     // How many ongoing session when current session is initiated?
     optional int32 parallel_session_count = 13;
+    // Composed value for UWB filter configurations.
+    // This value combines the boolean value of multiple feature flags for
+    // UWB filter configuration into one integer, where the bits of its binary value
+    // are for the flags
+    // Below are the flags from LSB to MSB, 1 for enabled and 0 for disabled
+    // bit 0: filter_enabled
+    // bit 1: enable_azimuth_mirroring
+    // bit 2: enable_primer_aoa
+    // bit 3: enable_primer_est_elevation
+    // bit 4: enable_primer_fov
+    // bit 5: predict_rear_azimuths
+    // For example, when all flags are enabled this value is 63 (0b111111)
+    // Refer to packages/modules/Uwb/service/ServiceUwbResources/res/values/config.xml
+    // for more information about the flags
+    optional int32 filter_config_value = 14;
 }
 
 /*
@@ -20775,6 +20870,16 @@
     optional int32 elevation_fom = 14;
     // Ranging Measurement Type
     optional android.uwb.RangingType ranging_type = 15;
+    // The filtered distance measurement in centimeters.
+    optional int32 filtered_distance_cm = 16;
+    // The filtered azimuth angle measurement in degrees.
+    optional int32 filtered_azimuth_degree = 17;
+    // The filtered figure of merit of azimuth angle measurement.
+    optional int32 filtered_azimuth_fom = 18;
+    // The filtered elevation angle measurement in degrees.
+    optional int32 filtered_elevation_degree = 19;
+    // The filtered figure of merit of elevation angle measurement.
+    optional int32 filtered_elevation_fom = 20;
 }
 
 /*
@@ -22112,6 +22217,9 @@
 
   // The selection process of this dataset.
   optional autofill.DatasetPickedReason selected_dataset_picked_reason = 27;
+
+  // Which detection was preferred
+  optional autofill.DetectionPreference detection_preference = 28;
 }
 
 // Tells how Autofill dataset was/will-be displayed.
@@ -23376,6 +23484,7 @@
         ACCESSIBILITY_HEARING_AIDS = 1;
         ACCESSIBILITY_HEARING_AID_PAIR_ANOTHER = 2;
         BLUETOOTH = 3;
+        ACCESSIBILITY_HEARING_AID_SETTINGS = 4;
     }
     optional BondEntry bond_entry = 3;
 }
diff --git a/stats/atoms/adservices/adservices_extension_atoms.proto b/stats/atoms/adservices/adservices_extension_atoms.proto
index b2744df..19d5d28 100644
--- a/stats/atoms/adservices/adservices_extension_atoms.proto
+++ b/stats/atoms/adservices/adservices_extension_atoms.proto
@@ -57,6 +57,9 @@
   optional AdServicesMeasurementWipeout
       ad_services_measurement_wipeout = 676
         [(module) = "adservices", (truncate_timestamp) = true];
+
+  optional AdServicesConsentMigrated ad_services_consent_migrated = 702
+  [(module) = "adservices", (truncate_timestamp) = true];
 }
 
 /**
@@ -72,8 +75,6 @@
  * avoids usage of field types (e.g. repeated) that aren't supported on R/S.
  */
 message AdServicesBackCompatGetTopicsReported {
-  // See b/266626836 for why topic_ids is not a field yet.
-
   // Number of filtered duplicate topics.
   optional int32 duplicate_topic_count = 1;
 
@@ -82,6 +83,9 @@
 
   // Number of topic ids returned.
   optional int32 count_of_topic_ids = 3;
+
+  // Topic ids returned, randomized using a random response mechanism.
+  optional AdServicesTopicIds topic_ids = 4 [(log_mode) = MODE_BYTES];
 }
 
 /**
@@ -203,4 +207,60 @@
  */
 message AdServicesMeasurementWipeout {
   optional android.adservices.service.measurement.WipeoutCause wipeout_cause = 1;
+}
+
+/**
+ * Logs for AdServices Consent Migration after OTA.
+ * This atom captures the event of consent migration when we OTA from S to T+.
+ */
+message AdServicesConsentMigrated {
+
+  // Logs the Migration status
+  enum MigrationStatus {
+    UNSPECIFIED_MIGRATION_STATUS = 0;
+
+    // Consent migration unsuccessful
+    FAILURE = 1;
+
+    // Consent migration successful with shared prefs updated
+    SUCCESS_WITH_SHARED_PREF_UPDATED = 2;
+
+    // Consent migration successful with shared prefs not updated
+    SUCCESS_WITH_SHARED_PREF_NOT_UPDATED = 3;
+
+  }
+
+  // Logs the type of migration
+  enum MigrationType {
+    UNSPECIFIED_MIGRATION_TYPE = 0;
+
+    // Migrating consent from PPAPI to system service
+    PPAPI_TO_SYSTEM_SERVICE = 1;
+
+    // Migrating consent from App Search to system service
+    APPSEARCH_TO_SYSTEM_SERVICE = 2;
+  }
+
+  // Logs the opt-in/ opt-out value of measurement app
+  optional bool is_measurement_consent_enabled = 1;
+
+  // Logs the opt-in/ opt-out value of topics app
+  optional bool is_topics_consent_enabled = 2;
+
+  // Logs the opt-in/ opt-out value of fledge app
+  optional bool is_fledge_consent_enabled = 3;
+
+  // Logs the opt-in/ opt-out value for all apps in beta
+  optional bool is_default_consent_enabled = 4;
+
+  // Logs the type of migration
+  optional MigrationType migration_type = 5;
+
+  // Logs the region where the OTA took place
+  optional android.adservices.AdServiceSettingRegion region = 6;
+
+  // Logs the Migration status
+  optional MigrationStatus migration_status = 7;
+
+
 }
\ No newline at end of file
diff --git a/stats/atoms/autofill/autofill_extension_atoms.proto b/stats/atoms/autofill/autofill_extension_atoms.proto
index f815875..f2dd4b8 100644
--- a/stats/atoms/autofill/autofill_extension_atoms.proto
+++ b/stats/atoms/autofill/autofill_extension_atoms.proto
@@ -99,7 +99,8 @@
   // How the dataset is supposed to be shown to the user
   optional AutofillDisplayPresentationType display_presentation_type = 4;
   // Count of datasets that should've been available for display. If the request
-  // times out, this won't be populated.
+  // times out, this won't be populated. This is the count after PCC detected
+  // datasets are processed and ineligeble datasets have been filtered off.
   optional int32 available_count = 5;
   optional int64 save_ui_trigger_ids = 6;
   // Timestamp of when Autofill provider returns a FillResponse
@@ -121,15 +122,32 @@
   // final eligible datasets to be shown.
   optional int64 latency_response_processing_millis = 14;
 
-  // Count of datasets that are available due to PCC Detection. These can include datasets
-  // available via provider response, and would be eligible because of pcc too.
-  // If PCC detection is preferred over Autofill provider, and Autofill provider had same detection
-  // as PCC did, the following invariants would hold.
+  // Count of datasets that were provided by the Autofill Provider by
+  // specifying type. These datasets may additionally contain autofill ids for
+  // which this same dataset is applicable that are available due to PCC
+  // detection. These can include datasets available via provider response,
+  // and would be eligible because of PCC too.
+  // If PCC detection is preferred over Autofill Provider, it may include
+  // datasets applicable to autofill ids. So the same datasets would've shown
+  // if Autofill Provider detection was preferred.
+  // In such a case and if the detection of both the Autofill Provider and PCC
+  // detection were the same, the following invariants holds, provided same
+  // datasets were provided.
   // available_pcc_count = available_count
   // available_pcc_only_count = 0
+  // If PCC detection is not preferred, the following invariant holds.
+  // available_pcc_count = available_pcc_only_count
   optional int32 available_pcc_count = 15;
-  // Count of datasets that are available only due to PCC Detection.
+  // Count of datasets that are available only due to PCC Detection. These
+  // datasets are the ones provided by Autofill Provider by specifying types
+  // only. These datasets don't have any autofill id associated with them.
   optional int32 available_pcc_only_count = 16;
+  // Count of datasets that are returned by the Autofill Provider. This count
+  // is before any filtering based on PCC detection is performed. This contains
+  // datasets set by both type and autofill ids.
+  optional int32 total_datasets_provided = 17;
+  // Which detection was preferred
+  optional DetectionPreference detection_preference = 18;
 }
 
 /**
diff --git a/stats/atoms/bluetooth/bluetooth_extension_atoms.proto b/stats/atoms/bluetooth/bluetooth_extension_atoms.proto
index 454d645..58560db 100644
--- a/stats/atoms/bluetooth/bluetooth_extension_atoms.proto
+++ b/stats/atoms/bluetooth/bluetooth_extension_atoms.proto
@@ -41,6 +41,8 @@
           (module) = "bt_restricted",
           (restriction_category) = RESTRICTION_DIAGNOSTIC
         ];
+  optional BluetoothProfileConnectionAttempted bluetooth_profile_connection_attempted
+    = 696 [(module) = "bluetooth"];
 }
 
 /**
@@ -197,3 +199,28 @@
   optional string device_name = 1
       [(field_restriction_option).peripheral_device_info = true];
 }
+
+/**
+ * Logs profile connection known completions.
+ *
+ * Logged from:
+ *     packages/modules/Bluetooth
+ */
+message BluetoothProfileConnectionAttempted {
+  // The profile that is connected. Eg. GATT, A2DP, HEADSET.
+  // From android.bluetooth.BluetoothAdapter.java
+  // Default: 0 when not used
+  optional int32 bt_profile = 1;
+
+  // Result of Profile connection
+  optional android.bluetooth.ProfileConnectionResult result = 2;
+
+  // Previous connection state
+  optional android.bluetooth.ConnectionStateEnum previous_state = 3;
+
+  // Terminating connection state
+  optional android.bluetooth.ConnectionStateEnum current_state = 4;
+
+  // Reason for the connection result
+  optional android.bluetooth.ProfileConnectionReason reason = 5;
+}
diff --git a/stats/atoms/framework/framework_extension_atoms.proto b/stats/atoms/framework/framework_extension_atoms.proto
index ef247f4..e15025e 100644
--- a/stats/atoms/framework/framework_extension_atoms.proto
+++ b/stats/atoms/framework/framework_extension_atoms.proto
@@ -26,6 +26,7 @@
 extend Atom {
     optional FullScreenIntentLaunched full_screen_intent_launched = 631 [(module) = "framework"];
     optional BalAllowed bal_allowed = 632 [(module) = "framework"];
+    optional InTaskActivityStarted in_task_activity_started = 685 [(module) = "framework"];
     optional CachedAppsHighWaterMark cached_apps_high_watermark = 10189 [(module) = "framework"];
 }
 
@@ -62,6 +63,37 @@
 }
 
 /**
+ * Logs when an activity is started in a task with existing visible activities.
+ *
+ * Logged from: com.android.server.wm.ActivityMetricsLogger
+ */
+message InTaskActivityStarted {
+    // The uid of the started activity.
+    optional int32 uid = 1 [(is_uid) = true];
+
+    enum TransitionType {
+        UNKNOWN = 0;
+        WARM = 1;
+        HOT = 2;
+        COLD = 3;
+        RELAUNCH = 4;
+    }
+    optional TransitionType type = 2;
+
+    // Whether the activity is opaque or translucent.
+    optional bool is_opaque = 3;
+
+    // The delay to start transition.
+    optional int32 transition_delay_millis = 4;
+
+    // How long the activity took to be drawn.
+    optional int32 windows_drawn_delay_millis = 5;
+
+    // The timestamp(SystemClock#elapsedRealtime()) when starting activity.
+    optional int64 activity_start_timestamp_millis = 6;
+}
+
+/**
  * Logs the cached apps high water mark.
  */
 message CachedAppsHighWaterMark {
diff --git a/stats/atoms/sysui/sysui_atoms.proto b/stats/atoms/sysui/sysui_atoms.proto
index ae21619..369ff11 100644
--- a/stats/atoms/sysui/sysui_atoms.proto
+++ b/stats/atoms/sysui/sysui_atoms.proto
@@ -711,6 +711,11 @@
     // If the corresponding result_type is above or below keyboard.
     // If 50% of result is visible, then is_above_keyboard = true
     repeated bool is_above_keyboard = 7;
+
+    // UID of the application (can be mapped to package name) corresponding to the result_type.
+    // The default value of uid entry will be -1 to indicate package name is not
+    // found.
+    repeated int32 uid = 8 [(is_uid) = true];
 }
 
 /**
diff --git a/stats/atoms/wifi/wifi_extension_atoms.proto b/stats/atoms/wifi/wifi_extension_atoms.proto
index 6c925c5..3bc9887 100644
--- a/stats/atoms/wifi/wifi_extension_atoms.proto
+++ b/stats/atoms/wifi/wifi_extension_atoms.proto
@@ -21,16 +21,32 @@
 import "frameworks/proto_logging/stats/atom_field_options.proto";
 import "frameworks/proto_logging/stats/atoms.proto";
 import "frameworks/proto_logging/stats/enums/wifi/enums.proto";
+import "frameworks/proto_logging/stats/attribution_node.proto";
 
 option java_package = "com.android.os.wifi";
 option java_multiple_files = true;
 
 extend Atom {
+    // Push metrics
     optional WifiAwareNdpReported wifi_aware_ndp_reported = 638 [(module) = "wifi"];
     optional WifiAwareAttachReported wifi_aware_attach_reported = 639 [(module) = "wifi"];
     optional WifiSelfRecoveryTriggered wifi_self_recovery_triggered = 661 [(module) = "wifi"];
     optional SoftApStarted soft_ap_started = 680 [(module) = "wifi"];
     optional SoftApStopped soft_ap_stopped = 681 [(module) = "wifi"];
+    optional WifiLockReleased wifi_lock_released = 687 [(module) = "wifi"];
+    optional WifiLockDeactivated wifi_lock_deactivated = 688 [(module) = "wifi"];
+    optional WifiConfigSaved wifi_config_saved = 689 [(module) = "wifi"];
+    optional WifiAwareResourceUsingChanged wifi_aware_resource_using_changed
+        = 690 [(module) = "wifi"];
+    optional WifiAwareHalApiCalled wifi_aware_hal_api_called = 691 [(module) = "wifi"];
+    optional WifiLocalOnlyRequestReceived wifi_local_only_request_received
+        = 692 [(module) = "wifi"];
+    optional WifiLocalOnlyRequestScanTriggered wifi_local_only_request_scan_triggered
+        = 693 [(module) = "wifi"];
+    optional WifiThreadTaskExecuted wifi_thread_task_executed = 694 [(module) = "wifi"];
+
+    // Pull metrics
+    optional WifiAwareCapabilities wifi_aware_capabilities = 10190 [(module) = "wifi"];
 }
 
 /**
@@ -54,6 +70,14 @@
     optional int32 discovery_ndp_latency_ms= 5;
     // Channel frequency in MHz, 0 if unavailable, >= 2400 otherwise.
     optional int32 channel_frequency_mhz= 6;
+    // If the instant mode is enabled
+    optional bool is_instant_mode = 7;
+    // The caller type of the NDP request
+    optional android.net.wifi.WifiCallerType caller_type = 8;
+    // The Attribution tag to identify the caller
+    optional string attribution_tag = 9;
+    // The uid of the caller
+    optional int32 uid = 10;
 }
 
 /**
@@ -62,6 +86,12 @@
 message WifiAwareAttachReported {
     // Status of attach
     optional android.net.wifi.AwareStatus status = 1;
+    // The caller type of the attach
+    optional android.net.wifi.WifiCallerType caller_type = 2;
+    // The Attribution tag to identify the caller
+    optional string attribution_tag = 3;
+    // The uid of the caller
+    optional int32 uid = 4;
 }
 
 /**
@@ -92,6 +122,8 @@
     optional Reason reason = 1;
     // Self recovery result
     optional Result result = 2;
+    // Record time elapsed from last trigger event
+    optional int64 time_elapsed_from_last_millis = 3;
 }
 
 /**
@@ -199,3 +231,131 @@
     // Max num of associated clients for the entire session
     optional int32 max_clients = 11;
 }
+
+/**
+ * Logged when wifi lock is released
+ */
+message WifiLockReleased {
+    // Attribution tag of the caller
+    optional string attribution_tag = 1;
+    // UID of the caller
+    optional int32 uid = 2;
+    // Permission model of the caller
+    optional android.net.wifi.WifiCallerType caller_type = 3;
+    // Lock mode
+    optional android.net.wifi.WifiModeEnum mode = 4;
+    // For how long the lock is acquired in milliseconds
+    optional int32 acquired_duration = 5;
+    // Whether power save disable is allowed during lock acquire
+    optional bool is_powersave_disable_allowed = 6;
+    // Whether the application which acquired the lock is exempted from screen ON
+    optional bool is_app_exempted_from_screen_on = 7;
+    // Whether the application which acquired the lock is exempted from being foreground
+    optional bool is_app_exempted_from_foreground = 8;
+}
+
+/**
+ * Logged when wifi lock is deactivated
+ */
+message WifiLockDeactivated {
+    // Attribution tag of the caller
+    optional string attribution_tag = 1;
+    // UID of the caller
+    optional int32 uid = 2;
+    // Permission model of the caller
+    optional android.net.wifi.WifiCallerType caller_type = 3;
+    // Lock mode
+    optional android.net.wifi.WifiModeEnum mode = 4;
+    // For how long the lock is activated in milliseconds
+    optional int32 activated_duration = 5;
+    // Whether power save disable is allowed during the lock activation
+    optional bool is_powersave_disable_allowed = 6;
+    // Whether the application which activated the lock is exempted from screen ON
+    optional bool is_exempted_from_screen_on = 7;
+    // Whether the application which activated the lock is exempted from being foreground
+    optional bool is_exempted_from_foreground = 8;
+}
+
+/**
+ * Pull metrics for the Wifi Aware capabilities supported by the device
+ */
+message WifiAwareCapabilities {
+    // If instant mode supported
+    optional bool is_instant_mode_supported = 1;
+    // If pairing supported
+    optional bool is_pairing_supported = 2;
+    // If suspension supported
+    optional bool is_suspension_supported = 3;
+    // Supported cipher suites
+    optional int32 cipher_suites = 4;
+    // Max number of the NDI
+    optional int32 ndi_number = 5;
+    // Max number of the NDP
+    optional int32 ndp_number = 6;
+    // Max number of the discovery session
+    optional int32 discovery_session_number = 7;
+}
+
+// Logged when the Wifi Aware resources is used by Apps
+message WifiAwareResourceUsingChanged {
+    optional int32 ndp_num = 1;
+    optional int32 discovery_session_num = 2;
+}
+
+/**
+ * Logged when Aware HAL API is called and send response
+ */
+message WifiAwareHalApiCalled {
+    // The API name
+    optional android.net.wifi.AwareHalApi command = 1;
+    // Status of the API call
+    optional android.net.wifi.AwareStatus status = 2;
+    // The time for this API call to execute
+    optional int32 running_time_ms = 3;
+}
+
+/**
+ * Logged when local-only request received
+ */
+message WifiLocalOnlyRequestReceived {
+    enum UserAction {
+        USER_UNSPECIFIED = 0;
+        USER_BYPASS = 1;
+        USER_ACCEPT = 2;
+        USER_REJECT = 3;
+    }
+    // The AttributionNode to identify the caller
+    repeated AttributionNode attribution_node = 1;
+    // User action on the local-only request
+    optional UserAction action = 2;
+    // The caller type of the request
+    optional android.net.wifi.WifiCallerType caller_type = 3;
+}
+
+// Logged when matched scan result received for local only request
+message WifiLocalOnlyRequestScanTriggered {
+    // The AttributionNode to identify the caller
+    repeated AttributionNode attribution_node = 1;
+    // How many channel specified in the request
+    optional int32 number_channel_specified = 2;
+    // Scan time to get a match
+    optional int32 match_delay_ms = 3;
+    // The caller type of the request
+    optional android.net.wifi.WifiCallerType caller_type = 4;
+}
+
+// Logged when a task on the Wifi thread is executed
+message WifiThreadTaskExecuted {
+    // How long does it take to execute the task
+    optional int32 running_time_ms = 1;
+    // How long does it take to start execute the task
+    optional int32 blocking_time_ms = 2;
+    // The name of the internal task running on Wifi Thread
+    optional string task_name = 3;
+}
+
+// Logged when Wifi config save to storage triggered
+message WifiConfigSaved {
+    // How long does it cost to save all config
+    optional int32 running_time_ms = 1;
+}
\ No newline at end of file
diff --git a/stats/enums/adservices/common/adservices_enums.proto b/stats/enums/adservices/common/adservices_enums.proto
index f5bc3ef..e547f3d 100644
--- a/stats/enums/adservices/common/adservices_enums.proto
+++ b/stats/enums/adservices/common/adservices_enums.proto
@@ -203,7 +203,7 @@
   // source of truth.
   TOPICS_INVALID_BLOCKED_TOPICS_SOURCE_OF_TRUTH = 1034;
 
-  // RuntimeException occurred when unable to record the blocked topic.
+  // RuntimeException occurred when unable to remove the blocked topic.
   TOPICS_REMOVE_BLOCKED_TOPIC_FAILURE = 1035;
 
   // RuntimeException occurred when unable to get all blocked topics.
@@ -316,3 +316,14 @@
   /** Skipped execution due to user consent is revoked. */
   SKIP_FOR_USER_CONSENT_REVOKED = 9;
 }
+
+// Region of the user who interacted with AdServicesSettings UI.
+enum AdServiceSettingRegion {
+  // fallback when getDeviceRegion call failed.
+  REGION_UNSPECIFIED = 0;
+  // European Union user (based on isoCountryInfo).
+  EU = 1;
+  // Non-European Union user (based on isoCountryInfo).
+  ROW = 2;
+}
+
diff --git a/stats/enums/app/enums.proto b/stats/enums/app/enums.proto
index cf8fefb..2e25db7 100644
--- a/stats/enums/app/enums.proto
+++ b/stats/enums/app/enums.proto
@@ -645,3 +645,32 @@
     HOSTING_COMPONENT_TYPE_FOREGROUND_SERVICE = 0x0100;
     HOSTING_COMPONENT_TYPE_BOUND_SERVICE = 0x0200;
 }
+
+/**
+ * Types of broadcast.
+ */
+enum BroadcastType {
+    BROADCAST_TYPE_NONE                           = 0;
+    BROADCAST_TYPE_BACKGROUND                     = 0x0001; // 1 << 0
+    BROADCAST_TYPE_FOREGROUND                     = 0x0002; // 1 << 1
+    BROADCAST_TYPE_ALARM                          = 0x0004; // 1 << 2
+    BROADCAST_TYPE_INTERACTIVE                    = 0x0008; // 1 << 3
+    BROADCAST_TYPE_ORDERED                        = 0x0010; // 1 << 4
+    BROADCAST_TYPE_PRIORITIZED                    = 0x0020; // 1 << 5
+    BROADCAST_TYPE_RESULT_TO                      = 0x0040; // 1 << 6
+    BROADCAST_TYPE_DEFERRABLE_UNTIL_ACTIVE        = 0x0080; // 1 << 7
+    BROADCAST_TYPE_PUSH_MESSAGE                   = 0x0100; // 1 << 8
+    BROADCAST_TYPE_PUSH_MESSAGE_OVER_QUOTA        = 0x0200; // 1 << 9
+    BROADCAST_TYPE_STICKY                         = 0x0400; // 1 << 10
+    BROADCAST_TYPE_INITIAL_STICKY                 = 0x0800; // 1 << 11
+}
+
+/**
+ * Delivery group policy applied to a broadcast.
+ * Keep it in sync with BroadcastOptions#DeliveryGroupPolicy.
+ */
+enum BroadcastDeliveryGroupPolicy {
+    BROADCAST_DELIVERY_GROUP_POLICY_ALL = 0;
+    BROADCAST_DELIVERY_GROUP_POLICY_MOST_RECENT = 1;
+    BROADCAST_DELIVERY_GROUP_POLICY_MERGED = 2;
+}
diff --git a/stats/enums/app/settings_enums.proto b/stats/enums/app/settings_enums.proto
index 0fe8e2d..50a6809 100644
--- a/stats/enums/app/settings_enums.proto
+++ b/stats/enums/app/settings_enums.proto
@@ -4018,6 +4018,11 @@
     // CATEGORY: SETTINGS
     // OS: U
     ACCOUNT_DETAIL = 2031;
+
+    // OPEN: Settings > Wireless > VPN
+    // CATEGORY: SETTINGS
+    // OS: U
+    VPN_APP_MANAGEMENT = 2033;
 }
 
 // Battery Saver schedule types.
diff --git a/stats/enums/autofill/enums.proto b/stats/enums/autofill/enums.proto
index 631fc7e..f671586 100644
--- a/stats/enums/autofill/enums.proto
+++ b/stats/enums/autofill/enums.proto
@@ -120,3 +120,11 @@
   PICK_REASON_PCC_DETECTION_ONLY = 4;
   PICK_REASON_PCC_DETECTION_PREFERRED_WITH_PROVIDER = 5;
 }
+
+// Enum for specifying which detection provider gets the preference when choosing
+// final datasets.
+enum DetectionPreference {
+  DETECTION_PREFER_UNKONWN = 0;
+  DETECTION_PREFER_AUTOFILL_PROVIDER = 1;
+  DETECTION_PREFER_PCC = 2;
+}
\ No newline at end of file
diff --git a/stats/enums/bluetooth/enums.proto b/stats/enums/bluetooth/enums.proto
index 6c9afab..a081118 100644
--- a/stats/enums/bluetooth/enums.proto
+++ b/stats/enums/bluetooth/enums.proto
@@ -412,3 +412,15 @@
     MAJOR_CLASS_TOY = 0x0800;
     MAJOR_CLASS_HEALTH = 0x0900;
 }
+
+enum ProfileConnectionResult {
+    RESULT_UNKNOWN = 0;
+    RESULT_SUCCESS = 1;
+    RESULT_FAILURE = 2;
+}
+
+enum ProfileConnectionReason {
+    REASON_UNKNOWN = 0;
+    REASON_SUCCESS = 1;
+    REASON_UNEXPECTED_STATE = 2;
+}
diff --git a/stats/enums/wifi/enums.proto b/stats/enums/wifi/enums.proto
index 0bfde45..9dd4a57 100644
--- a/stats/enums/wifi/enums.proto
+++ b/stats/enums/wifi/enums.proto
@@ -222,3 +222,45 @@
     // Wi-Fi 802.11be
     WIFI_STANDARD_11BE = 6;
 }
+
+/**
+ * Role of the client mode manager
+ */
+enum ClientModeRole {
+    ROLE_UNSPECIFIED = 0;
+    ROLE_CLIENT_PRIMARY = 1;
+    ROLE_CLIENT_SECONDARY_LONG_LIVED = 2;
+    ROLE_CLIENT_SECONDARY_TRANSIENT = 3;
+    ROLE_CLIENT_SECONDARY_INTERNET = 4;
+    ROLE_CLIENT_LOCAL_ONLY = 5;
+    ROLE_CLIENT_OTHERS = 6;
+}
+
+/**
+ * Aware HAL API
+ */
+enum AwareHalApi {
+    AWARE_API_UNKNOWN = 0;
+    AWARE_CONFIG_REQUEST = 1;
+    AWARE_CREATE_DATA_INTERFACE_REQUEST = 2;
+    AWARE_DELETE_DATA_INTERFACE_REQUEST = 3;
+    AWARE_DISABLE_REQUEST = 4;
+    AWARE_ENABLE_REQUEST = 5;
+    AWARE_GET_CAPABILITIES_REQUEST = 6;
+    AWARE_INITIATE_DATA_PATH_REQUEST = 7;
+    AWARE_REGISTER_EVENT_CALLBACK = 8;
+    AWARE_RESPOND_TO_DATA_PATH_INDICATION_REQUEST = 9;
+    AWARE_START_PUBLISH_REQUEST = 10;
+    AWARE_START_SUBSCRIBE_REQUEST = 11;
+    AWARE_STOP_PUBLISH_REQUEST = 12;
+    AWARE_STOP_SUBSCRIBE_REQUEST = 13;
+    AWARE_TERMINATE_DATA_PATH_REQUEST = 14;
+    AWARE_SUSPEND_REQUEST = 15;
+    AWARE_RESUME_REQUEST = 16;
+    AWARE_TRANSMIT_FOLLOW_UP_REQUEST = 17;
+    AWARE_INITIATE_PAIRING_REQUEST = 18;
+    AWARE_RESPOND_TO_PAIRING_INDICATION_REQUEST = 19;
+    AWARE_INITIATE_BOOTSTRAPPING_REQUEST = 20;
+    AWARE_RESPOND_TO_BOOTSTRAPPING_INDICATION_REQUEST = 21;
+    AWARE_TERMINATE_PAIRING_REQUEST = 22;
+}
\ No newline at end of file
diff --git a/stats/express/catalog/biometric.cfg b/stats/express/catalog/biometric.cfg
new file mode 100644
index 0000000..952570c
--- /dev/null
+++ b/stats/express/catalog/biometric.cfg
@@ -0,0 +1,9 @@
+express_metric {
+    id: "biometric.value_scheduler_watchdog_triggered_count"
+    display_name: "Biometric scheduler operation watchdog triggered count"
+    description: "Number of times the watchdog had to clear the scheduler due to a potentially hung operation."
+    owner_email: "android-biometrics-core+apc@google.com"
+    owner_email: "diyab@google.com"
+    unit: UNIT_COUNT
+    type: COUNTER
+}
diff --git a/stats/express/catalog/job_scheduler.cfg b/stats/express/catalog/job_scheduler.cfg
index e262c88..759e55a 100644
--- a/stats/express/catalog/job_scheduler.cfg
+++ b/stats/express/catalog/job_scheduler.cfg
@@ -49,7 +49,7 @@
 }
 
 express_metric {
-    id: "job_scheduler.value_cntr_w_uid_initial_setNotification_call_optional"
+    id: "job_scheduler.value_cntr_w_uid_initial_set_notification_call_optional"
     display_name: "First-time optional JobService.setNotification() calls"
     description: "Number of first-time calls to JobService.setNotification() when the call was optional"
     owner_email: "nalini-team@google.com"
@@ -59,7 +59,7 @@
 }
 
 express_metric {
-    id: "job_scheduler.value_cntr_w_uid_initial_setNotification_call_required"
+    id: "job_scheduler.value_cntr_w_uid_initial_set_notification_call_required"
     display_name: "First-time required JobService.setNotification() calls"
     description: "Number of first-time calls to JobService.setNotification() when the call was required"
     owner_email: "nalini-team@google.com"
@@ -129,7 +129,7 @@
 }
 
 express_metric {
-    id: "job_scheduler.value_cntr_w_uid_setNotification_changed_notification_ids"
+    id: "job_scheduler.value_cntr_w_uid_set_notification_changed_notification_ids"
     display_name: "JobService.setNotification() changed notification IDs"
     description: "Number of time JobService.setNotification() calls used a different notification ID"
     owner_email: "nalini-team@google.com"
@@ -149,7 +149,7 @@
 }
 
 express_metric {
-    id: "job_scheduler.value_cntr_w_uid_slow_app_response_onStartJob"
+    id: "job_scheduler.value_cntr_w_uid_slow_app_response_on_start_job"
     display_name: "Slow app response to onStartJob()"
     description: "Number of times apps hit the timeout when responding to onStartJob"
     owner_email: "nalini-team@google.com"
@@ -159,7 +159,7 @@
 }
 
 express_metric {
-    id: "job_scheduler.value_cntr_w_uid_slow_app_response_onStopJob"
+    id: "job_scheduler.value_cntr_w_uid_slow_app_response_on_stop_job"
     display_name: "Slow app response to onStopJob"
     description: "Number of times apps hit the timeout when responding to onStopJob"
     owner_email: "nalini-team@google.com"
@@ -169,7 +169,7 @@
 }
 
 express_metric {
-    id: "job_scheduler.value_cntr_w_uid_slow_app_response_setNotification"
+    id: "job_scheduler.value_cntr_w_uid_slow_app_response_set_notification"
     display_name: "Slow app response for setNotification"
     description: "Number of times apps hit the timeout before calling setNotification"
     owner_email: "nalini-team@google.com"
@@ -179,7 +179,7 @@
 }
 
 express_metric {
-    id: "job_scheduler.value_cntr_w_uid_subsequent_setNotification_call_optional"
+    id: "job_scheduler.value_cntr_w_uid_subsequent_set_notification_call_optional"
     display_name: "Subsequent JobService.setNotification() calls if the first was optional"
     description: "Number of subsequent calls to JobService.setNotification() if the first call was optional"
     owner_email: "nalini-team@google.com"
@@ -189,7 +189,7 @@
 }
 
 express_metric {
-    id: "job_scheduler.value_cntr_w_uid_subsequent_setNotification_call_required"
+    id: "job_scheduler.value_cntr_w_uid_subsequent_set_notification_call_required"
     display_name: "Subsequent JobService.setNotification() calls if the first was required"
     description: "Number of subsequent calls to JobService.setNotification() if the first call was required"
     owner_email: "nalini-team@google.com"
diff --git a/stats/message/mediametrics_message.proto b/stats/message/mediametrics_message.proto
index b4337ce..9cf820f 100644
--- a/stats/message/mediametrics_message.proto
+++ b/stats/message/mediametrics_message.proto
@@ -131,7 +131,7 @@
  * Logged from:
  *   frameworks/av/media/libstagefright/MediaCodec.cpp
  *   frameworks/av/services/mediaanalytics/statsd_codec.cpp
- * Next Tag: 72
+ * Next Tag: 73
  */
 message CodecData {
   optional string codec = 1;
@@ -209,6 +209,7 @@
   optional int32 flush_count = 69;
   optional int32 set_surface_count = 70;
   optional int32 resolution_change_count = 71;
+  optional int32 component_color_format = 72;
   // !!!WARNING!!!
   // Keep synchronized with MediaCodecReported in atoms.proto
   // Also keep AStatsEvent serialization synchronized in statsd_codec.cpp