diff options
Diffstat (limited to 'OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java')
-rw-r--r-- | OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java | 91 |
1 files changed, 54 insertions, 37 deletions
diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java index 1be5b8548..cccbcfa14 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java @@ -19,6 +19,7 @@ package org.sufficientlysecure.keychain.ui; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; @@ -35,6 +36,7 @@ import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.net.Uri; import android.nfc.NdefMessage; import android.nfc.NfcAdapter; import android.os.Bundle; @@ -56,6 +58,8 @@ public class ImportKeysActivity extends DrawerActivity implements OnNavigationLi public static final String ACTION_IMPORT_KEY = Constants.INTENT_PREFIX + "IMPORT_KEY"; public static final String ACTION_IMPORT_KEY_FROM_QR_CODE = Constants.INTENT_PREFIX + "IMPORT_KEY_FROM_QR_CODE"; + public static final String ACTION_IMPORT_KEY_FROM_KEYSERVER = Constants.INTENT_PREFIX + + "IMPORT_KEY_FROM_KEYSERVER"; // Actions for internal use only: public static final String ACTION_IMPORT_KEY_FROM_FILE = Constants.INTENT_PREFIX @@ -63,24 +67,21 @@ public class ImportKeysActivity extends DrawerActivity implements OnNavigationLi public static final String ACTION_IMPORT_KEY_FROM_NFC = Constants.INTENT_PREFIX + "IMPORT_KEY_FROM_NFC"; - // only used by IMPORT + // only used by ACTION_IMPORT_KEY public static final String EXTRA_KEY_BYTES = "key_bytes"; - // TODO: import keys from server - // public static final String EXTRA_KEY_ID = "keyId"; + // only used by ACTION_IMPORT_KEY_FROM_KEYSERVER + public static final String EXTRA_QUERY = "query"; - protected boolean mDeleteAfterImport = false; - - FileDialogFragment mFileDialog; - ImportKeysListFragment mListFragment; - OnNavigationListener mOnNavigationListener; - String[] mNavigationStrings; + public static final String FINGERPRINT_SCHEME = "openpgp4fpr"; - Fragment mCurrentFragment; - - BootstrapButton mImportButton; + protected boolean mDeleteAfterImport = false; - // BootstrapButton mImportSignUploadButton; + // view + private ImportKeysListFragment mListFragment; + private String[] mNavigationStrings; + private Fragment mCurrentFragment; + private BootstrapButton mImportButton; @Override protected void onCreate(Bundle savedInstanceState) { @@ -95,21 +96,11 @@ public class ImportKeysActivity extends DrawerActivity implements OnNavigationLi importKeys(); } }); - // mImportSignUploadButton = (BootstrapButton) findViewById(R.id.import_sign_and_upload); - // mImportSignUploadButton.setOnClickListener(new OnClickListener() { - // @Override - // public void onClick(View v) { - // signAndUploadOnClick(); - // } - // }); getSupportActionBar().setDisplayShowTitleEnabled(false); setupDrawerNavigation(savedInstanceState); - // set actionbar without home button if called from another app - // ActionBarHelper.setBackButton(this); - // set drop down navigation mNavigationStrings = getResources().getStringArray(R.array.import_action_list); Context context = getSupportActionBar().getThemedContext(); @@ -125,6 +116,8 @@ public class ImportKeysActivity extends DrawerActivity implements OnNavigationLi protected void handleActions(Bundle savedInstanceState, Intent intent) { String action = intent.getAction(); Bundle extras = intent.getExtras(); + Uri dataUri = intent.getData(); + String scheme = intent.getScheme(); if (extras == null) { extras = new Bundle(); @@ -140,6 +133,15 @@ public class ImportKeysActivity extends DrawerActivity implements OnNavigationLi } /** + * Scanning a fingerprint directly with Barcode Scanner + */ + if (scheme != null && scheme.toLowerCase(Locale.ENGLISH).equals(FINGERPRINT_SCHEME)) { + getSupportActionBar().setSelectedNavigationItem(0); + loadFragment(ImportKeysQrCodeFragment.class, null, mNavigationStrings[0]); + loadFromFingerprintUri(dataUri); + } + + /** * Keychain's own Actions */ if (ACTION_IMPORT_KEY.equals(action)) { @@ -160,14 +162,25 @@ public class ImportKeysActivity extends DrawerActivity implements OnNavigationLi // directly load data startListFragment(savedInstanceState, importData, null); } + } else if (ACTION_IMPORT_KEY_FROM_KEYSERVER.equals(action)) { + if (!extras.containsKey(EXTRA_QUERY)) { + Log.e(Constants.TAG, "IMPORT_KEY_FROM_KEYSERVER action needs to contain the 'query' extra!"); + return; + } + + String query = extras.getString(EXTRA_QUERY); + + // TODO: implement KEYSERVER! + } else { - // Internal actions + // Other actions startListFragment(savedInstanceState, null, null); if (ACTION_IMPORT_KEY_FROM_FILE.equals(action)) { getSupportActionBar().setSelectedNavigationItem(1); loadFragment(ImportKeysFileFragment.class, null, mNavigationStrings[1]); } else if (ACTION_IMPORT_KEY_FROM_QR_CODE.equals(action)) { + // also exposed in AndroidManifest getSupportActionBar().setSelectedNavigationItem(2); loadFragment(ImportKeysQrCodeFragment.class, null, mNavigationStrings[2]); } else if (ACTION_IMPORT_KEY_FROM_NFC.equals(action)) { @@ -239,6 +252,23 @@ public class ImportKeysActivity extends DrawerActivity implements OnNavigationLi ft.commit(); } + public void loadFromFingerprintUri(Uri dataUri) { + String fingerprint = dataUri.toString().split(":")[1].toLowerCase(Locale.ENGLISH); + + Log.d(Constants.TAG, "fingerprint: " + fingerprint); + + if (fingerprint.length() < 16) { + Toast.makeText(this, R.string.import_qr_code_too_short_fingerprint, + Toast.LENGTH_LONG).show(); + return; + } + + Intent queryIntent = new Intent(this, KeyServerQueryActivity.class); + queryIntent.setAction(KeyServerQueryActivity.ACTION_LOOK_UP_KEY_ID); + queryIntent.putExtra(KeyServerQueryActivity.EXTRA_FINGERPRINT, fingerprint); + startActivity(queryIntent); + } + public void loadCallback(byte[] importData, String importFilename) { mListFragment.loadNew(importData, importFilename); } @@ -413,19 +443,6 @@ public class ImportKeysActivity extends DrawerActivity implements OnNavigationLi } } - public void importOnClick() { - importKeys(); - } - - // public void signAndUploadOnClick() { - // // first, import! - // // importOnClick(view); - // - // // TODO: implement sign and upload! - // Toast.makeText(ImportKeysActivity.this, "Not implemented right now!", Toast.LENGTH_SHORT) - // .show(); - // } - /** * NFC */ |