respect experimental setting for untested usb devices
This commit is contained in:
parent
0d099116d5
commit
9487806c08
|
@ -26,6 +26,7 @@ import android.hardware.usb.UsbDevice;
|
|||
import android.hardware.usb.UsbManager;
|
||||
|
||||
import org.sufficientlysecure.keychain.Constants;
|
||||
import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransport;
|
||||
import org.sufficientlysecure.keychain.ui.UsbEventReceiverActivity;
|
||||
import org.sufficientlysecure.keychain.util.Log;
|
||||
|
||||
|
@ -50,7 +51,7 @@ public class UsbConnectionDispatcher {
|
|||
false);
|
||||
if (permission) {
|
||||
Log.d(Constants.TAG, "Got permission for " + usbDevice.getDeviceName());
|
||||
mListener.usbDeviceDiscovered(usbDevice);
|
||||
sendUsbTransportDiscovered(usbDevice);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -82,17 +83,24 @@ public class UsbConnectionDispatcher {
|
|||
// Note: we don't check devices VID/PID because
|
||||
// we check for permission instead.
|
||||
// We should have permission only for matching devices
|
||||
for (UsbDevice device : mUsbManager.getDeviceList().values()) {
|
||||
if (mUsbManager.hasPermission(device)) {
|
||||
if (mListener != null) {
|
||||
mListener.usbDeviceDiscovered(device);
|
||||
}
|
||||
for (UsbDevice usbDevice : mUsbManager.getDeviceList().values()) {
|
||||
if (mUsbManager.hasPermission(usbDevice)) {
|
||||
sendUsbTransportDiscovered(usbDevice);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void sendUsbTransportDiscovered(UsbDevice usbDevice) {
|
||||
if (mListener == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
UsbTransport usbTransport = UsbTransport.createUsbTransport(mActivity.getBaseContext(), usbDevice);
|
||||
mListener.usbTransportDiscovered(usbTransport);
|
||||
}
|
||||
|
||||
public interface OnDiscoveredUsbDeviceListener {
|
||||
void usbDeviceDiscovered(UsbDevice usbDevice);
|
||||
void usbTransportDiscovered(UsbTransport usbTransport);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ package org.sufficientlysecure.keychain.securitytoken.usb;
|
|||
|
||||
import java.io.IOException;
|
||||
|
||||
import android.content.Context;
|
||||
import android.hardware.usb.UsbConstants;
|
||||
import android.hardware.usb.UsbDevice;
|
||||
import android.hardware.usb.UsbDeviceConnection;
|
||||
|
@ -39,6 +40,8 @@ import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TokenType
|
|||
import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TransportType;
|
||||
import org.sufficientlysecure.keychain.securitytoken.Transport;
|
||||
import org.sufficientlysecure.keychain.util.Log;
|
||||
import org.sufficientlysecure.keychain.util.Preferences;
|
||||
|
||||
|
||||
/**
|
||||
* Based on USB CCID Specification rev. 1.1
|
||||
|
@ -72,10 +75,19 @@ public class UsbTransport implements Transport {
|
|||
private UsbDeviceConnection usbConnection;
|
||||
private UsbInterface usbInterface;
|
||||
private CcidTransportProtocol ccidTransportProtocol;
|
||||
private boolean allowUntestedUsbTokens;
|
||||
|
||||
public UsbTransport(UsbDevice usbDevice, UsbManager usbManager) {
|
||||
public static UsbTransport createUsbTransport(Context context, UsbDevice usbDevice) {
|
||||
UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
|
||||
boolean allowUntestedUsbTokens = Preferences.getPreferences(context).getExperimentalUsbAllowUntested();
|
||||
|
||||
return new UsbTransport(usbDevice, usbManager, allowUntestedUsbTokens);
|
||||
}
|
||||
|
||||
private UsbTransport(UsbDevice usbDevice, UsbManager usbManager, boolean allowUntestedUsbTokens) {
|
||||
this.usbDevice = usbDevice;
|
||||
this.usbManager = usbManager;
|
||||
this.allowUntestedUsbTokens = allowUntestedUsbTokens;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -135,7 +147,7 @@ public class UsbTransport implements Transport {
|
|||
}
|
||||
|
||||
boolean tokenTypeSupported = SecurityTokenInfo.SUPPORTED_USB_TOKENS.contains(getTokenTypeIfAvailable());
|
||||
if (!tokenTypeSupported) {
|
||||
if (!allowUntestedUsbTokens && !tokenTypeSupported) {
|
||||
usbConnection.close();
|
||||
usbConnection = null;
|
||||
throw new UnsupportedUsbTokenException();
|
||||
|
|
|
@ -25,11 +25,8 @@ package org.sufficientlysecure.keychain.ui.base;
|
|||
import java.io.IOException;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.hardware.usb.UsbDevice;
|
||||
import android.hardware.usb.UsbManager;
|
||||
import android.nfc.NfcAdapter;
|
||||
import android.nfc.Tag;
|
||||
import android.nfc.TagLostException;
|
||||
|
@ -62,6 +59,7 @@ import org.sufficientlysecure.keychain.ui.util.Notify.Style;
|
|||
import org.sufficientlysecure.keychain.util.Log;
|
||||
import org.sufficientlysecure.keychain.util.Passphrase;
|
||||
|
||||
|
||||
public abstract class BaseSecurityTokenActivity extends BaseActivity
|
||||
implements OnDiscoveredTagListener, UsbConnectionDispatcher.OnDiscoveredUsbDeviceListener {
|
||||
public static final int REQUEST_CODE_PIN = 1;
|
||||
|
@ -114,6 +112,7 @@ public abstract class BaseSecurityTokenActivity extends BaseActivity
|
|||
onSecurityTokenError(error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tagDiscovered(Tag tag) {
|
||||
// Actual NFC operations are executed in doInBackground to not block the UI thread
|
||||
if (!mTagHandlingEnabled) {
|
||||
|
@ -124,15 +123,13 @@ public abstract class BaseSecurityTokenActivity extends BaseActivity
|
|||
securityTokenDiscovered(nfcTransport);
|
||||
}
|
||||
|
||||
public void usbDeviceDiscovered(UsbDevice usbDevice) {
|
||||
@Override
|
||||
public void usbTransportDiscovered(UsbTransport usbTransport) {
|
||||
// Actual USB operations are executed in doInBackground to not block the UI thread
|
||||
if (!mTagHandlingEnabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
|
||||
|
||||
UsbTransport usbTransport = new UsbTransport(usbDevice, usbManager);
|
||||
securityTokenDiscovered(usbTransport);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue