Merge "Remove Redundant Variable for getStatusBarHeightForRotation" into main
diff --git a/core/jni/android_media_audio_common_AidlConversion.cpp b/core/jni/android_media_audio_common_AidlConversion.cpp
index 2ef817c..1a6091f 100644
--- a/core/jni/android_media_audio_common_AidlConversion.cpp
+++ b/core/jni/android_media_audio_common_AidlConversion.cpp
@@ -154,6 +154,13 @@
});
}
+/* Used for test purposes only, not efficient. */
+jobject legacy2aidl_audio_devices_t_AudioDeviceDescription_Parcel(JNIEnv* env, jobject,
+ int /*audio_devices_t*/ legacy) {
+ return legacy2aidlParcel(env, static_cast<audio_devices_t>(legacy),
+ legacy2aidl_audio_devices_t_AudioDeviceDescription);
+}
+
int aidl2legacy_AudioFormatDescription_Parcel_audio_format_t(JNIEnv* env, jobject,
jobject jParcel) {
return aidlParcel2legacy<
@@ -208,6 +215,8 @@
reinterpret_cast<void*>(aidl2legacy_AudioChannelLayout_Parcel_audio_channel_mask_t)},
{"legacy2aidl_audio_channel_mask_t_AudioChannelLayout_Parcel", "(IZ)Landroid/os/Parcel;",
reinterpret_cast<void*>(legacy2aidl_audio_channel_mask_t_AudioChannelLayout_Parcel)},
+ {"legacy2aidl_audio_devices_t_AudioDeviceDescription_Parcel", "(I)Landroid/os/Parcel;",
+ reinterpret_cast<void*>(legacy2aidl_audio_devices_t_AudioDeviceDescription_Parcel)},
{"aidl2legacy_AudioFormatDescription_Parcel_audio_format_t", "(Landroid/os/Parcel;)I",
reinterpret_cast<void*>(aidl2legacy_AudioFormatDescription_Parcel_audio_format_t)},
{"legacy2aidl_audio_format_t_AudioFormatDescription_Parcel", "(I)Landroid/os/Parcel;",
diff --git a/media/java/android/media/ThumbnailUtils.java b/media/java/android/media/ThumbnailUtils.java
index 9b238e1..f8f5366 100644
--- a/media/java/android/media/ThumbnailUtils.java
+++ b/media/java/android/media/ThumbnailUtils.java
@@ -372,10 +372,8 @@
final int width = Integer.parseInt(mmr.extractMetadata(METADATA_KEY_VIDEO_WIDTH));
final int height = Integer.parseInt(mmr.extractMetadata(METADATA_KEY_VIDEO_HEIGHT));
- // Fall back to middle of video
- // Note: METADATA_KEY_DURATION unit is in ms, not us.
- final long thumbnailTimeUs =
- Long.parseLong(mmr.extractMetadata(METADATA_KEY_DURATION)) * 1000 / 2;
+ // Returns whatever frame the implementation considers representative.
+ final long thumbnailTimeUs = -1;
// If we're okay with something larger than native format, just
// return a frame without up-scaling it
diff --git a/media/java/android/media/audio/common/AidlConversion.java b/media/java/android/media/audio/common/AidlConversion.java
index 8521d1c..fa21181 100644
--- a/media/java/android/media/audio/common/AidlConversion.java
+++ b/media/java/android/media/audio/common/AidlConversion.java
@@ -834,18 +834,18 @@
aidl.connection = AudioDeviceDescription.CONNECTION_IP_V4;
break;
case AudioSystem.DEVICE_IN_BUS:
- aidl.type = AudioDeviceType.IN_DEVICE;
- aidl.connection = AudioDeviceDescription.CONNECTION_BUS;
+ aidl.type = AudioDeviceType.IN_BUS;
break;
case AudioSystem.DEVICE_OUT_BUS:
- aidl.type = AudioDeviceType.OUT_DEVICE;
- aidl.connection = AudioDeviceDescription.CONNECTION_BUS;
+ aidl.type = AudioDeviceType.OUT_BUS;
break;
case AudioSystem.DEVICE_IN_PROXY:
aidl.type = AudioDeviceType.IN_AFE_PROXY;
+ aidl.connection = AudioDeviceDescription.CONNECTION_VIRTUAL;
break;
case AudioSystem.DEVICE_OUT_PROXY:
aidl.type = AudioDeviceType.OUT_AFE_PROXY;
+ aidl.connection = AudioDeviceDescription.CONNECTION_VIRTUAL;
break;
case AudioSystem.DEVICE_IN_USB_HEADSET:
aidl.type = AudioDeviceType.IN_HEADSET;
@@ -891,10 +891,27 @@
return aidl;
}
+ /** For test purposes only, not efficient. */
+ public static AudioDeviceDescription legacy2aidl_audio_devices_t_AudioDeviceDescriptionTestOnly(
+ int nativeType) {
+ Parcel in = legacy2aidl_audio_devices_t_AudioDeviceDescription_Parcel(nativeType);
+ if (in != null) {
+ try {
+ return AudioDeviceDescription.CREATOR.createFromParcel(in);
+ } finally {
+ in.recycle();
+ }
+ }
+ throw new IllegalArgumentException(
+ "Failed to convert legacy audio_devices_t value " + nativeType);
+ }
+
private static native int aidl2legacy_AudioChannelLayout_Parcel_audio_channel_mask_t(
Parcel aidl, boolean isInput);
private static native Parcel legacy2aidl_audio_channel_mask_t_AudioChannelLayout_Parcel(
int legacy, boolean isInput);
+ private static native Parcel legacy2aidl_audio_devices_t_AudioDeviceDescription_Parcel(
+ int legacy);
private static native int aidl2legacy_AudioFormatDescription_Parcel_audio_format_t(
Parcel aidl);
private static native Parcel legacy2aidl_audio_format_t_AudioFormatDescription_Parcel(
diff --git a/media/tests/aidltests/src/com/android/media/AidlConversionUnitTests.java b/media/tests/aidltests/src/com/android/media/AidlConversionUnitTests.java
index d9a1221..f98a3cf 100644
--- a/media/tests/aidltests/src/com/android/media/AidlConversionUnitTests.java
+++ b/media/tests/aidltests/src/com/android/media/AidlConversionUnitTests.java
@@ -18,7 +18,6 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
@@ -508,21 +507,21 @@
@Test
public void testAudioDeviceDescriptionConversion() {
for (int nativeDeviceType : AudioSystem.DEVICE_OUT_ALL_SET) {
- assertNotEquals(
- AidlConversion.api2aidl_NativeType_AudioDeviceDescription(nativeDeviceType)
- .type,
- AudioDeviceType.NONE);
+ assertEquals(
+ /* Reference value obtained from the native converter. */
+ AidlConversion.legacy2aidl_audio_devices_t_AudioDeviceDescriptionTestOnly(
+ nativeDeviceType),
+ AidlConversion.api2aidl_NativeType_AudioDeviceDescription(nativeDeviceType));
}
-
for (int nativeDeviceType : AudioSystem.DEVICE_IN_ALL_SET) {
if (nativeDeviceType == AudioSystem.DEVICE_IN_COMMUNICATION
|| nativeDeviceType == AudioSystem.DEVICE_IN_AMBIENT) {
continue;
}
- assertNotEquals(
- AidlConversion.api2aidl_NativeType_AudioDeviceDescription(nativeDeviceType)
- .type,
- AudioDeviceType.NONE);
+ assertEquals(
+ AidlConversion.legacy2aidl_audio_devices_t_AudioDeviceDescriptionTestOnly(
+ nativeDeviceType),
+ AidlConversion.api2aidl_NativeType_AudioDeviceDescription(nativeDeviceType));
}
}
diff --git a/services/core/java/com/android/server/adb/AdbDebuggingManager.java b/services/core/java/com/android/server/adb/AdbDebuggingManager.java
index 193d827..dcb25c2 100644
--- a/services/core/java/com/android/server/adb/AdbDebuggingManager.java
+++ b/services/core/java/com/android/server/adb/AdbDebuggingManager.java
@@ -95,6 +95,8 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
import java.security.MessageDigest;
import java.security.SecureRandom;
import java.util.AbstractMap;
@@ -107,7 +109,6 @@
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeoutException;
-import java.util.concurrent.atomic.AtomicBoolean;
/**
* Provides communication to the Android Debug Bridge daemon to allow, deny, or clear public keys
@@ -167,7 +168,6 @@
// The current info of the adbwifi connection.
private AdbConnectionInfo mAdbConnectionInfo = new AdbConnectionInfo();
// Polls for a tls port property when adb wifi is enabled
- private AdbConnectionPortPoller mConnectionPortPoller;
private final Ticker mTicker;
public AdbDebuggingManager(Context context) {
@@ -322,63 +322,13 @@
}
}
- /**
- * This class will poll for a period of time for adbd to write the port
- * it connected to.
- *
- * TODO(joshuaduong): The port is being sent via system property because the adbd socket
- * (AdbDebuggingManager) is not created when ro.adb.secure=0. Thus, we must communicate the
- * port through different means. A better fix would be to always start AdbDebuggingManager, but
- * it needs to adjust accordingly on whether ro.adb.secure is set.
- */
- private class AdbConnectionPortPoller extends Thread {
- private final String mAdbPortProp = "service.adb.tls.port";
- private final int mDurationSecs = 10;
- private AtomicBoolean mCanceled = new AtomicBoolean(false);
-
- @Override
- public void run() {
- Slog.d(TAG, "Starting adb port property poller");
- // Once adbwifi is enabled, we poll the service.adb.tls.port
- // system property until we get the port, or -1 on failure.
- // Let's also limit the polling to 10 seconds, just in case
- // something went wrong.
- for (int i = 0; i < mDurationSecs; ++i) {
- if (mCanceled.get()) {
- return;
- }
-
- // If the property is set to -1, then that means adbd has failed
- // to start the server. Otherwise we should have a valid port.
- int port = SystemProperties.getInt(mAdbPortProp, Integer.MAX_VALUE);
- if (port == -1 || (port > 0 && port <= 65535)) {
- onPortReceived(port);
- return;
- }
- SystemClock.sleep(1000);
- }
- Slog.w(TAG, "Failed to receive adb connection port");
- onPortReceived(-1);
- }
-
- private void onPortReceived(int port) {
- Slog.d(TAG, "Received tls port=" + port);
- Message msg = mHandler.obtainMessage(port > 0
- ? AdbDebuggingHandler.MSG_SERVER_CONNECTED
- : AdbDebuggingHandler.MSG_SERVER_DISCONNECTED);
- msg.obj = port;
- mHandler.sendMessage(msg);
- }
-
- public void cancelAndWait() {
- mCanceled.set(true);
- if (this.isAlive()) {
- try {
- this.join();
- } catch (InterruptedException e) {
- }
- }
- }
+ private void onServerServerPortReceived(int port) {
+ Slog.d(TAG, "Received tls port=" + port);
+ Message msg = mHandler.obtainMessage(port > 0
+ ? AdbDebuggingHandler.MSG_SERVER_CONNECTED
+ : AdbDebuggingHandler.MSG_SERVER_DISCONNECTED);
+ msg.obj = port;
+ mHandler.sendMessage(msg);
}
@VisibleForTesting
@@ -438,7 +388,7 @@
mInputStream = mSocket.getInputStream();
mHandler.sendEmptyMessage(AdbDebuggingHandler.MSG_ADBD_SOCKET_CONNECTED);
} catch (IOException ioe) {
- Slog.e(TAG, "Caught an exception opening the socket: " + ioe);
+ Slog.e(TAG, "adbd_auth domain socket unavailable: " + ioe);
closeSocketLocked();
throw ioe;
}
@@ -456,6 +406,8 @@
break;
}
+ Slog.d(TAG, "Recv packet: " + new String(Arrays.copyOfRange(buffer, 0, 2)));
+
if (buffer[0] == 'P' && buffer[1] == 'K') {
String key = new String(Arrays.copyOfRange(buffer, 2, count));
Slog.d(TAG, "Received public key: " + key);
@@ -517,6 +469,19 @@
Slog.e(TAG, "Got unknown transport type from adbd (" + transportType
+ ")");
}
+ } else if (buffer[0] == 'T' && buffer[1] == 'P') {
+ if (count < 4) {
+ Slog.e(TAG, "Bad TP message length " + count);
+ break;
+ }
+ ByteBuffer bytes = ByteBuffer.wrap(buffer, 2, 2);
+ bytes.order(ByteOrder.LITTLE_ENDIAN);
+
+ int port = bytes.getShort() & 0xFFFF;
+ Message msg = mHandler.obtainMessage(
+ AdbDebuggingHandler.MSG_TLS_SERVER_PORT);
+ msg.obj = port;
+ mHandler.sendMessage(msg);
} else {
Slog.e(TAG, "Wrong message: "
+ (new String(Arrays.copyOfRange(buffer, 0, 2))));
@@ -562,6 +527,7 @@
void sendResponse(String msg) {
synchronized (this) {
+ Slog.d(TAG, "Send packet " + msg);
if (!mStopped && mOutputStream != null) {
try {
mOutputStream.write(msg.getBytes());
@@ -786,6 +752,8 @@
// === Messages from other parts of the system
private static final int MESSAGE_KEY_FILES_UPDATED = 28;
+ private static final int MSG_TLS_SERVER_PORT = 29;
+
// === Messages we can send to adbd ===========
static final String MSG_DISCONNECT_DEVICE = "DD";
@@ -1075,8 +1043,6 @@
mContext.registerReceiver(mBroadcastReceiver, intentFilter);
SystemProperties.set(AdbService.WIFI_PERSISTENT_CONFIG_PROPERTY, "1");
- mConnectionPortPoller = new AdbDebuggingManager.AdbConnectionPortPoller();
- mConnectionPortPoller.start();
startAdbDebuggingThread();
mAdbWifiEnabled = true;
@@ -1121,8 +1087,6 @@
mContext.registerReceiver(mBroadcastReceiver, intentFilter);
SystemProperties.set(AdbService.WIFI_PERSISTENT_CONFIG_PROPERTY, "1");
- mConnectionPortPoller = new AdbDebuggingManager.AdbConnectionPortPoller();
- mConnectionPortPoller.start();
startAdbDebuggingThread();
mAdbWifiEnabled = true;
@@ -1228,28 +1192,14 @@
Settings.Global.putInt(mContentResolver,
Settings.Global.ADB_WIFI_ENABLED, 0);
stopAdbDebuggingThread();
- if (mConnectionPortPoller != null) {
- mConnectionPortPoller.cancelAndWait();
- mConnectionPortPoller = null;
- }
break;
}
case MSG_ADBD_SOCKET_CONNECTED: {
Slog.d(TAG, "adbd socket connected");
- if (mAdbWifiEnabled) {
- // In scenarios where adbd is restarted, the tls port may change.
- mConnectionPortPoller =
- new AdbDebuggingManager.AdbConnectionPortPoller();
- mConnectionPortPoller.start();
- }
break;
}
case MSG_ADBD_SOCKET_DISCONNECTED: {
Slog.d(TAG, "adbd socket disconnected");
- if (mConnectionPortPoller != null) {
- mConnectionPortPoller.cancelAndWait();
- mConnectionPortPoller = null;
- }
if (mAdbWifiEnabled) {
// In scenarios where adbd is restarted, the tls port may change.
onAdbdWifiServerDisconnected(-1);
@@ -1260,6 +1210,9 @@
mAdbKeyStore.reloadKeyMap();
break;
}
+ case MSG_TLS_SERVER_PORT: {
+ onServerServerPortReceived((int) msg.obj);
+ }
}
}
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index aa98590..3ad690d 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -152,6 +152,7 @@
import com.android.server.DeviceIdleInternal;
import com.android.server.LocalServices;
import com.android.server.net.BaseNetworkObserver;
+import com.android.server.utils.LazyJniRegistrar;
import libcore.io.IoUtils;
@@ -468,6 +469,8 @@
@VisibleForTesting
public static class Dependencies {
+ protected Dependencies() {}
+
public boolean isCallerSystem() {
return Binder.getCallingUid() == Process.SYSTEM_UID;
}
@@ -593,6 +596,14 @@
}
}
+ // A helper class to ensure JNI registration before use. This avoids native lib dependencies in
+ // test-only environments that mock or partially use the base Dependencies class.
+ private static final class DependenciesWithJniRegistration extends Dependencies {
+ static {
+ LazyJniRegistrar.registerVpn();
+ }
+ }
+
@VisibleForTesting
interface ValidationStatusCallback {
void onValidationStatus(int status);
@@ -600,8 +611,8 @@
public Vpn(Looper looper, Context context, INetworkManagementService netService, INetd netd,
@UserIdInt int userId, VpnProfileStore vpnProfileStore) {
- this(looper, context, new Dependencies(), netService, netd, userId, vpnProfileStore,
- new SystemServices(context), new Ikev2SessionCreator());
+ this(looper, context, new DependenciesWithJniRegistration(), netService, netd, userId,
+ vpnProfileStore, new SystemServices(context), new Ikev2SessionCreator());
}
@VisibleForTesting
diff --git a/services/core/java/com/android/server/utils/LazyJniRegistrar.java b/services/core/java/com/android/server/utils/LazyJniRegistrar.java
index 6d29e9e..927d092 100644
--- a/services/core/java/com/android/server/utils/LazyJniRegistrar.java
+++ b/services/core/java/com/android/server/utils/LazyJniRegistrar.java
@@ -47,4 +47,7 @@
/** Registers native methods for VrManagerService. */
public static native void registerVrManagerService();
+
+ /** Registers native methods for Vpn (the JNI counterpart for VpnManagerService). */
+ public static native void registerVpn();
}
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
index 85169b8..d8cfbb1 100644
--- a/services/core/jni/Android.bp
+++ b/services/core/jni/Android.bp
@@ -42,7 +42,6 @@
"com_android_server_devicepolicy_CryptoTestHelper.cpp",
"com_android_server_display_DisplayControl.cpp",
"com_android_server_display_SmallAreaDetectionController.cpp",
- "com_android_server_connectivity_Vpn.cpp",
"com_android_server_gpu_GpuService.cpp",
"com_android_server_HardwarePropertiesManagerService.cpp",
"com_android_server_input_InputManagerService.cpp",
@@ -261,6 +260,7 @@
srcs: [
"com_android_server_ConsumerIrService.cpp",
"com_android_server_app_GameManagerService.cpp",
+ "com_android_server_connectivity_Vpn.cpp",
"com_android_server_utils_LazyJniRegistrar.cpp",
"com_android_server_vr_VrManagerService.cpp",
],
diff --git a/services/core/jni/com_android_server_utils_LazyJniRegistrar.cpp b/services/core/jni/com_android_server_utils_LazyJniRegistrar.cpp
index 0c0f8b02..9690982 100644
--- a/services/core/jni/com_android_server_utils_LazyJniRegistrar.cpp
+++ b/services/core/jni/com_android_server_utils_LazyJniRegistrar.cpp
@@ -23,6 +23,7 @@
// Forward declared per-class registration methods.
int register_android_server_ConsumerIrService(JNIEnv* env);
int register_android_server_app_GameManagerService(JNIEnv* env);
+int register_android_server_connectivity_Vpn(JNIEnv* env);
int register_android_server_vr_VrManagerService(JNIEnv* env);
namespace {
@@ -38,6 +39,10 @@
register_android_server_app_GameManagerService(env);
}
+void registerVpn(JNIEnv* env, jclass) {
+ register_android_server_connectivity_Vpn(env);
+}
+
void registerVrManagerService(JNIEnv* env, jclass) {
register_android_server_vr_VrManagerService(env);
}
@@ -45,6 +50,7 @@
static const JNINativeMethod sJniRegistrarMethods[] = {
{"registerConsumerIrService", "()V", (void*)registerConsumerIrService},
{"registerGameManagerService", "()V", (void*)registerGameManagerService},
+ {"registerVpn", "()V", (void*)registerVpn},
{"registerVrManagerService", "()V", (void*)registerVrManagerService},
};
diff --git a/services/core/jni/onload.cpp b/services/core/jni/onload.cpp
index ddcff7b..f9942ba 100644
--- a/services/core/jni/onload.cpp
+++ b/services/core/jni/onload.cpp
@@ -40,7 +40,6 @@
int register_android_server_vibrator_VibratorController(JavaVM* vm, JNIEnv* env);
int register_android_server_vibrator_VibratorManagerService(JavaVM* vm, JNIEnv* env);
int register_android_server_location_GnssLocationProvider(JNIEnv* env);
-int register_android_server_connectivity_Vpn(JNIEnv* env);
int register_android_server_devicepolicy_CryptoTestHelper(JNIEnv*);
int register_android_server_tv_TvUinputBridge(JNIEnv* env);
int register_android_server_tv_TvInputHal(JNIEnv* env);
@@ -106,7 +105,6 @@
register_android_server_vibrator_VibratorManagerService(vm, env);
register_android_server_SystemServer(env);
register_android_server_location_GnssLocationProvider(env);
- register_android_server_connectivity_Vpn(env);
register_android_server_devicepolicy_CryptoTestHelper(env);
register_android_server_BatteryStatsService(env);
register_android_server_tv_TvUinputBridge(env);
diff --git a/services/tests/mockingservicestests/jni/Android.bp b/services/tests/mockingservicestests/jni/Android.bp
index 03bd73c..746e4f5 100644
--- a/services/tests/mockingservicestests/jni/Android.bp
+++ b/services/tests/mockingservicestests/jni/Android.bp
@@ -48,6 +48,7 @@
"libmemevents",
"libmeminfo",
"libnativehelper",
+ "libnetutils",
"libprocessgroup",
"libutils",
"libcutils",
diff --git a/services/tests/servicestests/jni/Android.bp b/services/tests/servicestests/jni/Android.bp
index e738c19..b465ff2 100644
--- a/services/tests/servicestests/jni/Android.bp
+++ b/services/tests/servicestests/jni/Android.bp
@@ -48,6 +48,7 @@
"libmeminfo",
"libmemevents",
"libnativehelper",
+ "libnetutils",
"libprocessgroup",
"libutils",
"libcutils",