aboutsummaryrefslogtreecommitdiffstats
path: root/OpenPGP-Keychain
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2013-10-06 01:12:30 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2013-10-06 01:12:30 +0200
commitb3d51b8b8025f5b33db7c7e922604d5945f313b4 (patch)
treed1bac2e18e44f20a9ba23affba788ce4be428794 /OpenPGP-Keychain
parent2942d94a29ce298723b5f20b5bf4c2e43eb795a7 (diff)
downloadopen-keychain-b3d51b8b8025f5b33db7c7e922604d5945f313b4.tar.gz
open-keychain-b3d51b8b8025f5b33db7c7e922604d5945f313b4.tar.bz2
open-keychain-b3d51b8b8025f5b33db7c7e922604d5945f313b4.zip
QR Code import works now
Diffstat (limited to 'OpenPGP-Keychain')
-rw-r--r--OpenPGP-Keychain/res/layout/import_keys_qr_code_fragment.xml14
-rw-r--r--OpenPGP-Keychain/res/values/strings.xml5
-rw-r--r--OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ImportKeysQrCodeFragment.java93
-rw-r--r--OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareActivity.java4
-rw-r--r--OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/dialog/ShareQrCodeDialogFragment.java2
5 files changed, 91 insertions, 27 deletions
diff --git a/OpenPGP-Keychain/res/layout/import_keys_qr_code_fragment.xml b/OpenPGP-Keychain/res/layout/import_keys_qr_code_fragment.xml
index 46b5fb458..ea8394333 100644
--- a/OpenPGP-Keychain/res/layout/import_keys_qr_code_fragment.xml
+++ b/OpenPGP-Keychain/res/layout/import_keys_qr_code_fragment.xml
@@ -2,7 +2,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:orientation="horizontal" >
+ android:orientation="vertical" >
<Button
android:id="@+id/import_qrcode_button"
@@ -10,4 +10,16 @@
android:layout_height="wrap_content"
android:text="@string/menu_importFromQrCode" />
+ <TextView
+ android:id="@+id/import_qrcode_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <ProgressBar
+ android:id="@+id/import_qrcode_progress"
+ style="?android:attr/progressBarStyleHorizontal"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:progress="0" />
+
</LinearLayout> \ No newline at end of file
diff --git a/OpenPGP-Keychain/res/values/strings.xml b/OpenPGP-Keychain/res/values/strings.xml
index 2a0ea7a04..29b01a8aa 100644
--- a/OpenPGP-Keychain/res/values/strings.xml
+++ b/OpenPGP-Keychain/res/values/strings.xml
@@ -354,7 +354,10 @@
<string name="import_sign_and_upload">Import, Sign, and upload selected keys</string>
<string name="import_finish">Finish</string>
<string name="import_from_clipboard">Import from Clipboard</string>
-
+ <string name="import_qr_code_missing">Missing QR Codes: %1$s</string>
+ <string name="import_qr_code_wrong">QR Code malformed! Please try again!</string>
+ <string name="import_qr_code_finished">QR Code scanning finished!</string>
+
<!-- Intent labels -->
<string name="intent_decrypt_file">OpenPGP: Decrypt File</string>
<string name="intent_import_key">OpenPGP: Import Key</string>
diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ImportKeysQrCodeFragment.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ImportKeysQrCodeFragment.java
index 91902fe36..62b59b4f7 100644
--- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ImportKeysQrCodeFragment.java
+++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ImportKeysQrCodeFragment.java
@@ -17,7 +17,11 @@
package org.sufficientlysecure.keychain.ui;
+import java.util.ArrayList;
+
+import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
+import org.sufficientlysecure.keychain.util.Log;
import android.content.Intent;
import android.os.Bundle;
@@ -27,8 +31,10 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+import android.widget.Toast;
-import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentIntegratorSupportV4;
import com.google.zxing.integration.android.IntentResult;
@@ -36,6 +42,10 @@ public class ImportKeysQrCodeFragment extends Fragment {
private ImportKeysActivity mImportActivity;
private Button mButton;
+ private TextView mText;
+ private ProgressBar mProgress;
+
+ private String[] scannedContent;
/**
* Creates new instance of this fragment
@@ -57,6 +67,9 @@ public class ImportKeysQrCodeFragment extends Fragment {
View view = inflater.inflate(R.layout.import_keys_qr_code_fragment, container, false);
mButton = (Button) view.findViewById(R.id.import_qrcode_button);
+ mText = (TextView) view.findViewById(R.id.import_qrcode_text);
+ mProgress = (ProgressBar) view.findViewById(R.id.import_qrcode_progress);
+
mButton.setOnClickListener(new OnClickListener() {
@Override
@@ -79,28 +92,65 @@ public class ImportKeysQrCodeFragment extends Fragment {
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
- case IntentIntegrator.REQUEST_CODE: {
- IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode,
- data);
+ case IntentIntegratorSupportV4.REQUEST_CODE: {
+ IntentResult scanResult = IntentIntegratorSupportV4.parseActivityResult(requestCode,
+ resultCode, data);
if (scanResult != null && scanResult.getFormatName() != null) {
- // mScannedContent = scanResult.getContents();
-
- mImportActivity.loadCallback(scanResult.getContents().getBytes(), null);
-
- // mImportData = scanResult.getContents().getBytes();
- // mImportFilename = null;
-
- // mContentView.setText(mScannedContent);
- // String[] bits = scanResult.getContents().split(",");
- // if (bits.length != 2) {
- // return; // dont know how to handle this. Not a valid code
- // }
- //
- // long keyId = Long.parseLong(bits[0]);
- // String expectedFingerprint = bits[1];
-
- // importAndSign(keyId, expectedFingerprint);
+ Log.d(Constants.TAG, scanResult.getContents());
+
+ String[] parts = scanResult.getContents().split(",");
+
+ if (parts.length != 3) {
+ Toast.makeText(getActivity(), R.string.import_qr_code_wrong, Toast.LENGTH_LONG)
+ .show();
+ return;
+ }
+
+ int counter = Integer.valueOf(parts[0]);
+ int size = Integer.valueOf(parts[1]);
+ String content = parts[2];
+
+ Log.d(Constants.TAG, "" + counter);
+ Log.d(Constants.TAG, "" + size);
+ Log.d(Constants.TAG, "" + content);
+
+ // first qr code -> setup
+ if (counter == 0) {
+ scannedContent = new String[size];
+ mProgress.setMax(size);
+ }
+
+ // save scanned content
+ scannedContent[counter] = content;
+
+ // get missing numbers
+ ArrayList<Integer> missing = new ArrayList<Integer>();
+ for (int i = 0; i < scannedContent.length; i++) {
+ if (scannedContent[i] == null) {
+ missing.add(i);
+ }
+ }
+
+ // update progress and text
+ mProgress.setProgress(scannedContent.length - missing.size());
+ String missingString = "";
+ for (int m : missing) {
+ if (!missingString.equals(""))
+ missingString += ", ";
+ missingString += String.valueOf(m + 1);
+ }
+ mText.setText(getString(R.string.import_qr_code_missing, missingString));
+
+ // finished!
+ if (missing.size() == 0) {
+ mText.setText(R.string.import_qr_code_finished);
+ String result = "";
+ for (String in : scannedContent) {
+ result += in;
+ }
+ mImportActivity.loadCallback(result.getBytes(), null);
+ }
}
break;
@@ -112,5 +162,4 @@ public class ImportKeysQrCodeFragment extends Fragment {
break;
}
}
-
}
diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareActivity.java
index 60e5d1a88..3af1569c2 100644
--- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareActivity.java
+++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareActivity.java
@@ -66,14 +66,14 @@ public class ShareActivity extends SherlockFragmentActivity {
startActivity(Intent.createChooser(sendIntent,
getResources().getText(R.string.shareKeyringWith)));
} else if (ACTION_SHARE_KEYRING_WITH_QR_CODE.equals(action)) {
- // use barcode scanner integration library
- // TODO: old new IntentIntegrator(this).shareText(keyringArmored.get(0));
ShareQrCodeDialogFragment dialog = ShareQrCodeDialogFragment.newInstance(keyringArmored
.get(0));
dialog.show(getSupportFragmentManager(), "qrCodeShareDialog");
}
// close this activity
+ // TODO: finish() would also close dialog...
+ // integrate this into new KeyViewActivity when ready
// finish();
}
}
diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/dialog/ShareQrCodeDialogFragment.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/dialog/ShareQrCodeDialogFragment.java
index 5237fef5d..a0e3cb9b4 100644
--- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/dialog/ShareQrCodeDialogFragment.java
+++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/dialog/ShareQrCodeDialogFragment.java
@@ -85,7 +85,7 @@ public class ShareQrCodeDialogFragment extends SherlockDialogFragment {
// start with first
mCounter = 0;
- mImage.setImageBitmap(QrCodeUtils.getQRCodeBitmap(mContentList.get(mCounter), QR_CODE_SIZE));
+ updateQrCode();
// OnClickListener are set in onResume to prevent automatic dismissing of Dialogs
// http://stackoverflow.com/questions/2620444/how-to-prevent-a-dialog-from-closing-when-a-button-is-clicked