diff --git a/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java b/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java index 91f032d86a94a..28bcf3a351177 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java @@ -24,6 +24,8 @@ import com.android.systemui.keyguard.WorkLockActivity; import com.android.systemui.screenrecord.ScreenRecordDialog; import com.android.systemui.settings.BrightnessDialog; import com.android.systemui.tuner.TunerActivity; +import com.android.systemui.usb.UsbDebuggingActivity; +import com.android.systemui.usb.UsbDebuggingSecondaryUserActivity; import dagger.Binds; import dagger.Module; @@ -70,4 +72,17 @@ public abstract class DefaultActivityBinder { @IntoMap @ClassKey(BubbleOverflowActivity.class) public abstract Activity bindBubbleOverflowActivity(BubbleOverflowActivity activity); + + /** Inject into UsbDebuggingActivity. */ + @Binds + @IntoMap + @ClassKey(UsbDebuggingActivity.class) + public abstract Activity bindUsbDebuggingActivity(UsbDebuggingActivity activity); + + /** Inject into UsbDebuggingSecondaryUserActivity. */ + @Binds + @IntoMap + @ClassKey(UsbDebuggingSecondaryUserActivity.class) + public abstract Activity bindUsbDebuggingSecondaryUserActivity( + UsbDebuggingSecondaryUserActivity activity); } diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java index 2973e0aedd436..6e041f6f9ee0f 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java @@ -16,13 +16,19 @@ package com.android.systemui.usb; +import android.app.Activity; import android.app.AlertDialog; +import android.content.BroadcastReceiver; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.IntentFilter; import android.debug.IAdbManager; +import android.hardware.usb.UsbManager; import android.os.Bundle; import android.os.IBinder; import android.os.ServiceManager; +import android.os.SystemProperties; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -33,14 +39,25 @@ import android.widget.CheckBox; import com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; import com.android.systemui.R; +import com.android.systemui.broadcast.BroadcastDispatcher; + +import javax.inject.Inject; public class UsbDebuggingActivity extends AlertActivity implements DialogInterface.OnClickListener { private static final String TAG = "UsbDebuggingActivity"; private CheckBox mAlwaysAllow; + private UsbDisconnectedReceiver mDisconnectedReceiver; + private final BroadcastDispatcher mBroadcastDispatcher; private String mKey; + @Inject + public UsbDebuggingActivity(BroadcastDispatcher broadcastDispatcher) { + super(); + mBroadcastDispatcher = broadcastDispatcher; + } + @Override public void onCreate(Bundle icicle) { Window window = getWindow(); @@ -50,6 +67,10 @@ public class UsbDebuggingActivity extends AlertActivity super.onCreate(icicle); + if (SystemProperties.getInt("service.adb.tcp.port", 0) == 0) { + mDisconnectedReceiver = new UsbDisconnectedReceiver(this); + } + Intent intent = getIntent(); String fingerprints = intent.getStringExtra("fingerprints"); mKey = intent.getStringExtra("key"); @@ -83,6 +104,40 @@ public class UsbDebuggingActivity extends AlertActivity super.onWindowAttributesChanged(params); } + private class UsbDisconnectedReceiver extends BroadcastReceiver { + private final Activity mActivity; + UsbDisconnectedReceiver(Activity activity) { + mActivity = activity; + } + + @Override + public void onReceive(Context content, Intent intent) { + String action = intent.getAction(); + if (!UsbManager.ACTION_USB_STATE.equals(action)) { + return; + } + boolean connected = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false); + if (!connected) { + mActivity.finish(); + } + } + } + + @Override + public void onStart() { + super.onStart(); + IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_STATE); + mBroadcastDispatcher.registerReceiver(mDisconnectedReceiver, filter); + } + + @Override + protected void onStop() { + if (mDisconnectedReceiver != null) { + mBroadcastDispatcher.unregisterReceiver(mDisconnectedReceiver); + } + super.onStop(); + } + @Override public void onClick(DialogInterface dialog, int which) { boolean allow = (which == AlertDialog.BUTTON_POSITIVE); diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java index 4214242063705..8d3428a52e3b8 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java @@ -16,19 +16,41 @@ package com.android.systemui.usb; +import android.app.Activity; +import android.content.BroadcastReceiver; +import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.hardware.usb.UsbManager; import android.os.Bundle; +import android.os.SystemProperties; import com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; import com.android.systemui.R; +import com.android.systemui.broadcast.BroadcastDispatcher; + +import javax.inject.Inject; public class UsbDebuggingSecondaryUserActivity extends AlertActivity implements DialogInterface.OnClickListener { + private UsbDisconnectedReceiver mDisconnectedReceiver; + private final BroadcastDispatcher mBroadcastDispatcher; + + @Inject + public UsbDebuggingSecondaryUserActivity(BroadcastDispatcher broadcastDispatcher) { + mBroadcastDispatcher = broadcastDispatcher; + } + @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); + if (SystemProperties.getInt("service.adb.tcp.port", 0) == 0) { + mDisconnectedReceiver = new UsbDisconnectedReceiver(this); + } + final AlertController.AlertParams ap = mAlertParams; ap.mTitle = getString(R.string.usb_debugging_secondary_user_title); ap.mMessage = getString(R.string.usb_debugging_secondary_user_message); @@ -38,6 +60,40 @@ public class UsbDebuggingSecondaryUserActivity extends AlertActivity setupAlert(); } + private class UsbDisconnectedReceiver extends BroadcastReceiver { + private final Activity mActivity; + UsbDisconnectedReceiver(Activity activity) { + mActivity = activity; + } + + @Override + public void onReceive(Context content, Intent intent) { + String action = intent.getAction(); + if (UsbManager.ACTION_USB_STATE.equals(action)) { + boolean connected = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false); + if (!connected) { + mActivity.finish(); + } + } + } + } + + @Override + public void onStart() { + super.onStart(); + + IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_STATE); + mBroadcastDispatcher.registerReceiver(mDisconnectedReceiver, filter); + } + + @Override + protected void onStop() { + if (mDisconnectedReceiver != null) { + mBroadcastDispatcher.unregisterReceiver(mDisconnectedReceiver); + } + super.onStop(); + } + @Override public void onClick(DialogInterface dialog, int which) { finish();