aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2014-08-20 19:34:36 +0200
committerVincent Breitmoser <valodim@mugenguild.com>2014-08-20 19:34:36 +0200
commitfe1f5489ff8e819c8711f9bde3a19573bc621110 (patch)
tree8754f34ea06cfa0c1b6d94b4bbc1f09d0f2e5d64 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain
parent9aaaac068efa21c4f9fdc8ae9c79abdee685b0fc (diff)
downloadopen-keychain-fe1f5489ff8e819c8711f9bde3a19573bc621110.tar.gz
open-keychain-fe1f5489ff8e819c8711f9bde3a19573bc621110.tar.bz2
open-keychain-fe1f5489ff8e819c8711f9bde3a19573bc621110.zip
consolidate: implement (mostly) recovery mode
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java5
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java13
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ConsolidateDialogActivity.java93
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListActivity.java3
4 files changed, 66 insertions, 48 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java
index daa920f74..125f33ded 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java
@@ -987,6 +987,11 @@ public class ProviderHelper {
log(LogLevel.DEBUG, LogType.MSG_CON_DB_CLEAR);
mContentResolver.delete(KeyRings.buildUnifiedKeyRingsUri(), null, null);
+ // debug: break if this isn't recovery
+ if (!recovery) {
+ return new ConsolidateResult(ConsolidateResult.RESULT_ERROR, mLog);
+ }
+
FileImportCache<ParcelableKeyRing> cacheSecret =
new FileImportCache<ParcelableKeyRing>(mContext, "consolidate_secret.pcl");
FileImportCache<ParcelableKeyRing> cachePublic =
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java
index 2c1bc8463..ae881769d 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java
@@ -167,6 +167,10 @@ public class KeychainIntentService extends IntentService
public static final String CERTIFY_KEY_PUB_KEY_ID = "sign_key_pub_key_id";
public static final String CERTIFY_KEY_UIDS = "sign_key_uids";
+ // consolidate
+ public static final String CONSOLIDATE_RECOVERY = "consolidate_recovery";
+
+
/*
* possible data keys as result send over messenger
*/
@@ -183,8 +187,6 @@ public class KeychainIntentService extends IntentService
public static final String RESULT_IMPORT = "result";
- public static final String RESULT_CONSOLIDATE = "consolidate_result";
-
Messenger mMessenger;
private boolean mIsCanceled;
@@ -667,7 +669,12 @@ public class KeychainIntentService extends IntentService
}
} else if (ACTION_CONSOLIDATE.equals(action)) {
- ConsolidateResult result = new ProviderHelper(this).consolidateDatabaseStep1(this);
+ ConsolidateResult result;
+ if (data.containsKey(CONSOLIDATE_RECOVERY) && data.getBoolean(CONSOLIDATE_RECOVERY)) {
+ result = new ProviderHelper(this).consolidateDatabaseStep2(this);
+ } else {
+ result = new ProviderHelper(this).consolidateDatabaseStep1(this);
+ }
sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, result);
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ConsolidateDialogActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ConsolidateDialogActivity.java
index e4a80ff48..b21b1375e 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ConsolidateDialogActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ConsolidateDialogActivity.java
@@ -20,7 +20,10 @@ package org.sufficientlysecure.keychain.ui;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
+import android.content.Intent;
import android.os.Bundle;
+import android.os.Message;
+import android.os.Messenger;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
@@ -29,6 +32,9 @@ import android.view.KeyEvent;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
+import org.sufficientlysecure.keychain.service.KeychainIntentService;
+import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
+import org.sufficientlysecure.keychain.service.OperationResults.ConsolidateResult;
/**
* We can not directly create a dialog on the application context.
@@ -36,66 +42,65 @@ import org.sufficientlysecure.keychain.R;
*/
public class ConsolidateDialogActivity extends FragmentActivity {
- MyDialogFragment mDialogFragment;
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// this activity itself has no content view (see manifest)
- mDialogFragment = new MyDialogFragment();
- // give all extras through to the fragment
- mDialogFragment.setArguments(getIntent().getExtras());
+ consolidateRecovery();
- mDialogFragment.show(getSupportFragmentManager(), "dialog");
}
- public static class MyDialogFragment extends DialogFragment {
-
- /**
- * Creates dialog
- */
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- // hack to get holo design (which is not automatically applied due to activity's Theme.NoDisplay
- ContextThemeWrapper context = new ContextThemeWrapper(getActivity(),
- R.style.Theme_AppCompat_Light);
- ProgressDialog dialog = new ProgressDialog(context);
- dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
- dialog.setCancelable(false);
- dialog.setCanceledOnTouchOutside(false);
-
- // Disable the back button
- DialogInterface.OnKeyListener keyListener = new DialogInterface.OnKeyListener() {
- @Override
- public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- return true;
+ private void consolidateRecovery() {
+ // Message is received after importing is done in KeychainIntentService
+ KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler(
+ this,
+ getString(R.string.progress_importing),
+ ProgressDialog.STYLE_HORIZONTAL) {
+ public void handleMessage(Message message) {
+ // handle messages by standard KeychainIntentServiceHandler first
+ super.handleMessage(message);
+
+ if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
+ /* don't care about the results (for now?)
+
+ // get returned data bundle
+ Bundle returnData = message.getData();
+ if (returnData == null) {
+ return;
}
- return false;
- }
+ final ConsolidateResult result =
+ returnData.getParcelable(KeychainIntentService.RESULT_CONSOLIDATE);
+ if (result == null) {
+ return;
+ }
+ result.createNotify(ConsolidateDialogActivity.this).show();
+ */
- };
- dialog.setOnKeyListener(keyListener);
+ ConsolidateDialogActivity.this.finish();
+ }
+ }
+ };
- return dialog;
- }
+ // Send all information needed to service to import key in other thread
+ Intent intent = new Intent(this, KeychainIntentService.class);
+ intent.setAction(KeychainIntentService.ACTION_CONSOLIDATE);
- @Override
- public void onCancel(DialogInterface dialog) {
- super.onCancel(dialog);
+ // fill values for this action
+ Bundle data = new Bundle();
+ data.putBoolean(KeychainIntentService.CONSOLIDATE_RECOVERY, true);
+ intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
- dismiss();
- }
+ // Create a new Messenger for the communication back
+ Messenger messenger = new Messenger(saveHandler);
+ intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger);
- @Override
- public void onDismiss(DialogInterface dialog) {
- super.onDismiss(dialog);
- Log.d(Constants.TAG, "onDismiss");
+ // show progress dialog
+ saveHandler.showProgressDialog(this);
- getActivity().finish();
- }
+ // start service with intent
+ startService(intent);
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListActivity.java
index 9d9462648..0bc98d545 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListActivity.java
@@ -33,6 +33,7 @@ import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.provider.KeychainDatabase;
import org.sufficientlysecure.keychain.service.KeychainIntentService;
import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;
+import org.sufficientlysecure.keychain.service.OperationResultParcel;
import org.sufficientlysecure.keychain.service.OperationResults.ConsolidateResult;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Notify;
@@ -164,7 +165,7 @@ public class KeyListActivity extends DrawerActivity {
return;
}
final ConsolidateResult result =
- returnData.getParcelable(KeychainIntentService.RESULT_CONSOLIDATE);
+ returnData.getParcelable(OperationResultParcel.EXTRA_RESULT);
if (result == null) {
return;
}