Fix USB access control when adb is disabled.

When adb is disabled, the default usb mode would be "none", which
would turn off the driver and prevent UsbDeviceManager from receiving
any new USB connect / disconnect messages. This prevents the user
from ever enabling MTP and sharing data when adb is turned off.

As discussed in bug 21429947, we work around this problem by keeping
the USB driver in MTP mode most of the time, so that we continue to
receive USB connect / disconnect messages.

To avoid leaking confidential user photos, we now explicitly unlock
USB data after switching into MTP/PTP mode. Enabling MTP mode is
now decoupled from exposing data on the USB connection.

Bug: 21429947
Change-Id: Id8e9df4ac42fdcf22cc5b75b838bf46f6c225081
This commit is contained in:
Nick Kralevich
2015-06-10 09:39:26 -07:00
parent 0bd18745cf
commit 5eba30289a

View File

@@ -76,7 +76,9 @@ public class UsbModeChooserActivity extends Activity {
* so that everything matches.
*/
private int getCurrentFunction() {
if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_MTP)) {
if (!mUsbManager.isUsbDataUnlocked()) {
return 0;
} else if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_MTP)) {
return 1;
} else if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_PTP)) {
return 2;
@@ -93,16 +95,20 @@ public class UsbModeChooserActivity extends Activity {
private void setCurrentFunction(int which) {
switch (which) {
case 0:
mUsbManager.setCurrentFunction("none");
mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MTP);
mUsbManager.setUsbDataUnlocked(false);
break;
case 1:
mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MTP);
mUsbManager.setUsbDataUnlocked(true);
break;
case 2:
mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_PTP);
mUsbManager.setUsbDataUnlocked(true);
break;
case 3:
mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MIDI);
mUsbManager.setUsbDataUnlocked(true);
break;
}
}