Merge "Add new IKE option in IkeSessionParamsUtils"
diff --git a/StubLibraries.bp b/StubLibraries.bp
index fc046fb..d043464 100644
--- a/StubLibraries.bp
+++ b/StubLibraries.bp
@@ -530,11 +530,17 @@
extensions_info_file: ":sdk-extensions-info",
}
+// This module can be built with:
+// m out/soong/.intermediates/frameworks/base/api_versions_module_lib/android_common/metalava/api-versions.xml
droidstubs {
name: "api_versions_module_lib",
srcs: [":android_module_stubs_current_with_test_libs{.jar}"],
generate_stubs: false,
api_levels_annotations_enabled: true,
+ // this only has the non-updatable portions of the module lib sdk,
+ // which can reference classes from updatable apexes, so remove references to them
+ // from this api_versions file.
+ flags: ["--remove-missing-class-references-in-api-levels"],
api_levels_annotations_dirs: [
"sdk-dir",
"api-versions-jars-dir",
@@ -548,6 +554,10 @@
srcs: [":android_system_server_stubs_current_with_test_libs{.jar}"],
generate_stubs: false,
api_levels_annotations_enabled: true,
+ // this only has the non-updatable portions of the system server sdk,
+ // which can reference classes from updatable apexes, so remove references to them
+ // from this api_versions file.
+ flags: ["--remove-missing-class-references-in-api-levels"],
api_levels_annotations_dirs: [
"sdk-dir",
"api-versions-jars-dir",
diff --git a/core/java/android/app/OWNERS b/core/java/android/app/OWNERS
index 5e5461b..eea607b 100644
--- a/core/java/android/app/OWNERS
+++ b/core/java/android/app/OWNERS
@@ -4,7 +4,7 @@
# ActivityManager
per-file ActivityManager* = file:/services/core/java/com/android/server/am/OWNERS
-per-file ApplicationStartInfo* = file:/services/core/java/com/android/server/am/OWNERS
+per-file *ApplicationStartInfo* = file:/services/core/java/com/android/server/am/OWNERS
per-file ApplicationErrorReport* = file:/services/core/java/com/android/server/am/OWNERS
per-file ApplicationExitInfo* = file:/services/core/java/com/android/server/am/OWNERS
per-file Application.java = file:/services/core/java/com/android/server/am/OWNERS
diff --git a/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java
index c8dc2d0..b52daab 100644
--- a/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java
@@ -528,8 +528,15 @@
boolean status = true;
synchronized (mInterfaceLock) {
try {
- mSessionProcessor.onCaptureSessionStart(mRequestProcessor);
- mInitialized = true;
+ if (mSessionProcessor != null) {
+ mSessionProcessor.onCaptureSessionStart(mRequestProcessor);
+ mInitialized = true;
+ } else {
+ Log.v(TAG, "Failed to start capture session, session released before " +
+ "extension start!");
+ status = false;
+ mCaptureSession.close();
+ }
} catch (RemoteException e) {
Log.e(TAG, "Failed to start capture session,"
+ " extension service does not respond!");
diff --git a/core/java/android/service/notification/OWNERS b/core/java/android/service/notification/OWNERS
index debb493..bb0e6ab 100644
--- a/core/java/android/service/notification/OWNERS
+++ b/core/java/android/service/notification/OWNERS
@@ -1,6 +1,7 @@
# Bug component: 34005
juliacr@google.com
-pixel@google.com
+yurilin@google.com
+jeffdq@google.com
dsandler@android.com
dsandler@google.com
diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp
index 963a83e..fad9e0e 100644
--- a/core/jni/com_android_internal_os_Zygote.cpp
+++ b/core/jni/com_android_internal_os_Zygote.cpp
@@ -1923,15 +1923,16 @@
const char* nice_name_ptr = nice_name.has_value() ? nice_name.value().c_str() : nullptr;
android_mallopt_gwp_asan_options_t gwp_asan_options;
+ const char* kGwpAsanAppRecoverableSysprop =
+ "persist.device_config.memory_safety_native.gwp_asan_recoverable_apps";
// The system server doesn't have its nice name set by the time SpecializeCommon is called.
gwp_asan_options.program_name = nice_name_ptr ?: process_name;
switch (runtime_flags & RuntimeFlags::GWP_ASAN_LEVEL_MASK) {
default:
case RuntimeFlags::GWP_ASAN_LEVEL_DEFAULT:
- // TODO(b/247012630): Switch this to Action::TURN_ON_FOR_APP_SAMPLED_NON_CRASHING once
- // performance and syshealth testing is completed, making the default for non-system
- // apps that don't specify a `gwpAsanMode` in their manifest to be sampled-recoverable.
- gwp_asan_options.desire = Action::DONT_TURN_ON_UNLESS_OVERRIDDEN;
+ gwp_asan_options.desire = GetBoolProperty(kGwpAsanAppRecoverableSysprop, true)
+ ? Action::TURN_ON_FOR_APP_SAMPLED_NON_CRASHING
+ : Action::DONT_TURN_ON_UNLESS_OVERRIDDEN;
android_mallopt(M_INITIALIZE_GWP_ASAN, &gwp_asan_options, sizeof(gwp_asan_options));
break;
case RuntimeFlags::GWP_ASAN_LEVEL_NEVER:
diff --git a/core/proto/android/app/OWNERS b/core/proto/android/app/OWNERS
index 4d76aee..a137ea9 100644
--- a/core/proto/android/app/OWNERS
+++ b/core/proto/android/app/OWNERS
@@ -1,2 +1,3 @@
+per-file appstartinfo.proto = file:/services/core/java/com/android/server/am/OWNERS
per-file location_time_zone_manager.proto = file:platform/frameworks/base:/services/core/java/com/android/server/timezonedetector/OWNERS
per-file time_zone_detector.proto = file:platform/frameworks/base:/services/core/java/com/android/server/timezonedetector/OWNERS
diff --git a/core/proto/android/server/OWNERS b/core/proto/android/server/OWNERS
index 72d39bf..c6d3cda 100644
--- a/core/proto/android/server/OWNERS
+++ b/core/proto/android/server/OWNERS
@@ -1 +1,2 @@
+per-file activitymanagerservice.proto = file:/services/core/java/com/android/server/am/OWNERS
per-file window*.proto = file:/services/core/java/com/android/server/wm/OWNERS
diff --git a/media/java/android/media/BluetoothProfileConnectionInfo.java b/media/java/android/media/BluetoothProfileConnectionInfo.java
index a316c21..e4dc152 100644
--- a/media/java/android/media/BluetoothProfileConnectionInfo.java
+++ b/media/java/android/media/BluetoothProfileConnectionInfo.java
@@ -112,8 +112,10 @@
}
/**
- * constructor for le audio info
- *
+ * Factory method for <code>BluetoothProfileConnectionInfo</code> for an LE device
+ * Use this method for an input device connection,
+ * or for an output device connection if the connection volume is unknown,
+ * otherwise use {@link #createLeAudioOutputInfo(boolean, int)}.
* @param suppressNoisyIntent if true the {@link AudioManager.ACTION_AUDIO_BECOMING_NOISY}
* intent will not be sent.
*
@@ -127,6 +129,8 @@
/**
* Factory method for <code>BluetoothProfileConnectionInfo</code> for an LE output device
+ * Use this method for an output device connection with a volume to be used at connection
+ * time.
* @param suppressNoisyIntent if true the {@link AudioManager.ACTION_AUDIO_BECOMING_NOISY}
* intent will not be sent.
* @param volume the volume index of the device, -1 if unknown or to be ignored
diff --git a/packages/SettingsLib/res/values/arrays.xml b/packages/SettingsLib/res/values/arrays.xml
index 663e8e4..9108449 100644
--- a/packages/SettingsLib/res/values/arrays.xml
+++ b/packages/SettingsLib/res/values/arrays.xml
@@ -116,6 +116,36 @@
<item>full</item>
</string-array>
+ <!-- Titles for Bluetooth HCI Snoop Filtered Logging -->
+ <string-array name="bt_hci_snoop_log_filters_entries">
+ <item>Headers Filtered</item>
+ <item>A2DP Media Packets Filtered</item>
+ <item>RFCOMM Channel Filtered</item>
+ </string-array>
+
+ <!-- Values for Bluetooth HCI Snoop Filtered Logging -->
+ <string-array name="bt_hci_snoop_log_filters_values" translatable="false">
+ <item>headers</item>
+ <item>profiles.a2dp</item>
+ <item>profiles.rfcomm</item>
+ </string-array>
+
+ <!-- Titles for Bluetooth HCI Snoop Filtered Logging -->
+ <string-array name="bt_hci_snoop_log_profile_filter_entries">
+ <item>Disabled</item>
+ <item>Magic</item>
+ <item>Header</item>
+ <item>Full Filter</item>
+ </string-array>
+
+ <!-- Values for Bluetooth HCI Snoop Filtered Logging -->
+ <string-array name="bt_hci_snoop_log_profile_filter_values" translatable="false">
+ <item>disabled</item>
+ <item>magic</item>
+ <item>header</item>
+ <item>fullfilter</item>
+ </string-array>
+
<!-- Titles for Bluetooth AVRCP Versions -->
<string-array name="bluetooth_avrcp_versions">
<item>AVRCP 1.5 (Default)</item>
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java
index 1a65717..1940986 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java
@@ -236,7 +236,7 @@
/**
* @return whether high quality audio is enabled or not
*/
- @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
public boolean isHighQualityAudioEnabled(BluetoothDevice device) {
BluetoothDevice bluetoothDevice = (device != null) ? device : getActiveDevice();
if (bluetoothDevice == null) {
@@ -288,7 +288,7 @@
* @param device to get codec label from
* @return the label associated with the device codec
*/
- @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
public String getHighQualityAudioOptionLabel(BluetoothDevice device) {
BluetoothDevice bluetoothDevice = (device != null) ? device : getActiveDevice();
int unknownCodecId = R.string.bluetooth_profile_a2dp_high_quality_unknown_codec;
diff --git a/services/core/java/com/android/server/Watchdog.java b/services/core/java/com/android/server/Watchdog.java
index 1fab28e..c7d8ab2 100644
--- a/services/core/java/com/android/server/Watchdog.java
+++ b/services/core/java/com/android/server/Watchdog.java
@@ -160,13 +160,21 @@
public static final String[] AIDL_INTERFACE_PREFIXES_OF_INTEREST = new String[] {
"android.hardware.biometrics.face.IFace/",
"android.hardware.biometrics.fingerprint.IFingerprint/",
+ "android.hardware.bluetooth.IBluetoothHci/",
+ "android.hardware.camera.provider.ICameraProvider/",
+ "android.hardware.gnss.IGnss/",
+ "android.hardware.graphics.allocator.IAllocator/",
"android.hardware.graphics.composer3.IComposer/",
+ "android.hardware.health.IHealth/",
"android.hardware.input.processor.IInputProcessor/",
"android.hardware.light.ILights/",
+ "android.hardware.neuralnetworks.IDevice/",
"android.hardware.power.IPower/",
"android.hardware.power.stats.IPowerStats/",
+ "android.hardware.sensors.ISensors/",
"android.hardware.vibrator.IVibrator/",
- "android.hardware.vibrator.IVibratorManager/"
+ "android.hardware.vibrator.IVibratorManager/",
+ "android.system.suspend.ISystemSuspend/",
};
private static Watchdog sWatchdog;
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index e0d324a..05915d9 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -2329,10 +2329,6 @@
Log.w(TAG, "audioFormat to enable is not a surround format.");
return false;
}
- if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.WRITE_SETTINGS)
- != PackageManager.PERMISSION_GRANTED) {
- throw new SecurityException("Missing WRITE_SETTINGS permission");
- }
final long token = Binder.clearCallingIdentity();
try {
@@ -2400,11 +2396,6 @@
/** @see AudioManager#getEncodedSurroundMode() */
@Override
public int getEncodedSurroundMode(int targetSdkVersion) {
- if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.WRITE_SETTINGS)
- != PackageManager.PERMISSION_GRANTED) {
- throw new SecurityException("Missing WRITE_SETTINGS permission");
- }
-
final long token = Binder.clearCallingIdentity();
try {
synchronized (mSettingsLock) {
diff --git a/services/core/java/com/android/server/connectivity/NetdEventListenerService.java b/services/core/java/com/android/server/connectivity/NetdEventListenerService.java
index ee5bda3..3a4aaa7 100644
--- a/services/core/java/com/android/server/connectivity/NetdEventListenerService.java
+++ b/services/core/java/com/android/server/connectivity/NetdEventListenerService.java
@@ -28,7 +28,6 @@
import android.net.NetworkRequest;
import android.net.metrics.ConnectStats;
import android.net.metrics.DnsEvent;
-import android.net.metrics.INetdEventListener;
import android.net.metrics.NetworkMetrics;
import android.net.metrics.WakeupEvent;
import android.net.metrics.WakeupStats;
@@ -44,6 +43,7 @@
import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.RingBuffer;
import com.android.internal.util.TokenBucket;
+import com.android.net.module.util.BaseNetdEventListener;
import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityEvent;
import java.io.PrintWriter;
@@ -54,7 +54,7 @@
/**
* Implementation of the INetdEventListener interface.
*/
-public class NetdEventListenerService extends INetdEventListener.Stub {
+public class NetdEventListenerService extends BaseNetdEventListener {
public static final String SERVICE_NAME = "netd_listener";
@@ -208,15 +208,18 @@
// Called concurrently by multiple binder threads.
// This method must not block or perform long-running operations.
public synchronized void onDnsEvent(int netId, int eventType, int returnCode, int latencyMs,
- String hostname, String[] ipAddresses, int ipAddressesCount, int uid)
- throws RemoteException {
+ String hostname, String[] ipAddresses, int ipAddressesCount, int uid) {
long timestamp = System.currentTimeMillis();
getMetricsForNetwork(timestamp, netId).addDnsResult(eventType, returnCode, latencyMs);
for (INetdEventCallback callback : mNetdEventCallbackList) {
if (callback != null) {
- callback.onDnsEvent(netId, eventType, returnCode, hostname, ipAddresses,
- ipAddressesCount, timestamp, uid);
+ try {
+ callback.onDnsEvent(netId, eventType, returnCode, hostname, ipAddresses,
+ ipAddressesCount, timestamp, uid);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
}
}
}
@@ -225,11 +228,14 @@
// Called concurrently by multiple binder threads.
// This method must not block or perform long-running operations.
public synchronized void onNat64PrefixEvent(int netId,
- boolean added, String prefixString, int prefixLength)
- throws RemoteException {
+ boolean added, String prefixString, int prefixLength) {
for (INetdEventCallback callback : mNetdEventCallbackList) {
if (callback != null) {
- callback.onNat64PrefixEvent(netId, added, prefixString, prefixLength);
+ try {
+ callback.onNat64PrefixEvent(netId, added, prefixString, prefixLength);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
}
}
}
@@ -238,11 +244,14 @@
// Called concurrently by multiple binder threads.
// This method must not block or perform long-running operations.
public synchronized void onPrivateDnsValidationEvent(int netId,
- String ipAddress, String hostname, boolean validated)
- throws RemoteException {
+ String ipAddress, String hostname, boolean validated) {
for (INetdEventCallback callback : mNetdEventCallbackList) {
if (callback != null) {
- callback.onPrivateDnsValidationEvent(netId, ipAddress, hostname, validated);
+ try {
+ callback.onPrivateDnsValidationEvent(netId, ipAddress, hostname, validated);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
}
}
}
@@ -251,13 +260,17 @@
// Called concurrently by multiple binder threads.
// This method must not block or perform long-running operations.
public synchronized void onConnectEvent(int netId, int error, int latencyMs, String ipAddr,
- int port, int uid) throws RemoteException {
+ int port, int uid) {
long timestamp = System.currentTimeMillis();
getMetricsForNetwork(timestamp, netId).addConnectResult(error, latencyMs, ipAddr);
for (INetdEventCallback callback : mNetdEventCallbackList) {
if (callback != null) {
- callback.onConnectEvent(ipAddr, port, timestamp, uid);
+ try {
+ callback.onConnectEvent(ipAddr, port, timestamp, uid);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
}
}
}
@@ -315,7 +328,7 @@
}
@Override
- public int getInterfaceVersion() throws RemoteException {
+ public int getInterfaceVersion() {
return this.VERSION;
}