Loading services/core/java/com/android/server/adb/AdbDebuggingManager.java +15 −29 Original line number Diff line number Diff line Loading @@ -168,7 +168,6 @@ public class AdbDebuggingManager { private AdbConnectionInfo mAdbConnectionInfo = new AdbConnectionInfo(); // Polls for a tls port property when adb wifi is enabled private AdbConnectionPortPoller mConnectionPortPoller; private final PortListenerImpl mPortListener = new PortListenerImpl(); private final Ticker mTicker; public AdbDebuggingManager(Context context) { Loading Loading @@ -323,10 +322,6 @@ public class AdbDebuggingManager { } } interface AdbConnectionPortListener { void onPortReceived(int port); } /** * This class will poll for a period of time for adbd to write the port * it connected to. Loading @@ -336,16 +331,11 @@ public class AdbDebuggingManager { * 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. */ static class AdbConnectionPortPoller extends Thread { private class AdbConnectionPortPoller extends Thread { private final String mAdbPortProp = "service.adb.tls.port"; private AdbConnectionPortListener mListener; private final int mDurationSecs = 10; private AtomicBoolean mCanceled = new AtomicBoolean(false); AdbConnectionPortPoller(AdbConnectionPortListener listener) { mListener = listener; } @Override public void run() { Slog.d(TAG, "Starting adb port property poller"); Loading @@ -362,13 +352,22 @@ public class AdbDebuggingManager { // 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)) { mListener.onPortReceived(port); onPortReceived(port); return; } SystemClock.sleep(1000); } Slog.w(TAG, "Failed to receive adb connection port"); mListener.onPortReceived(-1); 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() { Loading @@ -382,17 +381,6 @@ public class AdbDebuggingManager { } } class PortListenerImpl implements AdbConnectionPortListener { public 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); } } @VisibleForTesting static class AdbDebuggingThread extends Thread { private boolean mStopped; Loading Loading @@ -1088,8 +1076,7 @@ public class AdbDebuggingManager { mContext.registerReceiver(mBroadcastReceiver, intentFilter); SystemProperties.set(AdbService.WIFI_PERSISTENT_CONFIG_PROPERTY, "1"); mConnectionPortPoller = new AdbDebuggingManager.AdbConnectionPortPoller(mPortListener); mConnectionPortPoller = new AdbDebuggingManager.AdbConnectionPortPoller(); mConnectionPortPoller.start(); startAdbDebuggingThread(); Loading Loading @@ -1138,8 +1125,7 @@ public class AdbDebuggingManager { mContext.registerReceiver(mBroadcastReceiver, intentFilter); SystemProperties.set(AdbService.WIFI_PERSISTENT_CONFIG_PROPERTY, "1"); mConnectionPortPoller = new AdbDebuggingManager.AdbConnectionPortPoller(mPortListener); mConnectionPortPoller = new AdbDebuggingManager.AdbConnectionPortPoller(); mConnectionPortPoller.start(); startAdbDebuggingThread(); Loading Loading @@ -1257,7 +1243,7 @@ public class AdbDebuggingManager { if (mAdbWifiEnabled) { // In scenarios where adbd is restarted, the tls port may change. mConnectionPortPoller = new AdbDebuggingManager.AdbConnectionPortPoller(mPortListener); new AdbDebuggingManager.AdbConnectionPortPoller(); mConnectionPortPoller.start(); } break; Loading services/core/java/com/android/server/adb/AdbService.java +2 −55 Original line number Diff line number Diff line Loading @@ -21,10 +21,8 @@ import android.annotation.NonNull; import android.annotation.UserIdInt; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.database.ContentObserver; import android.debug.AdbManager; import android.debug.AdbManagerInternal; import android.debug.AdbTransportType; import android.debug.FingerprintAndPairDevice; Loading @@ -40,10 +38,8 @@ import android.os.ParcelFileDescriptor; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.SystemProperties; import android.os.UserHandle; import android.provider.Settings; import android.service.adb.AdbServiceDumpProto; import android.sysprop.AdbProperties; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; Loading @@ -63,7 +59,6 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.Collections; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; /** * The Android Debug Bridge (ADB) service. This controls the availability of ADB and authorization Loading @@ -85,12 +80,6 @@ public class AdbService extends IAdbManager.Stub { */ static final String CTL_STOP = "ctl.stop"; // The tcp port adb is currently using AtomicInteger mConnectionPort = new AtomicInteger(-1); private final AdbConnectionPortListener mPortListener = new AdbConnectionPortListener(); private AdbDebuggingManager.AdbConnectionPortPoller mConnectionPortPoller; private final RemoteCallbackList<IAdbCallback> mCallbacks = new RemoteCallbackList<>(); /** * Manages the service lifecycle for {@code AdbService} in {@code SystemServer}. Loading Loading @@ -404,39 +393,6 @@ public class AdbService extends IAdbManager.Stub { Slog.d(TAG, "Unregistering callback " + callback); mCallbacks.unregister(callback); } /** * This listener is only used when ro.adb.secure=0. Otherwise, AdbDebuggingManager will * do this. */ class AdbConnectionPortListener implements AdbDebuggingManager.AdbConnectionPortListener { public void onPortReceived(int port) { if (port > 0 && port <= 65535) { mConnectionPort.set(port); } else { mConnectionPort.set(-1); // Turn off wifi debugging, since the server did not start. try { Settings.Global.putInt(mContentResolver, Settings.Global.ADB_WIFI_ENABLED, 0); } catch (SecurityException e) { // If UserManager.DISALLOW_DEBUGGING_FEATURES is on, that this setting can't // be changed. Slog.d(TAG, "ADB_ENABLED is restricted."); } } broadcastPortInfo(mConnectionPort.get()); } } private void broadcastPortInfo(int port) { Intent intent = new Intent(AdbManager.WIRELESS_DEBUG_STATE_CHANGED_ACTION); intent.putExtra(AdbManager.WIRELESS_STATUS_EXTRA, (port >= 0) ? AdbManager.WIRELESS_STATUS_CONNECTED : AdbManager.WIRELESS_STATUS_DISCONNECTED); intent.putExtra(AdbManager.WIRELESS_DEBUG_PORT_EXTRA, port); AdbDebuggingManager.sendBroadcastWithDebugPermission(mContext, intent, UserHandle.ALL); Slog.i(TAG, "sent port broadcast port=" + port); } private void startAdbd() { SystemProperties.set(CTL_START, ADBD); Loading Loading @@ -470,20 +426,11 @@ public class AdbService extends IAdbManager.Stub { } else if (transportType == AdbTransportType.WIFI && enable != mIsAdbWifiEnabled) { mIsAdbWifiEnabled = enable; if (mIsAdbWifiEnabled) { if (!AdbProperties.secure().orElse(false)) { // Start adbd. If this is secure adb, then we defer enabling adb over WiFi. // Start adb over WiFi. SystemProperties.set(WIFI_PERSISTENT_CONFIG_PROPERTY, "1"); mConnectionPortPoller = new AdbDebuggingManager.AdbConnectionPortPoller(mPortListener); mConnectionPortPoller.start(); } } else { // Stop adb over WiFi. SystemProperties.set(WIFI_PERSISTENT_CONFIG_PROPERTY, "0"); if (mConnectionPortPoller != null) { mConnectionPortPoller.cancelAndWait(); mConnectionPortPoller = null; } } } else { // No change Loading Loading
services/core/java/com/android/server/adb/AdbDebuggingManager.java +15 −29 Original line number Diff line number Diff line Loading @@ -168,7 +168,6 @@ public class AdbDebuggingManager { private AdbConnectionInfo mAdbConnectionInfo = new AdbConnectionInfo(); // Polls for a tls port property when adb wifi is enabled private AdbConnectionPortPoller mConnectionPortPoller; private final PortListenerImpl mPortListener = new PortListenerImpl(); private final Ticker mTicker; public AdbDebuggingManager(Context context) { Loading Loading @@ -323,10 +322,6 @@ public class AdbDebuggingManager { } } interface AdbConnectionPortListener { void onPortReceived(int port); } /** * This class will poll for a period of time for adbd to write the port * it connected to. Loading @@ -336,16 +331,11 @@ public class AdbDebuggingManager { * 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. */ static class AdbConnectionPortPoller extends Thread { private class AdbConnectionPortPoller extends Thread { private final String mAdbPortProp = "service.adb.tls.port"; private AdbConnectionPortListener mListener; private final int mDurationSecs = 10; private AtomicBoolean mCanceled = new AtomicBoolean(false); AdbConnectionPortPoller(AdbConnectionPortListener listener) { mListener = listener; } @Override public void run() { Slog.d(TAG, "Starting adb port property poller"); Loading @@ -362,13 +352,22 @@ public class AdbDebuggingManager { // 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)) { mListener.onPortReceived(port); onPortReceived(port); return; } SystemClock.sleep(1000); } Slog.w(TAG, "Failed to receive adb connection port"); mListener.onPortReceived(-1); 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() { Loading @@ -382,17 +381,6 @@ public class AdbDebuggingManager { } } class PortListenerImpl implements AdbConnectionPortListener { public 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); } } @VisibleForTesting static class AdbDebuggingThread extends Thread { private boolean mStopped; Loading Loading @@ -1088,8 +1076,7 @@ public class AdbDebuggingManager { mContext.registerReceiver(mBroadcastReceiver, intentFilter); SystemProperties.set(AdbService.WIFI_PERSISTENT_CONFIG_PROPERTY, "1"); mConnectionPortPoller = new AdbDebuggingManager.AdbConnectionPortPoller(mPortListener); mConnectionPortPoller = new AdbDebuggingManager.AdbConnectionPortPoller(); mConnectionPortPoller.start(); startAdbDebuggingThread(); Loading Loading @@ -1138,8 +1125,7 @@ public class AdbDebuggingManager { mContext.registerReceiver(mBroadcastReceiver, intentFilter); SystemProperties.set(AdbService.WIFI_PERSISTENT_CONFIG_PROPERTY, "1"); mConnectionPortPoller = new AdbDebuggingManager.AdbConnectionPortPoller(mPortListener); mConnectionPortPoller = new AdbDebuggingManager.AdbConnectionPortPoller(); mConnectionPortPoller.start(); startAdbDebuggingThread(); Loading Loading @@ -1257,7 +1243,7 @@ public class AdbDebuggingManager { if (mAdbWifiEnabled) { // In scenarios where adbd is restarted, the tls port may change. mConnectionPortPoller = new AdbDebuggingManager.AdbConnectionPortPoller(mPortListener); new AdbDebuggingManager.AdbConnectionPortPoller(); mConnectionPortPoller.start(); } break; Loading
services/core/java/com/android/server/adb/AdbService.java +2 −55 Original line number Diff line number Diff line Loading @@ -21,10 +21,8 @@ import android.annotation.NonNull; import android.annotation.UserIdInt; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.database.ContentObserver; import android.debug.AdbManager; import android.debug.AdbManagerInternal; import android.debug.AdbTransportType; import android.debug.FingerprintAndPairDevice; Loading @@ -40,10 +38,8 @@ import android.os.ParcelFileDescriptor; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.SystemProperties; import android.os.UserHandle; import android.provider.Settings; import android.service.adb.AdbServiceDumpProto; import android.sysprop.AdbProperties; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; Loading @@ -63,7 +59,6 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.Collections; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; /** * The Android Debug Bridge (ADB) service. This controls the availability of ADB and authorization Loading @@ -85,12 +80,6 @@ public class AdbService extends IAdbManager.Stub { */ static final String CTL_STOP = "ctl.stop"; // The tcp port adb is currently using AtomicInteger mConnectionPort = new AtomicInteger(-1); private final AdbConnectionPortListener mPortListener = new AdbConnectionPortListener(); private AdbDebuggingManager.AdbConnectionPortPoller mConnectionPortPoller; private final RemoteCallbackList<IAdbCallback> mCallbacks = new RemoteCallbackList<>(); /** * Manages the service lifecycle for {@code AdbService} in {@code SystemServer}. Loading Loading @@ -404,39 +393,6 @@ public class AdbService extends IAdbManager.Stub { Slog.d(TAG, "Unregistering callback " + callback); mCallbacks.unregister(callback); } /** * This listener is only used when ro.adb.secure=0. Otherwise, AdbDebuggingManager will * do this. */ class AdbConnectionPortListener implements AdbDebuggingManager.AdbConnectionPortListener { public void onPortReceived(int port) { if (port > 0 && port <= 65535) { mConnectionPort.set(port); } else { mConnectionPort.set(-1); // Turn off wifi debugging, since the server did not start. try { Settings.Global.putInt(mContentResolver, Settings.Global.ADB_WIFI_ENABLED, 0); } catch (SecurityException e) { // If UserManager.DISALLOW_DEBUGGING_FEATURES is on, that this setting can't // be changed. Slog.d(TAG, "ADB_ENABLED is restricted."); } } broadcastPortInfo(mConnectionPort.get()); } } private void broadcastPortInfo(int port) { Intent intent = new Intent(AdbManager.WIRELESS_DEBUG_STATE_CHANGED_ACTION); intent.putExtra(AdbManager.WIRELESS_STATUS_EXTRA, (port >= 0) ? AdbManager.WIRELESS_STATUS_CONNECTED : AdbManager.WIRELESS_STATUS_DISCONNECTED); intent.putExtra(AdbManager.WIRELESS_DEBUG_PORT_EXTRA, port); AdbDebuggingManager.sendBroadcastWithDebugPermission(mContext, intent, UserHandle.ALL); Slog.i(TAG, "sent port broadcast port=" + port); } private void startAdbd() { SystemProperties.set(CTL_START, ADBD); Loading Loading @@ -470,20 +426,11 @@ public class AdbService extends IAdbManager.Stub { } else if (transportType == AdbTransportType.WIFI && enable != mIsAdbWifiEnabled) { mIsAdbWifiEnabled = enable; if (mIsAdbWifiEnabled) { if (!AdbProperties.secure().orElse(false)) { // Start adbd. If this is secure adb, then we defer enabling adb over WiFi. // Start adb over WiFi. SystemProperties.set(WIFI_PERSISTENT_CONFIG_PROPERTY, "1"); mConnectionPortPoller = new AdbDebuggingManager.AdbConnectionPortPoller(mPortListener); mConnectionPortPoller.start(); } } else { // Stop adb over WiFi. SystemProperties.set(WIFI_PERSISTENT_CONFIG_PROPERTY, "0"); if (mConnectionPortPoller != null) { mConnectionPortPoller.cancelAndWait(); mConnectionPortPoller = null; } } } else { // No change Loading