OTG: Implement hidden activity usb detection technique

This commit is contained in:
Nikita Mikhailov
2016-04-07 01:22:24 +06:00
parent 5e18b15775
commit 3798249570
8 changed files with 109 additions and 934 deletions

View File

@@ -0,0 +1,42 @@
package org.sufficientlysecure.keychain.ui;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.Log;
public class UsbEventReceiverActivity extends Activity {
public static final String ACTION_USB_PERMISSION =
"org.sufficientlysecure.keychain.ui.USB_PERMISSION";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onResume() {
super.onResume();
final UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
Intent intent = getIntent();
if (intent != null) {
if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(intent.getAction())) {
UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
Log.d(Constants.TAG, "Requesting permission for " + usbDevice.getDeviceName());
usbManager.requestPermission(usbDevice,
PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0));
}
}
// Close the activity
finish();
}
}

View File

@@ -254,9 +254,7 @@ public abstract class BaseSecurityTokenNfcActivity extends BaseActivity
*/
@Override
public void onNewIntent(final Intent intent) {
if (!mTagDispatcher.interceptIntent(intent)) {
mUsbDispatcher.interceptIntent(intent);
}
mTagDispatcher.interceptIntent(intent);
}
private void handleNfcError(IOException e) {
@@ -374,7 +372,7 @@ public abstract class BaseSecurityTokenNfcActivity extends BaseActivity
Log.d(Constants.TAG, "BaseNfcActivity.onPause");
mTagDispatcher.disableExclusiveNfc();
mUsbDispatcher.stopListeningForDevices();
// mUsbDispatcher.stopListeningForDevices();
}
/**
@@ -385,7 +383,6 @@ public abstract class BaseSecurityTokenNfcActivity extends BaseActivity
super.onResume();
Log.d(Constants.TAG, "BaseNfcActivity.onResume");
mTagDispatcher.enableExclusiveNfc();
mUsbDispatcher.startListeningForDevices();
}
protected void obtainSecurityTokenPin(RequiredInputParcel requiredInput) {
@@ -568,8 +565,14 @@ public abstract class BaseSecurityTokenNfcActivity extends BaseActivity
}
@Override
protected void onDestroy() {
super.onDestroy();
mUsbDispatcher.onDestroy();
protected void onStop() {
super.onStop();
mUsbDispatcher.onStop();
}
@Override
protected void onStart() {
super.onStart();
mUsbDispatcher.onStart();
}
}