diff options
Diffstat (limited to 'OpenPGP-Keychain/src')
15 files changed, 193 insertions, 154 deletions
| diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java index 35412d4b8..b7db92b9b 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyHelper.java @@ -452,7 +452,7 @@ public class PgpKeyHelper {              key = secretKey.getPublicKey();          } -        return convertFingerprintToHex(key.getFingerprint(), true); +        return convertFingerprintToHex(key.getFingerprint());      }      /** @@ -465,19 +465,12 @@ public class PgpKeyHelper {       * @param split       split into 4 character chunks       * @return       */ -    public static String convertFingerprintToHex(byte[] fingerprint, boolean split) { +    public static String convertFingerprintToHex(byte[] fingerprint) {          String hexString = Hex.toHexString(fingerprint); -        if (split) { -            hexString = splitFingerprintHex(hexString); -        }          return hexString;      } -    public static String splitFingerprintHex(String hexString) { -        return hexString.replaceAll("(.{4})(?!$)", "$1 "); -    } -      /**       * Convert key id from long to 64 bit hex string       * <p/> @@ -511,6 +504,14 @@ public class PgpKeyHelper {      public static SpannableStringBuilder colorizeFingerprint(String fingerprint) { +        // split by 4 characters +        fingerprint = fingerprint.replaceAll("(.{4})(?!$)", "$1 "); + +        // add line breaks to have a consistent "image" that can be recognized +        char[] chars = fingerprint.toCharArray(); +        chars[24] = '\n'; +        fingerprint = String.valueOf(chars); +          SpannableStringBuilder sb = new SpannableStringBuilder(fingerprint);          try {              // for each 4 characters of the fingerprint + 1 space diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java index 5af81d39d..0751fa33c 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -25,6 +25,7 @@ import android.os.Bundle;  import android.os.Message;  import android.os.Messenger;  import android.os.RemoteException; +  import org.spongycastle.openpgp.*;  import org.sufficientlysecure.keychain.Constants;  import org.sufficientlysecure.keychain.Id; @@ -692,11 +693,11 @@ public class KeychainIntentService extends IntentService                      for (long masterKeyId : masterKeyIds) {                          if ((keyType == Id.type.public_key || keyType == Id.type.public_secret_key) -                                                                && allPublicMasterKeyIds.contains(masterKeyId)) { +                                && allPublicMasterKeyIds.contains(masterKeyId)) {                              publicMasterKeyIds.add(masterKeyId);                          }                          if ((keyType == Id.type.secret_key || keyType == Id.type.public_secret_key) -                                                                && allSecretMasterKeyIds.contains(masterKeyId)) { +                                && allSecretMasterKeyIds.contains(masterKeyId)) {                              secretMasterKeyIds.add(masterKeyId);                          }                      } @@ -745,49 +746,58 @@ public class KeychainIntentService extends IntentService                  ArrayList<ImportKeysListEntry> entries = data.getParcelableArrayList(DOWNLOAD_KEY_LIST);                  String keyServer = data.getString(DOWNLOAD_KEY_SERVER); +                // TODO: add extra which requires fingerprint suport and force verification! +                // only supported by newer sks keyserver versions +                  // this downloads the keys and places them into the ImportKeysListEntry entries                  HkpKeyServer server = new HkpKeyServer(keyServer);                  for (ImportKeysListEntry entry : entries) { -                    byte[] downloadedKey = server.get(entry.getKeyIdHex()).getBytes(); - -                    /** -                     * TODO: copied from ImportKeysListLoader -                     * -                     * -                     * this parses the downloaded key -                     */ -                    // need to have access to the bufferedInput, so we can reuse it for the possible -                    // PGPObject chunks after the first one, e.g. files with several consecutive ASCII -                    // armor blocks -                    BufferedInputStream bufferedInput = -                            new BufferedInputStream(new ByteArrayInputStream(downloadedKey)); -                    try { - -                        // read all available blocks... (asc files can contain many blocks with BEGIN END) -                        while (bufferedInput.available() > 0) { -                            InputStream in = PGPUtil.getDecoderStream(bufferedInput); -                            PGPObjectFactory objectFactory = new PGPObjectFactory(in); - -                            // go through all objects in this block -                            Object obj; -                            while ((obj = objectFactory.nextObject()) != null) { -                                Log.d(Constants.TAG, "Found class: " + obj.getClass()); - -                                if (obj instanceof PGPKeyRing) { -                                    PGPKeyRing newKeyring = (PGPKeyRing) obj; +                    // if available use complete fingerprint for get request +                    byte[] downloadedKeyBytes; +                    if (entry.getFingerPrintHex() != null) { +                        downloadedKeyBytes = server.get("0x" + entry.getFingerPrintHex()).getBytes(); +                    } else { +                        downloadedKeyBytes = server.get(entry.getKeyIdHex()).getBytes(); +                    } -                                    entry.setBytes(newKeyring.getEncoded()); -                                } else { -                                    Log.e(Constants.TAG, "Object not recognized as PGPKeyRing!"); -                                } +                    // create PGPKeyRing object based on downloaded armored key +                    PGPKeyRing downloadedKey = null; +                    BufferedInputStream bufferedInput = +                            new BufferedInputStream(new ByteArrayInputStream(downloadedKeyBytes)); +                    if (bufferedInput.available() > 0) { +                        InputStream in = PGPUtil.getDecoderStream(bufferedInput); +                        PGPObjectFactory objectFactory = new PGPObjectFactory(in); + +                        // get first object in block +                        Object obj; +                        if ((obj = objectFactory.nextObject()) != null) { +                            Log.d(Constants.TAG, "Found class: " + obj.getClass()); + +                            if (obj instanceof PGPKeyRing) { +                                downloadedKey = (PGPKeyRing) obj; +                            } else { +                                throw new PgpGeneralException("Object not recognized as PGPKeyRing!");                              }                          } -                    } catch (Exception e) { -                        Log.e(Constants.TAG, "Exception on parsing key file!", e);                      } + +                    // verify downloaded key by comparing fingerprints +                    if (entry.getFingerPrintHex() != null) { +                        String downloadedKeyFp = PgpKeyHelper.convertFingerprintToHex(downloadedKey.getPublicKey().getFingerprint()); +                        if (downloadedKeyFp.equals(entry.getFingerPrintHex())) { +                            Log.d(Constants.TAG, "fingerprint of downloaded key is the same as the requested fingerprint!"); +                        } else { +                            throw new PgpGeneralException("fingerprint of downloaded key is NOT the same as the requested fingerprint!"); +                        } +                    } + +                    // save key bytes in entry object for doing the +                    // actual import afterwards +                    entry.setBytes(downloadedKey.getEncoded());                  } +                  Intent importIntent = new Intent(this, KeychainIntentService.class);                  importIntent.setAction(ACTION_IMPORT_KEYRING);                  Bundle importData = new Bundle(); diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyActivity.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyActivity.java index 0983d54fb..dff4e9d72 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyActivity.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyActivity.java @@ -198,6 +198,8 @@ public class CertifyKeyActivity extends ActionBarActivity implements              case LOADER_ID_KEYRING:                  // the first key here is our master key                  if (data.moveToFirst()) { +                    // TODO: put findViewById in onCreate! +                      long keyId = data.getLong(INDEX_MASTER_KEY_ID);                      String keyIdStr = PgpKeyHelper.convertKeyIdToHexShort(keyId);                      ((TextView) findViewById(R.id.key_id)).setText(keyIdStr); @@ -210,7 +212,7 @@ public class CertifyKeyActivity extends ActionBarActivity implements                          // FALLBACK for old database entries                          fingerprintBlob = ProviderHelper.getFingerprint(this, mDataUri);                      } -                    String fingerprint = PgpKeyHelper.convertFingerprintToHex(fingerprintBlob, true); +                    String fingerprint = PgpKeyHelper.convertFingerprintToHex(fingerprintBlob);                      ((TextView) findViewById(R.id.fingerprint)).setText(PgpKeyHelper.colorizeFingerprint(fingerprint));                  }                  break; diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java index 1231b6209..28c9c7b28 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptActivity.java @@ -1002,8 +1002,8 @@ public class EncryptActivity extends DrawerActivity {              case Id.request.secret_keys: {                  if (resultCode == RESULT_OK) { -                    Bundle bundle = data.getExtras(); -                    mSecretKeyId = bundle.getLong(SelectSecretKeyActivity.RESULT_EXTRA_MASTER_KEY_ID); +                    Uri uri_master_key = data.getData(); +                    mSecretKeyId = Long.valueOf(uri_master_key.getLastPathSegment());                  } else {                      mSecretKeyId = Id.key.none;                  } diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyActivity.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyActivity.java index 82a3c2e8e..0ff88d97c 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyActivity.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyActivity.java @@ -76,10 +76,6 @@ public class SelectSecretKeyActivity extends ActionBarActivity {          Intent data = new Intent();          data.setData(selectedUri); -        // TODO: deprecate RESULT_EXTRA_MASTER_KEY_ID! -        long masterKeyId = Long.valueOf(selectedUri.getLastPathSegment()); -        data.putExtra(RESULT_EXTRA_MASTER_KEY_ID, masterKeyId); -          setResult(RESULT_OK, data);          finish();      } diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyLayoutFragment.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyLayoutFragment.java index 960b4aafb..2fcfc9650 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyLayoutFragment.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyLayoutFragment.java @@ -19,22 +19,24 @@ package org.sufficientlysecure.keychain.ui;  import android.app.Activity;  import android.content.Intent; +import android.database.Cursor; +import android.net.Uri;  import android.os.Bundle;  import android.support.v4.app.Fragment; +import android.support.v4.app.LoaderManager; +import android.support.v4.content.CursorLoader; +import android.support.v4.content.Loader;  import android.view.LayoutInflater;  import android.view.View;  import android.view.View.OnClickListener;  import android.view.ViewGroup;  import android.widget.TextView;  import com.beardedhen.androidbootstrap.BootstrapButton; -import org.spongycastle.openpgp.PGPSecretKey; -import org.spongycastle.openpgp.PGPSecretKeyRing; -import org.sufficientlysecure.keychain.Id;  import org.sufficientlysecure.keychain.R;  import org.sufficientlysecure.keychain.pgp.PgpKeyHelper; -import org.sufficientlysecure.keychain.provider.ProviderHelper; +import org.sufficientlysecure.keychain.provider.KeychainContract; -public class SelectSecretKeyLayoutFragment extends Fragment { +public class SelectSecretKeyLayoutFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {      private TextView mKeyUserId;      private TextView mKeyUserIdRest; @@ -43,9 +45,20 @@ public class SelectSecretKeyLayoutFragment extends Fragment {      private BootstrapButton mSelectKeyButton;      private Boolean mFilterCertify; +    private Uri mReceivedUri = null; +      private SelectSecretKeyCallback mCallback;      private static final int REQUEST_CODE_SELECT_KEY = 8882; +         +    private static final int LOADER_ID = 0; + +    //The Projection we will retrieve, Master Key ID is for convenience sake, +    //to avoid having to pass the Key Around +    final String[] PROJECTION = new String[]{KeychainContract.UserIds.USER_ID +            , KeychainContract.KeyRings.MASTER_KEY_ID}; +    final int INDEX_USER_ID = 0; +    final int INDEX_MASTER_KEY_ID = 1;      public interface SelectSecretKeyCallback {          void onKeySelected(long secretKeyId); @@ -59,63 +72,25 @@ public class SelectSecretKeyLayoutFragment extends Fragment {          mFilterCertify = filterCertify;      } -    public void selectKey(long secretKeyId) { -        if (secretKeyId == Id.key.none) { -            mNoKeySelected.setVisibility(View.VISIBLE); -            mKeyUserId.setVisibility(View.GONE); -            mKeyUserIdRest.setVisibility(View.GONE); -            mKeyMasterKeyIdHex.setVisibility(View.GONE); +    public void setNoKeySelected() { +        mNoKeySelected.setVisibility(View.VISIBLE); +        mKeyUserId.setVisibility(View.GONE); +        mKeyUserIdRest.setVisibility(View.GONE); +        mKeyMasterKeyIdHex.setVisibility(View.GONE); +    } -        } else { -            PGPSecretKeyRing keyRing = ProviderHelper.getPGPSecretKeyRingByMasterKeyId( -                    getActivity(), secretKeyId); -            if (keyRing != null) { -                PGPSecretKey key = PgpKeyHelper.getMasterKey(keyRing); -                String masterkeyIdHex = PgpKeyHelper.convertKeyIdToHexShort(secretKeyId); - -                if (key != null) { -                    String userId = PgpKeyHelper.getMainUserIdSafe(getActivity(), key); - -                    String[] userIdSplit = PgpKeyHelper.splitUserId(userId); -                    String userName, userEmail; - -                    if (userIdSplit[0] != null) { -                        userName = userIdSplit[0]; -                    } else { -                        userName = getActivity().getResources().getString(R.string.user_id_no_name); -                    } - -                    if (userIdSplit[1] != null) { -                        userEmail = userIdSplit[1]; -                    } else { -                        userEmail = getActivity().getResources().getString(R.string.error_user_id_no_email); -                    } - -                    mKeyMasterKeyIdHex.setText(masterkeyIdHex); -                    mKeyUserId.setText(userName); -                    mKeyUserIdRest.setText(userEmail); -                    mKeyMasterKeyIdHex.setVisibility(View.VISIBLE); -                    mKeyUserId.setVisibility(View.VISIBLE); -                    mKeyUserIdRest.setVisibility(View.VISIBLE); -                    mNoKeySelected.setVisibility(View.GONE); -                } else { -                    mKeyMasterKeyIdHex.setVisibility(View.GONE); -                    mKeyUserId.setVisibility(View.GONE); -                    mKeyUserIdRest.setVisibility(View.GONE); -                    mNoKeySelected.setVisibility(View.VISIBLE); -                } -            } else { -                mKeyMasterKeyIdHex.setText( -                        getActivity().getResources() -                                .getString(R.string.no_keys_added_or_updated) -                         + " for master id: " + secretKeyId); -                mKeyMasterKeyIdHex.setVisibility(View.VISIBLE); -                mKeyUserId.setVisibility(View.GONE); -                mKeyUserIdRest.setVisibility(View.GONE); -                mNoKeySelected.setVisibility(View.GONE); -            } +    public void setSelectedKeyData(String userName, String email, String masterKeyHex) { + +        mNoKeySelected.setVisibility(View.GONE); + +        mKeyUserId.setText(userName); +        mKeyUserIdRest.setText(email); +        mKeyMasterKeyIdHex.setText(masterKeyHex); + +        mKeyUserId.setVisibility(View.VISIBLE); +        mKeyUserIdRest.setVisibility(View.VISIBLE); +        mKeyMasterKeyIdHex.setVisibility(View.VISIBLE); -        }      }      public void setError(String error) { @@ -147,29 +122,80 @@ public class SelectSecretKeyLayoutFragment extends Fragment {          return view;      } +    //For AppSettingsFragment +    public void selectKey(long masterKeyId){ +        Uri buildUri = KeychainContract.KeyRings.buildSecretKeyRingsByMasterKeyIdUri(String.valueOf(masterKeyId)); +        mReceivedUri=buildUri; +        getActivity().getSupportLoaderManager().restartLoader(LOADER_ID, null, this); +    } +      private void startSelectKeyActivity() {          Intent intent = new Intent(getActivity(), SelectSecretKeyActivity.class);          intent.putExtra(SelectSecretKeyActivity.EXTRA_FILTER_CERTIFY, mFilterCertify);          startActivityForResult(intent, REQUEST_CODE_SELECT_KEY);      } +    @Override +    public Loader<Cursor> onCreateLoader(int id, Bundle args) { +        //We don't care about the Loader id +        return new CursorLoader(getActivity(), mReceivedUri, PROJECTION, null, null, null); +    } + +    @Override +    public void onLoadFinished(Loader<Cursor> loader, Cursor data) { +        if (data.moveToFirst()) { +            String userName, email, masterKeyHex; +            String userID = data.getString(INDEX_USER_ID); +            long masterKeyID = data.getLong(INDEX_MASTER_KEY_ID); + +            String splitUserID[] = PgpKeyHelper.splitUserId(userID); + +            if (splitUserID[0] != null) { +                userName = splitUserID[0]; +            } else { +                userName = getActivity().getResources().getString(R.string.user_id_no_name); +            } + +            if (splitUserID[1] != null) { +                email = splitUserID[1]; +            } else { +                email = getActivity().getResources().getString(R.string.error_user_id_no_email); +            } + +            //TODO Can the cursor return invalid values for the Master Key ? +            masterKeyHex = PgpKeyHelper.convertKeyIdToHexShort(masterKeyID); + +            //Set the data +            setSelectedKeyData(userName, email, masterKeyHex); + +            //Give value to the callback +            mCallback.onKeySelected(masterKeyID); +        } else { +            //Set The empty View +            setNoKeySelected(); +        } + +    } + +    @Override +    public void onLoaderReset(Loader<Cursor> loader) { +        return; +    } +      // Select Secret Key Activity delivers the intent which was sent by it using interface to Select -    // Secret Key Fragment.Intent contains Master Key Id, User Email, User Name, Master Key Id Hex. +    // Secret Key Fragment.Intent contains the passed Uri      @Override      public void onActivityResult(int requestCode, int resultCode, Intent data) {          switch (requestCode & 0xFFFF) {              case REQUEST_CODE_SELECT_KEY: { -                long secretKeyId;                  if (resultCode == Activity.RESULT_OK) { -                    Bundle bundle = data.getExtras(); -                    secretKeyId = bundle.getLong(SelectSecretKeyActivity.RESULT_EXTRA_MASTER_KEY_ID); -                    selectKey(secretKeyId); +                    mReceivedUri = data.getData(); + +                    //Must be restartLoader() or the data will not be updated on selecting a new key +                    getActivity().getSupportLoaderManager().restartLoader(LOADER_ID, null, this); -                    // remove displayed errors                      mKeyUserId.setError(null); -                    // give value back to callback -                    mCallback.onKeySelected(secretKeyId);                  }                  break;              } diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java index 5e7cabcac..3e7e6d7ce 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java @@ -182,7 +182,7 @@ public class ViewKeyActivity extends ActionBarActivity {          String content;          if (fingerprintOnly) {              byte[] fingerprintBlob = ProviderHelper.getFingerprint(this, dataUri); -            String fingerprint = PgpKeyHelper.convertFingerprintToHex(fingerprintBlob, false); +            String fingerprint = PgpKeyHelper.convertFingerprintToHex(fingerprintBlob);              content = Constants.FINGERPRINT_SCHEME + ":" + fingerprint;          } else { diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java index 7beef4b5e..dd4e7fa94 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyMainFragment.java @@ -320,7 +320,7 @@ public class ViewKeyMainFragment extends Fragment implements                          // FALLBACK for old database entries                          fingerprintBlob = ProviderHelper.getFingerprint(getActivity(), mDataUri);                      } -                    String fingerprint = PgpKeyHelper.convertFingerprintToHex(fingerprintBlob, true); +                    String fingerprint = PgpKeyHelper.convertFingerprintToHex(fingerprintBlob);                      mFingerprint.setText(PgpKeyHelper.colorizeFingerprint(fingerprint));                  } diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysListEntry.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysListEntry.java index 2610dfb3e..9b20effc2 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysListEntry.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysListEntry.java @@ -240,7 +240,7 @@ public class ImportKeysListEntry implements Serializable, Parcelable {          this.revoked = pgpKeyRing.getPublicKey().isRevoked();          this.fingerPrintHex = PgpKeyHelper.convertFingerprintToHex(pgpKeyRing.getPublicKey() -                .getFingerprint(), true); +                .getFingerprint());          this.bitStrength = pgpKeyRing.getPublicKey().getBitStrength();          final int algorithm = pgpKeyRing.getPublicKey().getAlgorithm();          this.algorithm = getAlgorithmFromId(algorithm); diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/ShareQrCodeDialogFragment.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/ShareQrCodeDialogFragment.java index b501ba230..94586810e 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/ShareQrCodeDialogFragment.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/ShareQrCodeDialogFragment.java @@ -90,7 +90,7 @@ public class ShareQrCodeDialogFragment extends DialogFragment {              alert.setPositiveButton(R.string.btn_okay, null);              byte[] fingerprintBlob = ProviderHelper.getFingerprint(getActivity(), dataUri); -            String fingerprint = PgpKeyHelper.convertFingerprintToHex(fingerprintBlob, false); +            String fingerprint = PgpKeyHelper.convertFingerprintToHex(fingerprintBlob);              mText.setText(getString(R.string.share_qr_code_dialog_fingerprint_text) + " " + fingerprint); diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/util/HkpKeyServer.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/util/HkpKeyServer.java index a25e3d748..b987e1533 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/util/HkpKeyServer.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/util/HkpKeyServer.java @@ -251,8 +251,7 @@ public class HkpKeyServer extends KeyServer {              // and https://github.com/openpgp-keychain/openpgp-keychain/issues/259#issuecomment-38168176              String fingerprintOrKeyId = matcher.group(1);              if (fingerprintOrKeyId.length() > 16) { -                entry.setFingerPrintHex(PgpKeyHelper.splitFingerprintHex( -                        fingerprintOrKeyId.toLowerCase(Locale.US))); +                entry.setFingerPrintHex(fingerprintOrKeyId.toLowerCase(Locale.US));                  entry.setKeyIdHex("0x" + fingerprintOrKeyId.substring(fingerprintOrKeyId.length()                          - 16, fingerprintOrKeyId.length()));              } else { diff --git a/OpenPGP-Keychain/src/main/res/layout/encrypt_content.xml b/OpenPGP-Keychain/src/main/res/layout/encrypt_content.xml index d6a05f0d4..bb947fb5a 100644 --- a/OpenPGP-Keychain/src/main/res/layout/encrypt_content.xml +++ b/OpenPGP-Keychain/src/main/res/layout/encrypt_content.xml @@ -215,7 +215,8 @@                          android:layout_width="match_parent"                          android:layout_height="match_parent"                          android:gravity="top" -                        android:inputType="text|textCapSentences|textMultiLine|textLongMessage"/> +                        android:inputType="text|textCapSentences|textMultiLine|textLongMessage" +                        android:hint="@string/encrypt_content_edit_text_hint"/>              </LinearLayout>              <LinearLayout @@ -371,7 +372,7 @@                      android:padding="4dp"                      android:layout_weight="1"                      android:text="@string/btn_share" -                    bootstrapbutton:bb_icon_left="fa-lock" +                    bootstrapbutton:bb_icon_left="fa-share-square"                      bootstrapbutton:bb_type="info"/>              <com.beardedhen.androidbootstrap.BootstrapButton @@ -381,7 +382,7 @@                      android:padding="4dp"                      android:layout_weight="1"                      android:text="@string/btn_clipboard" -                    bootstrapbutton:bb_icon_left="fa-lock" +                    bootstrapbutton:bb_icon_left="fa-clipboard"                      bootstrapbutton:bb_type="info"/>              <com.beardedhen.androidbootstrap.BootstrapButton diff --git a/OpenPGP-Keychain/src/main/res/layout/import_keys_list_entry.xml b/OpenPGP-Keychain/src/main/res/layout/import_keys_list_entry.xml index fb092793b..f5a39f115 100644 --- a/OpenPGP-Keychain/src/main/res/layout/import_keys_list_entry.xml +++ b/OpenPGP-Keychain/src/main/res/layout/import_keys_list_entry.xml @@ -15,7 +15,7 @@       limitations under the License.  -->  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" -    android:layout_width="fill_parent" +    android:layout_width="match_parent"      android:layout_height="wrap_content"      android:orientation="vertical"      android:paddingLeft="3dip" @@ -23,7 +23,7 @@      android:singleLine="true" >      <LinearLayout -        android:layout_width="fill_parent" +        android:layout_width="match_parent"          android:layout_height="wrap_content"          android:orientation="horizontal" > @@ -52,13 +52,6 @@                  android:textAppearance="?android:attr/textAppearanceMedium" />              <TextView -                android:id="@+id/fingerprint" -                android:layout_width="wrap_content" -                android:layout_height="wrap_content" -                android:text="fingerprint" -                android:textAppearance="?android:attr/textAppearanceSmall" /> - -            <TextView                  android:id="@+id/mainUserIdRest"                  android:layout_width="wrap_content"                  android:layout_height="wrap_content" @@ -90,6 +83,14 @@                  android:textAppearance="?android:attr/textAppearanceSmall" />              <TextView +                android:id="@+id/fingerprint" +                android:layout_width="wrap_content" +                android:layout_height="wrap_content" +                android:text="fingerprint" +                android:typeface="monospace" +                android:textAppearance="?android:attr/textAppearanceSmall" /> + +            <TextView                  android:id="@+id/status"                  android:layout_width="wrap_content"                  android:layout_height="wrap_content" @@ -100,10 +101,10 @@      <LinearLayout          android:id="@+id/list" -        android:layout_width="fill_parent" +        android:layout_width="match_parent"          android:layout_height="wrap_content"          android:layout_marginLeft="36dip"          android:orientation="vertical" >      </LinearLayout> -</LinearLayout>
\ No newline at end of file +</LinearLayout> diff --git a/OpenPGP-Keychain/src/main/res/layout/view_key_main_fragment.xml b/OpenPGP-Keychain/src/main/res/layout/view_key_main_fragment.xml index 6ef3f3072..adbdb98dd 100644 --- a/OpenPGP-Keychain/src/main/res/layout/view_key_main_fragment.xml +++ b/OpenPGP-Keychain/src/main/res/layout/view_key_main_fragment.xml @@ -130,19 +130,23 @@                      android:text="" />              </TableRow> -            <TableRow> +            <TableRow +                android:layout_width="fill_parent" +                android:layout_height="fill_parent" +                android:id="@+id/tableRow">                  <TextView                      android:layout_width="wrap_content"                      android:layout_height="wrap_content"                      android:layout_gravity="center_vertical"                      android:paddingRight="10dip" -                    android:text="@string/label_creation" /> +                    android:text="@string/label_fingerprint" />                  <TextView -                    android:id="@+id/creation" +                    android:id="@+id/fingerprint"                      android:layout_width="match_parent" -                    android:layout_height="wrap_content" /> +                    android:layout_height="wrap_content" +                    android:typeface="monospace" />              </TableRow>              <TableRow> @@ -152,31 +156,27 @@                      android:layout_height="wrap_content"                      android:layout_gravity="center_vertical"                      android:paddingRight="10dip" -                    android:text="@string/label_expiry" /> +                    android:text="@string/label_creation" />                  <TextView -                    android:id="@+id/expiry" +                    android:id="@+id/creation"                      android:layout_width="match_parent"                      android:layout_height="wrap_content" />              </TableRow> -            <TableRow -                android:layout_width="fill_parent" -                android:layout_height="fill_parent" -                android:id="@+id/tableRow"> +            <TableRow>                  <TextView                      android:layout_width="wrap_content"                      android:layout_height="wrap_content"                      android:layout_gravity="center_vertical"                      android:paddingRight="10dip" -                    android:text="@string/label_fingerprint" /> +                    android:text="@string/label_expiry" />                  <TextView -                    android:id="@+id/fingerprint" +                    android:id="@+id/expiry"                      android:layout_width="match_parent" -                    android:layout_height="wrap_content" -                    android:typeface="monospace" /> +                    android:layout_height="wrap_content" />              </TableRow>              <TableRow> @@ -264,4 +264,4 @@      </LinearLayout> -</ScrollView>
\ No newline at end of file +</ScrollView> diff --git a/OpenPGP-Keychain/src/main/res/values/strings.xml b/OpenPGP-Keychain/src/main/res/values/strings.xml index 6713153bf..11e3028f3 100644 --- a/OpenPGP-Keychain/src/main/res/values/strings.xml +++ b/OpenPGP-Keychain/src/main/res/values/strings.xml @@ -473,4 +473,7 @@      <string name="section_uids_to_sign">User IDs to sign</string>      <string name="progress_re_adding_certs">Reapplying certificates</string> +    <!-- hints --> +    <string name="encrypt_content_edit_text_hint">Write message here to encrypt…</string> +  </resources> | 
