diff options
5 files changed, 67 insertions, 49 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;                      } diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 1bd412d4d..64c743ead 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -703,7 +703,7 @@      </plurals>      <string name="msg_con_reimport_secret_skip">No secret keys to reimport, skipping…</string>      <string name="msg_con_warn_delete_public">Exception deleting public cache file</string> -    <string name="msg_con_warn_delete_secret">Exception deleting public cache file</string> +    <string name="msg_con_warn_delete_secret">Exception deleting secret cache file</string>      <!-- PassphraseCache -->      <string name="passp_cache_notif_click_to_clear">Click to clear cached passphrases</string> | 
