diff options
| author | Nikita Mikhailov <nikita.s.mikhailov@gmail.com> | 2016-04-15 00:13:33 +0600 | 
|---|---|---|
| committer | Nikita Mikhailov <nikita.s.mikhailov@gmail.com> | 2016-04-15 01:54:09 +0600 | 
| commit | 263799ec965669ab027db6b1ad62a26fd6af3bac (patch) | |
| tree | 22597cb0cc153940eb4d1a160ea433db1a28da8b /OpenKeychain/src | |
| parent | 784bf2322cc37befb4857f0c440f889d43f89a48 (diff) | |
| download | open-keychain-263799ec965669ab027db6b1ad62a26fd6af3bac.tar.gz open-keychain-263799ec965669ab027db6b1ad62a26fd6af3bac.tar.bz2 open-keychain-263799ec965669ab027db6b1ad62a26fd6af3bac.zip | |
OTG: Fix connection issues
Diffstat (limited to 'OpenKeychain/src')
3 files changed, 17 insertions, 24 deletions
| diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/UsbTransport.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/UsbTransport.java index 10043e675..dfe91427e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/UsbTransport.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/securitytoken/UsbTransport.java @@ -66,7 +66,7 @@ public class UsbTransport implements Transport {       * @param on true to turn ICC on, false to turn it off       * @throws UsbTransportException       */ -    private void iccPowerSet(boolean on) throws UsbTransportException { +    private void setIccPower(boolean on) throws UsbTransportException {          final byte[] iccPowerCommand = {                  (byte) (on ? 0x62 : 0x63),                  0x00, 0x00, 0x00, 0x00, @@ -145,7 +145,8 @@ public class UsbTransport implements Transport {       */      @Override      public boolean isConnected() { -        return mConnection != null && mUsbManager.getDeviceList().containsValue(mUsbDevice); +        return mConnection != null && mUsbManager.getDeviceList().containsValue(mUsbDevice) && +                mConnection.getSerial() != null;      }      /** @@ -188,7 +189,7 @@ public class UsbTransport implements Transport {              throw new UsbTransportException("USB error - failed to claim interface");          } -        iccPowerSet(true); +        setIccPower(true);          Log.d(Constants.TAG, "Usb transport connected");      } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseSecurityTokenNfcActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseSecurityTokenNfcActivity.java index 4aaf2aba0..dbb234977 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseSecurityTokenNfcActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/BaseSecurityTokenNfcActivity.java @@ -22,8 +22,11 @@  package org.sufficientlysecure.keychain.ui.base;  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; @@ -142,12 +145,13 @@ public abstract class BaseSecurityTokenNfcActivity extends BaseActivity          securityTokenDiscovered(new NfcTransport(tag));      } -    public void usbDeviceDiscovered(final UsbTransport transport) { +    public void usbDeviceDiscovered(final UsbDevice usbDevice) {          // Actual USB operations are executed in doInBackground to not block the UI thread          if (!mTagHandlingEnabled)              return; -        securityTokenDiscovered(transport); +        UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); +        securityTokenDiscovered(new UsbTransport(usbDevice, usbManager));      }      public void securityTokenDiscovered(final Transport transport) { @@ -401,7 +405,8 @@ public abstract class BaseSecurityTokenNfcActivity extends BaseActivity      protected void handleSmartcard(Transport transport) throws IOException {          // Don't reconnect if device was already connected -        if (!(mSecurityTokenHelper.isConnected() +        if (!(mSecurityTokenHelper.isPersistentConnectionAllowed() +                && mSecurityTokenHelper.isConnected()                  && mSecurityTokenHelper.getTransport().equals(transport))) {              mSecurityTokenHelper.setTransport(transport);              mSecurityTokenHelper.connectToDevice(); @@ -477,7 +482,7 @@ public abstract class BaseSecurityTokenNfcActivity extends BaseActivity       * Run smartcard routines if last used token is connected and supports       * persistent connections       */ -    protected void checkDeviceConnection() { +    public void checkDeviceConnection() {          mUsbDispatcher.rescanDevices();      }  } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/UsbConnectionDispatcher.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/UsbConnectionDispatcher.java index 7055b2633..60fc84dba 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/UsbConnectionDispatcher.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/UsbConnectionDispatcher.java @@ -33,7 +33,6 @@ public class UsbConnectionDispatcher {      private Activity mActivity;      private OnDiscoveredUsbDeviceListener mListener; -    private UsbTransport mLastUsedUsbTransport;      private UsbManager mUsbManager;      /**       * Receives broadcast when a supported USB device get permission. @@ -45,23 +44,12 @@ public class UsbConnectionDispatcher {              switch (action) {                  case UsbEventReceiverActivity.ACTION_USB_PERMISSION: { -                    UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); +                    android.hardware.usb.UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);                      boolean permission = intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED,                              false);                      if (permission) {                          Log.d(Constants.TAG, "Got permission for " + usbDevice.getDeviceName()); - -                        mLastUsedUsbTransport = new UsbTransport(usbDevice, mUsbManager); -                        mListener.usbDeviceDiscovered(mLastUsedUsbTransport); -                    } -                    break; -                } -                case UsbManager.ACTION_USB_DEVICE_DETACHED: { -                    UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); - -                    if (mLastUsedUsbTransport != null && mLastUsedUsbTransport.getUsbDevice().equals(usbDevice)) { -                        mLastUsedUsbTransport.release(); -                        mLastUsedUsbTransport = null; +                        mListener.usbDeviceDiscovered(usbDevice);                      }                      break;                  } @@ -78,7 +66,6 @@ public class UsbConnectionDispatcher {      public void onStart() {          final IntentFilter intentFilter = new IntentFilter();          intentFilter.addAction(UsbEventReceiverActivity.ACTION_USB_PERMISSION); -        intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);          mActivity.registerReceiver(mUsbReceiver, intentFilter);      } @@ -97,7 +84,7 @@ public class UsbConnectionDispatcher {          for (UsbDevice device : mUsbManager.getDeviceList().values()) {              if (mUsbManager.hasPermission(device)) {                  if (mListener != null) { -                    mListener.usbDeviceDiscovered(new UsbTransport(device, mUsbManager)); +                    mListener.usbDeviceDiscovered(device);                  }                  break;              } @@ -105,6 +92,6 @@ public class UsbConnectionDispatcher {      }      public interface OnDiscoveredUsbDeviceListener { -        void usbDeviceDiscovered(UsbTransport usbTransport); +        void usbDeviceDiscovered(UsbDevice usbDevice);      }  } | 
