diff options
Diffstat (limited to 'OpenKeychain/src/main')
14 files changed, 100 insertions, 52 deletions
| diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java index 69244ca14..c498bad0b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java @@ -47,9 +47,11 @@ import org.spongycastle.openpgp.operator.jcajce.JcePBESecretKeyEncryptorBuilder;  import org.sufficientlysecure.keychain.Constants;  import org.sufficientlysecure.keychain.R;  import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralMsgIdException; +import org.sufficientlysecure.keychain.service.OperationResultParcel;  import org.sufficientlysecure.keychain.service.OperationResultParcel.LogLevel;  import org.sufficientlysecure.keychain.service.OperationResultParcel.LogType;  import org.sufficientlysecure.keychain.service.OperationResultParcel.OperationLog; +import org.sufficientlysecure.keychain.service.OperationResults.EditKeyResult;  import org.sufficientlysecure.keychain.service.SaveKeyringParcel;  import org.sufficientlysecure.keychain.service.SaveKeyringParcel.SubkeyAdd;  import org.sufficientlysecure.keychain.util.IterableIterator; @@ -163,8 +165,10 @@ public class PgpKeyOperation {          }      } -    public UncachedKeyRing createSecretKeyRing(SaveKeyringParcel saveParcel, OperationLog log, -                                               int indent) { +    public EditKeyResult createSecretKeyRing(SaveKeyringParcel saveParcel) { + +        OperationLog log = new OperationLog(); +        int indent = 0;          try { @@ -213,7 +217,7 @@ public class PgpKeyOperation {              PGPSecretKeyRing sKR = new PGPSecretKeyRing(                      masterSecretKey.getEncoded(), new JcaKeyFingerprintCalculator()); -            return internal(sKR, masterSecretKey, add.mFlags, saveParcel, "", log, indent); +            return internal(sKR, masterSecretKey, add.mFlags, saveParcel, "", log);          } catch (PGPException e) {              log.add(LogLevel.ERROR, LogType.MSG_CR_ERROR_INTERNAL_PGP, indent); @@ -237,8 +241,11 @@ public class PgpKeyOperation {       * are changed by adding new certificates, which implicitly override older certificates.       *       */ -    public UncachedKeyRing modifySecretKeyRing(WrappedSecretKeyRing wsKR, SaveKeyringParcel saveParcel, -                                               String passphrase, OperationLog log, int indent) { +    public EditKeyResult modifySecretKeyRing(WrappedSecretKeyRing wsKR, SaveKeyringParcel saveParcel, +                                               String passphrase) { + +        OperationLog log = new OperationLog(); +        int indent = 0;          /*           * 1. Unlock private key @@ -277,14 +284,16 @@ public class PgpKeyOperation {          // since this is the master key, this contains at least CERTIFY_OTHER          int masterKeyFlags = readKeyFlags(masterSecretKey.getPublicKey()) | KeyFlags.CERTIFY_OTHER; -        return internal(sKR, masterSecretKey, masterKeyFlags, saveParcel, passphrase, log, indent); +        return internal(sKR, masterSecretKey, masterKeyFlags, saveParcel, passphrase, log);      } -    private UncachedKeyRing internal(PGPSecretKeyRing sKR, PGPSecretKey masterSecretKey, +    private EditKeyResult internal(PGPSecretKeyRing sKR, PGPSecretKey masterSecretKey,                                       int masterKeyFlags,                                       SaveKeyringParcel saveParcel, String passphrase, -                                     OperationLog log, int indent) { +                                     OperationLog log) { + +        int indent = 1;          updateProgress(R.string.progress_certifying_master_key, 20, 100); @@ -613,7 +622,7 @@ public class PgpKeyOperation {          }          log.add(LogLevel.OK, LogType.MSG_MF_SUCCESS, indent); -        return new UncachedKeyRing(sKR); +        return new EditKeyResult(OperationResultParcel.RESULT_OK, log, new UncachedKeyRing(sKR));      } 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 f6a269e24..0e38a1c47 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -24,6 +24,7 @@ import android.net.Uri;  import android.os.Bundle;  import android.os.Message;  import android.os.Messenger; +import android.os.Parcelable;  import android.os.RemoteException;  import org.sufficientlysecure.keychain.Constants; @@ -53,6 +54,7 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;  import org.sufficientlysecure.keychain.provider.KeychainDatabase;  import org.sufficientlysecure.keychain.provider.ProviderHelper;  import org.sufficientlysecure.keychain.service.OperationResultParcel.OperationLog; +import org.sufficientlysecure.keychain.service.OperationResults.EditKeyResult;  import org.sufficientlysecure.keychain.service.OperationResults.ImportKeyResult;  import org.sufficientlysecure.keychain.util.InputData;  import org.sufficientlysecure.keychain.util.Log; @@ -333,38 +335,36 @@ public class KeychainIntentService extends IntentService                  /* Operation */                  ProviderHelper providerHelper = new ProviderHelper(this);                  PgpKeyOperation keyOperations = new PgpKeyOperation(new ProgressScaler(this, 10, 50, 100)); -                try { -                    OperationLog log = new OperationLog(); -                    UncachedKeyRing ring; -                    if (saveParcel.mMasterKeyId != null) { -                        String passphrase = data.getString(SAVE_KEYRING_PASSPHRASE); -                        WrappedSecretKeyRing secRing = -                                providerHelper.getWrappedSecretKeyRing(saveParcel.mMasterKeyId); - -                        ring = keyOperations.modifySecretKeyRing(secRing, saveParcel, -                                passphrase, log, 0); -                    } else { -                        ring = keyOperations.createSecretKeyRing(saveParcel, log, 0); -                    } +                EditKeyResult result; -                    providerHelper.saveSecretKeyRing(ring, new ProgressScaler(this, 10, 95, 100)); +                if (saveParcel.mMasterKeyId != null) { +                    String passphrase = data.getString(SAVE_KEYRING_PASSPHRASE); +                    WrappedSecretKeyRing secRing = +                            providerHelper.getWrappedSecretKeyRing(saveParcel.mMasterKeyId); -                    // cache new passphrase -                    if (saveParcel.mNewPassphrase != null) { -                        PassphraseCacheService.addCachedPassphrase(this, ring.getMasterKeyId(), -                                saveParcel.mNewPassphrase, ring.getPublicKey().getPrimaryUserIdWithFallback()); -                    } -                } catch (ProviderHelper.NotFoundException e) { -                    sendErrorToHandler(e); +                    result = keyOperations.modifySecretKeyRing(secRing, saveParcel, passphrase); +                } else { +                    result = keyOperations.createSecretKeyRing(saveParcel); +                } + +                UncachedKeyRing ring = result.getRing(); + +                providerHelper.saveSecretKeyRing(ring,  new ProgressScaler(this, 10, 95, 100)); + +                // cache new passphrase +                if (saveParcel.mNewPassphrase != null) { +                    PassphraseCacheService.addCachedPassphrase(this, ring.getMasterKeyId(), +                            saveParcel.mNewPassphrase, ring.getPublicKey().getPrimaryUserIdWithFallback());                  }                  setProgress(R.string.progress_done, 100, 100);                  /* Output */ -                sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY); +                sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, result);              } catch (Exception e) {                  sendErrorToHandler(e);              } +          } else if (ACTION_DELETE_FILE_SECURELY.equals(action)) {              try {                  /* Input */ @@ -624,6 +624,12 @@ public class KeychainIntentService extends IntentService          }      } +    private void sendMessageToHandler(Integer arg1, OperationResultParcel data) { +        Bundle bundle = new Bundle(); +        bundle.putParcelable(OperationResultParcel.EXTRA_RESULT, data); +        sendMessageToHandler(arg1, null, bundle); +    } +      private void sendMessageToHandler(Integer arg1, Bundle data) {          sendMessageToHandler(arg1, null, data);      } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/OperationResultParcel.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/OperationResultParcel.java index 2c6c29f8d..99cafd3f9 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/OperationResultParcel.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/OperationResultParcel.java @@ -144,20 +144,45 @@ public class OperationResultParcel implements Parcelable {                  color = Style.GREEN;              } -            str = activity.getString(R.string.import_error); +            str = "operation succeeded!"; +            // str = activity.getString(R.string.import_error);          } else { +              duration = 0;              color = Style.RED; -            str = activity.getString(R.string.import_error); + +            str = "operation failed"; +            // str = activity.getString(R.string.import_error); +          } +        boolean button = getLog() != null && !getLog().isEmpty();          SuperCardToast toast = new SuperCardToast(activity, -                SuperToast.Type.STANDARD, Style.getStyle(color, SuperToast.Animations.POPUP)); +                button ? SuperToast.Type.BUTTON : SuperToast.Type.STANDARD, +                Style.getStyle(color, SuperToast.Animations.POPUP));          toast.setText(str);          toast.setDuration(duration);          toast.setIndeterminate(duration == 0);          toast.setSwipeToDismiss(true); +        // If we have a log and it's non-empty, show a View Log button +        if (button) { +            toast.setButtonIcon(R.drawable.ic_action_view_as_list, +                    activity.getResources().getString(R.string.view_log)); +            toast.setButtonTextColor(activity.getResources().getColor(R.color.black)); +            toast.setTextColor(activity.getResources().getColor(R.color.black)); +            toast.setOnClickWrapper(new OnClickWrapper("supercardtoast", +                    new SuperToast.OnClickListener() { +                        @Override +                        public void onClick(View view, Parcelable token) { +                            Intent intent = new Intent( +                                    activity, LogDisplayActivity.class); +                            intent.putExtra(LogDisplayFragment.EXTRA_RESULT, OperationResultParcel.this); +                            activity.startActivity(intent); +                        } +                    } +            )); +        }          return toast; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/OperationResults.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/OperationResults.java index fcb6c027d..6fb0db0e5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/OperationResults.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/OperationResults.java @@ -143,7 +143,7 @@ public abstract class OperationResults {              // If we have a log and it's non-empty, show a View Log button              if (button) {                  toast.setButtonIcon(R.drawable.ic_action_view_as_list, -                        activity.getResources().getString(R.string.import_view_log)); +                        activity.getResources().getString(R.string.view_log));                  toast.setButtonTextColor(activity.getResources().getColor(R.color.black));                  toast.setTextColor(activity.getResources().getColor(R.color.black));                  toast.setOnClickWrapper(new OnClickWrapper("supercardtoast", @@ -167,6 +167,18 @@ public abstract class OperationResults {      public static class EditKeyResult extends OperationResultParcel { +        private transient UncachedKeyRing mRing; + +        public EditKeyResult(int result, OperationLog log, +                               UncachedKeyRing ring) { +            super(result, log); +            mRing = ring; +        } + +        public UncachedKeyRing getRing() { +            return mRing; +        } +          public EditKeyResult(Parcel source) {              super(source);          } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java index 8fc4cffb8..5ff864547 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java @@ -48,6 +48,7 @@ import org.sufficientlysecure.keychain.provider.ProviderHelper;  import org.sufficientlysecure.keychain.service.KeychainIntentService;  import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler;  import org.sufficientlysecure.keychain.service.OperationResults; +import org.sufficientlysecure.keychain.service.OperationResults.EditKeyResult;  import org.sufficientlysecure.keychain.service.OperationResults.ImportKeyResult;  import org.sufficientlysecure.keychain.service.PassphraseCacheService;  import org.sufficientlysecure.keychain.service.SaveKeyringParcel; @@ -467,21 +468,18 @@ public class EditKeyFragment extends LoaderFragment implements                  super.handleMessage(message);                  if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { -                    getActivity().finish(); -                    // TODO below                      // get returned data bundle                      Bundle returnData = message.getData();                      if (returnData == null) {                          return;                      } -                    final OperationResults.SaveKeyringResult result = -                            returnData.getParcelable(KeychainIntentService.RESULT); +                    final OperationResults.EditKeyResult result = +                            returnData.getParcelable(EditKeyResult.EXTRA_RESULT);                      if (result == null) {                          return;                      } -                      // if bad -> display here!                      if (!result.success()) {                          result.createNotify(getActivity()).show(); @@ -490,7 +488,7 @@ public class EditKeyFragment extends LoaderFragment implements                      // if good -> finish, return result to showkey and display there!                      Intent intent = new Intent(); -                    intent.putExtra(ImportKeyResult.EXTRA_RESULT, result); +                    intent.putExtra(EditKeyResult.EXTRA_RESULT, result);                      getActivity().setResult(EditKeyActivity.RESULT_OK, intent);                      getActivity().finish(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java index 256526dd9..f92977dbe 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java @@ -350,7 +350,7 @@ public class ViewKeyActivity extends ActionBarActivity implements      @Override      protected void onActivityResult(int requestCode, int resultCode, Intent data) { -        if (data.hasExtra(OperationResultParcel.EXTRA_RESULT)) { +        if (data != null && data.hasExtra(OperationResultParcel.EXTRA_RESULT)) {              OperationResultParcel result = data.getParcelableExtra(OperationResultParcel.EXTRA_RESULT);              result.createNotify(this).show();          } else { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java index 2a0f518d8..ade618840 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java @@ -251,9 +251,7 @@ public class ViewKeyMainFragment extends LoaderFragment implements      private void editKey(Uri dataUri) {          Intent editIntent = new Intent(getActivity(), EditKeyActivity.class);          editIntent.setData(KeychainContract.KeyRingData.buildSecretKeyRingUri(dataUri)); -//        editIntent.setAction(EditKeyActivity.ACTION_EDIT_KEY); -//        startActivityForResult(editIntent, 0); -        startActivity(editIntent); +        startActivityForResult(editIntent, 0);      }  } diff --git a/OpenKeychain/src/main/res/values-es/strings.xml b/OpenKeychain/src/main/res/values-es/strings.xml index 50afd5c57..002243482 100644 --- a/OpenKeychain/src/main/res/values-es/strings.xml +++ b/OpenKeychain/src/main/res/values-es/strings.xml @@ -370,7 +370,7 @@      <item quantity="one">Clave%2$s importada con éxito.</item>      <item quantity="other">%1$d claves%2$s importadas con éxito.</item>    </plurals> -  <string name="import_view_log">Ver registro (log)</string> +  <string name="view_log">Ver registro (log)</string>    <string name="import_error_nothing">No hay nada que importar.</string>    <string name="import_error">¡Error importando claves!</string>    <string name="import_with_warnings">, con advertencias</string> diff --git a/OpenKeychain/src/main/res/values-fr/strings.xml b/OpenKeychain/src/main/res/values-fr/strings.xml index f3627e9eb..a3030a65e 100644 --- a/OpenKeychain/src/main/res/values-fr/strings.xml +++ b/OpenKeychain/src/main/res/values-fr/strings.xml @@ -358,7 +358,7 @@      <item quantity="one">Clef importée avec succès</item>      <item quantity="other">%1$d clefs importées avec succès</item>    </plurals> -  <string name="import_view_log">Consulter le journal</string> +  <string name="view_log">Consulter le journal</string>    <string name="import_error_nothing">Rien à importer.</string>    <string name="import_error">Erreur lors de l\'importation des clefs !</string>    <string name="import_with_warnings">, avec des avertissements</string> diff --git a/OpenKeychain/src/main/res/values-it/strings.xml b/OpenKeychain/src/main/res/values-it/strings.xml index c8ec2614d..476b7fb31 100644 --- a/OpenKeychain/src/main/res/values-it/strings.xml +++ b/OpenKeychain/src/main/res/values-it/strings.xml @@ -354,7 +354,7 @@    <string name="import_clipboard_button">Ottieni chiave dagli appunti</string>    <string name="import_keybase_button">Ottieni chiave da Keybase.io</string>    <!--Import result toast--> -  <string name="import_view_log">Mostra registro</string> +  <string name="view_log">Mostra registro</string>    <string name="import_error_nothing">Niente da importare</string>    <string name="import_error">Errore di importazione chiavi!</string>    <string name="import_with_warnings">, con avvisi</string> diff --git a/OpenKeychain/src/main/res/values-ja/strings.xml b/OpenKeychain/src/main/res/values-ja/strings.xml index 13463df25..db1150102 100644 --- a/OpenKeychain/src/main/res/values-ja/strings.xml +++ b/OpenKeychain/src/main/res/values-ja/strings.xml @@ -358,7 +358,7 @@    <plurals name="import_keys_updated">      <item quantity="other">%1$d の鍵%2$sのアップデートに成功。</item>    </plurals> -  <string name="import_view_log">ログを見る</string> +  <string name="view_log">ログを見る</string>    <string name="import_error_nothing">インポートするものがありません。</string>    <string name="import_error">鍵のインポートのエラー!</string>    <string name="import_with_warnings">、とワーニング</string> diff --git a/OpenKeychain/src/main/res/values-ru/strings.xml b/OpenKeychain/src/main/res/values-ru/strings.xml index 539a431b5..d15e35f50 100644 --- a/OpenKeychain/src/main/res/values-ru/strings.xml +++ b/OpenKeychain/src/main/res/values-ru/strings.xml @@ -371,7 +371,7 @@      <item quantity="few">и обновлено %1$d ключей%2$s.</item>      <item quantity="other">и обновлено %1$d ключей%2$s.</item>    </plurals> -  <string name="import_view_log">Смотреть журнал</string> +  <string name="view_log">Смотреть журнал</string>    <string name="import_error_nothing">Нет данных для импорта.</string>    <string name="import_error">Ошибка импорта ключей!</string>    <string name="import_with_warnings">, с предупреждениями</string> diff --git a/OpenKeychain/src/main/res/values-uk/strings.xml b/OpenKeychain/src/main/res/values-uk/strings.xml index 6f5cc7cf1..90ad799a5 100644 --- a/OpenKeychain/src/main/res/values-uk/strings.xml +++ b/OpenKeychain/src/main/res/values-uk/strings.xml @@ -352,7 +352,7 @@    <string name="import_clipboard_button">Отримати ключ з буфера обміну</string>    <string name="import_keybase_button">Отримати ключ із Keybase.io</string>    <!--Import result toast--> -  <string name="import_view_log">Переглянути журнал</string> +  <string name="view_log">Переглянути журнал</string>    <string name="import_error_nothing">Нема що імпортувати.</string>    <string name="import_error">Помилка імпорту ключів!</string>    <!--Intent labels--> diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 4519688ac..46760691d 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -403,7 +403,7 @@          <item quantity="one">Successfully updated key%2$s.</item>          <item quantity="other">Successfully updated %1$d keys%2$s.</item>      </plurals> -    <string name="import_view_log">View Log</string> +    <string name="view_log">View Log</string>      <string name="import_error_nothing">Nothing to import.</string>      <string name="import_error">Error importing keys!</string>      <string name="import_with_warnings">, with warnings</string> | 
