From c05441667e151dceb6f5874b290d70a53258061b Mon Sep 17 00:00:00 2001 From: Tim Bray Date: Fri, 7 Nov 2014 12:28:27 -0800 Subject: [PATCH 001/189] Moved from WebView to Spannables, some proof cleanup too --- .../operations/results/OperationResult.java | 9 + .../keychain/pgp/PgpDecryptVerify.java | 162 ++++++- .../service/KeychainIntentService.java | 135 +++++- .../keychain/ui/ViewKeyActivity.java | 6 + .../keychain/ui/ViewKeyTrustFragment.java | 443 ++++++++++++++++++ .../res/layout/view_key_trust_fragment.xml | 105 +++++ OpenKeychain/src/main/res/values/strings.xml | 48 ++ 7 files changed, 886 insertions(+), 22 deletions(-) create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java create mode 100644 OpenKeychain/src/main/res/layout/view_key_trust_fragment.xml diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java index dc45fabc3..70d999242 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java @@ -545,6 +545,15 @@ public abstract class OperationResult implements Parcelable { MSG_DC_TRAIL_UNKNOWN (LogLevel.DEBUG, R.string.msg_dc_trail_unknown), MSG_DC_UNLOCKING (LogLevel.INFO, R.string.msg_dc_unlocking), + // verify signed literal data + MSG_VL (LogLevel.INFO, R.string.msg_vl), + MSG_VL_ERROR_MISSING_SIGLIST (LogLevel.ERROR, R.string.msg_vl_error_no_siglist), + MSG_VL_ERROR_MISSING_LITERAL (LogLevel.ERROR, R.string.msg_vl_error_missing_literal), + MSG_VL_ERROR_MISSING_KEY (LogLevel.ERROR, R.string.msg_vl_error_wrong_key), + MSG_VL_CLEAR_SIGNATURE_CHECK (LogLevel.DEBUG, R.string.msg_vl_clear_signature_check), + MSG_VL_ERROR_INTEGRITY_CHECK (LogLevel.ERROR, R.string.msg_vl_error_integrity_check), + MSG_VL_OK (LogLevel.OK, R.string.msg_vl_ok), + // signencrypt MSG_SE_ASYMMETRIC (LogLevel.INFO, R.string.msg_se_asymmetric), MSG_SE_CLEARSIGN_ONLY (LogLevel.DEBUG, R.string.msg_se_clearsign_only), diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java index 4f086c2a6..4161f2928 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java @@ -48,6 +48,7 @@ import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.operations.BaseOperation; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; +import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult; @@ -83,6 +84,8 @@ public class PgpDecryptVerify extends BaseOperation { private Set mAllowedKeyIds; private boolean mDecryptMetadataOnly; private byte[] mDecryptedSessionKey; + private String mRequiredSignerFingerprint; + private boolean mSignedLiteralData; private PgpDecryptVerify(Builder builder) { super(builder.mContext, builder.mProviderHelper, builder.mProgressable); @@ -96,6 +99,8 @@ public class PgpDecryptVerify extends BaseOperation { this.mAllowedKeyIds = builder.mAllowedKeyIds; this.mDecryptMetadataOnly = builder.mDecryptMetadataOnly; this.mDecryptedSessionKey = builder.mDecryptedSessionKey; + this.mSignedLiteralData = builder.mSignedLiteralData; + this.mRequiredSignerFingerprint = builder.mRequiredSignerFingerprint; } public static class Builder { @@ -112,6 +117,8 @@ public class PgpDecryptVerify extends BaseOperation { private Set mAllowedKeyIds = null; private boolean mDecryptMetadataOnly = false; private byte[] mDecryptedSessionKey = null; + private String mRequiredSignerFingerprint = null; + private boolean mSignedLiteralData = false; public Builder(Context context, ProviderHelper providerHelper, Progressable progressable, @@ -123,6 +130,24 @@ public class PgpDecryptVerify extends BaseOperation { mOutStream = outStream; } + /** + * This is used when verifying signed literals to check that they are signed with + * the required key + */ + public Builder setRequiredSignerFingerprint(String fingerprint) { + mRequiredSignerFingerprint = fingerprint; + return this; + } + + /** + * This is to force a mode where the message is just the signature key id and + * then a literal data packet; used in Keybase.io proofs + */ + public Builder setSignedLiteralData(boolean signedLiteralData) { + mSignedLiteralData = signedLiteralData; + return this; + } + public Builder setAllowSymmetricDecryption(boolean allowSymmetricDecryption) { mAllowSymmetricDecryption = allowSymmetricDecryption; return this; @@ -174,7 +199,9 @@ public class PgpDecryptVerify extends BaseOperation { // it is ascii armored Log.d(Constants.TAG, "ASCII Armor Header Line: " + aIn.getArmorHeaderLine()); - if (aIn.isClearText()) { + if (mSignedLiteralData) { + return verifySignedLiteralData(aIn, 0); + } else if (aIn.isClearText()) { // a cleartext signature, verify it with the other method return verifyCleartextSignature(aIn, 0); } @@ -195,6 +222,139 @@ public class PgpDecryptVerify extends BaseOperation { } } + /** + * Verify Keybase.io style signed literal data + */ + private DecryptVerifyResult verifySignedLiteralData(InputStream in, int indent) throws IOException, PGPException { + OperationLog log = new OperationLog(); + log.add(LogType.MSG_VL, indent); + + // thinking that the proof-fetching operation is going to take most of the time + updateProgress(R.string.progress_reading_data, 75, 100); + + PGPObjectFactory pgpF = new PGPObjectFactory(in, new JcaKeyFingerprintCalculator()); + Object o = pgpF.nextObject(); + if (o instanceof PGPCompressedData) { + log.add(LogType.MSG_DC_CLEAR_DECOMPRESS, indent + 1); + + pgpF = new PGPObjectFactory(((PGPCompressedData) o).getDataStream(), new JcaKeyFingerprintCalculator()); + o = pgpF.nextObject(); + updateProgress(R.string.progress_decompressing_data, 80, 100); + } + + // all we want to see is a OnePassSignatureList followed by LiteralData + if (!(o instanceof PGPOnePassSignatureList)) { + log.add(LogType.MSG_VL_ERROR_MISSING_SIGLIST, indent); + return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); + } + PGPOnePassSignatureList sigList = (PGPOnePassSignatureList) o; + + // go through all signatures (should be just one), make sure we have + // the key and it matches the one we’re looking for + CanonicalizedPublicKeyRing signingRing = null; + CanonicalizedPublicKey signingKey = null; + int signatureIndex = -1; + for (int i = 0; i < sigList.size(); ++i) { + try { + long sigKeyId = sigList.get(i).getKeyID(); + signingRing = mProviderHelper.getCanonicalizedPublicKeyRing( + KeyRings.buildUnifiedKeyRingsFindBySubkeyUri(sigKeyId) + ); + signingKey = signingRing.getPublicKey(sigKeyId); + signatureIndex = i; + } catch (ProviderHelper.NotFoundException e) { + Log.d(Constants.TAG, "key not found, trying next signature..."); + } + } + + // there has to be a key, and it has to be the right one + if (signingKey == null) { + log.add(LogType.MSG_VL_ERROR_MISSING_KEY, indent); + Log.d(Constants.TAG, "Failed to find key in signed-literal message"); + return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); + } + + CanonicalizedPublicKey encryptKey = signingKey; + try { + encryptKey = signingRing.getEncryptionSubKey(); + } catch (PgpKeyNotFoundException e) { + } + String fingerprint = KeyFormattingUtils.convertFingerprintToHex(signingKey.getFingerprint()); + String cryptFingerprint = KeyFormattingUtils.convertFingerprintToHex(encryptKey.getFingerprint()); + if (!(mRequiredSignerFingerprint.equals(fingerprint) || mRequiredSignerFingerprint.equals(cryptFingerprint))) { + log.add(LogType.MSG_VL_ERROR_MISSING_KEY, indent); + Log.d(Constants.TAG, "Key mismatch; wanted " + mRequiredSignerFingerprint + + " got " + fingerprint + "/" + cryptFingerprint); + return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); + } + + OpenPgpSignatureResultBuilder signatureResultBuilder = new OpenPgpSignatureResultBuilder(); + + PGPOnePassSignature signature = sigList.get(signatureIndex); + signatureResultBuilder.initValid(signingRing, signingKey); + + JcaPGPContentVerifierBuilderProvider contentVerifierBuilderProvider = + new JcaPGPContentVerifierBuilderProvider() + .setProvider(Constants.BOUNCY_CASTLE_PROVIDER_NAME); + signature.init(contentVerifierBuilderProvider, signingKey.getPublicKey()); + + o = pgpF.nextObject(); + + if (!(o instanceof PGPLiteralData)) { + log.add(LogType.MSG_VL_ERROR_MISSING_LITERAL, indent); + return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); + } + + PGPLiteralData literalData = (PGPLiteralData) o; + + log.add(LogType.MSG_DC_CLEAR_DATA, indent + 1); + updateProgress(R.string.progress_decrypting, 85, 100); + + InputStream dataIn = literalData.getInputStream(); + + int length; + byte[] buffer = new byte[1 << 16]; + while ((length = dataIn.read(buffer)) > 0) { + mOutStream.write(buffer, 0, length); + signature.update(buffer, 0, length); + } + + updateProgress(R.string.progress_verifying_signature, 95, 100); + log.add(LogType.MSG_VL_CLEAR_SIGNATURE_CHECK, indent + 1); + + PGPSignatureList signatureList = (PGPSignatureList) pgpF.nextObject(); + PGPSignature messageSignature = signatureList.get(signatureIndex); + + // these are not cleartext signatures! + // TODO: what about binary signatures? + signatureResultBuilder.setSignatureOnly(false); + + // Verify signature and check binding signatures + boolean validSignature = signature.verify(messageSignature); + if (validSignature) { + log.add(LogType.MSG_DC_CLEAR_SIGNATURE_OK, indent + 1); + } else { + log.add(LogType.MSG_DC_CLEAR_SIGNATURE_BAD, indent + 1); + } + signatureResultBuilder.setValidSignature(validSignature); + + if (!signatureResultBuilder.isValidSignature()) { + log.add(LogType.MSG_VL_ERROR_INTEGRITY_CHECK, indent); + return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); + } + + updateProgress(R.string.progress_done, 100, 100); + + log.add(LogType.MSG_VL_OK, indent); + + // Return a positive result, with metadata and verification info + DecryptVerifyResult result = + new DecryptVerifyResult(DecryptVerifyResult.RESULT_OK, log); + result.setSignatureResult(signatureResultBuilder.build()); + return result; + } + + /** * Decrypt and/or verifies binary or ascii armored pgp */ 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 a2988f2b2..42e0c7cc9 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -26,55 +26,62 @@ import android.os.Message; import android.os.Messenger; import android.os.RemoteException; +import com.textuality.keybase.lib.Proof; +import com.textuality.keybase.lib.prover.Prover; + +import org.json.JSONObject; +import org.spongycastle.openpgp.PGPUtil; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; -import org.sufficientlysecure.keychain.operations.CertifyOperation; -import org.sufficientlysecure.keychain.operations.DeleteOperation; -import org.sufficientlysecure.keychain.operations.results.DeleteResult; -import org.sufficientlysecure.keychain.operations.results.ExportResult; -import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; -import org.sufficientlysecure.keychain.operations.results.CertifyResult; -import org.sufficientlysecure.keychain.util.FileHelper; -import org.sufficientlysecure.keychain.util.ParcelableFileCache.IteratorWithSize; -import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.keyimport.HkpKeyserver; import org.sufficientlysecure.keychain.keyimport.Keyserver; import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing; +import org.sufficientlysecure.keychain.operations.CertifyOperation; +import org.sufficientlysecure.keychain.operations.DeleteOperation; +import org.sufficientlysecure.keychain.operations.ImportExportOperation; +import org.sufficientlysecure.keychain.operations.results.CertifyResult; +import org.sufficientlysecure.keychain.operations.results.ConsolidateResult; +import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult; +import org.sufficientlysecure.keychain.operations.results.DeleteResult; +import org.sufficientlysecure.keychain.operations.results.EditKeyResult; +import org.sufficientlysecure.keychain.operations.results.ExportResult; +import org.sufficientlysecure.keychain.operations.results.ImportKeyResult; +import org.sufficientlysecure.keychain.operations.results.OperationResult; +import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; +import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; +import org.sufficientlysecure.keychain.operations.results.SaveKeyringResult; +import org.sufficientlysecure.keychain.operations.results.SignEncryptResult; import org.sufficientlysecure.keychain.pgp.CanonicalizedPublicKeyRing; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKeyRing; import org.sufficientlysecure.keychain.pgp.PgpDecryptVerify; -import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult; import org.sufficientlysecure.keychain.pgp.PgpHelper; -import org.sufficientlysecure.keychain.operations.ImportExportOperation; import org.sufficientlysecure.keychain.pgp.PgpKeyOperation; import org.sufficientlysecure.keychain.pgp.PgpSignEncrypt; import org.sufficientlysecure.keychain.pgp.Progressable; import org.sufficientlysecure.keychain.pgp.UncachedKeyRing; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralMsgIdException; +import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing; import org.sufficientlysecure.keychain.provider.ProviderHelper; -import org.sufficientlysecure.keychain.operations.results.OperationResult; -import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; -import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; -import org.sufficientlysecure.keychain.operations.results.ConsolidateResult; -import org.sufficientlysecure.keychain.operations.results.EditKeyResult; -import org.sufficientlysecure.keychain.operations.results.ImportKeyResult; -import org.sufficientlysecure.keychain.operations.results.SaveKeyringResult; -import org.sufficientlysecure.keychain.operations.results.SignEncryptResult; -import org.sufficientlysecure.keychain.util.ParcelableFileCache; +import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.Log; +import org.sufficientlysecure.keychain.util.ParcelableFileCache; +import org.sufficientlysecure.keychain.util.ParcelableFileCache.IteratorWithSize; +import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.ProgressScaler; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; +import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; /** @@ -93,6 +100,8 @@ public class KeychainIntentService extends IntentService implements Progressable public static final String ACTION_DECRYPT_VERIFY = Constants.INTENT_PREFIX + "DECRYPT_VERIFY"; + public static final String ACTION_VERIFY_KEYBASE_PROOF = Constants.INTENT_PREFIX + "VERIFY_KEYBASE_PROOF"; + public static final String ACTION_DECRYPT_METADATA = Constants.INTENT_PREFIX + "DECRYPT_METADATA"; public static final String ACTION_EDIT_KEYRING = Constants.INTENT_PREFIX + "EDIT_KEYRING"; @@ -142,6 +151,10 @@ public class KeychainIntentService extends IntentService implements Progressable public static final String DECRYPT_PASSPHRASE = "passphrase"; public static final String DECRYPT_NFC_DECRYPTED_SESSION_KEY = "nfc_decrypted_session_key"; + // keybase proof + public static final String KEYBASE_REQUIRED_FINGERPRINT = "keybase_required_fingerprint"; + public static final String KEYBASE_PROOF = "keybase_proof"; + // save keyring public static final String EDIT_KEYRING_PARCEL = "save_parcel"; public static final String EDIT_KEYRING_PASSPHRASE = "passphrase"; @@ -291,6 +304,72 @@ public class KeychainIntentService extends IntentService implements Progressable sendErrorToHandler(e); } + } else if (ACTION_VERIFY_KEYBASE_PROOF.equals(action)) { + try { + Proof proof = new Proof(new JSONObject(data.getString(KEYBASE_PROOF))); + setProgress(R.string.keybase_message_fetching_data, 0, 100); + + Prover prover = Prover.findProverFor(proof); + + if (prover == null) { + sendProofError(getString(R.string.keybase_no_prover_found) + ": " + proof.getPrettyName()); + return; + } + + if (!prover.fetchProofData()) { + sendProofError(prover.getLog(), getString(R.string.keybase_problem_fetching_evidence)); + return; + } + + byte[] messageBytes = prover.getPgpMessage().getBytes(); + if (prover.rawMessageCheckRequired()) { + InputStream messageByteStream = PGPUtil.getDecoderStream(new ByteArrayInputStream(messageBytes)); + String problem = prover.checkRawMessageBytes(messageByteStream); + if (problem != null) { + sendProofError(prover.getLog(), problem); + return; + } + } + + // kind of awkward, but this whole class wants to pull bytes out of “data” + data.putInt(KeychainIntentService.TARGET, KeychainIntentService.IO_BYTES); + data.putByteArray(KeychainIntentService.DECRYPT_CIPHERTEXT_BYTES, messageBytes); + + InputData inputData = createDecryptInputData(data); + OutputStream outStream = createCryptOutputStream(data); + String fingerprint = data.getString(KEYBASE_REQUIRED_FINGERPRINT); + + PgpDecryptVerify.Builder builder = new PgpDecryptVerify.Builder( + this, new ProviderHelper(this), this, + inputData, outStream + ); + builder.setSignedLiteralData(true).setRequiredSignerFingerprint(fingerprint); + + DecryptVerifyResult decryptVerifyResult = builder.build().execute(); + outStream.close(); + + if (!decryptVerifyResult.success()) { + OperationLog log = decryptVerifyResult.getLog(); + OperationResult.LogEntryParcel lastEntry = null; + for (OperationResult.LogEntryParcel entry : log) { + lastEntry = entry; + } + sendProofError(getString(lastEntry.mType.getMsgId())); + return; + } + + if (!prover.validate(outStream.toString())) { + sendProofError(getString(R.string.keybase_message_payload_mismatch)); + return; + } + + Bundle resultData = new Bundle(); + resultData.putString(KeychainIntentServiceHandler.DATA_MESSAGE, "OK"); + sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, resultData); + } catch (Exception e) { + sendErrorToHandler(e); + } + } else if (ACTION_DECRYPT_VERIFY.equals(action)) { try { @@ -597,6 +676,21 @@ public class KeychainIntentService extends IntentService implements Progressable } + private void sendProofError(List log, String label) { + String msg = null; + for (String m : log) { + Log.e(Constants.TAG, label + ": " + m); + msg = m; + } + sendProofError(label + ": " + msg); + } + + private void sendProofError(String msg) { + Bundle bundle = new Bundle(); + bundle.putString(KeychainIntentServiceHandler.DATA_ERROR, msg); + sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, bundle); + } + private void sendErrorToHandler(Exception e) { // TODO: Implement a better exception handling here // contextualize the exception, if necessary @@ -607,7 +701,6 @@ public class KeychainIntentService extends IntentService implements Progressable } else { message = e.getMessage(); } - Log.d(Constants.TAG, "KeychainIntentService Exception: ", e); Bundle data = new Bundle(); 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 0bc75b3a9..a7ba4accf 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java @@ -78,6 +78,7 @@ public class ViewKeyActivity extends ActionBarActivity implements public static final String EXTRA_SELECTED_TAB = "selected_tab"; public static final int TAB_MAIN = 0; public static final int TAB_SHARE = 1; + public static final int TAB_TRUST = 2; // view private ViewPager mViewPager; @@ -183,6 +184,11 @@ public class ViewKeyActivity extends ActionBarActivity implements mTabsAdapter.addTab(ViewKeyShareFragment.class, shareBundle, getString(R.string.key_view_tab_share)); + Bundle trustBundle = new Bundle(); + trustBundle.putParcelable(ViewKeyMainFragment.ARG_DATA_URI, dataUri); + mTabsAdapter.addTab(ViewKeyTrustFragment.class, trustBundle, + getString(R.string.key_view_tab_trust)); + // update layout after operations mSlidingTabLayout.setViewPager(mViewPager); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java new file mode 100644 index 000000000..ef6cd50f1 --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java @@ -0,0 +1,443 @@ +/* + * Copyright (C) 2014 Tim Bray + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.sufficientlysecure.keychain.ui; + +import android.app.ProgressDialog; +import android.content.Intent; +import android.database.Cursor; +import android.graphics.Typeface; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Message; +import android.os.Messenger; +import android.support.v4.app.LoaderManager; +import android.support.v4.content.CursorLoader; +import android.support.v4.content.Loader; +import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.text.method.LinkMovementMethod; +import android.text.style.ClickableSpan; +import android.text.style.StyleSpan; +import android.text.style.URLSpan; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TableLayout; +import android.widget.TableRow; +import android.widget.TextView; + +import com.textuality.keybase.lib.KeybaseException; +import com.textuality.keybase.lib.Proof; +import com.textuality.keybase.lib.User; + +import org.sufficientlysecure.keychain.Constants; +import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; +import org.sufficientlysecure.keychain.service.KeychainIntentService; +import org.sufficientlysecure.keychain.service.KeychainIntentServiceHandler; +import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; +import org.sufficientlysecure.keychain.util.Log; + +import java.util.ArrayList; +import java.util.Date; +import java.util.Hashtable; +import java.util.List; + +public class ViewKeyTrustFragment extends LoaderFragment implements + LoaderManager.LoaderCallbacks { + + private View mStartSearch; + private TextView mTrustReadout; + private TextView mReportHeader; + private TableLayout mProofListing; + private LayoutInflater mInflater; + private View mProofVerifyHeader; + private TextView mProofVerifyDetail; + + private static final int LOADER_ID_DATABASE = 1; + + // for retrieving the key we’re working on + private Uri mDataUri; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup superContainer, Bundle savedInstanceState) { + View root = super.onCreateView(inflater, superContainer, savedInstanceState); + View view = inflater.inflate(R.layout.view_key_trust_fragment, getContainer()); + mInflater = inflater; + + mTrustReadout = (TextView) view.findViewById(R.id.view_key_trust_readout); + mStartSearch = view.findViewById(R.id.view_key_trust_search_cloud); + mStartSearch.setEnabled(false); + mReportHeader = (TextView) view.findViewById(R.id.view_key_trust_cloud_narrative); + mProofListing = (TableLayout) view.findViewById(R.id.view_key_proof_list); + mProofVerifyHeader = view.findViewById(R.id.view_key_proof_verify_header); + mProofVerifyDetail = (TextView) view.findViewById(R.id.view_key_proof_verify_detail); + mReportHeader.setVisibility(View.GONE); + mProofListing.setVisibility(View.GONE); + mProofVerifyHeader.setVisibility(View.GONE); + mProofVerifyDetail.setVisibility(View.GONE); + + return root; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + Uri dataUri = getArguments().getParcelable(ViewKeyMainFragment.ARG_DATA_URI); + if (dataUri == null) { + Log.e(Constants.TAG, "Data missing. Should be Uri of key!"); + getActivity().finish(); + return; + } + mDataUri = dataUri; + + // retrieve the key from the database + getLoaderManager().initLoader(LOADER_ID_DATABASE, null, this); + } + + static final String[] TRUST_PROJECTION = new String[]{ + KeyRings._ID, KeyRings.FINGERPRINT, KeyRings.IS_REVOKED, KeyRings.EXPIRY, + KeyRings.HAS_ANY_SECRET, KeyRings.VERIFIED + }; + static final int INDEX_TRUST_FINGERPRINT = 1; + static final int INDEX_TRUST_IS_REVOKED = 2; + static final int INDEX_TRUST_EXPIRY = 3; + static final int INDEX_UNIFIED_HAS_ANY_SECRET = 4; + static final int INDEX_VERIFIED = 5; + + public Loader onCreateLoader(int id, Bundle args) { + setContentShown(false); + + switch (id) { + case LOADER_ID_DATABASE: { + Uri baseUri = KeyRings.buildUnifiedKeyRingUri(mDataUri); + return new CursorLoader(getActivity(), baseUri, TRUST_PROJECTION, null, null, null); + } + // decided to just use an AsyncTask for keybase, but maybe later + default: + return null; + } + } + + public void onLoadFinished(Loader loader, Cursor data) { + /* TODO better error handling? May cause problems when a key is deleted, + * because the notification triggers faster than the activity closes. + */ + // Avoid NullPointerExceptions... + if (data.getCount() == 0) { + return; + } + + boolean nothingSpecial = true; + StringBuilder message = new StringBuilder(); + + // Swap the new cursor in. (The framework will take care of closing the + // old cursor once we return.) + if (data.moveToFirst()) { + + if (data.getInt(INDEX_UNIFIED_HAS_ANY_SECRET) != 0) { + message.append(getString(R.string.key_trust_it_is_yours)).append("\n"); + nothingSpecial = false; + } else if (data.getInt(INDEX_VERIFIED) != 0) { + message.append(getString(R.string.key_trust_already_verified)).append("\n"); + nothingSpecial = false; + } + + // If this key is revoked, don’t trust it! + if (data.getInt(INDEX_TRUST_IS_REVOKED) != 0) { + message.append(getString(R.string.key_trust_revoked)). + append(getString(R.string.key_trust_old_keys)); + + nothingSpecial = false; + } else { + Date expiryDate = new Date(data.getLong(INDEX_TRUST_EXPIRY) * 1000); + if (!data.isNull(INDEX_TRUST_EXPIRY) && expiryDate.before(new Date())) { + + // if expired, don’t trust it! + message.append(getString(R.string.key_trust_expired)). + append(getString(R.string.key_trust_old_keys)); + + nothingSpecial = false; + } + } + + if (nothingSpecial) { + message.append(getString(R.string.key_trust_maybe)); + } + + final byte[] fp = data.getBlob(INDEX_TRUST_FINGERPRINT); + final String fingerprint = KeyFormattingUtils.convertFingerprintToHex(fp); + if (fingerprint != null) { + + mStartSearch.setEnabled(true); + mStartSearch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new DescribeKey().execute(fingerprint); + } + }); + } + } + + mTrustReadout.setText(message); + setContentShown(true); + } + + /** + * This is called when the last Cursor provided to onLoadFinished() above is about to be closed. + * We need to make sure we are no longer using it. + */ + public void onLoaderReset(Loader loader) { + // no-op in this case I think + } + + class ResultPage { + String mHeader; + final List mProofs; + + public ResultPage(String header, List proofs) { + mHeader = header; + mProofs = proofs; + } + } + + // look for evidence from keybase in the background, make tabular version of result + // + private class DescribeKey extends AsyncTask { + + @Override + protected ResultPage doInBackground(String... args) { + String fingerprint = args[0]; + + final ArrayList proofList = new ArrayList(); + final Hashtable> proofs = new Hashtable>(); + try { + User keybaseUser = User.findByFingerprint(fingerprint); + for (Proof proof : keybaseUser.getProofs()) { + Integer proofType = proof.getType(); + appendIfOK(proofs, proofType, proof); + } + + // a one-liner in a modern programming language + for (Integer proofType : proofs.keySet()) { + Proof[] x = {}; + Proof[] proofsFor = proofs.get(proofType).toArray(x); + if (proofsFor.length > 0) { + SpannableStringBuilder ssb = new SpannableStringBuilder(); + ssb.append(getProofNarrative(proofType)).append(" "); + + int i = 0; + while (i < proofsFor.length - 1) { + appendProofLinks(ssb, fingerprint, proofsFor[i]); + ssb.append(", "); + i++; + } + appendProofLinks(ssb, fingerprint, proofsFor[i]); + proofList.add(ssb); + } + } + + } catch (KeybaseException ignored) { + } + + return new ResultPage(getString(R.string.key_trust_results_prefix), proofList); + } + + private SpannableStringBuilder appendProofLinks(SpannableStringBuilder ssb, final String fingerprint, final Proof proof) throws KeybaseException { + int startAt = ssb.length(); + String handle = proof.getHandle(); + ssb.append(handle); + ssb.setSpan(new URLSpan(proof.getServiceUrl()), startAt, startAt + handle.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + if (haveProofFor(proof.getType())) { + ssb.append("\u00a0["); + startAt = ssb.length(); + ssb.append("Verify"); + ClickableSpan clicker = new ClickableSpan() { + @Override + public void onClick(View view) { + verify(proof, fingerprint); + } + }; + ssb.setSpan(clicker, startAt, startAt + "Verify".length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ssb.append("]"); + } + return ssb; + } + + @Override + protected void onPostExecute(ResultPage result) { + super.onPostExecute(result); + if (result.mHeader == null) { + result.mHeader = getActivity().getString(R.string.key_trust_no_cloud_evidence); + } + + mStartSearch.setVisibility(View.GONE); + mReportHeader.setVisibility(View.VISIBLE); + mProofListing.setVisibility(View.VISIBLE); + mReportHeader.setText(result.mHeader); + + int rowNumber = 1; + for (CharSequence s : result.mProofs) { + TableRow row = (TableRow) mInflater.inflate(R.layout.view_key_keybase_proof, null); + TextView number = (TextView) row.findViewById(R.id.proof_number); + TextView text = (TextView) row.findViewById(R.id.proof_text); + number.setText(Integer.toString(rowNumber++) + ". "); + text.setText(s); + text.setMovementMethod(LinkMovementMethod.getInstance()); + mProofListing.addView(row); + } + + // mSearchReport.loadDataWithBaseURL("file:///android_res/drawable/", s, "text/html", "UTF-8", null); + } + } + + private String getProofNarrative(int proofType) { + int stringIndex; + switch (proofType) { + case Proof.PROOF_TYPE_TWITTER: stringIndex = R.string.keybase_narrative_twitter; break; + case Proof.PROOF_TYPE_GITHUB: stringIndex = R.string.keybase_narrative_github; break; + case Proof.PROOF_TYPE_DNS: stringIndex = R.string.keybase_narrative_dns; break; + case Proof.PROOF_TYPE_WEB_SITE: stringIndex = R.string.keybase_narrative_web_site; break; + case Proof.PROOF_TYPE_HACKERNEWS: stringIndex = R.string.keybase_narrative_hackernews; break; + case Proof.PROOF_TYPE_COINBASE: stringIndex = R.string.keybase_narrative_coinbase; break; + case Proof.PROOF_TYPE_REDDIT: stringIndex = R.string.keybase_narrative_reddit; break; + default: stringIndex = R.string.keybase_narrative_unknown; + } + return getActivity().getString(stringIndex); + } + + private void appendIfOK(Hashtable> table, Integer proofType, Proof proof) throws KeybaseException { + if (!proofIsOK(proof)) { + return; + } + ArrayList list = table.get(proofType); + if (list == null) { + list = new ArrayList(); + table.put(proofType, list); + } + list.add(proof); + } + + // We only accept http & https proofs. Maybe whitelist later? + private boolean proofIsOK(Proof proof) throws KeybaseException { + Uri uri = Uri.parse(proof.getServiceUrl()); + String scheme = uri.getScheme(); + return ("https".equalsIgnoreCase(scheme) || "http".equalsIgnoreCase(scheme)); + } + + // which proofs do we have working verifiers for? + private boolean haveProofFor(int proofType) { + switch (proofType) { + case Proof.PROOF_TYPE_TWITTER: return true; + case Proof.PROOF_TYPE_GITHUB: return true; + case Proof.PROOF_TYPE_DNS: return false; + case Proof.PROOF_TYPE_WEB_SITE: return true; + case Proof.PROOF_TYPE_HACKERNEWS: return true; + case Proof.PROOF_TYPE_COINBASE: return false; + case Proof.PROOF_TYPE_REDDIT: return false; + default: return false; + } + } + + private void verify(final Proof proof, final String fingerprint) { + Intent intent = new Intent(getActivity(), KeychainIntentService.class); + Bundle data = new Bundle(); + intent.setAction(KeychainIntentService.ACTION_VERIFY_KEYBASE_PROOF); + + data.putString(KeychainIntentService.KEYBASE_PROOF, proof.toString()); + data.putString(KeychainIntentService.KEYBASE_REQUIRED_FINGERPRINT, fingerprint); + intent.putExtra(KeychainIntentService.EXTRA_DATA, data); + + mProofVerifyDetail.setVisibility(View.GONE); + + // Create a new Messenger for the communication back after proof work is done + // + KeychainIntentServiceHandler handler = new KeychainIntentServiceHandler(getActivity(), + getString(R.string.progress_decrypting), ProgressDialog.STYLE_HORIZONTAL) { + public void handleMessage(Message message) { + // handle messages by standard KeychainIntentServiceHandler first + super.handleMessage(message); + + if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) { + Bundle returnData = message.getData(); + String msg = returnData.getString(KeychainIntentServiceHandler.DATA_MESSAGE); + SpannableStringBuilder ssb = new SpannableStringBuilder(); + + if ((msg != null) && msg.equals("OK")) { + //yay + String serviceUrl, urlLabel, postUrl; + try { + serviceUrl = proof.getServiceUrl(); + if (serviceUrl.startsWith("https://")) { + urlLabel = serviceUrl.substring("https://".length()); + } else if (serviceUrl.startsWith("http://")) { + urlLabel = serviceUrl.substring("http://".length()); + } else { + urlLabel = serviceUrl; + } + postUrl = proof.getHumanUrl(); + + } catch (KeybaseException e) { + throw new RuntimeException(e); + } + ssb.append(getString(R.string.keybase_proof_succeeded)); + StyleSpan bold = new StyleSpan(Typeface.BOLD); + ssb.setSpan(bold, 0, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ssb.append("\n\n"); + int length = ssb.length(); + String segment = getString(R.string.keybase_a_post); + ssb.append(segment); + URLSpan postLink = new URLSpan(postUrl); + ssb.setSpan(postLink, length, length + segment.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ssb.append(" ").append(getString(R.string.keybase_fetched_from)).append(" "); + URLSpan serviceLink = new URLSpan(serviceUrl); + length = ssb.length(); + ssb.append(urlLabel); + ssb.setSpan(serviceLink, length, length + urlLabel.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ssb.append(" ").append(getString(R.string.keybase_contained_signature)); + + } else { + msg = returnData.getString(KeychainIntentServiceHandler.DATA_ERROR); + ssb.append(getString(R.string.keybase_proof_failure)); + if (msg == null) { + msg = getString(R.string.keybase_unknown_proof_failure); + StyleSpan bold = new StyleSpan(Typeface.BOLD); + ssb.setSpan(bold, 0, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ssb.append("\n\n").append(msg); + } + } + mProofVerifyHeader.setVisibility(View.VISIBLE); + mProofVerifyDetail.setVisibility(View.VISIBLE); + mProofVerifyDetail.setText(ssb); + } + } + }; + + // Create a new Messenger for the communication back + Messenger messenger = new Messenger(handler); + intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger); + + // show progress dialog + handler.showProgressDialog(getActivity()); + + // start service with intent + getActivity().startService(intent); + } +} diff --git a/OpenKeychain/src/main/res/layout/view_key_trust_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_trust_fragment.xml new file mode 100644 index 000000000..f97401271 --- /dev/null +++ b/OpenKeychain/src/main/res/layout/view_key_trust_fragment.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index e2b92d875..f582bd746 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -44,6 +44,9 @@ "Identities" + "Should you trust this key?" + Proof verification + "Evidence from the cloud" "Subkeys" "Cloud search" "General" @@ -525,6 +528,7 @@ "Share" "Subkeys" "Certificates" + "Trust this key?" "Revoked" "This identity has been revoked by the key owner. It is no longer valid." "Certified" @@ -534,6 +538,37 @@ "Invalid" "Something is wrong with this identity!" + + "You have already certified this key!" + "This is one of your keys!" + "This key is neither revoked nor expired.\nYou haven’t certified it, but you may choose to trust it." + "This key has been revoked by its owner. You should not trust it." + "This key has expired. You should not trust it." + " It may be OK to use this to decrypt an old message dating from the time when this key was valid." + "No evidence from the cloud on this key’s trustworthiness." + "Start search" + "Keybase.io offers “proofs” which assert that the owner of this key: " + + + "Posts to Twitter as" + "Is known on GitHub as" + "Controls the domain name(s)" + "Can post to the Web site(s)" + "Posts to Reddit as" + "Is known on Coinbase as" + "Posts to Hacker News as" + "Unknown proof type" + "Unfortunately this proof cannot be verified." + "Unrecognized problem with proof checker" + "Problem with proof evidence" + "No proof checker found for" + "Decrypted proof post does not match expected value" + "Fetching proof evidence" + "This proof has been verified!" + "A post" + "fetched from" + "contains a message which could only have been created by the owner of this key." + "Change Passphrase" "Add Identity" @@ -894,6 +929,19 @@ "Encountered trailing data of unknown type" "Unlocking secret key" + + "Starting signature check" + "No signature list in signed literal data" + "Message not signed with right key" + "No payload in signed literal data" + "Filename: %s" + "MIME type: %s" + "Modification time: %s" + "Filesize: %s" + "Verifying signature data" + "Integrity check error!" + "OK" + "Preparing public keys for encryption" "Signing of cleartext input not supported!" From 4929e346a2ec2a2e046162d4e7b0870b54c17747 Mon Sep 17 00:00:00 2001 From: Tim Bray Date: Fri, 7 Nov 2014 12:29:17 -0800 Subject: [PATCH 002/189] XML fragment for proof listing --- .../res/layout/view_key_keybase_proof.xml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 OpenKeychain/src/main/res/layout/view_key_keybase_proof.xml diff --git a/OpenKeychain/src/main/res/layout/view_key_keybase_proof.xml b/OpenKeychain/src/main/res/layout/view_key_keybase_proof.xml new file mode 100644 index 000000000..0ffd151c1 --- /dev/null +++ b/OpenKeychain/src/main/res/layout/view_key_keybase_proof.xml @@ -0,0 +1,19 @@ + + + + + + From 3c19e6cfc12f6b24cf202aaaf9ad3e14223161d3 Mon Sep 17 00:00:00 2001 From: Tim Bray Date: Fri, 7 Nov 2014 21:07:10 -0800 Subject: [PATCH 003/189] Fix a no-result corner case, and make verifications clickable --- .../sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java index ef6cd50f1..540dcc0b1 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java @@ -284,7 +284,7 @@ public class ViewKeyTrustFragment extends LoaderFragment implements @Override protected void onPostExecute(ResultPage result) { super.onPostExecute(result); - if (result.mHeader == null) { + if (result.mProofs.isEmpty()) { result.mHeader = getActivity().getString(R.string.key_trust_no_cloud_evidence); } @@ -425,6 +425,7 @@ public class ViewKeyTrustFragment extends LoaderFragment implements } mProofVerifyHeader.setVisibility(View.VISIBLE); mProofVerifyDetail.setVisibility(View.VISIBLE); + mProofVerifyDetail.setMovementMethod(LinkMovementMethod.getInstance()); mProofVerifyDetail.setText(ssb); } } From 36bac67dd5f19b72a58584f2fab104e6e26df66a Mon Sep 17 00:00:00 2001 From: Tim Bray Date: Tue, 11 Nov 2014 18:45:36 -0800 Subject: [PATCH 004/189] All keybase proofs now in place --- .../service/KeychainIntentService.java | 38 ++++++-- .../service/KeychainIntentServiceHandler.java | 5 ++ .../keychain/ui/ViewKeyTrustFragment.java | 90 +++++++++++-------- OpenKeychain/src/main/res/values/strings.xml | 7 ++ 4 files changed, 96 insertions(+), 44 deletions(-) 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 42e0c7cc9..8a670df25 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -84,6 +84,12 @@ import java.util.Iterator; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; +import de.measite.minidns.Client; +import de.measite.minidns.Question; +import de.measite.minidns.Record; +import de.measite.minidns.record.Data; +import de.measite.minidns.record.TXT; + /** * This Service contains all important long lasting operations for APG. It receives Intents with * data from the activities or other apps, queues these intents, executes them, and stops itself @@ -124,6 +130,7 @@ public class KeychainIntentService extends IntentService implements Progressable // encrypt, decrypt, import export public static final String TARGET = "target"; public static final String SOURCE = "source"; + // possible targets: public static final int IO_BYTES = 1; public static final int IO_URI = 2; @@ -321,12 +328,27 @@ public class KeychainIntentService extends IntentService implements Progressable return; } + String domain = prover.dnsTxtCheckRequired(); + if (domain != null) { + Record[] records = new Client().query(new Question(domain, Record.TYPE.TXT)).getAnswers(); + List> extents = new ArrayList>(); + for (Record r : records) { + Data d = r.getPayload(); + if (d instanceof TXT) { + extents.add(((TXT) d).getExtents()); + } + } + if (!prover.checkDnsTxt(extents)) { + sendProofError(prover.getLog(), null); + return; + } + } + byte[] messageBytes = prover.getPgpMessage().getBytes(); if (prover.rawMessageCheckRequired()) { InputStream messageByteStream = PGPUtil.getDecoderStream(new ByteArrayInputStream(messageBytes)); - String problem = prover.checkRawMessageBytes(messageByteStream); - if (problem != null) { - sendProofError(prover.getLog(), problem); + if (!prover.checkRawMessageBytes(messageByteStream)) { + sendProofError(prover.getLog(), null); return; } } @@ -365,6 +387,11 @@ public class KeychainIntentService extends IntentService implements Progressable Bundle resultData = new Bundle(); resultData.putString(KeychainIntentServiceHandler.DATA_MESSAGE, "OK"); + + // these help the handler construct a useful human-readable message + resultData.putString(KeychainIntentServiceHandler.KEYBASE_PROOF_URL, prover.getProofUrl()); + resultData.putString(KeychainIntentServiceHandler.KEYBASE_PRESENCE_URL, prover.getPresenceUrl()); + resultData.putString(KeychainIntentServiceHandler.KEYBASE_PRESENCE_LABEL, prover.getPresenceLabel()); sendMessageToHandler(KeychainIntentServiceHandler.MESSAGE_OKAY, resultData); } catch (Exception e) { sendErrorToHandler(e); @@ -678,11 +705,12 @@ public class KeychainIntentService extends IntentService implements Progressable private void sendProofError(List log, String label) { String msg = null; + label = (label == null) ? "" : label + ": "; for (String m : log) { - Log.e(Constants.TAG, label + ": " + m); + Log.e(Constants.TAG, label + m); msg = m; } - sendProofError(label + ": " + msg); + sendProofError(label + msg); } private void sendProofError(String msg) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java index 180020d0b..fc65757f5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentServiceHandler.java @@ -45,6 +45,11 @@ public class KeychainIntentServiceHandler extends Handler { public static final String DATA_MESSAGE = "message"; public static final String DATA_MESSAGE_ID = "message_id"; + // keybase proof specific + public static final String KEYBASE_PROOF_URL = "keybase_proof_url"; + public static final String KEYBASE_PRESENCE_URL = "keybase_presence_url"; + public static final String KEYBASE_PRESENCE_LABEL = "keybase_presence_label"; + Activity mActivity; ProgressDialogFragment mProgressDialogFragment; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java index 540dcc0b1..4965b2525 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java @@ -324,9 +324,6 @@ public class ViewKeyTrustFragment extends LoaderFragment implements } private void appendIfOK(Hashtable> table, Integer proofType, Proof proof) throws KeybaseException { - if (!proofIsOK(proof)) { - return; - } ArrayList list = table.get(proofType); if (list == null) { list = new ArrayList(); @@ -335,23 +332,16 @@ public class ViewKeyTrustFragment extends LoaderFragment implements list.add(proof); } - // We only accept http & https proofs. Maybe whitelist later? - private boolean proofIsOK(Proof proof) throws KeybaseException { - Uri uri = Uri.parse(proof.getServiceUrl()); - String scheme = uri.getScheme(); - return ("https".equalsIgnoreCase(scheme) || "http".equalsIgnoreCase(scheme)); - } - // which proofs do we have working verifiers for? private boolean haveProofFor(int proofType) { switch (proofType) { case Proof.PROOF_TYPE_TWITTER: return true; case Proof.PROOF_TYPE_GITHUB: return true; - case Proof.PROOF_TYPE_DNS: return false; + case Proof.PROOF_TYPE_DNS: return true; case Proof.PROOF_TYPE_WEB_SITE: return true; case Proof.PROOF_TYPE_HACKERNEWS: return true; - case Proof.PROOF_TYPE_COINBASE: return false; - case Proof.PROOF_TYPE_REDDIT: return false; + case Proof.PROOF_TYPE_COINBASE: return true; + case Proof.PROOF_TYPE_REDDIT: return true; default: return false; } } @@ -381,47 +371,69 @@ public class ViewKeyTrustFragment extends LoaderFragment implements SpannableStringBuilder ssb = new SpannableStringBuilder(); if ((msg != null) && msg.equals("OK")) { - //yay - String serviceUrl, urlLabel, postUrl; - try { - serviceUrl = proof.getServiceUrl(); - if (serviceUrl.startsWith("https://")) { - urlLabel = serviceUrl.substring("https://".length()); - } else if (serviceUrl.startsWith("http://")) { - urlLabel = serviceUrl.substring("http://".length()); - } else { - urlLabel = serviceUrl; - } - postUrl = proof.getHumanUrl(); - } catch (KeybaseException e) { - throw new RuntimeException(e); + //yay + String proofUrl = returnData.getString(KeychainIntentServiceHandler.KEYBASE_PROOF_URL); + String presenceUrl = returnData.getString(KeychainIntentServiceHandler.KEYBASE_PRESENCE_URL); + String presenceLabel = returnData.getString(KeychainIntentServiceHandler.KEYBASE_PRESENCE_LABEL); + + String proofLabel; + switch (proof.getType()) { + case Proof.PROOF_TYPE_TWITTER: + proofLabel = getString(R.string.keybase_twitter_proof); + break; + case Proof.PROOF_TYPE_DNS: + proofLabel = getString(R.string.keybase_dns_proof); + break; + case Proof.PROOF_TYPE_WEB_SITE: + proofLabel = getString(R.string.keybase_web_site_proof); + break; + case Proof.PROOF_TYPE_GITHUB: + proofLabel = getString(R.string.keybase_github_proof); + break; + case Proof.PROOF_TYPE_REDDIT: + proofLabel = getString(R.string.keybase_reddit_proof); + break; + default: + proofLabel = getString(R.string.keybase_a_post); + break; } + ssb.append(getString(R.string.keybase_proof_succeeded)); StyleSpan bold = new StyleSpan(Typeface.BOLD); ssb.setSpan(bold, 0, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ssb.append("\n\n"); int length = ssb.length(); - String segment = getString(R.string.keybase_a_post); - ssb.append(segment); - URLSpan postLink = new URLSpan(postUrl); - ssb.setSpan(postLink, length, length + segment.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - ssb.append(" ").append(getString(R.string.keybase_fetched_from)).append(" "); - URLSpan serviceLink = new URLSpan(serviceUrl); + ssb.append(proofLabel); + if (proofUrl != null) { + URLSpan postLink = new URLSpan(proofUrl); + ssb.setSpan(postLink, length, length + proofLabel.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + if (Proof.PROOF_TYPE_DNS == proof.getType()) { + ssb.append(" ").append(getString(R.string.keybase_for_the_domain)).append(" "); + } else { + ssb.append(" ").append(getString(R.string.keybase_fetched_from)).append(" "); + } length = ssb.length(); - ssb.append(urlLabel); - ssb.setSpan(serviceLink, length, length + urlLabel.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + URLSpan presenceLink = new URLSpan(presenceUrl); + ssb.append(presenceLabel); + ssb.setSpan(presenceLink, length, length + presenceLabel.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + if (Proof.PROOF_TYPE_REDDIT == proof.getType()) { + ssb.append(", "). + append(getString(R.string.keybase_reddit_attribution)). + append(" “").append(proof.getHandle()).append("”, "); + } ssb.append(" ").append(getString(R.string.keybase_contained_signature)); - } else { + // verification failed! msg = returnData.getString(KeychainIntentServiceHandler.DATA_ERROR); ssb.append(getString(R.string.keybase_proof_failure)); if (msg == null) { msg = getString(R.string.keybase_unknown_proof_failure); - StyleSpan bold = new StyleSpan(Typeface.BOLD); - ssb.setSpan(bold, 0, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - ssb.append("\n\n").append(msg); } + StyleSpan bold = new StyleSpan(Typeface.BOLD); + ssb.setSpan(bold, 0, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ssb.append("\n\n").append(msg); } mProofVerifyHeader.setVisibility(View.VISIBLE); mProofVerifyDetail.setVisibility(View.VISIBLE); diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index f582bd746..9596cccc1 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -567,7 +567,14 @@ "This proof has been verified!" "A post" "fetched from" + "for the domain" "contains a message which could only have been created by the owner of this key." + "A tweet" + "A DNS TXT record" + "A text file" + "A gist" + "A JSON file" + "attributed by Reddit to" "Change Passphrase" From ebd3876cbe91aa0514dab2f2ad34e7ec3cac354c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 18 Nov 2014 18:57:28 +0100 Subject: [PATCH 005/189] Update libs --- extern/KeybaseLib | 2 +- extern/minidns | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extern/KeybaseLib b/extern/KeybaseLib index 70c2f33e2..7f4980f07 160000 --- a/extern/KeybaseLib +++ b/extern/KeybaseLib @@ -1 +1 @@ -Subproject commit 70c2f33e26d3988a23524935810bcfe754b85a6f +Subproject commit 7f4980f0789d7bb3c2124080f32b3bec703c576e diff --git a/extern/minidns b/extern/minidns index 9e42bff01..118fefcaa 160000 --- a/extern/minidns +++ b/extern/minidns @@ -1 +1 @@ -Subproject commit 9e42bff01440c1351946a432126d5a1b87fb7c78 +Subproject commit 118fefcaaa44a7f31f5c18fa7e477f1665f654b6 From 6691f5118a1eb59d6a9334f44877f0bece1c1247 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 18 Nov 2014 19:04:16 +0100 Subject: [PATCH 006/189] Version 3.2beta1 --- OpenKeychain/src/main/AndroidManifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml index 18fcc4b42..3af0bdf6c 100644 --- a/OpenKeychain/src/main/AndroidManifest.xml +++ b/OpenKeychain/src/main/AndroidManifest.xml @@ -3,8 +3,8 @@ xmlns:tools="http://schemas.android.com/tools" package="org.sufficientlysecure.keychain" android:installLocation="auto" - android:versionCode="31200" - android:versionName="3.1.2"> + android:versionCode="31201" + android:versionName="3.2beta1"> "Change Passphrase" From b5cdeb7f5a54be7443894ca2cb4bd27359fae9ce Mon Sep 17 00:00:00 2001 From: Tim Bray Date: Wed, 19 Nov 2014 14:35:05 -0800 Subject: [PATCH 008/189] Prevent multiple cloud-trust-search launches. Handle DNS query failure gracefully. Fixes #1007 & #1008. --- .../keychain/service/KeychainIntentService.java | 8 +++++++- .../keychain/ui/ViewKeyTrustFragment.java | 1 + OpenKeychain/src/main/res/values/strings.xml | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) 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 8a670df25..954963fb6 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -85,6 +85,7 @@ import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import de.measite.minidns.Client; +import de.measite.minidns.DNSMessage; import de.measite.minidns.Question; import de.measite.minidns.Record; import de.measite.minidns.record.Data; @@ -330,7 +331,12 @@ public class KeychainIntentService extends IntentService implements Progressable String domain = prover.dnsTxtCheckRequired(); if (domain != null) { - Record[] records = new Client().query(new Question(domain, Record.TYPE.TXT)).getAnswers(); + DNSMessage dnsQuery = new Client().query(new Question(domain, Record.TYPE.TXT)); + if (dnsQuery == null) { + sendProofError(prover.getLog(), getString(R.string.keybase_dns_query_failure)); + return; + } + Record[] records = dnsQuery.getAnswers(); List> extents = new ArrayList>(); for (Record r : records) { Data d = r.getPayload(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java index ef14299b1..c85571493 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java @@ -190,6 +190,7 @@ public class ViewKeyTrustFragment extends LoaderFragment implements mStartSearch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + mStartSearch.setEnabled(false); new DescribeKey().execute(fingerprint); } }); diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 27c81fe21..59c0ce408 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -561,6 +561,7 @@ "Unfortunately this proof cannot be verified." "Unrecognized problem with proof checker" "Problem with proof evidence" + "DNS TXT Record retrieval failed" "No proof checker found for" "Decrypted proof post does not match expected value" "Fetching proof evidence" From fd60d49d262a7920279a0f87060c7084069165e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Sat, 22 Nov 2014 00:10:15 +0100 Subject: [PATCH 009/189] Use master key id for keybase proof verification --- .../keychain/pgp/PgpDecryptVerify.java | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java index 4161f2928..b094208a5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java @@ -274,17 +274,11 @@ public class PgpDecryptVerify extends BaseOperation { return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); } - CanonicalizedPublicKey encryptKey = signingKey; - try { - encryptKey = signingRing.getEncryptionSubKey(); - } catch (PgpKeyNotFoundException e) { - } - String fingerprint = KeyFormattingUtils.convertFingerprintToHex(signingKey.getFingerprint()); - String cryptFingerprint = KeyFormattingUtils.convertFingerprintToHex(encryptKey.getFingerprint()); - if (!(mRequiredSignerFingerprint.equals(fingerprint) || mRequiredSignerFingerprint.equals(cryptFingerprint))) { + String fingerprint = KeyFormattingUtils.convertFingerprintToHex(signingRing.getFingerprint()); + if (!(mRequiredSignerFingerprint.equals(fingerprint))) { log.add(LogType.MSG_VL_ERROR_MISSING_KEY, indent); - Log.d(Constants.TAG, "Key mismatch; wanted " + mRequiredSignerFingerprint + - " got " + fingerprint + "/" + cryptFingerprint); + Log.d(Constants.TAG, "Fingerprint mismatch; wanted " + mRequiredSignerFingerprint + + " got " + fingerprint + "!"); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); } From bbbc45e4e9909806a91afe415265b507533f7556 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Sat, 22 Nov 2014 00:29:14 +0100 Subject: [PATCH 010/189] Dont accept signatures by expired or revoked subkeys --- .../pgp/OpenPgpSignatureResultBuilder.java | 4 ---- .../keychain/pgp/PgpDecryptVerify.java | 15 +++++++++++---- .../keychain/service/KeychainIntentService.java | 1 + .../keychain/ui/ViewKeyTrustFragment.java | 2 +- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/OpenPgpSignatureResultBuilder.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/OpenPgpSignatureResultBuilder.java index aa324c7ed..fc5064e79 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/OpenPgpSignatureResultBuilder.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/OpenPgpSignatureResultBuilder.java @@ -84,10 +84,6 @@ public class OpenPgpSignatureResultBuilder { this.mUserIds = userIds; } - public boolean isValidSignature() { - return mValidSignature; - } - public void initValid(CanonicalizedPublicKeyRing signingRing, CanonicalizedPublicKey signingKey) { setSignatureAvailable(true); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java index b094208a5..ea9e165ba 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java @@ -22,6 +22,7 @@ import android.content.Context; import android.webkit.MimeTypeMap; import org.openintents.openpgp.OpenPgpMetadata; +import org.openintents.openpgp.OpenPgpSignatureResult; import org.spongycastle.bcpg.ArmoredInputStream; import org.spongycastle.openpgp.PGPCompressedData; import org.spongycastle.openpgp.PGPEncryptedData; @@ -332,7 +333,10 @@ public class PgpDecryptVerify extends BaseOperation { } signatureResultBuilder.setValidSignature(validSignature); - if (!signatureResultBuilder.isValidSignature()) { + OpenPgpSignatureResult signatureResult = signatureResultBuilder.build(); + + if (signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_CERTIFIED + || signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED) { log.add(LogType.MSG_VL_ERROR_INTEGRITY_CHECK, indent); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); } @@ -344,7 +348,7 @@ public class PgpDecryptVerify extends BaseOperation { // Return a positive result, with metadata and verification info DecryptVerifyResult result = new DecryptVerifyResult(DecryptVerifyResult.RESULT_OK, log); - result.setSignatureResult(signatureResultBuilder.build()); + result.setSignatureResult(signatureResult); return result; } @@ -773,6 +777,8 @@ public class PgpDecryptVerify extends BaseOperation { metadata = null; } + OpenPgpSignatureResult signatureResult = signatureResultBuilder.build(); + if (encryptedData.isIntegrityProtected()) { updateProgress(R.string.progress_verifying_integrity, 95, 100); @@ -786,7 +792,8 @@ public class PgpDecryptVerify extends BaseOperation { // If no valid signature is present: // Handle missing integrity protection like failed integrity protection! // The MDC packet can be stripped by an attacker! - if (!signatureResultBuilder.isValidSignature()) { + if (signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_CERTIFIED + || signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED) { log.add(LogType.MSG_DC_ERROR_INTEGRITY_CHECK, indent); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); } @@ -800,7 +807,7 @@ public class PgpDecryptVerify extends BaseOperation { DecryptVerifyResult result = new DecryptVerifyResult(DecryptVerifyResult.RESULT_OK, log); result.setDecryptMetadata(metadata); - result.setSignatureResult(signatureResultBuilder.build()); + result.setSignatureResult(signatureResult); return result; } 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 92c64a4e1..a4a3a801a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -30,6 +30,7 @@ import com.textuality.keybase.lib.Proof; import com.textuality.keybase.lib.prover.Prover; import org.json.JSONObject; +import org.openintents.openpgp.OpenPgpSignatureResult; import org.spongycastle.openpgp.PGPUtil; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java index c85571493..677646441 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java @@ -362,7 +362,7 @@ public class ViewKeyTrustFragment extends LoaderFragment implements // Create a new Messenger for the communication back after proof work is done // KeychainIntentServiceHandler handler = new KeychainIntentServiceHandler(getActivity(), - getString(R.string.progress_decrypting), ProgressDialog.STYLE_HORIZONTAL) { + getString(R.string.progress_verifying_signature), ProgressDialog.STYLE_HORIZONTAL) { public void handleMessage(Message message) { // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); From 9c133d343fbc297ed6f3ee39b74cea5dfcc9c207 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Sat, 22 Nov 2014 02:55:42 +0100 Subject: [PATCH 011/189] fix signature check --- .../org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java index ea9e165ba..5589a3521 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java @@ -336,7 +336,7 @@ public class PgpDecryptVerify extends BaseOperation { OpenPgpSignatureResult signatureResult = signatureResultBuilder.build(); if (signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_CERTIFIED - || signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED) { + && signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED) { log.add(LogType.MSG_VL_ERROR_INTEGRITY_CHECK, indent); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); } @@ -793,7 +793,7 @@ public class PgpDecryptVerify extends BaseOperation { // Handle missing integrity protection like failed integrity protection! // The MDC packet can be stripped by an attacker! if (signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_CERTIFIED - || signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED) { + && signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED) { log.add(LogType.MSG_DC_ERROR_INTEGRITY_CHECK, indent); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); } From e72c082acd9f17be4a21970603df0f6a621221d7 Mon Sep 17 00:00:00 2001 From: Tim Bray Date: Fri, 21 Nov 2014 19:44:05 -0800 Subject: [PATCH 012/189] Add check that proof & database fingerprints are the same --- .../keychain/pgp/PgpDecryptVerify.java | 3 ++- .../keychain/service/KeychainIntentService.java | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java index ea9e165ba..5a8bfda29 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpDecryptVerify.java @@ -336,7 +336,8 @@ public class PgpDecryptVerify extends BaseOperation { OpenPgpSignatureResult signatureResult = signatureResultBuilder.build(); if (signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_CERTIFIED - || signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED) { + && signatureResult.getStatus() != OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED) { + Log.d(Constants.TAG, "STATUS IS " + signatureResult.getStatus()); log.add(LogType.MSG_VL_ERROR_INTEGRITY_CHECK, indent); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); } 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 a4a3a801a..dc9592710 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -30,7 +30,6 @@ import com.textuality.keybase.lib.Proof; import com.textuality.keybase.lib.prover.Prover; import org.json.JSONObject; -import org.openintents.openpgp.OpenPgpSignatureResult; import org.spongycastle.openpgp.PGPUtil; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; @@ -324,6 +323,11 @@ public class KeychainIntentService extends IntentService implements Progressable sendProofError(prover.getLog(), getString(R.string.keybase_problem_fetching_evidence)); return; } + String requiredFingerprint = data.getString(KEYBASE_REQUIRED_FINGERPRINT); + if (!prover.checkFingerprint(requiredFingerprint)) { + sendProofError(getString(R.string.keybase_key_mismatch)); + return; + } String domain = prover.dnsTxtCheckRequired(); if (domain != null) { @@ -361,13 +365,12 @@ public class KeychainIntentService extends IntentService implements Progressable InputData inputData = createDecryptInputData(data); OutputStream outStream = createCryptOutputStream(data); - String fingerprint = data.getString(KEYBASE_REQUIRED_FINGERPRINT); PgpDecryptVerify.Builder builder = new PgpDecryptVerify.Builder( this, new ProviderHelper(this), this, inputData, outStream ); - builder.setSignedLiteralData(true).setRequiredSignerFingerprint(fingerprint); + builder.setSignedLiteralData(true).setRequiredSignerFingerprint(requiredFingerprint); DecryptVerifyResult decryptVerifyResult = builder.build().execute(); outStream.close(); From 2a608c12ca592c8662586898a161e7054fc0693c Mon Sep 17 00:00:00 2001 From: Tim Bray Date: Sat, 22 Nov 2014 09:27:28 -0800 Subject: [PATCH 013/189] Check fingerprint match between proof & database --- OpenKeychain/src/main/res/values/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index b98f47146..cac38c361 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -562,6 +562,7 @@ "Unfortunately this proof cannot be verified." "Unrecognized problem with proof checker" "Problem with proof evidence" + "Key fingerprint doesn’t match that in proof post" "DNS TXT Record retrieval failed" "No proof checker found for" "Decrypted proof post does not match expected value" From be694f62437343b46e2edadccf22b399f234c657 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 4 Dec 2014 18:57:09 +0100 Subject: [PATCH 014/189] Update for Android Studio 1.0 RC --- build.gradle | 4 ++-- gradle/wrapper/gradle-wrapper.jar | Bin 50557 -> 51018 bytes gradle/wrapper/gradle-wrapper.properties | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 2e7ab3d86..59f05e73a 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { dependencies { // NOTE: Always use fixed version codes not dynamic ones, e.g. 0.7.3 instead of 0.7.+, see README for more information - classpath 'com.android.tools.build:gradle:0.12.2' + classpath 'com.android.tools.build:gradle:1.0.0-rc3' } } @@ -16,7 +16,7 @@ allprojects { } task wrapper(type: Wrapper) { - gradleVersion = '1.12' + gradleVersion = '2.2.1' } subprojects { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 5838598129719e795cc5633f411468bdec311016..c97a8bdb9088d370da7e88784a7a093b971aa23a 100644 GIT binary patch delta 25841 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 delta 25388 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cc3d5d9a3..120a028f4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jun 09 22:04:23 CEST 2014 +#Thu Dec 04 18:50:40 CET 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-bin.zip From 07619b536a78002194928490e017dcc2d19e9644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 4 Dec 2014 19:02:50 +0100 Subject: [PATCH 015/189] Update for Android Studio 1.0 RC --- extern/KeybaseLib | 2 +- extern/StickyListHeaders | 2 +- extern/SuperToasts | 2 +- extern/TokenAutoComplete | 2 +- extern/minidns | 2 +- extern/openkeychain-api-lib | 2 +- extern/openpgp-api-lib | 2 +- extern/zxing-android-integration | 2 +- extern/zxing-qr-code | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/extern/KeybaseLib b/extern/KeybaseLib index 7f4980f07..2b26d163d 160000 --- a/extern/KeybaseLib +++ b/extern/KeybaseLib @@ -1 +1 @@ -Subproject commit 7f4980f0789d7bb3c2124080f32b3bec703c576e +Subproject commit 2b26d163df84a3d26c1c8da088ed3811b5ca6ec7 diff --git a/extern/StickyListHeaders b/extern/StickyListHeaders index 911f8ddfd..62cc58c12 160000 --- a/extern/StickyListHeaders +++ b/extern/StickyListHeaders @@ -1 +1 @@ -Subproject commit 911f8ddfd007ce65aededae7e7b79e5a8d903a43 +Subproject commit 62cc58c12d0c09b50984caf26e5afceda8873784 diff --git a/extern/SuperToasts b/extern/SuperToasts index 8578cfe69..77042d633 160000 --- a/extern/SuperToasts +++ b/extern/SuperToasts @@ -1 +1 @@ -Subproject commit 8578cfe6917cf16a9f123c1964e4bbff2a15be59 +Subproject commit 77042d633f4dd430bcc86101e31dda52433db9c1 diff --git a/extern/TokenAutoComplete b/extern/TokenAutoComplete index 000fa6539..ca46b4261 160000 --- a/extern/TokenAutoComplete +++ b/extern/TokenAutoComplete @@ -1 +1 @@ -Subproject commit 000fa65390b98106201a0ffaad76c5d85a35396c +Subproject commit ca46b4261c97221ddd4db135e7838d6fa145adf4 diff --git a/extern/minidns b/extern/minidns index 118fefcaa..f3a19080f 160000 --- a/extern/minidns +++ b/extern/minidns @@ -1 +1 @@ -Subproject commit 118fefcaaa44a7f31f5c18fa7e477f1665f654b6 +Subproject commit f3a19080f15e220fbacab5045c1f15fd12513b35 diff --git a/extern/openkeychain-api-lib b/extern/openkeychain-api-lib index 57e58e7f7..0cdbf3223 160000 --- a/extern/openkeychain-api-lib +++ b/extern/openkeychain-api-lib @@ -1 +1 @@ -Subproject commit 57e58e7f7f51c4eecd7ee4b0f22c856485a243b7 +Subproject commit 0cdbf32231739eac47999be71d6d01fc28375181 diff --git a/extern/openpgp-api-lib b/extern/openpgp-api-lib index 0be263d5d..e0ad1086a 160000 --- a/extern/openpgp-api-lib +++ b/extern/openpgp-api-lib @@ -1 +1 @@ -Subproject commit 0be263d5d3effd2df5f976fa4a127017268749cc +Subproject commit e0ad1086a55eab66d963b4d5c6ca5544b454ef2d diff --git a/extern/zxing-android-integration b/extern/zxing-android-integration index 1d7878456..e2d0064bd 160000 --- a/extern/zxing-android-integration +++ b/extern/zxing-android-integration @@ -1 +1 @@ -Subproject commit 1d787845663fd232f98f5e8e0923733c1a188f2a +Subproject commit e2d0064bd3171b7333af044bb30c25c85ee993dd diff --git a/extern/zxing-qr-code b/extern/zxing-qr-code index 9ef2f3b66..8fd0657d3 160000 --- a/extern/zxing-qr-code +++ b/extern/zxing-qr-code @@ -1 +1 @@ -Subproject commit 9ef2f3b66ea7cc283e865ec39434d023a18d17f3 +Subproject commit 8fd0657d33d8277aadbdc1604fd3aaa2e8d4b487 From 1c4b8c193d35f2226d621aa448e6775ff49fa2c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 8 Jan 2015 14:48:13 +0100 Subject: [PATCH 016/189] Experimental API support for detached signatures (not tested) --- .../operations/results/SignEncryptResult.java | 16 ++++ .../keychain/pgp/CanonicalizedSecretKey.java | 2 +- .../keychain/pgp/PgpSignEncrypt.java | 94 +++++++++++++++---- .../keychain/remote/OpenPgpService.java | 47 +++++----- .../service/KeychainIntentService.java | 3 +- extern/openpgp-api-lib | 2 +- 6 files changed, 119 insertions(+), 45 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/SignEncryptResult.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/SignEncryptResult.java index 57daf3430..c336f8502 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/SignEncryptResult.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/SignEncryptResult.java @@ -37,6 +37,7 @@ public class SignEncryptResult extends OperationResult { int mNfcAlgo; Date mNfcTimestamp; String mNfcPassphrase; + byte[] mDetachedSignature; public long getKeyIdPassphraseNeeded() { return mKeyIdPassphraseNeeded; @@ -54,6 +55,10 @@ public class SignEncryptResult extends OperationResult { mNfcPassphrase = passphrase; } + public void setDetachedSignature(byte[] detachedSignature) { + mDetachedSignature = detachedSignature; + } + public long getNfcKeyId() { return mNfcKeyId; } @@ -74,6 +79,10 @@ public class SignEncryptResult extends OperationResult { return mNfcPassphrase; } + public byte[] getDetachedSignature() { + return mDetachedSignature; + } + public boolean isPending() { return (mResult & RESULT_PENDING) == RESULT_PENDING; } @@ -87,6 +96,7 @@ public class SignEncryptResult extends OperationResult { mNfcHash = source.readInt() != 0 ? source.createByteArray() : null; mNfcAlgo = source.readInt(); mNfcTimestamp = source.readInt() != 0 ? new Date(source.readLong()) : null; + mDetachedSignature = source.readInt() != 0 ? source.createByteArray() : null; } public int describeContents() { @@ -108,6 +118,12 @@ public class SignEncryptResult extends OperationResult { } else { dest.writeInt(0); } + if (mDetachedSignature != null) { + dest.writeInt(1); + dest.writeByteArray(mDetachedSignature); + } else { + dest.writeInt(0); + } } public static final Creator CREATOR = new Creator() { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKey.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKey.java index 6ccadac2e..cffb09420 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKey.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/CanonicalizedSecretKey.java @@ -247,7 +247,7 @@ public class CanonicalizedSecretKey extends CanonicalizedPublicKey { int signatureType; if (cleartext) { - // for sign-only ascii text + // for sign-only ascii text (cleartext signature) signatureType = PGPSignature.CANONICAL_TEXT_DOCUMENT; } else { signatureType = PGPSignature.BINARY_DOCUMENT; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java index 3c3bcc890..5151667ed 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java @@ -50,6 +50,7 @@ import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.ProgressScaler; import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -78,7 +79,8 @@ public class PgpSignEncrypt extends BaseOperation { private int mSignatureHashAlgorithm; private String mSignaturePassphrase; private long mAdditionalEncryptId; - private boolean mCleartextInput; + private boolean mCleartextSignature; + private boolean mDetachedSignature; private String mOriginalFilename; private boolean mFailOnMissingEncryptionKeyIds; @@ -113,7 +115,8 @@ public class PgpSignEncrypt extends BaseOperation { this.mSignatureHashAlgorithm = builder.mSignatureHashAlgorithm; this.mSignaturePassphrase = builder.mSignaturePassphrase; this.mAdditionalEncryptId = builder.mAdditionalEncryptId; - this.mCleartextInput = builder.mCleartextInput; + this.mCleartextSignature = builder.mCleartextSignature; + this.mDetachedSignature = builder.mDetachedSignature; this.mNfcSignedHash = builder.mNfcSignedHash; this.mNfcCreationTimestamp = builder.mNfcCreationTimestamp; this.mOriginalFilename = builder.mOriginalFilename; @@ -140,7 +143,8 @@ public class PgpSignEncrypt extends BaseOperation { private int mSignatureHashAlgorithm = 0; private String mSignaturePassphrase = null; private long mAdditionalEncryptId = Constants.key.none; - private boolean mCleartextInput = false; + private boolean mCleartextSignature = false; + private boolean mDetachedSignature = false; private String mOriginalFilename = ""; private byte[] mNfcSignedHash = null; private Date mNfcCreationTimestamp = null; @@ -222,14 +226,13 @@ public class PgpSignEncrypt extends BaseOperation { return this; } - /** - * TODO: test this option! - * - * @param cleartextInput - * @return - */ - public Builder setCleartextInput(boolean cleartextInput) { - mCleartextInput = cleartextInput; + public Builder setCleartextSignature(boolean cleartextSignature) { + mCleartextSignature = cleartextSignature; + return this; + } + + public Builder setDetachedSignature(boolean detachedSignature) { + mDetachedSignature = detachedSignature; return this; } @@ -408,7 +411,7 @@ public class PgpSignEncrypt extends BaseOperation { updateProgress(R.string.progress_preparing_signature, 4, 100); try { - boolean cleartext = mCleartextInput && mEnableAsciiArmorOutput && !enableEncryption; + boolean cleartext = mCleartextSignature && mEnableAsciiArmorOutput && !enableEncryption; signatureGenerator = signingKey.getSignatureGenerator( mSignatureHashAlgorithm, cleartext, mNfcSignedHash, mNfcCreationTimestamp); } catch (PgpGeneralException e) { @@ -424,6 +427,9 @@ public class PgpSignEncrypt extends BaseOperation { OutputStream encryptionOut = null; BCPGOutputStream bcpgOut; + ByteArrayOutputStream detachedByteOut = null; + BCPGOutputStream detachedBcpgOut = null; + try { if (enableEncryption) { @@ -452,7 +458,7 @@ public class PgpSignEncrypt extends BaseOperation { PGPLiteralDataGenerator literalGen = new PGPLiteralDataGenerator(); char literalDataFormatTag; - if (mCleartextInput) { + if (mCleartextSignature) { literalDataFormatTag = PGPLiteralData.UTF8; } else { literalDataFormatTag = PGPLiteralData.BINARY; @@ -482,7 +488,7 @@ public class PgpSignEncrypt extends BaseOperation { literalGen.close(); indent -= 1; - } else if (enableSignature && mCleartextInput && mEnableAsciiArmorOutput) { + } else if (enableSignature && mCleartextSignature && mEnableAsciiArmorOutput) { /* cleartext signature: sign-only of ascii text */ updateProgress(R.string.progress_signing, 8, 100); @@ -517,11 +523,44 @@ public class PgpSignEncrypt extends BaseOperation { armorOut.endClearText(); pOut = new BCPGOutputStream(armorOut); - } else if (enableSignature && !mCleartextInput) { + } else if (enableSignature && mDetachedSignature) { + /* detached signature */ + + updateProgress(R.string.progress_signing, 8, 100); + log.add(LogType.MSG_SE_SIGNING, indent); + + InputStream in = mData.getInputStream(); + + // handle output stream separately for detached signatures + detachedByteOut = new ByteArrayOutputStream(); + OutputStream detachedOut = detachedByteOut; + if (mEnableAsciiArmorOutput) { + detachedOut = new ArmoredOutputStream(detachedOut); + } + detachedBcpgOut = new BCPGOutputStream(detachedOut); + + long alreadyWritten = 0; + int length; + byte[] buffer = new byte[1 << 16]; + while ((length = in.read(buffer)) > 0) { + // pipe input stream directly into output stream, no changes to data + mOutStream.write(buffer, 0, length); + + signatureGenerator.update(buffer, 0, length); + + alreadyWritten += length; + if (mData.getSize() > 0) { + long progress = 100 * alreadyWritten / mData.getSize(); + progressScaler.setProgress((int) progress, 100); + } + } + + pOut = null; + } else if (enableSignature && !mCleartextSignature && !mDetachedSignature) { /* sign-only binary (files/data stream) */ updateProgress(R.string.progress_signing, 8, 100); - log.add(LogType.MSG_SE_ENCRYPTING, indent); + log.add(LogType.MSG_SE_SIGNING, indent); InputStream in = mData.getInputStream(); @@ -556,13 +595,18 @@ public class PgpSignEncrypt extends BaseOperation { literalGen.close(); } else { pOut = null; + // TODO: Is this log right? log.add(LogType.MSG_SE_CLEARSIGN_ONLY, indent); } if (enableSignature) { updateProgress(R.string.progress_generating_signature, 95, 100); try { - signatureGenerator.generate().encode(pOut); + if (detachedBcpgOut != null) { + signatureGenerator.generate().encode(detachedBcpgOut); + } else { + signatureGenerator.generate().encode(pOut); + } } catch (NfcSyncPGPContentSignerBuilder.NfcInteractionNeeded e) { // this secret key diverts to a OpenPGP card, throw exception with hash that will be signed log.add(LogType.MSG_SE_PENDING_NFC, indent); @@ -607,10 +651,22 @@ public class PgpSignEncrypt extends BaseOperation { updateProgress(R.string.progress_done, 100, 100); log.add(LogType.MSG_SE_OK, indent); - return new SignEncryptResult(SignEncryptResult.RESULT_OK, log); - + SignEncryptResult result = new SignEncryptResult(SignEncryptResult.RESULT_OK, log); + if (detachedByteOut != null) { + try { + detachedByteOut.flush(); + detachedByteOut.close(); + } catch (IOException e) { + // silently catch + } + result.setDetachedSignature(detachedByteOut.toByteArray()); + } + return result; } + /** + * Remove whitespaces on line endings + */ private static void processLine(final String pLine, final ArmoredOutputStream pArmoredOutput, final PGPSignatureGenerator pSignatureGenerator) throws IOException, SignatureException { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java index a5813567a..478013f55 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java @@ -222,9 +222,10 @@ public class OpenPgpService extends RemoteService { } private Intent signImpl(Intent data, ParcelFileDescriptor input, - ParcelFileDescriptor output, AccountSettings accSettings) { + ParcelFileDescriptor output, AccountSettings accSettings, + boolean cleartextSign) { try { - boolean asciiArmor = data.getBooleanExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true); + boolean asciiArmor = cleartextSign || data.getBooleanExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true); byte[] nfcSignedHash = data.getByteArrayExtra(OpenPgpApi.EXTRA_NFC_SIGNED_HASH); if (nfcSignedHash != null) { @@ -284,6 +285,8 @@ public class OpenPgpService extends RemoteService { inputData, os ); builder.setEnableAsciiArmorOutput(asciiArmor) + .setCleartextSignature(cleartextSign) + .setDetachedSignature(!cleartextSign) .setVersionHeader(PgpHelper.getVersionForHeader(this)) .setSignatureHashAlgorithm(accSettings.getHashAlgorithm()) .setSignatureMasterKeyId(accSettings.getKeyId()) @@ -291,9 +294,6 @@ public class OpenPgpService extends RemoteService { .setSignaturePassphrase(passphrase) .setNfcState(nfcSignedHash, nfcCreationDate); - // TODO: currently always assume cleartext input, no sign-only of binary currently! - builder.setCleartextInput(true); - // execute PGP operation! SignEncryptResult pgpResult = builder.build().execute(); @@ -313,20 +313,20 @@ public class OpenPgpService extends RemoteService { "Encountered unhandled type of pending action not supported by API!"); } } else if (pgpResult.success()) { - // see end of method + Intent result = new Intent(); + if (!cleartextSign) { + result.putExtra(OpenPgpApi.RESULT_DETACHED_SIGNATURE, pgpResult.getDetachedSignature()); + } + result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS); + return result; } else { LogEntryParcel errorMsg = pgpResult.getLog().getLast(); throw new Exception(getString(errorMsg.mType.getMsgId())); } - } finally { is.close(); os.close(); } - - Intent result = new Intent(); - result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS); - return result; } catch (Exception e) { Log.d(Constants.TAG, "signImpl", e); Intent result = new Intent(); @@ -444,7 +444,9 @@ public class OpenPgpService extends RemoteService { "Encountered unhandled type of pending action not supported by API!"); } } else if (pgpResult.success()) { - // see end of method + Intent result = new Intent(); + result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS); + return result; } else { LogEntryParcel errorMsg = pgpResult.getLog().getLast(); throw new Exception(getString(errorMsg.mType.getMsgId())); @@ -454,10 +456,6 @@ public class OpenPgpService extends RemoteService { is.close(); os.close(); } - - Intent result = new Intent(); - result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS); - return result; } catch (Exception e) { Log.d(Constants.TAG, "encryptAndSignImpl", e); Intent result = new Intent(); @@ -482,7 +480,6 @@ public class OpenPgpService extends RemoteService { os = new ParcelFileDescriptor.AutoCloseOutputStream(output); } - Intent result = new Intent(); try { String passphrase = data.getStringExtra(OpenPgpApi.EXTRA_PASSPHRASE); long inputLength = is.available(); @@ -522,6 +519,7 @@ public class OpenPgpService extends RemoteService { "Encountered unhandled type of pending action not supported by API!"); } } else if (pgpResult.success()) { + Intent result = new Intent(); OpenPgpSignatureResult signatureResult = pgpResult.getSignatureResult(); if (signatureResult != null) { @@ -557,6 +555,9 @@ public class OpenPgpService extends RemoteService { result.putExtra(OpenPgpApi.RESULT_METADATA, metadata); } } + + result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS); + return result; } else { LogEntryParcel errorMsg = pgpResult.getLog().getLast(); throw new Exception(getString(errorMsg.mType.getMsgId())); @@ -567,9 +568,6 @@ public class OpenPgpService extends RemoteService { os.close(); } } - - result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS); - return result; } catch (Exception e) { Log.d(Constants.TAG, "decryptAndVerifyImpl", e); Intent result = new Intent(); @@ -718,8 +716,13 @@ public class OpenPgpService extends RemoteService { } String action = data.getAction(); - if (OpenPgpApi.ACTION_SIGN.equals(action)) { - return signImpl(data, input, output, accSettings); + if (OpenPgpApi.ACTION_CLEARTEXT_SIGN.equals(action)) { + return signImpl(data, input, output, accSettings, true); + } else if (OpenPgpApi.ACTION_SIGN.equals(action)) { + // DEPRECATED: same as ACTION_CLEARTEXT_SIGN + return signImpl(data, input, output, accSettings, true); + } else if (OpenPgpApi.ACTION_DETACHED_SIGN.equals(action)) { + return signImpl(data, input, output, accSettings, false); } else if (OpenPgpApi.ACTION_ENCRYPT.equals(action)) { return encryptAndSignImpl(data, input, output, accSettings, false); } else if (OpenPgpApi.ACTION_SIGN_AND_ENCRYPT.equals(action)) { 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 479810203..2dc057941 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -33,7 +33,6 @@ import org.sufficientlysecure.keychain.operations.EditKeyOperation; import org.sufficientlysecure.keychain.operations.results.DeleteResult; import org.sufficientlysecure.keychain.operations.results.EditKeyResult; import org.sufficientlysecure.keychain.operations.results.ExportResult; -import org.sufficientlysecure.keychain.operations.results.PgpEditKeyResult; import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.operations.results.CertifyResult; import org.sufficientlysecure.keychain.util.FileHelper; @@ -474,7 +473,7 @@ public class KeychainIntentService extends IntentService implements Progressable // this assumes that the bytes are cleartext (valid for current implementation!) if (source == IO_BYTES) { - builder.setCleartextInput(true); + builder.setCleartextSignature(true); } SignEncryptResult result = builder.build().execute(); diff --git a/extern/openpgp-api-lib b/extern/openpgp-api-lib index 89b0a3bd1..f712a26ab 160000 --- a/extern/openpgp-api-lib +++ b/extern/openpgp-api-lib @@ -1 +1 @@ -Subproject commit 89b0a3bd140dd178595c031beaa27747575d7ac8 +Subproject commit f712a26ab68eb0f978722cfa69a7e9b5d05c80ca From a87a45aa9abd00bb78c42ab11c8da007b892369d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 8 Jan 2015 14:57:09 +0100 Subject: [PATCH 017/189] No output stream for detached signatures, makes no sense to pipe it through --- .../org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java | 3 +-- extern/openpgp-api-lib | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java index 5151667ed..3c6c86338 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpSignEncrypt.java @@ -543,8 +543,7 @@ public class PgpSignEncrypt extends BaseOperation { int length; byte[] buffer = new byte[1 << 16]; while ((length = in.read(buffer)) > 0) { - // pipe input stream directly into output stream, no changes to data - mOutStream.write(buffer, 0, length); + // no output stream is written, no changed to original data! signatureGenerator.update(buffer, 0, length); diff --git a/extern/openpgp-api-lib b/extern/openpgp-api-lib index f712a26ab..76d7b17f1 160000 --- a/extern/openpgp-api-lib +++ b/extern/openpgp-api-lib @@ -1 +1 @@ -Subproject commit f712a26ab68eb0f978722cfa69a7e9b5d05c80ca +Subproject commit 76d7b17f114ef180fdbe6852d8897e8b9a4bca8b From 16f924eef3de6c79f8257f56b60f8812125757d1 Mon Sep 17 00:00:00 2001 From: Abraham Philip Date: Fri, 9 Jan 2015 05:07:50 +0530 Subject: [PATCH 018/189] fixed crash when file scheme is passed, broadened deletion scope --- .../ui/dialog/DeleteFileDialogFragment.java | 39 ++++++++++++++----- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java index 42e21cd57..0926de1d0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteFileDialogFragment.java @@ -18,6 +18,7 @@ package org.sufficientlysecure.keychain.ui.dialog; import android.app.Dialog; +import android.content.ContentResolver; import android.content.DialogInterface; import android.net.Uri; import android.os.Build; @@ -27,9 +28,12 @@ import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentActivity; import android.widget.Toast; +import org.apache.http.conn.scheme.Scheme; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.util.FileHelper; +import java.io.File; + public class DeleteFileDialogFragment extends DialogFragment { private static final String ARG_DELETE_URI = "delete_uri"; @@ -69,21 +73,38 @@ public class DeleteFileDialogFragment extends DialogFragment { @Override public void onClick(DialogInterface dialog, int id) { dismiss(); + String scheme = deleteUri.getScheme(); - // We can not securely delete Uris, so just use usual delete on them - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - if (DocumentsContract.deleteDocument(getActivity().getContentResolver(), deleteUri)) { + if(scheme.equals(ContentResolver.SCHEME_FILE)) { + if(new File(deleteUri.getPath()).delete()) { + Toast.makeText(getActivity(), R.string.file_delete_successful, Toast.LENGTH_SHORT).show(); + return; + } + } + else if(scheme.equals(ContentResolver.SCHEME_CONTENT)) { + // We can not securely delete Uris, so just use usual delete on them + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + if (DocumentsContract.deleteDocument(getActivity().getContentResolver(), deleteUri)) { + Toast.makeText(getActivity(), R.string.file_delete_successful, Toast.LENGTH_SHORT).show(); + return; + } + } + + if (getActivity().getContentResolver().delete(deleteUri, null, null) > 0) { + Toast.makeText(getActivity(), R.string.file_delete_successful, Toast.LENGTH_SHORT).show(); + return; + } + + // some Uri's a ContentResolver fails to delete is handled by the java.io.File's delete + // via the path of the Uri + if(new File(deleteUri.getPath()).delete()) { Toast.makeText(getActivity(), R.string.file_delete_successful, Toast.LENGTH_SHORT).show(); return; } } - if (getActivity().getContentResolver().delete(deleteUri, null, null) > 0) { - Toast.makeText(getActivity(), R.string.file_delete_successful, Toast.LENGTH_SHORT).show(); - return; - } - - Toast.makeText(getActivity(), getActivity().getString(R.string.error_file_delete_failed, deleteFilename), Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), getActivity().getString(R.string.error_file_delete_failed, + deleteFilename), Toast.LENGTH_SHORT).show(); // Note: We can't delete every file... // If possible we should find out if deletion is possible before even showing the option to do so. From b73ad7d87e7ddef03c17b4983f526c0613403df6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 12 Jan 2015 15:37:41 +0100 Subject: [PATCH 019/189] Update safeslinger lib --- extern/safeslinger-exchange | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/safeslinger-exchange b/extern/safeslinger-exchange index 80beccbe1..96f7c8935 160000 --- a/extern/safeslinger-exchange +++ b/extern/safeslinger-exchange @@ -1 +1 @@ -Subproject commit 80beccbe1b95437040b201a37f40cdb50053c06a +Subproject commit 96f7c893565e3a8badd740b2035beea87d8bffb3 From 374de7ed9681a0995e627c3b17bcb7ff2e94e657 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 12 Jan 2015 15:37:41 +0100 Subject: [PATCH 020/189] Update safeslinger lib --- extern/safeslinger-exchange | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/safeslinger-exchange b/extern/safeslinger-exchange index 80beccbe1..96f7c8935 160000 --- a/extern/safeslinger-exchange +++ b/extern/safeslinger-exchange @@ -1 +1 @@ -Subproject commit 80beccbe1b95437040b201a37f40cdb50053c06a +Subproject commit 96f7c893565e3a8badd740b2035beea87d8bffb3 From fc3397de5dabf23fac0de3fd297bcc4125864861 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Mon, 12 Jan 2015 20:03:03 +0100 Subject: [PATCH 021/189] add support for user attributes (during canonicalization) --- .../operations/results/OperationResult.java | 15 ++ .../keychain/pgp/UncachedKeyRing.java | 166 ++++++++++++++++++ .../keychain/pgp/WrappedSignature.java | 9 + .../pgp/affirmation/LinkedIdentity.java | 160 +++++++++++++++++ OpenKeychain/src/main/res/values/strings.xml | 17 +- 5 files changed, 366 insertions(+), 1 deletion(-) create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/LinkedIdentity.java diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java index 1388c0eac..5884dd2d5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java @@ -416,6 +416,21 @@ public abstract class OperationResult implements Parcelable { MSG_KC_UID_REVOKE_OLD (LogLevel.DEBUG, R.string.msg_kc_uid_revoke_old), MSG_KC_UID_REMOVE (LogLevel.DEBUG, R.string.msg_kc_uid_remove), MSG_KC_UID_WARN_ENCODING (LogLevel.WARN, R.string.msg_kc_uid_warn_encoding), + MSG_KC_UAT_JPEG (LogLevel.DEBUG, R.string.msg_kc_uat_jpeg), + MSG_KC_UAT_UNKNOWN (LogLevel.DEBUG, R.string.msg_kc_uat_unknown), + MSG_KC_UAT_BAD_ERR (LogLevel.WARN, R.string.msg_kc_uat_bad_err), + MSG_KC_UAT_BAD_LOCAL (LogLevel.WARN, R.string.msg_kc_uat_bad_local), + MSG_KC_UAT_BAD_TIME (LogLevel.WARN, R.string.msg_kc_uat_bad_time), + MSG_KC_UAT_BAD_TYPE (LogLevel.WARN, R.string.msg_kc_uat_bad_type), + MSG_KC_UAT_BAD (LogLevel.WARN, R.string.msg_kc_uat_bad), + MSG_KC_UAT_CERT_DUP (LogLevel.DEBUG, R.string.msg_kc_uat_cert_dup), + MSG_KC_UAT_DUP (LogLevel.DEBUG, R.string.msg_kc_uat_dup), + MSG_KC_UAT_FOREIGN (LogLevel.DEBUG, R.string.msg_kc_uat_foreign), + MSG_KC_UAT_NO_CERT (LogLevel.DEBUG, R.string.msg_kc_uat_no_cert), + MSG_KC_UAT_REVOKE_DUP (LogLevel.DEBUG, R.string.msg_kc_uat_revoke_dup), + MSG_KC_UAT_REVOKE_OLD (LogLevel.DEBUG, R.string.msg_kc_uat_revoke_old), + MSG_KC_UAT_REMOVE (LogLevel.DEBUG, R.string.msg_kc_uat_remove), + MSG_KC_UAT_WARN_ENCODING (LogLevel.WARN, R.string.msg_kc_uat_warn_encoding), // keyring consolidation diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedKeyRing.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedKeyRing.java index a445e161f..404228a3e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedKeyRing.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedKeyRing.java @@ -21,6 +21,7 @@ package org.sufficientlysecure.keychain.pgp; import org.spongycastle.bcpg.ArmoredOutputStream; import org.spongycastle.bcpg.PublicKeyAlgorithmTags; import org.spongycastle.bcpg.SignatureSubpacketTags; +import org.spongycastle.bcpg.UserAttributeSubpacketTags; import org.spongycastle.bcpg.sig.KeyFlags; import org.spongycastle.openpgp.PGPKeyRing; import org.spongycastle.openpgp.PGPObjectFactory; @@ -30,6 +31,7 @@ import org.spongycastle.openpgp.PGPSecretKey; import org.spongycastle.openpgp.PGPSecretKeyRing; import org.spongycastle.openpgp.PGPSignature; import org.spongycastle.openpgp.PGPSignatureList; +import org.spongycastle.openpgp.PGPUserAttributeSubpacketVector; import org.spongycastle.openpgp.PGPUtil; import org.spongycastle.openpgp.operator.jcajce.JcaKeyFingerprintCalculator; import org.sufficientlysecure.keychain.Constants; @@ -605,6 +607,170 @@ public class UncachedKeyRing { return null; } + ArrayList processedUserAttributes = new ArrayList<>(); + for (PGPUserAttributeSubpacketVector userAttribute : + new IterableIterator(masterKey.getUserAttributes())) { + + if (userAttribute.getSubpacket(UserAttributeSubpacketTags.IMAGE_ATTRIBUTE) != null) { + log.add(LogType.MSG_KC_UAT_JPEG, indent); + } else { + log.add(LogType.MSG_KC_UAT_UNKNOWN, indent); + } + + try { + indent += 1; + + // check for duplicate user attributes + if (processedUserAttributes.contains(userAttribute)) { + log.add(LogType.MSG_KC_UAT_DUP, indent); + // strip out the first found user id with this name + modified = PGPPublicKey.removeCertification(modified, userAttribute); + } + processedUserAttributes.add(userAttribute); + + PGPSignature selfCert = null; + revocation = null; + + // look through signatures for this specific user id + @SuppressWarnings("unchecked") + Iterator signaturesIt = masterKey.getSignaturesForUserAttribute(userAttribute); + if (signaturesIt != null) { + for (PGPSignature zert : new IterableIterator(signaturesIt)) { + WrappedSignature cert = new WrappedSignature(zert); + long certId = cert.getKeyId(); + + int type = zert.getSignatureType(); + if (type != PGPSignature.DEFAULT_CERTIFICATION + && type != PGPSignature.NO_CERTIFICATION + && type != PGPSignature.CASUAL_CERTIFICATION + && type != PGPSignature.POSITIVE_CERTIFICATION + && type != PGPSignature.CERTIFICATION_REVOCATION) { + log.add(LogType.MSG_KC_UAT_BAD_TYPE, + indent, "0x" + Integer.toString(zert.getSignatureType(), 16)); + modified = PGPPublicKey.removeCertification(modified, userAttribute, zert); + badCerts += 1; + continue; + } + + if (cert.getCreationTime().after(nowPlusOneDay)) { + // Creation date in the future? No way! + log.add(LogType.MSG_KC_UAT_BAD_TIME, indent); + modified = PGPPublicKey.removeCertification(modified, userAttribute, zert); + badCerts += 1; + continue; + } + + if (cert.isLocal()) { + // Creation date in the future? No way! + log.add(LogType.MSG_KC_UAT_BAD_LOCAL, indent); + modified = PGPPublicKey.removeCertification(modified, userAttribute, zert); + badCerts += 1; + continue; + } + + // If this is a foreign signature, ... + if (certId != masterKeyId) { + // never mind any further for public keys, but remove them from secret ones + if (isSecret()) { + log.add(LogType.MSG_KC_UAT_FOREIGN, + indent, KeyFormattingUtils.convertKeyIdToHex(certId)); + modified = PGPPublicKey.removeCertification(modified, userAttribute, zert); + badCerts += 1; + } + continue; + } + + // Otherwise, first make sure it checks out + try { + cert.init(masterKey); + if (!cert.verifySignature(masterKey, userAttribute)) { + log.add(LogType.MSG_KC_UAT_BAD, + indent); + modified = PGPPublicKey.removeCertification(modified, userAttribute, zert); + badCerts += 1; + continue; + } + } catch (PgpGeneralException e) { + log.add(LogType.MSG_KC_UAT_BAD_ERR, + indent); + modified = PGPPublicKey.removeCertification(modified, userAttribute, zert); + badCerts += 1; + continue; + } + + switch (type) { + case PGPSignature.DEFAULT_CERTIFICATION: + case PGPSignature.NO_CERTIFICATION: + case PGPSignature.CASUAL_CERTIFICATION: + case PGPSignature.POSITIVE_CERTIFICATION: + if (selfCert == null) { + selfCert = zert; + } else if (selfCert.getCreationTime().before(cert.getCreationTime())) { + log.add(LogType.MSG_KC_UAT_CERT_DUP, + indent); + modified = PGPPublicKey.removeCertification(modified, userAttribute, selfCert); + redundantCerts += 1; + selfCert = zert; + } else { + log.add(LogType.MSG_KC_UAT_CERT_DUP, + indent); + modified = PGPPublicKey.removeCertification(modified, userAttribute, zert); + redundantCerts += 1; + } + // If there is a revocation certificate, and it's older than this, drop it + if (revocation != null + && revocation.getCreationTime().before(selfCert.getCreationTime())) { + log.add(LogType.MSG_KC_UAT_REVOKE_OLD, + indent); + modified = PGPPublicKey.removeCertification(modified, userAttribute, revocation); + revocation = null; + redundantCerts += 1; + } + break; + + case PGPSignature.CERTIFICATION_REVOCATION: + // If this is older than the (latest) self cert, drop it + if (selfCert != null && selfCert.getCreationTime().after(zert.getCreationTime())) { + log.add(LogType.MSG_KC_UAT_REVOKE_OLD, + indent); + modified = PGPPublicKey.removeCertification(modified, userAttribute, zert); + redundantCerts += 1; + continue; + } + // first revocation? remember it. + if (revocation == null) { + revocation = zert; + // more revocations? at least one is superfluous, then. + } else if (revocation.getCreationTime().before(cert.getCreationTime())) { + log.add(LogType.MSG_KC_UAT_REVOKE_DUP, + indent); + modified = PGPPublicKey.removeCertification(modified, userAttribute, revocation); + redundantCerts += 1; + revocation = zert; + } else { + log.add(LogType.MSG_KC_UAT_REVOKE_DUP, + indent); + modified = PGPPublicKey.removeCertification(modified, userAttribute, zert); + redundantCerts += 1; + } + break; + } + } + } + + // If no valid certificate (if only a revocation) remains, drop it + if (selfCert == null && revocation == null) { + log.add(LogType.MSG_KC_UAT_REMOVE, + indent); + modified = PGPPublicKey.removeCertification(modified, userAttribute); + } + + } finally { + indent -= 1; + } + } + + // Replace modified key in the keyring ring = replacePublicKey(ring, modified); indent -= 1; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedSignature.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedSignature.java index c395ca52d..3dc02d3ed 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedSignature.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedSignature.java @@ -29,6 +29,7 @@ import org.spongycastle.openpgp.PGPObjectFactory; import org.spongycastle.openpgp.PGPPublicKey; import org.spongycastle.openpgp.PGPSignature; import org.spongycastle.openpgp.PGPSignatureList; +import org.spongycastle.openpgp.PGPUserAttributeSubpacketVector; import org.spongycastle.openpgp.operator.jcajce.JcaPGPContentVerifierBuilderProvider; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; @@ -199,6 +200,14 @@ public class WrappedSignature { } } + boolean verifySignature(PGPPublicKey key, PGPUserAttributeSubpacketVector attribute) throws PgpGeneralException { + try { + return mSig.verifyCertification(attribute, key); + } catch (PGPException e) { + throw new PgpGeneralException("Error!", e); + } + } + public boolean verifySignature(UncachedPublicKey key, byte[] rawUserId) throws PgpGeneralException { return verifySignature(key.getPublicKey(), rawUserId); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/LinkedIdentity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/LinkedIdentity.java new file mode 100644 index 000000000..dcbaa1c1c --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/LinkedIdentity.java @@ -0,0 +1,160 @@ +package org.sufficientlysecure.keychain.pgp.affirmation; + +import org.spongycastle.bcpg.UserAttributeSubpacket; +import org.spongycastle.util.Strings; +import org.spongycastle.util.encoders.Hex; +import org.sufficientlysecure.keychain.Constants; +import org.sufficientlysecure.keychain.util.Log; + +import java.net.URI; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map.Entry; +import java.util.Set; + +public class LinkedIdentity { + + protected byte[] mData; + public final String mNonce; + public final URI mSubUri; + final Set mFlags; + final HashMap mParams; + + protected LinkedIdentity(byte[] data, String nonce, Set flags, + HashMap params, URI subUri) { + if ( ! nonce.matches("[0-9a-zA-Z]+")) { + throw new AssertionError("bug: nonce must be hexstring!"); + } + + mData = data; + mNonce = nonce; + mFlags = flags; + mParams = params; + mSubUri = subUri; + } + + LinkedIdentity(String nonce, Set flags, + HashMap params, URI subUri) { + this(null, nonce, flags, params, subUri); + } + + public byte[] encode() { + if (mData != null) { + return mData; + } + + StringBuilder b = new StringBuilder(); + b.append("pgpid:"); + + // add flags + if (mFlags != null) { + boolean first = true; + for (String flag : mFlags) { + if (!first) { + b.append(";"); + } + first = false; + b.append(flag); + } + } + + // add parameters + if (mParams != null) { + boolean first = true; + Iterator> it = mParams.entrySet().iterator(); + while (it.hasNext()) { + if (!first) { + b.append(";"); + } + first = false; + Entry entry = it.next(); + b.append(entry.getKey()).append("=").append(entry.getValue()); + } + } + + b.append("@"); + b.append(mSubUri); + + byte[] nonceBytes = Hex.decode(mNonce); + byte[] data = Strings.toUTF8ByteArray(b.toString()); + + byte[] result = new byte[data.length+12]; + System.arraycopy(nonceBytes, 0, result, 0, 12); + System.arraycopy(data, 0, result, 12, result.length); + + return result; + } + + /** This method parses an affirmation from a UserAttributeSubpacket, or returns null if the + * subpacket can not be parsed as a valid affirmation. + */ + public static LinkedIdentity parseAffirmation(UserAttributeSubpacket subpacket) { + if (subpacket.getType() != 100) { + return null; + } + + byte[] data = subpacket.getData(); + String nonce = Hex.toHexString(data, 0, 12); + + try { + return parseUri(nonce, Strings.fromUTF8ByteArray(Arrays.copyOfRange(data, 12, data.length))); + + } catch (IllegalArgumentException e) { + Log.e(Constants.TAG, "error parsing uri in (suspected) affirmation packet"); + return null; + } + } + + protected static LinkedIdentity parseUri (String nonce, String uriString) { + URI uri = URI.create(uriString); + + if ("pgpid".equals(uri.getScheme())) { + Log.e(Constants.TAG, "unknown uri scheme in (suspected) affirmation packet"); + return null; + } + + if (!uri.isOpaque()) { + Log.e(Constants.TAG, "non-opaque uri in (suspected) affirmation packet"); + return null; + } + + String specific = uri.getSchemeSpecificPart(); + if (!specific.contains("@")) { + Log.e(Constants.TAG, "unknown uri scheme in affirmation packet"); + return null; + } + + String[] pieces = specific.split("@", 2); + URI subUri = URI.create(pieces[1]); + + Set flags = new HashSet(); + HashMap params = new HashMap(); + { + String[] rawParams = pieces[0].split(";"); + for (String param : rawParams) { + String[] p = param.split("=", 2); + if (p.length == 1) { + flags.add(param); + } else { + params.put(p[0], p[1]); + } + } + } + + return new LinkedIdentity(nonce, flags, params, subUri); + + } + + public static String generateNonce() { + // TODO make this actually random + // byte[] data = new byte[96]; + // new SecureRandom().nextBytes(data); + // return Hex.toHexString(data); + + // debug for now + return "0123456789ABCDEF01234567"; + } + +} diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 301de0be1..4b5c46a5f 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -760,8 +760,23 @@ "Removing outdated revocation certificate for user ID '%s'" "No valid self-certificate found for user ID '%s', removing from ring" "Removing invalid user ID '%s'" - "Removing duplicate user ID '%s'. The secret key contained two of them. This may result in missing certificates!" + "Removing duplicate user ID '%s'. The keyring contained two of them. This may result in missing certificates!" "User id does not verify as UTF-8!" + "Processing user attribute of type JPEG" + "Processing user attribute of unknown type" + "Removing bad self certificate for user attribute" + "Removing user attribute certificate with 'local' flag" + "Removing user attribute with future timestamp" + "Removing user attribute certificate of unknown type (%s)" + "Removing bad self certificate for user attribute" + "Removing outdated self certificate for user attribute" + "Removing duplicate user attribute. The keyring contained two of them. This may result in missing certificates!" + "Removing foreign user attribute certificate by" + "Removing redundant revocation certificate for user attribute" + "Removing outdated revocation certificate for user attribute" + "No valid self-certificate found for user attribute, removing from ring" + "Removing invalid user attribute" + "User id does not verify as UTF-8!" "New public subkey found, but secret subkey dummy generation is not supported!" From fc85ef71a87032e97d2fc3d83baa7fc507f0fd7b Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Tue, 13 Jan 2015 00:10:59 +0100 Subject: [PATCH 022/189] remove LinkedIdentity (committed earlier by accident) --- .../pgp/affirmation/LinkedIdentity.java | 160 ------------------ 1 file changed, 160 deletions(-) delete mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/LinkedIdentity.java diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/LinkedIdentity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/LinkedIdentity.java deleted file mode 100644 index dcbaa1c1c..000000000 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/affirmation/LinkedIdentity.java +++ /dev/null @@ -1,160 +0,0 @@ -package org.sufficientlysecure.keychain.pgp.affirmation; - -import org.spongycastle.bcpg.UserAttributeSubpacket; -import org.spongycastle.util.Strings; -import org.spongycastle.util.encoders.Hex; -import org.sufficientlysecure.keychain.Constants; -import org.sufficientlysecure.keychain.util.Log; - -import java.net.URI; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map.Entry; -import java.util.Set; - -public class LinkedIdentity { - - protected byte[] mData; - public final String mNonce; - public final URI mSubUri; - final Set mFlags; - final HashMap mParams; - - protected LinkedIdentity(byte[] data, String nonce, Set flags, - HashMap params, URI subUri) { - if ( ! nonce.matches("[0-9a-zA-Z]+")) { - throw new AssertionError("bug: nonce must be hexstring!"); - } - - mData = data; - mNonce = nonce; - mFlags = flags; - mParams = params; - mSubUri = subUri; - } - - LinkedIdentity(String nonce, Set flags, - HashMap params, URI subUri) { - this(null, nonce, flags, params, subUri); - } - - public byte[] encode() { - if (mData != null) { - return mData; - } - - StringBuilder b = new StringBuilder(); - b.append("pgpid:"); - - // add flags - if (mFlags != null) { - boolean first = true; - for (String flag : mFlags) { - if (!first) { - b.append(";"); - } - first = false; - b.append(flag); - } - } - - // add parameters - if (mParams != null) { - boolean first = true; - Iterator> it = mParams.entrySet().iterator(); - while (it.hasNext()) { - if (!first) { - b.append(";"); - } - first = false; - Entry entry = it.next(); - b.append(entry.getKey()).append("=").append(entry.getValue()); - } - } - - b.append("@"); - b.append(mSubUri); - - byte[] nonceBytes = Hex.decode(mNonce); - byte[] data = Strings.toUTF8ByteArray(b.toString()); - - byte[] result = new byte[data.length+12]; - System.arraycopy(nonceBytes, 0, result, 0, 12); - System.arraycopy(data, 0, result, 12, result.length); - - return result; - } - - /** This method parses an affirmation from a UserAttributeSubpacket, or returns null if the - * subpacket can not be parsed as a valid affirmation. - */ - public static LinkedIdentity parseAffirmation(UserAttributeSubpacket subpacket) { - if (subpacket.getType() != 100) { - return null; - } - - byte[] data = subpacket.getData(); - String nonce = Hex.toHexString(data, 0, 12); - - try { - return parseUri(nonce, Strings.fromUTF8ByteArray(Arrays.copyOfRange(data, 12, data.length))); - - } catch (IllegalArgumentException e) { - Log.e(Constants.TAG, "error parsing uri in (suspected) affirmation packet"); - return null; - } - } - - protected static LinkedIdentity parseUri (String nonce, String uriString) { - URI uri = URI.create(uriString); - - if ("pgpid".equals(uri.getScheme())) { - Log.e(Constants.TAG, "unknown uri scheme in (suspected) affirmation packet"); - return null; - } - - if (!uri.isOpaque()) { - Log.e(Constants.TAG, "non-opaque uri in (suspected) affirmation packet"); - return null; - } - - String specific = uri.getSchemeSpecificPart(); - if (!specific.contains("@")) { - Log.e(Constants.TAG, "unknown uri scheme in affirmation packet"); - return null; - } - - String[] pieces = specific.split("@", 2); - URI subUri = URI.create(pieces[1]); - - Set flags = new HashSet(); - HashMap params = new HashMap(); - { - String[] rawParams = pieces[0].split(";"); - for (String param : rawParams) { - String[] p = param.split("=", 2); - if (p.length == 1) { - flags.add(param); - } else { - params.put(p[0], p[1]); - } - } - } - - return new LinkedIdentity(nonce, flags, params, subUri); - - } - - public static String generateNonce() { - // TODO make this actually random - // byte[] data = new byte[96]; - // new SecureRandom().nextBytes(data); - // return Hex.toHexString(data); - - // debug for now - return "0123456789ABCDEF01234567"; - } - -} From 2f0eb3fbd644291272829c15165193e0edb0906f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 13 Jan 2015 19:05:26 +0100 Subject: [PATCH 023/189] Set minSdk to 14 --- OpenKeychain/build.gradle | 6 +++--- OpenKeychain/src/main/AndroidManifest.xml | 5 +---- extern/openpgp-api-lib | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/OpenKeychain/build.gradle b/OpenKeychain/build.gradle index ff3a63fd7..1c3fed303 100644 --- a/OpenKeychain/build.gradle +++ b/OpenKeychain/build.gradle @@ -3,8 +3,8 @@ apply plugin: 'com.android.application' dependencies { // NOTE: Always use fixed version codes not dynamic ones, e.g. 0.7.3 instead of 0.7.+, see README for more information - compile 'com.android.support:support-v4:21.0.2' - compile 'com.android.support:appcompat-v7:21.0.2' + compile 'com.android.support:support-v4:21.0.3' + compile 'com.android.support:appcompat-v7:21.0.3' compile project(':extern:openpgp-api-lib') compile project(':extern:openkeychain-api-lib') compile project(':extern:html-textview') @@ -28,7 +28,7 @@ android { buildToolsVersion '21.1.1' defaultConfig { - minSdkVersion 9 + minSdkVersion 14 targetSdkVersion 21 } diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml index 9fc79e6f1..ab6c4334b 100644 --- a/OpenKeychain/src/main/AndroidManifest.xml +++ b/OpenKeychain/src/main/AndroidManifest.xml @@ -31,10 +31,7 @@ For OI Filemanager it makes no difference, gpg files can't be associated --> - - - - + Date: Tue, 13 Jan 2015 20:35:27 +0100 Subject: [PATCH 024/189] add support for user attributes in merge() routine --- .../keychain/pgp/UncachedKeyRing.java | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedKeyRing.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedKeyRing.java index 404228a3e..04fb955fa 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedKeyRing.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/UncachedKeyRing.java @@ -1018,8 +1018,8 @@ public class UncachedKeyRing { /** This operation merges information from a different keyring, returning a combined * UncachedKeyRing. * - * The combined keyring contains the subkeys and user ids of both input keyrings, but it does - * not necessarily have the canonicalized property. + * The combined keyring contains the subkeys, user ids and user attributes of both input + * keyrings, but it does not necessarily have the canonicalized property. * * @param other The UncachedKeyRing to merge. Must not be empty, and of the same masterKeyId * @return A consolidated UncachedKeyRing with the data of both input keyrings. Same type as @@ -1139,6 +1139,32 @@ public class UncachedKeyRing { modified = PGPPublicKey.addCertification(modified, rawUserId, cert); } } + + // Copy over all user attribute certificates + for (PGPUserAttributeSubpacketVector vector : + new IterableIterator(key.getUserAttributes())) { + @SuppressWarnings("unchecked") + Iterator signaturesIt = key.getSignaturesForUserAttribute(vector); + // no signatures for this user attribute attribute, skip it + if (signaturesIt == null) { + continue; + } + for (PGPSignature cert : new IterableIterator(signaturesIt)) { + // Don't merge foreign stuff into secret keys + if (cert.getKeyID() != masterKeyId && isSecret()) { + continue; + } + byte[] encoded = cert.getEncoded(); + // Known cert, skip it + if (certs.contains(encoded)) { + continue; + } + newCerts += 1; + certs.add(encoded); + modified = PGPPublicKey.addCertification(modified, vector, cert); + } + } + // If anything changed, save the updated (sub)key if (modified != resultKey) { result = replacePublicKey(result, modified); From 84eece622bb321c316a230432b85559ab2067084 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Mon, 12 Jan 2015 20:59:37 +0100 Subject: [PATCH 025/189] support addition of user attributes Conflicts: OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java OpenKeychain/src/main/res/values/strings.xml --- .../operations/results/OperationResult.java | 2 + .../keychain/pgp/PgpKeyOperation.java | 52 +++++++++++++++++-- .../keychain/service/SaveKeyringParcel.java | 6 +++ OpenKeychain/src/main/res/values/strings.xml | 3 ++ 4 files changed, 60 insertions(+), 3 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java index 5884dd2d5..9824173f5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java @@ -495,6 +495,8 @@ public abstract class OperationResult implements Parcelable { MSG_MF_UID_PRIMARY (LogLevel.INFO, R.string.msg_mf_uid_primary), MSG_MF_UID_REVOKE (LogLevel.INFO, R.string.msg_mf_uid_revoke), MSG_MF_UID_ERROR_EMPTY (LogLevel.ERROR, R.string.msg_mf_uid_error_empty), + MSG_MF_UAT_ADD_IMAGE (LogLevel.INFO, R.string.msg_mf_uat_add_image), + MSG_MF_UAT_ADD_UNKNOWN (LogLevel.INFO, R.string.msg_mf_uat_add_unknown), MSG_MF_UNLOCK_ERROR (LogLevel.ERROR, R.string.msg_mf_unlock_error), MSG_MF_UNLOCK (LogLevel.DEBUG, R.string.msg_mf_unlock), 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 128928bb3..8facbfd2a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpKeyOperation.java @@ -34,6 +34,7 @@ import org.spongycastle.openpgp.PGPSecretKeyRing; import org.spongycastle.openpgp.PGPSignature; import org.spongycastle.openpgp.PGPSignatureGenerator; import org.spongycastle.openpgp.PGPSignatureSubpacketGenerator; +import org.spongycastle.openpgp.PGPUserAttributeSubpacketVector; import org.spongycastle.openpgp.operator.PBESecretKeyDecryptor; import org.spongycastle.openpgp.operator.PBESecretKeyEncryptor; import org.spongycastle.openpgp.operator.PGPContentSignerBuilder; @@ -478,7 +479,7 @@ public class PgpKeyOperation { PGPPublicKey modifiedPublicKey = masterPublicKey; // 2a. Add certificates for new user ids - subProgressPush(15, 25); + subProgressPush(15, 23); for (int i = 0; i < saveParcel.mAddUserIds.size(); i++) { progress(R.string.progress_modify_adduid, (i - 1) * (100 / saveParcel.mAddUserIds.size())); @@ -522,8 +523,33 @@ public class PgpKeyOperation { } subProgressPop(); - // 2b. Add revocations for revoked user ids - subProgressPush(25, 40); + // 2b. Add certificates for new user ids + subProgressPush(23, 32); + for (int i = 0; i < saveParcel.mAddUserAttribute.size(); i++) { + + progress(R.string.progress_modify_adduat, (i - 1) * (100 / saveParcel.mAddUserAttribute.size())); + WrappedUserAttribute attribute = saveParcel.mAddUserAttribute.get(i); + + switch (attribute.getType()) { + case WrappedUserAttribute.UAT_UNKNOWN: + log.add(LogType.MSG_MF_UAT_ADD_UNKNOWN, indent); + break; + case WrappedUserAttribute.UAT_IMAGE: + log.add(LogType.MSG_MF_UAT_ADD_IMAGE, indent); + break; + } + + PGPUserAttributeSubpacketVector vector = attribute.getVector(); + + // generate and add new certificate + PGPSignature cert = generateUserAttributeSignature(masterPrivateKey, + masterPublicKey, vector); + modifiedPublicKey = PGPPublicKey.addCertification(modifiedPublicKey, vector, cert); + } + subProgressPop(); + + // 2c. Add revocations for revoked user ids + subProgressPush(32, 40); for (int i = 0; i < saveParcel.mRevokeUserIds.size(); i++) { progress(R.string.progress_modify_revokeuid, (i - 1) * (100 / saveParcel.mRevokeUserIds.size())); @@ -1174,6 +1200,26 @@ public class PgpKeyOperation { return sGen.generateCertification(userId, pKey); } + private static PGPSignature generateUserAttributeSignature( + PGPPrivateKey masterPrivateKey, PGPPublicKey pKey, + PGPUserAttributeSubpacketVector vector) + throws IOException, PGPException, SignatureException { + PGPContentSignerBuilder signerBuilder = new JcaPGPContentSignerBuilder( + masterPrivateKey.getPublicKeyPacket().getAlgorithm(), HashAlgorithmTags.SHA512) + .setProvider(Constants.BOUNCY_CASTLE_PROVIDER_NAME); + PGPSignatureGenerator sGen = new PGPSignatureGenerator(signerBuilder); + + PGPSignatureSubpacketGenerator hashedPacketsGen = new PGPSignatureSubpacketGenerator(); + { + /* critical subpackets: we consider those important for a modern pgp implementation */ + hashedPacketsGen.setSignatureCreationTime(true, new Date()); + } + + sGen.setHashedSubpackets(hashedPacketsGen.generate()); + sGen.init(PGPSignature.POSITIVE_CERTIFICATION, masterPrivateKey); + return sGen.generateCertification(vector, pKey); + } + private static PGPSignature generateRevocationSignature( PGPPrivateKey masterPrivateKey, PGPPublicKey pKey, String userId) throws IOException, PGPException, SignatureException { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java index 810190fee..a314c8768 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java @@ -21,6 +21,7 @@ package org.sufficientlysecure.keychain.service; import android.os.Parcel; import android.os.Parcelable; +import org.sufficientlysecure.keychain.pgp.WrappedUserAttribute; import java.io.Serializable; import java.util.ArrayList; @@ -49,6 +50,7 @@ public class SaveKeyringParcel implements Parcelable { public ChangeUnlockParcel mNewUnlock; public ArrayList mAddUserIds; + public ArrayList mAddUserAttribute; public ArrayList mAddSubKeys; public ArrayList mChangeSubKeys; @@ -71,6 +73,7 @@ public class SaveKeyringParcel implements Parcelable { public void reset() { mNewUnlock = null; mAddUserIds = new ArrayList(); + mAddUserAttribute = new ArrayList(); mAddSubKeys = new ArrayList(); mChangePrimaryUserId = null; mChangeSubKeys = new ArrayList(); @@ -162,6 +165,7 @@ public class SaveKeyringParcel implements Parcelable { mNewUnlock = source.readParcelable(getClass().getClassLoader()); mAddUserIds = source.createStringArrayList(); + mAddUserAttribute = (ArrayList) source.readSerializable(); mAddSubKeys = (ArrayList) source.readSerializable(); mChangeSubKeys = (ArrayList) source.readSerializable(); @@ -184,6 +188,7 @@ public class SaveKeyringParcel implements Parcelable { destination.writeParcelable(mNewUnlock, 0); destination.writeStringList(mAddUserIds); + destination.writeSerializable(mAddUserAttribute); destination.writeSerializable(mAddSubKeys); destination.writeSerializable(mChangeSubKeys); @@ -214,6 +219,7 @@ public class SaveKeyringParcel implements Parcelable { String out = "mMasterKeyId: " + mMasterKeyId + "\n"; out += "mNewUnlock: " + mNewUnlock + "\n"; out += "mAddUserIds: " + mAddUserIds + "\n"; + out += "mAddUserAttribute: " + mAddUserAttribute + "\n"; out += "mAddSubKeys: " + mAddSubKeys + "\n"; out += "mChangeSubKeys: " + mChangeSubKeys + "\n"; out += "mChangePrimaryUserId: " + mChangePrimaryUserId + "\n"; diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 4b5c46a5f..6e2b84642 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -309,6 +309,7 @@ "unlocking keyring…" "adding user IDs…" + "adding user attributes…" "revoking user IDs…" "changing primary user ID…" "modifying subkeys…" @@ -839,6 +840,8 @@ "Changing primary user ID to %s" "Revoking user ID %s" "User ID must not be empty!" + "Adding user attribute of type image" + "Adding user attribute of unknown type" "Error unlocking keyring!" "Unlocking keyring" From abd12116134a07a79672d38d040c16f2e2dd20b4 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Tue, 13 Jan 2015 20:34:19 +0100 Subject: [PATCH 026/189] hack to make WrappedUserAttribute serializable Conflicts: OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedUserAttribute.java --- .../keychain/pgp/WrappedUserAttribute.java | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedUserAttribute.java diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedUserAttribute.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedUserAttribute.java new file mode 100644 index 000000000..2359d48ac --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/WrappedUserAttribute.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2014 Vincent Breitmoser + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.sufficientlysecure.keychain.pgp; + +import org.spongycastle.bcpg.BCPGInputStream; +import org.spongycastle.bcpg.BCPGOutputStream; +import org.spongycastle.bcpg.Packet; +import org.spongycastle.bcpg.UserAttributePacket; +import org.spongycastle.bcpg.UserAttributeSubpacket; +import org.spongycastle.bcpg.UserAttributeSubpacketTags; +import org.spongycastle.openpgp.PGPUserAttributeSubpacketVector; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectStreamException; +import java.io.Serializable; + +public class WrappedUserAttribute implements Serializable { + + public static final int UAT_UNKNOWN = 0; + public static final int UAT_IMAGE = UserAttributeSubpacketTags.IMAGE_ATTRIBUTE; + + private PGPUserAttributeSubpacketVector mVector; + + WrappedUserAttribute(PGPUserAttributeSubpacketVector vector) { + mVector = vector; + } + + PGPUserAttributeSubpacketVector getVector() { + return mVector; + } + + public int getType() { + if (mVector.getSubpacket(UserAttributeSubpacketTags.IMAGE_ATTRIBUTE) != null) { + return UAT_IMAGE; + } + return 0; + } + + public static WrappedUserAttribute fromSubpacket (int type, byte[] data) { + UserAttributeSubpacket subpacket = new UserAttributeSubpacket(type, data); + PGPUserAttributeSubpacketVector vector = new PGPUserAttributeSubpacketVector( + new UserAttributeSubpacket[] { subpacket }); + + return new WrappedUserAttribute(vector); + + } + + /** Writes this object to an ObjectOutputStream. */ + private void writeObject(java.io.ObjectOutputStream out) throws IOException { + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + BCPGOutputStream bcpg = new BCPGOutputStream(baos); + bcpg.writePacket(new UserAttributePacket(mVector.toSubpacketArray())); + out.writeObject(baos.toByteArray()); + + } + + private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException { + + byte[] data = (byte[]) in.readObject(); + BCPGInputStream bcpg = new BCPGInputStream(new ByteArrayInputStream(data)); + Packet p = bcpg.readPacket(); + if ( ! UserAttributePacket.class.isInstance(p)) { + throw new IOException("Could not decode UserAttributePacket!"); + } + mVector = new PGPUserAttributeSubpacketVector(((UserAttributePacket) p).getSubpackets()); + + } + + private void readObjectNoData() throws ObjectStreamException { + } + +} From 33ab8562143173a2ea8418298ee5883999234d16 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Tue, 13 Jan 2015 20:53:38 +0100 Subject: [PATCH 027/189] update spongycastle with more public methods for WrappedUserAttribute --- extern/spongycastle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/spongycastle b/extern/spongycastle index 1d9ee197d..f13d9c202 160000 --- a/extern/spongycastle +++ b/extern/spongycastle @@ -1 +1 @@ -Subproject commit 1d9ee197d8fcc18dcdd1ae9649a5dc53e910b18c +Subproject commit f13d9c202f7470ede75f2c02cc8c578acd3acee9 From 2e3545949ba9ab48ed21cb2198c9f0d2b8691ba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 13 Jan 2015 21:55:53 +0100 Subject: [PATCH 028/189] Start working on Material Design --- OpenKeychain/build.gradle | 1 + .../keychain/remote/ui/AppsListActivity.java | 7 +- .../keychain/ui/BaseActivity.java | 48 ++++++++++++ .../keychain/ui/DecryptActivity.java | 7 +- .../keychain/ui/DrawerActivity.java | 7 +- .../keychain/ui/EncryptFilesActivity.java | 7 +- .../keychain/ui/EncryptTextActivity.java | 7 +- .../keychain/ui/KeyListActivity.java | 10 ++- .../keychain/ui/SafeSlingerActivity.java | 50 +++---------- .../res/layout-v11/safe_slinger_activity.xml | 75 ------------------- .../res/layout/create_key_final_fragment.xml | 4 +- .../src/main/res/layout/key_list_content.xml | 67 ++++++++++------- .../main/res/layout/safe_slinger_activity.xml | 11 +-- OpenKeychain/src/main/res/layout/toolbar.xml | 9 +++ .../res/values-v11/themes_keychaintheme.xml | 2 +- .../src/main/res/values-v21/themes.xml | 11 +++ OpenKeychain/src/main/res/values/colors.xml | 53 ++++++++++--- OpenKeychain/src/main/res/values/styles.xml | 33 +++++++- OpenKeychain/src/main/res/values/themes.xml | 12 +++ Resources/material_icons_list.txt | 4 + 20 files changed, 246 insertions(+), 179 deletions(-) create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java delete mode 100644 OpenKeychain/src/main/res/layout-v11/safe_slinger_activity.xml create mode 100644 OpenKeychain/src/main/res/layout/toolbar.xml create mode 100644 OpenKeychain/src/main/res/values-v21/themes.xml create mode 100644 OpenKeychain/src/main/res/values/themes.xml create mode 100644 Resources/material_icons_list.txt diff --git a/OpenKeychain/build.gradle b/OpenKeychain/build.gradle index 1c3fed303..2eba50e4e 100644 --- a/OpenKeychain/build.gradle +++ b/OpenKeychain/build.gradle @@ -5,6 +5,7 @@ dependencies { compile 'com.android.support:support-v4:21.0.3' compile 'com.android.support:appcompat-v7:21.0.3' + compile 'com.android.support:recyclerview-v7:21.0.3' compile project(':extern:openpgp-api-lib') compile project(':extern:openkeychain-api-lib') compile project(':extern:html-textview') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AppsListActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AppsListActivity.java index 11b0deb33..ba27b22f2 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AppsListActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/AppsListActivity.java @@ -28,9 +28,12 @@ public class AppsListActivity extends DrawerActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.api_apps_list_activity); - activateDrawerNavigation(savedInstanceState); } + @Override + protected int getLayoutResource() { + return R.layout.api_apps_list_activity; + } + } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java new file mode 100644 index 000000000..6e83f6101 --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BaseActivity.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2015 Dominik Schürmann + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.sufficientlysecure.keychain.ui; + +import android.os.Bundle; +import android.support.v7.app.ActionBarActivity; +import android.support.v7.widget.Toolbar; + +import org.sufficientlysecure.keychain.R; + +/** + * Sets action bar + */ +public abstract class BaseActivity extends ActionBarActivity { + private Toolbar toolbar; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(getLayoutResource()); + toolbar = (Toolbar) findViewById(R.id.toolbar); + if (toolbar != null) { + setSupportActionBar(toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } + } + + protected abstract int getLayoutResource(); + + protected void setActionBarIcon(int iconRes) { + toolbar.setNavigationIcon(iconRes); + } +} diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptActivity.java index 681e22e1e..ccff3fd6a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptActivity.java @@ -40,8 +40,6 @@ public class DecryptActivity extends DrawerActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.decrypt_activity); - activateDrawerNavigation(savedInstanceState); View actionFile = findViewById(R.id.decrypt_files); @@ -66,6 +64,11 @@ public class DecryptActivity extends DrawerActivity { }); } + @Override + protected int getLayoutResource() { + return R.layout.decrypt_activity; + } + @TargetApi(VERSION_CODES.HONEYCOMB) @Override protected void onResume() { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DrawerActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DrawerActivity.java index da46de486..5bf0e75dd 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DrawerActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DrawerActivity.java @@ -42,7 +42,7 @@ import android.widget.TextView; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; -public class DrawerActivity extends ActionBarActivity { +public abstract class DrawerActivity extends BaseActivity { private FixedDrawerLayout mDrawerLayout; private ListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; @@ -96,8 +96,9 @@ public class DrawerActivity extends ActionBarActivity { // enable ActionBar app icon to behave as action to toggle nav drawer // if the drawer is not locked if (!mIsDrawerLocked) { - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setHomeButtonEnabled(true); + // TODO +// getSupportActionBar().setDisplayHomeAsUpEnabled(true); +// getSupportActionBar().setHomeButtonEnabled(true); } // ActionBarDrawerToggle ties together the the proper interactions diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java index 054d85323..d0e66156c 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesActivity.java @@ -309,8 +309,6 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.encrypt_files_activity); - // if called with an intent action, do not init drawer navigation if (ACTION_ENCRYPT_DATA.equals(getIntent().getAction())) { // lock drawer @@ -327,6 +325,11 @@ public class EncryptFilesActivity extends EncryptActivity implements EncryptActi mUseArmor = Preferences.getPreferences(this).getDefaultAsciiArmor(); } + @Override + protected int getLayoutResource() { + return R.layout.encrypt_files_activity; + } + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.encrypt_file_activity, menu); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextActivity.java index 958daa122..0850ead3b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextActivity.java @@ -288,8 +288,6 @@ public class EncryptTextActivity extends EncryptActivity implements EncryptActiv public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.encrypt_text_activity); - // if called with an intent action, do not init drawer navigation if (ACTION_ENCRYPT_TEXT.equals(getIntent().getAction())) { // lock drawer @@ -304,6 +302,11 @@ public class EncryptTextActivity extends EncryptActivity implements EncryptActiv updateModeFragment(); } + @Override + protected int getLayoutResource() { + return R.layout.encrypt_text_activity; + } + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.encrypt_text_activity, menu); 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 ba03400d7..6b3cf5fe4 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListActivity.java @@ -50,6 +50,7 @@ public class KeyListActivity extends DrawerActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); +// setActionBarIcon(R.drawable.ic_ab_drawer); setTitle(R.string.nav_keys); @@ -63,10 +64,13 @@ public class KeyListActivity extends DrawerActivity { mExportHelper = new ExportHelper(this); - setContentView(R.layout.key_list_activity); - // now setup navigation drawer in DrawerActivity... - activateDrawerNavigation(savedInstanceState); +// activateDrawerNavigation(savedInstanceState); + } + + @Override + protected int getLayoutResource() { + return R.layout.key_list_activity; } @Override diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java index 20e1bbe97..c91d91ad9 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java @@ -73,47 +73,15 @@ public class SafeSlingerActivity extends ActionBarActivity { mMasterKeyId = getIntent().getLongExtra(EXTRA_MASTER_KEY_ID, 0); - // NOTE: there are two versions of this layout, for API >= 11 and one for < 11 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { - NumberPicker picker = (NumberPicker) findViewById(R.id.safe_slinger_picker); - picker.setMinValue(2); - picker.setMaxValue(10); - picker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { - @Override - public void onValueChange(NumberPicker picker, int oldVal, int newVal) { - mSelectedNumber = newVal; - } - }); - } else { - Spinner spinner = (Spinner) findViewById(R.id.safe_slinger_spinner); - - List list = new ArrayList(); - list.add("2"); - list.add("3"); - list.add("4"); - list.add("5"); - list.add("6"); - list.add("7"); - list.add("8"); - list.add("9"); - list.add("10"); - - ArrayAdapter dataAdapter = new ArrayAdapter(this, - android.R.layout.simple_spinner_item, list); - dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - spinner.setAdapter(dataAdapter); - spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - mSelectedNumber = position + 2; - } - - @Override - public void onNothingSelected(AdapterView parent) { - - } - }); - } + NumberPicker picker = (NumberPicker) findViewById(R.id.safe_slinger_picker); + picker.setMinValue(2); + picker.setMaxValue(10); + picker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { + @Override + public void onValueChange(NumberPicker picker, int oldVal, int newVal) { + mSelectedNumber = newVal; + } + }); ImageView buttonIcon = (ImageView) findViewById(R.id.safe_slinger_button_image); buttonIcon.setColorFilter(getResources().getColor(R.color.tertiary_text_light), diff --git a/OpenKeychain/src/main/res/layout-v11/safe_slinger_activity.xml b/OpenKeychain/src/main/res/layout-v11/safe_slinger_activity.xml deleted file mode 100644 index 7e4410f85..000000000 --- a/OpenKeychain/src/main/res/layout-v11/safe_slinger_activity.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml b/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml index 7f7b2cdce..189579f91 100644 --- a/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml +++ b/OpenKeychain/src/main/res/layout/create_key_final_fragment.xml @@ -86,7 +86,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/create_key_rsa" - android:textColor="@color/android_green_dark" + android:textColor="@color/android_green_light" android:textAppearance="?android:attr/textAppearanceMedium" android:minHeight="?android:attr/listPreferredItemHeight" android:clickable="true" @@ -128,7 +128,7 @@ android:layout_marginTop="16dp" android:layout_marginBottom="8dp" android:text="@string/create_key_final_robot_text" - android:textColor="@color/android_green_dark" + android:textColor="@color/android_green_light" android:textAppearance="?android:attr/textAppearanceMedium" android:drawableLeft="@drawable/create_key_robot" android:drawablePadding="8dp" /> diff --git a/OpenKeychain/src/main/res/layout/key_list_content.xml b/OpenKeychain/src/main/res/layout/key_list_content.xml index dd230806f..7179793b5 100644 --- a/OpenKeychain/src/main/res/layout/key_list_content.xml +++ b/OpenKeychain/src/main/res/layout/key_list_content.xml @@ -1,47 +1,56 @@ - - + - + + - - --> - - + android:layout_height="0dp" + android:layout_weight="1" /> + - - \ No newline at end of file + diff --git a/OpenKeychain/src/main/res/layout/safe_slinger_activity.xml b/OpenKeychain/src/main/res/layout/safe_slinger_activity.xml index 39f4b7238..7e4410f85 100644 --- a/OpenKeychain/src/main/res/layout/safe_slinger_activity.xml +++ b/OpenKeychain/src/main/res/layout/safe_slinger_activity.xml @@ -16,17 +16,18 @@ + android:layout_weight="1" + android:gravity="center_vertical"/> - + android:id="@+id/safe_slinger_picker" + /> diff --git a/OpenKeychain/src/main/res/layout/toolbar.xml b/OpenKeychain/src/main/res/layout/toolbar.xml new file mode 100644 index 000000000..d0c5e4f99 --- /dev/null +++ b/OpenKeychain/src/main/res/layout/toolbar.xml @@ -0,0 +1,9 @@ + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml b/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml index 4f13f81c6..6db455383 100644 --- a/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml +++ b/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml @@ -3,7 +3,7 @@ - + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/values/colors.xml b/OpenKeychain/src/main/res/values/colors.xml index a21f949d1..353e33058 100644 --- a/OpenKeychain/src/main/res/values/colors.xml +++ b/OpenKeychain/src/main/res/values/colors.xml @@ -1,8 +1,35 @@ - #aa66cc - #9933cc + + + + + + @color/material_deep_teal_200 + @color/material_deep_teal_500 + + #80000000 + + + #4CAF50 + #388E3C + + + #4CAF50 + #388E3C + #C8E6C9 + #536DFE + #212121 + #727272 + #FFFFFF + #B6B6B6 + + + + #212121 + #727272 + #cecbce #808080 #ffdd3333 @@ -10,14 +37,18 @@ #33999999 #33CCCCCC - - #ffff4444 - #ffCC0000 - #ffffbb33 - #ffFF8800 - #ff99cc00 - #ff669900 - #ffaa66cc - #ff9933CC + + #f44336 + #b71c1c + #ff9800 + #e65100 + #4caf50 + #1b5e20 + #673ab7 + #311b92 diff --git a/OpenKeychain/src/main/res/values/styles.xml b/OpenKeychain/src/main/res/values/styles.xml index 27cd1546a..11d2bfde4 100644 --- a/OpenKeychain/src/main/res/values/styles.xml +++ b/OpenKeychain/src/main/res/values/styles.xml @@ -2,7 +2,7 @@ - @@ -34,4 +34,35 @@ @drawable/selector_transparent_button + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/values/themes.xml b/OpenKeychain/src/main/res/values/themes.xml new file mode 100644 index 000000000..864e2805c --- /dev/null +++ b/OpenKeychain/src/main/res/values/themes.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/Resources/material_icons_list.txt b/Resources/material_icons_list.txt new file mode 100644 index 000000000..5204bab86 --- /dev/null +++ b/Resources/material_icons_list.txt @@ -0,0 +1,4 @@ +https://github.com/google/material-design-icons + +action: +ic_search_white_24dp.png From 862d1f1971a16d639dec47bd60226a959efe76b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 13 Jan 2015 22:18:40 +0100 Subject: [PATCH 029/189] Green --- ...apptheme_fastscroll_thumb_default_holo.png | Bin 260 -> 0 bytes ...apptheme_fastscroll_thumb_pressed_holo.png | Bin 467 -> 0 bytes ..._check_off_disabled_focused_holo_light.png | Bin 402 -> 398 bytes ...theme_btn_check_off_focused_holo_light.png | Bin 413 -> 413 bytes ...n_check_on_disabled_focused_holo_light.png | Bin 800 -> 792 bytes ...ntheme_btn_check_on_focused_holo_light.png | Bin 1699 -> 1668 bytes .../keychaintheme_btn_check_on_holo_light.png | Bin 1519 -> 1483 bytes ..._default_disabled_focused_holo_light.9.png | Bin 330 -> 327 bytes ...theme_btn_default_focused_holo_light.9.png | Bin 400 -> 398 bytes ..._radio_off_disabled_focused_holo_light.png | Bin 1398 -> 1420 bytes ...theme_btn_radio_off_focused_holo_light.png | Bin 1467 -> 1507 bytes ...keychaintheme_btn_radio_off_holo_light.png | Bin 736 -> 790 bytes ...n_radio_on_disabled_focused_holo_light.png | Bin 2383 -> 2366 bytes ...ntheme_btn_radio_on_focused_holo_light.png | Bin 2199 -> 2253 bytes .../keychaintheme_btn_radio_on_holo_light.png | Bin 1402 -> 1409 bytes ...ggle_off_disabled_focused_holo_light.9.png | Bin 0 -> 395 bytes ...e_btn_toggle_off_disabled_holo_light.9.png | Bin 0 -> 419 bytes ...me_btn_toggle_off_focused_holo_light.9.png | Bin 0 -> 387 bytes ...eme_btn_toggle_off_normal_holo_light.9.png | Bin 0 -> 459 bytes ...me_btn_toggle_off_pressed_holo_light.9.png | Bin 0 -> 419 bytes ...oggle_on_disabled_focused_holo_light.9.png | Bin 0 -> 420 bytes ...me_btn_toggle_on_disabled_holo_light.9.png | Bin 0 -> 514 bytes ...eme_btn_toggle_on_focused_holo_light.9.png | Bin 0 -> 428 bytes ...heme_btn_toggle_on_normal_holo_light.9.png | Bin 0 -> 523 bytes ...eme_btn_toggle_on_pressed_holo_light.9.png | Bin 0 -> 556 bytes ...aintheme_fastscroll_thumb_default_holo.png | Bin 0 -> 260 bytes ...aintheme_fastscroll_thumb_pressed_holo.png | Bin 0 -> 467 bytes .../keychaintheme_list_activated_holo.9.png | Bin 115 -> 115 bytes .../keychaintheme_list_focused_holo.9.png | Bin 139 -> 139 bytes ...aintheme_progress_primary_holo_light.9.png | Bin 381 -> 384 bytes ...ntheme_progress_secondary_holo_light.9.png | Bin 149 -> 149 bytes ...ntheme_progressbar_indeterminate_holo1.png | Bin 729 -> 785 bytes ...ntheme_progressbar_indeterminate_holo2.png | Bin 810 -> 866 bytes ...ntheme_progressbar_indeterminate_holo3.png | Bin 913 -> 977 bytes ...ntheme_progressbar_indeterminate_holo4.png | Bin 954 -> 1022 bytes ...ntheme_progressbar_indeterminate_holo5.png | Bin 840 -> 928 bytes ...ntheme_progressbar_indeterminate_holo6.png | Bin 960 -> 1037 bytes ...ntheme_progressbar_indeterminate_holo7.png | Bin 761 -> 812 bytes ...ntheme_progressbar_indeterminate_holo8.png | Bin 832 -> 886 bytes ...intheme_scrubber_control_disabled_holo.png | Bin 0 -> 845 bytes ...aintheme_scrubber_control_focused_holo.png | Bin 0 -> 1108 bytes ...haintheme_scrubber_control_normal_holo.png | Bin 0 -> 1371 bytes ...aintheme_scrubber_control_pressed_holo.png | Bin 0 -> 1721 bytes .../keychaintheme_scrubber_primary_holo.9.png | Bin 0 -> 148 bytes ...eychaintheme_scrubber_secondary_holo.9.png | Bin 0 -> 147 bytes ...chaintheme_scrubber_track_holo_light.9.png | Bin 0 -> 169 bytes ...haintheme_spinner_default_holo_light.9.png | Bin 304 -> 312 bytes ...haintheme_spinner_focused_holo_light.9.png | Bin 499 -> 481 bytes .../keychaintheme_text_select_handle_left.png | Bin 0 -> 1376 bytes ...eychaintheme_text_select_handle_middle.png | Bin 0 -> 1495 bytes ...keychaintheme_text_select_handle_right.png | Bin 0 -> 1502 bytes ...theme_textfield_activated_holo_light.9.png | Bin 199 -> 198 bytes ...intheme_textfield_default_holo_light.9.png | Bin 187 -> 227 bytes ...intheme_textfield_focused_holo_light.9.png | Bin 298 -> 295 bytes ...apptheme_fastscroll_thumb_default_holo.png | Bin 169 -> 0 bytes ...apptheme_fastscroll_thumb_pressed_holo.png | Bin 306 -> 0 bytes ..._check_off_disabled_focused_holo_light.png | Bin 300 -> 298 bytes ...theme_btn_check_off_focused_holo_light.png | Bin 319 -> 318 bytes ...n_check_on_disabled_focused_holo_light.png | Bin 592 -> 570 bytes ...ntheme_btn_check_on_focused_holo_light.png | Bin 1100 -> 1077 bytes .../keychaintheme_btn_check_on_holo_light.png | Bin 1004 -> 982 bytes ..._default_disabled_focused_holo_light.9.png | Bin 232 -> 232 bytes ...theme_btn_default_focused_holo_light.9.png | Bin 286 -> 293 bytes ...ntheme_btn_default_normal_holo_light.9.png | Bin 276 -> 286 bytes ..._radio_off_disabled_focused_holo_light.png | Bin 778 -> 770 bytes ...theme_btn_radio_off_focused_holo_light.png | Bin 802 -> 785 bytes ...keychaintheme_btn_radio_off_holo_light.png | Bin 451 -> 428 bytes ...n_radio_on_disabled_focused_holo_light.png | Bin 1278 -> 1256 bytes ...ntheme_btn_radio_on_focused_holo_light.png | Bin 1184 -> 1155 bytes .../keychaintheme_btn_radio_on_holo_light.png | Bin 847 -> 829 bytes ...ggle_off_disabled_focused_holo_light.9.png | Bin 0 -> 334 bytes ...e_btn_toggle_off_disabled_holo_light.9.png | Bin 0 -> 331 bytes ...me_btn_toggle_off_focused_holo_light.9.png | Bin 0 -> 382 bytes ...eme_btn_toggle_off_normal_holo_light.9.png | Bin 0 -> 344 bytes ...me_btn_toggle_off_pressed_holo_light.9.png | Bin 0 -> 298 bytes ...oggle_on_disabled_focused_holo_light.9.png | Bin 0 -> 307 bytes ...me_btn_toggle_on_disabled_holo_light.9.png | Bin 0 -> 346 bytes ...eme_btn_toggle_on_focused_holo_light.9.png | Bin 0 -> 324 bytes ...heme_btn_toggle_on_normal_holo_light.9.png | Bin 0 -> 397 bytes ...eme_btn_toggle_on_pressed_holo_light.9.png | Bin 0 -> 361 bytes ...aintheme_fastscroll_thumb_default_holo.png | Bin 0 -> 170 bytes ...aintheme_fastscroll_thumb_pressed_holo.png | Bin 0 -> 306 bytes .../keychaintheme_list_activated_holo.9.png | Bin 110 -> 110 bytes .../keychaintheme_list_focused_holo.9.png | Bin 117 -> 117 bytes ...aintheme_progress_primary_holo_light.9.png | Bin 270 -> 273 bytes ...ntheme_progress_secondary_holo_light.9.png | Bin 135 -> 135 bytes ...ntheme_progressbar_indeterminate_holo1.png | Bin 413 -> 457 bytes ...ntheme_progressbar_indeterminate_holo2.png | Bin 485 -> 526 bytes ...ntheme_progressbar_indeterminate_holo3.png | Bin 539 -> 589 bytes ...ntheme_progressbar_indeterminate_holo4.png | Bin 521 -> 573 bytes ...ntheme_progressbar_indeterminate_holo5.png | Bin 506 -> 545 bytes ...ntheme_progressbar_indeterminate_holo6.png | Bin 538 -> 584 bytes ...ntheme_progressbar_indeterminate_holo7.png | Bin 489 -> 535 bytes ...ntheme_progressbar_indeterminate_holo8.png | Bin 507 -> 553 bytes ...intheme_scrubber_control_disabled_holo.png | Bin 0 -> 520 bytes ...aintheme_scrubber_control_focused_holo.png | Bin 0 -> 694 bytes ...haintheme_scrubber_control_normal_holo.png | Bin 0 -> 815 bytes ...aintheme_scrubber_control_pressed_holo.png | Bin 0 -> 983 bytes .../keychaintheme_scrubber_primary_holo.9.png | Bin 0 -> 138 bytes ...eychaintheme_scrubber_secondary_holo.9.png | Bin 0 -> 138 bytes ...chaintheme_scrubber_track_holo_light.9.png | Bin 0 -> 163 bytes ...haintheme_spinner_default_holo_light.9.png | Bin 237 -> 263 bytes ...haintheme_spinner_focused_holo_light.9.png | Bin 390 -> 375 bytes .../keychaintheme_text_select_handle_left.png | Bin 0 -> 861 bytes ...eychaintheme_text_select_handle_middle.png | Bin 0 -> 885 bytes ...keychaintheme_text_select_handle_right.png | Bin 0 -> 959 bytes ...theme_textfield_activated_holo_light.9.png | Bin 165 -> 165 bytes ...intheme_textfield_default_holo_light.9.png | Bin 151 -> 182 bytes ...intheme_textfield_focused_holo_light.9.png | Bin 264 -> 261 bytes ...apptheme_fastscroll_thumb_default_holo.png | Bin 324 -> 0 bytes ...apptheme_fastscroll_thumb_pressed_holo.png | Bin 613 -> 0 bytes ..._check_off_disabled_focused_holo_light.png | Bin 462 -> 470 bytes ...theme_btn_check_off_focused_holo_light.png | Bin 479 -> 483 bytes ...n_check_on_disabled_focused_holo_light.png | Bin 1059 -> 1054 bytes ...ntheme_btn_check_on_focused_holo_light.png | Bin 2921 -> 2891 bytes .../keychaintheme_btn_check_on_holo_light.png | Bin 2651 -> 2617 bytes ..._default_disabled_focused_holo_light.9.png | Bin 390 -> 385 bytes ...theme_btn_default_focused_holo_light.9.png | Bin 443 -> 451 bytes ...ntheme_btn_default_normal_holo_light.9.png | Bin 520 -> 528 bytes ..._radio_off_disabled_focused_holo_light.png | Bin 2082 -> 2109 bytes ...theme_btn_radio_off_focused_holo_light.png | Bin 2161 -> 2200 bytes ...keychaintheme_btn_radio_off_holo_light.png | Bin 950 -> 1043 bytes ...n_radio_on_disabled_focused_holo_light.png | Bin 3484 -> 3537 bytes ...ntheme_btn_radio_on_focused_holo_light.png | Bin 3568 -> 3670 bytes .../keychaintheme_btn_radio_on_holo_light.png | Bin 2467 -> 2416 bytes ...ggle_off_disabled_focused_holo_light.9.png | Bin 0 -> 420 bytes ...e_btn_toggle_off_disabled_holo_light.9.png | Bin 0 -> 528 bytes ...me_btn_toggle_off_focused_holo_light.9.png | Bin 0 -> 452 bytes ...eme_btn_toggle_off_normal_holo_light.9.png | Bin 0 -> 574 bytes ...me_btn_toggle_off_pressed_holo_light.9.png | Bin 0 -> 546 bytes ...oggle_on_disabled_focused_holo_light.9.png | Bin 0 -> 452 bytes ...me_btn_toggle_on_disabled_holo_light.9.png | Bin 0 -> 633 bytes ...eme_btn_toggle_on_focused_holo_light.9.png | Bin 0 -> 525 bytes ...heme_btn_toggle_on_normal_holo_light.9.png | Bin 0 -> 567 bytes ...eme_btn_toggle_on_pressed_holo_light.9.png | Bin 0 -> 721 bytes ...aintheme_fastscroll_thumb_default_holo.png | Bin 0 -> 323 bytes ...aintheme_fastscroll_thumb_pressed_holo.png | Bin 0 -> 611 bytes .../keychaintheme_list_activated_holo.9.png | Bin 121 -> 121 bytes .../keychaintheme_list_focused_holo.9.png | Bin 154 -> 154 bytes ...aintheme_progress_primary_holo_light.9.png | Bin 477 -> 476 bytes ...ntheme_progress_secondary_holo_light.9.png | Bin 150 -> 150 bytes ...ntheme_progressbar_indeterminate_holo1.png | Bin 821 -> 889 bytes ...ntheme_progressbar_indeterminate_holo2.png | Bin 989 -> 1068 bytes ...ntheme_progressbar_indeterminate_holo3.png | Bin 1187 -> 1262 bytes ...ntheme_progressbar_indeterminate_holo4.png | Bin 1135 -> 1218 bytes ...ntheme_progressbar_indeterminate_holo5.png | Bin 1083 -> 1183 bytes ...ntheme_progressbar_indeterminate_holo6.png | Bin 1190 -> 1297 bytes ...ntheme_progressbar_indeterminate_holo7.png | Bin 1069 -> 1155 bytes ...ntheme_progressbar_indeterminate_holo8.png | Bin 1055 -> 1139 bytes ...intheme_scrubber_control_disabled_holo.png | Bin 0 -> 1101 bytes ...aintheme_scrubber_control_focused_holo.png | Bin 0 -> 1392 bytes ...haintheme_scrubber_control_normal_holo.png | Bin 0 -> 1610 bytes ...aintheme_scrubber_control_pressed_holo.png | Bin 0 -> 2366 bytes .../keychaintheme_scrubber_primary_holo.9.png | Bin 0 -> 156 bytes ...eychaintheme_scrubber_secondary_holo.9.png | Bin 0 -> 154 bytes ...chaintheme_scrubber_track_holo_light.9.png | Bin 0 -> 175 bytes ...haintheme_spinner_default_holo_light.9.png | Bin 392 -> 408 bytes ...haintheme_spinner_focused_holo_light.9.png | Bin 659 -> 645 bytes .../keychaintheme_text_select_handle_left.png | Bin 0 -> 1859 bytes ...eychaintheme_text_select_handle_middle.png | Bin 0 -> 2075 bytes ...keychaintheme_text_select_handle_right.png | Bin 0 -> 2065 bytes ...theme_textfield_activated_holo_light.9.png | Bin 237 -> 234 bytes ...intheme_textfield_focused_holo_light.9.png | Bin 434 -> 432 bytes ...apptheme_fastscroll_thumb_default_holo.png | Bin 600 -> 0 bytes ...apptheme_fastscroll_thumb_pressed_holo.png | Bin 911 -> 0 bytes ..._check_off_disabled_focused_holo_light.png | Bin 455 -> 455 bytes ...theme_btn_check_off_focused_holo_light.png | Bin 538 -> 541 bytes ...keychaintheme_btn_check_off_holo_light.png | Bin 329 -> 443 bytes ...n_check_on_disabled_focused_holo_light.png | Bin 1117 -> 1112 bytes ...ntheme_btn_check_on_focused_holo_light.png | Bin 3942 -> 3906 bytes .../keychaintheme_btn_check_on_holo_light.png | Bin 3606 -> 3595 bytes ..._default_disabled_focused_holo_light.9.png | Bin 544 -> 542 bytes ...theme_btn_default_focused_holo_light.9.png | Bin 834 -> 826 bytes ...ntheme_btn_default_normal_holo_light.9.png | Bin 890 -> 972 bytes ..._radio_off_disabled_focused_holo_light.png | Bin 2511 -> 2512 bytes ...theme_btn_radio_off_focused_holo_light.png | Bin 2720 -> 2706 bytes ...keychaintheme_btn_radio_off_holo_light.png | Bin 1490 -> 1660 bytes ...n_radio_on_disabled_focused_holo_light.png | Bin 4515 -> 4512 bytes ...ntheme_btn_radio_on_focused_holo_light.png | Bin 4895 -> 4769 bytes .../keychaintheme_btn_radio_on_holo_light.png | Bin 3657 -> 3485 bytes ...ggle_off_disabled_focused_holo_light.9.png | Bin 0 -> 633 bytes ...e_btn_toggle_off_disabled_holo_light.9.png | Bin 0 -> 1662 bytes ...me_btn_toggle_off_focused_holo_light.9.png | Bin 0 -> 653 bytes ...eme_btn_toggle_off_normal_holo_light.9.png | Bin 0 -> 852 bytes ...me_btn_toggle_off_pressed_holo_light.9.png | Bin 0 -> 869 bytes ...oggle_on_disabled_focused_holo_light.9.png | Bin 0 -> 703 bytes ...me_btn_toggle_on_disabled_holo_light.9.png | Bin 0 -> 1033 bytes ...eme_btn_toggle_on_focused_holo_light.9.png | Bin 0 -> 781 bytes ...heme_btn_toggle_on_normal_holo_light.9.png | Bin 0 -> 847 bytes ...eme_btn_toggle_on_pressed_holo_light.9.png | Bin 0 -> 1197 bytes ...aintheme_fastscroll_thumb_default_holo.png | Bin 0 -> 623 bytes ...aintheme_fastscroll_thumb_pressed_holo.png | Bin 0 -> 980 bytes .../keychaintheme_list_activated_holo.9.png | Bin 133 -> 133 bytes .../keychaintheme_list_focused_holo.9.png | Bin 158 -> 158 bytes ...aintheme_progress_primary_holo_light.9.png | Bin 847 -> 847 bytes ...ntheme_progress_secondary_holo_light.9.png | Bin 147 -> 145 bytes ...ntheme_progressbar_indeterminate_holo1.png | Bin 1328 -> 1351 bytes ...ntheme_progressbar_indeterminate_holo2.png | Bin 1631 -> 1654 bytes ...ntheme_progressbar_indeterminate_holo3.png | Bin 1909 -> 1926 bytes ...ntheme_progressbar_indeterminate_holo4.png | Bin 1906 -> 1924 bytes ...ntheme_progressbar_indeterminate_holo5.png | Bin 1801 -> 1857 bytes ...ntheme_progressbar_indeterminate_holo6.png | Bin 1947 -> 1991 bytes ...ntheme_progressbar_indeterminate_holo7.png | Bin 1745 -> 1771 bytes ...ntheme_progressbar_indeterminate_holo8.png | Bin 1748 -> 1772 bytes ...intheme_scrubber_control_disabled_holo.png | Bin 0 -> 1403 bytes ...aintheme_scrubber_control_focused_holo.png | Bin 0 -> 2105 bytes ...haintheme_scrubber_control_normal_holo.png | Bin 0 -> 2534 bytes ...aintheme_scrubber_control_pressed_holo.png | Bin 0 -> 2720 bytes .../keychaintheme_scrubber_primary_holo.9.png | Bin 0 -> 149 bytes ...eychaintheme_scrubber_secondary_holo.9.png | Bin 0 -> 150 bytes ...chaintheme_scrubber_track_holo_light.9.png | Bin 0 -> 1095 bytes ...haintheme_spinner_default_holo_light.9.png | Bin 443 -> 473 bytes ...haintheme_spinner_focused_holo_light.9.png | Bin 696 -> 691 bytes .../keychaintheme_text_select_handle_left.png | Bin 0 -> 2823 bytes ...eychaintheme_text_select_handle_middle.png | Bin 0 -> 3098 bytes ...keychaintheme_text_select_handle_right.png | Bin 0 -> 2712 bytes ...theme_textfield_activated_holo_light.9.png | Bin 338 -> 334 bytes ...intheme_textfield_focused_holo_light.9.png | Bin 513 -> 511 bytes .../keychaintheme_btn_toggle_holo_light.xml | 50 ++++++++++++++++++ ...> keychaintheme_fastscroll_thumb_holo.xml} | 4 +- ...e_scrubber_control_selector_holo_light.xml | 22 ++++++++ ...crubber_progress_horizontal_holo_light.xml | 28 ++++++++++ .../res/values-v11/themes_keychaintheme.xml | 32 ----------- .../main/res/values/colors_keychaintheme.xml | 4 ++ .../styles_keychaintheme.xml | 24 +++++---- OpenKeychain/src/main/res/values/themes.xml | 2 +- .../main/res/values/themes_keychaintheme.xml | 43 +++++++++++++++ 227 files changed, 164 insertions(+), 45 deletions(-) delete mode 100644 OpenKeychain/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_default_holo.png delete mode 100644 OpenKeychain/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_off_disabled_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_off_disabled_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_off_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_off_normal_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_off_pressed_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_on_disabled_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_on_disabled_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_on_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_on_normal_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_on_pressed_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_fastscroll_thumb_default_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_fastscroll_thumb_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_scrubber_control_disabled_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_scrubber_control_focused_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_scrubber_control_normal_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_scrubber_control_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_scrubber_primary_holo.9.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_scrubber_secondary_holo.9.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_scrubber_track_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_text_select_handle_left.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_text_select_handle_middle.png create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_text_select_handle_right.png delete mode 100644 OpenKeychain/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_default_holo.png delete mode 100644 OpenKeychain/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_off_disabled_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_off_disabled_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_off_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_off_normal_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_off_pressed_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_on_disabled_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_on_disabled_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_on_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_on_normal_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_on_pressed_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_fastscroll_thumb_default_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_fastscroll_thumb_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_scrubber_control_disabled_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_scrubber_control_focused_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_scrubber_control_normal_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_scrubber_control_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_scrubber_primary_holo.9.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_scrubber_secondary_holo.9.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_scrubber_track_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_text_select_handle_left.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_text_select_handle_middle.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_text_select_handle_right.png delete mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/apptheme_fastscroll_thumb_default_holo.png delete mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/apptheme_fastscroll_thumb_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_off_disabled_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_off_disabled_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_off_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_off_normal_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_off_pressed_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_on_disabled_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_on_disabled_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_on_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_on_normal_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_on_pressed_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_fastscroll_thumb_default_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_fastscroll_thumb_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_scrubber_control_disabled_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_scrubber_control_focused_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_scrubber_control_normal_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_scrubber_control_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_scrubber_primary_holo.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_scrubber_secondary_holo.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_scrubber_track_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_text_select_handle_left.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_text_select_handle_middle.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_text_select_handle_right.png delete mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/apptheme_fastscroll_thumb_default_holo.png delete mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/apptheme_fastscroll_thumb_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_off_disabled_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_off_disabled_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_off_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_off_normal_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_off_pressed_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_on_disabled_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_on_disabled_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_on_focused_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_on_normal_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_on_pressed_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_fastscroll_thumb_default_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_fastscroll_thumb_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_scrubber_control_disabled_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_scrubber_control_focused_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_scrubber_control_normal_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_scrubber_control_pressed_holo.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_scrubber_primary_holo.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_scrubber_secondary_holo.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_scrubber_track_holo_light.9.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_text_select_handle_left.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_text_select_handle_middle.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_text_select_handle_right.png create mode 100644 OpenKeychain/src/main/res/drawable/keychaintheme_btn_toggle_holo_light.xml rename OpenKeychain/src/main/res/drawable/{apptheme_fastscroll_thumb_holo.xml => keychaintheme_fastscroll_thumb_holo.xml} (85%) create mode 100644 OpenKeychain/src/main/res/drawable/keychaintheme_scrubber_control_selector_holo_light.xml create mode 100644 OpenKeychain/src/main/res/drawable/keychaintheme_scrubber_progress_horizontal_holo_light.xml delete mode 100644 OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml create mode 100644 OpenKeychain/src/main/res/values/colors_keychaintheme.xml rename OpenKeychain/src/main/res/{values-v11 => values}/styles_keychaintheme.xml (56%) create mode 100644 OpenKeychain/src/main/res/values/themes_keychaintheme.xml diff --git a/OpenKeychain/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_default_holo.png b/OpenKeychain/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_default_holo.png deleted file mode 100644 index 0ddafab03611e5b22a91cd7eef76d3b2d6567c7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^xJmetY_Aq`U zo1l+pnc}S}HyWN#Nfd8XFk2|zug54kuVoK=wbYECe7kqeeLpk$bv<*Pr^(a|t&1Ux zR=NatE)()qowZ7+*274pvbOSYdR&m|uSrX?&+JmUzRG#(i@Qf^qDwPA)=PP#>+!-N zF!japBYz@GR|wU58JVRePfEVJ(D&*hmD)+Q5BH^Y|Gyl8uoh&*s>nt6cPI<2Vf(+V Q3g|5cPgg&ebxsLQ0CnwZQ~&?~ diff --git a/OpenKeychain/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_pressed_holo.png b/OpenKeychain/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_pressed_holo.png deleted file mode 100644 index c062b17f8470f0af7cf73460f4279048311496a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^xJ`T9MMwW;325eB5+8k>1dzt48@t|r{$gQg`a!# z|Jm)-wCy*_zy14ja^pp-Ee)*G!yaDJiiv9VUR{tW`nK)WmIk{EjOUa;i*8_2JFu)| zW6(=J1BPAIarNA18V$et&d|6iXZxV>Z|nb;Z87I}Z3x}Pd`I+2^a0y~MBZo#k(BMP zQ<5Wh`2L&bQP}w~CXz47-tZsC9){}^cWQoM>k;}|SHz;@Z}rWKSwcu$t%u+EwQ6S2 zuPk>xQ~il{7J6$BEe+kVg$u<^_yoHqPh2PTc)xYg%AX;7ReZhn2mNR6H{|_n`E^o6 z-3$MQ*(ZK*R2W@5edyDY>jw@^=-$Zjb<+m9BO48`d&sW-BJ|_fy`Nh-e=b#x`E+VF zqx_Y-@s?+t^U`8>Y&n|CTGMJ(`|4hANPL`Y?Tby{KbZNN3a>kv^HTF+%DxWv;|PcL c1^wc8I&V^4Ju&PwFtQjtUHx3vIVCg!0A}*j6951J diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_check_off_disabled_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_check_off_disabled_focused_holo_light.png index f74fcdd8dbd0d6633d84679a0a22538647852972..964832508b8a389eb6b515d6aa00b0839736addc 100644 GIT binary patch delta 371 zcmV-(0gV2V1C9fbB!5*&L_t(&f$iA6O2beX#__+04E1zP~vqd7qplkO!1fN}aMZ>4Br!I02Ft zXW3OQCi7BqpeVp-HogV!f%A~59DD=Mi^=@0>A=PS)t!F;u780QV1vgy%m5d_JMh@F z6OuF(NoRk9>WHkNC5isRU7T`SM>A!z{LG=Og!z&8!xn+EVr z1Nf!^eA58FX>b7FZ2yTP+ke=7=d@X56d>w!tGc7LYNd7!5t9HxSvsW$D7M7smjuXx zFSga<)TDH>R8@-~G_-OcFL$qi8{ooeG`UaU`CrQ2N?Gy-wEyKQfI?cYE2We=Zhtyh VPZilWmLC8B002ovPDHLkV1f_vv2y?b diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_check_off_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_check_off_focused_holo_light.png index 58a99014e27749952971a84e1bcc8369a55fde2a..6f221e7cbd443ce499168ae9303a9a5bb68322ab 100644 GIT binary patch delta 358 zcmV-s0h#`t1DykqEq^gi!!Q)a@qZ#$>PVn;;{u4S*XYnvaf}Wf;Q(}G;1mp@9eRzf zZ~&wZB@i|$VWkXBBo@eX(%_-*H`~tpY%7uO0HX|R@`>|!{#l7XTC z{n_9GxB`yqROR3UcvuYQPh|s31LQk@1DpZxKvuiFzlFdt@L>YnmYsy;N*LgTUGaBm zoV2%J+eWTZ&TG~X{!Iha4p7L_IB9R5Kd&VVS6~2}#>q4qb;PIaw3GSH8{i&T zyVX~!3yfV)x5`zpzQbQ| zrwKtTuA*5V4mDNCEX z=fEX!TB|g{r zfuaDbczp?61IKNua_|W(r^)20ZeVSIa_4V>bKo5)T9@~?0A)AmwD1q*DmEZa2r_E+QaxSHEZ&}9)mXaL`n4FMN*n!Je(5SDM)E`>Cx z$E^bp3@rPH_l%y}D&-nZA4vt#DBh)cviOI_miTH*3bDW&`_|&zrRmgA)mq#jIAv*b z_X4;A&RUfw_X<3A(%h|-P2Pb1|6B!7NZad5DWwkEH#oIixvR>nKL7v#07*qoM6N<$ Ef)n7V8~^|S diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_check_on_disabled_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_check_on_disabled_focused_holo_light.png index 1d06ee46faeef5a45dd89b3e3887fe5de1004bb6..cd3de280a9624246fbc69353c624716f7a054d51 100644 GIT binary patch delta 768 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 delta 1683 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 T{c(*Tx-VymTe ztJTspwMmUNjkMZSV_HKH<*hL>fTqMY2C!@>pw*ZDJhV*{8zTk@Vya=gJG#pt2q>^p zgk_nXow?J8-5KuQ-G$C7nkM@tCwFIN@4er5?z!jO86breQh)egBkgGuxbSH=H{XAD zG~|;+&z_n9ia0HR6+@UdM$A(Y5Ft+spiKusv;gCp7GYUvvMea_x>+!{0NoVozJVvY z0t|TzW%@NDzggmXtN$kYDm<|jpvYV1FkBRVTC#{+L^eLZbs|ET10Z8oc+?8an*kPx zJRh+P+JcI-GJiW?t698$rsnVA>p6&BB{s~=uRu{z(GcQzVh(VpTweld;5g30rKefI zrCGRiE}i2zo?FV>&b+f~Pm6H>Mwb6MvGSGl4~k_;!R0kAa1U}v*XF)7irEl~adz=nF>~$Uh?-_OGjIHcB^ycC{_J6>*3;=kQ|ET2hnilSt>&`>l z*YENnHftrl2S^;kiLT>?j!xbRz}h?J%DlhgukyEY%8LDCL1O?_CRoS6@xt-(gB!ME z*B^)zKFJD5M3NOkd!LWYWu*l0;+Q*Y$kzRZeMwpIv@Zx~vz_luxx8mxC+m)FI@f{N zdJse6KYt{mR{l73q8@+^Kqi1Jrp@$>^kfX=bRDo~mu;av4*&yG zg4pV=Zmuk7>;&LP*!%hl(BvPnkflWl-~m|re1dIc_06x|f3|${6|VKDXVkfrCEq*d zvVZn3>-zldW&28`haqFb5{=-_q)Yta_ScTX`3+qFCILthqea9$%$XGsbAlAd+_sU` zH;=u>?<`Seg3Z?5TZU}i<-+|N26@rv&gjj$vUgj~KKsl>$QX=h1pQNjDe{R3nFR-c zbN_SAdOi4C#YXPKVrf!=MgTdW!k$%DGJn4O*6zLsLPr0%$9gN{((cmS{q~uM4Eag7 zc)?R=kZ-fY6!!DKJQuKgrl;cF^W6@NhJy~L*A4CV-PJ$fIf+I zIKQE*)m`Hlp6L~d7CWD!hA=qo6@S}=n&u-L&UCZn!vaF=3(TD4O$msAUI9Hn>mHk| z$gA%>E1Yl)_=PADdXYMJ>!cnw6D)ZEvZkr@xbu=vMgT2@6(IqbsK~4DIDfm&F%^$zMENJYAkoU9X0VqTxadZ7+6F?0bkGvEiHC~Zdf2qw~dw+UZ61{i* zx4qvxkDsn8Y`P3!oFcCapi?D~AloED5{EgBE-Etf(Ae0A^BeyBrl(xi2$8D_n>s0y z5~4$oI&EsE$R{blAW9QVenP)~HhP-J$roYV1^I3(Pe@G39 z`+~H$x34n8XTd%#vR^J9B}`ICA%zrDNFjw376|_Wc2huJ0AQcc00000NkvXXu0mjf DOJC~! diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_default_disabled_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_default_disabled_focused_holo_light.9.png index 8ee0aa89cd6ebc918fc2e807718a2d02a269fa27..d1e8f795f4b3b6c2ab93c158bce5b12bef9abb0e 100644 GIT binary patch delta 300 zcmV+{0n`4<0>=W7B!3P`L_t(&f$f<+3WGopM!%IHDN=a?D^FvgC)L8!q{;z;Rf-hB zP2mcG>^hpvssr;t5FB=%B#i_~5tUrkRm)>Z zP*9b8ZDK*>p(O7ZyRk7DT%I6Q&-?-)!+0_==I_*!?z_5u_yR0o$#2QBsbUFE3|-v@ yua*_CywQJ)tR;w$G(dQAn)QpcpMT2FIlKXJltUOXrD~o40000i34=foM!%IHIpkyoo~*!HEWx5I!CI^!rxXx8 z<&Z;gb8v+~b{$P-)q!~+2o5{XasAoRfEW9*ZC+^5p)Xs>h94uXMO>YVLX`_^LJ`V_f=Cqd;u1)xpSIY`m-YDq5MOH*e8X!D5&H6>!&p+ko9NxIBL^{-EmYM(n002ovPDHLkV1kUk Bh#3F? diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_default_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_default_focused_holo_light.9.png index e6ce2835c9e2fddf44f9ad0bf56fe14618ad5fed..5b295174b81243e8a945c1fb355c4b9f57d80bf2 100644 GIT binary patch delta 371 zcmV-(0gV2T1C9fbB!5*&L_t(&f$f=3O2a@Dhrby_+UlavMHi)8uMrQ>MHTN*(9^h3 z@D5^KcmQ1qE_LS(3I<$gS|ns#C}Kl1Y2?Lb;C-t=CYg`lO#aLpgDmdXu@Sy^b8+D8 zrX|)vC8bbFDZH&rcN}zU@>=4%pTaPg6tg<&EwwiV}pRf#S(&sxQ+1yeaQ<_yqEhMPHmb RkQe{}002ovPDHLkV1fZMtzZBE delta 373 zcmV-*0gC>P1CRrdB!5>)L_t(&f$f=3O2bePhkx@Bg~mlGQt$v>xOZE0X)oXrTF}$D zP_Ren30&$*kgNpp1`0)r3lmU6#zjSJ$$M#J(q>@3RUnhRk6&K?ya_=T{o&#tD$ZHti0eFx0b}kQ2_J6N@MPA9tFm|(Kde@1% zts3MOm?hJ+6LpVH$A^VMgf4dr^90vH`)9mDwgLw(@4FV!S!A?|i;5e^B!#edw-_cV zg-J?bl2VwY6lx^7v}(hsNwV=cDCpU!NwV>nq!cD8g-J@GL6S5`sz@@}Ra<6MUQ!Pw zNm9BVjqo_3ByO{(m-vy0j&shpg{^*ZmZ&P&?$3Ls3fm+HkmSusZ#X*`G%wkB0qFg1o z43(PnqKOzEee%H<9{3}C*o%LJAwKjPu0j@Klpg^BAJh* zVBNhEFbiA-?zSUj+X9m5)IMMmctwd7fj@zJKnBPmUJn2fWQ9h71h5|w>j5``E3WM< zJQV@z_1A#Yz<;n3y#f4$goS5W)~0*F7~>_=sgRC40vuCe3&1zPkFBmoO9GU95;&#g zZUUEG+sRIxpA0|Fc>~^TC5(7CR42gGPYGB83VY7&^_2X(z)`(_$+ewtyCR^D{Apkf z_!{_rWoj`HJh&s~%~tx6I4=UrO17-SLn^8t2`3NndVhY;xxH23B=DX-cTt_v)Jg=K z6@Y}zDJ6fwwVmrHKY1(K7w$XY%~p0Ip_BvGj4>N0F9FMzWo3b#i05O#z{=EO#u#%Y znNF2}4}o{o0oR)$)zk{;hW!lj;8(8gd^d4^a_G^G)qRLJGsc)=Gq!55EGq&WK%6*Z zj43A5secLJeI(4jaBU~s$j)<3kPiSK0EdAefQuuM{kzM*Jc=Q!F=LEbZG}9*+}vC_ z9*-{ryMdv2JYKl+`SfpzvtxUKaiA}8cI?jm3-|u^vlH;UsTfB#**tK0Woj`{d037i zo_}DBDf^E0fsTEkwhrjq%h9=x0b`A9_zKVy_J6oOcf+-vd@#0SgbHCKY_?6l2DOnv zHus=wI|aZXp>;wdV0!|P_w_;KK>B&&{AAdhtMmieR%6}|YAXv2Tb30<&XfXjx)1w} zZ6x3j^7{J&$X0$YM-k8D+9kaSa%wy3+Rl>B89`3(EwQBlUAhsyoN;ZZTFpO>0!3rY zT7PFauS0DXfdT#L79uF-7e;<75Ja*{56I{S3nNS0Efj#T&UIJk9>C|kY9t_vZu!OB;b)g6V~f0 zvc%m&i2ph*pd7Yzq@Mtf^@60fnaiw;>3;^oI)_(RTQAdwfV>(RHOAEP`Dn-JK8Yw$ z(z#;FZ%MgqiY*0bK0dFPhtwlWK*X}FogJgBP@55*10;p10`q>gL8Cn|gLplT9O(r$ zI@B)VO)#Xk3+k-HI^T@nphg0+NcSKLysU}W0+O>t+NP{fTf@MD&T#~(Jsv8DEq~!F zz_lF@xQ2MJS%Vz3`J*3C6nDtxNnRpCDW+{ z@DUQG)6Eq2t#l=ht8ou4>MhF(BY$;m1plJGMmoTHQ9p!)O-9L&0iPmH{nE9a&K314 zpuVkA1}*{9D^rUg2i-ol(N@uB*Q>zCI=-d0N;{3MAQGpSf!xZ}Vl8_e;K{~TRmJ?< z*fPeHlj&3xID>@dnmVOv@+}Lf6H(t<%px7STWH5w^ZAWAyr-MA)}|Q;-f~nMPp7rG zLC6Tw+&zkTx`32{Gsp>EYwm)qOs$zUiqyKbP`Zt5*r(Intw#si>(_ug&!oLx4?TQ_ z5%0#3eGmnn*GK+h{SS_LWR-GyP_~8t{a;Ky^w2{O&ldjx;-Mb*B5nvX00000NkvXX Hu0mjfL2#yY delta 1379 zcmV-p1)Tbf3-$_-B!4|gL_t(&f$f>mYg=^`$3Mmp)@!_!Qc9_{)>_JnW5~Eer@K1F zaC6g#DqInt_7V`*hq8ZR?|bOm{RhPOqKIymB4fX~xh@Z)WtGx(nbsO=EhS!K7cbF= zb7EuH-kUaQi;ypbkmUC}zwh__&hP%tIe`{hXrYDu#AD4in19XW5+zmLrg;g)Z2%ESAk~%3-Njd2=yKP zE?M(i3AhJb2ktf^WXA%snOqO>I`E&vO0EU345V0X}8<_Nb zXK_yisMlWx&VK>jO7s?xL&73-U3b$nV2lZ~nOsWe9RZH1utnf=;G6C4#n zO71pr)$^Ug#gR+auWLVd+z+NL#Ji~)0inK1zzR?t9ljhY`Ln=L{r!sPJ74UIfEx1W zfHmM#;M(}iSYjZ3sBb=)Zb#xg09KW3S*NE|R67z*A%Eia<fAH_xBFV7EQ~WdD3HeE%*H+6Da6@H#0}8UIfER$uYqgl&t9;V{2DO3UGe}rXI5eT+?}596aj;T)`_@Xh}(f~;5p<% z`u5_;CF`fsY&%fcN!V-!wN(JRUDr(^cS;et-Mgda#t9fi9)Ayj!oA_V*yRAo^}Iq0v_rZOFvhTE#57p_^;Cv%3(`KMhOU6FG#9~ zxy-tl-GHTQgf+GGDh&u&RwDz(m})+6H-C-pqp*RJuGOdfR+P)8*iwMz;|uz6P(88& zq+QoN&@{>lwVBp6KvI|run<)n#GQdT#Ou!>S9(#6b~Q?P6LhKVqB`q&U2iUGQk;MS z(mk+&7c}u&L~@pN!;}?js~cF9P>$(Z_y^tQYlNNZ90+{6XLY#DA$DdcM=VqFx2mwpGf&6<}g~W(?$_>tP3N6>WCC z1iY{Fx7Ai@q_LGm;`A!8G(Iy{&0afrw6RrDG5LIPRX$}Lgsg1p9Ep8Cfi!^tSBAzZHW#AlggIrgeyC6GL zZDtK1wQe<(?jQ$tZ<@QcXhM7a1~9!Z?e$vd<WF`GfU8I2MpyTGETM lA^h+EVrrp<7FyU}`~yJV9FT8ai_`!B002ovPDHLkV1nN`oEQKA diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_radio_off_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_radio_off_focused_holo_light.png index 0c22251f388a674d9f0acedb5a712640d0fce917..7ef86d832a9d6c2225313ffa8e04fa3e769d1419 100644 GIT binary patch delta 1489 zcmV;?1upu#3*!rrB!8+&L_t(&f$f>!Z&Xzf$3LtaQfk>&+F(;_FTb*>*fhjQ1nh+t zjK5fty^09@{8m5tML9`T2l^kfv0@QtGC*wY#lrG0UwF zGqnrSyW8#-VzS?4)70xZ*4{sPj#2rvNr0wha8rYHhx?G|7wuo|dDtnLF@{fquD zobz1<_!&3@TrY;mf(gVD@dn^k;3ZXT68H`11#SVuh}AGSv#r9zX@zqlE*y9 z{dQ3ZwoeZpaEEqoRvx7JK%D4XYCZQ z9oPjd1-@3J6y%9;{#X9R7R2&Xz!A@Jd$#S`)+{~08)LE$tQ`cd*|vQe z$xv;;JHUoi*J!sf=431p&j9ZNZz%DeLX;}V1A1UTK`i;D=eR$#@9k*0cPG0KNCDlz zfH9^ZtAE+H9RgMXyMg7vL1WCVSR(!k@HQ|8eC9cBvSpF{xdOdD7w{6>%fUA3L2AcE92qd5twoTtV=YKiw$dcuut@v0#cQMM(z!)=zgy34> zMbB~5$ax9_?HU0KBY@=VwMap_(!QsoZhFGEfgh2Upj5bpD80kB?Fdp+(n!Xt4_cUy zz&fNT{R$-gv3t$>e7?{FTL@HE4^lg#p5u<`o>fToo)dEtP}eo;V}Gh^lwz0c zQ-4-!jHv8Z%~BVUFlq`4qaY82k(`}HTwICtFntfn^F>2t_9F$a0x5=BUEz|E*6G>r+^C2aVK@}NRXcS&cHHe+utxkB3%+yAC5`xZvuVQVZj7SdV5+7 zY#YnpD3rW*XRDAwfU4tBGZEiuzx|D zw^P72q@OPpR;kQW#+Wp6U#>xJcY$|;KmwlQW|3Q#4{VMl;&s4zq)*vz+xCiLHCGvX z5JO$o4tTqMeWn!mfvdnJq%V41@32RKClL}gMJQhb>{nUc#+VE;V|osmbX?CT8Tc59io>4cmhMuo1aikJe*?#W6REDzrNAa&2U4-;8mlyN|5)XF;D4eqCKF4< zHv#Va6EcjTRpu(ufRqHzIMHM$&6PQo(12 zyCB|JiL?i6kT9xJVwZpuk4kK~n~M^R*Utji9?N(=7g~Jk5$iS~sWF1&caXWy%nuxc rh?j=7P!@&%{ZC9~luZ~T=&x?0l00000NkvXXu0mjfNdK~_ delta 1449 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 Ze*xa%d!vs~i#h-R002ovPDHLkV1ml>izom9 delta 2372 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 P00000NkvXXu0mjfxx79O delta 2187 zcmV;62z2+&5tk8=B!6B>L_t(&f$f=XY*XhI$A7Vn>o|#*1d_PHB)lzi06KXAq~w)!dhMyH+;2(%_*{MiP!22vY``qQ0_4j_27wsR19Sp6fY4NcnG^u2 z?Ipk(U>;ybXgvia9vQxxnW0X|8R6kZ1`>sFb5F>Ci!Xt zVWBSIA3$3}ZDU*t{|#Wd1bNKqwZHqB0LT#jX@oZ427mtQ3Ajz4n=xxm-*Aru;VL(Q z7KB!#^7Ue%5~xGON*p)=_#0{)RbU;k888CxNTp235{B^~`7f%eGM z(h%+x^#t6-z*e9LIH)K}htK7I3V0rf03N5;9-1@&={h?A2k<`d>qG57w)GA7ybRo$ zTUd8w^PGAEP>KlNbO4+AgdoniBJXtVPj~HP0Jb_Dj-La~z~>Pe>M|mp#-ywkkSFXbz!!nHonHI9o7QgL z7=KSjHvx?ewT&7glN1Bx$9oU%>D4}}`O>1tQX9VfT*_3YGXSXFspN^j|4w)1!%Mmn zV@2D>lJD(Cq~9nI_5|D}gp2-OQIyj@mw!FNm97B$vROf&4Zya?T$PBdGYB*@Gx117 z`)E6GwxPDMEkpQ8Fgdb zkhBot%l`&Ky+h%}fH_}Za6t-g1}w)S2lkAZ)T$R(?o8cmR&}w!J%+nSbu-+pCw~^W z$IWI{_pKGLrcx%g>R9B!9)#POfzo_^!3T0(rd(OvUp`4dEE7m(nO zTo!8zy(B%R!LcM10Y|Xg@4E(9de`DKwGh~%!oL2%%?(4^^41wsf_0QiI8b= z`7-rXsHtA^HAJ8df7i>%BAUpu8 z3$`Ugy+K+hCH#X}mYGHnn zmdOi|byT@d%Qr+8MP>t#WV9ifB^k#ML6+V`wU*d|X9k*bDGC8NGtgwHD4re6fA5+ zYLaISqGVBlDk)!tQHx9*fIPl~a=Eafwh`beu;56?TV}a&qG+V7Wq#SBwx%0DGiKW; zgOZ1DylI?Ywy0IsMF~KaJQo006-7w_s}Y(HW-BGei-C5zK{cWcY<~sR!I6Q-5vEN5 zu}w4UcUz0*bnd(Ux*?k-qN%X9@A~V8ib7lGrkVA-5iXekB7-9XE9JUPy3ZHnx;>kK z;{gaErUw>anW89BM49`ftmh+glkgVn&ey6-7qq+2!MNwjiez_RY-DT|wCejZq171eN!&{z! zI{~3E+UNaCaeE&%I8s{n}&!{7*yU3AihPR}l@3?|%~-nsifRlx#F6-q5TA zz73oLemP!4GoA~jgZU)FlwSqDrYK4f*bh9~5pUVy3Al}jGN4CZAw&Y`lvhyxm%e}7 z6L6b4;w?L*@CT*vHNXp!*U5=A_PIslU$x zF)flj-0`MaHh=XFMD=+@QIy+0mwz$veS}hfL3v z8mrj2f2{In;DVwk37^Zq5_l1D=HxV1nap6zfSAY~N3?|h%_(ZQBkzM4P;Z5QG! zX;l;@=5zTiz;g)KRHafTEPT!YGC*XG7DI>$-37#G5r49b78ONF$uZ4RMC!Eiphk-y z17brAcb6mlHil>e+Yv#V&hsFwQI04N<|EvwPy)M%2-pWR+|8sZ7_XlJu053TdM3&7 zixr{WDn<{s0{O@QqaQee2rGr1UVF}++{fwv{u9$QP17_@)5E3z0M_k{7oUwez5oCK N07*qoL5KJZ^ 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 pR3!>Y2mXiCHUCNb^MQMn!#7aKTm literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_off_disabled_holo_light.9.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_off_disabled_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a7e6bc3c5d7e4f4d6129004e3bba2c67386df04d GIT binary patch literal 419 zcmeAS@N?(olHy`uVBq!ia0vp^nm}yC!3HD`7Jga>q}Y|gW!U_%O?XxI14-? ziy0WWJ3*My{N(AiKtc8rPhVH|yWCu25+(;_j{}WlH1KqB49U3n_U1vaBL)I&59%+) zPS3KvY5wBmbb&oxc0Ruq-rlbGy69e2oWL(OZI+-H>pUg=o7lJC+SSNwU3^MWB|d$U zlhC32&HJ}%7R=w##29Aiz^Zv7x%*Ydjq^!nT?F61W9MVwQP90##EBa zyj1Sy-6oMG3apwQj$EHgChE+zQC0C&19Oe?o;;e+Z0cM5`>NjQPoAe_Lw7E}x9Y6! z$NhO%dkmx3mdbsq3(B4=oxH8sIP>W4sUq9>z!o7-RtkS&kSc+ z$1sOArbwRQ9^;$3KNC3o_&(*RpIFQzb=%S8?*y~o2W!uK;5^h^@nETidIB&w89ZJ6 KT-G@yGywq43#(`V literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_off_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_off_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..c31f805bd4a13baf500f4559c3d887590c0faa6d GIT binary patch literal 387 zcmV-}0et?6P)Nkl)l(o&fjC7wbYtTH6=L8Fj8zBJp{f}iA&6op zhHu(0{WnGOkN(rQW5wSE-ErTZi_9^)aNx>gOLV~`r7%e;qFcatF}VirfD7P|A%6+H z1NW=x@;MOWf|BFKqy(OT^9*uzHo(nlx@;;$bPF2rKY~jcV+wJo`{U z>^H3kTmhH(E^LnVd%#!m4Or74>S8_fiZgsuzfV5N9lp80Z3=J-jyHCX>4 hNI#_g`ocZt@Cgd?H=Sh&stN!A002ovPDHLkV1n`dsE+^u literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_off_normal_holo_light.9.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_off_normal_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..aba55810b26605a9bc596ab788df5d3d69d6c5a5 GIT binary patch literal 459 zcmV;+0W|)JP)bqW6u-e{BIKGO;Y*qQ=Vkb*q5(0&4vB$)?6a1Y>y znfd4sCn5kJbzMJ%VfeCZf!mrfE~=_plx6web={jOr001K5iJ0`0$6S9r$gFBQP{rk zFAezCDPrcX>y~ZXI=`0Hp>vXkVX#aAH=r1X!O~4VS>1vZq#y+;NI?qne32}fJSQYc zCIu--K?-u(Nc)(B#c_Q5*N&p-Ny~Gc`>!%d+fRx3AS@Ql)A7oagzS>$)}(eH%bpec!9LZ65)sUH$fD$N>-lxHLHB zz5vt!KDWNe1WpceZ70Z+4AQM2I{c6}`odjj_yI^+hla0?>{S2&002ovPDHLkV1hUN B!-@a^ literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_off_pressed_holo_light.9.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_off_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..9f68344abd332993fe588644d47a5eedf92ee69e GIT binary patch literal 419 zcmV;U0bKrxP))RucD2 zBXZxQ;n01YB_o{_j)#7X)x+FhmN*8HYSR4xj+g^~L!lqpGU(Y&L7B5Ci}s zg0;4F&P6+yrZ3L7CN&Z1sRZ{B5q3ESU4qy+BFTkFav_pjh$I&x$%ROA5sc)tXE6qX zspQ$C5kNmCm`a{KBFTkFav_pj_IZl5oyxV@!mB1}fmMWLuWyi!tUlNs=pmy>FVP`P^=|&j8w? zm_x_31V9Ghnp5l-9{_3$ba^R&n}a;tu_BUOC}4O8snaiMqaWOT4qxx`c_6A_Q)mDH N002ovPDHLkV1iK}yCMJp literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_on_disabled_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_btn_toggle_on_disabled_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb6fcfefa17d74d285fd38f63b1c556d0f05589 GIT binary patch literal 420 zcmV;V0bBlwP)9}y~1w4W)Q4vAWjp!(~anXpyHtCPA&IIzo zFfDz&e0fbnn<(0&OUG*97{Ab zbWec<$Orr-rX4F*$=PBan*{$sV%n?4dZC7^zq?eJv(v=O6M2Ai$r3nG5KA|GGYaglFTV?ZJFQaz3I~1NsCIV5`B=qgZK`f1;tzMBJ|?9NF;?wvpeIV3OOWe z(oWUDewUVXn*G>J{{5EF94&pPE!T7l1(g3})BNh_kH6`hg%o#(L)=*&$1 zdl((aV>&aF|DGsmMU=E66tlEKh#+7VBCskLB5V{cm`DmSvx+dhly9=%!kc0u>A_$K z?hhZXu?n5|?Cs=Mz|8QKAygYodQzzRrlmF8+hQX5eMn`sP{3cGpx@}prm0%;6)T>< zo!*qUGo;a>-Y8YevMf*2bok>=R78m2DB&gd*iphwP8wB3nx?}n%kofNXeO7_>GW|l z8lCq0{XQA>R~c1Bp6B^&HhToHtg8!+%m9V}jsWZ$`<3|s@Csm#ia1&U{b_o7SjEI< z7ySwxRuBUQVd22V`svlXB)IC-|hk+Lv0Pz(;ZeeAYE^0c>yVY*CdUBqL~kIivoYw801NlEXJo Wn?K-9!!c+80000LI6|d(I=}0rCJj<>(hMJ(hwnJ(+@CVhIW|iM8He z4|Tv0YvZ^h8o_=SiPfZbYcl!fQM8~Q)0#}ad6J|RNz#f~1>;o&QFu`$L6y4s4WGW@fp$(#&O1jw_#4z-)?G&QJ?Y&o$5Q)Fu9k*WacZm1fJ4XyPNqFz0$%Y3Z9(_oJ&KIg5Ddl@~d~kZbq^zCw-=atAN9$~AI?EP_E8<3+FrBnzxYM3U8& z%}f{u>oJ}d89{$5A&RPxqFZ#A1p33zp2fg1b@NmE!!Q&>q; zSV>b@NmGnQa@ez&0Y=lwcMo9%^O(_e^4()4O<^TX(Kf;8jSvDv1lM(mh)8R#tE$pk zYnT`=7?GSzCYaCXaq^hc33A*aEN$NCB9U{`c@3&^D>l(-7QN?kbzuetj6h%R4 znmTA0pms@K!Z7@qrs-$T^Cq3uZlo;BI*#KX04_~2UB@&Jzzo2hNwF9F0dPXYl$S?v ubFjbdjAA8CA%Nx`Bwl|>yZMKEo5Nqe;Mjh=;?)QM0000JmetY_Aq`U zo1l-U<&EZusS(Z7OGG%5gsVQj5SsAN^F;NA<&87nZ7FIwpm+__B1 zS9O+`$2A*qxm5}&l!YwbV(WE6`RtrY95V|LFIkp3pI Rv;gQW22WQ%mvv4FO#p}+Zteg8 literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_fastscroll_thumb_pressed_holo.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_fastscroll_thumb_pressed_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..25ad77295fc5494d0447a12639dca3229dcdaaba GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^x7=-q(9=A*;@gEnL&X9$wOliE8y;onaobob^j1UxD1r^$ns1jAl!_ zr+Sq)FkZO(`B!uTU(d??LoO%3y{7Kcd*0q;pAFNZj&-AX5JNw3=1q!=k z)um4#%Kfz6rOTV=`Kcm--<==bABgVgJLB6}o-k#__sPl$m6tY#OC6Z7!yvI{Mx?&y zizZ@*g6xCaMXlW>ln+os=&gm(cD)ImBMDMf9U#VsW{p$TCU(u5}GmpO>GT8U-_EV~J)y7ra8md^ zo*zrz{X3N?S7iM9&{Ewz?FZUdUIu^9Tk`9Z)+^`fd)v2Xu9{iko96A$ss7p3#scBc c!YP;PFL4{c+NA3A6&P6zp00i_>zopr0DraE2mk;8 literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_list_activated_holo.9.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_list_activated_holo.9.png index e98c2a4d2d7efe593b821f32927c4b21f3791e2f..63c53a343f5a89f3a62e979b33cd611307c57411 100644 GIT binary patch delta 41 vcmXReo?yx&Gyf}N`o;_=#%Lzq2pYO8^A8VXh%m4(Qu6{1-oD!M}H%`$|E!XE2Hto3@65DCi97oW+K-NdBl{$@6<2=fv2mV%Q~loCIB4E48{Ne delta 43 xcmeBX>}H%`$}=Z4Gd(ToVhhuuw3!nf%|u>JO`AF9a!1fH&bF6*2UngCV+4%Ywx diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_progress_primary_holo_light.9.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_progress_primary_holo_light.9.png index c14605dab53e9f40e26c5b4cf2f097a57c2fa0ea..e3ce6fd56441afa204d92a24884dae09412bc006 100644 GIT binary patch delta 357 zcmV-r0h<2(0)PXMB!5RqL_t(YiOrT#PJ}QJhCc}2#}jx09+n$%4Nu@BJa7bkG}(ig zO*9*$o2KkT=`xNKR*W)#GPIo*`gf*(X+}WLh>Q) z{z8p+zz1*yj$PG$&ZcRIz|;g&lN8FPe6r62@4#X3g-6-!o+nn$43TRs6-8Y>Uda3a zetF0jeA~3bCvlhR*bG+4oM24Tz3NQmJ7qVbu2q$4!>Fhy;9*wUE7T+vl&VK_1X&+| zm#%7GXE$(H-Cp{#*#os#(b7@VZMpg);dcaSzYWn@f00tBuqK%*qs0^WL^y#x*POt= zMIa60KNZR7f0LC<9$@VXVUCQMT$ziE8ANGYNL6+Qia1sil-9vb00000NkvXXu0mjf Djf|${ delta 354 zcmV-o0iFJU1N{P!B!5InL_t(YiOrT#PJ}QJhCc|NXnFP+9DzH@1xz@H`?lP~Y@*p1 z-88KarOP-{STVZuCqv7$v_CWb+ZIFwCKTKdVZF=0Ae6UeAYqD(CD=++^;ZM;Z75*? zcEs|sBz)@AbhVe?Y?ARb5n_@ZFqFcVt0zJpaDZ#N+5useOn=`V<_0U3L5#BYm%?AE z{tkEtPQa<@>W{@VjS-leU~ZC1*_=+)TO4EaC%;h_0ccQLUm3xOtQG4KVQQ8~SBo&maCv!wuAA#ql zt6vruaMKmOZ(9Q}coi)jHT^FCzRLI=QQEI#bhcll)Gn+^=E`Jg2R;*bV9zx>@NW@G zgE*%W8GSZcx#R)Xt`O$Pn8}s7$e2NrwuMv`pW`Z5&r94yga7~l07*qoM6N<$f-Bso Ac>n+a diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_progress_secondary_holo_light.9.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_progress_secondary_holo_light.9.png index 60aefe181c03c1974bb223d8356e7af7456434f0..ade0f6d8254104251ce948c29e555f2f3ac007f5 100644 GIT binary patch delta 41 wcmbQrIF)fiAlHvI`~ip6cB&RIPmER*k=xB3GKpU(oB;?tUHx3vIVCg!03QVmuK)l5 delta 41 ucmbQrIF)fiAlDi%>&0!pMmf_sCq}D@=mc|zlw6i#00B=|KbLh*2~7YINeoi} diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_progressbar_indeterminate_holo1.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_progressbar_indeterminate_holo1.png index b9977dedb433667359781de6519160f706ed7896..3889a0e920234844c7dc90b4996f1cde2fac365e 100644 GIT binary patch delta 761 zcmVnkp0000u=Ct+> z0002+a48xA000=IXaoQNV348_004kNH$~&cVp(%P9+ZEHg@3rge6&pfcsTUSbxj@r z@;fJ&%SE&O+f~PXo8ooTTX&jWyu=OWrELOZEAvU2SIT@Mr@(Rg<+`Sh|0YSAByoX5_ts@{c>$n$A53zO_FD63&(y! ze5%U8|Jp9eu74A0lANWDnYh7xv`t`aT~1kLKd)@E8*p_wzm8_E$+( zO_C2eeirSi>R0O@d+X2A7TWJ4ZZIcp6Btwf4E+A}~H%VUS@N7Lib^7JH zrjGw!QF?N@T>KtkrysLdNq%Hky`Lv}k>q=|JpvMK6Mq=j=d^>apJ~smpCx&ocEI(n z;(o#ZLcd(sl<{9Rw}0lzD=YKzJy4gn35==xIcj+|(a%xg?)1xbO&WiR5C8yxL8|}T z^=BgL&#VU2p=|h9g?-|N_)!X7wIzg*X(@o$oRiknkQ{hLa!b9ex*BW^G^Z4(&N zv59cHNq=z4840hppEnT>?9(sTHFf+CCc=3c)8LklO<%i;>4Tv*Z4(&Vu}5xngD#KU zfWOl(*EMzg4<5O3z5OT7p0#d!Q0BV$oVdY!v`t`4o8q<1DeK<)u8=JAiM#^(<=Uo> z|K7Hn?51UP0QdDfll0zq2SVInUfL!wwlbfTd2*#2gc<0&h2+ z!Y=%U>@JOk5|7IixqFWXO>TPPIr}}cU{9~oycyr0oxJwq(X(HA3=9kgPd9yK1kxW$ zGNpj@jHQ_@3=9d=mI*R2G(^sF1Inb8w(DMWxc2Sn{o1ef_fn5lbV|>ezL8UB?HTpd zIL*(UbC@n)dAjXd-+#N8(#KXOwNH8^@gecH?6!w0F=;v5j`E&6euHINi2s(dqh>FP zW`zq?vI>>%+`9E~{g(H7C%eD&CeIa^zuM@7J%6;3*hIaPYPDyMK=hbBnUdT0`IOz` zmh2OnvwJF81E$wUM_d0p{BOJGw%AGiGxv3Ui@AFD*Ya0?eSf+Ab_QxY39>4F;eOvw zrhkuQPv4kWGyO@f-}-BZi!MP6Zw6Dr{9h; z{TDmwd|`3c%6%)p*ezFoVE2gad0GyW_pB(6^az&aF%v(0`%uaK@PJ|I&b7c0+9Yu9 zbp+dXldUyx&8G3UUF)g$O~?%Hzaya*E4P!eei_(L{&G7D>wl=PoA*_&D&X0=A9Hpb z{3$W}z$9RV87+Ua>U+D}rZeiFxK^BAyH@u9;@Wb_>8Yhm{a25wTz&n}r2{E0CDjtu zb{T*?^Y+L4$^Wvw%vb!|`)dhd2V6b9hm24O5*q)4$B*#j()+J$nDBz=%u zY|aoMol*p;f&g2l*o&kHQW=I|2r0~2jc9TuOI(Urejh+cmMDRE<9U2Tio>hB^(p`W z0MO_9(i;E(0Kj}1Gy(tsFvy@0004kN28{p!01Wy#XneC;Uw?8tz6fFn031Wjz|#1i zpT?MRuD|Q*ZoO*S=gvBgW7{sN9+O>suOrqlH+7%gcHXP|tiB5zBA>u8b@DXEjPo{0 znk28P4{E5>baxPs)lxLoVy6M~u(<6LsuCdsBr@>BXpoE)!=?8|8WLz3UKYq-)t-z0gP=SLZV%czf{ZIb+) z2auq&tftER{NW8g*RHj&qabU0jfTuD%O=AF{uLcu4ZT zeeMEZn1}Af75}!6rQep<-o->Xz^4u6le$K@kGhNHQ72EMZz7y?;=DHz&eh#|^*W}0 z9z)+0w`FHxDq)zXzA5tSL8Du40LMBupSa})OMj$Jp2nDQes;@^`}RwX=uda(W}4;w zGTL|3QkaKBH{-7Ru$yrMpYoD?qV8fz)XCErJI;IgtZ6?uv@$Q(y&kG4jb;Y{^V3bV z>HJ+1uD%N#BA>u8b@DXEjPo{mIwkp-ByU#heE99#aW-?I4#cpp;eh$;7JdMy`j}7D zT}3R7I(Zsn#<~8ktGo5;{H+530N{({^e+Ga0D}w~0RR9PWY7oz0Kg!FMgRZ+2K^7a WKzxt_qx>rX0000-BYy(%Nkl)M?&24NFtc z*>&?=J!j2bU>ErW`qatuIA)yJ$xXxfxO$_3I!wERxURNhs5UzdScY}8m3dp{^jU7t zTX_uCb@Dup9p|llHYB;oP2J9j^gpSoo5qo;NjGXb(Q3D ze7q#sAvg2&B7fWS*4zbJ`{t8U3&7Q2f1cz?l9%Is^A_mYC!bs-`7i1&PK!Eu9&Mbz zCi$4d<6IvIyBdsSZ}__JOg0J$ErfHQIBzY4^XUEaZ%<!;rfN0CZ^@0RRB#`VE#uVf09Z Ss102J0000x8 z4gdfE^tpWB9{>OVfay{+0ssIoNYMxY0KgzcBLDyZgZ?WTZ-3UC+^jdF-}p9d0ib0Z z0cvsr&uxh@_LTaretdDeS+BbLrGVU5xBDEstlBwCxjbS67(=cAYH|WoQpaH(k98c* zEf$~B2lq*`N^;#aE-Tx0OIh({*M3#CpW~OxWBX#w_*d9 zX>6`Aj=(a=2~0^Hi}&4adA<}*B^K-b*>hI+!Bh3!RkyT7<2K25mE@Zos>`yHU6OB` zjh3R|>-1OQ%vXJ+VVmT;B!5(|UnO~&=jSA^ zb10}v!T4E{PxJV!+qr7bFt+twIf3|99v`?lDmX80H|u`}Hu73k-eLo2wYkDL0?Q^RFcoFrwLY6Tho7UK($;sQ_u=RM#Q*>R z@C0wFEZf<2+8Kset`ZmZOjKe6XtlY*I0DNiComOd-?g1tw7nd~+_d%G=zaKAl2_@U z2P4vybhBkLPMkAFMAsQuo25_pNf6ay5M<-8Jo54zU4@Ay)u3Ie{r@ z=jA9$K{dw%7jNo=r9j-K|L@)>4;AGuNp9AgB*`y7etv3$`_leITb88_LV!NT5uhd~ z@V_|`V||6>*&ETX2K!+B_~Lf6e#Vap05kx=Ih)(5R{#J2-XTRJ0001k6pa7?01Q$z d0ssIo=wFZ@y^gd+%Sr$M002ovPDHLkV1m3+%hLb= delta 890 zcmV-=1BLw22ayMmB!5^*L_t(|obBB)j@w2Q2H@X=lcLcw!|fOg~vz!q%?f;`uUpx z006+4&FB6F00013E};$Hh?+w3ZSMZuq1UI*7aD|;o55PW46IVatw^O&CF$C_rp{cyvZqKZkma8J2aEp z0LJJQKuu3zDcaCd2e(1 zhO%CDq3x604S&zKwefU#R2$HzxxK=E1p1&Suq1UY?uN(mdh+r>&yxI*^I}sQ(3d&A z!hQt$p(n5u<;q&gIe#SiEvGVo|U^i5A-DSplIWW~Fj zLgN?1bKif)-|PQ2mG9o>coJvIe*3_S^%*~jo}e`5du0Qd+GCChenopyvF`c>+p9*IhA0IjxH*pEQp^aPfo9J{t7 zi?+9;SerKA%|3?TCV7?dfpG3}85-}J`LF%Uq0G~Mk^P_Hu@qT(?o|wg13jDS74{?0 zCq03s7#j#@m-7=ByClC4|6c1rIBmWwqZ_?yvdIC!_cFT=&5~HVEZcJ^1kKS_QZdkx(WZ~_V#`5|u>qy_s^Vp3+>)LR0 zUg+0{^a}eCSU)|1rKmrSS=Zuy^Ln}Z*bex3t>$cl^=(J$ZSd^pwmA*CT8GAZCGAS@ zn{)Z;huQ$<&?|tNp1_i{<8l-wP_6OA#Y5X*35ffQ|J{e=m?%Hw3&`z?pimpY9C`&% z(-T;Vu^`!lS=->+QZxVn0H2W12mk=UB%u)i0DwtCBLDyZlY~Y9001Wa2WNGe?X>n$ Q*Z=?k07*qoM6N<$g5g@i0RR91 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_progressbar_indeterminate_holo4.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_progressbar_indeterminate_holo4.png index 9456cf4e1146bfd491e9d609e1700011977c9b32..99c38df705fad0a1473c83630d136502e2e8a94d 100644 GIT binary patch delta 1000 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 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_progressbar_indeterminate_holo6.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_progressbar_indeterminate_holo6.png index 3c2e03356b3c2e81e877eb0e9f0b34f461afcc84..ddba06e8111b83d62c35e80a5fd252a86a7f1f12 100644 GIT binary patch delta 1015 zcmV;M1&0BDy%BLDyZgA5u0000nk! zIS+xSreA?JIX8L8SnXrz?;f2k=Ck$Jtz31yU2myglTCcbX(v{A8`?JTlj>6|-uS44DdT8+dBBovrjK zrN24OcAqkK0e=E)s12T{U43^l{&DY(@$%yQW|rh-Rs+XwaQjvQTPC?)Z)JZ;fG^hD zNjC99>$+`wS?xd0sy&}X+Xfz|PUg!bSL^+y;GAXCr?imYfo;2L19k7=>Gs{_xR+yJ zYQnnj-uH2@W30zxnI-u${Uh3a>W*mNB>6e3KyR`+aeqEc@+#Z2r_ic0dsJqVE|a{@ zroA6$)wa))oMv+_CfYX8ug;mvB;O|at9t(=s|n#RGJbvswmnoEsCy4rcf9jMlHaR+ zrSJYU$@{rKVBGhW#?m&wD*Ilo=T(x=#taJH(f3Jy%Bs+-6T?SI zJ{d7CV1K&4OY(2-Uuk@qcJn)MUtJp{>fYz#wJ@z6tbg7O!AwQp&F+0|`^O}I$3i&3Zrz1&{#n1){moU{$nU_mhiZc|;iK+7 zJl*lmAK9#NQ5HwM&T4_2U(?1yI9DaUqqD{Qy|l3;ci$s7>VKl8hncFO<&`~h1NcAs z9)Gz}3XjAiH(&~O)duR`!!y-KZY-1B%(6;0*BN&PW7k7Y%ll;@=^>{~#beucc~9F0 zcG>lS=(>LyJHG?l)VC{KBh|B2A)#4 z@J#3XQh@4Lpj~Q%=V@q7i&l>Nz5H@IUvOlWby7KaQR1^@tHkU=8=004sw l8UX+R7-Y~0006+C{{UpDs8WU4zV`qC002ovPDHLkV1ma83-tg1 delta 938 zcmV;b16BNu2*3xBB!7oVL_t(|obBDgiX2542k?J}W(j$Kyn#=Ui?@ImFWw_QKu(go z_yC^OXAm@JFG3J<$teng2k{X^#M2UnVev3i>Dr#|osC(ht7m>cXol&Tg^#V8s;{cM ztL{C2`Z@pr05E1XcK`qY0JO`X5dZ*yNd}Do002xfXaoQNV1JT9BLDyZle*oJv@?Lb z+8wE0lRmyx+KCn3g}M#grMf-28hlo_C)yQgm)zhyU1hrMF0XTz`(FRjCAptIu(<*p z2DYh=qN@&_Axoid19$CeaFjNsv^T5lw<&WcAV5!UaGnme-O2prJ{9ApOY$Jwf#Wc^ zV=IBJlf2m-<$rwX0PpXPi}dkA>xOlEU7cTLTc0nYZUeVdcjoIPm%H;N;q214DJ}Hx zz`jGdfxP$h4BPHf?xpNYPFT0y$1e9e#(F%KF3Fb}AJHDua76nu$gHGFe3#_ek%D+vuhL(#EkB;eNj{%5 zD0olbCwY-=qE~keA1C>A#<+mx`Yy@8xqhYbLE7!#f$QqrAd&Z;i{Fy`nf>w3lO!L` z7+3Afur$L}siu}(2Dq)dzbx-J(_aS~GnNy`dr#kR_0$&2 z{cV5JCHW@vKPW%85KdVHr(VJ5FbASV@d9@EjQ|a zqNRsfs;T9bZMgybA7fi?l*A*kpJt4`&5jZF8!vBtyIGLxs3Xr z-V(HqkEK$#fx9$JJTrJ-5>V|5v`cPqo~G8cXr zX2?0RRBNB!fl(001T#Gy(tsFeAyJ5dZ*yNd}Do002z-50ZL=geMN1MgRZ+ M07*qoM6N<$f-Xto!TT(1HE007$@ zOkDr~008PGX#@ZOV34E{004kNl12ak00wQ6#uuygl;ybAZGXyFdtCtFe_~vQdWgq) z*mXNDmg`m1KHrD4j_19{^J3dUF6*!lb%C*o7hr7q8K{SNoQIm)aZ`pS$-`a&`UR=U zd9j?eOZPz@aPooO}qeO)6YOX#N#~F(vD@)dY0s@N%ANciDSP2wdoi7q+Qak zCl_UZkc)cMUVj%DTR&b-lN`6Nm+|tbeH1UiZQZn=F)qXS#N#~Fl<)MvPbW!Enj~*? zHEXR+nQC0b{vgSdB(K}&jyM9hb(4O^xD2}?9_OLV zcitsA>TTauJC+PBrIpI!IYfvd_RQQd#y0q#rL&ls0s zI^uC2YH7!VB#qP30000C+Sj8F)sxge{qD9YX!}2cO(hJMwoSdgEneJm1GuZ3_A|z17@v5Yhnn)8t+(7b zZdYnP+i=~@F3)=JtGzBTw%f#uoBRTIVO)lKh=0d delta 737 zcmZ3(_LFsjO8o&(7srr_IdAX!X5Ds>V0&PGu;oH%xTQmN)4Hm~Z>kzDF{ea&RCmcN zx{#_Eo)I2fD!9o=k!5?g$H$VKiSmmwbmp zU-NwJJ88D-r0|`-GN+lgEYtZCx_!xQzr53R6K+>+i4&KImejxQIqmN2(mi`#U3!*F1`{{Sd)F)XJp9Gt2zIN@3J z`o9I!KbW0Ny(al1ang0qI=?WbjO)Ku_J6A1v&ZvO@+Kk1;>+KS|BCWGt~c^=w>fus zx5|FwTI)LBqD?!#=jLi{eqAJeBV>N(tN-e94|ZMw*|tns?)k#0Wq15H6+}vbf^>J) zwT1J1SKMba`?@jcT$^fK!}E~uKyS_H13D}0R^imVZ&xmFsSnPnO@3iC+w-x}?m%Ej z)H?rh-Tuyc*1xTnXK=7r%&K2lcWeibzQ4^m=eh4=(q@(2F%vv@737J)Tl4G6Z;Nbs z+Mf{2dHB}0mD{%;?RL*&@c()Nq~)n@`gGpnr>l9t+rIg>0DXZHXA diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_progressbar_indeterminate_holo8.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_progressbar_indeterminate_holo8.png index 56745c26b1d5224ce5c477390cc62b5986ff3c91..74b6d01ae90a8d653c02fcbd41c7cf04727a8bbf 100644 GIT binary patch delta 863 zcmV-l1EBoC2KEM!B!4|gL_t(|obBB)ZsSH22H@WYVJuv1kzy~h2UsAr3*{c!^ugX@ z_Y7NWtCRuK1W1vKqzFS%(AtVcq_4Zo$upqN;wA@o;(A?5ntnVj=E-RUucrtW>q-0 zpI{0~qb`y>tbdoXzU=sK*2_&cZ2%muPGpND_v`f~p*2~>*=@GtP0RuN+BeUX?{;|x z_9wo^tzFkFs`W$EHD!NTBv~{`K4o`R`r5V6l>Cw8_pBQEF`I_{G0BH~f7S#zOdWHJ zBwv#JQ$2o@-*vjIMhCQ<~GT%ndY$#3`u;ASAXegEWL|=CHXCzI%kNwrmmwN znk2s*xuMtS&uqHcOXGe>^7A=g6in3DB>!cT=x&nykju(Bz_3c5se3|hBhNq|#MgMe z&8jo3{%nSHPp+PJE5m$?F;g6951J zoi6EYL4Wy8Zu?rt_E5q=Kk9f(HZcd#mv)|Mk0uBlPkfEn$?KXX$>&V-V%A*);gmse zo-XQKuTKnw125ISfd1e0ZTW&J>psUoIKXkb@=SeDd!OkZ+rW^-*Ldw32vE!x3NOcIvujnXI}kACu($Y@WZr{nX?3 zUs#1*4Gs*a{RITjx2HUFp~p5bB=L1d&$M~(bxr+zS9kMSU)u!$0AONtD+2%k&`Hq< p002NIMI!(J0G$+#0001V`X9M^e2}iS()j=Y002ovPDHLkV1n>ktZx7S delta 809 zcmV+^1J?ZZ2EYc8B!34PqNxNRoXZ{C;9F8-m_2FKLP*%0DaD%`X2xQ z0ARX=MgRZ+1__M-000aU8UX+R7$h_T001zkX_sW)0dm&JYac|U$Qrn=Ua zo!jbKQ**$+^cfhB`kJ<5=bB}*3XGT4ozE#eb$9stYAKp(Q3UWf%g$2jt<>Uq{;jt; z^&DV)`V5RmeNER>momw$GH;c6|o6r@p4Gn`;);`Z01%*&h~37EO}(=})EqyY7*a zuSvdSwUO_$-mtHdyv)BxO@Q6hHMdCeA<56`_KPGhlDuiZS8u?sw&^ohN#13i?`>dA z>T9~nnZ|N<@q3cbS?8QFa!sA1?wTZT_q?P3(YLHmvwxS3`!dPvr~Id2ramV5opqzT zNb)?V)pLMxl|ECS3Au_s1Bal#rt4W&C&TLJX3Si(XdeEZ*(j%N>(uSzs4$+s&(xn% z&jH5Q?KAZNf579Yujx8^t`V330003=$Uu4$6oWS$qZ_6>wn2EqAzQD?h8F%S+sR`&w>U+vfO0#nxA#6UQ}eunx? z{igOd^L=jvV^Uw!)i)5%T{eUKp>xf~KsaZgu7AA9e22~Ln{uOsMpJIUVf78wU57?f zZUB$9ZJ#kE0PIeEOBP1jT8nvH#-$$G;3IX~gu>#B;fvF-41INipU&d;U6sX1U@`V5Rm zeNEf3bImeYowhvX3tIa&I53{>3lPAe=`%1M^)+3i<{C!`0000OBs2m505C{s1ONbF nkRs3s006)sp%DN8fI)u%r?X}zQb~G;00000NkvXXu0mjf+^Lof diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_scrubber_control_disabled_holo.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_scrubber_control_disabled_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..1a9ced650925ef1bb59be7b455d0665e6f7b0f3b GIT binary patch literal 845 zcmV-T1G4;yP)OQXxxddpf z>xkhU#N(d3g_Quf1^S4P%;A+;fY!PNya86pZ}?MuWHi1jrN&trrWRmgy$$RjUN4&v zxB*U;QlqquvUso!>@pkUBU{?QuGV@bOQS?g*z6#QI%`&eZIfq-Bnr@4F9X}m&hv4! zfmbGMoj4yb9dv+JNrt7x1G>m)BtGb31rboz*Cq=!WE5(yhpdJf?{Dxtac`qV!YH^r zyNtx*JgEY0t+jQAcL``RU++h>aM%$mz=TiJ_Wv_eM{+S1n}JnVqi4n=r+`!wNgQFt z^NzMITL*8yemdAb{CKo=*$OLOk-C-vTEV28?2CiULwahLsf zz4c+vE^AnvZSzW@*q^){yhqkeHFNEndwH?i^EV`EA#4JoJ!~$P9y*7>39`=jffI8t zFIHP@ab8HkUVroUxXb>e-uuAgi(u)YbF|mrye-hBZ?nfGU`)=5%zF$&N!ax-zwhQY z9$;+SZn{F~uE-lpBtQxPvBU~cN`*-2qtqHsPVUJnz;KI%(YzVru)`(b9=M`l@D{`e zu1rM4VijN-T`=EVxIsq1igO}UO5Fhi=93F!;5@0=m1ZU$0N16Ml%4=MNAl1~q5xBX z{YJu2mPi!316S-vq*@D^O4%tXJW`Ml`EZ=2tz2iSjZPJ~W>IDd5YL}wsaEGH?lyqe zNW~)ep5X~&q(a@#dS;Nfyk14l1iBR4JNw9|vJVW?#Qal=9&pr=(#smMZ?*26rU;Qq za)`wHO_5`#QqIUs^{j!2SV8vF(_$i{qa&sfjumDWNcJo XK1Avlx>@$SJS~lZ3oM4w4@rngAm`E2qrLsadliZrM7x*UkFJ;wS-)jtgzau72=rLTX^6S7pz$a=HQPQ-ov* zXmn&Gp92G61Pt|W6H%}oc_aS`SOE|Eybgurig@M?qe0^~;zoK5TqtpGP}l%#U;)e# zF>7FRJ-MmDZw;4#fV{cL2>3$DKX;Ojp+<;*1U?`_Dl)8baKswq2MF=6fG;_Xy!Af- zuCz@XkYZL&U6HL-K!W@$#AUk7Aq7JIHSj|Fa*0TiNRYqM=W}6%4A7$`4plf*pg??n z47}uYm+@eT4AceCpOw?1%?eQgjnThA$e(lMn;2=IL!j5@N^KShU1!)eLkBJq%lB#F zx%VP6`j>4DoDn^?gV#%i)D$txu*b&vf^Cu;>+>1W&1MpTwgl)e9z6HJqO5isn z<9aaEYo%+Z9i&{Sua&&M-$Tg%qGV(4Qs}#%fgclPQf&|QzUM|Uf)@L8!sZn+@|TAS zYMHlM$BO|8!EFL^M(9l@p_jmS8GZCggwvfLA|EIo43G(%6KV_KYy4IYKaTbq%K1Hp zK0eoJ;syQ?T?E(Oi&TXie74<1Kfj8NRrxX z`~ac%TGxY3s{PdVhwU7A8~+{2uwLA29d93%UhNi8m;mqS7@=Q*rK9W;$;Nliwrk}Q z6`Kl`74m^S#y3ID3I#Ah;(W7S4gAA)DUoC0mEP;-s&q$yzN~{vYy7c#4ZH*XV!N0d z>$^GI#oS#6d63b6K(<`=b}IHPpoKPCX_X-WC3dSM2W%IE=8`$YK?ZX{VkHV`7Yg@l zY||EPUJwLn9J&4*jJz^`-&qDINX~}fhFo$IknYl#Wq{p5tC)$@C&LA$~TXgtgZ7N zF@fG+T;({2tzh-9*W zqjeK}71#tW0Ox?`5p9>I_2D5#tnepr2e_?ddI-^>GiEpePwN$61<~~Dz(t^*L+ELU z5F)$49%7w7LL#0=Vk!a8*J~>5tH4{p207d>BL=`P!1st%9sv5f@q{N=QKX0JuyB5@Q5Z`{p+5z`MYk zh=xuItH67RCF($>({7F}gy0cyT&JQBUIyMEjprwc72q9Y-mNf�UW=RIccQC#`uO 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 P00000NkvXXu0mjfbsDOT|>b xM=6iQbv|(LX`c68knH_py~2gA+|ZY{d~6OpiW{OAGy|<+@O1TaS?83{1OS?NFyR0I literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_scrubber_secondary_holo.9.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_scrubber_secondary_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..880456b02b2dc0acfd49a294a37babf6e73b3296 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^f%A znUur5fT!l%WflerN3~5W&dEJta5)mqYV>)2h3%!iO|GRTh5h0M3}W6jb*w=185lfW L{an^LB{Ts55H>O< literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_spinner_default_holo_light.9.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_spinner_default_holo_light.9.png index a02ebb450dda203e6cfd57a3a93c372792530615..a5fd6ca04500318b45bfec9eb3d6bd2d3e6dd128 100644 GIT binary patch delta 285 zcmV+&0pk9!0=NQ@B!B-&L_t(oh3(kS3W7io$MN5Wbch}%80gZ?p1pfdV;!RDvVusn zo3lH*(0oBqT=0Yc&;>Ii5l$K0!z_iEVKfjE zj22QIQv#`qDTP$S)PPjM)PfXaYC?)IwIOPZ1w@6hf-J^ZLI8xHF~$%8nNNra80!IC z;`*RG-b0N6aGI>Y0Nj*_u>py1njGd{c<^~|6kxQMLsc`sD%{ZAqEFW+bBt7AW*~&G jcXCK>>JpzC<`(b)$1XY>^rbOd00000NkvXXu0mjf delta 277 zcmV+w0qXv^0j+c0$#k$XZJYpX{HCU9_(NY zlDan8hUO1K#{&IPM2Z1&aj*`V+21JwakDgHm}9scBNg)_^R%jySrx`(@?T&!$8b4@ z%Q0O4iy@+|^nNxB5$yq-i0H5=CPA9?*>Q8?u_;3?03On;>3_+LAp6|B8D=WP3{wIz z!IVPOF*OiXOf5tWqXALDXhEtmnvg1tHl!G10V%>*K_+7?AppYH7-I;4%oQR5`WgV| zwC)P`yBA{s90%(sfNLS5uY+)>$zg7ln~!_7Z7W`|ym9^yxs+qLR)q<`=bOyFWFN~C b_6lzv;VqZC$`1Wg00000NkvXXu0mjfSa5qi diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_spinner_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_spinner_focused_holo_light.9.png index 12c3cd5af887164a8b5cd10e06c457a23d62815b..ae4ba5fc1bb17c542f9c941c3965ceaf738d1d55 100644 GIT binary patch delta 455 zcmV;&0XY8i1K|UZB!8$$L_t(oh3(ltPlG@h$MNqSjSx0hHyw;iWiWjY9USzPYGPu1 z6As3qy6EKKU|dY0Eq@$52u%yM$K6R{e+$rFcs{)Xfd@f*irTu^Ft&39!1>k10Wbz4 zAh2DumIQbJ?rtux-v;W#F)#w8LkRr*@KL!@Vum$H;us@U{eKD*)*$zeKml;3mSG)J zPXbIGU{>P#7-@}U`Sks>2oSxSnchU=;L7^j^l4^_K4E$_GdoOUc9^E@FirWtm?ACK z-9J@vhRLT{kUYo7*;f`ejd6m>r&$nB;%M{!Q?ko045O3q%}SgV*NNVfTT z%o=7}h&7B3#D5A#7h)XK1!5G_6=Doy0%8PX3ep*464D7{8lsJ{0nx(Pf^3bk31OQq zgk=b@zH_w%DA(gj9A%&B2>_mEn@x~vV`i_jqiR2b+}j^KX(7se48%4TEBSX(+8@4}>Dn;M=Gwc2)SMLs1>Xev7eLz`utzD%AC3VcBLP*@cRRPFV x{R(rdmP5ywL_uyrwOxybF1cvk)Jsb(@eN27rrB!9X|L_t(oh3(nFPQox42k?J8#6gUS2QS|AVDx}HDDS`v_zFIh zkKh9kA3|b`2Z;wg7!#v0s3A~bb{=e(PS}vHtxe>AS;v}uKgzbSZv@3jlrfnzw{!>q zoSj^30cZh;0ED)SDq#Sw0GuD69z9mXhb;h20MsD_`2ONexql-u4F$p+W2mT~V(JQ{ z;|LT2I27Buic!M=3>;vl;`$sZ3`O?x{j(5&c(*d%gu=m{^|$e9WfGq-Uaia$lbaR87}$SZp~ z;NaDwxmGb5NPqG<_j$}3W>JVWj1I&KMi*inQwCxbQx;+jV*+9XV+v9lV-ivdV;Z83 zu>sM-*n%vKu?fKAm8wH8AG4~%gJ911w`NryI zR|k<6BP*jYsExHS+w1#xWs3hyKq|Z%gnF1-WzA(9)>5BGmBhFH%&ecu)w_eKIugUg zLD{u-6$xT0=2{>q+`d%-050mMn6}t99AlV(v;om}O>(;Aq;OX+1+~Z*B3%1@0gJbP P00000NkvXXu0mjfR7%po diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_text_select_handle_left.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_text_select_handle_left.png new file mode 100644 index 0000000000000000000000000000000000000000..5f262c9d4fa4db37d588829b6574bc5b94e8c854 GIT binary patch literal 1376 zcmb7Ec{J1s0REX4gC@BixoWVEgz-$vxX z${@$OVlbsNLo%3X42jX0HW_RG+kf}H?|AR~{`>y;Zk_f{N5}a$lHs>@8G^*W=Z+^O1OS z(!d|Xf{6?rYFxU5|-I`ZUbpaSk97Y^Ya5 zUyG@zTDDVS9+BT~j1+Xi13v7ciL`pmy#fQ1q8(^>E{$iZIhJO%(Tb(e>nD3f;s@0U zDYe;s^Uv6;5ZI7pQwL)*jWL7+@)aecCQS~DTEx#a{E?^3mX1cTifhrwFo0w!(@~5M z-7e2c&r{6Sp5!QPiBFtci?)CHysBP;j}w=s!iK=(5s6yD%qyMRb-ce!aW5-R=3?;$ z(f%cFDSHaQQ2V(a2L8}y@*~MeAcWOZ>m{4rr-Uw$Oodd8rT1LOGhHge<98;;Pdq<0 zm&01=aQse_gjqKh{!af@lOISF-F&?MX)$Ytjrda7hGtbMf0x-#8D_f%Ofkcww-hZUs-0`-bMAkYHvye10$$`Htcbfs>gyx@?Kng ze3ox1{*YHK9AomZT={2HSxZG~*k)sz+>vZ%YmU}DLuJ`O^ATBi-|*<{9T*R8wkRV} zUrJDSrAYrT{9G!teotj|#)pxF_u3cD$%Z`DUgc|{KhCF&aW975WOD4)docjE#Jl)s zvc;MlHOdGKO}{f-7-SH&%7h)%zvn5Dd?c(S6gbWOEtlH>;@n^?3!I7Vby9FZ3OKoe zfnaPV=k~7ewhY`3;BY?}la>+^%yyrNnAETSQL7gKu@oJI(t#WMAmjlj(s2L^Tmy~+ z-$VEGjb%s%q(~qmu4nxKs){5XZD05pR_NL98KV|8s8K#Vg2Yb9#hlj#$&f`v;ZjeC)s0D<=Vc XzWi=`W#)!(|2YA)hqrs9YiQO#JLr&` literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_text_select_handle_middle.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_text_select_handle_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..e4f292ff6366bcdc11c8f86fe65ad62c8f7bb15f GIT binary patch literal 1495 zcmb7^eKgYx9L9fGR}CrFJ!_WtF>`Mkie+kT(@fd*lDAt(++-`7mrWRprlSpMq%>S_ z3Drg2!puvuEn~anC5eiVNM$Y6lI!%}{qz3ue4lfk^PJE5{`F*eQAm1V7#IKmJ+eE| zXU$1#3RwTs+Vwvkcn$#8m5_=14kZfSKBdJ#{NR!g&jpxBp^NZii$ikRrgY>MZ~p-b~G57BN#oTz;*G49-vzUwbozrn|p5FIArDmuOHv}%+eEu#J zf?ED7;HmBYOyS_+DXnGukeu1AIi~Ahjea^cG}czL*MQqCw-?s}Y#$hylRj_0ZF;Jr z{emcbg^AT#0+BX>8q4F76J;Z|IS-FDIPe;JM$_a_9S*+i@4TFKhH0xaLi*}r>En>z zx!r5n%2cK7Wnbvfw(Ra>)y5ojdHzosoiAG4laV_aes8v})F~271Lz>UwDy+EgKO<6 zGjC5gCS5@Lhka6&BRx8g)}sf078D)K4>f6KIq2ZxqK+(|2I1YixWat7-DQzc7Ll?; z+*A5WjjXz4Nv0L}N9`W+O<;Y_HQL$)dIjESW_~7G9bKhVR!J=Kq#vw*e4u$2S2189 zt%@16%v2`@YoIV|y&&ZPtv^R`xwRVE;}Z9yXGx~!I~BNIdE@Rq}R; zTGGPCI8vLS%ld`j<1?w{fiuhM`DwkuLX#9!e`#ycfa4I_RC1cwb3!?6YuHSr{Pf(!SuB419t91@rDs!`2jvf zwY7}lyIg|*;-2~&(_KsYC|lcQt&3oeW^2-kA~7`Fw$4bWbMT)f8ezQ9`sh^5z~FZI zgW$@m=zB3qNl*FPlqO_e151aQSDLzN%me}_Tp6d=19+{j{zv3eVoh-5Y|pIHKu?!c zrdZF#G3Y5k%3M6G+}Z9s1_pQ`ApmO^BN4` z7W+%Z(z}z2NbU2lowna;*l%M?pzo3Gtr&`N4Dr7g9Wr@b5g8@^@-?H6>zqS|ODuE3 z4J7ESsVfiZ2Pd7a=y3l3iv=CtJ3a3tr1#8yJabYJVPs7wzm`SV8!|@djR&n9@|r9^ zjs{EKl)*IF8W+XMq@I$A<|fp&KJf-KT{Zv|U2p#C<+p`{-{)EVm=B~bw0xE+erHgj z9T2v5eLWw8$?%c^c#|52A>MT?^nn)f^3JPKocA4KX{+Op2rxdHCdzYH47AB#2 qk|V<6uUBZsxss_5iP-;Gv`W8s{=f}tr$Dwg*Z|p$LcEPXn*J{&p2`FO literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_text_select_handle_right.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_text_select_handle_right.png new file mode 100644 index 0000000000000000000000000000000000000000..5f5e7f1735c70ab9c4e16c001802f2a35fd5fc41 GIT binary patch literal 1502 zcmb7^YdF&j0LK3qYB7%74s(|gVs05Hx!=;58Pm;>YHrmWQf><;q+t_g6muT$}Z5J*U#I3*kC2ZibkcAV|79uj8kROX%BVo+kd=A@gtAd z)Qn#stkQqldSaw75H_FUu*&vf`_`4sp(wI>oE)l4Y$_-&!syDWiInA>p=aQ=(Mx69 zuKHT48@tPCV%8^xvPtcCsH#y7ngl|JziDNbd1rC0=rSj}py`_WHk zWn(as()NxGBNIx0BY)fz-;t-FtoW7|&+lH`qRQ#JfToA}OLeQNlG$N2-;$p;WNo}> zM7o4|Nlgm#y@@HG?+6AAO)mNC`DTG^hm+~HgMZ{_VlbHK!Jl5zppq*5b#pfQTZ4So zR7u-*51Q7$qGb2x-5QX?#OW%weX?lAKmcj`%T6ek@(w<(bY-u5yS>HNL#t7LK{~Ur z{K;J}<8{<7wSG~cuuiy_+BDmrZ=9u8J*sLzAoZ5*D~3lkDOILyW6Oi zeQ`xi<+?4hJ}eL(b=go6%*(pETRj95-spO0ZGn}jLqOc#{2~=la&3NP19QA! z`3cYcTuumL$lRmh@#~oNjlWD4E@0A*uVeR(4x@PUESpd9UEen8PXBX-or+MVNgxxxTct1~1gPK^@MW~%6)ZT9<1+BAwQo#3;S~HsY5#w@(%;DEXAXWFDg$JCG6l5@ew!g z-c||HbUB?rMH3-OZ!Lj)@km7lorB5qMO+B zH4r|T<)$rTe<#G>ZY5Dykx8U-8ugrXa_y`hT{&>@v*>3Jn90y1^_1Ksx$+l5=Z%H? zsiFw3{L{z_d9T63P5Gd=?dc7fP~uP*W5)EVe$3&Wlm=3;0hBD3pszcxxYU}W;_)yaAa2+7n-2!mh+>*|#(y*XoaUL(zACAyP8=FB4Mj8d)`z)lZnt%k zW|)(Zfl#`Lu|G)HH%oyCDHXB}7SxE8(s{5ChJYSW3(N^|g|R|7fb;B-*OH{yEX9m` z#w@EpKO8ZuxJ?z+;GXLQij;LZdg*lCL2fT@LoH}F>PB917uQY0FZh}uY%XCj;tP$F z0bjpasG6kTJO?0zWC->zM`h7jJvHjODKcEBJb~D+8f^#u_;}Moc3?(U8*W{ICgv3j scjXUyJG8_TETNFJ?wK3^K`S*$NWLfXn4gA()WL59Zca$YdV5^*zm>Vtc>n+a literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_textfield_activated_holo_light.9.png b/OpenKeychain/src/main/res/drawable-hdpi/keychaintheme_textfield_activated_holo_light.9.png index 70691cddc3c4701a467bbb6248709872ab0feaa2..9f400ba30cebf85f6ddffc3588c0630a26977219 100644 GIT binary patch delta 170 zcmX@kc#Ls^N`0@Vi(^Pe1?|x=r6F+Nu{B(;_(R}V+q$pEtger#*)sScdJfbdZWVfW9i>`%d9Dj z`DXsPw>jvI%0w+qrSJEe0uNu_^vBPwDWALV?UD}VkiyNsIX``8e?6c7X*91oyN1-B T8vzE)3_#%N>gTe~DWM4f^&L*_ delta 171 zcmX@cc${&9N`0TFi(^Pe|EonV zy2mG+d~d6L)K6&TB&DMFx)P=~x~Jc#sQlRW;D%q9iifEA?)eJ!^&9^E4A^(IfJsST Vc4FExta|`TrQeldb;!fTOa!tCD!ED=(Ek1@lApHjSE~v zPw!3+G!G4(`gU{S`H6dM?tbWY2@>*rDX@}nB5&HIJb_5ww4lnz4MLutDykEwfaIWz zTP}WkmTt>5o_sl)>(0c#)6I-6_a-h`^0lwyVsVZ`dN}W7k5jL64#ak+-w2p$pVR@; wdNb_%$Ll*^9Xd7ri)7C4Tj~$q-Fk1FKQBVcOLX_=Xa*qgboFyt=akR{08Twz4FCWD delta 159 zcmV;Q0AT;)0lNW^B!7ZQL_t(&f$iB#3V<*S0MS%Dp7*~_T)1)Lm!WN7-b%3OP$(j4 z!OGKhgP%RGjL2nl#2ZFZjFdEvUmT2)6eB4{QjDY+NimXQB*jQdnaF%xHCUOQ6u@8F zZnhcTQ(`BLq?CwUU##hMcoO#FQ+5H=PbodyI_T(>O3_vyn=iS!aJ)88_2v&+p^Nd5X3!vF-H Mu70d8>zopr0HSt$c>n+a delta 271 zcmZ3^w2EnhO8rMq7srr{#Ajn zmA?t=r+TKTnfL!R-*)0Oa|6%&*%=I1>Zkwyd6KXH%tzUi=Ud&A&#(uVxb*$JJD2qs z?^b_RtK*Y$w#Tyn`sbX}=l$s5&Hk4$Po8G#O|+Xdb36F{l#+cQV7G+M-3l#?f%&M^`z@hyLNFVOLNN$Gun(9 PfPll()z4*}Q$iB}fkS(+ diff --git a/OpenKeychain/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_default_holo.png b/OpenKeychain/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_default_holo.png deleted file mode 100644 index ebffb16a0fe41a8620474b73e464941e9f5b2165..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^azJdx!3HERoY(vbqzXJ;977^n-(EE2YB1nweVG1n z!J-FiMbghdntE$j%By9e&L8>rs7|Ok{QBF^3CCH)MI|I8ewcqy()2ntEo1lfhYNRb zPdcXm!2MO`s^kPXcu-|gc`&+B-ShQT^}oCon?ihpWtoBC_aXI)i@Z+vau0j}+RfnU L>gTe~DWM4fxj93| diff --git a/OpenKeychain/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_pressed_holo.png b/OpenKeychain/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_pressed_holo.png deleted file mode 100644 index b6739b56483c749418e345618b6829effcc36f50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 306 zcmV-20nPr2P)Wz>4unvnDKKj?NsijL#yeomZP6ug1VSt0yl=^l?GI^V<%ab_T$z`^ok+n7R&HpN}~>fcGh3jQtd72%F0Ms2c4wg3PC07*qoM6N<$ Eg8O}hpa1{> diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_check_off_disabled_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_check_off_disabled_focused_holo_light.png index d7be4f996c060d013b327f8b5c3bfade5ce09553..10a3e55faf0818fb6ab9e71e7e65ae1fbd99585f 100644 GIT binary patch delta 271 zcmV+q0r38;0;&R#B!BTqL_t(oh3%Fx3c^4TMW2HN5sP#df}Mr7xrT*;*Rb^vwq8Tj z!fT{77IuP#ors87EH*1h%#!E^ES%rY?Ec5>!hBHuyDE7N{pCP>4A#Sy`53^OHh>WD z0sstf0xnrFRmY(QFao-s=1*;bIdCot5L)w{xtp7hvjkGJcYlS20POe$z}(I4I6Wl5 z^-KSHbJFTbAOO-|4kY~yt_i&A8pm<+je8VDy}TaZ59TcePyhu`00mHhBHOTDWUIN( z<~6t?SsNHrULffJv-NPbPuE=&H~|}=D}j`e2{-o6H@N^Vz=D!PX;$&)v0SBk07|t# V;rV1_-T(jq00>D%PDHLkV1nC9de;B| delta 273 zcmV+s0q*{)0;~d%B!BZsL_t(oh3%Fx3c^4TMW2ZzA{IG;orP9HJc@V(I|WZ7Xy*|` zJc$7twXpL9A|gp3!Da=CE{Sfy!ujpY?tjcK%m>lGtCH8S9BwQVgTbPgehi>Y8-NEG z0RSm*2Cna5s+vO$pbxYS%^x}dE8tQTz*FYOIEg|NXUBGH>VGb;5P%xL1rR4uINgr- z!0k)_`lLJSIJOI5Er%N``wY4XJnI$&!TuX}-}gItJ*FSbSOOpb0w4eaAOJn3mpc0k*)-7+%aPTlz;9l#Y>Q*tPMSNwS_7m4n* X$3S?1)~B!31;L_t(oh3%HTYC=H}g})2|8^H^f7t(|jg5CNk;v4w(MCUTzgky9_e$;p z@bL@4?zq+Q_wWPQlmP(JUURgnRq6mT?Jnf<8bS#G;7`8Evh1^ryK`=EE4|nU7A*rX z00S@p12BNAzo8%sq|UiP$^NMzt7`?Jk?alV^SpuN9r)@@TIh~2vm{uC~@q_fV1E`C99oTTr4?)!9- zV6CN_^ZoW;0nt!oAIE#Niq9{4^#wyeI)?#AAwC*%(6vz z2Usv~G23X+TK|yl4=!`*YXYzEd~8exYQS@uvn7Uhu^rBvOU+;AlYA4nl@<+<*#~3H z4e$;4BSsd&XKr;Xai&!O?nyS1v;a|;7Fz8VAj6^Pzkk31QTD54R0Qx&DnOhAzXIkq zj#rg;LV-8|P6Fl@zzebLS?`0mUS&Q!z*!KhWiqg>wcf87e>)l=?G3U{zncN5x@t7P z?1s#32E8>_b=3%s@nv8LoB{``u2wBmCb671A|JptFkp6pSZSd$+W|)sb3x8qaZz$b jtE{v)2paAKYpwMUOia2^6__MF00000NkvXXu0mjf@!=6`*y^~kno-dC(>5(8+hjl;ZCG=Kf*!`)`Gw)yTUXWd@wupF<>3Acfc z{Pvmy{bsUu3cLhXY%wb`5M2Wn%-iIR2Bp+@nSNn2m$?n#0gl6lWFQ6Z$ev6LXAj$U z*<5OVZ)&bqfGZiH0Kc#6thK%Xz5>T$G=p%N=Mi#a1Ak0w0Q@a!B>e(JLx%5Zp8*&w z3ho0Ih^kl3P!qtpsQ_^V9D2+tmN68-D}mSp_T1)x=O9p{5tSg$7ugU0;9C%?c`~r7 zl-jHre>E7O+iRKKoq+*p#98yrh@aRKCskMe*iy$!j~rlid6sr002ovPDHLk FV1nC$2xkBQ diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_check_on_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_check_on_focused_holo_light.png index d12f33b7df4ae85744056f4f9ff3cb5f93313940..cae17c8dad00c54d6aacbbd9be330dc45754fddf 100644 GIT binary patch delta 1057 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 Eg6(qQ%K!iX diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_default_disabled_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_default_disabled_focused_holo_light.9.png index c6a653217e8494ebb7b989ed0f84cb66b866c5e9..6cf3e64d9bb748fd88a41d46e3755fa4a1eadb4d 100644 GIT binary patch delta 158 zcmV;P0Ac^=0q6mcLVrH%1JoE87$hh(`^A>P4Y$w*F?{H=K7fe|mN76eFi1enLIErU zG(8~GG6h@`!#>fB=EG47M=iu|Azdrd0r4T$8iSS=(iMzaIBFrOfRXM#B-Ex+ptgm$ zeE5Y5W@9x2SG$ylfq{VskAnz-e+&!^U$z8pK(X{cy*of7qmjWA6t9aQ3R%Xe?f?J) M07*qoM6N<$g4FXrFaQ7m delta 158 zcmV;P0Ac^=0q6mcLVv5$&ZsdkFi22n_KUDtCb!T9F?_fx?Fn;zJ$#(L9z5dy*of7qmjWA6vBBSEODkNKL7v# M07*qoM6N<$f;RX)EC2ui diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_default_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_default_focused_holo_light.9.png index dca8db91f5acb68e1a96cfc76fdac33d17c11dfc..0edd1628a6984a5ef71b71ea4d1aa4fe52915819 100644 GIT binary patch delta 266 zcmV+l0rmc#0;K|wB!BElL_t(YiDO_O5B!JX!43X1F#Kntx2411LPl(YvoFnE`t$Ek z8%733vK;iE;r~B&X7(egddblQE%aF*!1n#^_tTuhoPWr%3=x3sB7YqaA7ZUBXlWr`!Kj6! z7Lp3cYa~$uu(fHBK{`Dw{P*t4n^z1B3`+n1lUM37GBPqSFfiPcwwL{fA%{(a&-wr@ z1_lNV2J++h9|Hr!jV*y2t|1Hlr*{WvWOQa285l6bmXUA`0#lDy9X4|TOuaa4;&NTr@!oSEZd{d;9g(X<=@$KV(|Qz`(%3@b>E~7GZ8N)38}4zmUaQ zu&8BWMEGnbnf9ea&0t|*U_h~O*e9CNd^l?1sD;=qq-#YwAbUQhuGRQ$RM2_7XG{X?CdKB1_q`7|NoI?C?h1`?%Aq(Vi6AL~NKKg_ahuawHIXuayX-u3a@QD->ks;b_eYJ06U8)NmG#-BqE^gtfy zG%J2(glxw6B+#im&;yrB{Kg2&vg96Di!>L5Gnynx+9-++K@eEI6T7aHMN#AcChg~L znGJxg4Q!w*06jF2<9qv0J~M)d03k+mD_&=iyZ=+a$(j*~8&lFogap?1?EnA(07*qo IM6N<$g6+C>eETy4s@E-PjuLsM4%1;R)p9uWj6G*IM`gGk<_evzo?5yo9Ha9y1x@ z4%TtAU26>=8bGC4eGYG789(4Q?xGt(@^~6A;(7dmPusQD&;J^r(yYFMS8)qp_8Ogj zDw|rCP8Ik2e{XVtKDvc^DUa79$XD%J>+6L9V(=P1>oq#xrB6S0cDVKD(kNIA3>g%W z6Y^oBP%mA^n}4$)rUJxce;-$Sjm~waJY!cMn@N%kCao!#%Nd+O7IzEv(prT0c-nPL z1c(XuA@1}Voll%{&aSN_N$yPp9s@ZeoX9VQdg*Pfwri~qCfSZ>@xSo~+>$p&;mzJV~m3aZ;nr>{{FGrvM&@_PS zLJ7TrO=M$xJ(i+v7Mqo3^)+D=Hz(O1HH^;VJzVKEIyZ!Qzhk~(bPn(0qq&CBA&Aj9 zzSe7WzQL1XVwpXTU%)%Kw$L~pgLvRU5`*O(lw;^12JRN>rHpWOmu3Y&7C?kJFFeVL z_+IGkzYC`z{$CL)=MuJXrCn?NILr6EkJ2?^Qm#%g84BgQjvEj4Q91!;Nl3O)Z(sOX cexeio1(3-6V2FgJo&W#<07*qoM6N<$f-#U_rT_o{ delta 754 zcmVK;`(~H{HUjwiWSAPMffD6D0Kxr`vfMs9~ zSk#MJux9|a;hq6*07Jk#zy(%-vIJ3qlYj=C1-=81^rH6hj{$7My#!nVmH^xGO#je< z!$Zn|lK$EF(KM?8K2XkQ3M!yWkQaJUd)YUD41O7SYI)|H;rOw!jq0~VGnfnv5ChUc z3Xu=1`AlI3xPRUaqAh^D_B+56%QNQ(mH4T8Q1yY5<2bdjGr3$Y28;knU?ra^WF^Fd zcE2MOKqlNhVA=A_hl5Idq8?P&9miQ~2iyWOg1C`S`Ap#^Fs>K1yJ5DincP$skyy{w z!Qs(*Q1yEa4&XRW3D`v3#xr2ZHr%Nw05ian<(XTR`hP|WSnW0V4y^)d%QG9mYee~W z2e1t{35+93Ee%v0$7w{3F3(h?4;MHs8(3!mM27?T5>pbYbkeUXKuRW{vcq>rfRudt zwO}j8cB%EF8lps7eRl--rwRk`> z;T~!6-G3fHFKU~>XT)GB18OdpI~X;xJflhQw1xNesNbHMq0rjU>hMxz4AGiBMf zFG`=ksU5&PqJ*viB_Ju=YfqB4NuXpK?p4G`EQZ;38b*`AZQ!xxnG1+{ze%)VGy#~v z{Yb-T2Sjrm&sv`O3OJ5TEV_^5bHFWNwy$yA0&B5rA(6pUwo9}o1DEreLJaZirn?32 z2|z+jB380A@D|bAzank{`F<2pIn%&8@K`Tu@4NYqx|C)SlX5)7BtVq!9I&vbOKAv9 k0+DRZ-ro0GzOQ}#0$;iW_ka6@q5uE@07*qoM6N<$g54=uR{#J2 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_radio_off_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_radio_off_focused_holo_light.png index aefa6e2c7920dab1831f7b7e10cd4086ccb42d84..325125494c2f261ffee1df9e0120972778b84034 100644 GIT binary patch delta 761 zcmVC}or;G($wZsM#E&jG@r!ER7d3 z298`LDl$|Que>k#R|xqR#vBf(U~-YGQ3m#m;j)4obo#r|oB4Pt$Z@ zW=EUr_yw=xGNy{v(&+~Qn8&SFrTK(ErUT&0q(|gTH88~J_NuqY!s`d!yUeR1Juj4-|&+# zSXOYXP=6>)cG?Y6ytCVy=kR^EaosBimT)Swkoz5LI9n(bhR&C0dj_j%nr`B?=<^@y z<@AOy;m+eKp27Su5Yc8HPvcs#T6$B+gT~MRahbS?mof{vS$u-$QR??O;xKw0Cxu~@ z7oPq?uLWh;aeSp!Y2LtDVeGDB)n1R75<1@gadLbDAL7bLmj?wO3Lrwv2rF4u7_ZB?W3R@uLY~aVz`x>Ry*9Gr z;y9C;POBU9+dMFHo^!tU-t)%3{_h$ZZcSfSwW&~QAot#Thi6CE88l{T^1H|C3Sht z;Yr~jjtXyK34immlXK7Gon8=K0pe@_2%pwlwd;xG-CTYHm(n!d=ya!CE*EeTkK_F8 zZ+bqfyhzb|neZ`WJ3MO=-(I;tZ8riH}% z{E_6q>AUh@a5+uWo|zqOF5_3cjPn?8RD3xj0|N6O{$Si4;>#XH-rc^W@-8rR)&U;)p~PR`xN3Qm>F z<-YSJ+MdL6nx^Y`CHnk_x;ecfOt>?+h$k`A4@9(?!4tUDtY&Wsd9c_wKwKuy;f2}B zxe`9XGk9&U&k={w8#pcuqoVNiXS*#Z{f^@c^?z3F3Qh@QcNNQadc?TU@pg~nWB3pk z1{%k05Pw@pVz3E2O=bgY_&(;%8NAplcwYb!VoF%a3c`5JaKlcG7lb@1#lXMeT%}Q3 z?&bSlm(pn=!47pW$%XP=z&8(cDeV9=ENng7y?x-dd|&(e3rL^{9fNuIE&u=k07*qo JLBL_t(oh3(eAN?bt{$MH|JOR>nZMbO|45+qpo1WqS5d4pi- zb6MsgL~JGxkU~Uc5xIs`vMd`&sVQa_uaY?4tH$Pj%eiOH`OVz(XXxqad1c7OhWLV?IKuS)Df8_t zVH@x8HO4qmpeP`pd=KC8Eyj3VuwTFyHnCs2iN%65_>5mTC-wMe3k828tV{p27<^8)J(QAl_>gT$zy{8wEN{yU|{`|`x^tdt+}&+E2#{3 za))~q*>)SJ3Q7E+(_Bgic#o~eh-kFpWgL}CxXm!y#Sf{&&HmdkY6NJGe=1pcQW&5#~50ajqo>%7&UoCn(G`Gfv01E&B07*qoM6N<$g7kpKU;qFB delta 425 zcmV;a0apI31H%K5B!7xYL_t(oh3%G2N&`Uyp^kiblX5O-SUGLFd{i>lvi4qIO(zF|#b9LYV z*aj+Lc??_w166&Tivj1{8gK&aCt^S%RuAiqu-;bH=YKQcoPVnU=fFMCQPrmuUKKb7 zHh{}Kr?HYld=0n&dO%B6U(&c{_9`MnU==tPk-nL|XVqVh8NeU=Eznifj~F>{y7<#N zit#fIgobP4?=&htVWJHjgzGD20N?Fbsyfaq{=>u=7=;>z4KzZLq8Q|I0f(V*9`Qq96X?YF(OF<-?;>)AkK|1exiho3 z6!9u>2JGO6Q8d7cj^hz9y4XWgM83RY(En^t=Xb?7J>>;bAeaO>5?Q{&=4(5wRqh?c@ZY!qbHffrh z``s^lxYt?RwAIc%%>&_sFW-00FJI32p93%L|86bYximN)^?w3gfaYv10SnpKMD0HV z7#xo(z+1pOz^j0==72#zms(p}YXB=ND_$XlCZ*J{UuE8(3>*bM+zMht0O#31 z1HRQ$#h-Dr*Ck!mUAuP8U$}5VxZUoja=@$A{N3z0}fDHICorAwE5w|{Qk@&X(mLXAN~FP>iP5M z+s>Uk*LU~s-GSxh<%8vNxi6Q?^<=YIm#*uT|p+<)3wYfI^|9R+6eRIw&?*&Ygo{u~$>P}1qNZ*+7tVp-NP!!Y(0i^ZMAVsWQo z82c>CIyO2w8cC{K+r6Z!s*=fMe5F#U*D#DWA;h{%LI@1QXe*UUy_rnLr>d&rcDt8=b|(Rq zRlYX`Xm{2M^@gXlwY3f~J3H&OEUVM9tR`1%vn&hCvN~sHXT1Q(d2$+f;W1z2#_-P9W; z(=;_9ggkljWYzEY=Y$Z;8$}jEEc^ZbTs$7H3L&Ivni^0U9FOi;<9lO(Y;2+m{D$3F zN>WNKkw~b)U{J*4@p~?p>t-_uA;hxF<$t;vkH_x?gF%r-bSu+X)p8^;4RPhE7a=Bc!&6?5a)2G!34<4*;M!mo%z!%Tej8;KBZpRrt zRh$I60nKU0C7;h%2dGx79w9`Bl(HRrJe&6?18)EcAhWG@yawW_fdpG#HJ*q}-3eUs zCj%ZJ4jkSp_%i`G5Mk_*tOJE|!@wipVm3B$dn@11JCq*5?v#6) y9Ff@NdkwhpLWj~OFkavlo@o2F$MTo<(*6dK-b9J>GThVv0000n=kG`I~`)%z9(>+ z+NNoe``z0;+$+{LX|;1t^AF*Jo9{d4$NA28&Vd*DzpHL5hkufxloMzL6zkIhFc*mX zO8*%^GL({lgTULstAMm-ivipRZUEzfxX*ZQ0Lf75b>JhQ1^5X_0U01~fha%+-~-+O z9s*wl;=ZYW4Ui0_-UU7YCV*r#9WFH3UTTr*B=?e-f3&Rv6o7ocH=+Om3uGt|_kF)* z0L%INz&Fu!_B1_tK*e!rB>W`E`3;bGU^yLX)cd-v`w_4f7_ zJsyu38yhpuoH^54sZ`v+biX(9F|a!j_kC8)ms}$NJ(!90onqhCzGUPJ=RZF`w}1bB z`ND+@t}9orbQ*@yCCjoKU}k0}fA#9ssiQ}aPOGX~92gjwJAL}JQ`hw!z_&mo8A=@t z#C^BdI)7UGlpg6YFcD3MOAA`AsiULg&jSYzNU>PVH8eEj*LD3!xm@0p%jLG`a=Gp0 za(R!g>qmx$hWxQu%;op{rH+n{S->4lhXwEh=JQ>rbpXjw$_4Dkd}?k#U=S?F|8H zYJX*Ag_V_+r~ZGVy&C}(thLD@)r;ljWd}facXtW1#BQdCUaz+VP%4!im{oGE?F|9u ztaVq#DCadzQ-l!4@#Dvf&CShILWreWo`n!g&CShI!C&XZM+AexX`9VgVP?5N2sbQuPV(wz`bhi zx>gR{0N(2NMw~!ClgYGQzkc0NRkhgH*Eg;x$~8^X?rEC#m-V}+D9W|IzP@o)Rg0se zqedo^X#?^%Z{Dl`?^rh1sa7St1-u6YflIoscbz+Tu61y5aPHKpQ-x#4j{Q75Jb#>7 zTZ-G;+r`AhgmL!l*;ZZGUBFZ_lF_Af1}IiL&bwT$3P7<~bO<5bhG8^ej%Ty|-pHGP z3M97Fj@LjuF_2)ESB1w#reZnH_hWk_4$P}Nw3+j#0V!Z diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_radio_on_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_radio_on_focused_holo_light.png index b7421f31a14f5c482bfcf07fcef9aa4f4fbc6c78..0599c3d62e5e6b1804f2e1c5dcf84f2087d46a93 100644 GIT binary patch delta 1134 zcmV-!1d;oo34;lcB!5atL_t(oh3%H#OIv3c$3N#J#*-6`K{pYp;H+A)GFVx~$T~&` zgOxy&t(}gQuI|QOjE&muj~JtYUH4*?q0Fr`QX-CSE1QCDD*IJ&nx-nniAZCU7*FC! zJZBf@?b^CTt?PEPJ~uCf=f~%~d7kI{!V~+yo3xi8U&yZjm4AR+{FDS%!hwOzzXsq7 z`DLIDcoBF8khi!Pz%5`H7!L;qjK>Dx3;COXw}EotXJ8VT1L6Y24b%b81J41gz^CEB zK;$0-_(J|;!0W&S@I@jRld;i)L>)O);g%FY(`7vsGVq1~`7#_BxVC2iQ9JlUVgZ_0WqT7kEAf+z?euKh#cvqUiV8#1Rb zSSY9D-WW@V6|Y(j z9F6qPe4DS<)=s`>?O2WVIYk`9;C9*j6;Ys?6fJt6)_c(1{9c!@>vWf|>-0f)^SgSV z*2@|#K(+8)0*(TGK)EmEZ+jGg7l4UGFy5GFOv>@|-sRSInF?&(-9hym?$gzmmQHxJ67<u}Y&>_%ks5TJ_KT7S`i@&mcI1t<|`3WE|cYK}}q^X3|M zUT(PtgG@y80uHG}jsu=Nxwi%QPc0unN}MIgq>MGg1L#VlI#zTu@66y)D3sIBPM8nrX8Z(BwwjPj{oMIq45_g^Ekd=y#*5Ir)J77eF)9W*xBL z3xD~a+LF64KsYd<0rObGG7U6tOr&)nUfSU~pBY-u3n49|ZwzWiX@}=L5En7`R&zTr zn@_F_^}sN2xU8o_2O^mftqoW)T;`1P&64i*uaj}ONPswQqQn5Tynl5v z_q+a`ddA&hxXdYFN%&R+*L@-X39LRC&sS(WF=__R1D6uP*c5OISX7Rv<6_C|MvSU~ zbHGQ1#Avs2+@A=>MuAs=CLk&~rRW24>@m}3BM-}Q3(yVp?@5lgKs@{)vDRxX_h*+( z99RIRMBj7*-kpl?3P3iqFeUbY!?g92;O^z4116&FR24;53{iu)9b}Xgb zpU1_(8sA~yhsXLT%>$!gHQK%1zUOE86MJHR0x?U&$wwviM*si-07*qoM6N<$f^aY% ASO5S3 delta 1164 zcmV;71atd?37`p(B!6c~L_t(oh3%H#Pm^a9$3MK3@}nKRsjM-?8Khu<5EG%zt26h;q@y#G1L736buSWSc+Yq9mxb8-ytBu&{0`3_FMK z$P0{@_GK6EgCJ``ncK}gH&62BIp=)(^qliO@WTG@mbDS5fPXub2iSo^@o5@JxctsP z|22SsJ0t`s0F5g z&s~1!$Ug=MxI+hk7T^vL@P)lnc9y9oi>$Kb;zEJAHZ6dLJyo3&;1VETy8O<|8wL=` z-vYXPVQ(;3Dt~x$UY{)k#`3eRBi0;Q0ZdNn}KdmRp$-?(UIxzNDCke z?h|0t7xrGrLUK!4(%`YmjwnX;%eSV!+N;h?7X!RxDSw*UW!wKXMolD6N7~C%i^&?` zoTsYu9l+u8J3mgBYjq_rStCYaUCfcp2NuzP7RgK0lu{FjpX!nwIUh8)HXUtlZ8}=y zFufm$pXyRmN)1pV?oI%EfNsDRaEEq33&3l@9bedMUeL9&MtgG*u&XJh^70>_oozep zvDaDl<$ujxx0&Xy+e~$qeR*w%J@zZp=gz7rr4raIe5!q6Zys~sJnGAl4s2?pcjC-RpiuZkMT`(oAqLpG zFJKpEOhPKp&$h;Zg8S;g&aHBVDOb0c)A#_8tAAU}TjdJVeRW_bP>`Q(i2DGm$L7ebWmFkz0L&IskpjqRVy_ACpISNqRh(7{NmUmV z8PFW^j+k0sBSFznLimKtIq7 z90D!??$eR>@?(`9QHxZRY~6O^?Qb7mJQ5tgx*5P$SUlOf?L-$VMlnzVoC~-^2gUbb zxW4xBKJY*Cg2HX{Oa|mcyFZoje2#9Kol}rY1 zW6btA%RMdwTQEAO0eA?Ucln)>^1KIq~2E7K5B!2`+L_t(oh3%HjYZPY~z<)ElJ2N}$eh@#<3YjHM))E43M1xxx zVnxhBX%0OEibugyDaCvL0}q~hD0mbsB?oIz#M_`NQHozpbzL@QNHqpbHk0hk&g|?= z4~`{B*ELB~FZ(+V&-2djeR!Yud7(>}E*}|TqY1jM?*ayaJb#dhK3hN)m@y1vX4klZiCb<-oC%(Y z*?cyBbmXWy_si@lUkge|I6_=_>YL4Dnx_3}nx@n4AAe$p0t^CW`EXJKa_*#aJ{T9d zVoixvd-k88sy)jUYf5a53wV>xc_0(zRH8N7(n+9CND9vZH7K_Zrt+zHQ)x==f}3(v zO661WpxinLs8McyD*~CQ)ucw*F8TvOhj8!*0vctz2uQ*Xu?FO}BCzdr60m~RAP0C# zK`kYob$@Ic63=2N1IZHLg=;~EH?6s8fokZ4dB7G6vEP>~OTO?Ie!E~{0dKjoz7V1R$yC4-l0bbTGTO+_L!!RCf zS^z-PG!yvBopwCsh&mTa)DvIGS6kCw+Pb%5HU4m3BtHj}3^!T delta 824 zcmV-81IPTm2G0hNB!3o3L_t(oh3%HlPZVbu$3M&t1N*~eiUYMK?oigHKn%@l3(;gk zYFdAkdZ|4$ZI5j=M!XpR3d5xb8)DR$w2c>&HYQd2Ll1MnlD6WiRM%w#16f^4VY<%j zhG7RiFj``|uAt~;zsEPv^S+<=$@_et7b>c#qL-|yo+*O$z`!fL0*w_l1(7YS{#^=4a~*uDuax21bBibY0IsHvmo3>VZ#yOsBH*_pXLr zA`k#1FT?@zzx{ooI5a)b39JLYdzxyL1@LbExvxr09B4h70vZAN^30DrEjy!psH#QaPMGS-!)*p<(lo^XO4ZXw!YTg{hk(o zqa*s}?0ojEi>V)a)L>ge5^Cq(R(6aJO%H^Dh+!DX6$5w=?%i#TdoHXGyxwTJX8TY7 zo;d!+M~BwDYPVMBuhk00alfD{En=6pC2%&;|G@^SZGTV_Y73$u-I}nI+f`Nl%P@>W zsWXH!1!xD7Th?xu0Qp>|zpqEx&#Yc8*pu#~AbZkfR<9P`U%QWUnf^W??B%4qJxZz^ zK(pT$8Uq5itt*=&a!jmQ2uh`bYZii1M2?BKtt*>>fZrD!W3gRV3=sBOO&T>5Tcb7c zGT{)diGMR{Cbj}nP^>cn`B?x~UF86B*1RbLPE_s~OgqD6H%vRjMCFb_z_E+DFpI6Z zVt{nPwVHr@EENAUHFcwyaYl=!g0s%JlbX6wjD_OEK)&Ew&A`~R0E_@FfBbXN0nEKk zy@!9k^UeQ4WSuc*;O^;#y-mG`0n^KQXw4<{M1LPJ3?r|qYQuz`jC3{Zx+PWB&c(v< z%jYLfb-xm5n5q*M2e319sqC+rGkh57?F|ZbH-S56$G_?XvbwHcebO0EYsFvss>I=? zR(xst%%?NC>2(10Vdd^S%E#Zb0xMq5F!~Ib+}5~f$TOK2GmMr%EFH%wzb};fZycL) z!7;U3SgmpV7|7BO$wQMdS$yr+m-`{9sG^Eqx*h-sTR;hL diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_off_disabled_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_off_disabled_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..bf69921952d0062b81a1f5a425fd8b7656ca98d6 GIT binary patch literal 334 zcmV-U0kQsxP)?l5iIEaH42N7{_(8R_1)5f;3+M@J8 zmXqXsToQ6yz*+n{{QBXD1Dpm8{eK`4ne9Qh3Lxt{XE)7O>#E;pB$IQNIg-+lmvZg{#lhIkx*JKd1$umO+jejhgB z7dPgqd4Id7`b0%7{UzhBFJe2J6rB}Cr+CC#v8wBF=4NI!iYI=V@F&;%z@C@IYrobX z7YX>B`Qlrn$R|_Z;xnIX*6(`rr<0@h{_j<*{FDVV#cs?u{CqH~I#P!()S#GAfw`c6 zT8K-SceR#VP$rYwgZWIQpCyBYe3|n2U(C^-Tl~~NMIvjF0ngz#ch|iBCBtnas?0KF zTW)^rbmH`cDXC(6*D-fePbPx>~A>(d_Dcet4}tlYsb X(G=kA6q+jt^dp0(tDnm{r-UW|7)O86 literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_off_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_off_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0516d15e5ee3be6999a48cbca96d283f8bc3056f GIT binary patch literal 382 zcmV-^0fGLBP)UUh=ssxrsPlnxrOoO&zpq;`lX2g2&95#>!|G`gFgEd%#MzGR`xsV+iJH|Z0 zN>hWs9#aF(i#2{4`{Aox1#lYfo7eOLzPkHdKt_+jcJT0W1hBTdejS5Trzoh@hjPP_ z+yS8?8QoA|chi8q%)7O9*z`8`Hx+=rVxI!XMNku{RH*K>)(3`fmRJ(fX*kbGA(D}8 z0)-H_mSauU4U@XS9^g~%Tp9rPq)u(xbS{nK1Is1B_Za<-uKH%RklT|;{XE)7O>#E;pB$xJ|1wD9vk89kB9nu1DV%Y83@vB^-9?!A*98v54q`PP1+wO{!d zm4w&-FHoM>4_Q53%!{Q82*c7gs-2_vW)YnF30`Ia`yRMV3qnlsR7Y zDsbL&@$f{=R1@)xu0<~eWtps ld*SvYf14xR`4d*XW6tRC*d{w`g9gyU44$rjF6*2UngF}1iqZf8 literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_off_pressed_holo_light.9.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_off_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..98a9f10ac6a5129462dedf03fb6263f76395ee13 GIT binary patch literal 298 zcmV+_0oDGAP)QQp&xQa_=*iI@9!u zF=l+mIe|(k9z~JUG)>b}pRrPkoIMI?%Cfx0alGZ+?-v_mP*v3hK&xoiF0%%(@uGcn w2k>YHZ0L*5JT5Z~XwNO{?;!8|&OFNZ387&|jw>r>bpQYW07*qoM6N<$f{J&2c>n+a literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_on_disabled_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_on_disabled_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f54b70ffd2c09f46eca5a48079e8024274e1b538 GIT binary patch literal 307 zcmV-30nGl1P)i-aS-WH8V6g@nl|*0EtLKsP_B3P z<&uyikS`UFs`hrIK#8WI-3MAaqvN?Nz^<74y5H`ODckQJI-VfLRqja$+Lj$$S5z96xOi-7O<#oB2YHfK7?MDV51ez$ zFbv-Y(Et&_Iky4=VA~#3KdJYADC=a7>)$jpa0bpm6*y|aoJ65oG5!)bs?EUv57b(W zUi*lOcpZK|0X(?)HK`xJ&Y6F6~yQcDra6??&(z)7kuV<ydy2RYM;iXf(4w8%}@$#V2Hek3}*cr+m2p_GiNg_$&eQ zp>K<1zVm^h5*T{0X+hY?E_ymWh0XDz}r~)f3n6<1>tr-6atW*u~&!rXMJViho zI09=@1vXDbR@edFfiduU>)^ZF(vji?z|!>-ejZDufY$EqN@;tvC4u{t> zL&mlE-7pLfJiIbiJ;GFbbo!M0al~S&hGMkMvn0mT9>1PKc0O;xNgu!HkDy6KsZ9(>Z zUk?U@bH{N?iHtCWujdf}Uiqc-!1rguh?1`;3W}m=3}CL1s#9hcz<$NpvU&rMmI`kA rqVqp4GXj`jTk&%T`SvgL+46n@zLRtrRGjYM00000NkvXXu0mjf9T}-w literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_on_pressed_holo_light.9.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_btn_toggle_on_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..54f56e187b60887bf541859ef830004f949fe711 GIT binary patch literal 361 zcmV-v0ha!WP)5RjLb@0S8Pz#*2VVD)?HH+1>!hv-`lm$R4IkBEMEb1 zHr@A^x#}|;p?3fu+X0&TqVqp4GX~H-TjTEz(&i85>3qKc9VKZ36xv4800000NkvXX Hu0mjfB1E8j literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_fastscroll_thumb_default_holo.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_fastscroll_thumb_default_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..00c08d80839482ee7e4fc9beab1eeca2f891fa7a GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^azJdx!3HERoY(vbqzXM<977^n-(K9v+hD-sa#1JotiT|cI++nBQd(XNLQPYn;cva+$U{o~!^)ir68>aBOB6UTm_u!8>*JZR_-03R4x^BE8W(Wk*fU=DZ=&lH#eXCSXDC_U;rsF4RO zBy}a=KnOJ&1Cu(FH(&0EO`b=htwK*W?bk!vaDeNXOGBChReODWqTO@ZR6ldH+?>h P0SG)@{an^LB{Ts5=m-~# delta 59 zcmd1Hn_yuUwsfxL=?2!8vqpwVhtwK*W?bk!vaDeNXOGBChReODWqTNSVmY|7?g}4f O00K`}KbLh*2~7atpcbY8 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_list_focused_holo.9.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_list_focused_holo.9.png index 8d1b4af83ceb67f0064736182c31c9126f1dab60..cd4d77dc2327e5473c8011e58da5f81cdb48c05f 100644 GIT binary patch delta 66 zcmXRdonT>GbB+B>$^oWrEO{QuhtwK*W?bmG!*x`Hi(}S-jw9dOk{Kn2E delta 66 zcmXRdonT=bwsh{ylMSpbXN^3Q52-cs%(&2VhwG>Y7sspv9Y?;mB|Y+Oc=@m2TaJP4 W0T-9EWZE_cAnNd}L+}tHbtfX? zLZ>cFAT(nsNc!QEX{Md#&rbqhjFDAPtuQc}ip5vKX#cI?d|PxObiJgwS@^Mu%;TIk z%M0)X9--^sssiU*s}xAwDDftv05@PDCUL$!Ojc>2w3ATGE|mPT|qLrmWt*B73e!2;=G3$00000NkvXXu0mjfG1+YR delta 242 zcmV*q}H`zElDtwSKo1j@?Aen~6|AJ(Htq}dV>VgY{l(^gZvB|9CnzqUd z@Br>E3@=qd^rKY@6!uEoR}|n1%;Y4|kJDn6mi6ksjhYGroNK5iwjjz_lf`_&Veb#L zcg#kvU$p8QV diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_progress_secondary_holo_light.9.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_progress_secondary_holo_light.9.png index 64b72e8eef97884f9d695c93a7dc93c4c0d4393e..14b87c1975b9c3132ddffa69a9e4b252db5271c6 100644 GIT binary patch delta 69 zcmZo?Y-gO{Y4>9dzk!q39ibhJN(T=dP;i|U$iu^PzChD~{mK`1Vdifaj;?JMe8yE$ Z$PgRK9k6sWPXPlEc)I$ztaD0e0sx0A80i22 delta 69 zcmZo?Y-gO{X}8A9I=Mwh!t6AQ(!m1<6kKNo^6>DSFVJ*gzw(7$nEBg+7srr_IdAX!dL4FPXnSa`Dk3PpZjXol!$sW{EdFZq6!iACloy6N zX&!WyzTJ9F)9~e=J^Uh0vkufejpjM5vi4eTvx?`WW!rarV*t`#507|HQpr@~ZV0^` zS1luMZT?K;vxeU{pPic@bA?ugAA2UhZsoPy%_;Vb-nm~_+t>em!}mO^FEZ%#VvC!` zPtWyfhrEoHoV}m@m(&jSY3k<76FBy=nmLqP)HC0i6eoA|s36v+<5m) zekSyA!;|d~cbv?1-c>20UcKzj&B9i#z1qp2zdMAlz5T55i`mhs`%e0Q-jIH3u59>< zOS?aY3ff_dUfo!*m;&{V(u+IzL4N7+PnQzo$BSPFj*-@o|!h=d6?B8)m*dk-pjxol8;WL*9<&{tuTnpFQl&z+kcW^Zz&o1_yl}AgOIw!N{;C#iMBAVTQ2V z0%mnT-}XOmt4Uj_%b$A5IBNOhGgqs_r#+LO+~YiHwoKdlm-Wx2d=}oHlr#BF-*f%R zF-!N^Oz}LQF}Ke+{C#ZXtomK`<|>uH9zF{4ReaZf+_Pxz6T{MH3w^5GUYE?-S@r(Z zr9a7i&DZa)4BIhjwal{fFL!)H)<3EK{;v`)hJYT$lf|!UTrKu~y8Wzp@@=!P2qUV& zW=y(!^V!3vW?yr=Ue`{Re|-Vw(tjnzf3six;rX)ryj8iS%@nE60cy63ORdhu>@82t z{MWyKa)tF(uKx%BJ@-y9gh@QT{xf>MA0tCo;s+*%h|YuD3<;|5XL@d9P`29S%m4(Q Lu6{1-oD!M& z+;~ZnB+XK91Sdm|2qEo3mA^+B)%C-eG;QX`2fU8-K8fSHHT<&x$c`#LOx~ z+BjqYp$eoRBT>-2Ywzm%tSYg2hU`i(`#Jdy2u?s#I;A_?NsLuw880 z=9+jnzQObj&Ji=K4BlL?$egW8)z*pszPbL9xPJt4Uu|#QayVI0Gph`_$4S^dMd55! zsbijRa+pZk9-rBVTX(BFO zk|aqJX@E0!3s}S@tj&Bi40$7FRvFUX!Pnl|JsmS=t5UUfVt+s9wmUYKw*}e;xMa6{ zHQ$_gtojSG2Hv~xr@#z2CuU}qA=f<^x;G={AW|KitxDC_iGJDIke~6ny#4R28{jc> zLKJ<_JK(uHb^$yPH?zu+>)sV`kKNPpbG9l~TPOOwx4=txY%Fg}w|HGo@eU7c&TwJQ zsUx$>Fb7`uUVqy?MdEB#s7%RQnhvB&o|ev zi2Fw%_wTK1b{8vZW|blLI0?I_D4eZI)z*pJ<0QuNendV_Vw3q{WZUsmq<_(lpCTPC zXRA`Rb>c^Pqivv)BuT|`@scD-nuv>+BuUalJ^)AjyP&v!dP)EQ002ovPDHLkV1i7g B;OPJW diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_progressbar_indeterminate_holo3.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_progressbar_indeterminate_holo3.png index d6b4a1326ac07ef825ccc702aff3adb9be7a47dd..fb502a7120c92a9e602ccd8f992bc0bf8f789856 100644 GIT binary patch delta 565 zcmV-50?PfH1kD7HBYy%ENkl5s zx2dkd)v>wslLHR>*nU<7(>U&NzEJ&)+jz!fRcmfiYGcD;JO5nQ0xyB9bn*e%0NeEW z8n{XIEp>ds$nwB!Dfja=^#qc1Oeu~VoG(;2<2Ih0$kd#hJl4j1wCUUq*tWo@$;mei zD={yCk39buJAWs6klq2`(z#pUJ@&KWD8;e!g=%Nq#*@eFE$}^^t8L738>jix2ZjZe zeBHJMUQKRr!#-=v^jM%J#D&S~5(A&KHWpxQ%BC+^2G_V^+$a+Q~J$8Zt#m zlBA2!0$(_M)VN`IIczhkH%XgEUXuLD{+TeTY(FcKaeo{;UnmOWHl7G$mfKj$pZmlzx_P9IJN5 zZ9Ju|8fqJ}QX4ny+xUyZb`lSHQ?IX|Ur%qggZ-vog*wfrfBF)sdd?S$$heKCsxdp# zj-HfX4235=2CbE3e7haN}8=>v82m+r2P8?7_JzSq zk|b#&1}{mHq=_`ZA$muN!T!KE{r-A{f_khkxsZ>Sx`?Gn}hhvq`Cs zGuHe0eqIBdvI<`SZ@>a*)89wHacXa<;|E5TC#I!5&PUW!NYW;yI-cQrp}JYO@#G*= zb2j;`k9lj-u_e$p!0qVZ1^u0v6X1s5|6#i%PtsrDF&#Stu5g?cN2!ioFH}40Hl93Z ze}JcSthPDJeSaM1r)&BfD*3#&0nSGkIA)dF^8UD8+c5{82m6k*BAU}LhOQTi!n%!T z4!orOTIZ~kpPJD*%NmlRBuUa&hX{>srYiecEMM5?0b5l8deCt@Xvu@)leX60hIV<&X!K#n{D11)hZG44+lB9|J2bz>% diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_progressbar_indeterminate_holo4.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_progressbar_indeterminate_holo4.png index 98061c845367c4ed020f7d20695bb96b2bad4cd2..184a0aceb7252793cc14b6de22100f01f98775f7 100644 GIT binary patch delta 549 zcmV+=0^0qF1ib{1BYy$}NklpzU6c|+F(w$%g`a9w$dX-Ld0zW}AW-!55{&6T8MSyz+`b2XlG#bm5kYJbLO%c{I!+kg$-{i<8r zCLJqU^SpC5jk>eJ?=dhA%1Jk$Ypg4Z$y|*mVqem?rg>{!0CfRe0~eiv?u9nM8?XY_ z>G&mZH8NMH(*$!(e;h8c04N`Q`8>zEqIk^Jcp~;CLu+a_fOP>p9I(LVf*;u3X?X{H zIbg0%r-{QS;D2j6b_0CII4D1T`D|TLMCNKdO-w!l-_o&j$7ElxbWf-8dVj=4uh@2S z&HgcSbvg^+du!h~C}#_Hh10sC$jsGv7Qjo|j}nuCr{Y%F3 z*}9@A%++`z_9aKXT>rwKeVxQQeSp90r_=X!62?Kf>iZLY^H~v@tMNqaOZwKdN^APj zoKpaAw`IliROV)~WYA8pYt5RC0$ zo~RVmHRZvA&R#{cwMV|#*~+tAnjtQK=k(|0oswtLxm7$TefizCd|rc!=cW3@50g|p zUv(bzo}{u;U9#YqS;JfI#LCp$A;5iIt+ zJg04HCF2vxf`eu?q4fd#FR)dxhaK2uVaIe#H~H$^O*67*y*4<+>hLn-)pNyl+Fi%v zdexKkZkjJIVva~ZaF|h8N5A6eyV=ua@WUAcaJGKV|H@t@8dn8Q%E51<*_W=kbsp%j zGa!fgeoI|?KDxL0XO7{~_SeA=4uAdSee2iFQrEy6t3SG&QFXVC+5aRxbN%E9@%;zv zzx~aun%hzuuxi#n*ZXy0F0c>@J38mysbZtD?Q8nBX4<>jp1AElani$Gi$Xw#tnu{I hO`i#NQxbBB%WulO+#`K+T@?cmc)I$ztaD0e0sy~d@-+Ye diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_progressbar_indeterminate_holo5.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_progressbar_indeterminate_holo5.png index cf130fdf24d052890d795d789a71e788ff50f307..39115cb498dcd5b5bb1f9c1ae02e101eb2cd9054 100644 GIT binary patch delta 520 zcmV+j0{8v;1EBK$0Zszp(L= zBuNS~1UR40whplAy}QJfq_$a;lp^yoR@8d08)tAin;ua#V1L_Q{mN^vtUNcW#q_FL zdh(SQ{M;}1O#5s#zjLff>YsTTD}~;qX%38lQ{bpJp}z*rfG=PUEXwo8z<7ta>Q0pe z3!3-r7>j`RS5tluu_mcs=4GrDdXuI(WRwFx>^Olc_%+L`Cnv!Dj&aqUYR_(gm-5^h zaEE)Q{nwP=)_)}R&Ag0Nt@jP^TAqtu?|OffQER*|S{h(X(bZMQZN*i0CcsN1h2gT>l zl*jIw4naM?tw~CSc^NB(^(Z?!=pj5v z7o|ukA`(IuNidaIX_HJQ@qIuDK_|n^&+kV~Gg>bW!=Rq$e-YjBORt(vsY7R_* zJF@UqOz5wJCcpvM0sH*?6qwZ*SM4c^U{Cd)O|c26zpCncj6F%+vM$4lA)8dqAtAr; zOU(%sgFkTm>&Y$fTytEtr`WR<@Rpxj08hAQ>c6V`wkN4;)@4}5dOrg1`MJ>RUCu`d zrQmhn&;@2>sei6GZfab$XAXRnj@>g2$(&=uwI?YS)@4|8V4ELzwcaz}i!AJ=CTvNP zq(COXE6x1WxZ`;9*sg(b)t+L{KFNN6CO>x1Gz8`PwkIhT)@4{RtoLa?N&!ae<~X5M4;7|HTzk!MJfBq_de z-(NtIB5d z)@xtwo3!G&;x-J$(F+c9Y@T)Lj%&QYxlCzUgJHFMlY-N8R><)@=!GW04RA%1z>tCV zzz)~|+iL$cFpU&b>D9%wr902pI4S6|b=CM7=Q5>Z4Te?sC-r#ls{Jv}TPMBH1o%$8 zgw+9;G%F#WfPbfmF_m7O=Lg`q+II(h!#rykx@z3HOetA|VHK3)_z0{i$L}-nm3RwL zOR5#G`+x_3%apRytG83cRC+VuPixyeYiMS`OSSD>raoAM;rymt-P%w#Terj=&nd9B zLzW~-N@N23B>ttw4b9ExTP7}7vhZP zK`%5~ZYijO}cT{P!1_01YQQ^%OK y7Y?Gv8Y%fF*^(qlX}B~gNs^R^jh7@zQX;RN2j+|Un}fjs0000I->=JmuJZl)bYTUU@ zIaz~oRn+5n2Y)Q6$L|WbC*4BS4b6(zb;KY4$%MMo3;Q`@D!(c4(b_l98k#Ba-t0S< zsSnm*Jg?NNTTAL@>w>i7IRO@S$dV*UnH0b?=^r&N*}Po8OdM1Bg*<<;c~<^~dDd{W zYuvd^eXs`O3Xd8~He>rvn(^G~g+}w)%O$>CufOx=T)n?s{~0kr zSHRuRNtDe6crzZ3uFpxBXAMc$U-_+ZQp=SR0be2NC3I(&+B z)SS!IH)}AS_QF9@cF2+>NtxJqNs=UGV&f%Al9b6e$AHJZZ{oV&00000NkvXXu0mjf DxEJ?9 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_progressbar_indeterminate_holo7.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_progressbar_indeterminate_holo7.png index 6a7307dcffb794161fb13841afbbfee3e3b9e593..48f0571fedca590d35ab5ee08335b781907aa092 100644 GIT binary patch delta 509 zcmVP32qS-41#Fsm+lo~}zz zkS^yEbB|dJLz#t05$VE2qomq5d3g!(`vDSX~?XH>XP{i({{b;@1HD+{C|pV1D5LS*QWMZm;18X z96Sqm*)~THILwCm(3l+OeS`H-@tChLUG^utu`}QXxT+1_rRu}H15034?!N|R3Fo0< zs)D(qIUmX&@ff`cm#fz z`)+|J%!kIODSz+QL&ajg!c^<^0Q@QU#agdj?~?)FTMX33jBQt0ZTB?~4bvR>TiZ4t z8nZe3LT^1(Z00M>9C$0YW3SiDZdZ~dDUl5LNk2a|F4PPuJ9 zG)DEjTMreR`3lqJdhL3j$)d<_@#1<7gBRE9lAO!C^>$Egn6EHNFRp*1|JzBd$_e?U zs;1jXm=BFr)1UjBcg149!gSf69NbRg{Vp%~^?Ki8ys!J@SnCtdNt^R8kw(LMs4khW zFj3a4{{D&oBwLasDGg6EN|GccV&f%Al9b2?frZ@L)R`Oz00000NkvXXu0mjfzBK~a delta 463 zcmV;=0WkiT1nC2iB!93;L_t(|obB8}YQjJihw)DdMWjeqo~hU9#x8oEu1mL`poj1v zU6dkSh)4-tB%@IRA$2kd@%w=gLKvRIpXWnkChOG(Ns=UWZ`yYOk|asD!of?DBq5eYY3tB1 zV)zP+cPYG?1F!@3<@p&fPgsYBDFky*eLiN`EHoZ9~z&!yxR{Ii}`9N?AJ5!Ri2BrU&q-e10Jtf z=o)j1sWKe*Rey(uX#sp!j?IV0Y{99~+Yc3+`D$kYY|G==`!#pkl_W_@Bm+L^=cmRU zr<>PyJ=CFL3iQ9K0k+k`i(7k|aq=||8OiWTcs`hH*#vSOZxf5wl=M4qk60!fl2y}kL+1xS)4 zO@)n@BuUbl%mHqSa_BmqI8;xxS|#a!;M}QGn4etNF-h0YR)1x2!L|X5wE9)=JvPm` z1-m*U)vDO)XAgLqBeSG2d7k$g=T05Z{N(!VM{1y60Plf|y%!o9wi_@U_Dao=Yn5BfC|Kcfc3o)vDN1 zmhOO`&ADsfGk<1DsaO|*JnTScsq%Qo1)~$x7$7oJ;^`n z*&KLI>Y{%65@|G?J9P^4lY7;er0ZvXNwy?O(s@jA*-(-sX%IGEk|arI@)wfF*n;bq SKqCME00{s|MNUMnLSTabrV_~j delta 481 zcmV<70UrLT1p5P!B!9w5L_t(|obB8}O2beTM&V-#Qi>EuU6b2zq663CSe&{77vVx2 zh!h7UNC^&-XR8S|wP|`u&Ig4M(s29u`*KNNbM|!ef+R_jj&E}60whV2#=^!+k|e1o zHeQk>Nj=GcbIJxRQWI8ez1G#fj7^=9YE^8-uNVBxky+A^{D01Sfpe$YGe31*_9F#Q zWWXh5^Oa6?YU#s$0xKY|_D_Ksv1(Op>C2MSoTVw_olG=5O?jW-+^KfVPhFS&NIF-Z z0grpUu`j8>Yc_W&E`SH()vDN1mhOPpYTp95$1G`hn)2@4skY2dT^f^H;H}#C-!Unu z8n3G^E9}^evVY4=+mUNkY;)j!YuhYo$mVP=63(64m-(ri1IudrkTF@0v3r#yNjixP zcqZO0#B^(K#bz(vz(*K166<=wece=$FGM_XLKB;LiR>F=94<%f?}t6E}fdYpt=(oi)$4#2#tE%Q^? zWk2%$IEl|)M+ULpeTdXbvHK8dFq}Je2=h~S(3p&|dzBpk8Pat-ka;tgDQ1Qn4kM7oetq!cNoxX6o) zF=;Z+hzR{5beNgE|I2%sB!z|kSW7?YWQ=J6uFbSfL}d1B0BX7pYyoS)iUI&kfiW-y z`oLQ*OcKBtQve;HtG})JJ(ws&Pek5o0qCf^+ET{8-hl_;d0sZ60BU{&>;OeYbEm07 z^kNXfz?$~`n&x1$b^vV0UWf(X0QPE{e}OQ@w6g$8b+20Ud0N$&X#ng@?=)!cv>D1m z2w*F6zphrWrHun<`qzHJ-053p{gEzXNt3!cyzSf^-kxjAE!nCL@>BjqYXzWUIt9-3 zx&SUR`V@YA->mXxQdfQk+|HJxtJ1sInSG{yd>>$fUBi>};N<>z09wTTE6k6 z1p07TF=!PH{2QSO*T<%+X^nx`9DpGK(gxHQk#Q10%kYSu4^3$V^g<7U-@J$n6rzdG zasu3iMjr)G^?;|E5YD_Gdm(isD}Y_>;UsH`E@_l9PXd%c*0BeaP3(R#Pw&7B_81mS zdu0HHD1f#?bg&t5C3MH~0q`m!qujVZ{bS-b6$dc$SGa}#jXnSd6otgaBwGLg0000< KMNUMnLSTY}TIC-A literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_scrubber_control_focused_holo.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_scrubber_control_focused_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..60874b80c5c323bb3ae05ef67300cbe43bbb1ddf GIT binary patch literal 694 zcmV;n0!jUeP)+u7qS-?A3?nFB7F$2d;}lBXAmDEeGQR<$RbOSMPw0? zB8!v~LI_^W$!0Q{nWVMS9}X><%sK!3=bV|$(aR*}kO&SMeOm&vIAIni=KR1j-if2G z6jTnEi#b3jcC7seD1cn70E$_hRCBxteS?~l5Eudzu^|vquf7B_U=6H*yX9iO=|jYs z0+|>91K=TW2|NZ)H3F3i5ikO#z!R}4aJ*d117BLK1hn8I;6iNVBW(Db2-$OB;3Ls; zXbFBsN2(l%P|A5pGze(<8UT-g2Rj5d{ZEBRWUB?6q>%(Z{m0;Xj5FW_2u&5tHmsz- zl;3?~1ze#zr4bOg@Ap8M4m+Gpfakz#u@~~php||r7R=&`#F4MsFMwC_tM3C}fp;xm!kr!FsDg4K?HDg{7a^#VvN2yLP*NYKE_^^$y9+n+ zjtkY1-6kNtnPY4e27UwYX)B?(p{oM`{s6geAIQbQ3GQ58qgri7U6d*Cu_JgP3uq{8 z`yv{1h^-jz)363^@z=t($i-)79!55q3*e{NK2S>V6;PN*a)ZEfF|Sm}fNw&=*LHn_ zf5#|3D*=r}iK^I?-P4hy7I6b?W^q#X{UFgvtWoWCjXFsBs8OKg{?ZlPNx&enL8^oPXoLiU0rr07*qoM6N<$f^2Ot{r~^~ literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_scrubber_control_normal_holo.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_scrubber_control_normal_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..5020b7947e218be9ec146573eede25f18dee594f GIT binary patch literal 815 zcmV+~1JL}5P)f1g;uEw7Q9f{fH(e!>dnS0KTzryUKAs(AQmcB zYW-T*pm7aLSQandbJEGW+c_JP2Zq_%Ip;jjykF-%M_%oAl%U<|f{pbxsM1x(7~_d? zjX2UIpxx=_#adXz5{{?)Vj>=58(ZnVgHdhn`~qr|7ZTwaJdU$?D3NC?jFO1oaU0*^ zXAGKzOcjtOR9MENxPT|pa}&nG65rq&?qa*$>5iv~nDk>NZ($WL;tjM5$@7{ga52rj zfD;?*YgLYqnF4C$r|}A|q{a4wDy{PxF5~1h5xW9vW?#X}cvkrT|6&O*;dxUmF&P8L zh1sth5P2N~yn`=ArXX1$DO$jJJa-7>L=0WV!)RqI)Ge@r*YV6DkY|i>74L~mk^RvU z`Tf`-k`oqxN@Q4-iHV|eUU{l53BjxBxhL{{P%!r-&f#vm(;Xgt;OQIr&ll3Y3AsKz zDcrV#M{o+8_@`lhm4x2<<>p(%ys0eX!2goa(3nreKL0%Ve zwqTuO!i`lfL<^>rCE{(h@^~NIX&~sQ zF-`a@@r|>9E&Ne1aeyyoi0G$xCAHvJ(If0u!hz^yO5D)HhximX)Acz%NDDV%2R{h6 z?^ePc(MDZVw*L=mpzdkO67g5~Ov=*(!T=wMm>Jez>E*B(Z|Q4hx_V`*(oGTC ziV{RjmQoOHiLGL*sI?ZWnATWIEv1PugcwH`=f3oH%)FVzeDE0NzI*Ta?m6E%_q;Vb zM~5sE6?CPiJ&n!cN_uL`-K^Dleb|QW*nsZB`Z-*{DSUz>IM)i9W&|qOgy*mWYYPTv zv5@|EqMC2%vIPsZ0`8pm-`oOY@}pbas1uqDF73U5Cq86BVlrS8zBz%fUvGen&;oTU7m|xB=TmC)2jfjaxydDEaWtz|iP)kw6V^ z<0lb@`&Zd`Uhb>H+hZrjb}15&jPDhNVux_oY9PZ_;n~aBgGsFPUopshBYhrJkN=Dh*Rg@n6ZLp_Fs6x@rF78B}M=M002ovPDHLk FV1ghc&-?%Y literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_scrubber_primary_holo.9.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_scrubber_primary_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..55b07371fe0ffc0d9b5c5b6bb2d712a2b082e442 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CH!3HFy_x^nYqyjx%978lF&YfhYxr}opQ(Q7dbS0t_|hjfsC_D$ m6#s9U(7mO97bb`Q{Ha#%$Rir!x3U{(ID@CFpUXO@geCyS>@M8^ literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_scrubber_secondary_holo.9.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_scrubber_secondary_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..9bfdf23186055e62e59da9ce7f0d3f280d7de403 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CH!3HFy_x^nYqyjx%978lFCZ{ws{O38s=oTbm zY+zvUCtbnYOb+M2rjPhe!$kj1_YW(xeDh!d3bovdtCL}0~f=;S9eyZHgm4voum zVW_kSJg7-cZ_+>tIj4_80wTgh#6MMuu-ipIHuEZA`2uM0Gr#306)ZaIHeCe`vTXse z)&d-WhjXqUj#XFS;T>=WcHwwc1q1k%$j7QH2;lqJJe439u4EFFz>5W?@FIZ*o-NSA zvjjEpq@WfKnAAZ#0T(44h@50=ZRfj3;FigH0lG4F!Tab8My!e002ovPDHLkV1m*`Xd(ar delta 209 zcmV;?051QB0__2iB!9F?L_t(YiS3rZ3PK?qMvu|Z+ygW;HU;0i)YKz8xAhba(PBe) zh`iQM&A1o*KopU4{0qW(!ceB20AbNuGJgRyKFq(YVAko^vGw7NHt>gVtQ*M@0GBsc7r+WQ7y}Bdf&A|J z_C9kH9$o@fB3wGw3cw3I{J~vQqJV{CHUg;MyrkY!` zBr>7JOl;^>B~>VxovOF?H8yfjmUPFXDMChVt5W4EZRlR^$@K7GX z3rLP2xY0!xDnvxkjZlMz5ZcB?Wc z`hx2S)SuL+pwHz0Qlgz;C$P)w*V93^PGv8GC=MqN%iDRnPJRe{(*sT6Q5>F-o6nTf z4m5nV$;R8(v=-RFTMKOAtprWrjRj5NjRbAr)`GThD}f6f@P0jLkITF1^XL7%B^=mt zlA}1B0DNTchh!sv{9*+XgLEL|idt2Sf}_#&t$MYM+#6=p+E1fEEp$!}c~u}N+CJAv zDrM4wgkozmx@mr;VwR>rO-NwqI5a!})z#&-{?s$x{v89y`vzcWl7kX}eYpSt002ov JPDHLkV1m)%tN;K2 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_text_select_handle_left.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_text_select_handle_left.png new file mode 100644 index 0000000000000000000000000000000000000000..5cb13d1acc7c63a792a9aae9fe5ce753b6b27287 GIT binary patch literal 861 zcmV-j1ETziP)+QN`clDBC)Fduj!1fJ*p^yU5aq=3(VPBNKPQ>m2X zCPr+Rj2kkU%uw=cYAcaQ47iDN^-H}b5{XFJY<5J=26q@^!v!n<4fO%Foy2!dK9NX} znU%*=WTxi>A!PXY__%O%bfn^<%cs+6E&l25LQf>P83+Uh0Dv(j7K=sNaI&1_>A3vT z($e6SS64SQO?xH?0&Tu$jGi`r*o6iqPk588NoTb9AnH?-nPq6O-%(yKi_*o`sqtak_NrZ-B$U<#l_2mZ?3Ov znzk&8qULq}w#XAg#9S_SOIwe;rIe-xL2xyfo#MHCEEba%78WL?=jx84C<(Oj6!%m< zl}ge3?;oVeZMq}N@^vqBpM_`g^Yin4*WTU8gu~&rKp+ryyL0g1g}j){O6XHON^3iBiT3%irBP(=AQIsS)d`sn)A0HoAAHH}r-7^vTD9iHAPL1|yxa21% zC+X;yu}n|zr42z4`Yg-QJ?fv>w%wT%HX4l%2!fEUR;ztH@n=!1)nJ;Ys~8@6X@7s8 zl0zyH;@#P!>pD(OPTYxb^dl9EMH(*miHf3dgrAMB>u@{$c;rQ0*HzoLMcZ~%@Hm2J z!SifwqHWt`Bw}t7V6Rmjl7O)L7r&?00e;AXap@z8vq6Xz0n*mT3&geF5GOb nVxMY0K0ZD^K0ZD^J{{x_@(S@Hwt&CH00000NkvXXu0mjfJ5-u5 literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_text_select_handle_middle.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_text_select_handle_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..6a760782682a2eea6f20612ec03dc202b1f9403b GIT binary patch literal 885 zcmV-*1B(2KP)tmIx)4Q`e5o0!LKbGEN+V(0tM;3(w5?&aoY94j}o@pp=qAp`cGPhB}E&HBBR{ ztE+`;kFVdeRP){D=H~t+;-oH5DJ9iv)tD*gpX746W!0kBi~XBBj^lg=5TzL_Re4G& zv2EMTRZgvO&Miez2xIJ$x=3%7qT)_`2U1HQHF-)YsZ=Uvu5xOfbG`t8#FrGt*hO`b z-YlW`Y-3|%4=E*(ihTU248%=*7ayQ7#^zLu7EHz1aU5qailVU-7+an(Myl1SnYCxv zGnve<#0Myhu?xh~3MCYuJC5^d+yuswXN-|brDA36*|j0!0|p5cODHz#_4>y!3`b62 zWO-fJiEZ1~OgX>KIWJ+j_yC15c3xeih6&^OI0=j-|AV*zaq$5PrSu%JG{aPk7h79f ztx*z4EU)W2DVNJjGv)l+h~fhjO6fV(qNN3;)Tr0%t$x3sD1k)snM{V*w!L)hQBe}< z{)|E?J*zCJ3l=e7Y;SKjgCG!2Kv*)}b7yX+fK@hM6^G7979ATL#ipV6Z9>+iwMZ!*#uH;0K^3y`fPYWqO zEu{Rkkn+<)%1;X^KP~<_`6OosVfk*id*u6mXCxy*eBbXJ92^KAl10z3Xf~Uj)}!4T z?$6y;RW*ln?^@XJ_dBgeyR~MsDO@1Yz6}R32VkCaKCkQgX{0QFczC$yy6$TLuK?@< zaEC1tt$Y}7)^=U@z3aMP608*=0MG%jAIBNmvq1uZ0Kfr&5BS!Sm`SiU$^QHCZy>TL zNu!hj(BqMI8zjWHq8!FU=%r2C(VP)9p5+L^@qSS7ZSx~i-=t<#h$PMhF3Ra3`>=#aDuO(`ajLckP*+(S;jm|#Lk zFS)db5<(!i9!jtMFI-9rroFfd*kPp_1#ICj?A_U&9Hc;7WZ`$c8yT_>%wb{XeII7u zot+urHG_3p;3W}C=gG;*)Rix;j4;Kj3kwT&P*S^vBtJSj+8h1Wc$_X~4)-r-|C*bd z+YCx8MV@D~*>t*?xxqOAquM9=|SxhylhDE?SG*i>7JH zphR0iSvioSglv3cF4G`u-t>(*j@Tzu*ObGFz_$K=BvtO>>EEEcHUxNA(WVh(Lo;mX7(fj$wBe%!L z$B*tc-YegmGscW$GI{IxcPD`y_eWwo$Lw{g!97S}odiu_$9n@=7TrJrZIMT8#PuJrl`AVg- zDy4j4+qUJpE|gN9o9nu;ZQGJkKB-hHt6tVdeOaSYo7=*qD0rUbG0FVJ-fOwes9}>VS8q#F|O8`hmG)i)b#>^}= zpX0>w?c%LBpGi<=o&gYONXOB56MI>$Tr_5Sz1b`f58%{04AyKq_BQJ;k|0L h5)u*;5)u*;f*1N8L}7Et(X9Xg002ovPDHLkV1kqg+JFE6 literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_textfield_activated_holo_light.9.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_textfield_activated_holo_light.9.png index 4569d71a945889511e4b9bce8f2b26e4246b2413..5358a857a38e4466a06c1d638de33442317da07a 100644 GIT binary patch delta 80 zcmV-W0I&b00i^+uTuJa*AMoF2eE`Mrip!kgpDkE$Nl+tLu>rdJ@ISpfKqI3w!^psZ m8Mcg2aXbK~9G|0k#2Z)nE?m1B{>1ST+n(||#NrT{~=aVNJ(V5pivNyk^? zmWS=tGYzmmZOkZZ(--n@@pItS!}>iHoxVykTyxcTSLJ&GJQIi;CobA+vj6}907*qo IM6N<$f`Ls#i~s-t delta 122 zcmV-=0EPdy0ha-gBy(O#L_t(YiDO_O5B!JX!43X1F#Kntx2411!cj2f!DzM^wQ$tJ zQ42>cq>_bnZ43?j8lV2v6E5IGD>H_FwqU^{M~z?|STNeRpb21PV1R@znjj+qeK7TS c)nPLi0N!v95AG|CmH+?%07*qoM6N<$f*NNtaR2}S diff --git a/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_textfield_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-mdpi/keychaintheme_textfield_focused_holo_light.9.png index 39ca1ffda178a5598bc8f280d2c9ba95617a9d25..96a1ac5a2231c441930fc424d93cad8468a92305 100644 GIT binary patch delta 233 zcmVUorr3@l;8(mCS5(lo#VJX^4 zQY6(_qu39*kU{dU_asQr2XX4{_-^&kXM02cADHy>O4lL*6EFc2a3kQZKSR5pPz)!^ z=o~2RMs7`2w=tp0=n{}X2eeI9-)-sT^W`Z|1IXN}jDFh3I*?=9M)VIx@7)!IZK>7Ilm jdy8V+{*?0vePg)~IT|M)+DkI}00000NkvXXu0mjf=&xpC delta 236 zcmV$RmjW0000oW| zFQE#J5y!g2yU44^`_rEfcaE9HzD^8VYwoe>EW^)j*R4*b#T4gR`dsDouiUs=WKIF= zkLl}I{IvPE%eo7Id`u7$-F4+<8NSl@C(aj6vp10jqxrvlHX-=PPYI-0*xw!CRl(46Q}o>-DGPN@`yhusEgw_^CUV(N5zJhmzL+ zE#bQV{a>nWTDa45b@sY2rIyz*m#OV;uk9|J*O%~ed2Lk55Op=PI^SS_K(vr~C!-vP%$XP8 zKTO)<==lD+d*4T&52rLQp0ayh`goG!%FVm8=gs<}vhHWUnO>B!5t{%2 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_check_off_disabled_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_check_off_disabled_focused_holo_light.png index 0b0606462c6646cc9fab1ce0b96f43bad61972af..8c444bb97c0bc6d4f41476737ccff8e689c4668d 100644 GIT binary patch delta 409 zcmV;K0cQTr1J(nOB!8VrL_t(|obB47PQySP$MG+OER|IYAwe}f!Qt=(QL!2xfrsJ| zFsrB_cpUcx%j`l>lT8Id^k9Yn*X#Bl+3#bvCA;?5UwfOl0}&As5s`y*G-OaYpJhNc za+XwWQ`K$kpy&e1`Ro+90SaIeJAO+#UFsguX=YMa3tC(>+^b9=2JP9X} zC&++{@P19-`aURtoIYCyY^?y;Jod|`s_&h1roRQ=`?j3V?f}PtDLJHoFX7@ZvHL-6 zopUcK2S_R)$bc37l-Q*lI7>aq7zF^Vz4xn;j`b(bIT)dU38YZVFtp*^smk zK5xuZQ`K)V15-9iPS~Hn(RZL5vQbh*L_|d7Kz#tT#7V#oU{^r^015yANkvXXu0mjf DZSlG< delta 381 zcmV-@0fPS41I`1GB!87jL_t(|obB2%PQx%5#qmD~RT(o?h&AE_&cJK(8m%Ga2IQ3ZrMUjYv><75`}0<*(fO@A|fJk bp*{dkn@QyZ!`R>e000R9NkvXXu0mjf#YC^e diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_check_off_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_check_off_focused_holo_light.png index 65d850957dc0fc7a76e41e539f263fde8f96d8e5..f0e76edea515cb6d9525cb62e791c47f4070c641 100644 GIT binary patch delta 406 zcmV;H0crl<1LFgbB!8+&L_t(|obB2nPeM@`#__+-u^Sz8OoQppM!V6BGZ3Ko3H%0D zqt$QVC$K;uIJFvSG)6M$9Aidy12deyWocgTW zpcmlY=T6x3{D1^FDPDi#TCai>*vDl{fVC9>tJ{9^cJq1%)PdcAeaf%^W=Ge@mq13q zBNhu4yruQ3Yvn&3}E@4}1%l17o0po5|Vuga3yy9`ivEHYV2q&R7j3Rl)Ly zc^q{6A3h6X1|@4$=WlcY6gZ~JmH=BT05-S%?5??Y0gK!0;R?tIcqBs# z_^u7y11FLDgqj04F&o4da7gv#Uw}#EUcS0OpUAr}wt%%sQ53H=?e#BNmO)iO6su>q zF;swc0Bb71I+Hm8B$GA)6Mt6M*uwW7KARc5GL_MhM8zM3cVKx&yRMnLiQxgJ#m5 zO4su||9@3?*ED1@nM@{=$z(F$C8t6gHg{Szpbjhn>%f}XuYVJe>g=;SW|zX6wlm4vbQg{&3)Jpk?|>@&Im>%i~8wUj|P=l4I4`dtT8blaUjOaQau$lVcJ5-PT!kO|JQ-Oh&+!eLaYN^Y$q$gTi{E?xytetMwD*= ztLD4&z)heYTRNPO+-YN7%IQ&eSHq?ghSv}$oWzgU?v#l8;mONGazD8 zPJUUb3Zwi<$$tX=0$zun_kZC4XTsa0IQe6A^7nxkF@KZb!aE>R`KaV!ItNr6~H93g;sMJt!4vg7?u6@OTY%@#{9tBf~jN(ILSBA$y?5ttAESFt_aPFT!488FmJy50;HM* z&x%N*Q-$}L;v_Kz@Gn!=Jw4!}*=CJ>VWPB?V;wM31f^6@L>`yzJOxUrUh_`NJyh9> zkX>!DD=wFsJFPoqI!#E;B!9{5yYU4PRDXbOyEAC+vqKio(e2a_$E6 zD}uWa`rp=VcY^1nr~dT- delta 1038 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 AxBvhE diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_default_disabled_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_default_disabled_focused_holo_light.9.png index 5c122118e953073a858f3ef8b89f74476efe350d..73106561ce2c30aeb54597932e958008c92040f8 100644 GIT binary patch delta 358 zcmV-s0h#`W1AzmOB!5UrL_t(&f$f{IYQr!TMUPFU(jkNnrBgmAL-M7`kPqtEp>!xE zm{RHvaUghzUToRweY^u606ibf&W`Dn}fn|nJxmb3YZep2M zwXxk?nDSVsVxQN6=M80j?+O2@5?Ki`HN1+&|1mj2OpOpzBgE7QF*QO=jSy4AwOIe9 zoC{o6%q6bHT)yabT``x0m>MCbMu@2qVrqn#7?oEsw-xg%HguoII%kL}uvV<({;58u zELO2*M3CH=vR_!mKCK;2Ov5=#66=1&N8q75VE#qtGW|}#>9{+5-D=!IYh65=uJfM} z;d0Ob--R=jBfgYSB*fHkD^|gI6-hK2`+Ps^hjEs?e?*5bGoJ~%mH+?%07*qoM6N<$ Eg5@Nr&Hw-a delta 363 zcmV-x0hIoM1BL^TB!5jwL_t(&f$f_yYQsPfMW2MLkiwW0A(ao|v-k);l#k%E_z)>m zgcKnd5ki#0G8h%!v9!|W5A#5UVYT{iXIWusRWT23?{_uRb$!u7TbB+o6(OcZh^Y}` zYM5@6huv`nJOfXZ8;oDz9eCUBHy^3S3uC7*!0PG(rML`iQhzKt`iI@I29_B@zpB`z*@1A z`=|PtvRK8M5oAGfW6EL``?PjAF%9P|Nv!)7AAyJNfcY1l%k(<|r|o|8b*pg;t#$Ee zy3T(_gv&t#d>778j`&hSkq}eEtyl%;RV2}9?DPGsAI4eo{sBNtFjd73s3!mb002ov JPDHLkV1kL6sg3{u diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_default_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_default_focused_holo_light.9.png index e738f82182f3dbce53410a4edc6a62decbfda57d..0611a95e6e0528b53e47cb70be293b0cde25ec62 100644 GIT binary patch delta 425 zcmV;a0apII1H%K5B!7xYL_t(&f$f_yOT$1EfZtuy4C!t+N5_JwxcLhTwjllmH$fMF zLl+U8{0kzaLw|vrs0iZZstC1gLe47_c z61#Z33=HI$Ec9L?^D~6fQy`bCKnGDBY%i<^% z@Ik5Oti?qxeqI=5z5En&_2-0&ag-V7=G~l1l#GaR!&Nc)9%F}yaYMwoA!6JRF>Z($ zH$;pZPK#wP<$s*O>54gt(_&6ubUR%!ClN7jh!{6Sj2j}x4H08TgSr7qM#Q-B-@d49 z-$mn~RSeOZ$mDjzRE>#@4~Ui$OR1PmKhqCTYJK)L3jl!h;0n+HU;*)+k^}izVDohQ z4pX~U-%g5FwRH4!{;*rm{0%_*?l~f2+z>HtI4h566SMP%%pE z;c9m6GO4B$cG{@t?ZfqhP+?GPGMaXiG=7YFeOpd%#YocFM7{pja6I^2R)#{) z4Ovf1!Q3xD)m;9$onjp2#=*YZltihB7&W+x$@>^NM2s3DMhy|8hKNx^#Hb-+)L<=^ z|0u@-)`_u%wSO4P58bR2V~L1SL&T^dV$={ZYKRyy6jw2}iSZTt@42Y_xr^3;P0S@} z96SwEHQzlrOf4oc_hH{-1+X@Mo2>wN)P>7OX#np$z#I^A=xu@Hy|ep;vk|C zN1Np0_H?I_`P+b;yQheVQA5P2!B$KGWb1yQsObKFsTx1VVfy_7e(q5eNzzk300000 LNkvXXu0mjf7~jSr diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_default_normal_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_default_normal_holo_light.9.png index 8bb32617b9b46143d6cc7faff5c6dc42fbbf6e4a..908d601f7e83b4b53621b0b0bb5024683253b7cd 100644 GIT binary patch delta 502 zcmeBRnZPnZrT)67i(^Pe9iAfQcITa6Bx_fk3-;Ukb;i(+H@spiepORWH zGO7o1)*RjR$7@>Yu}v!38<+grYqIHF#557ZOeB=JBIf9(vp4GXp6y*OaOjb^VvEDQ z-{IK_j`zQBy=JxY{i}HyYgg}k|9Z+s&4b4-zie5SdGG!A->=g)e{?a)o*dCLF>iZx z>CTvYS!?$*OT^l{o{3+7J^%LGZ)XkidESSu7M&8bxy#VFRp3JDUH;@V$_*Fyt-Dg? z&YQr!;AoMwAIk+s1BsV4$qoOPO>q7(_o3=h8=*Ysb6YrK{!J0^6rAj~EvaiJ`U42e_koet8eaB!Ww=I_p0$k=jg z0tY>^7F$w4){hRIdPA)?iOo~rXEVsw`&hP&pPm$^A-y?P6ZKmb2}m?|5cfjFxFKTP z5HW6KeJJ<){bSp^n+NBd1#lCw`glCHP1C$O=lu0y{yTMD|Ik{u0BQj4Pi?c_ zF=GtPEd>D1Id84aiaDnd4Z}boge$|ko)7|tVIXA0UF@tVV%#WIO#a8%A!6JRF>Z($ zH$;pZBE}67<9|lcVs97ailFEbE0Utcid^U}dc=xE#JC}1+z>Hth!{6Sj2Ws_v0_K; zKNs`fQwU-9n-D@E@BPgRSkU)v>plOte*dN$<8tEt39GrND{aUrBme*a07*qoM6N<$f|j=J>i_@% diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_radio_off_disabled_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_radio_off_disabled_focused_holo_light.png index 83af2dcc3799d3f21cf54e1bfc31b4ba29fe8553..edcca62f90f83cf7803909da231310068b1cf44b 100644 GIT binary patch delta 2097 zcmV-12+sGS5WNtPBYy}4Nkl*<-bI-Xj!2}abFn_@W6HM?C#Z=k?oO(3_ zWc8T^W`H7)(+8ldPa9YV*7WaQv(^aHoL_1LsN#o#IpB*x1;_)IJ{f%gLVW^#Jm5NT z6}SPk(jsEy1UU8TA)pK#0ltK+xTXIc0zE`YqclWhSim77Vgle6@HX%Uu+pqGf>F+Q zqy#wiY6(&Nn}3Lz8^t|DksH7&V&$G z3E&totv{~;Zvw9Y>&9%Ide!nTb_?O{ezt$R&vrLtdw+8~1j4C&Cd}lf{C=z7bzL_! z?;|esIPf*ZLO?9&CE(SAl5ijboO(46JcTHqMI!f`z{`lghNqr8oegdV#o+p#V%YBI z5g#{x9uI;h0QQJ>gRbkkff7*$z72c@ahWbc!pqHCqdTk)LldAY|1|I|olpn(Bk)?Y z*6^Hq)qmPN@0EIQZ55G~3w6>P`mT>C3qnX1C=hLt8K8y4jE?KNp%VT$a6;cTB%B-8 z5{4o`ef|mHdphwJ@FEhRf)mf4D)#=qH5ab;r;$}%K~~i>=Dine+s+`tZyH&3OTS-n zUDsD@I0AeZagQ$WTZVK8YyVg7iA7`;vdC(_0DrvEtTlq;&zvmzf9lSu607=j_fyyp0y1H=-JA&cno2FHGWVy<_^ zpGC}f31}x(d@ra)%pf~L2rRj-+tx(uIB*(qnRkI-4!T7SM1Y$9N#HyB(Ssz>$;sm#@-LMZ5I*C19;nYT~Ft82FW`D#1$?Kk}PHRe`N>Cz)}6~ zeHG@Nc=l9r>*D5|zB6*=0bJMJKvLrjuwdJER(-yybFly$ahb$OOh7F76p`qC30QOL zRcq_7{$a%D|CNUF21>#;#P7?tZD*RbMt>Xli_U2pIHK;62!mKa3CZm(;NM8Z4>!+y zrEM=P5v90kV_jv1tNo>XiUuBkvYJUoU zLvjsE=Xxl~KuHP6Bj3TV>AxG;56xa^eIzP3G?X^-d%u zzy!Gf$?>~Ry?Th=c9E!>Gj15U)0!)Q1m*zv6ba)%QUXj-BR~QWn-@OJA!fEQ&eb0e^%a^t1Y#mvqu8z|%Px0yapA0CPGs^*TZ?G$pKY z2EX0#iE51I?+}@5cCU}(NJ@Z-sHUbzc)M=|9k?oU0Q88}6|``g3IXx=2mK~Z9C$8C z2Z*n7+!{g>?zbtyVrO+3M5nu!x*w7f(A7aLv{E~j<gpOf4m3iArhaynkW{NVGL4 zCBP&d7FzhUX00B=a{fNwr45stm_VE(+N~0uOOg_>PDDT%Am=>LMF=Ry5|Ob%WfpV} zhJeGQM8F!+o?CY6)tnX`+U)G{jT5Gs5>LYyiE@)xl0lLZ;2}p~kS0aEK5wxz9Zel7 z%Oq#(aQDP|RA0Hyh+}|{^nd3psUv*vA)c;QEzqf$pq}}8}Cfox4fiV0a z@Ti(yhp0l6xDs;!m1N>0u)JFOfiBG44n(PYjIuZ*$2R!A}t9jRTeWYR=0E@P57w$90P|z_K zRmN473GgJ+qX>{P{mLNYj-oO00`TW%tr6I^Jq;`%#9jl|(`t<9T;_qFF|Njlfm5$O z0{j?>x*gy*XlqPYYJY(tTVn>QcnV05Q3F;FCyH-ds4dcn_Da#ybeZY^$3nlqU;2Vfr!2ik>8H0T;NnJ)-<*lSw zS#-P^;1S?aWPi(zUy}L*(wzD4Uy_PLx5&qk)iT%QO!@jIvPZXwa(H99d3|P(RW2hf zE@M&Vs;q@X|A&xX-GfM! zj|af}U6p+gQG6L#`@gv=yBo2~(mBMu&2A7cqGgRu00000NkvXXu0mjfxuEc< delta 2070 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 aVDUdeC`vA{+b%c&00001Pe7HG#9 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 delta 3482 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 z diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_radio_on_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_radio_on_focused_holo_light.png index 306e47e717900a928fee08652b4ab16a69da558b..8454a0e2a34135863c8369279b3fde297ad93a62 100644 GIT binary patch literal 3670 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 delta 3567 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 X^d2YM!KS;800000NkvXXu0mjfFO08G delta 2457 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 XixL@N7E~0T00000NkvXXu0mjfl&{6P diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_off_disabled_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_off_disabled_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..bc74c108ccf49cc7da0741b509a803f6d9c4dc05 GIT binary patch literal 420 zcmeAS@N?(olHy`uVBq!ia0vp^W z>~xZ1ST%p^-UDLUuU+>v-8+(}yQe{6-r-A5Iyx#HDLP3CE+uhkYBOuk|8G9OR~RUH4zU;z0OPXCKz1TO18@1AL?x+3!1>x0|Ja=K;r4tHq2Tm>&Fm z_vf2wz-#^%Yg@(*Z)6vU#2#-ua%k`Vo4MKy-8>76HvTyGMSW6cDCg^EPE*{iMB8m# zw{@qQZaZk#>k_81jJGSZIqBAd8D=QVUM_p_n?4CuM|_f^&OAA^^`)ROC(H>Vm)jyY z-Y|U;XcKcUzGVJf=i;iZ`)2-{k>=i$bgRSmcvy1R`E}R(HQy#r=!-b{e0f{PCXb`9 zS`>B)rcUhI>sfALXnIS>QRTa}7DM~qwZC)ycD?+5?{?kXNpU~+BsFhaF2yi^C8zL8 z#+rov=YIZtFk47!;S94gU6u>>cCmB?y?>uxd(n5&ckaAE3n{UH&TwGpGkCiCxvXP049U3n_V#(N!wv#$AM$r= z26^l4{qksOM}mJ-{sZN${Fm$|oxdoGX=PxM)YA;?u=rx_gj=5pnT>$A^4?>>KgGNtHzm*6qeZ-SxEZC*tMZ#`ex zBH-gvb30T(P+uu5{AkJ6sI`wRh=gWOl{rkKgTuW z{qufC4(kQ7O|q%0pZjqF-S+1E!&6(_!}lJ&zU$&zpMCk$Mb?Qs2u~;l#vOyFtDnm{ Hr-UW|A0gbC literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_off_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_off_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..2abf70dcfb01b36432878fbc370d2cc0aba54795 GIT binary patch literal 452 zcmeAS@N?(olHy`uVBq!ia0vp^W6IpQp>NM6emjP_OXmrU`Kfw- zh9^Jwaab_+ofg~l|5R#fwdQSO)1sXP`yYwB{a>$w;F n5G`aWt=)J3b$8yRn*EHdcFs+|f_`oW#twt0tDnm{r-UW|{i4bt literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_off_normal_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_off_normal_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..54e5e8eb7e10c2affda04d69f491440015cc82c8 GIT binary patch literal 574 zcmeAS@N?(olHy`uVBq!ia0vp^WbMv^@mxfno3NBvla*1PoEYp{!1!1zGOn3h0u&{W} z=R3bpA%JPR>%UwbH@koTJ9ttm*IFFnQ0_4}^snmS?HsfBuXgRzKK;p-VP^5U=6g#7 zm>fRctIwMC>~Yb~J9DE?g-ri!^*nFwR`aOW?E+3dnoAv*Pn{B^8G7dVXX)p6I1fBe zzvoxiskfnM|NZNsp|%#!56!roZ8TG3Z7J^pmIrZB$%iC@EuKHRQTljJ_qC{-OIxfC z?)h$X>|$((;i2mL(mikI89-bEb`qFaCpB%R;USLS%MA|p2)aomwm^t)J}VUUHpQ)f zUoW>lY&HKGiNrM<C+-gz5D2++a*@KL8lzeJC{y*^0FkT{qVzH!)M$LSJ-vr`j6kuF`J#eR@^nv zfx}Qk=ebUDPsXfgtGAZ1KgjVc`Frmp*8!dbuLY(3m@Y7FV37O&L!sf0sMd?BENZyZ(JwZ;A8C$aml`}1PoeYbYIzRBr}(X1|DOfz`8`njxg HN@xNA+%W(Q literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_off_pressed_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_off_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a096c03cabf639c151231176e591f29c815d1631 GIT binary patch literal 546 zcmeAS@N?(olHy`uVBq!ia0vp^WhNBev=V{@zdnf8o1U*e`Q-0K8hNfPO3Tlm zKb_RmXvlVM=k8tW?DfUE^<{&fXgxdPdwEatv)Om^zF)0Af94O*!(+}a61{FAp;ym7 zET~|)pxP#}F==mHcxq(c+O2=3<_1hlO{Hk~o z+r*B5`%k~C&yZAd>gce(y>11}J#dG?8IC_{C+c!yI^d|0`Z*r_J7&bF@nHsN%N{mrmL5;Rj}Xj=P(-`R4M?YV#D7 zI_~BRg?8Pm=2GN|+os6!>7M&h!O4dAa?JW4fBbQ_#45L=qw`m3N}7T3+wZ@p=iaVk zzA$r}#KsMG^WLxBs=sFI`u?EW`^HDkWZeE%9ee#dgVXhv8?%=&6!1O}ZF{|h=K=Rqo V&Cd2^lL5v(gQu&X%Q~loCIGlJ0u=xN literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_on_disabled_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_on_disabled_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..fd43d37791c3603b37423c37471d4a90f71c3898 GIT binary patch literal 452 zcmV;#0XzPQP)DK}zBwT^eFE<0iY?S?58Z4ZF#_ zoy`QYNr4|t?|+fF{r{kWrc50~C`?QnCZ-J&(}w8Ax7lr1z%6i1y1}S{S7872@c1^; zwpj=ddIzjJCrE`G*fFv3(ckR0C9s?!sJU1kWBL`zv?_(|Vj+r0Iu-l8c=q#U{nrlX zl!;j}F>RQbHcU(#CZ-J&(}sy@!^E^BiZ+%}B+ola+HASa?Td-a_(x~^aTYYf_Z4f}k*XQ4a51TXPtv|KnGX9> uLL(-ojcmmVXsgIbqp8pLXZ_Gk67Lr=u1GL6uZtf50000QVA9Mp?57>XpDe6K?s zz;NM+w!%1M_yK|-iIUzYl8*x^f%D*lV{zf~?*j%{UOEV0B(cy)Vxf`5Lc?j`n@*?W zZnyhIYkdWv#e6t^`b7u<09#|spQ0#kCzHvn<`&kD&;Ck8pNuiTnb}-IObDTgXaqn5 zs1t*WSi7pKD*&@zuXo!p#zquHfvT#;0NMaH&y{uQW0Hsz5t$c>t^q`3h)BU9Zl~nI z%y{kQ*EEi3vtkkpjU*NtNh~yySZE}%&`4sTk;FnHiG@ZI3k`|?C)uJP>KcoZsKuh3 zxQ@EUq9lohMiL8+Bo-Rcin&g%pM?=hS|L%$j>f-1YnYQJ&{eN}1hiw6oX%csTJMW`?y^=XpL_uh(|~ zYQKt$n3>P#v*B>~c`z7^l~SsS*g5RP>}s|8yId}30BW1DON0`@hrR9T+-vewLl1k~ z(OP52^@;?b-0d&D07eNU TXD6LM00000NkvXXu0mjf1cxup literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_on_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_on_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd49f267d6cac7b941b04e03fbade5a7d647b54 GIT binary patch literal 525 zcmV+o0`mQdP)_xI7K`300@Z#urZf?5Gez zgJhK#}Y_h)}4QG*nC)DkcrDAHLyaGyulH zIgkM+U`%x+Kn~mjli7HB*HFGlJ-_$@ICHP_cCqb*0gwVsV$B&FPDUAUPj`l`0ZwP* z>ADW~`sb0+9VxJ}WKD&9hGJcrn~lTSj?2nY@ti-M>#79~-OMY(Vtb;hDZ#iXHP(oivJL@VaIxZak;wb5tQiA&%E zyOtbm_d#f}6uVx0fR!`YT?enMN2)MzJ< z&|*vKck<-!vtYCx4%K}Zzmd4(kyR%eU`R)1MMJynmVxJd7u!b4tDaA=2AFS9zOH^b zB+DV#MyhOk?o;0%!o?O0v8{r^D(B3(O(b0K2f5HW6u7&nqWe5=*!Y11?> zCX>lC02E^kXO8O^lu`sB48!oDZQJ+D+Tjz?c|P#H!6^)6{i+XRUR|hj}Ru}4RAb6}PtLiM6|kV|x=L$(wuvSct##RT zU6s-{CD^cDuTj_alf`1On@*>Wh%QdT3Mwb8p002ovPDHLk FV1l@52&4c2 literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_on_pressed_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_btn_toggle_on_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..7490663c66959c65b4aef2732a306b20255dffa7 GIT binary patch literal 721 zcmV;?0xtcDP)Be_{ ze*X60;NXK&>K!wKdHMd?EJ6qfAz+O8lIQv7)6>(hE55?JE+?MP=kJN===S#Zo3)mR z=oz}}j+7En6vZ<{LrGH-eaN1To(TV!jc?d?SeY zMiBFjAm$qq4>#FbL90ism9$!{l^fTs9f5MNy-(rRn5B%=}=wZKATL z(W_>Rp|UK^vRqLV#u!sK*|w9|eSHOlaR2MZ%$Q6jg|+r(I2?XTl0-2x%CfAkuCB&e zmOWZo^S5)l)|)tqS!?Ca&W=<{t(C>9sv>5t(lj0aO83@Un$2eBDH*Y@YiX@@3Lh6S zO4GF3-`{_8cz8IMQj(PGh3573_42e^D+GuLL?mak*^9+u@g2a*i{jEiJsOQJwbpxD z>(}>Eo31~SM1;j+ag*oyC4iOj=^8W&KnFk<+xrC5G>m#l5Sx#gb1Nk!%-*W+%h>@GaJ^{GLqy3Nz0c|iq-L?2kj z2Y#;nlX+3t$KSyA;1`z5q%sPc<&3Y{&Gt16W89Z2^=sm>>02hvnw@!^XNKNk-Yx!j ujT8LWwy$J}4=yMQ{=D23hb?04bAs0;*Pa8LcHC21!gG-2@u{VThjI)j$4^j=F5mOybGZXY za^ZVhV`Wa!a=*H`|Bq%!{CUsB*V}q^;|43Su;YhbMMTJQuTD-ZZEJnZ-@s{b%Kb7! zenY9&J#W?*m32Q|q^CP*eNj9f|Fk%I^XIPb whg>!GMmqXlxNOQ*Z?ggzVJQBRnft+h)4?Ey$4jHEfr*E~)78&qol`;+0MtGfg#Z8m literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_list_activated_holo.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_list_activated_holo.9.png index 6a24d21e7aa9a634aca9fe87697c6a7e0e0de606..053686014953f49c96757841e74f4a78614ded50 100644 GIT binary patch delta 41 vcmb=doM6TCV-3GW_hE)L3EmIbCc4RsR6Dav_B9rzFaUw4tDnm{r-UW|L0Jv{ delta 41 vcmb=doM6SX#>=``ter8!@rI7@L^pYnX~pc4B?~u~F#v(5tDnm{r-UW|97qiw diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_list_focused_holo.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_list_focused_holo.9.png index 4303872454f0f83f413f9635e575f0a0432e38c1..75c9e334067da250229b2d57d320988ba39b157b 100644 GIT binary patch delta 43 ycmbQmIE!(D70-_~{4+WaGptGQe$Y12%|T>q56|ppvf5k>K;Y@>=d#Wzp$PzUfe)Sl delta 43 ycmbQmIE!(D70((kYh&Sd#t6q7I+G{5Ifz`?!!w&dMq?@i5O})!xvXz-w&kdu)g8 zf>71b9f*tTCJ<0X6^UQ694CnUF^=svqr-(;WF!DfIt5%d&t@f2 zyFWUIl}do#k*$8dDh@X`JgCsz5)lHLRJrNrqqLxPau)3laetXiydxQ5 zZHt#%pmF3+j{IK~aYfd?+-@p!xzcuBORh8?8%MZt@&hzgarm7Q<1yX}5zdVc&0F27 z_vLgR?>)2K?>-Dct#L6r=Iyz*?|o+f>$nC!?P3h>Za4h}nrhp5yN7S>6?lhb^LU6T z1M@z-K*9wmMStQAJchWwP*a`@jfZdoju25fRaG3y4!KAB(q2sd)>=^0dHNfutK#rA zdeW+Ri@7*M*+Isk%wlaTQZXB+PY~H;Ir6Qkpjyj#EI$wBb>BLUxOlvF_Pi!*yWiQS z3e`wWJy7TX(0l#r?b%J%9Q5}@qlEC66G$kXO>4Uh@jD^hx5Opt>$TwR$5Z@E1z3M` sJ^@J+PcqPx_IQ#=mbet4)Z#q*2W5edant=v@Bjb+07*qoM6N<$f^PNNO8@`> delta 451 zcmV;!0X+WP1Kk6VB!8qyL_t(oh3%M8Zo)7OhQC(To^~5}*hx47hvEpFg-*N2_OPd_ zLagkecAJ_cq!j{1>Muo(lPdY+IJTjn$CW7xGJqwW1Fq$(87#$0d_@{oAAdTkS8RIR z>rL0dMkFvAvU9)R9kvr49+YUNM3jIM+5mMqjweY)C+(tA4u5f-O}rRyh)nju398{feCB<0;k(5w463ja%6{ z>s9m?9|kz?PlIzBLW0_Nm6r5U-M60Ef9N;Br=3i}&Ff}-Ky!6FZujuby#pWc+&CU0 zN@U!JH^?{v<$p-Lg~t$gAJm-hLj4%dz!xNBPA4nIqC@48zOa`Pzg?+l=q>#NG`qw0 z`|e41ha%jp)mYtmFP9 z3vZm!+8!eHK%oP`X!XI`i;Ju!7~hGD=*=nAl`f{VeLN2F7;a1ANg3RMw;s>&FBM?@ t&G`akO*~6S&)VWyB3t5`fO7Nm;vb)5j^Io+F53VA002ovPDHLkV1g+f-&z0w diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_progress_secondary_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_progress_secondary_holo_light.9.png index 95c75a6db04e2a0b10f340747f399a735879506f..c5e14636888b55a8cf192ab52cea5174f1f21c61 100644 GIT binary patch delta 41 wcmbQnIE`^a5ZA%<+6E~**Jvj5i7{#-#izJaRvlgSo&g9vUHx3vIVCg!04c-{J^%m! delta 41 vcmbQnIE`^a5LaU8ElJawu0v@vC&s9Ww7%j_aeQZE!~g`Iu6{1-oD!Mctf_K;w^ zaNo_una|+1rAz!_?&lVY-8$*^;)QyXoSz6Oawwm764E?vcG>w^?Qcu%K@5f`DF?ZMRD;-1G$9Z z#+19$Pd|NiVEcM`?%FA4d*uAf`}N=djy}(<;X0r3if=#j&X-fSO+8m%dH3$ak~hn) z&-+#tf4KQ?&i@4d4Q9W17UWgQobX-0Wo^knXBQXq*ou4e3DuL-x}146l|QZ@lxx>$cbP`F;EQJBq~x=TAOp-JmE>6?DM{;>5A z?PDM6k4ShOk@(gwp?>hY(|qm+|1Tj_tA2jJcGk4-LfiY_zn%P;Ve18ilQ-v=UOs8 zoBxqzMXMe2irI4PMVGa6wP)3f3;u7J&sfXfU$<q!n~#zNzL5t=JT|Yj}{(Mruwj`hL-}5d0>IY>i#2@>Yo??%Xu4M}_x8-}XEc{lO)&JQackig( zbB3jQ-WR+1kF9<@{l8(^>UqF8azl`#Hw))A={J zAvwO}U-;wllkEl@?_J+;!@jD%PFFr*Et20~{%P;%04J>%z@%l|@BHd(#jfg_%KP`L z zL0sACB-5|kcT@S7a=)mbK5=V`@J$zvLo5DHa5=uom!rpa*34oD4UJ=ufAD>OtazMX z|NMGJplJ+iEvD3g851Tqih~4v4L>jesRf#BaUibA(F5E-s$rQ#1xVQi5oUdm@GK)8 z_m+p(_xgsPTYY${@qv3Uj2m{nEL1SxdujWnpZN<6N4RoU_X@QLFS_&3=9;#rVa zC3C`e{g<^R|6cw|)?r>>+IZYz{D^npTze!{RI0B@mjV3b6dVA%ff$!S^f8Z-46kL^75pL>wmfs8sy7G#t=DB@uO&g++LTk}aX`ry)@iOK$@sBytOjK0* z*Rq~*Z+mw9WlJ^t<^8sL`zP~nFh_Dw$-n8>N9(W->A<9*&9vNqf5bxvX%hAr*7p-gV5o9VWth zLA%+YXF+qH)eAYRPi8g&VwYG&BvUw9Z?$Sje^j!1xuW?H2bZ(J6CRaoBEB=X>2&|H zf6ma7GE0ba&-~fz(}U*R)p^DUG`%4z#-|oYGcXkRNX3EZ5ZA-pK&oL?Mg>SgfGDp% zNO;wvhpa%#AvA5iyj)q>ow}bE7Z-kry8ij-*b+34)yiwhG{p`+v@+D8?4w#&YZZs@fly~>nI`(VZ??v68``5(NF6HyW z1-}m-NU+Sm>$vHb-s!iy@(g00Y+P9>S;}@w^*h5UmHl8{=dYUI{CoIo^sC!<&l}xt z3;*plz4DgpW1F?sr;TP;m0sU^D{7T-z^?00;{Mxv?PNEQg*t!btJ}5byH!@Jom~E= z&Y{5TLFMcDTsv;r{hRsZ{u{no-74WXc_!Uobk1QW-^so5lmAEo^{PVk?)&v`-V?p! ztKVO!o3?rO(LagjxiwCgPTD`Y=IpzMpA*h5_?f-vF;j*9@1pnZD)#C-=f2p%P%*Dk z+rZ85%G>EG|DV*p-ko!7`$Bt)@Y&h} z5|)A6xAomM-qsfvzx?;rvs=#``0jL#amv{}q7usLuMA5%A6x5hU^}q;wHQ~ad+9O zUv@YBCohjRWq$gn^!3(PI?mVk{JVd*$BOxBmG8T?n@*Yo1KSo6QFrTRrrcHex&C`n z^AeuF`jye8b#lL$c6?)AV8y(&%JbdV>*_`P30cq(`={Fe*Q$Jb=5_fXP*R#ZS5hJM z)&Ixw?|;_*j+xtd$##0RbFcnR_5wL*!u$Q|*8keye=hu5H#z0o&xeWWZ{JSuXWu8k zyv#P_u7e6oosRdg18MeMOo~t`s{VYh>)78&qol`;+0K1A1c>n+a literal 989 zcmeAS@N?(olHy`uVBq!ia0y~yVA%s?D{!y@NePogK?VlqC7v#hAr*7p-gV6T>>|PT zVEe?-(ESk`k`Bs76fS>f!SG1Hqo8}^aW8~eUR`jqc_uCKCceFt-O8l)rrv!VJB@H%uePnaP#}}HsF`&hGCRbq?t-gA9yl-r#;H+Ju-(#0F6z2e#O&UB~wUuVtl4AYYDaa}plxo__3eNVI3 zP0DFgv48r3x5=4F|Mr)F184tzyRK6IwBW*;Nq17rJ?eU_m~*SV-__22(tg6WL3QSK zCexxt`Nv=VE}qmrXWhQy+mZ2i@80`gylQ@nYwi3e{VMZ|EfVZf%`@uaGxjsso!WTk zx7Nw+o^{bcUd7Bx?Eq!nHJ1PD^9vmtg{_{vw0Zt<%DmT0%eWpepM83- z;>G8)LDsAeQz6RDu5GkQdi~^U>5lmOb58U8i9cc0unpo6`Qqgo^Y-jx10@qsOuf2& zXDUBKmC9>|TWMfl*5#;gfBbjywd?5>UmqLp_O9s*x0UFf{+H#&*_d~^-(Jg2zop5r z>P&Q_l;y?kU+ZR??eL4buXs|w(DM8=ncZuiI~VSkF?c-NzLYKM>$E%79e0=`WrYc{+y52`m$KdZI_r*f zu^%v&&qHF_I=ps%Zu*JO>t;0;{XA8b+m-rm&h`JhW(TG(h+ThjuW#8;HDE-gBO>ba zb_@M6@;6A|XIN!?VU_;Ly)S>c08Kv&F@5&DB8#=fKj#$w zjeb?VVeY~kGZ-%|d#V5b+lj}IYk@xb9`x?4>Aoj&2T~34SwShN?`r9<9~J-Cf)Z-6 zlKE8iOWSTWFumwSq%ps!_`3n%gudt@E0A^wHvwfwh8JDNm<_(iXWL!4N~pt L>gTe~DWM4fv>4%& diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_progressbar_indeterminate_holo3.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_progressbar_indeterminate_holo3.png index fc5808cbfb76e77bdb085433433d3f6786670634..60fc76e5109054eb256f6eed5092f9ec379ac3d0 100644 GIT binary patch delta 1242 zcmZ8hX;70_6b-b9ND4DjMZhM-vZ+8&kTQU#R;f}3P^hMW5b9DuNFatK(2y^Jno%Pl zDT^g#6;c*SLx5m_1ga&3wGOfd3|e@*9ifzIZ|s?BOL!<%ymgqbVL`bzk}ovqxK2pvPs=k;&Y=!+x~ZN*#&()wkaHead#kqWRBlZ5_NF5b)6NF5rR908*TvWx0tl ze%+=ZklB^9Mj&>D0cRD4U@+U@L@)p`>HKb{T(<29QTuxI#cC01JbS7ezj9~PR_R=5 zP;4eo~Z3P!mxJ<|;h9GvKY4 zk+k~0ed)$&6?&a^_V!|8zHW~a>Q=qQHA_&r3@{Vv`oj50D!W3XQC4V1f+u%%n&~~p zy@k?OD$O!bA@U&ck4{h|uGuc=o5cI`^0^I+A|c8_?I_er%*&ZHV$r=UBZZ$-B=u_$wn&`%aT5x8ETXL)Mx_8`AnD6yV!T`gfYVER-1WQaiN2%tvXO6h44}l-?qmj?~55 zukDKJnZ%i8&a5txo-09rKyCtX*v3oTmu^oWHbsou$k z@sM|;8OT{wb>uAW(GHr?>;l zZ5I}ke2f0J9EObeIKWHL5UQj24;_^qN0ka%_l%9PnlPL&dv%^{2y5PieG#z64N!TV zEBWzpV<`uBfnx#YS?A{tA^-?1n0Hg%f)<8;X%!QT#9kA}RKxq_iD{#(V_5c8Pgy)+ zDZ3!Wks3PIgSX-PS$z+73ZtlS+UXB&Wnd5Aqi9%|)iX$J{$-^`hW+cAn3vx2PPZ_+ zR-USu=3Y!W?R)nMIqu$|AW{lh`nOYo%@p#IDAdK3$%HAlw4H5kqnm*m|F<3fzZ^d8 j*z|zc!5vYXNH5qhxP_%C3vH_;n|FV|pp%VXM`!&59G!+; literal 1187 zcmeAS@N?(olHy`uVBq!ia0y~yVA%s?D{!y@NePogL7+gEr;B4q#hkZyZTpm6CDt=6pVsT+nnbXi=o$Kb&V8Ng$RM2I6x`>5INQr4n)LJ*?(*ix&vFl!b+flvC*7odY zkFeYC?DM~d-@jJ#YJPbB{XN`3;~CZ*eYUe6#9;98JO~nL2o3ze1f&x}ML@1#h!ADf z2hm}!Xwuu-!#{2KvGx5-vDx!9btYD@MX>#pcwqG;ddB=Zv)+}r3+LYv-)(kvb!@`@ zbr&`t_LXs%w(_mP?!L;>KigOnKJpm!dVeZRs$u*P@=5p1`giHC)E>v)>N}Y!{cY>x zli#*^+MUjPxcc5ry_2zWYG-}7p7WKPr}^x`MwZg$H=ml!d;R~%QR4%9o+LNCo{*nd z_xxAnqP(J&8{bAOOO1;@?sfB=+3_}g?IlqOlaq_q@Vnj2*j;!3X3__lZ&z3MJ>OP! zXKKe0;{zpaPm&*VH++P;d0&}Kbp5LB+dVhkR{LqVy#B*<*7Ek3{_S(`KihKX+pi6i z!~b(X}+x2~wTkjwA z4h_G@SW$OOoZ-6S{X<*6o!zqM`uVoZ*M28o9u{Tax#U4o=}*kQZ;YPD zH1Y87PbwS?>lSOvs{^$KPX@+RZ0Y1rd+W+}7JprSaGPh{$(N4}PqTSDz47XsFZcPz z#()3+ew?M_d_URme)#*>Gw#Vg>r8LR>^*rLsQ>WE?FRez)qPXE%c}o(O?15Vyw&!( zlm1M5>};{?U4K~q`*&Awo4?<8=A&lm)=i6VAKr2=(=y=po%@>m*SuerqvKi2l_`7v zX|e2i)jD9>`GO_#t2XS-?PE{5zA<6%;%z~Z^Ph&EFMbfwWu;ecDSuw|AEvI2Z*Pbl zzGW50clzyiPrGHiH{PE6W>)3OedS(q-dppR?S54(ef(?DBgurQ>EPtC925j^RV#ss zJ?2*5?>pNgGmjVjf4k1=+VawEXHV5~&-X%A4F&JgB=f*<*Iyv%fG#h`(@ zsb`Ps#(R3CpbF5O+<%x=!p6%P&R+dSRc4Rl7`d@nBtw_B5QGah2PA4@RS{FI-n7*X zyIPc%l}}hrzMOdHzPR*LTYG)NvQw#n;53XL;#>F8K33= z5t~7!l(CV&JA)>SF!`Py+uEy$HzQ%TbZbXvnlSu%@ib8oYb*(QUCumLwclcwN(Jv# z@q=(FNG;c_B%o}(a66WFU=$CH5JypldZZkp6di50+|ik@A@ZIqwmlNcW!y`Qm+Mgt zE(6JqF`JrFHb_l!9f#zIH`!|Xxql8bC&sN#r0Mu#tI0VBJ0lVGSWjRJ1z`})fcm;*cnBrwtsg)0|F^-zR z#$emdYqk>B=<>{%kY=%Z8}6MYFkVEgUMh(jkE8_Ar;0H$S3LNNq0#ETK~J<1k+oa? zN-g1f2FPB7{mtt6Lb3#`7PW^n7-1~S>lPTvx?W-z_?#m==V1D1?+U`P z57I#(nQ@m=?9K9}Unu~aR-=vADH^|5c58|RlDSAb-R>59d=|fyqos&uTq*iakfwxy(&Sv^}KkXr7W zGUpO)Na{DrG8h)t?o74W6)Yw^;|xAi;f}FB^sD!FZ|)QALi*Q}#{%C{oCapg=4OLq z2tVgFEQ#x8-zz%0DL*!VI78*4tB=~3hJZ_f--aU?4>>5{|077qBfP0^6r(Dz2t-GZ z{0+~LUm+CnDB$kRRAC>z<^2UY67iE-1le76jo=JGRPKy~FG7jW;+EFBURA;uo?iEG zQc8h0*;JCD3nRNmtN}qU>tvD|gywA)nq)ZMl=CsKM5je&tB7$!JUHy*iT7x6i^%v7 DroBUn delta 1114 zcmX@a`JQ8fO1+tbZ8%E*xS9&Ktd}YU=Ec8L7 zcG@Qn9vvT^7q4Ee>RNOlKt5@A*&DU8Y|H)gMV5N5`Srr&{_@NF{T|K!y}O+O2o6N$ z+^YgH7z|V!#XE)sI z&gW}4zTDYv8pO|VdWk)=k9T});;WQ7-p^l7uxX8*eQWLO1I275FDmwBCj`$CpSB`) z#_zuCuipPJ`>;li;hEtwd-ZGD49PE78~DT-ox4%#HLLiFXoc)H&wVF8&yCZcd*)Zd zx2w6+>z|*^pPYQ6%=%zuVyE9#=UT=Eatv|P|M3{;){3^B^gd=;KJQik>B8S3jo~v- z6g^OFyuMKC!m_eSzus%@uU_@}kkHqw&elucWo5i#Ot8~`c^+u#;V+>Q%lwY*GznjI zTlHrCPN)yopHjyUzvVoFj!ywYx7qw2YaCZzg|7L zyo5dOdX)O}CtkBv_CKw!nAqd{`s>}ZfA1c?ZW*Wh?vB3a>ioUh%vEdNy>8a7-;g_R zU*P{ska(_)S>OKYUpPO*=W5UTZE=he%hn$k@)YdI(_+NIae(k*(coAI@ATfgS{ z_`}z1)?Hp$x_`ZG-gU>n79h79{=EqdEE`B-l(hD5w>j%sJx}U*PBgo}?SbI+)90^$ z%745x>$>yrzwuL;!uT21KMtwSvxhma@}!0H=PP#0v_G6OJG4FCWD diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_progressbar_indeterminate_holo5.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_progressbar_indeterminate_holo5.png index f826eee36c268468ba3f42b82885ea917f35389d..9d4354800d81076df007072db8562e04a7585858 100644 GIT binary patch delta 1163 zcmV;61a$km2%ia%B!6Z}L_t(|obBB)ZW~7w2H>9pAs9i5R4LNr1gUrp74$)JfFOm- zlmU{1&==7m(xggZ7=|GTgp^{r;&Qp9R3r{2tRk%I5i#+0AOXdz;4ceohnY=WMs1wqLz`ljNU5 zaY0QMNq_!L@+rFo^7|w|CAlpW7XZf{s^8X00K3#nYW7Q#|6+c3`$zZLHo}r@zt4G2 zuG0i~m)$Pp_2vM+T-*7dXScC@y?GCS^E6byt&;%ush8BOoyYw@1vRz#J=8yXa*hqJ ztKQK+2Yg-f3gEI?CjpG3UQ&y0ucW)fYijfR=zr&((m((J001xn=eWb`p?CDp0bf`5 ze*^%yJl077;~Qbpyp}rwoxixxI~BYtbN_hvo^2f89;e2so&N~z?7+%)Xe;DJl8+!Z=A|J`(42j z4XT?eB3$Fzu;S2ELVf)`*DoD4j49+Lu2wxjscYQ+WI|o9YD?0OKN6*zx?yfZdS{0 z84mye005j+t=roG0001(C=D+F00020qTvMq002N$G`s)+005|ph8F+;0033d@B#n; d0H7-W16%NP!^#IQxc~qF07*qoLUP|6l?e9phQ5$cRDrf>1dyEL;}Zc@qqD|J&Z&y9O-CHYjL{P$zKQ0_r@@!7~;s@EY4|nc3m&x^`zFMR2_uu`u z&6gJO{GE~2FFq|})wwp_#5Inqj2o)rF701Cxxw_Ze&)=dcPsVmt!_Tu>iemhw`JPhuQcT|2`{Z>2KzQVX+*1je6 z(dvxZOX4qWTKV&D_N4yE^MB?|mQSt!fAQ+s-?!_}n;x3E&)@vUdCMI8xBIJp>YbcF z^%$$}Ps5Y(o_0@nIM&U5vRkD-L`s~&fA*{U*E|`HfANm`<~(VCa^3Ww7i;+(BPJdG zZmEB=bQj~jrxvYy?#Ul`{q^L3v*QOpef?+3pm#aq|297+i={yO>*V(4%ruw&n&Tgtj22WakRV8|{y<8?|lE_?QU|GImob2&gU9QHt{yuy~J?_u$Q z+gktK85*8$^kbUgzJG}*fAj5s|A3}Vp8p+a*zdoFJbQkf_G4OKKK-)&tL>*his~`! zuu1-F4OB02Nk8*uMBXL){mXvZmI9-$@p}Hs;+>~fp7!c9UHb3q?=E1J&04j&|LEUM z*UElhzar@n8xM&Akj^WA{!RI~VENUbw&wO$Tzl8$-Me2m`|#D9=l;5%JEdFx*WvxQ z?N1l{mcL?l_o`V|FE}QD9Z#M6wRGt@hF8^|pb)s`vwunIv-0OV|77ea)Ve)qS(7Q# z`X?n54lmhs=V@p*F!JGmDG+m}t1 zPxvwK-%qh^PYzo0Zm)RPb^P!zt^3P?cFejAOfC#xyl<(QzdU2f-@onX?5z0>7vIP9 z?YVbk diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_progressbar_indeterminate_holo6.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_progressbar_indeterminate_holo6.png index dfd468fe916b1799180cd78ca35484defb7fc1c5..b9bd4c6ec7531df2d24d9ea080741d769869126f 100644 GIT binary patch delta 1277 zcmVTVc!hMl08I*S%`@-- zh+<26=y?GO?~8253xEVQLTI&$qJ+X3G9F)VoUq`Td%sVzY+v6GkLrn|FP!*r!|$U$K-f}p03%Wd>D95< zQKMaNJ(N#pmz(wK?%1fiy>1RX7v~3_f&R#6fU&9Lz|yIM^sJtj?c7Ypou7Mocd_1N zm2Cj!k&GG8&40x4qK<3CIAICe0(Cv{S)IRaqh3A(oYpaQJh3hV=1U!&MF%Ki?-`uWt3=?mrTa6qbU)fzCyh!qCk~b$B7XZgORL8B$fTd6e>DA9kzRb2U^ftQKjF9lIL=fZw=M&gL>;78^-jZj zZkFq}@5UugBf$s=hSUF|VoO!60C9<0lNrBes#P5Y;cqtDNs@sAt`00000?3vRJ zubbx49s|Zy|IY&e#${awES)+?Z`%1d`uyA(|C}0LSJ}PGK(c?EO<)Y~vd!Icw~gGr z{(t9=8vt}|s*WetWx#T%gY@bq_w%#vpOovZs}qguL)hsHt&)77v2KTY==PIS#iV?G zmGR<)B{-DNe^#&SoW8#MOg;nj;VE_8x(t{Tb&#G-&ClQNp4<6Z`YOL>J3m*s-z3%B z{5+~JbauH}f0FzE#y`qG(W|$DmVn-6_kT-E?hD8&+q)2q7AGvhp?ogy>wGTxE1v=S z@t8VpT?WjNI!LeT-CKv|XHl-V>iOB;Wwa*`^@Xli+26+2V<4?|+g;n8JhaPev^Zf2 z9+S`4+2*Z$2Iz-%8L)KfAibK}3Ds^CYOlAF`vy|I!>hOX`B2_vmE>*4+(OxYaesB7 z?K$Q6h;hOaw8i$idOuZw>xDu648Um|Q^&2#fH_kK>Dg5Oq`lTkb{j`Y|MT;`eW6u# zu-5<{GF3dLJ}<9FjT4rj&F40Mi?#p*(1-Wc@%FuS88AocAU$gvL{pz7<6Up<<=e%2 zle1U1w>xLOdHwSL9MqFttT&U#+jj9EdmeCFQ@MIfKFei*K0LLKPn`!aB6W~n9eW)$ z+V$2$`E+)&FZo%oCi? zF-}{pBPq_1*(vC>dTOdnTlQLKB+V3xQ_WpwT&-N~V_59P9?(63HObkGf zU0C{(8N_IKp7MYdNFP`wQNakLH)yfNfyCEzHP(xR7^{=e&s>zRx6(R zH{gBhv2NjQ4>ne<6X$v*xxoLI#fH*f3VXBIopS50?Tr3Zd`i#$^yg1;`9CX*^g@_c zGQTpM5cc=zowV{jPfxGz-+RO;3uyoGS3Bok($^KZVtnAK?b80}>5SP+_%E%lQrI$O z{?p1Liw|1;)o0HK7ccy+d9r-we2>2RZK-Q(3h$?jKl%O2INWpH=HHw4osB3wBqp=^ zx%}imGk+>Ayz=?D=f2J=wigH6zZAYUO7Q*SSha1+{QSv(ru@`fKdJk=r=9<&(rNXd z_fG#~ldd;Ke0~1CKgAOdSJ%x?6~D6k&Gz1D^*8tUeY)M+$6c{Yf6||cPu`yq=U6|f zX4aGG_1v=J49_jE9bbF8VeJL>msi(&?mLxd@I~))ZEubXUC;bjqyFcr|BphqU5ktVu!F(ke31NhJ?3pL@=L2WGsw zZ^Mufb1n72wU^CbmYqF*@pEz6pKPg$yJ>Y(8=rhIntedxUV8ZMr&-dK6@TuFnlrq( z6(sM!=5)hbkn?N5{fs>Cf9mJ8x2=7zEzdl23Z5iybnR(Ce{5aR%9&HX=Nrd?qv_}R zSB0^c%lYfyuS{>StMLFi{~FNw>E1toetWp@?0KW`pSHXI%-M8bc58lqVRlHUBcSfp}(+#%=Y>SVP&GVT&A+2oghKUG|@s88g+ zRh9R8dxo?DLv6*H{_W>M8ZWWGjI>sWs?wKyUz5G@-m)|0E^9BYY?LtI`^sZrRx5ME zs&>M>wOaP>Gp~X2^MOd7J)mfe5M|Z}(P2jqa097^P{R+Pf*>IjP5Np4!WB}FkDfn} Q$pBL4>FVdQ&MBb@0BXQUQvd(} diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_progressbar_indeterminate_holo7.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_progressbar_indeterminate_holo7.png index 6a223873ca589e5f74a11042975432e3276a84b8..b33d3eec2d5273892b84375c9e2bf68138e52ddc 100644 GIT binary patch literal 1155 zcmeAS@N?(olHy`uVBq!ia0y~yVA%s?D{!y@NePogL7;$_r;B4q#hkZy4f7tmiLgCT zZxj%7>c=e8Jn(|A)n<+6nXOPyb~+GoAfUVoLlh@t^D*Kpj5CpKK5P5zy!d>AL3ccKfdD z5%a%Rf1TG(HFvDq)LwV<_~8i=$7?_43%~uwZg4;O=R`l9C+rTfPpkv9e;%EbwRXPG zw%y)RJ38C1?z|;CIaPl7XQ@L9w#OgNiGI(Yuy5s`6ZUTE7G-eE+5_zIS}( zjjyKf^nc6z+xj`y<?lW{vG^i@gEc3*&0BNWy>r~pX4lCxluDg0|LnYg?NhfZ z?_-VsUMnsgzpnP{{fDaTYd0t5GtY32W7u-`j{q41xQC@@rqxIvka?*t!?5KzRBhkQs*0FjKdg>P|DArUcK;LB^$)*IWeCoDJVo^I zUHe7#Hg|rCHdysOt!@E2*beC6W3SW?e*>Crr}PczN4ea4%Sv8-o06Pp@aDezZeUEC zPnDlP`FLiV%&%HtOy`_G334_I(AmDd>-7!eK4_)Z*hYPijD5fD{_(%D$FhEW+PK_9 zf2%ZC?DoG_x>daT0piPd$85PJf1oD#r=gAi=j0RIzw2On433AzTM(!%O3`f`9K$gQwuQO-@a3NlznZ*HMaV?&gff$KMfCmoA#S| zhW`Ia$DBXeobUZ&0kmVA<8<#}AR$u(~-6Zw3{C_r@|G)9?Vc}~~Dt_)h zPrUh|c;g?26^E05&a*eSXYo?n9}%?n>*UR4>+SB{o%?q0&o2*`N^e=Q`fXlGb=|z; ze&&1AHs;KjEWZg98fU+6e9RCx37GCp`_`}gwq{-VZSg!%dBLEwe9Gx_AjShF5m2GQ ekkN%d7yscty2qRSL1AqxNVTV{pUXO@geCx=1u>EU literal 1069 zcmeAS@N?(olHy`uVBq!ia0y~yVA%s?D{!y@NePogK?VlqFP<)rAr*7p-Zjj7>?Xl> z;XIR~PLs&Wpd~kjmzaYab+fSiS7O3){}nh zJtK?iq@x8Uzij@wcA9U0|BeZ0IK$o>drFu=j0dwsKz1^`=xP!N(XoLaKnfOUbH#zU zC9Vg#fmFjfjS5B}ePQauEh>M-_wyOQPBPxiHbI`DcG7!?)lbB;vr22`ZY@8tF)`Ki zRpyJWJ^num5~~gE{?Gf(9FZsW;Wzj1W0i(~864{vu4H=dQ-9X(Pz%zvwXSI6UFS*b zKmG7pA9s)C@#MSnr^U*(A5r5!xXw5)WKLUtzbAj7sQ9Ph-z|@W9-QWHsIpbRf0n;-)(QPlU^%_tI`MC7 zCO_#H&k_&VFF)ze%qPj`nE$_4xv%>3Z|g1A1NFw!-vhn=7U=a~b|>RA^K16{7TMQ) z+wd=^xMtzI;<(y7^TZk~pHA*ke9rp$Z6?s$yQYA2a07K{J-Ma4g z<*Jx3TKX3zJdV|?0!8`GKN{zc{|x-(1PuE3mOu0AIIg(VZCn<1{Cdva^b?P>V*T?Q zK32Xhj(agHOyhWX<=0!lct3x#zqZd((VpQ|dL73WFR1$6?JD!tdSB&!@YgStESbkz&;QvWBV=6GE z`1Y)iT2%mwgaT3QnMssYA0)kN(F0Z>X164EtIeJAZQ=I2`)(ieJ+6Bo;EB)yo0H`UI-lC@mRb3gd2X_KvmsLN zW>+qI|pe*1fQ&x_OhvVQsPXL5dhYU!`&Y1_=DfVRc1KUx0S@4=iW z{Ix!%bEf3(@Z1!u_S5pXe8-%wiZynj`PDoAs{U^N9gtHz`HAm0_K(Y7geOSE?)*|c zso%10b7s-Y*(&yKdW=3dHGk&aq9)Bk!yYzyIu|R@~zMD{i<iz?D^Dr{&8bC+G@I<}M(0--u)Qcw{hw1D^J10ujHi)t zz=U-wyC`#Z?LT1Jcxn8e<(N|ai{w?0m;Cu|?pbzPC4SXh$vJO#)y=58y~%fT957j| zs+TE>wpsUi#T`Fjd`8c&F@Mj}rU26Pb>iYO-R@(OGyZPbd*b%I{CBUz6EaHmu3BEn zxYqzoHur$#NpSj0nXc0Py}#c*`@Q|1-536?KTT}@F+I@-ikbu-KWi2c z9VP-QBN%3gvg(8AG}nXNK&l}!@B>|N- zVg2G2rcOE$8xsz5Mief;SIBULF+%B}?k}CQiZ?bSHM%Vh)b3*9UjD-C=)5xX!Z+Xc zs7LzAWCv-5+g<-tc-;JZIX@%N@P@57&fEpk3=BI|SoJ}4nCn4qAk`2W_<;#XCxnWC zoWc+xiY9$iZo13I>@|lE?7G3ThH;tFbcSo5`cgt|cJ?+gejw@YU zykc7Hu78^Hzjm$ny8kjfAd_~Ad#)7_Qo2Btuh?yLUPJ}srb`|ao7 z1`o{cHrAZUEdBIt2SZHsPqx(Am!1B+{bg^(?nA^#_c(lsBPkt=ixmbrGKRAA$`m?zQzC7Vi z{&Lm*)VG_*PMV!uUnqUiUvk&mwEOM<_TP?o+s|}a^3>ArS07u={&xKO6QKi}_Nv`K zYu)HQ!M?}P#LsTY{s*ON3ol(?clYeyyN9n=?&`k&#$Ib%z}KY}OD}w_h`H{%zKCJ_ z%XeuD;~Q7ypZy+80@|)qI%m$-?Af2S<}g;RdpEze@_SWZKmExD-%lGWjhi>$zrcU_ef2lZ z+h4T}mVP^~`2Ff_jc;(rJ zi{>-{)!zQFvL=82Y+!m-fuug?OMiKv{+lUVIrBN6#euCSRU1kty+05GbnY1|zmP;w h_QJ?D1Txi6@s~co<_qkbbqkc|JYD@<);T3K0RUyy{W|~v diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_scrubber_control_disabled_holo.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_scrubber_control_disabled_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..c3389745fb9d0a3421a922f528e8ab6943afd37a GIT binary patch literal 1101 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 DjZ!xm literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_scrubber_track_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_scrubber_track_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d396de21a4891cde5dc52a7c042b729f69b0ff GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^Vn8g#!3HEZm#uLCQY^(zo*^7SP{WbZ0pxQQctjR6 zFmQK*Fr)d&(`$i(fu1goAs(G?uWjT!5WwMj@wb!NDL=lao8E^j`g-ZIyk}T0;F2os zxy;};lZI>j?<@z#8SLd-jpKeSmsU`k=VfAC?zm4(j<5XAo`s7uJY)G!Gp_R!3y=Gm Rkp(oI!PC{xWt~$(697hmG>QNK literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_spinner_default_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_spinner_default_holo_light.9.png index 10458c01ad0628410f0146b5f38e35d8607dfbdd..8c469f65d6af4c61a31d798d0ad1e3cd9ddc3910 100644 GIT binary patch delta 381 zcmV-@0fPRB1DFGlB!6E?L_t(&f$f^HO2j}AK;MeBh1KCFC|6BuP(Y^TS(#D8Ihn6k*7Gp4q~Ni&$v; zV<8qYhS2Q7&dx$IuY=68k5>Q%i898;aVlIF%o$-k>n*XB5cej;y$SIiEMG2%;IPF* zJP7tld>y(I;@*U~HzDp#h1MQenF1-@303U?oEh$b6D{Nf6vA2Q1+A^1wQE)TtqX*wHaW900000 LNkvXXu0mjf1iGz~ diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_spinner_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_spinner_focused_holo_light.9.png index e4d7abf4d16748b2f7f0b887baf00f41a6cbe446..4de02f1ff881eeb66f3c41b2544779ff970146d8 100644 GIT binary patch delta 620 zcmV-y0+aod1%(BWB!5gvL_t(&f$f^HZqq;jK;Io{Y7kS@4b*`Ofz&dh3V{$GzyMP} z6C{2BAvV?sK~V>`lA)qfNE|!18SIPQV8w@hzOyC2#d3VHpPsG6aZaE|vb8QW-`5%f z;PtyVBj5yh0Xzc6E~QEcfbYO(VEW0yXlpy`XmJ~*6@SKdZmYDyNO7B`6^##KyL5(V zRNO^rMeTz*D!rjr@$fP@@XwdeTuFnbcz78c6xUZjSI5aZxhwX>Z_`3zBo^Efm6Lq* z#D9hNi|f*p*V2>Mb>(&;Bx|uJ)>Y%Q#J$J2zcyFWNAAm@YK)e+&W>#3{JBaUlHs3a z2b5jol4YCI`CQ{s5?G1*0000ZzCUqbc< zK9rB(Q;2w_f+%C)=5C6;n1$M~nwF$CUL!JpU4$ae0ODl4=hz0t-<8xrMnA>xRcu81D}Ao8n0X&;3U>nJU#t$1Cf1+^5fv$UY{oqyI{T2N_m6{Q80?Oau9K_$gi zmKKygi0aZYMycXDN(%}fOjGG=3KhTf2HQU--=67`21)TtZ?K(SA6%X72TT9XrfE;A z7P8Du&or#uNj_5Izr3IK)9a4aa~-Sa7L{9vX;=%}+*;&~lM>&%`}nlHl03HM_<3Wb z#ASA*8guQ>Rf-UH|14`D>l!z?Ih{{84jF-k_?$%6CYtBh)CrSwNW?FI{nW;$O$ttP z0m&(N4~+G>NHZpKy)J$dFJA%=(fkxQg9UI7yd!osAo^Tf_pXddTeZ&PlJGJ90lhdk UFLV2~!vFvP07*qoM6N<$g7zpnRR910 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_text_select_handle_left.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_text_select_handle_left.png new file mode 100644 index 0000000000000000000000000000000000000000..1d7ea81b177414e595fe9c108de0a5c5d43805e4 GIT binary patch literal 1859 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 literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_text_select_handle_right.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_text_select_handle_right.png new file mode 100644 index 0000000000000000000000000000000000000000..92ae3058baaba95b658618cff77b480fb13cd82d GIT binary patch literal 2065 zcmbtV`9IT-1AaR)X)<>;ccIT*)ua`DWxo=5w%vr8B;^Qhr$`R(uF);}_nju=H zOotpZ$JTPwOs+Y;zW>1Im(LH+^Sqwd^V{=!Uau$hsxajG=`Cf1<0%9jM4y&~;&- z$8Jriia^=><9p-0yFNXf8B1ox zC1`alsr#z`imecS*LV-ZW}z`*1FS->V_?2=ML7cy#H8Bdc>AW^`j`zyOGNUy*iuUw zpAGx1^5p(pS065nq`UEB1K<30x&PyQ8dq1@=*{aTuuk-y&Y5xX*gOs&R!uLLM%^-s zZrKW`IjV#!h~$pzN4l@*!UM67ES@K2fB3of0ZQ{S#5p-Sw~~C1Cmrf4{f?O}m7l0( zR-i*GIg8*e{p<=c3OoCBnq+j9xm(N4;vAU?Dtx{m!yAT6iae?h1}4v68iL27T2;)i z2>|@^hYcV}F%wOu(G(Z=(e3cM#tz3H!C>Y$2<3uSDPtT;JUMAiT1f=~8H^M;ex9X6 zVK6=I%~;>FdtUy}s~LGi_ne-a01%2q61#kIX{Yp*`G+fnX*w&?7q1o)HEZ&EF^3{{ zAuV&EvUEX=ept~|tyohRepEjIdg&RoXr=9B|Eeb|h@peaKINynVO{3hLQvJ)rs8UY z;UuOd#rDBW@FSMjuim+xk-G6f$EVC;Vmw44r3~>E?jtm_jk$`ie*)8nYJh=tVX_45 zR!U~KIPQJn>9urXF6oakohy!kaDybquV)cio&C!0IeHUnXtWM`uHEL!4yNV^pTdR-m^*E1$5E5Zo|pVqJ76VPza^!hGX%2 zV$pkn`Ja!6k~hTq&sa4%(5hg%aEJGqlgA79vAsM1gBhPzSkuq9m_pHCxc9iPO^?>Qma@=IS>5MM0T1mFyN|nIoKSdi9^pEUt*{Uvm)Of|a5_B0f2PA4Ng(X8S(S~uUyXPA_NDcC1#umGv)zl4!-bof{GV@5k;2 zpL3SjiUGg5MYd+veq|2DV)Cy#4V{rXm1eV@RuMl|7lx)sz3f?t_QyG^W7i}72~LN1 zJycfdTz4D9Gs!mL>ED%;gVz0<`>f`eV`-kw(`uL1%1PS?+S<~HS1savcw%f+O zI94!EeG+iCKsIRfDEMuhXJY7Yen5IIe48vvx_*v1|Jhw_Z}0AT(uqpgM1%DAg@|gr z#jAY6gIUDD`P#5SXZ4?!#46ZCQ$RKT#2wb4reMr@?WBY-nTV}$%k(*Y6zco!PU&v< z!^XBHfwkN&vJ(%LP+Q@B&RUwtD+*a9qo0ONP^hxu0Ip@56s@viR?AYCCURDuv`EuL zI^bbF;w#8X;|mO~*PI`-J^x5hTc-1(!SzD!@3hE4z@HQRs^4l^6@KL-ay-D)$Wx7; z%XyJPWIqWT+7VG~96>#AGtPs~b3avxUrAT)znOOW$za;4gCTjpo%!Q?y-$0-{&0!N z&8_qiSh~Z#1bk$eKZ+;VefZDdL}!ICl_$&}$$sUEuicY!MXK&T`Ia>Cc|E@}Uor7_ z`Y>-A1JR(`Z-;6QI`(c?ZIyJO!ZYV^gHcC6^dA&=|s`ITu-lZv7&@xmy;?okrDE_8;YCljmt+GSo2wavSZZ@ z^65rL&5LWXkP#evA`Y^mkbpL7TLTxxO%|c M*xIPx(BuC90P+|G!2kdN literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_textfield_activated_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_textfield_activated_holo_light.9.png index dc19219cf78870f00d5e8626ba0aa24f93ff1301..d133f46149977cb163b4a5e69eca61e7215f8386 100644 GIT binary patch delta 206 zcmaFM_=<6YO8rJp7srr{#<#b9xta|m*dFRHJ^p%;?aJ6Mb%p9jd%M3@F1a*&6y z-XOEI$Id#BJ=WZN{j2Sp*+1&HU6gQ3o}uD-{qb$vzC;r+SE3hhCRo?+{NgOMTehtdn>t| zk63bJL&(3}gPpw5F#4>ECGa$|HqW%8u(~gaO)8pFq^+LXn vxrlZpD1xBr#CS+~nD?`(y;v67Tiykxp90}yz+`njxgN@xNA_QhYO diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_textfield_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xhdpi/keychaintheme_textfield_focused_holo_light.9.png index b84a6fed1bec1e14db22a9c0e04fcd023849b9b5..88fe4627039635d91d2d1465519e7c75819500bb 100644 GIT binary patch delta 406 zcmdnQyn%UwN`1Mfi(^PeeN6@;t^6$#$rZCoKQ?fGObj#fKFBU^%5Bgl!Ti}_ z?vYEYL+jq3{V62Bp>^JQF{k9&335^IEoQEajo#ugTTeDgOJf;tS7viki-6OKUk`5Y zwSw|*Etp}3g=wJsOkc0wu<@mwac87q;l{AQshSNk4sGw)GZ^kL#Q6VCw)NlhUniPj zw!^f~ne{nL%Uk~E76yIqzWaK~yNc(h(hqLkD!eIYsZP*=JFz}i>iVmUe%s{9tm~C2 zIyYDQz2e*tS|wtE={!ldIH!3h{ri5OfiLc-%;Agq&mV01QCcIk+5f2G;d)K&RYAM> zk3V``<9x*I-Da;de6E|5-t!#QXRr@u?R+ABz;xLoYujyY_j>ChJZ-N%2uyi7ugdLx z?8lqCe&0TlcuZwRsE{@D4xj0%CVDS6edFlbxzeHcog1$&_q1h>)7OeE(=~f|Ppo%_ rsCPr2&%PBVCCax~NIy>c^p8<*g1u`bfBgJ;3_#%N>gTe~DWM4f3#z+4 delta 389 zcmV;00eb$h1F{2A%qaJ zKKOR84vJ}mV%ngXHj#i9e@u({i%U#ky2ngnR!m&1RTfnWAP114`vDpNHvreeXTb$JWV)r_!JKnkSS#WLbge+Srixe<-7n9D(%c9CYj~j<; zBZr)G=gNCXC%g)sMbsICn0A8Yl9>PfH-Mv8KF4tM+c~-{ejT60f9z9n$Z*QaqLS{z zvG_RO5V4K>tP-n7n^c6I?EaktG3V_i!>rIik+zF# zBf4BqnKN)JZWc&i;9MYdjnA!+;}ORjrgI9Dv|4Xue~!BN!EaxANA^M8@8=&rw)^$t z+v|e=a`S&P{^wq(?Bw3k#~~|drBvebqT_-fnF3|JwKHb&8yDLe@BjC4x7|INb06;Q zzh(I4^UR&IW||jo&uD*q_Uf5EJKD?VrX0WUKK@=&i_gjfy zH=BBwbDK>AYHL=Z$TigP5wT`$N`4{FZC0muBO>egg?O=?nz#)cukEaktG3V{wjb71#GRHs0 zceex?i3qBnd=lcNuKx1DYKtx2@{9Zft-kR75>YzpX*K22NllAR7IsZli;@#lS9RQ* zeB{05i|@vkbME~ASUq|69i7T=Zx1Ja`7rPLy#v9C86681+u9_gl89w!Z#6IIcbt@X ze(Q73W&As)w{8)unvpUkrS{#jcFCvBd&^#&Rgpe0 z=dH?d&%TDp?W=yK{m}Dy;w^pmj8<0bJ4qM%r|LL5@|Hann-%U1D`cnDum%R6k%7`8NO8SpR?J21_oAm!jWqHrCfQ9F| zuJuiRqjuB(CjVmpUB}-n`=8&Wo?1Oy`YZFB$5Z}Z_?bD$pMT5r*PwCoFTy=TB~!Zu0BWN9lRx;wAc~>n>J{rrq1(&cEhs z+K%Z@79G0N9b$FS)V{RFzli6Y^}DpNz~7JW22Ns5IOk}-TI$ug4|z{xX^LH2j~TkH^P1 U|5^_dFrzVey85}Sb4q9e0K9#a`v3p{ diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_check_off_disabled_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_check_off_disabled_focused_holo_light.png index c0fdc45b049f72aa5f91c814ceb226b4b26c12d7..645a7bf9302c302b4bc55a0e8dbdda9e933e38d8 100644 GIT binary patch delta 319 zcmX@ke4KfLP5rb-l13(Shny?f7D^U%D18%C>f;OYQft?m@<8RieZJJZ``4akUsk{W z%aZ{H4$O(QXumr9>)It#msopVKX+63g7>cpTi(w4cG>ib*n)d&@>Ogz>gxXl=)c^V zeM|rN2Jhn&!k<9$(DU9_*U3rQqDWhP{3H|F&h{s{M5w=2r%W=MSaN-PW_N-BRBG67+QS Kb6Mw<&;$S&2$RMD delta 324 zcmX@ke4KfLO}(+m`3F}N-A^nmYI*QNv1`e8fx?mrK}MD#3q{l`|5slA@MoJ|{A|0Q z*Zi3nVBp!CQm@Pso-FNQW$o!b*5|eM=uIFBrNm1K9>|N4a zcrQd&W$&)Go&MtbB{mOsP1#a#ZeGLQzWjgN@>bXWIu7$M1H<%((#4^AXZnm1_J9OE MUHx3vIVCg!09ZDc$p8QV diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_check_off_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_check_off_focused_holo_light.png index 911bad8a356a40fbbb50e0395e21478001deac50..bcadf4553e07ce390c8162c04283e0f15ec64513 100644 GIT binary patch delta 428 zcmV;d0aN~(1f2wsB!A>dL_t(|obB8{N@GzNhVl1)1Pcq9Qrv{#D2UUzfE0;~a8a&7 zNQx|A8bSOs;2s9Cv=EV~=UPNT!c@a|^4?sYUzg@P_vSe#>5c>d0000000000^jVWR zY&aSHkaQ?%Thd16><*YqdXRKE8&4mzhNcA=PDWdjPSn3Iet+3q()nyWeaaXX8ACoD zs{dcUw0Os(tYMh}b`ocGUD~@2vIc2s_s_=Dv&7kU!^!CM+sCw%o_PZBA2LtCKkfcH zzH7=`X-cWRRH`;YZ4Bb>;`eUNb*cww%3F!|SE;O5fu@ZpQuSwEL4YEaQvTdr|E#@M zroH`x+ombie*>cV50hX4CzDPAIe#O783D|y-xbkDsA(hi_784ruazny+Ni%jR}f$j zMJlVf_#)HSbv3ousUD#AeLL%Jt#)M}WuAb!zTKs^bjMoX%(Dh%o`AoJv%2m+Yfxr@ z8%ZyT^SbIq(pA>5?5m46wYb1_N782I><)O=V&`AZ#?xo_!vFvP0000002u%P>)`{z WUr#ZM>`njx0000*Zowq94l>`6)000000000?S(77^d)ol2&^PMNxGSL?XRq%X#tjt{;Q-*P4A1}w11NHecrXdGloURkbllJ z{V!iyzvH*8VVMCA6K9QG+PluO25DpW&%3ruoNc#U^ow^N(@uKk3BV_0o`4S>onJgO z<*hWO)Ltsp5TPMv@o;^0RCAr`0h;nw;?Jv8cB?=$L=>s|GjAb4kxD7|{g0E{Yh^la zPw$$hRR4+QKa*?$9+N%+M}Mn+SHuvZW{5a$Pw#54l`0~JsJ}nA5MUNXD%-gDBGdot zYHF`jJwWaIc6QxP?aC?2JOL}cyGw23jSU*LKuX)km32s~@O^Ka%|`|N%g00000000000AM%#1r%l3Ps03J%jf_A N002ovPDHLkV1lR8#b5vc diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_check_off_holo_light.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_check_off_holo_light.png index 310ab257ce7f03bd709c9a6219023907643051e6..441cd8660add7b779bdf050f8a1b43ac8ce55073 100644 GIT binary patch literal 443 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U~KYqaSW-L^Y*T--(d#;bVO}8?Wv2Zh|hoPb>4nccj4>3?G~Q-5B3`~oMA9v zKET6($%wutcjMmr=y%Cge}5)kEsSHtRJY-3{-OP)JNDd(y1P2GH!dsK*0@Tqvbx5$ zCnmk3A?*99_2)Zgt#)`lQ`E5Lyfw>;j#a-Zs-nMdWGS+lzi#c-57ArBGt6L2U~7uZ!G`)xubYsl4xKx&%PU%&hMCY@ih;>LDju;ZU=;9laSW-L^Y)IRAG4!?%f)%q z-Y1{DA;{^juE?bP(`H7bQjk)=x7&N!gzP2z3&RF%o*$CSW^>sUYD(5DjyBci1 zweiIZGQD`^!oqy?*$UBZ_c{+ m_`^}%zw=gm?q`Pis=~%T;ilGAnQw0mK|-FcelF{r5}E+?Jb9A< diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_check_on_disabled_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_check_on_disabled_focused_holo_light.png index 45647112958673807e87ae38af0b23d3e4d464e1..ed742229dc06f84522330eab4a39148ddbce5693 100644 GIT binary patch delta 926 zcmV;P17ZB#2-paaB!3@CL_t(|ob8=GZyiMxh99gbqKKdXQBYA)QJ@I%nS(LT2L>bJ zmY=~7;b){x3QGtgfu)HM6%`d#$_R-9DTQTST~T<(S+Dlq?A$qX_l);E(rQ=M&dlET z-7`D8J3b4J<2a7vIF92uj^j9v<2a5}omaFfI(&G4CvNU^{(rnPw68IiX?=Y3Xt{RJ z3S85uB#Pf(z`g;?&O&FsHHr=BiGM9FeIu-r#9wrltx{w_NBkuG4d6ZCP2jcSquVYI zrf5{73rZ&30PX^>D%3d}O1p?|1iX)npN&QzolJOJp|07XG792F6m&U`>;6c?68($t zAR=-XI13@1Xn!9-sR1t=?JR&Z>>IH1_@elq#ci}r(29T|mcZG6KmL2GVjC)i5RQlb z-W5NxCn7r`gkQDVt~pM(de)CZL~e6g{KT$^e5ut=?FhIqVAWY>ktn{b*=09&N5zp~ z{Z4i3j1WJu8}}{34d@WNmNDXYipV=9ZMp#w5%~hx&3`QRIE3)Dq+K_F3-R|di#-k@ zJSlB^_6CT^=S(C%%-nz|{(fdLHSuA_23Qau>fQ&KMMQ3qFaFOVgx|G~Wp)t|#lMqT ztcv(BGXq5AQw)g@GcrI#J_hb(7ON^g%*22w{y}E3>f(dpi?E1%4V;!f@G2Gm@ZtS5 z;h?Y80)JQ>A3Z9XNnz4}DE>!rd%5XL5T!Fez3uzHx8DO49=Dt8g1X{I_Trd5x1JBt z>2`)*x5A70PeqtAU_kuDevSzu@&WKoX7j81{8g`9RVJR9F+fDVVp#mdC=;Ui-)1(y z?t)v@029}MDE=oScHNKHgu%xFB61TY@kQh?Zc(0O)|bWP5g;P(GEV%&op?jlujeN4 zU1sw?ZDXjpj>!!OA^Z*emRamx9N_>(;{TCZMjaDfPzd2fL?G|E{6Q>pN~7X~fe1*% zv3_nO8~{g?_5x%R$%JOb2P02IH>JkEjc%J}BjBo&Z37x5yEJvLGt;a!swN+-838S1 zO&mkj-%&dPuD|}n8&7C6bxjifI+LseGk;IcC(2%RPC5UrDp8=(1tk-n1HW*dy7(>5 zGwEI>o&)~?f5mN;2q;cp-^(A}U0;=9C|n+FEV}E`l=mv%4`?`j{aCu`?JpLM?+y3| z9LBNiZ%^^D2gh+7$8j9TaU92S9LI4S$Jvno0b`Sdk-xu;*8l(j07*qoM6N<$g4*u6 AJpcdz delta 952 zcmV;p14sPW2;B&fB!47HL_t(|ob8=Gi`_;PhMz3Pq%f&Mid3lrffT_k`Si(Vv$37c z2O*7%`~Y_;@=H>r^AB+0+7J>$vM|P^FsTfNR4Gkr7t3sea0R#lysA*=Y$)v_x)JamE`Bx|eRMM6O@+E=^!Kj#k$n-_2_gKU)ppHsy4ACO6e98k=fzL#iOA<#?bMEdGXqwgWfqCz%bH#G zVs}&=3D)max6TOh6MJ#rBHVxuv1=J4ey51MRnn##5PuPo&w#zmVh=(H|CY4t25=_+ zerB-;A%useZO`5S5&4vf#D|$15XC>pET$$t%-8@6;zQm00JDh5HS)#(Erjq$`&ecd z0a5(xnZ>Gz4>L1BL_Wrl_%I^_MC3!@W@fRf;=@b~h~gh+7OO5k7`_OL$XCE|=>xA) z@$cP!oPQ=9^tD<5i(7Ygi)K=oG$4xqLEK($`VvIx%ujFoe(3FY7lp^|=DMJ+_>uiM zX3wqXeRR5=q1UbOV*XPRrVJPmKXH&_f{5$_UuQPIs?T5b%2j3JnHd8_YOZ5)140P@0Doo{yBS9~K#}-=WtLILL>Cl7I1&-adoF(%%N*0F z_+TIc5^=1b8wrQN_ml7fWKzzAX2l01PeV7Q#=nhjn`R^6qTmKhj2kd9ZotI20Tbf} zOpF^aF>b)b)VvWpH+8Qw)2ubBCLgRB0WD-r97EOLQ9A-I|M0TtB1OEX};XN$)72K)mK<5>2$r})@|<2a7vIF92uj^j9v<2a7v aY{>s1xrRh>jrmRh0000qpue|_n$##o;Mfq9^;6Qr5f>;vnMvSkO05-(4jynm#BG+`xNrbPB01Wc;-8aHW zEV22Ur4Rv!n|vi;AV1%2Hz2w)#%)^^%>s0dETkc&0INP$^&)VtKdYx3*UV!qD=3Nu zWXU%!K;;FnBcFqrFk(2z>Y7eHo9NE7J-=WJFpwX}E=D0L0W0#2LJ-};GyZM_tJk~P z24J>=f-FEszDE2!06_o?0Mr+9?E>M}&+ExP0YHX30i1d^D<+gI2x|?Q2jEcvwMDpQ zA#ft!%0=p}*Z4O*^cG_WR|B#_1<+eS2wzU}S?<$VUJv51ufyotmMNg{&9eLJW{N2fYty#KFqG&nrxx> zH*T{CVUeaUS8XVN>!)2k%{zDQe2(XN`Pa|?`kj>rR&@hNL5&xI?3z^%AUCTjNepnx zc4Pn|N-ID<uCT9 zm_;zU97h*a%8@VuAWrR_{NEDZBMU<|?MDDU034_O$%lZ?=L7scz~|%O1Kp~pg-TIx-cC!7sV_nC%AO7-z(*WWyXHJf} zzaFK`(@X7kps{N>#MzS1frB5M&(Co_KLE}L%=-Ik0Jlc|;Y{f92R7`c8@NW9$hexh z3PBcdHa3E)t+k=f&dz7UySi6EjR~yS0=VS1)D|!!z(*f_^aHz-Z*X4TDx=Z&X8qb~ z(R_b>^dEbJ+qP}n!ELN+Ov`CZq$i*d0-35_=F0R0=5M++^pyXp=ML{Wj8!kM?v}o% z#F5+Utt`Q085Nm~E8rmrGqZrX=h=~8jod6o+pg>T=^q<6Z{GZO*ys=OGLLJSNeGIV zbHgcd3KRt2+Wf817JkcfC*L@Ul?PV+4|2t~C0&oQ2~fm`Ao&DcJ;{3FjZ59Y&pvD1 zv}x1d&U@k;p*SDMBp(AW^UMk)#3U{zFQI-*edycaZ?C`l#-E38`}rMXjCwk{;7U$M zvq*Omf@J|#xxJIinIV7hpQ6Ezj*jhBTWUioF@?A=g_M-Ctc0AAaV>TY!iUqnmo8oU z@0ABuU393oB}y%TmCJCu?{v(`_uCO408lryr>}AS`t?uD>73V`5RynqNhC!!`IJx) zNr56L2pq?mo=DHZl?PV+fq61}irR!SS%434H&TVgIZoxA0x!$`%p2O%7hJb)-PXCC z_05xf41yvcB~62ZGFw3v3Mnn4>bURB1$yyUE&K29#q2o84NCJozyeukt*ml6*x}AWciCKEZ{DE)5@C_F7{< z%;XzW@0%(HI1z4@LpzD)*8S++PH;`~KoJyF9rv9X zJU{rK!Pi4ksLu{qbN{S;OO#3gt6*wHww(x8qB!+_mJllWkFQx?|LCoq2{D0bY1)>2 zDiaV%0X-!34vvlTGA7=8kb>4%|at2{muQl%HD@Hy8uiBwKeZdDeKKO(BznQ;H zA~LRJCc!K0R1<){=Z6Q!#*R1aTYd(!-V>($IPbykxq%qkLvK;~sgDG}8tIE{RL z&nEyL0k9sxV*om|qHuOeGhn@#ReAw(?`4qr}^oppMK%`Ly4scA&JjZU%i z%7zw%cXc=K*s)`m+(DP7_3S}NC-*9g(=K=a$ZYYM_a?#E5l2mx}KRip7XyL z{i~*?riZ@M^}V(jADi*{b`xu2Qb6?yE<7?aVj@5JZsthxQ2Ge6&$f|EuG>rqfcFIpJe6l>J3V@C?1OBoDI(YHh#(YHAsXQva>=*z z|E|dg$}50AbC|)(1FKH=ywJm~BrB2GA~yR1928N3zuIrQfJ|j1gd}SHb5Ol~&WhEG z+sBgwi3Rh2a$7qu^O#6aSWc`_LLu`q6hQ&^E(wpGJ7-NkAX9~qES1K0e~LyvScDV_ zZinLpK)PlB{bxq_(fxDYtL`Nt0VstcDr%rKK&CP#(i2EZN%((Q_2hzQZeKek#PO%( z=eDz&ilBgq1l+qMeD2)2Q+DJ75J3PaIip{#zC|M+s7w%MrE96hT}uX|=lb5Md%wC@ z&L|+VbsJh(rJa$QcRbH=;Z80T~JiD772u7EC@+egTZc z>-W>kUTYkT^hXZXz88oPk$@^xCC~!X(lk<1$}-pzi2$5RK8`5i3l}c9BOj1KDS<+@ zdg?_m*8PUb2g)mevGT0_RKuIg`=in5A=MHjP)eDu$O)z))8pggMxXDFd}PU|Idx{WuORY)a>W2@>-VihkdYN( zU|`_Lyx+~~B_h%MviTO-L6)46Ko3dbv9U3I&({;~OulLXECGs2K2VMrz&>VY3B~}K zSo&6DG#ZT_t$V+^SB(h-a%MK|)X108GUS6oczk^Pcce%PKq&l2Y4^GF=Ra7s zx9JSnBwH=!eBU~GC>r@d`R9VP%5%u=Su8P3))9O=6p8%wk7y)~TxOFP^4A8y1vn^z z0vwi4kB*L>YS_0t3^uv$$uFVLH=+_*khbmQ|Ml)dTM`ZXmY?Yx?R#hLZ)(&qJ@%)uLk;_ucSH60yrCS+4Y`?8wrfvOP=+9!6EvNIuU-UWz!aep8xOu7ij451 z`)iK+d;Q1IeG!-bBlvnK4AtlJ7G>S`d>zpLqFqad=X14 zr(fcWyOu;hdnvNNrly9!_l^7dVNIsY*tR-X=N3y(K2Vt$U?+m{!M&dRfbKX4Kn%Ve z(%#LtOK+{jupz&EsKf&qI}tSK#o&-D1{iB2c}_yy6yyVCoQyLJ*{z6jN*7rpS-WF) znU5v;#rPbhTa;slG`h7Sz2f8p6?h<%hX`(Rc(;QrEB~*rL)pm(D)d^4 zjR@MBm72N{#jXsC^oo)XRPMbXCri+8=W7v8z5S*kAE=-J08<2~xZspVI-O&@PesWG zO8@(S8G%=?Uj2Wplcx4gGLDw&d$Q)K?A5DRI~6j%PFYlxO@REMC#p~}@_(Lez?WKp z>Tmq)FCK=$?DHsJOx(!*IplsttLP|H0Hc3pU7vF}Cm*;aqFDE`>-|M(Q?V>S3x4|R zZ79;UZ$@Z=zF-u?w6vaZxd_+#vfwg`WC4W=piljJG5c%AuQGV3Z7qrw6vG8+BBTKP z9_puy7ef6h(N_s6022WEv)e_nfMR~U+xV$~lBREEhSi9i6grSA%82JC{(OD0z#O69 zRR4?8P5d7?6a%Jtt4dE{c<|uCg9i^DJb3Wn!Gi}69z1yP;K73j4|(AK0Z$oMMi6D~ Qy#N3J07*qoM6N<$g2U8$mH+?% literal 3942 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 Af&c&j diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_check_on_holo_light.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_check_on_holo_light.png index 0c5038fc09826dd790edf7f01b5eb82027a19925..c40b019646e167657d53e281b70f1faa065e2a27 100644 GIT binary patch delta 3594 zcmV+l4)yVt9E%)~B!ALLL_t(|ob6nDa8%VD{`T(XLBI$W5yV$TX$hNUi4in}P!+30 zC{Kg6!}ur)7CTi-t4`}*{-K@m!A!@&GQ&990tQ61)!O!7Yk~`nYu+RwVZav&SvI?y z-TOSJf85+~_wKommFy-H?w2`pAA9efbH4AK-|u&R_htbXE`MCOaN)v*3l}b2xNwnI zc*eT{6A`PAtmB+q_tE+f$i>!m$qV3=Y^TUpluJ?o8`85C#FTI+Vq8)JSP;)TZzlwc z+>CQ}B3v>8Fv!pL*a#!B#NsnkA$&HKObQst&vxGli0&Taz9lC83@{YSYrtdVZq zGS9JQ!K9u6Hh<*nw^kw;!NGoH6Ww)|*H79RU_riWr`fDlsF14!Tk*)r0}Hy#^>Awaqxm=rT03xD!`jD40E+WpgyZEvjDx^?Sg zJkQJTJpRt!rF)h&KovnAxmRY?t%2yyGiQM}yRJ?=d=K({Q2XrzP%yG@EWUy>-sye+ z>|OA{%FR2Jdr@Azuw>4B?&i7we(95exofT+03ZRNP^}0ZsaM+)-M)5SE9k249Q`ck zCTRKc<$wRnbsZVq@WKZV0FF~X^1$cucmS^l@OU_Q0C>TH<2VloT()KEdZde0+WDup z`Rl6J?vQFpKu`pn7oxbK^m-%@#lr^=9^8BDo3|eY5QRDeG}B|;XPP3t3CecKJ;C5X z2KgRvmgIBb;05RLa-7Etfb#(AY$zNl)5E_$9)DbO`|2HZH5ZVHjDgeu1X;j|NEZq= z76V6s8*02OXDY6e^(~vhG@ado<6LSGf+D6>I3x~%g5a9<*9154 z8y-9S@?k99v+Q3;7vGX}J@O{N7(N8a#_8%w))Q|mC2h}q8CbV&-Os1pe|a#%M`CV$2-EDc+d zPh|okDWLnLruOdc`tn_iTaih=wslOrhFs48JDY7h&Q=U3_FpT-9Xnh6cdWhRmeQZi z*d!4d=Td{<6?UizKtJ+B?L9q*%6Bb3jtk^lrJ)^*lJ79oNz`K{6ilu$%W{sEj-4(3 zn!8r4xN`mMd*fmpXOsPwSB7rwSA zjP#M84e^%9W!K%?@pA2t4`Z zlRFZLg!s{$AHOkg`}|I*)8FcQGG;>8v+e%s>grW9AG&JEU@C&a)Zl1R%?L^;h^*Rt zjr;|#lxrhjhB^5xA%Bc86~Qc889R6~>aZez*0Jr4!L3`j?)YxmK$&N?FL>9@cRtbj zd^iX-^;ZM#X}E0^u+l)V`VWRj;|Bnz<;};u;RYE?t7&5>2MIh zG+ZEDU((3$dA`$MU0uEEszSXFWWp zD#Azb-SAmchku(k@-xZTA|7q)RE*KD*VkqCa&E2!F#BFsG&D1`t)XJemMz=lT3VKr zQ}`zFH3UTfFY|~BLpU#-M{(WM%9SfuZtQxty$nDJ48#NQ_5Pu2L1ks--PdjVVRcl9 z;#_JFGBLOLAW-A{OtZrxopsKMGyYyg5>M~fCMy7T(&H&#dZ$f(V?O00=- z0fp~zp{}m34D#derVhmSB@bW>$hZ0*fqeUbG<@^o>6>o4>83Sj?)cV!cK9sLC(k1# zr7~_*sDFZCX&4bcf-BZvS$BI))$M(M?7kTzqyN+kJ@fp2f6WcQnpZuT8pLNZ! zkaisfRdY778o$qYV8*>wwCak+7aIQqfGaOAuYaDq{koc{5XC@hz&g~F6c9;4!C}wQ z?vp(qj)a;b(uo#9D5yg8vHzHp59C(>0>&&@x@XzZ#wQxNrDQ2m8^j8akAosA@D^si zvLsU(F(Hm(?-Uenp0Z^5yqey4TWscxN3N{lWgh*>e$&JnB@{BRK1|`>C86$upL?qzeC83iiPad%%AAkq~K*@Ub3n07ylpGHy%nH{M z^R~}#Z$8QWTUuJ`i{JN!g(we2QY=N#(hEc+@E*j`-rioL&38sVM#!fbZ3f1Wd>~&wfLhvp zGZAErh|t#7c3|4aQ<{iKG`pNx#mFK{PD!Bqq)<;!kACFq3AZO-odHGxfPXP2AIOIf zV4t&^2}TDQD|G zx1)eS89h$x%UF>QQ~Ba?iV5ax?4li*=2$$tm(p9|6&&mnzeX#^OrO%u!idN3S*>I(!&fJ?0tgWh5v zI3EW^P=NjN(eCcR`9Ka$5TmiiPTARiy}8gztbEtv<1O7S zd#C=rxXI)3KuU=4*3*WbuX^^C?^@gd)#meXHu}xT&mcM%$^d5766xJ!E7) zxF<*#1-fI=|9Vh+H-FzMyfqWUl>CeAV^$cC2QpS7XwZwnAzchGwnp;ogqRTI19?ow z8SJPTQFh@dYb9%S&MNXTB|n!o--x`XqaBK1CWsl)cB@-6(#M^AU>qLEWFdl+7~V;- zvj6%v0#_zo#yP2Th&wqAC*p2oHLq0H$0su@A z?EHdV7-@Hnv7T`yADFPemXfPxW&db%vMt0MLQmAiijh6(`NV|%$+GeORr7pd!V17b zK7ZHWg$oxhT)1%I!i5VLE?l^9;lhOr7cN}5aN)v*3l}b2xNzaZ#l_(NVB%@zB+ZrJ Q00000NkvXXt^-0~f^W3+2><{9 delta 3605 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 bqW=L_Gr_5DgbrHd00000NkvXXu0mjf7lzxQ diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_default_disabled_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_default_disabled_focused_holo_light.9.png index e90491aee39fed9551a839385df21718e69a3786..2268fd1cd6614d20fee1f9d70fc096b324b2c7f7 100644 GIT binary patch delta 458 zcmZ3$GLL0~O8rw$7srr_IdAWt_hJf^asT+&uhg@Nh^97%8MU zoM@Q9sL1TZ)&dgHs<)WGUTpH4cMWgTcHY}|d+FuOLY}1!zf+~{{EfVe<~~`pX)a@h z_oqouG*4EmK8pOks(9fUy>HVqCmny2B)8<3OvUVv$A7=GIq934VESN-McxUo z;~~5ewJ-Q1U(TqJX5Ko_)4z9nxz6S==^{3$y+#U;zaN@1S&>nEvO1%n9K>xVC(o;! zzZRd<2zQ|GqadXYrF6eK5w)$vonf9-~Qpa20Rn}jvsJ#?^eWIOr(bWH+mA2f~ zxqiN#PmBGJQM|66@juo~d$ZG}FMqE8&cl9eziak^1|zteKrXnV+P;7ByT1Ce%k%#@ c7B4-lE@b5xcIx#-c?KZxboFyt=akR{0Hp292mk;8 literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^0YIF@!3HFcFAm{mU|@Xi>EaktG3V{wcrT_v8TXIx zJzQK`xH}3MZCkSoIrUDd?ht#q@%c0XTNf7#+l&j|6ZRKxooONe!F9*uGarBP&&{5m z_^N)#KI@lpFLwM|GXKw4zn-~_ip)-IEj%2O0!9ic4ksEWfCQfMKY#r+ZPH!Y4Y6yU z-7ec*Vx`-+P^6&#@N>^J&vlbyLbe$*7MI8)yK7L>%RKu=LN^74e{4bpG`fsU*YZXBvXCc|6k`lJn&rOIp25@A&t;ucLK6UdY~)`6 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_default_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_default_focused_holo_light.9.png index a0ba2a3a296eb858083fc44edc6802d836714014..9cfe77d71ea1ac7b9b2e39e03abf4d9e66b8c67e 100644 GIT binary patch delta 742 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 literal 890 zcmeAS@N?(olHy`uVBq!ia0vp^0YIF@!3HFcFAm{mU|@Fiba4!+nDh3oeg17XnPVU2 z``wMiI%atAS~Snq^nQ3~y~2AX?*~_lFNg=1eB?IRv_yYd!vxjIx*{7A1eYARwa5CC zUh|_x&b%StEy`}#$vbqnUH;fT+2yab>Ze++?=kajUg^BJ&86gM`&DIGAEP4=N0Ng8 zbCZO?kp=}e7DI&&kWg1$VO?F_zVeciFY7eAdzBs!cklH|w09TYR_1?*G#-U%vF` z9=|BKeQo!mip$&H&cAkRTjs2D62=wpYdOB}<^EdhImu;8&?*hC*wE0K&v%~t{HM3$ zkDAh9v*e>JXKrs>yGbY7`Z-(j8H1?>KM#V5wdDK3ax z8}{_vxpQalrYzHHQMh*NpoH<2(!ViERYz>NwX@f5yS7U6`0mGh#h=e9I;YwBLan99+DEPyrG z;YQDBL5dg=QG=Eb*PrfZuep8Bdeb-W zd;fJxcp``6uYK1~KP?KoUMgqoc80Cz-=jy1qSs$R4UDG;I~`+U-;kZ>&yw5Y1PYRTfOI`n&0u}wkPFHj+gvk Ya?><>t|8162Fz0op00i_>zopr03SMuu>b%7 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_radio_off_disabled_focused_holo_light.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_radio_off_disabled_focused_holo_light.png index 78ab31858e114fc681ee12ca2bbb8946b21146c8..1575dcdafc1f2d13c93cbfd02b36c43e29b145ac 100644 GIT binary patch delta 2457 zcmV;K31;@s6VMZoB!8DlL_t(|ob8?6OB~4-z<*anB#4NJgdjnJEFmmGB!m#QLs*vO zKFmYU%l?u3aA&wQ_u+C`mQ)BKh{&>pu!x8R5fKp)kwJ$0a88Zg$8P7Nd%iaH1JR!8 znXamH>eQ)IRYwQ}0)apv5C{YUfj}S-2m}IwZ-IY|y8zv&HGkqo;32T6KTG=7GBBfm z-vHWtN@RC`0fMX!??zZkqe;Kh-VRvf6nb7YPkWv zB8_vH)SK4>K5HIW*Ppd6&)Y?MM0=2D4a!Ibpj!VUqMdo10z1Ihq~5%#_}R0_;J$_Q zl01%q-$vORMkat-Bi;ahAb)_p0Jf8Qb8kdtd5Q=k&ws;eAwn35$21ZF)Ee<~;8o6B z*NDb{zOU;?QS<=mHA}z)M2HJy=K)tp<6Qw~z?pOI>Yg&q0?!aZSfywqIP=C<)_i9%ZMXSJf+|GFYXHJkY;tFZlOXpl$KQn{$h3RH5O{p>cP`5ChlMbR>1qGl1h zzJFabP*zP8MN5d_A0W!{$vJnPzNglRA0y@{JtiCjNtKheqM6~KC=Seo>mLdcc;sKFW#fJVU&lE2P2`gSw*Ih^8+go>B*`%dz>Gt$*`C zloo(4sMxrBX7Ez4V_h$Is`BrvM9Z|JmrrzJn8wbA*K3WqD5}~sRrG+T=K3gSmC1V! z`*x6&h`RZ_r5750QLLV&C40{5=D{U(a-|^D)YP%@dXKkEJsmf z?YtegHp)J%Y!6r`JLA1f>dmj_9x`uFD+?_Q6D{MuUS=9NsW%VEdPMU&VH=pT0~u#c2^MP27Klg|Voe;qMwQ@OQ$`Q-C+6*26nRdWUDB)`$n* zJXWR$teWeLhoElU9B?zqo=*|#5#0a}G>QsxhYU;E200HB7pQm^Ooplq2p6eE57Vj*=(K0B7k9h z&s3nhu`8j>7iGGk2IkV-Kxa$HwBpNdHNKlk>X|YE=++I}1+PyNMFOyO8raNM)&nT^ ziprkx8YjN&MIN4Kpz{k*P5^d-WgGgU;Pq*uf5??Cs%zg=DFC}X=LpJjkzl;EEq3o^*ADS3AP&EPg7?2IK*x1lmdVmc`Wdxu*-CDqG&I0$uqZ`O(fh*@+ z$HuF-XG7Ej2OI|$fNr$SY*^Awt!auDHKu{0wTu25wnhz`P4aQwcGB5I4JX=vI00D zJ0DokQzmKrR+Not=mlCvujQEqc-;Y!p6^_jJ+x6u02-7!FfV7eZ#(CXkzO!I1^Z}5 zz*D5GXU;k6{cM`+(#LA62r7Ls*K0Y0fAOFCdqcOXOeAIt<)7*IbPJ|+wQb$|rnCT( zdh?jOoD-E_oSev=Y?MG-!eyk_s(|kr|$Mc8~ zCMJZP+B!dv9%oIzuXVB7U&#*dN*Y18BU+dAWjaKi+5&!qgeR;$9VeT}jJ<{If8Opa zFx49I9CuIoA6Av-rb;b*Pj+Q&0eF+XL0!6Sz3)*JMU|en>X#^rW}+zCM11}>a#+ts zKHrj!ezq_tf67qxDan`I)$Dgky_p%T^pM^QL;;S0-BB-Hs?Fa*G`|ge)Um2Vtr35Z zW!WlXo)!>uV!fsdWc;{9wEeV8$})cva+7=k56$eP`BszmZ6FHqZ6xjU zsEhg&#c3l?5kU;4^6H&!e^Q(_^91Qc!wR*>;w1({`cTZKCWJ|^|%SWfaxO7iX( z^p@wjN)8c?|2C6%TXg#GXT-xyU%!udU3R%~EKH05JgFSd>qxJ#QyXFX X7=wbPL{Y7q00000NkvXXu0mjfOY6p& delta 2456 zcmV;J31{}u6VDTnB!8AkL_t(|ob8=oOB~4-z<*anB#4NJgdjnJEE1L=(u5GULs*vO zKHP_W>W?rVYCgg|+=t8MK3p!#k_sV&Mr2t+SVTmEh=_=Y$RNXgIH$Dx*zNr3o`0MA zfoRY4Ojp%8b?Vfqsv`sffj}S-2m}IwKp+qZ1OkD;x4_@VU4MXXv>NFm@EBOspCx^3 z8JN+(Z-8_C`y9B?-^WQax*T0;`)A?=&}yVJz*FEE((nrvzw#0|0``+;bXf7bYG+~u z&}yVBz$UN(%nj)=*T5d|C22-yLwZJEj9mb&M*0}o2G&OW=mTIkX+|d_er}Gj382+T zmw?yw*6>Hb34dbSPXUr{(=R z-$r^#5y!x!bm)(kqDsGNM8W2 z3f{U#H2(8LT|bWFM@X+(0v;hkTp&LWxI!B53OEDKoO4$XlxY@tjtIgkMF$xdK6kBL zMTRbbRwI24d|&X^0q|SWjM_z?i{p3^vD;68`2in)jf^En&bf<{^34Np5%Xl(Nt#hQ z;In&TsDA<|Y5WJZD~{t;;5+VSy#6yM$QW^jH0-5wuA`rsL3+fz{$A0a?4WxN{OO!4 zbUU?|zU2NuJyanKO#rP%x`k9IOB?ua(u|Jm{i^X>NVoyStel`OsBi3EiQ{;dJ6CiS znANw=f!~XIM5~dm0Y7K%^}HXJIU0%pT8;D>@PCte`5O37)_;dv?R}28iXhs)59~ST zYVm|r7~knLyoT=sU#wtTjdT_GJ9)F$K@_LKxzkT6~aHr_k?TUpLM&awF*Ezi(kn5*&Rglb7m)w<7LD| z&3__xJuMq3>n4ulB}DL#5asyfoIB6n(`uwo5p$Fs6OMs@*Ev}$n;8yD(In?XLF2C? zZs{yy=iiO0@d324-|4gGfLE#zx2U=KWIp;BnZegaZ9PEa_6d2R?j_CW*X(^-(N}uk zp>yu{y2{WmI{v&s+}#fFp`a)H%-#3|(tl%GNi!;)WAsCvJ>aeRzDwYJ_6D{2-qjmx z;{!P7I?lOW#M7DqUh1ST%WsJN_sk(P`dX+(0If#)1nHhxK4m9as%_hd**P9};~RF7 zImR5Ytz`v3>+r$czpm>Sm8q)-Y@6$&g1F9e#M`+-Dm*c$E1DvjzJz#6w`g6C&40&i zod=?_0CYjc#@%y+mwFxRdbv}Ve_tnBrX9U}rW3;~b~e1;YNTaR)t;%N2W*<_qk>f? z?>X$-L2i<8&YdAKsu@fOMLjv&3vAu{rjh{E?_W1B=gdnS$9_jc8~C%z^G3uMBn+|~ z$Fa5ZcHG*i`mm}!V4eJo_cCclUo_1<-k#PLS{No;#(llaHE`054#;~%^EzQ0n5qJ> z56=y}YWo)vjheVEArG*RlzBy6=PZ-W1R#GKF>DtMzP|AH!p~EHH>K9YJ4JejXQ9zs$6ZrmJjGs&J$8R`+;0FN|^3V?1Fu-=eui=L?>0P81P?O!f=eVXv$ zbL$P+I@z}9nJNNUGS{c(+81i-v_FFvfNfyAt_Ww2$?MaEFT1tzWpxAX zn<|rU1r~oQ0>~{~7i=H&-#wJ&#S!7lZWrlooyH=7>_dx|=w{*8r=C`P*{!nKI*mmD z!}y-5KzC!;LX|JdbwdrzWx0XdEg{p2FT2(FZYHT`stBN4H|&(WK24Mfz}9JCGh15^ zpxi5}dd6#<__CLIc%FgIFF-W`*a?QlIIsY8qit@(l5T3vQnsiu4V0~AtdMs@FRN_WtvaEwaq)F??H4tk zPSbyUK+Ed2+^%syGuQV0zNjhyyF8a$#MXtF3q)foE!~Znb)?Lv&N-{yb|=I^l?PQ7 zzybOBz=EDK$>O)7Y)nHh&@y^0&n>{~4v6f0=ep{ljY7I8k+PmS=dAa$Wv(k9tF0rb^u=7S6%2pIf9UTG-KsK?m@SllWZ%;*nAX*{b?=+X z0!W(CG50-%+{V?+mOp?fyU0B$sOgFHadY4K8zeko?ddq#LT2o3WcPpe z?E+J)kcE}X>RJ&!uRA?#uk7#*&EcQOZC1daU9or-l|{XIG%~)cnk6QJIG-@ z8~J=oKKj|locyUm-KQj9a$mFGCCw-|Sm`0X2vLAzV0Y9@mumC35zX%aA9bv{rPWBk zM{*iv`II!H+76i1ZHITbzh~wLJ;Hx3?sh?t|tz?)IVi`3hBgEamPayZX6{u=j9 z&k6Ups8?bV4r)i-#n;0@?K&t)Rd9tI_sowHOzhv4#fks=aJnsqO;%-nrmUNKd z+Rk4(acdSm4n>fD|*IV>f(-_)Mb)qtRUmV3Np*?whDI$d`z0rSWfaxO7iZA z-ts)x$swZg-)8b|i%$RjjCh#o>-Q0_%Pu#Lg^3Y>CzIoO9qAQzBWzH=Tp}iHABp3S z)W&yX;sjt(&nf#aOcuFIQ=i3a^f`BPful+P7bbx~AP@)y0)apv5C{YUfj}VeZSa2w Wf`X+tGB^_e0000EHK&S-npAT4SzzrQJ9^CjeKEHUWEpy~vB-7Wk8Mz$9?n z*BTRnzg0LrBLG*AhJby*2r$s0Y!-l9z)fFk%ycM^4N;4U(@PXqXWT4Or#Tbo#!6Lui;#1Qb%I)1weTrO*_=(+%0 zJ=%=4_=BuWqL%x>9pvRq_*!EjXI@)?Vg0vzjr_)t9mW&H~qbt#PYMW!Z-aB1^-6T114< z6^*GY0&w-{An;hmtp%jT-&n2dJLh%-hY>C5!^n%<3vAIx=8@rQ7Wf}94qW%%Pp(p? z&A@&{5Vlb)A@jnGwdxj1#|7Z((GlQ4#;qpsp070)Gr#BDBfwL@lfcfL*-rs)0~fsa znY~NriDSs{WV!BZjcYmcUKbsI6+oMpziR7p&K&`sLni5%1>h?1cVu#&0d9Hk@9TF4 zkRCCFOtv3KdQ7rqj{`sV-d}E0)`R*TJ5hI32ptoEt4E_qg_0}+@A_J!WoU5D?E}7r z3=1H`$z|Xj;EMM?v!}Gp-?^=t|8ZpQiO2hK;8a$RaP??6@JV2^xpk?3Q^Qe51mNn? zUf>Dy@d9u@slUT=>wN+ET;jQNz^}abg=izrxoyBRn#UHT7oG!t9QUF`*>?gbSeakY z=ilwb#9X)lRMm_~cmGA;4|e(QoZADO1|C5w`4;fH_r4=$0_WT=;445)Ke_>&w3D?8 z!IAC>3&8J-R#6KTfNB3!W7_(T&%TQ8RjKxk#jlYNTs2?aMOrxsrZ54h-QE`NmYuw`qNkBDwhp}Ly`L|CsvPS@=a(0O^T1Z% zN6xwZsb^}9aYS8CGV1El)}qQ$WDhuIes2zG-OK2he-?fD-uv%)@4ISyN#eb~@4bH+ zxS(bFp>xg}@ZLkl|Cj+pt15&-1mNn?LrC{bay7ZgQf=o9q7GgJzF$P%1@Q_p-0T2e zbH&vLdNRYV^8&KjG6}p~X3MvzDtZ!`WDfveP2HEeOqs9Q zI_Dx-0J@=KyKQRnQmx}Nh(>g>DE+=jy!W%nLU0NAqMAaI*wyf`t4Hmus_UkR9H{vCTDwrt^0-v5`gM|{ln(tvD7op9YYpc)4BW938&bdd;y>XKs3C%3D2Mm*5@y_{L%#3~o13czltH%h>dgZ3g5~Ht~e}u=(89 zwUi#P#iXs46PqV`&LepP#QPZ5)M5pY+nG2-0I7}Z4EMpgFq<) zNM@R4+1v`yPx^lbaoJNFFd1%>r3j!Cztb0}H+CU}{7|YJs$nk4JS_X?^eb`MZ7;TU z-H^|JQj!n>tkn(ULI>N-OC%oq*P3*5dvX`n18CKXVhtk5R#Gytt;?=_ZLiLCegVP+ zaL=TzrtlxV_Ok$n_4;q~xvlFgIVn;AcBqNXwjT}1qijB=S8D;ab+zwe-Gm6hO5J)z z#Cxbm0`e#g=iDY>RFif;*m^{i(gUnPDkT7a^*){f2G#Sq-xx(q43pmb`By(=F^CE_jKx>xL{gU+tz)< z1Pj2|8dI#89b(dl9mM7Dx0>H+=Unc8P3%sgL(dtcjBjQf7_kQqn?*!iDax!mX3~4~ zWPFkzAd~h^;EcMf_XO&WehO*f{{r4f-Iu!9)^F>ai$VmT?ub?;J)AUA>oL=lh-L8r z;*;Mid6aL=iIk- z$zKZ2xy{bG?;;Du1>~@v9Zrvtwtg;RPX2^YSmkv*Z1En}z!)pfiDq#Usc;Q=tqk>4 z7h7kM74HJ@e8x%117vuA7kN~*=+<|g)=l`MdW2~i@BJm!i$fwT!#FpnJfPfcDKp$g`a z*7?h#JSud!`4Y0iT`N?IZXpHl>HSsCYmQ$ z#{e?K9M@~?y*3WKnsqQ-=c}W%4$b`)tRrTXSV3dH*0870C5JSdvUm$zagG> zGd9|Z&LK8jO|liQ6|SaTS^G0wP0T74n?OQ?buwVnUEq(b94yH^e-Rtal{G?^Z9*ExD6JkH(7|CR$%7iSZv<%& z4@S_w7*$c9puMx!G$M$9j#OT?vr*cI&Abcz`2!iYGG?8DTjvp5dsD5gA^AOotY$~Z z9%?|evoU1M|KJ90O`?bVj<9xk;YGyIH^WNk;-!{F-AeF`Aw=aILM)ipkJB;%T=BI= zZr`2|dL?-GqpUB^bCFCSE&jm_-fhw4|9)Ce-xtXOvL|uV1`jM^i=GicOd`hfFw!eR zEv0kF5Oy1}8nxyoU=OetdGXr z0B%?7mGQve%AKweK%>?i0QLbxKwq1xnFnqGH>>r^bernf5QPh%QETo34gtG6T=f_* zQmt3+cDUXIg$bZhYitqwhZ%RWR9 zX%^N3B7}}uOdSzGqt-kKJeqQA9_jHnRvY@xx!u5F#7g=o^5XUaTl6b)h`O2q{s)W# z*S+@>t31K6RwD!a289>pzanJ(0d21x}}ph(@h{xf}R2u-V+Y z+%9$076CMB&Aq_m=Hq$bLfn3brQZ7j@cG#H&I7;n-sfVCIOnzj&uAT6kWqLZ_;ECf zV$Z%4IKlG#f`0$qc1+B<3qVcHlO%`#0`Nz>{CCdn0nPxAAdP$rc-?#77B_)&ZWr)X z;3@s+25`zw)+z)?awN=u1Ha4LM9ozIYFV5lX=g7YJwMS%=iD%G4)Jh~BQN5EJfEi( z&bfoYX=J554Sd~upHMN4T5}Jgj^cB|B;fO0thHJhW+iQrb0y{F9|eAby!^|+7d!Rx z0lfF4z!#7?W(V+7=iH(AcU0Y6Gk>~^q;U{TZURuhy?wY_cJk7HhMqxm?C*gWz4vo@ zJ;!>{`Q=660MoN1h|#nEAa~q<1f&I{zH{^1b)p z^WJyV_Y%i@f8TrmGH_9!>4(la>%e;t(f<*Bh*gyfxd@<9Yd(Yw&p6lOi!8Nv&LZaE zCE)vc)SVNrAnIm+2k@$MZfWw>HrTbppzdD;lh+71WXcmMew`PP&6Ww^#Ip;@H*j zV58P-5nL-Gujk1o$nY=f4?$zo(X*9R;@S8zx8qYWEMC zk4NGK=iD)5p*026L+a}guOn`dL(aL1xi@OcL!p(0j(|auE8f{^y>iEV=UKhJS%kT{ zQB)P3*W$DBd)0bnjHE@hMHg(D2^D~?JTdXAUA-SMN&gU7S10*3vd3^(P3Jh)xF}Qr zc0+y4luzh?^{rm${Sj&;yrV^DZr?WLVg#TTK-^=vkTUr`q1TI9>nV^6dOdDFpF%eA zBepea&CJ1LAtS)5r907K9 z`!T(a1=LYA(S-Z3`P{a(kP)!Ol&zH$xhJ|VB6$Nu`xw^MVg-;nm^efLiH+-&@WIGu z-W5^E8JW?mwQ_8LKp_H%SDNP8+zQZ3_J0b|vnMuSQo<$+5kNbBrzg;8>|6->p~Ns$ z$6TC$IarF%=~bdraY6*J)-a47I@o7kAd&80Ytqde$(`E>V5Lgxp$Oy0wse}MD`gj`X*U0By zV;FHUOnC2?<^Z+!?8-RvNz2Rv&_LTnz>)^F#`&{ePtbcjsn@s7=L00o(AkiH-OvSv zwGIYN+3WQ)y|f9=6QpkFIy)z$rXd_4f>XaHY zAKM7&OTY(+?tCVsz7Fv<#LOJ=-dpQu*p!2h)#l+;x@pS0t%Om4TUT)P9Q{JN|zP82oe%t0uDdOsI1Cx1f7t?{Z4S40nM zVvHr!vN(k__$lDEBFs}=Y@I_^yz{{GDJLZlkP`i!=TX(Xd*5|dZo(hcBTP$p?=J(- zBkJfe;C#w~h_<2D&aV))GXp$-=e@rk|BkL_tm?VT%1#zUHyqS{4O!kVBBv(bC=Y4} z(jryC9CF-0F?pq=Dwsoh=P&Y#s8DtDWn_iBR;q$s$N}x%OjQukB3Z{GaH(3atT>dd zF6&p2(=;He>~F|1(JaY2`VbX!T(42|+9>d9+QD$0ua2@(HTPDsj)+x%as`c4>lJ$n z9auWj^cC}WQM#JiVDUEnVt%Cwac>rC7_ zhxppZ)Y}?T-$Tf1c8GLU17e+xAUglUo47TO9`ZZF+UbQC5J%rM%c+YO?V>K0JYxVc zIR_9Arj6sYj00Dz^-AX0o)Eevd3S~N<$2DNaiqsTn8~{>y8Pd8&&t#Hc`}deN!+x_ z1B;?-1P~F+@jQr(icnAKETY10BYym@Ns|LzC;*FEPVxVRNk7YJ>f=N``X2Jq?;)96 zx-Ksp+BO%KaV1}t)7(eoWS1}7!A=#>R z^R=1MicCa{yYew#KU$}o)pEDxFq<454(I-bet4ee_5AcazdWyp{WU4T#0YBy0DwtQ zAUbz&8kgJe+<{cs`m`*q0@py~wGKL|Ve+o}E z5^d!mi#vViMTEY%A7ENRi z082%Ia9vKlnF^PL*@Hu~6ysN(>dnIMo|2t;a`bPOV46(MMrOLszM9Ll)p5azvkqPv zzAl^1_but}0adKM!j2$vW=)omCKe|5yfcmvsguPZp=o{4?XjUXE{%m`I!aP!Kl~V? zI!o?k{^wD~07bbQ#jWgTFv^XUt{vO1e)tSc>gpmDxuzzud@1Ig&H=O_wb69POsSmnV6a86MA7URS6neB0JjLDjx-E&=;^`010k`OBz%1#$d zKgD|%77Opfy7m1b59@W?4=}-_?4MT{dR76eP0&tJ?Da_8CrWDz=5S2DTydmluzHes zve2qoaH`ER&q$fNct~ldBiB82Z$aLU=V+?a%tsH$u;kD|-ONMf@t%`jS$6-AXayD& zmWUf(d7l_ZK|olhgC z(&eTq>(k7HqK%Eh{wJl)Q9^@YT3iAS)^4C&J~9}r`n8vq+767{hqZ*BU+q;p;9vs$ z*6J&fF9<2}ohs{4=2?YH3xMoc+uMJ<4yc@v25g2d2;^7ECuH7rz&*tf;!jio_!T^1 z<-;Geb4j}hz_90>-b=bVt;G>7o#?C)5|_6Cf4$V?3hS{I`N_xtcea_5FaP#dqnGlJ z*-AF&imd-lumJExrEO{IANF4nIuFNZGsA>fcMd0R|74h0daK$D>@&Ad!zQ1}G`H2C z(jST+tB|7qYN{ktv}^Z;1%6)JdSJT7t_L~o17jEq(~#Q8;(D9pF5mf%>(oQ9!`8b~ z7~lB)PLh%;ej^UM%wjX{MI9`^=ynz~^56p9H(GaE zMBXV;{qAaXA@10cWz3oW%8DQxYWN~fXV->FXMy)WA7Gf_sd?bD{B+DJGh+H_*Nd3I zoCV9s)_B)vhIE?%`ZVu>hEgg?_ zxbD;YAHS2mzd*NLin|N4bsb>dAfMewM@1rMUxX5eVoy+8>PZQ_8=sTcO_TElS6NWp zW8vMway4U2uh(+3`Y!KoyJcXHTQ-wxtEUroijTYx zywB!-yi~l=Xgu!p+RcmhoL_+A=Q^CH_4>$+DmAq3UMJ0EgSktS+UqR2tav)2u0cba zy){h!3-cGQ~H=9D;NYltl3ThaL`Iy%*I{KGdlkChw_sSsuHSSQDh+;8~1 zK(q6Er;Jrk^PXG$9_9W%Nklm*@fOGt?i6`6|+ zR76D&VQEGPQ7^Gbg#@i4(mx2XLg)`tFJaP@iZ7vMB9hw{OH5`Wwb{RYSZooCrH6BV zC5v5mz4y$$SI+0<@cZrT{m%WJJM%j;b7sJC9LI4S$8j9Taeo}gaU92S9LI4S$8j9z zLgb=mS71EE7-s>CfO){xz%<}mV2TzQ0geH~z)wIw@MTJAuy|!BNXt4P#u$L*z%pR^ zd49|ZU?;FErF5iGb!#Lo=YSaFVqi6};Eda+fP=snz>mNXa3rPlxBky$q(xi_%mQvf zTFm4#KBFIaGk>MD-}*aDgqCqYjBy_D3~;^P8V2?QyMY5KrPCAqys3y2mI6zVZVSW_ zy{*zBn(hGo^*#kWptnu|+kkgcN+%nnF%4L$8dHE#)p)IHMa`nA4u~<%1~vi#c_=%8 z%_*fJBfS~Gqrg3SYXInJ=F7Ti4u~->1YQO@faA!6$bW^j7XZD$Oyqs?WJ+nEg!Wi2 zZiZ-#aS8J9F9kjW)})k9l+w>R{}Mv@2)GVuecd61uX4^mm#RZWaR_lI%jUeZII)tzXxC(jk-x)$UkaPa6WIc*@LE7iPi$o;bQ%WzC)c-$XjJ-fN(jBcR z`A(QrN`FYBolVHY-wUiSr9BSTA>)iIfDJLmOG*hBa{v-*b^?RIb19|Kg4#9FP_zdb zInM_kE2Uk;0UCAOhlH9vjf(FZNlIxL83>L759w5hIi*^_TGiUttZ;8Uq?G!A50EL0 zr%Py>J0Qk*D-!Dc4!mKl*8nyn(;!_j#+$6gN`JI~RchZ(DUB4+s|)Rlw&~@nT4fu7 zsRLq+*CR3ZN#H|Etp@Wxvc|ATLuWIrTR^wk9qsVzuh1Z2w_Zj|Eo%oXQ@hJp$AVAP zF0~Xfb3lx-6Imb`Zso|Q27SoOc(%@>nqb)iy3`&p)G$K_iv4=oRjX`0SUR9n?bn7H z)_)vU+gYlc;| zs3Hi{$t+`LsWr>kuynxpYTMZX*Qou@N`Ju80afnh4Tc)l+^F_w%~Ew>>3~CO7aMAr z5o4SLEY!Y$GV)fW1IQmM2#h(5sg<$mqQ$!`^&M@H;Jz}k{KCyQ^=(}dSo`EQHT`eyAF z&|m&KWYBdASY0}YsrVkTobzA^Ap^G|?}T|Fgnc>Zze?6a2V0wf+mVO=L`tc@_J1{= zrtFf;IUf%p^dVneejl|;XzKzApo!6!3^|0 zA#R#>)v-N_{(l5C?}P7;KuB>L_g)QT6&Nzs5jetehv}YY!Vtrt2{5sGjf*+zc7wsj z!Ok>&EB788sHge~b8KuFu*wJYslGjj=5(o($9*+bAlo#jUH~)ID$N6O&O;Y~1(;@n z>3zB6>3o06pXztS88cu&6|mtq3J3B#!fyq?A&ol@QqRGUv_K%{^R;dRs!n9^GYHTg zeoJrn3e{jYwOp_2FfHC6zGV+wC0IFkmBJ|pPziTG0kW8KHGcuGb<-+%n4^~XNPfU- zPIjsE#?46UC>xXeRZdnkx>aZ92%<+6b(j=jGOsI1o~wSVOM94yxa$Mb!#>zwC8DpuEKf>kPFw`R0nq61s3Y>pT zAcwy^5P+m(fY|CmD4G?k&&N)Wa^wf-4bo!lyN)9W5`l!8#+Cp*G7VR$$(F~?#;;{z+Z`PpqUUIaE>0TGF`!-cHJYs4bwBLMS^d@hCP8I=8)l%0`f;Fe= z5BRlEMlv^6e*%NSct^aDzX`tlGA{=`+J(;-X=Mkx%>kv6z2>gLk_Thp)aiHHt-G=t`L-WK@ZoK>ZW;q2^?>( z7@J5}bQ?1iRbXQGkQdtib}A8j?)Ev-WseE@PdDXu$n*;C9y=@>V~~VEGccU7mXMN? zQgk!T$A#wi{BuEmowMJ0$4NS8z7W=li3xsSh)9%%-XdexOZE%|LtY&%;mmnDEc#(5 zsR>M0rM7IP_DvW@QCmBx@12X6hCN>CJUMM>GYF`{qafQzo&AfHignyj%#}QdjLKNc z%F22>S!&lurT*h$eU^&?C}rD-9^PFqYr%*bdD=NR1i2~j!T=28NcnO80xR6hak@#bi09= zXkWzMA>X~bdNU9_TpFBjX7=D#cOR2C_3&EwmZv#p&=PfuswnQj4FoSmIJc8QP5 z>TpRkg2GE*aIgB7UmhJDIYFV&ks5NSj3ZnR?+p0M)wkj!Qj^AULo{4;f`WoINr{Qo zxJ{ZXIx6Mg9|r~oD$6S>jvgIvwV1F7YTIfCZQ44a(bjJr3M;j$tYsOv;;$#@3%`_% zgCpok4S@Jm2jvy{5B$g(cb`@Oghe8Irl!&k4>m|m0MR^CeSFQY&PE}f@vfCsidjKQ z-!fj3fgu_Kw0c&xKdfl;uIX3{XkYfbCa4{Zb}%K{85a?t&SdnGl~R_2 zHnOi@AI?52BT)<~_Uo+_EJ4A+(*rdhKVV0Ghvi)YSec`^@JX@!N{%0S_Zh-`Y-{j( zAuZgZq@@+qS5P>6czC!Pi^ZOr6;$kQ&v#^&%aRs$RR6;N;({+8=eT8QNs*FG#R=u* zkbAGap0fyU2GrSRa&T}Q8yFaTmn}j~^?f$04~uR}W3d8V83Ek70r7+HK~Lz0J&`;9dqc}1eWwmLeVTMn~HZXpj7iNuFB zB)f81pYO{SP=BLzQ(EP>CClSh4qgr5d1y~pJa_s9cMqxXk$14Up@%({)`)JcfnBG* zLIa>=TC42T>*Vl)p82KUqhyc@w6U}UQ-?)x{iAltr&!8QZ23L|H?NpIvF0=pNVn46fy_c#%hWa1## zQPs=4A9Ji_Bbp{DJ2jP+=!Koym0!z!rWGO?QPq5V+3 zMMF((&8%S5?0Lt$EGL5`S3J`bElulMPlENFuj;$C0HPX2f%abf10!DiAQR62mGrh4!n8rz4v9JWO%Qq0r}kL+EwnZ9YIb-N>0yPMU){UKoyDH<;>$c6CyY|$ zf{b|VI$PKPhVd(m7evLlN-!2#d@YrXoAIn7rqlf7jO!An6x^q~AMH?_&!kg}yH#&! zob!_lwAjL`Q6g1d5M%j&yQ<^6oN&d(5eT|=Z+cx;YNVwl1+jvd!ct^R;LH}SEAE+a zSSETf5&l2}|A@yGKR(5T)RG%X7s^Z<6=r#5toNcdKVlcu7YZ8sv&+PRyK|WfKDuP= zb&=_t?$hn^qPH`Q`*ipW-n+lD)oW)q-}OK2yTA~gp+T_YWQhK|YOpQ!^t#K}^ILn| zwq@)pT=%I(C++gh(LEJ%@SSSXh94y@JXmxu_dcvBpYb*i3J9=xgd4V(YIiP7KfqA8 zN?2>=P0~vTm)%cM5BzD3`@U1-KBn z02@~SHlmq;l|$!Bddz$mHy1F< z(ox)e!AY18;7E+TFwLiao0JXQG2<05Tvu27*}>z5PAmt@wD;j{;gmEJaa>Y0M=lpb z^iPV3fEYVgt%lSTKv99Y4QAaO%D^j3cFY4GEET5Am3wCCAaTirBR$DY2`ZWT;8%_^`OwR`AkLq=BYf!G zBYT*0<;N^~F=6MTig&N>{?U-Tl63It{^Tq<^tivGzWzV6Q&YZuTf&4`^%|I)EYjmgN-{{w7^@g5U|k+11sRNB=meM74&kDhH4<7-PVbxc3hI zG{{>KQNATIGBQ1b**ZEqGeP9#%Utos(GOhM^xWJEuBxkN0LitO{o=)f>`+fT8ylzP zwLrk#%d4O2RzrRLh+yz`8<9drs=tm>9FPN61~L~B-yA?_!S_nd%*itkC4h+}@(?d1 z1%RVh?1!W)?jRzPD0EZmfFyoV>4mI|B9DB7?8IcfE{Zb=MchSD*3YF>?&8H2X93$eK)|;Lk#vs!MtBZbp+tT|(CGx~~ z7}Yejol8iD zZz!43S&t z`y=zuPbJAAWW!!OudhgAh6i=lMXIar1L#dELLA1tz&O12^V8&~CwBWgSgC836 zFD6;l|86ZW(f}W3GtjFCDSRAER=({`g&*uZY-Y&0#o&zs^EJFo>b3HHUTui{Q0x?S z+ws@O4ri|CaaLBy-r$+R>b4Gm@$p8l`mJ7g5_Zye(g8lr6fyIb z5Nf9XqwMiCm7~YW^wr?t*W`mFxWoX3Lw->p=u)0RIp-<~C>pZsgC62NVkWm1Q<;?E z;Ol@J=}(3hFVBn;O_Fd>$_b@E)}2te;AKq)ra?>sH$a25O$4?6E?}Fqc9G#cUVgNr zx^xvpMb5(oyaTOGE`MSLG%qlOQ<0j&)=X*`BpmGp(3#ss#el*wr^jT#DTWZTVgky1 zM{OGGoO4Zim1VX8c;!;k5oy9o1n?R(bV{PYh45Y?5egEs8G;^mOI0regKA1929s$N zWmHv3)wbT3rRT9@kKqN_a<0{P2ETqeDn9?wo1W&z)68w@q}d(7@9t8ByDh%3nfo}}I zGQBjzvRs_G}({g7@C;2l+e*Ew%WE4FlsE=AoR2UgAW1l(eM+0B!axN^>8Ga=N&0 zAy~bPT3c<%19)=CPu&z1r%rsY2!I||=ykHln;v>cMU4J$%H0RscI-`8s6|iQ$A&QF zPuxJx)&Z~`*1GT(p{mbDsobLbX@R)0iw?d<&a(wv(ltyyRe|I!kh->#E35T4swkB% z1AnBmE=QWjC?&cn04z-NHYaOjI}*<}3ueLM`;Z7-w?L}kvkNKUdO+zX)l=HTBp7M! z>>9W#8-$B%pTose7=Zi7>$r3w4KR@c>b8;xUNt&F>tkfP9bTqvqcdm9JOyZlz^s;q z(vSXpkZ?ClEw6*GIDmd*Szaw%JPC@5Pk%(ZQiBP>KLLJGGH|C4N;Db?(cCx)g|0qH>4mB#S`Q}Y&crM4mK$g-@DmXQDZ@S*I#KOX&^`J+vq&6Xn z9IAY}xA?wyIsW|o97#$_Iy`QM7B;6<#aRHZqFaN6NcD=>QEt5W_XfE$e$+GpqFv`b4*pWbnklV^Y`PT%e=7v_$! zaCc`;)ubpezDHtU@K5WuWE2z>jJ2BZINe>)O70z#m6feS+uKL=$8&@>&|%+Oi(bnR zJigvB^7F<02GBg~D67C90t)xH$e$!|_iQ!G_fuY8y@A2j+UDkFm!-rHONodh^pX40 zfj0!(F3e;g#1c2KT1FteBN{aMEVhUOXTfGXefo4}bs*~`umTWvcyIVgOaZf6chPX2 z_dDB7gP~S7dTgpY4W-c0ptq6BvCup+nBIWq4^?Q22 zJ0J&Z_oCKmA$WDR!I!JJxY)s?e&)a4{Uj4DDY4}D-IlK^CX7u3&X%ivPqy7();a|} z4@yd6g!g*`^bQ`HSaRg_qJn63ln>cp&&_@&XK=19{6)aNaG^ zD*yH2|7;YvPbw=by@XgaDstdD5UUr8jU18fJU@MfSu|WVG_d^KF}@-uU)%1~GeX(6 z6fkE?*wywVU2QaX6H~jWeyyNi$w7VG!?p~qybSuV*5`1Djt~pyFCVW`r!iz%(}I)C z$a-BXNp@9F1i zB=VuivT)UGpm5Cg8Kgb)F}^_j-OzWX&Xd>LWH^V>hYo3hdYUF>TgbAX9}5a#RKcY$ zKwvTz9RmYmwrEDso#C=gPU=-AmNKbc@y}K)f_~DkaolG|NqMO03}D@?AM&qMc9G)a z!MvrP=g|tfU0iOLeywdw`q=iCJ9Tcw5)sMZz4BKS+cO*QZh0`u|CwwiWD_H1G;7{MZmSpyzfu1onOO;z{3=H0X>het>4BBtNE5;|yI$;|wZ5)}%xFu96;E!0`!@jziZTw z|7+`vCp%q-pg_;N=QgZi;0QxQ?<10@9)1<;6}$j#v4M^yO$2m z;;oj@2WL?^@Kk+)D#n;jsF0}W01R(A%6oS_A}tnVp)_JR7WtTt`^`Aiu-`=2-6a$HM@(%MMso#GVh zi?;u5_mCHDfssFS)-%Hv{Frd8`}|pc!)_BOW*^!4>G;#cR zTMNaNu>i3c>C=e91UFYT>dIWDAQb9irrtAbeVP_%$$wm@dJT%c^e1-FN82;?t*}0u zDShu1&+I>eaWb`Q`KG^*?mI|#{rE96neRY3q2FA-F9kgPHs$RoZ7ZoSQvkbGK4X^m zy537)MbrU9?ZVyhfY~k3elS2WM&MPxlTjFr1mF9u_t_#Suy%0}b90BzlsOkD9BWPu z8Cj76Mwsb0WysKs_`M&;eq2AAOS_+|j9lVk=0fRTX>^W#1eUxgY*%(BoTat~CCewB zr4mv8iZO-eKR;SvVZITb=S`pBf%qr%_T`w`8@Ws@Sv#a@Yy!2sfnsowORTLrtJ>zl zl*)7hXIsWDd6^x|QBeJgtHi}J706-3h_URxtK$+j9Yw2M_^3dBwaZk-1ij5iBbF_A znP9;`)G zD4ow63a{}s-qcqzm7!#eW7D?j!AeCl-ovl6w+4KB<-aVvm?)230T zcFq|<&8`ik173q&k1otoDud}}{cg42F$S4`C3A7MO5002O!_*PC6EzSPhxY%f1Pxlf507&f=<)pQ} zvk!9uT#ctc47@?fR!+a`Or`iU_~Saw%HZLp@$4P0`s1pe9V$>~p3nI)P(4lU76*e& zM&OmIY}Sw!KbN9dNr{Rw)ms6xx1IPBPfCD~NbsJzrIkYJvtJF?M(;y9Ol$SpE6b)A z9^S7^b#tKg? z#H#0B=dMGPXgwj4(3o-!C+J1*;%kC@&(LtL528c6A<&RqyC;U+`A0=aRGN~Wia18H z`gjcGY0hTymuLdlC(_x#CXQ_GQzKKe0*&pQ9RvzYT99^Dt;ttSzze+}iI}htH#g&P zl{v(-WxsP0mT9e(ej7=v20T_Nd!<5+zO9b11%$w&#(AyX{v*7soQoD0I%lB&JQy@( z!KaG4X& zh6&k}E`VIfjNRPoa+hYKedUc&H@OW{2%>$br{CxY)0huh!RW#qW;;DE3lt6%*3oH7 z;g*FtN~ys3FVWs2R=&H$GFPHf54lc?<(AiQ2GB{d+LPIv5uf0PxWzsR*U=fFJoW~Y zPK2m8!{y#af3Whxc&w<{L&?w2+jl@X_Smd{B=bpuu=F5eR-xD(C7z-9rP%TsVu3D< zrC8vpArvy8ey~0~%LL%8{5}zq>YO|*2eMtvw&8N6mbpql_Y*!b5sy@t`Th}k2))-m z$gSA5Q~EDTQ9(u}3-+tFx+q#^=y4BHGIhsa2IKKNeTzWE$7R{rRpyDUgbE}7kwT#T zgTMxJzh1P9cTD#^ruSqrqw>NIz$<==$0o-`HPoU;1cN|J;BD8n1G4h$46c!UgS-mz zlw*OfDGhYL59a`055{=xM|`skrae`SKs;-a!Pq4E~%q3zq3(Dh_f= z5z^rJ3Fv9SO?0u{k4VT{QIt0zyaTVT(d35>w9NVi)2vl%#n3|XMKJhJXz>kWz;8tKdh^{p8(jRQ@t0`%3C`~M-g|*RuNM00 z<)KfS~bbi`iEN@hWo?P3Y3P%lX``d@hO41w_NQP$}mF6!W z{#5nD2D-y}vxoskRWk`|&{l)J6`?~Mf0Qemm15Mq_fLcG!5~j#1F-KJZ)}@5eDy(CX%LUVrZJZk8BUI$sQ^pa zE$&^%= z`PZ{GV|wl{rU+TgUdAawZMH^HWSPZLS67z@12|&jID5sYeR)=VzSu9?OsbxdX)We- zi@+vN>Td)}TPH^U)}CeS4VRZ~H7V)%3lrk`1Aa+tk@6jDXD|6dy#{`WuT*~N!iSwT zr|@~QNV%SveP@s5+mwY&>L-L&LxuZd29i-iVt9ew%f}ufw0DXdeyXwEUf`$!Z`4hm zt>^Jv=M35_&DX!24lQ#wYG3HiGF$akpSRawbfn)0TtabE8B6KEJ~c8a_3f>&wLZ&Avu! zY_C|8jnptWjtnKrKa+Pg(I*(yGT)8YJrGwrIjTG|xIkKw0UW#8Gl9HEVhfu_Gjv%}R{uD#16 z5pNc=>8g*OusX(XL#3RO;R}!UW3lV?S}`LdBiqN_6$xJVFqbgdsaMOdJ9Dl^?}L{w zUX1?bv&x>ZyeK7}kZj0XDGp2DX(R0(JJv`15?oHgfwe)7=`trI+FQ-<@a|bHJ`W{A zd_C9Oh7v5KY9aD0uJTNzAD8Z+Rt_#ze(nQ!ZWyymU9B5agEPyGC6jf=0@|Ky+ia%t z8mW+M2av8f{N=aIloBMqw?mtW7oE@U>RBlMGa)CRi(CM*=C8A<$USNIXm;Bw^j^&U z^E0*X-kL9U!NQV0u>7W`rrmL6oU~bw_9HnVg{`Lk=~1T$$uI}Psa89BCp%XS)->Q* z*saFyEfK(`{u9>dtIOUi0Nq$drp|pqmuKy)c-d~{$U|6Z;Wz0oGHN=6YMCLG7cD6 zfR~jA%mbbq{}zh(!br5zLEWTysWcM0v6zGH+8^CR3R#_`$ka&hVk@&`e!$*Jn*aMvC;6*I*{ECE;Wk z3okjEOX&*?^x%qn5bW1tK8;dBw$j=ft)F^-^3N*@Vhcm#3v{w(qw7ZK5EH<|MrHWw zOh)UdQY8u>DoPL^`I6^X=m+iN>kyfBql|H|B!!bfomtQ>S>`+Mr=0q$QMsR+8E(yX zE}!-ti=@w{(QNkV4Plfek}|kxa{`eApkLqcmc=u`xU4u>2nSIld!tvD2#Nx4B7RrE~@g=7RRllK3*$$8CveHU{^Y({Rp+Ezzx z8b?o0-+#QVZzkDeDW13W`@`&bmdI5 zwek~%_bfuQxvgl3!jIfqhgA`c`U|)aG6;Oe#SN}(+LGK8cph0`cTq-`Fy6eZ;G(=# zH?YBX>2(p#Q>hlRZ_bdB0ns*Vg%#%+Bl|*MhHT`sFP-A z7fIIghz_#&a-+jfR4#!{IWeH&ad$umS3C`5<7%?=*trwL_qn~jO(Zv@Ns())MVoiK z``422CD4Ddw(cE075sZ0B(0;v;t^e2$&4xk&I!o@zBgTk_8TbKu_ z?fLQ5pF$^_@T8)RL`o6$RQEO$HZh0r-_y_0ZG&t*OBe??mTiEmSjLc5*wcVkE{l-z zL7<^1^Tocu1(`yHc6mkL@)458}RuM8CYJ`}e$H_jbNUiL=cM_5M0sX!n zc-w-s{fkJW3F-nxVzd34jTzUh$;0Hbe!gKn7%(sFRUA~3Y7~T~umOk>LIJ>-@V2?L zvy-?bi%*v~c}Y3TJ;GSO_|qMDh%%>VZ}GmWAl%hz zJ0|YQ#%8kl^YOjcCssHCzP`l)MsQyhYVoP&=4!-fY3s2=6#p^9B8bf`guW@6&n)^| ze;V(wER?$IX{4N5Rt&!kZ-CL>Lk*g-v_&r}wLQMdblD4`o1~Rt1XSbU$$O|nL`rOU z%P7T$%qRCZ<()6P1ZHTcV@If{s6c3DudUf1t*_@JmQq!X+4d0o*VfkN;pgYqQBZEq zTGzFv{ch;*!Y0m6Y03WL#Z)ySdUere)j&rlFZtH{*-h!CMiYmzr>k?x9S>^I7U}zv z+%bumM}X64isH6*%LX%20T%f#yzzs>x~v{G(7QB2mpx`zo3s z?$wju!qW;lO==_Ui)Cecb_+q?pEcS~JW$|&jRrCBy%iboHQQIdnV&fPa*XZ zHaG}j3KCIFjB3;%}&;f42%pfl%qXRFCdC5*@O>8A?y36`wal0vQ8fX)6sm z?Tg+7_Lt-r3~CShw60jBrtIvk2@P4kjT6LGjj!`7_DEJqdRaR@+42)Zk}dc`9aBR} zdbz9{5TNo{nLY$_)^^6QFt`^6A=)3ZO&5-b`4aAK!bDk(Kv@xvhpJ63N3KacSTToL z;!s8-1dEI=W5S>r0)fDs!>w9}bW+THHx6fGv#G0!RsTA}Z=?0>{TV{EbJ)~8p+7bVf`)-#>{0Y= zxvHZ;y=SI4GRC{tS9{Wj{2EL;(xmSf-;BB2B~>thI*`x2bMuYL+{*EeupT1L%h>Ip zG~*ABrR=;KOa|dZ2b%3a5`uT+8)990LWp1Eb>JVcCRWJ`6`bFT9!JXtT>8j)oD*&q z&b9>|8;k`Q%r6Fs1hWfVHKtVc^fI*uUzVGg-;lR?E6~`t!F|S5^v>yc0diZ8EKvU! zq9!pP$n$tiRO_4lg{G#{(~B)JA{u+OGV1Jcy>o`hgg%0`Vok#O#yo#8lgXDtzz~$I z9OHChjV;9b&%cP>a*Bfdg^~fE=-b;M)74Ms#hmVp*!}PDAYx{CWwacxYZX!RV2t(i zgs)>E=7q~jr(Y9#aG@%SJB0g=f_+mqM8G$X0U6Dcy;#i7s*Jve3ez@1Jnz7?X-PI zw*p+nKxc@XBTTf#IMJ(i>&Kad9w|ly$>WX6GFOlO1CN5rGp!H$kQiL1ztwUT8A_`S z=7AvP*qu<^@^}n$o~NK*a!<^)fxH>f2j7+hN`{`g?5f95ML@2H zziLVf`aT)EnIBzECz5*QlWn2(cHM4FE0XN})9tC(NX}G%8nNJu!Vj^vFT0$)9$D#) zZ|->X3288Vv+JvcNNYA=glgxZ`6C6PL&Tq{UyM1Ca>cUde{XCj;C;tbaXjEgYwBie z{3^@t?Oo%3w~nEXwspU@(Me_#XIoLx)t>Bn7AtnaJthZ^N6Pp8e~_hPc<#VF{C@jB zIST#=U64e&TdI!Ey~zYz*0x>2znsnN9yaCCOwDTa()I${BpiTmfS$x1((YxVq#i(K zmh3B|XwNlfLo)p91uNPS;=y}6D<|J1M<|%i&gYih{Cc^UtHsd!*#g8c`LE+XTnMB z;fsv5?8?_1%8|v91g>}r88$50(sDiC&*9Ha(tJN*nZc?`?*;ZBJ?2RS&KBQsSbKcS zA#xzp#<5h&T6Bhhusk7&sX2^3_8bMTJ3vcV!gag>5s6AFwvEFk3~#Yu6tQxuuMvL` z3C$l7En=KDOB_~d{f2H`Utr8yC$!Ksk~#Q6JW`nwN#W`c(?z+(kC#DU0{;tU8+oRl z?u3>h;9OORQ<@H)yniZa7%BaagBBVup+f3YCQG*Iv#ZQpK611n{0aVqO~40<170gr zHcH_np`4L|f05tX(0jPXv!oCbH%Ub#2Ut)6tqYH^5ED?( z!gh$i7At}Vg%R#gKHTzjMts-1wDgYs)5x)xGBJ|I zoTWsqv&cf9t(E&k12faLc~$2vS-Wq67nq|Fm$N&8&WxOB!P{WI?ruh-B|sJa$g8UrRS>&Dtx6*t~WD_)=KeJhZxxfZl!+^)tSsvDDF`GItr z!6#;XNg`9qr=Cz1^$m3a-qIl798wtSODAyHK4Te8o5lHMQADoD^Mrvw;kFX#H8!lq zdg@g^O_u$pXKIkx9%NHq{8{H_Uup3L-)+yPrEHL^_X;|gC*GCF`aeh*>A9?&_m19M z+s^^&X#SE`zDmqFyzuy=GS8uBu07+0HpGqLrvuiuB$m6~Lf359$neMJe^%*UcZ;;p zIQj!Gj?}!)=mW%2P_rs7t;(PvLCyscAwh?QAsE&6&3<|5{0RY}wJJB}!}@X#7Iu>@ z_RGuDXT%HD_Ji8W#8+$DMNrL5x|~RyR%4;MOA^%ynDlWHcd9;qdFgG4+$@TJ_avJFHW?=Wr(44pj z9}rLCnR3<-;a^d^D1+@&CrC-Lhtd8M}KCZ8DyR#>?E@QcZJ%z44zNYF{9^y+j=XGs-! zT|Yc8%;kgK!}}!O>8>zZ5D<;C_n@b}AS?9woWn9@n+fV!*2`kr{Idp-nJ zTzK%_^}Qqi;Q4$F10UuWfq@PzVBy&=q9oatzuU?w*1d}TQeMk#FF%xuCfRy4l51`1p-4$>YWyg5>xbdb zX_l53zg8b)-DDjnExA+789n9M5YB8CA%w((rKg6gyYf*q8p+ z8FNya!`k=PwN2Eptl^U0qw2U5Zv%z9qfR6)s`&ZMlZ$RI(!xXNgUDN!??f%H85fcei}Bn_c^^v z#v@uf=W5+X8e(Bt681wGh_ETyyA{2OKmu*>FH1@bClcQ zR~XUG2ahLnqeqtH6k&OOH_ci@4n!gKrZ0Xx$vO}ncX^z%OP9-hfNt*1#JOgo;^RsB zXA5nCSWu6^| zr69Hy2J<~7Zx)tPgL~h{0en*s7@r)zpJv|?#2P1s;S++k)VIwKnY01}1}rhyU#5*# zam;*Li%*F=vpP`@~x9s&#Us~#FA^+OYfXI3Ho)`pbS{Zf;-Gz3F>BN=X|rp<_?RP3wHt{Ptc&CTf~)7m zp;Oo+rI&l9nh_DoLS(UDxpfBC@e+;Av*XnQIBED%{wPQL;jHosk|>Ft8v9|P-Mvi& z^rYQs27_mmF&Pf&X$7(AwD!oj9{mSAQto~R;7)!&FPKz-#+#MN5_IpG>z@CF8MtYW0u+VuFV`A;Obp<-oix`B9Xt)TGsis5ILmnjK>Cf12 zAo>$YiY{Ybl^_s|t6zi64Gb_Pw|NHd{Ue<{O&*_!5ml#fhK-uh5rQlo>!F6EFQiKr z8gJvh z%1ND&?_X1X^O((Rywx7K+@{Id!)O2*Paf*N{p9a1&jgnR-B+*Z=Eqt;3}!a!@5mml z`>3g@ouJet_N}yt)iPw4KJP|CnWLzDYTW47kZT$9Mw`=-lR&g@jn;Z44k|yCCuE^uDGhQ5(%_=b`B!qrI`mfo z<;R*EOxIn$;%+ALdbF_!L;`Y6_CP}sNfsORa<;mh&VGip(d5#5KI&p)D!A~^G4tbv z>z+|q-5GAk%%j+YE~tA8I4(T4Kdb8K=nP9F2bLN{M1DzN;Z7+GqEPm(Q1FprCBOq- zXu_MH&ZlXtytf1MZe~Til(w_(ssQ?hX(RV=0z~(3*oUyiT}0Eu{E*oCkj~|i2WJbc z>=NmeSIbuqlscAO``lX^x+xjC#Fk_@X92)OW&_n#(~*}kv9*_k2HKv1Xi+2>ER8 z{d~>1|8>$$D-d2^U#|~=bW&M)auf_bDCte#)}Rjqk?j1(A=}4$j|<^kgZVpb_DD^N zXd-$gJDI@bWBO(BNBinV4uhwildcq?H(j6};Ay81+v!!XJgZO3TId(4{4C?y#J4jB*v!?t>8NxE&Zmy_R(PfkvjN~qs&H{R^?b_6wl4geOO&xtvZqTHfK$2Zx7iZ-lFB_>SBhHs|duo7gM)1 z_h=~;%yw|UB*r^o&(Yg2U~hmmqjVXtNtU{XYu?nUM&*f+L|YW(I~d6#+uP2u9m4@f zsF%Sm+yv%)X>(J?BVFUltcRWRJ0A=jXj)eAhkY!jwsQ3K^og%ia?YrJ>YI7A?^$YbvqFnKhcGJ1>taet{yYP=LQ(x!;e+( z#`1{&^iqYLu8Iwos`9pmdmQo7uU;jtlH2-`?)wJpb@njMvbPjb`rWp4uayQiHU`i} z28s*3JHa!4Wuo=-BJOT^#yJ^+f0YGZ6$r;)BqzZ8rT3A}VUh9hQ}6mv#O0@J7`J!= zgIJB3bcY8Eu9uWJFz@0sztFuKvTO_3QkjTk5)@4!@Ks{u?%WBik7NCCF&^XifPBXv zs4z$T$2CjyI?a{`M8d8(e*F3I^7k_xsy6qZ`;U>gm$&nk*?EVPc3(FBrh~p(yaNUbWZsQp=DtV<@rz+=lFA^xd`&?VJ^?Nl z52ajhRmbp0_fI^Y`NM6%Mnhh?YxMDB6Cjnt(9sFociZ-2=26kQQeI?k$v!eP;-PSP zQNIozX~nfvJELnSUZ>GGDDx-KjDix!M4860$eF?50P6D6?boKS({LKNYVoirP^SwlL-ivU3Hp@v=h>2H=sSD{vJ&NTuPBxFA+|0}xp$#zzvBv z!qC`Fwn$_hiqHH00pERH=bY<2znycPbD#T3ylr84j$Mcy005jbHiB56MfktQ%6#S* zU!gS5-aU;WH*7<5f99eeh%AK>quWqT2SuYaf6xA``&Sw_ZcWw}icLSxgA1G7n!?8- zh59bV-8LCb?SElh+F#-$B2TYg#KML+ZVoj@w zapD8Nedn`dqTuIvSjcp|#|ljIqT(F6^zj&n3s9_oOYN`p0Ww{!Vi{%*pv#VoA`av- z=QHKoTv(cPUu%5j@`&pNB24(frK_vj)pQ9l*_d>FA%bV$9b;f4CYAO!(c+|#Y*iOSL!>@6 zB2)aLE@Do~{q)xqQ6pEb)z-zDrLT6H;g9-@_o|<`VbXs%nizxhpVM+SYqp1SM+Ofq zAez1OmUdYWE|U0i9Fe!=oupOw`^9sKgI z*2d9>?xkAjYqF0-RV|bE^BnPsr#_#SZOpzT@S~ebtlv!7*`X)aYbQp3vz~R8W9tBR zfBT?C<1ob6uftcn!2 z;&ea24p1iMy*=n+bVk*5qph0&C!=GlKbG}@a^7|Madth;vXWqK#A6Q+4=2gAzFp4!=kcfy z2BxA%>o6{uQI%0>V{4jmFgF>r7yz}heS3dYo<)bN#G9(u0y?x*(})@jF^i3-Z|eN} z{hh6HwrN1u-L}KZg4Px=*2vx69mrgI*WH~G$HN1mv%0{`)8`4&Ih{5T?!>9Up3e-4-fvwQtE>y+!WDyg_c(}(okfY;)` zH+S1e9^5)Pd1u({@}LrQVPQgj@QYnoDWpL%kR{oWK$0!6zpxbDQJ=cfQFt~G;)Gl- zv6WULPjW|IxoMWst?oJP-yd*K&}j5P^r^}(=dWUZf=JgDT3v*e=JEMrigPYV_1uA$ zmnU$1)?MzD`4@i~OcVyy5fH5D@bUXTmS%Hf?_(3iLGeyn)uW5Q;Of_8c4q8@H-B*z z^~Lhy`@~1^6+b|3lwO;&O>O5rRD0opYsQtpM-JyhB*le<*r#hwdRI$lXJkuO9I1@lJ1p*P zG=5oMd$5E4iLa1pe=#-ue7k!<*JJRii^z?ujL-dIZ!hDK55f=4%7Y6PoRjU!%GLk0 zgRAstM41K-H8DyC?x4>?UF>w&>I7ut$n$z!Zw zf@zY5xTtdSRlj>5YxJC@mx5Y6eWHsBXaNB`R*w=06DPExq*5b3onVaOzu|iW?Zx+XI$y)9QRUx=hFRG}8?IW$)eFi&OPs`Z>Uy)zp*()JWv6zm~h}(WX&J7^V+*HL4$#@+MA%i#1qfb8YbveB82j*ib@iMMIt5fL71qiX@;#?{+?c|3wCV;LVA z+L1(NfO{@-rc&bk`<^0KTBL4gPz0)E%}xitw7+SjTacQNaI4MxB!0Zs6lrmw`xd$V zm2L)bIhJh#EyV7mT~XxYbh)Wvvi42)G}#?GT5q&gPPQ%6a`n&zA!gjx7V!-307b9X zO*i$pahW91)*3MPcYBGoRL>z@MN0 z2G4VS@p&@}c#+KeJ6OF7V;K4i142$lYnY2BA`Q!=jf0l`oa2;@t)*)vU)D^N8BDaV z+2(UZ^X}=Mm1fT^>9EYIT7b)KVsrj*xpoKt%UmVF+C@tb?j=`e1<@>K`=h%x7%`Xf>7S=++d>B zf88TrjUrDI-+%Mv7q9dGSlgd2YboGu4k{_oeE53g%gnVzbuH@Z0(t0VZW#VAuBpSC zWXb{q8P~b=&~_f}{!6%gi4cS6@_9$+^+G+{KI!v`X2+kU)0=~1g`{qHX4#rM>JULJ zlizxMI2T3Axd;#5XSlgIQ|9XMC{KU?L9G1lv-gveup%#l*VyM*<>q5SVE5<{4(5k& zYpaZc0WSbCnqezHjA11apr0P_^m$`blb40g)lH!1yEnO^aF^6xDt0SnQf`NDdq@gS znMRy$I&veiJ$@{50MF(`szIzw!yGT#hnC#XbnqtA1R-DN75=3dz8p9#AfNeZtTpwm z!%wx$BgX15+2_I!Rb3oxm{YfqCf0W2pf|QZq=>$?_hO%4~Z|D($XXC!^WzN^y+ZSqVSvG1UFBdwZv7i!fR zoOYn6QXR^FSK8A&SeP0QNv90AOVl30m)0sbr`0kn%F1SGpRUQKt~{~UJQ4KxhSdHi zWIPWSzfqr|ICL%$+Fj1OqS)nF+?G%;sf3`PWUE^E#|B<^7~Rb0xxz~T@mIK#z63EWee<(GN~RNPty^Xr8jBJh*8z6 zIgvorFuR>;v`Z>AyL!UIqJ%FO3@n0bagWS zQAV`h2C_<*gT?_*_8?2m+Ug0RAr z1jnC#yi;komg3m#lZN3Zbdd#i@4JpT8k~*NtJ&F!RF`g#NJVc#s5AdGQ{?&R%E!x- zxR6Nx<=O7C7{M4chdAPkN*dw%EFHT literal 3657 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 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_off_disabled_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_off_disabled_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0e343f7be9828c0cf52f80ed5df33f3b736ffe2c GIT binary patch literal 633 zcmeAS@N?(olHy`uVBq!ia0vp^0YIF@!3HFcFAm{mU|@3aba4!+nDh3oW7cg4iMEIN zY6neYEi4^0>>OTb?)q}b(#3zOvqiU#H-Dm+c;w7Wu9;3w%#6oXX6apN(&XLx&wty} zPj(4RO_EQhZ+zow;*}L%`LN>EPn#QUN>lf|pZvm_X%0AYofJ@n)%U3CXyZPbz>xfI~R}G~*;El(m#e%?tJ}Mq zS3-WDZO#7OyJTIDm0i4h^{vL!FRDgnzvf3CzWhD^c=O_L^`|>~yh3?ZSK54kEa?1F zA#~D|qPS(vCHsGU{PFej&zgl*(NB6sSGq9&yXXEZ;H%l8%C{BrA=&lQSFL}kZMuig zigBq`SeWca{fGZTR`!K!eozhCarofjd07aDT>y0aj>TMwp81+Q70DwWeSX3k|`DM)T&GAUSN zHLRnODT683agmCJpb2I=C6!CnCXzXxTNv)%8GGwH_ z34v*o3|T4EVp_X`%AynUSW2I#OEKnU8>J>>=@K~BO#%Wd#Tj6?)nap!ZW-d|C4ud8 zqX_H|;j(4OSW&6kBv`?)6fERnF-A;;!6KZ8^95qDcri?1IEG>biW4!onB)^AhQZ?( z0DzkIh+gum5#MwwQIGnh;7bsp@3wl+h9j=9)?=2zP|j?PA-}Hw~W_D zJ5zG)6q-yqnH<&#_QM<%00ZsboX8glsv%dfG}sh_MadX*tdxz@C}jxv!ZXn(62m1J zj*A7Dn7~959G56?ff|>`i}*sRfG-jUI9`Vps>A{@#+T!`l)!NnAs0&25=_d*o;&lFAegJW2JAzk_whGa15KmFqXgsBxNxiZ;se}oN}EWaC{9_ zb>4gY!S+Rustb;G-Jkc#;f}<&t=qj)$DDaPTklj>b++yKXrOrT^U{m5q_n2G)x3Ra z)lcPTej{VQsi>)_7kKllRoQKW^O3LiJPA280ksxxO;~ujHoSXzSr|aDM%f zVrhwVdK?tA016I;Jt4pfDS?0m%>dT)xL{xfCqTf0CVT3G6AcF@_}v*gPeWZ%*qGl3 z4H_qLZ}l8KUwGi<4wqh%35Ax=&-lZB(>6Mo{=5iwpX%~(6s6$`ncbv54Kny2KCV~w`v-`JpO*1i>gYCExA8P?6Dpyj7;6T=9kUA-M8)#shjq* xe}_->O9cf#D{SGHOI@t+bC~Si{yxl2s1fA4A^YW8gYbjklp5yV z#ZCD&Ygpfx1FW-~j#P={EJTT?4u7gTkBg_~04Ow($cbQ6IT}|1S;|F_A z{SW6mcjtE;A0#r_^&wEjR)`Gwo;VH|n$Z!+*7IJ?5$hT&bqeADB{ zw>h%eF|R%#lzL#>yBF4Mc^Z#nnZrxj!~( z^B%lE@Pg}1W9zGnE9b@cZ$FrQK>bvQ|J7up(j(Gb_a83!czu!T19tO=nK5{}`njxgN@xNA2yYvO literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_off_normal_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_off_normal_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d3ef0e1a604088750d441e2ed06ef913da5b2388 GIT binary patch literal 852 zcmeAS@N?(olHy`uVBq!ia0vp^0YIF@!3HFcFAm`bQfx`y?k)`fL2$v|<&%LToCO|{ z#S9GG!XV7ZFl&wkP>{XE)7O>#E;pB$h(vtBlcx*}Ob978H@y}i5N?{xa*= z|2-FQY~^U3xR<{{>m$R`=um-(ERTzq0$z2&#^wJv=R5{2JY#{Swi_d~z6fI&9{o9n6{-xwJf#d#RTGvpa> z9>}}x?qIgz_BX)^yl=MEvZOHY&W-=F_d|uvwC3jKi_e}tyO&^4p{aB@?oq2j_N-^G zORWADR8&}4+S$#!ZtTHx@87?F*S>xGCcX5^D#K$I&({>6`_8HFDKu5Zb5?5Pv%UZ8 z%F4d|d-38$k>8OC$KFUEc=z>dX>!j_-P4<{MMb}_eIdLc$m^4h|MlzF!#C-8GrnQ^ z!ExZ+=D89F{s8T+ZT-vFf44i6X8d?Bf8{)N*T6jt6SgzXkV+0)wd#`B z*Lt?d?77!&NhY@$${8|oHM9s^*naujKD9Q1I@#%2%m!6e#j+;^CN!|9C^$PX2~B9= zVdV4xF<5{ijGP!!2mW&zOlahV$Zb$|_;+t6l!I!<4-v+nZ!gdHz(9+HFhQY7y z{@ar$Pu||YH#0r``Q0GqO@$L1TA~xUg!^ARFxmYqP2lD{ZI>&*rSV?%(>c{z@u#|r z{VLywX7gT&>h4HUS~OYZr#!bVuoG34(tnbx*kObiU>2T z{_!*Aeq0E4;jQTgTyEml#-h2Ha`&uoHH7>XKrU27FgQu&X%Q~lo FCIFy&bLap7 literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_off_pressed_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_off_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..c9edf5c8785a29d4144699b85cab535c6fb1524a GIT binary patch literal 869 zcmeAS@N?(olHy`uVBq!ia0vp^0YIF@!3HFcFAm{mU|`nqba4!+nDh3oz2EHwnPVU4 z|9@c78M2T|OUclndY|8=Tw@`*~}6PGWs%khWR$W-xZEqb^}ed8+$fg=qH zY%GQf9gL1V97zrW%uQgS_xx9nA3vVIZToinZMWan39!5j_ItH-#j2B^YYGYrKR$i% z;KB6s0&$G|{QTR0{r$JxqHnir;Ehc>Ym3kQ?AfXjDB|il>B!nJ?QPf6nh!qseDUJN z)WeA;-)@wxS+zSnJUlf}~1ig?ai_VL&;x8+x}jw)@^R*H8$VkUW9 zJ;6w-_gZLaQqRg>!(Ou;I&+FArOqrp=X=?N_xR(F*@B)=SecHcMwaE}<()E!`CA+i z8oEt`OY^jmXuq5tqjRX}^EoT*zO=r7RdCKT_Il9uQVqHHUVF+EL+b>8i#s>q@;a8# zz#*hDrM-TNPw@jeM8GWw*ulclQjH#*I1D(Eesgkqc~Q})fARhA-@mV~e!0`84X*h@ z&^(t#8d~DE?UlNz2lnpW`@VbL;XQl!9`0J_{5MXSd_lf7kQ994ElyU1?O+vnne2Oo4^WKZ#y9d)Fu1 zO}bxf=h<{e|Jtvtvezdj%{%)%!8JuoY5V5r#oPV4SVVUAPdoE2{A)_k>DnVfHhl3< zS$|3VTYX(P0iG1$VaMe%t6qh3-v8^q+&`03=kwJwMEw(&|E$IY%smVYp00i_>zopr E03`i)iU0rr literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_on_disabled_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_on_disabled_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..71a96f16761f608dc78ef066fdb2822a970f38a1 GIT binary patch literal 703 zcmeAS@N?(olHy`uVBq!ia0vp^0YIF@!3HFcFAm{mU|?$Vba4!+nDh3oW7cg4hSrDi zlLdUl)YvtSvcFg~<(pXKlJb{!;xA%vxvm#5*wQk=RXj3v{safHqZ00yTXmG8xYtw` znHariPE1yc{5R2dQ|EEkzg@c9#g*^(y>)7lXuH?BvDjfEbC*oOlLjSr5z7T97+v`^ zihx457CcHk6}9~SIi>=ZGYy&sFAJB)U1q9a%4>YufBydIbt=hT8mN9lz`*Smxikq;sYLh_BMe!glfspNI&o zDrn5wKTGg5ueVqcPlbo6q@QsTr_S}$TyO;lCw$P54cs8TX8MhUJ&Y!&c z?Edm^4~lNhyby8A;=#U?nh(sBbHbQ8o`?#>x!pFq$$BPLWZmL54fY|6b8ly!iJQ-U z?#S1}ZLBp)d$(GhGs}OvX@XRN>YClXicYF`(=RC$)z@zKzg*8$P+$AKO4#7sdHr>A z`EtuNUq5^C@mZpk{r(xt*UbJkKTd85#kDZN zCbsVH&+aU*C$7`qx^%2$eEogRS9SG;g})`H^qywDn*D21-}+`Rhm8Mk@_fAF{LWeP zD_y)_aN$S##i|Erk>ADjqRuV$&A;2e&3`r&dA0AKe68~E`ht@;feDkr)78&qol`;+ E0QqM!`v3p{ literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_on_disabled_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_on_disabled_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f0d3a6c97d11191895f7aa7b73174cbf909dd84f GIT binary patch literal 1033 zcmeAS@N?(olHy`uVBq!ia0vp^0YIF@!3HFcFAm{mU|_!B>EaktG3V{wjd{}U0>?h) zr}>L`x+gt26~M5}H}i)e6MKP_`774xD_LH+hOF?CoC zA9w72+*H1iX~v|T&Yj)~bqtK2D$`f*@2hravJnjP7W*^DtVX6-o<$(;yNcOd){spN zUSa_!nY1DuRJm8AFizE3FbOPpQhyacKfgSG`(g3BdFA~x%fl>JwhJZKl-JhQ7S`4M z`}O3>lld)*Dw+>2Uc5MY@7}%P=XS<%Fe)CjqrVc1RZ)P?_>F2*u>bFj5C2W5BHNO7qYxDU# ztoHr*{Zsyo4C9rZEN9Zxm6UpZN>$vJ-+G|t+|4uAvpX5&mG70+7SGN}F`el!F z_3hT{=G#xYnK9n3aCwrybEf;|@VXh1cXe0qH4t=7+xP3=quuw#WseC=JfF(Xqr#SR zzDz8c<+GRhBQw7zKM(x3o{;xw?H7p;&)!c`(p>O;pVFdxDMl~fzj?FfiAd z!_O(j@Oy_qZ*t1FBfH>QIHvKkd{xSDqi5&d$zmZ}Gfpt{=N=pu+Ofm&F|%d%mxD zEv4A<>dTie?hOC+tbK|c7;fCZU%zwj-oGs!a;kls!<39>`Yq2tf9_lzW5L~+X;Mn2 z3EOv;%<|qnEv-1Bq`ge?!;Jlwfy#;tmds<@S$Uw0Nl^Z9Zq$K}$}MJ3E}3wLSI@Y( z@4$VR|9g*jw9K7+LtUoi&HY7d8!$5uN5sF5S?~T|_Raoz{FJ7w9fL`CY4qVgw{HQn OID@CFpUXO@geCyjP|P&| literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_on_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_on_focused_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..90423ce4e891cdad77c229e9530df11ce4df6f16 GIT binary patch literal 781 zcmeAS@N?(olHy`uVBq!ia0vp^0YIF@!3HFcFAm{mU|_o9>EaktG3V{wja|Zl46P6C zoy}M{Z|SV=_`wtQNI7DO$Gn41F4EcA-WRW3QupYxX`Q;Yb*j$kq>XI?()W38RCIeeUybdxHknUvmYF}gV7cG~qbr|Ak;6ph zE}4KQ4NB}HV4;iZR}Y_j!BW9%!{jG*d(rDsz8c1R=Z{_f-0`t8Lehg+uqvHz%GGfmu(Ihon6Q)c?66~{%S3j{3nQnx3u{nXHTWwvKu zKkxeWy60y{P5h2-B^Fl@6iN-L*Sz`dfi05DCFe1@JVF-0YDm^E?f6fXP;jF>xlm3PO_($`ik8PX44Ui+$YgzZem zbH^#KV+u?Cyh;_`{;o3rc6B^k%n`mdxn}eBDbFeT zntXj?$EP>x0XEBSCH>#{!mz+*PR~7t?;UgOj2XQj0HbLiYaPSJK|Up6{C7fSQ2#G+sIUEx$7N+y1*H%JyqyE_?O2_z+}$g>FVdQ&MBb@0Ncw{^#A|> literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_on_normal_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_on_normal_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4c95cf030c54f4d0186aed4a93ad11e24c34f165 GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0vp^0YIF@!3HFcFAm{mU|<&Wba4!+nDh3oVV1O`MBBr9 zx82%D&D1!QCn^14*y&L4^w5U6ik3~?C5r8y(+|0OC<5U`qouQD4wMNhw&dzcpSCu( zp6sMJ)pyTl&uQjA8JTAPx=W^Rnp@Y$pha<^B zfVoLR;7Ef48w*(IqWr4%!w(bE)1Uipzg@d>$}8RCV1Ct>g5c1r-(Qyedimi)fzW1` zkOPk&KThAhdw2fUYqPIKgdq zXB&T)l=q)LU5dzF-@Ryu*)favwU?J(^UBtZoThsF_HF6RS!zm~ra%8#U?R0s?X?M? zhSJTeSFc_caLVlYcx;AS`HzT-_fMZaJ68FA{brrZn{TesSDM+e#wHybOj`6XMt=rTEZIie%1SbkKZF!qnE&YCPi-3z*|LVg28-iK?U+8i=Hz0c#O9&7l z(l{_(_q4s)udi&0%Z8jFn{A1JiD=lo^^O+qv|M%s1bTfCI*xDhY6x8Fk*p1Qo zjpZe!`ab7#DT3?Qu5XSL6ZF0OxZhQbar*wH|2h6&&E~`s6;nJu_p4-m-JchAT3-8j b$q&|uX6~oiOXqk1GYW&JtDnm{r-UW|K%;U1 literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_on_pressed_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_btn_toggle_on_pressed_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f907579a0add8712171c44ae8a44f2abb890f8a7 GIT binary patch literal 1197 zcmeAS@N?(olHy`uVBq!ia0vp^0YIF@!3HFcFAm{mU|=cnba4!+nDh4TS-;nAA_qPi zKi+6-X1I5iQ}x6N2^VGc1Ma3LT()yD|H4?oA{JY6cv*i#fOu_}-ut%Li4IPWmURYn z?mzbVCadG#sd*}ogbz$S=ifD9(Gj_Sh8txkaW;SD@?MuNy-((o5R=1$eA^CRcgBet z3PP+diyAyc1Ui|N0v%MiI$S`4LGLHO+Pryl{dtI>Gr>^py5)-NLQVm>x8v^J zyZ5iIrshxieAh2r6-7m#{(boHL0$1k*!9w|?A*D<>&|bw=OyAAI7vmxH#l+aT77-} zdTU$Tzgr$9HNDuFC+PIUV5U#W_0qFBX4zAM$`1c>6meBpD)RWFh5zLch6C&jKbRTb zXq|p3Y%tSr`FkghsX?c-mxe_>46t~IoV65)R@h#p6KjIg{tJ z_wySayRq)IL$>Zh_kKIZN)E<3#R7*miPxC77xV4;{$TI(3y)VUxvnO{v{&GFi<1Jv zuUG?s1i|*F@?L7^9iov#vT%W>LqG;MmXJj^_)7Y@7V(1;%^F=h1e(-6548&X$qeFt zZyS-l_u8%K?7hY3_*3__9c1ZwJi}Y_XoiW9Yv2i;(=IZ{4H+5?kD2%;pWYM_8v1fu z?!lXMQ#pQq=Q*VX;&zIN+cY3|gZ^|oj9rOx=da2(vM>hU}*dD4j^QQ&;;dD9sU-G@ak zm)^akzI|Kn)@!#a?B^V7zR}6RVDY@>vdJ!;)5k2AOD6xXE^y|kvzs68dzmMVpT}TA zgCfg?sNb7(uAV)6_RFJ3kFGD$aLb&f#_(VEn9uUd?W+qNl=@%A>>V-b^5XNozk zc{;uD+)rR|Ni2T7Yg?d*ssHn$d)4pfG@ti>dTrymqg6YDv@&mRyZ-k#%a`xpzZWN; zseT@_dF$4tEdnoe4OEaktG3V`F!>rIi3Ac;( zNt$BQBpYJW7Rey+It zROZgzyS)7GZzjh-s8=j;dC_q}aG|o3drKdOte}+=c>*UsAK!Q2eP4Q-o*#euv&(1p z%$#}H-lodb_~yW`reFt@%#Ip{#vX0yQ}|ytX{oXTmM${+OUh?{$8kJ{4d_tCLxuS(XmjGSVmF$ zZRT^=EXrT({;R^S%)fu$S#k5=^tryag-h19uQU8|*KyKh6?ftD|G#`NI$2~EACsSv znVl`SD`soI`JXNBo_%?(_VLfN?zb$f{&J!G`=*~K;y>>=leH}J#lrXVR4m!t<)+W{ zHQ}`VayRo)?jXkT>XqEk(1b;ev}CJ{O9v&k&WDIm6N+y zUG;Tn{kQYcjmIkc)Be~`wzKppn$pu^#Kea6568%+sbmM6i|H*s& z?(#3*ul?NS?2r2_{;#f?Nq%L1bNb5P3qM0AJ&%q$Jv}RK%E<}ZRc7&5VrFV&pynQ+sU1s@hLIl z-vxeNxB85)PUgE`&p0c-Uv(#gd)yRY`q;a7_F3_IRZDiaxzi)hzF8Z#dM%&DYKyWL zyLWr~1%223lzmS<^4guyIcqIHM6X!?VDS`#`Hy*O%O|ANKY3|>r2gTuTfaot_W$AH oGc-AJLBQFWhnHB!gnGtp6Q(j9pTxZjm|Gb@~ literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_list_activated_holo.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_list_activated_holo.9.png index b3b0da723d4993770561dd2935fd7dec590ac660..b6b64d316335a5534fa73ce90cf87ca94a076682 100644 GIT binary patch delta 44 ycmZo=Y-OBa#d|Ql_CO>Pn=tD(mOO)r?ph+{q3o(WGErL@fWXt$&t;ucLK6TVLJUy= delta 44 ycmZo=Y-OBa#hVynnbt(h}fc+|LB&Kh}6baxh6JDqFoloea-8Gyjk)z4*}Q$iB}TLup= diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_progress_primary_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_progress_primary_holo_light.9.png index f89b6477bc20475bbbe4d2f3bad82cf1f96391cc..16a92d08654b59e207bb9e57d7b8f986b48a76a2 100644 GIT binary patch delta 809 zcmV+^1J?Y{2G0hNGk*(C5%k{P`UgM62k9MsMEQ?C!YZI|6!0Gc^w6TG0;!Rxat|Wu z)o3Y-mXo+C2OyT*rD^VPMUiW-(BlXltAPGhBSgmkh-2~6Gq^TnLI{}X#eSwmcwLw$WUCKCDeOKA;_I(7G0Do$>ngTGc?ur)iM2P7C z1C$1+fu`C>`|;Tc@lHCpRjmz#gT=Vc_5p0$Xf}G7dtvO;!I+e#?kGK#=0v zMowCBVBoyfb9>U!SdsnLq;rpsjR+iUxwm}}JozX_8{+V}Cpk%mR@PKBU97wjg>|<= z%JNp&`q%DuSAHemLz|dzaAc2dgmdz-5o_Q6C<1I4~z&R9=z21z}OX!s7`BaoO6q03xBcbFLmGI?740N^fk^akl; zNBNMR`+oq#%bh#A-vc-_RsAzPV>U?C7?P7KTL6!uez(-Yxqa87k0S%<3E^}=S_-kL zHl4W7bab_k9e_IFfUHkB7i(WEI;<`|r#d8sNidEi=diS=>=R3Mnhh8eVu>&h&X>g* zv*8Wc;Iy9@?ph4(QqTQZ`n_kOkC$5AVJbPaJbz;r!hoc48qvZCf;`A+Zx4|s>smzE z`a1wWfN|=uMQOTbkRybU2_a-c n2qKvfLMDXZE_eA&(_{4)b%Q5jtw)5F00000NkvXXu0mjfXfc1= delta 809 zcmV+^1J?Y{2G0hNGk*y#&=0hS0R2M&3Q-Q#URXGQ7 z<<)2@iIx+)2?rpST+%XUL{Z$eGqgCsMi%hDX@tahk2vI)p24*t2|`GM5RxE-BuK(2 z(p!d+1R*3r2&+p^;9S_Q4>=q;U4?RU+r(Vws$-Sy+V64Bmwz6r94MrYwq98)o&+fx zpaNV0IH25Qy8rO%f^;MWPOOjuh^()3e-FNGied@Ubix3QT1Dp7H9B9!*gD0J?jDJ8Tlqjeg6Hi73!w zJo!?$rKrnI_J8lBP4&3!s~k?2Gt|V{A%Yu z(`(4jV}F2ta3@FiM*zEWbNeSgxO2LpkM0992D!be-!CONckD`y5ix*P5Kafg#WLk4 zYg9bbP-s7O0BRHgT^}Pi)jr$m@V@wHw=YUzWuxRyh!w=_6H9$oA21Ze3sF4D4PBfu z>qo#kx5eVIKHl^UlHJ}jGN!XuT`-m$T7RA~3!x{HBiljeN;?o~GvQ>6Gp(wB z0`MCcrVeYkqA72>MDyz>nHk#$!j3fvl2|`GM5RxE-9O+flLs}t(BnTl1 nLLx|l5RxDS3GULHrbYG)L8~li|CUBg00000NkvXXu0mjf$98-u diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_progress_secondary_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_progress_secondary_holo_light.9.png index 30a079d6eeca150afbd2275ee3e0ec7ccc251f00..f9622cb954c81e9a41f229e7fb16b094e02e3117 100644 GIT binary patch delta 116 zcmV-)0E_>V0g(ZaByCtpL_t(YiS5=g4uCKWL(w0^@jAds%fS8002hd*B1N^AOmA?8 zD8ZXSE}FVdQ&MBb@0K9E0L;wH) diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_progressbar_indeterminate_holo1.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_progressbar_indeterminate_holo1.png index ca952535ff5c1c2d3e33e04391d57c5f21718da6..a7cd41efa05deda77ed537766505dd6bdccebac2 100644 GIT binary patch literal 1351 zcmeAS@N?(olHy`uVBq!ia0y~yV3z{24LI0{gHJW`BcRzntBFGR?} zwAl^9S}+T4+}oG8UwgmY#i*kCe64(4ZKZD9|DTV4-~Sg|$(+#t#g}10`Z+CzEsNL< zH(&f*AO8RH_UqHXoX&O1dXjkSj!fZveV{V6Uup~&jMGIKqAoVixcTCzy}OG{erpb| zbhNlv^wNa+k7sokf2)1@xBXByQ1yB=L-$AiH{90VYo;vt-gygOZB+Z4QoZxj_b_fq zM>DoQqF%~mS>oee2kK)*l207o%y(f@?CJaRAMHM5o|I;&UYgIuU|Sr@M7j>E{3%)9M9x@ z`SX0M{zP6W?^f3vGd6469@>2;?9@rkbvGk7Re$>MJaV!*!#B74EDTl8)-X9}R|yzP z+y0OKs-Jmb#p5mt$my;8^--94Njax>KJ9EwfWcP^Goq3zVeTh`%pUJTJW1c{ZribwEmrPS395K%~X_dsru)=b^dkN zwd!+UC*_>k`Lr?4f8FQf72d($R9Nlyx??eY`m6t&`#ye~uVEXMX)F{tZ{G99dXayB z?m3^3X84T~Cct#r{&l(I<7>~i-I`K-o2&HS)-V5RcKy@%v$2qu!EGUO_yN_P{ng+4 z=)wOJn?Gq-zx-tt4@@aJD3J`zlzlt?Jv?z~%atwjC!IY2%fZzz8K20T{yEq5W>nxyTAcqnHXoVKv=URO_(68vpiCaU{*sK zTQ5Y&!5D7b&2LY3F{+qO&;M2Zl(#`S$egiZ;>%Em7p}ZXshgkwPy8SKt>3!kkKeqB zMn3zkWm5M&;cZwPjG-#?!jG&QFBYs@EB3}arnpeEZr$DbRWo2 z&l1p{ZTnyU`~IV^6Bi%$I8xj3>B90-t$q4ae@-%I=<~VD!r-= z%XK$zcAuZ}P=B);P)9GCj`iR6FLz9iI&XILR@Oty`(Z_W$M-z3^a8ux56$hnmrH#9 zn=knBz4_n8YaSkdoBfmTVaIRJYOeiz7&jP|3NuK|jALzxyP^|~yepvd??m;>`3q#l<yR_|c*k~KqM!EsZP(S_z7%jd zAZ9bh;*XJ)%nw$excbe{^>6=9%Ga7-@@#gY z!SygUtNAh0`#)Y=_QsQ|W|#Xt1`8#WsH*;#{rmscZ9o3_Uy)l`BGI|R|NQ9#_T2S9 zZw7;$zYNv+|1bYt?)Z51_ia{Fva3a3eae3OuV~jloj)HRNim#pLQ62yf8W=d-Mn67 z^CunamsRuhE145aQBuLTKk-WI_FHT+(=~m&{MpYJG`F_Lyx2w$$nFI6F4=ZH1 mU(@}s_6H;LBc}jrlqLTo-cMdOrSnVx$R_~k&HB0D=W`3)+^hTnKIOd$)*^u8IPSJc~(v)8j^@H2b&0` zMGZ|XS|TzA$!jFfnY3OrCXdErXAFD#W6%Dz_m6wNbI=6d&q6Yc|${BLwORny$FTI>&jqaBy@~Q*@?9~V-A+S-TJ3Wn66BrNwn>5v-~DqPGCU$u z2l=~HBNXO)q{!f0-`(jP;#br^&+UBW5 zU>bsEsy;4X7%t%gfbEn4-nqf8$tC7$r5{f;u+q70CB%!BJ>Emb&us>I>YvXEu_2Mk zNO9q#Z%LHjl6o)Mt0WYd&EQnot==#yWx-MpsgAqgyK5rHZ66$iXen+Kzao#5s&}@0 zaEAdHIJ{10&hp8d>me=hATu0>Vc9QiWBA_T@F1-p)pf^o^LdAp9!#5N?HLgHj920L-x3Is7^gSB{7ScI+ z?OQwD!*0KG85gyXonj;fTnbbL5ASg!V5E76(5D}Ms7xd;6>Aw1=n8*g?ptHfLGSEqf9+S)U&sJ8nol-^*5eb|2)g;yP#Sl!rH|~%rIrMa zb=PB4ceNrigO_+cpK1vq##SQS-y5@TOo9yI-1XmG{Bxrc%v0^^dk6u4gy zA>;c}Y|0a*2Y}^w^c$HYe;Lp(?q)q}tVL=^IE)=&-`9(j2KUpy{yJT`EDf5OQ~-)P zwqLz#(tIMz;){A{nSLEo*>ze5_&=JB?e4Gu(To?ftCkDMoAh4X`53xQ;@dzqLns3g zJB|SQiItqa{fr&pyxvpfs)I6YN{eo?R5_Us74plb%?Lu-23hcj_WQo@s7M&7p{@U% z(3B<6;Xi46gX}@L65VI+z%~F}o)c*%zDux2#Jq0y?GA1^jfu|YEGVTfx!@=(0#?20 za{2rxkgX;fx0>FwYeNwn!2Zmyq>w+thj>JG6*0r(hURGb+;+BJ&&`P3mL>gkxQ7a; z$2pQ>uU5p9vmm@MTBoa#5_l1_rh|tL%Q0lEC7pW-SIatQJ6;xaxa~N?;M!Siq;P6y zZ}0vlM0+6NYXxCL4WpBqQKdH|z|;?>p=n*XFT25&gMQNBIrhjWls0R@cotGf8Z}#S zdy`x;O0kQ#eqv?e(B9g)EZl!iU@tc0sSp%Xb$shoQkS>~Z_hP#MI#$eSrWwfC>=s3 zq3W>56>VT+yhi<#jST+yV0f9vsppDdO-j6x{zEmCSeRyk4@F! zG?IJ>)n!BjOA+@gryz3v$p?${j5|b-&v?#BjqLIesr+iKu9Rc`bAz!Vw80|zz03ve zsdN~f3va0q&{2vSEU6l=Ks57%;%v(7qYfN6AGiKnx-3WMgftUY&PDca%r?J6mk~#o z!>OJVfrzzqW!akS{f_|sU-DR}rUt83zQ&JS6f>cYVr-vUpTGV$MlsXw literal 1631 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 K6FBiX-~9)_8&UEA literal 1906 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 bdzMy>?xk$5FRtUPYQFoQ2=;CCj{NCA#_MqY delta 1799 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 AT>t<8 literal 1745 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 CavFdD literal 1748 zcmb_c`#;lr9RA?gN+wIzirSG|*Jnk#Xp9LW))9a#kz3#E@DcYjVwfbwYJw zLa`H@YE3sIyj;gRgp|8n7R~v}Ij`6G1N!{%c|AY9pXdE~p63(oNV7p`t_8VCmG|I}Ze9479)FcHwnF?W!=LuoCzjl9LYa!;3qBV=f@`e_yt0C->K0hdE`%mRCj!^;m^lwYErzpq z9v;X2VD#v@WLhik+YZvlSsV;7o*u5U7(sxb$2Jezy0L(mHl=xff*i=aKBSuhd)(ki z-a1fPekld!-_a`tAb&YM0SyOVY{?oFo@DFY;z{8-=Y$oDxaVF-4=wIVN`iebm9fvi zRvm4f%^z+>1HR@tGv?q}lyWLroE5Sdyk9l>VLP(1ANcK>iL?|r3Q|eZU2m5e*iQsx zY6%=(O(a*yy4g%^P#YseA8r-+zes`j{HXu(jcJXiy`mc~;wp^~xO(q68GJQ2(^4{k znRVh26|ri-r7-a(;$eBE>5Ed79u^$W9(?7s`az3Y^A%_<_gn7HmeTAtqtzW<6KmW$ z&b0d1-(n4xvW9i^#3_p#XJm)yAR<4>Qyv$ZERrQ`Hq!x&i=nWHRnf;Bd-Xrza>R(k z9H~>6aVvw^lv}WVd1qZ<)sD&DxNkHvV@zcZ1I;dG-qGj$4D?E(&PFDioamZZ)$~x1 z^AiFz=RH!!;s{`~u9#2r9=tQ2*3m0-v-d$eh`4PBo_jmo+r`7QF|@(GlG9aWXcU7A zje5hu_J#G;U@g*PPJ0@HVQt^B)Em$g*Ck@UtU*ro#Ve0iBH7iMGwPSKs{*5mIpf+`Hhm0uM2N@x@k?_hI zd?xULDuQ3T`l?P+!N!kO{bMt%v!M1G_DVGyBPmk@C8tcYAD)8q_jE36SUyDCFD_-3 zToZPoy4kj;^SJB7F$XOp)cDJsc@%qdD7O5QIiV(A)jAYkC@RkPYZ52=0tWqC7^ozg zs7G-uDJxbp!hI84c|Pn00#JNym2Vq3&*mgqLz047qA&gh1-;kx&H#!-E(&Lt4GFL= zQ2!phQhytIQ$Voed`T+lrdV}Avap|V`>GB2`e*gQg*9P2E1Zi4Xel)zC*SEdX_#9r zOlLl?cZGxTy0SyIG8*R_04`3iy>c4|{^RtnF!2 zr)hO&=x3q(cGra0i?}q=_*%?O?_S!`Bk@_6?WYw`k=NqPnAoK%9#Is{0+oLpDb}bp z9$ECM{F&U;JvI(c%)gS0VBQ*Wdjt1$vEOn~YPZhAc#8&(w9vpq8x&?b6&?I5Z5uBf znQ{}w`t~xqq!w)iEyX+UKu#z+1%ICkEj8EfIy04Ahh^coPVu$q%T+7S3$;DsX%zJJ z4BX|ia>6%mQwOevPy}rt&A}Yu_TX4L)Zvx_6Lv@sjNa!HA39sUfsA9&dq^PYa?Khy z=b;LH@9O<&at)7iIM@eT0sthFgjWPy>=~Lo^p8zRJKAKAY;8P`3e$ctYMq_9mg`P<+7vZMK;1*zU0{7Y F@*fKC_T2yg diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_scrubber_control_disabled_holo.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_scrubber_control_disabled_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..6c4fe4e8ef5deb96ac3739c84a79a1b629fd3d0d GIT binary patch literal 1403 zcmV->1%&#EP) z%}ZQY7>A$gFqU9Mf&>|45E-Nd2~xsPN62` zf`k%+l_7|PLBb$15vju{U7TYpqK@bL-aF@k0YC0NAMfv+cg{T@?}bbzlgVTH>^IN;wD21GB&#{XzderGGvHj`YvR`f~&v3LysZN^4Hx1dvjG3p9Xx zzyeTnOmYPDfdil?g!soXJ+Bl(04e1Z%IHm$;X`r&?4iUs3!K+jk_sTDtf7qF0_u^o z9|B!qPY5xJocDhu6F^G20<7ZhVq6&kJ3@$0DKd{PfRyqcum;S<&U*|4;DZq2AZDh~ z1kir|0k9k^PfK=zkFmZVq6i?RyaPOVOiJN8D{}>cU<#Oma?(t!xj1H0V_;~>$%Jvs_srW383fm zTdsvDF)eKaYg~IklWLE8#!HVvWMpu7&p!`2~bIFjG1bf*EP5{*j~;t7~951fK=zI{xG=q_h6;C z8Drbn2$1BIVY|EWE9!9FIQH7zjklr8a}CC}u@NBnp@plcpPr0by=O1ES%ke-@7c?Q zPs7HxDUARCi(h;Fc6Z|i@EZ7V;a}Up>vnhJ#p2gq&;u1?Ft&}&m_F&r^ZMz@=<(k_ zyaldsGbho@a|vVH*z|xxAN@~EcmZ_mg_JXnMP+0Ym%{d;Dy5$-Dpoeh0{A1U0I8ld zi;R^`tOO8341s-{dn?Mmwuvz=6KkIx?yVZuwr~;P3o7Kxq%%a>!U}5vbTEq~Azli` zCzrq;u5)Q(FUC1=Mq+LrU`mJni>$()`T=(;=MYkBd#r*z7M zmpXe9K+l1gEE$%auCI8c-WJ$}5ZkDbkX7eE*VPNYcR0MG+M}W&u;nvBuL9`D@eb)0 z?n810bbLqN^}feP2ysaDL^wD8q3?u)Y_igU?zX6g2xq`nsNj8}gZ7m*V&XZ$BPYfP zTR9K3Dc_;)A%Wb^MPdbRtpndvp0mY$l-mhDqKg_kT1vT!iZ4;*4Zb@ z!D<{w5QaZ5LI@*-5JCtegbBtN8}O z4?Y+|Fv1ukj4;9oBZLu)Sj0Mqp4zEx&FoC~cFpWc^TRM&Nn6uhe^+%^S9i~q4Q(tGME`>gMRbBb5j*yrq-GeJgc z1Y}AmQnFkNCBOH-2a}aA*ICi;g^ad{Xq>5t-SE=9m`h*CEI1>865ss(F7>&9k@aHFmV>Kge&tpIRPVUNJ&Bx z0t(!YwERt+Nza0>4@D1G_Dyn2NbZiNR!o80k(PfAH{PCiY~kvnEg=~RQxPy>w6lS0 zITr<+xH=^t9ZfqGQKbBJE=J4uv4soJ-jN4sXW4yN_>CHfwg7K#NBsT@E~vSv*v8dS z_XmFBCGWXZ7evO=aRbSgDS zr?vmNr1j6rlyX~;sqAPgh_L{j)tZOdO>5}RICw-95()ds^!32+r@$ugIdBIT5N&4V zIl!%ecn&-P-ZWSy(Zwm_I;s^N*UAa2p{JhXzm?saz+K>L+!S#g>;r!QPt8g+jy~`r zyGwp~c<=tBq)QWZ>z5@X)>s3+0X`1=-Zt<(&LV!pCEhI|`WO&s0d@VAzdEgnpz8+k zkZ|Q|+{t9zOj4rBSfzLs-$aCT7}^4sLrWKkkAPoDGsIoZWZg<2YZ8`;7>ZW@qc^0| z%LT2l2K-3c;BEo<0o$16D!G1udc)Be7nEwnS{c5>W_Y`j$+m*ljj0Q=obi+)rWI}j zUl__?BDD+Re8*x*z?X)yn|OvMpcWA^k+9Xo+YMajYmIBzb;y#iuZ@^Kz>0uRjpP>L z6C=5!6%!cr0n>b^4(dj^DPUy*rul#%W+TvKQpal5MzD@%$pTi46&& ziG1@z3Jigtu^sB3GQPvU)_D^#F6a!$v?X?NDa7LhvQBU*&i@j~s(Oxp%t0k$T+om- zimAeL;9K12C>DE}jDM4qXflon?0_L`U68f_IsV0ZZO|bukNX+$74>H^-vWPP+u>@6 zKJ=kbwNQ(Id-orW4m2V+vtycD8TTZ+uHzCncX7!N$sz3FhJgR#MpCaDDwp6G&;8Ur zVI{@_goGp9%HSr~hrZ6PzZ!gI6+{>Qk!ZCL6A25`r`dxqJC4amKtUZa1Q4K1N=O*s ze6(duFzXoN`WrduDfqav*nB`|1rBlsoo@X$767GIaDeUn(5yn&J*xFXd_F)Ea7weu zlv%+6<0mjiWebA|$QbrXIHH;0Y*uiLtMi!hV-EM5CMoY*!9MxnsTUao^16<>pBO|D zP+|o_!bKhx4RLYEIoA_=v}Lpf6m-a^xM}45SebKxeOw*KWlJEZ=MZBp_S5LM!)FVL-!al|M%~#CV5cL#SX5Z&0RX!wM zoa?zGA)t>7TwXFC!J00s-ua$f`Cza*x};C&<8r2ZIJ2I`xuXHDYgRFH6j3u<<0j|frxZdMj)^^GYXjMIrig4!{z zgBL$;Sj#T!lNTk2QT9HWQChKy_sBGo&&`thQZYG6?k5h3e~C{SWI1J>m-vh# z+ooRP(^x`XDkN_yV%!qskPESh_nd!?m47yyzg>2q^8k<$aZ*Ku>EI zkO9?-_fbT|*x%Y#x<=~+Xm~jWy&4bVR&e-oXAYHz_I0pDw^6%gbOf}Fj)0cY5zsO^ j0$N5#K+EU|Xc_+lGHL>@$F+(Y00000NkvXXu0mjfqE_QA literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_scrubber_control_normal_holo.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_scrubber_control_normal_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..f6eeaa9e5a8db1777b9fa98b0a8de0b11a09b4ba GIT binary patch literal 2534 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 literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_scrubber_secondary_holo.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_scrubber_secondary_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a9cef40e25224a5f1444c4362350f36038ae2bc5 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^3P7yJ!3HFkD$jfgq+&f?977^n-`+6fI-nrna&iBp z$B`=Prmf#EEA2eY@@e_TImeqGMA<~91f48uxZ3oTfkR+I-*$%v2EGQnbMrLjU!Oa_ zfq{{UWy#}amj(u@n{R(e3k!V6ci5Z$W^xuYGY?naIkvx^K#LeWUHx3vIVCg!0C5sF A5&!@I literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_scrubber_track_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_scrubber_track_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..1a6f577fcb9e0c21b07a4f0b68c9a91fcf97c0f4 GIT binary patch literal 1095 zcmbVLJ!lhA9KRZ^T2gTktq$_MYIQKV_by2FWn4{lI24AQY5H+Btvyn}f8E&8+AGdFm@8nN1 zEs8p&*xIy-Es|9dEd3MK4P8njIUbG5f}rrQKaNmbK$)b11jO?Zo{#cvj-9Y#MouPE zNm=A$X@t^9M6#&FlW`FVFh*7_@gY}GSo1mFr$=E?3igAdL5QV~4+#-TvDw7h@k^U4f zMj~trtN%~VIO+`NH^)EC(!Qb{=x?`MpB}b{2U~PvTsj*0%f>-ER@JPMEY{Y(K1v>% z1HrwG<=1P%MrHKw$uo~P7hb;kk@~O_z1VR&z{rOy=K8zkPkWdz!O-$j@W{iXZ-cAd zJx_nm%v~E}0zK=mR?kJw3g16Z*8`0gzx#x_&812B;Qjvl9l^1==kJ}aHcz`(e`)5S5QV$Rz;-hM|61Y9ph z>rR`JdLS!uf#d;(xXVtSzk^fn&9(08v)MQ`WXm;+XqP{`R%{hpE! zJVbeBFa&Wjvo(htZfH~xHB1oj2<4Gr2$E#BY7RNhP_c8BW%G94oYQ|Y_N47PIXnHi?{+cyiBmnA{qOx=2aGZXPgg&ebxsLQ E08bUIW&i*H literal 443 zcmeAS@N?(olHy`uVBq!ia0vp^EJ}aHcz`)q#>EaktG3V_a$Gm0(5w?d5 zU-cICe%oTJ5W8h{eCH~Goc-?U(-f3HpXBZlkUoA(Ugkbu+61pm+f&riS z^_yk=HwyPqfxwQLH!FWmvJ}QtiAQ9Y&WX2Wzb%a3O;Xq|G2i`I9N!aBo*fb=R!bBp zPB1ojprnwVc!1U6+>wT73hBuX$rA)6E{LRvu$iz(b~2uIa7%Vjo**f4fh9$Z&4giQ zC*x7av}A|G38E4KA}OM5A}o^w7AF0nGJHIy7`IH+*fAVI;yokxP@k|;Ap*$&R~{ z8TQCaemVX$T_nPuVwFVIl^+$Yy{3gFk=OuPcA}?p*)ItC(lOda&;Q R5@4h-c)I$ztaD0e0s!<$lr{hW diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_spinner_focused_holo_light.9.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_spinner_focused_holo_light.9.png index f7a9f7c556d2567a9f27619c4ab7e4db2f44fe50..e3e6c8c0f57c2ae7faefe8f75c704310b84577ba 100644 GIT binary patch delta 581 zcmV-L0=oUU1+xW^B!7BIL_t(|obBDQPTNovhw;x=y0lTpsx0jrR7gl=N8QQ*4^r_k zJO~VQL)}{`OWvSes5(}GrBU6%ArU7DP-EY7uKoXpNH_!?|F}X5f_n>^Rc*OmH2ivD zx^n}EXGhP01K=I-)@7n}eFvt%my6@`8-NO`CCK5~(Hr0s@LbYoKDT}Yrx(ZPKPsq7 zSgwo{hKB+5J)bNLC>IwGfU(<1{*9>(mLR)+vxI3ERvA0U3jIfdQF-inSpeT0U3d$ zz<^9ZQei*_ASp2*I7n&?2n^zZ0YO2$Fd!g^Ck6xq@y38aAQ3Pi2uKtR2mlfZ1Drvk zVSs-lNJI>90*Q(N4j_>+Nd3S6!7+e@D=2hw7lvZb9a3#@V!YabKIm>brmCI7nTTu3!Z+bsQv0Q&@pq0yDo^+?!Dw)F6w~ zGft@wju=|Ehh^Nr=Hpa80DHje^s^=HColmn*N#)E{&QdEd$!jMwex0!`zrncLU0z0 Tqwo(800000NkvXXu0mjfEK~Wa delta 585 zcmV-P0=E6L1-J!}B!7QNL_t(|obBDQN*qxXhw*QQZ4xA%5D6r25DZEz1ClPik6;&k z7&{-qKAi+C4F+M~Ac0_DyC9~KOo~}|@$9ZKpCcW&T#|NJSi3%mwixlEL)4@<6%W)J`9PrI|YS2lifhzZ0b5R*VmC99GDS$`Lk)14-->m|s=9)Yxh0X+d}3j=xp(k2FE4$?LTWDL>;24o7-6$WGo(j^9D2GTVK zWCW4|12O?gg#j6Wq{M*WAgM7RFo*{R1O@TJfPf&L7!VA^8v_D?M8JR`AW<+N07xVZ za0ZEn0e_Al5i!6CBq|0tfJDY1_5c0{#{d$pkQ^`|5lAi=kN_kn4CojnHw@?yBu5PB z2qaew=l~>V3}_i7cMN#g)_)7#_xD@tPhNa!K8}CxZ~vp!Xob94e|OgQAQ7sxUB+Sp zF$u&Z5Yt0`s16G47UYKIILr1f?rS$N|L$Kp4qg(aOPGU<9S4ch80H`+z?I)D?p;wE z)F9K-GY+W_ju=|Ehh<#D^5azA16#oJ^s^=HC-4h5a&&0f1wJNVvIURPjp5N)XUWzNg(J=!eK&G3P7zD@VHXWa!^&%rX7Q zzl695b0H~Pp!%67c}$g?i8ee3O|{b$UAt!rcuHRs z#wj{peZOJ6ohS3#U~awt#~?Q%^2d+8ET_HTn3yo5vb}*I{~lbtsD+SHlBk8X!6m#* zJWxr(t1M!fER?{iw3S45T4R-M9$)k-zg|hOpEyw97tYSVI0Y$zTSd~(Gx-4^04C@b zyI#lSbM&W|K{-A>d}L(C!}_z%^wwBuGq13gh(@gTVYQ=%aqYN5;q71Nz3;LZnbdmj zN;RZlU}Yk@;TjPNgYBSd#;#;~8RER7ka08dUfGDP2|R$aJChsu^+Q>l8mZ5hIBli+ zSgf{huZeuSZZa=JDlqmEeinq1g~gqjx9Vwii=*v)?Ced4n}lugS8E!&4|{?u&Jvb=Jrg z^zrc-0Xz}2Y-M+an4<<9|IxKC{2@k$8D_8H4yPj9-_Yp?x3o!pN20w%8Vd^56yIVk z&G2t7jn-706){|nUE5+$=a-eW6J{AH5iRo9*r!Y3g?V0OjKVWEn?K=Fen7L>uofp5 zclWlK-^=4VzPbhKoq)@gcw|^YGyrD|dx$0#AQ+I_W7Y+ERoSu#94EXEBrJQiAM&*c}VCzeBh^Xpl8k9R%ZR|%W@&~!^n zTbo|m#}%!E88Wtru4Xeg!jY|+0#Bfg@Bt4DpX~S~HT|rX)}Pr)TA0VF)2Cw#ZF2YU za0_6>m}HT4j;dkfR;FJccjK;iUGt5_m#_Z(t(3M)Xq}G`E!yWo0YN-1ZFhDyrg%iw zMK)yQc|>CJ5HRt;XXFJBFE(Bk6chvzO4$PcXj3Y3y1|%PJ2~UVojykzHn!d6ENo@>J$cZ|wD_$P3ZvP?a+()Oc` zJlksQ3W??VRy^zanV!#XTYsBg);}=N1{Oe(?FL7mK!=mXNF&{2V`DAkE4@%p4XUo8 z(s2lfRh8=*z&F3|d)von?lZ;VxnF`yQHA0alD{3fZqS3iv$pG8Jr*z%Pmx8sOBR^t zs0M`P^c=|M_Ybtwf6pZ+Cl`(Xt^aMCME4u2Ows875>Ls^%{3xlS*q@ir_lZFDwn`< z1s-m0EvDzrt-}->_Pdb+=5pWnxt<-PEfp0NYX5f67+Gb(+rC5@cz)xa^dR2G0Pg7_wBaM2f!m4}RN{j7#+pUnRj6K!9J5kR$_yKtc? zca5iv%;w2OiJ3+4T!M9VrJdK)yPdpayR|5VH>7=OeqC1=V#@uO0}-iX?Nib|8cSRm z4`|rMnUr1j>2RE$djs{7kC^>%mG{IH>*5lXe&pF~moNSwL6nw`PCIW~OXW|Weg-)= zTMccLkJt^yaziu8%;8vZm%C9cnyqCz?xEt6MUGqp!}*;Axnwh{~+tDP04}s<8mrIK3yOMxI2q z_F?*7#D~^@P{v?$EeFnIA1rsw%UE%hG9EpH>YBqc1S6Tq87JQ)g#4@!-qCXCgiRd= z4}6!)g!G!@f#4P95RtCkS?P{Z{&LMXDSZYcGUM$F=`_Gh{DHoq-7;m)iQ=zXa-?$b zr$PWu$Lrqd;ZdYXh7$ILsB<5pgQ+BMhJT=!bI;|{{|Trza|>bHLV&GGdtZEDV^*-Y zu|E|l0q-00KgxKxE1NeO2gf5NxM?+e`+-BJt3uX@hv{pZDpvCxvdwwcdk@{kv{d$? zQ!TrMsEce`Cwg2&u6Er;KikZSnh&86SjcdLxS#t$hcBC&wnAQwFUN#1B)AhRzpYNz z8sB+X;r%)*l=?Lr+Ohr^v{1G?5PhU$idUJD5fMW?!(&dbgJ~rt@}u8>WdbIrKqWtKm1nYEb`+ri?6foOlMI1wefn$o5iP?H$FWXwwXH) zUDZh72q>1(dXv+mf-)7-3&>Zt9@YHd5{xK(c>~l}F41Yk`QU(yvI8}` zkH0?8Bq8j-ZXDD@wSeeEcS3y{RhMhylq@9P14flME2hig8TujOxA$t=uVnQtDregc zTe5Tb5k*z#5i_`415)f${M@kR7S28A9M`x_d0-?Jq+sflfPDbv`z4$vRL%r7CaW;1 zDL&QMQ-pc;{FYj(CTmeyWDPFu?*F84TR^3QiUfT`Z&W2F{n{3RZ}J0c?~IV7#jJ`U zC!_IzrXtk@O8s5s42*2a#c%6AZ+}^X9u+-R7kihhsg|&G%%*@HUc){*(w0aV>u0r(y#}l3m4{!6!s<>-wb8HgNhaH%D{v z)#o8-IdjRsqS2BP`h3YZZTX$aV)@_)%J=*D5R~8%6H2dgu)ACV1{`c(jL|T@ZGSx) tS*VE3>5_iVP~-)}|E9zLtvxcCIeamxpn7i!p3Mum03-qfr&@R>{s-i7W7z-z literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_text_select_handle_middle.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_text_select_handle_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..212d020b0056939b4cc9d38bb97276536dcf371f GIT binary patch literal 3098 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 bVPC+pZ|cPn4Obxl&kwM%L?Noqd&m6;zuLDe literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_text_select_handle_right.png b/OpenKeychain/src/main/res/drawable-xxhdpi/keychaintheme_text_select_handle_right.png new file mode 100644 index 0000000000000000000000000000000000000000..cdffc3863f4ec05aacaf59284d01d05b1b1edea6 GIT binary patch literal 2712 zcmcIm`8ONd7LK9U(7I+RRZ|Q>G}Js(5>i8}rd~5uZLUgdo@%H@Ni^o7YIuU8h+9Kx zqNXB-TZ&iXHH8p@r%2Lr=}X^w|G@jOR2W6T90Q|lPYfG1ylHF3@`_kmg>gZS>eJY+ZM$)J`?4T})IRU|Y3%Wye)rrZ6vs7Qd35$_%?c6V zjpfVabB3Nnpw*GNwv&R_*V7xSwT5qT@AGXjcxIu`5F-5f@=w3@%TklXtIq-U7rPUF zIJWtySAcHLMLZ}E&&wZr)BNQ}rQTVYP>o}0TwG{qXp2YFCypXc&9tX|G;X|sETlMS=-)Q zqKS=Z_uh{@PuL{wS7;_aaFPD-nGdl%jvQM;Yor?@HjPg9$lbPJ3HAM@QWu8s&|b z>bW{OWbK5mtE+p7!{L0*4_UG%8D$0v;|P(+^mA9>H(vXU_V_xE3AHYP21 zIXBL{{yZEW)WaRS($N5Mm0qI_qiJta$yFDPK1TZ5WvA&0ZMYvPL-Zyu3C9<~k%fCw)T^*|o zS9uvbCM;?9^{)W8mD|yz6x9@Os-2ALs zrTg2f-#_SOjkT};8J=k|{bKT8K?^;jpoG=$sZ=V}o&DU+UXxAR4#IPLDVudea+Ykl zucv1`_1L%U_?NiYOr*hBZDnsE_OtG!h49A%3X|Xg~tP`1DIY{ zrGBb@9cXXUtK-qCG4yYGsxLy6q~=$a$Gfa1rya_l%IR2cmcST!q5g`k;1tbaXS;CC z;?T%_o!JK~3#asBcxI-j^@5vBuP8^oJdiFmdH<0CyEm^}HzZ0Tc$1iu;SZO;3CDrd z9e1$3HRq$;B<=>x*p4uUiL zGTDg%?OdR)t-)Km94Jx?*^BW$LBxv`bPkCdJzF{zj1`$aIzG%Y(Mm_$M)qL5FT)4V zAS?ZZU#*fjt_+>@6Dl-1f)7mI27}M@^52S#$MI_8G`L5P4S0v+An$;^&8TV7xioa3$??If(>_ zfJdW*M`Hm!AaHPfJ@78ucBp-i{S0$6X4*1dUmEyAPNwbl^SLo;Xf;wtija|`YAM8h zcz9^evmbwib^=}JB{%bS=DnVKu;Ew?uapuXR%n54?C4KiIff6zSluUDa1_f&bF z{pN&Dh}hRl*R2{Vbo!*X({@)_IU> zmn~m4Lnh+nD)pKjIlrTth>dvz?YxzEI(|JQ&*T(- zbNjpYK%p%tn^d7FJXn~MCx_y$CWHW|zH5^QKAC=x^imQGM?1a67!Xgl4I`SgmFoBS zKI^}$TS)QuG%ZK^P8Z>Ev(q^2airCfbqS=JgL28#QDn+vktsfP(~v;N#+MU!(G6_g z#sr~|vvq0~uEz(3(dU76_d?xTvyGlkG8F7-!Pf68GHb!zI6ff#IQT`CFT{f%f zD1Zy8Sc(`vmH;E3k}t27LO6Y^atxnyn_mF=63TY5W6=x+|VGBdMg+0SzyU#?yJVCyr(XJ>CU|0rW}LxW5V z3?I_>gsfuep%yfI{Ld-g<^T`Oz?9HBvo$co#dLG_TEAOAZ}$22%lAv>EaktG3V`F+q^>tG7cZ> z1y)H|eT(2Jm@;pPdt;;US034bR*&f(Z!aA2oA;UZz4}IxNjLn%jCZJp>IC2Y^f~KN zU`9--%ifvQ0@>*fCmJR&Dl$8|h7Qx`P$fB3%q@NJ3bu}a|xZ+_AH6PP0M z`L|5f0&M}WwFj#I$o~usi|ebtK6|BTg|@|nty#GfJ_oGIet2+AV0!bphO@^`8N2)B z>8a)`ftYS*ZmBH3J*$7&^=)Zy<mdKI;Vst0OmH;!vFvP literal 513 zcmeAS@N?(olHy`uVBq!ia0vp^0YIF@!3HFcFAm{mU|>Aq>EaktG3V{wy}5@RWE?*3 z7wpmqN)t&-WclSYX`bMWR!t*kE)m5!$AW^6?Av_*C-*)7MVvSGRa+fBs=A{qbyaj- zoUavE@9Mr4=EeL;Z+SQ*1&kC@98NS$U{qvwVr${i@SLRLS!I-`6$s>D$dWIRA^bM} z%Tk_o2&*>j5BglQXOGJfJ*90QrT@tZZtvJ3=lA>lr^C|z3x8gTWITWTbawGZz3YcF z|4%L6w^MYE|F8X~#`@fu=41+c8=7${E_Wl0s>l2F4t^886O4Ywi6yzzXr{e#9R#Zwq-sAm*3+~O1d#(0e zJxO)*o%u^xomPrg^#513KXvMK;rlA%txWl>?3=>Y@)pT?mFn8eFnyJCL2|>*h{|Uj zC(kZ@;=2UMJk}98JEbK0^TjW>uC4idSm&6!v{(Ynzo9PsZx@=Lb)J-7?NEGQ%)W^` WQvKtziEY5BW$<+Mb6Mw<&;$S;#mxx- diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_btn_toggle_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_btn_toggle_holo_light.xml new file mode 100644 index 000000000..733728e79 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable/keychaintheme_btn_toggle_holo_light.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/OpenKeychain/src/main/res/drawable/apptheme_fastscroll_thumb_holo.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_fastscroll_thumb_holo.xml similarity index 85% rename from OpenKeychain/src/main/res/drawable/apptheme_fastscroll_thumb_holo.xml rename to OpenKeychain/src/main/res/drawable/keychaintheme_fastscroll_thumb_holo.xml index e7121f083..51b376345 100644 --- a/OpenKeychain/src/main/res/drawable/apptheme_fastscroll_thumb_holo.xml +++ b/OpenKeychain/src/main/res/drawable/keychaintheme_fastscroll_thumb_holo.xml @@ -15,6 +15,6 @@ --> - - + + diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_scrubber_control_selector_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_scrubber_control_selector_holo_light.xml new file mode 100644 index 000000000..a3b3530ac --- /dev/null +++ b/OpenKeychain/src/main/res/drawable/keychaintheme_scrubber_control_selector_holo_light.xml @@ -0,0 +1,22 @@ + + + + + + + + + diff --git a/OpenKeychain/src/main/res/drawable/keychaintheme_scrubber_progress_horizontal_holo_light.xml b/OpenKeychain/src/main/res/drawable/keychaintheme_scrubber_progress_horizontal_holo_light.xml new file mode 100644 index 000000000..4ecf8a6c1 --- /dev/null +++ b/OpenKeychain/src/main/res/drawable/keychaintheme_scrubber_progress_horizontal_holo_light.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + diff --git a/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml b/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml deleted file mode 100644 index 6db455383..000000000 --- a/OpenKeychain/src/main/res/values-v11/themes_keychaintheme.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - diff --git a/OpenKeychain/src/main/res/values/colors_keychaintheme.xml b/OpenKeychain/src/main/res/values/colors_keychaintheme.xml new file mode 100644 index 000000000..e9b8c9350 --- /dev/null +++ b/OpenKeychain/src/main/res/values/colors_keychaintheme.xml @@ -0,0 +1,4 @@ + + + #4caf50 + diff --git a/OpenKeychain/src/main/res/values-v11/styles_keychaintheme.xml b/OpenKeychain/src/main/res/values/styles_keychaintheme.xml similarity index 56% rename from OpenKeychain/src/main/res/values-v11/styles_keychaintheme.xml rename to OpenKeychain/src/main/res/values/styles_keychaintheme.xml index 0b6c4c4f5..2913ad4c1 100644 --- a/OpenKeychain/src/main/res/values-v11/styles_keychaintheme.xml +++ b/OpenKeychain/src/main/res/values/styles_keychaintheme.xml @@ -3,6 +3,11 @@ + + @@ -21,15 +26,14 @@ @drawable/keychaintheme_progress_indeterminate_horizontal_holo_light - - + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/values/themes.xml b/OpenKeychain/src/main/res/values/themes.xml index 864e2805c..2f5577f00 100644 --- a/OpenKeychain/src/main/res/values/themes.xml +++ b/OpenKeychain/src/main/res/values/themes.xml @@ -3,7 +3,7 @@ + + \ No newline at end of file From d8ff737fc5392362707ad70fbe964ac9e299457f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 13 Jan 2015 23:15:13 +0100 Subject: [PATCH 030/189] Use Toolbar and new BaseActivity --- .../keychain/ui/CertifyKeyActivity.java | 8 +- .../keychain/ui/CreateKeyActivity.java | 9 +- .../keychain/ui/EditKeyActivity.java | 9 +- .../keychain/ui/FirstTimeActivity.java | 8 +- .../keychain/ui/HelpActivity.java | 9 +- .../keychain/ui/ImportKeysActivity.java | 9 +- .../keychain/ui/LogDisplayActivity.java | 7 +- .../keychain/ui/NfcActivity.java | 9 +- .../keychain/ui/NfcIntentActivity.java | 8 +- .../keychain/ui/QrCodeViewActivity.java | 9 +- .../keychain/ui/SafeSlingerActivity.java | 9 +- .../keychain/ui/SelectPublicKeyActivity.java | 9 +- .../keychain/ui/UploadKeyActivity.java | 9 +- .../keychain/ui/ViewCertActivity.java | 9 +- .../keychain/ui/ViewKeyActivity.java | 11 +- .../keychain/ui/ViewKeyAdvancedActivity.java | 9 +- .../layout/api_account_settings_activity.xml | 41 +- .../res/layout/api_app_settings_activity.xml | 62 +-- .../main/res/layout/api_apps_list_content.xml | 18 +- .../res/layout/api_remote_create_account.xml | 63 +-- .../res/layout/api_remote_error_message.xml | 37 +- .../res/layout/api_remote_register_app.xml | 53 ++- .../res/layout/api_remote_select_pub_keys.xml | 45 +- .../main/res/layout/certify_key_activity.xml | 39 +- .../main/res/layout/create_key_activity.xml | 27 +- .../src/main/res/layout/decrypt_content.xml | 180 ++++---- .../main/res/layout/decrypt_text_activity.xml | 26 +- .../src/main/res/layout/edit_key_activity.xml | 26 +- .../layout/encrypt_content_adv_settings.xml | 31 +- .../main/res/layout/encrypt_files_content.xml | 42 +- .../main/res/layout/encrypt_text_content.xml | 37 +- .../src/main/res/layout/help_activity.xml | 33 +- .../main/res/layout/import_keys_activity.xml | 118 ++--- .../main/res/layout/key_server_preference.xml | 158 ++++--- .../main/res/layout/log_display_activity.xml | 32 +- .../src/main/res/layout/nfc_activity.xml | 49 +- .../src/main/res/layout/qr_code_activity.xml | 26 +- .../main/res/layout/safe_slinger_activity.xml | 135 +++--- .../res/layout/select_public_key_activity.xml | 20 +- .../main/res/layout/upload_key_activity.xml | 104 +++-- .../main/res/layout/view_cert_activity.xml | 421 +++++++++--------- .../src/main/res/layout/view_key_activity.xml | 92 ++-- .../res/layout/view_key_advanced_activity.xml | 30 +- 43 files changed, 1199 insertions(+), 887 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyActivity.java index a97e73934..24d002368 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyActivity.java @@ -26,17 +26,15 @@ import org.sufficientlysecure.keychain.R; /** * Signs the specified public key with the specified secret master key */ -public class CertifyKeyActivity extends ActionBarActivity { +public class CertifyKeyActivity extends BaseActivity { public static final String EXTRA_RESULT = "operation_result"; public static final String EXTRA_KEY_IDS = "extra_key_ids"; public static final String EXTRA_CERTIFY_KEY_ID = "certify_key_id"; @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setContentView(R.layout.certify_key_activity); + protected int getLayoutResource() { + return R.layout.certify_key_activity; } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java index 534ac5811..c95ad90a1 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyActivity.java @@ -24,7 +24,7 @@ import android.support.v7.app.ActionBarActivity; import org.sufficientlysecure.keychain.R; -public class CreateKeyActivity extends ActionBarActivity { +public class CreateKeyActivity extends BaseActivity { public static final String EXTRA_NAME = "name"; public static final String EXTRA_EMAIL = "email"; @@ -37,8 +37,6 @@ public class CreateKeyActivity extends ActionBarActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.create_key_activity); - // pass extras into fragment CreateKeyInputFragment frag = CreateKeyInputFragment.newInstance( @@ -48,6 +46,11 @@ public class CreateKeyActivity extends ActionBarActivity { loadFragment(null, frag, FRAG_ACTION_START); } + @Override + protected int getLayoutResource() { + return R.layout.create_key_activity; + } + public void loadFragment(Bundle savedInstanceState, Fragment fragment, int action) { // However, if we're being restored from a previous state, // then we don't need to do anything and should return or else diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyActivity.java index 98049d89b..1615430e7 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyActivity.java @@ -26,7 +26,7 @@ import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.service.SaveKeyringParcel; import org.sufficientlysecure.keychain.util.Log; -public class EditKeyActivity extends ActionBarActivity { +public class EditKeyActivity extends BaseActivity { public static final String EXTRA_SAVE_KEYRING_PARCEL = "save_keyring_parcel"; @@ -36,8 +36,6 @@ public class EditKeyActivity extends ActionBarActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.edit_key_activity); - Uri dataUri = getIntent().getData(); SaveKeyringParcel saveKeyringParcel = getIntent().getParcelableExtra(EXTRA_SAVE_KEYRING_PARCEL); if (dataUri == null && saveKeyringParcel == null) { @@ -49,6 +47,11 @@ public class EditKeyActivity extends ActionBarActivity { loadFragment(savedInstanceState, dataUri, saveKeyringParcel); } + @Override + protected int getLayoutResource() { + return R.layout.edit_key_activity; + } + private void loadFragment(Bundle savedInstanceState, Uri dataUri, SaveKeyringParcel saveKeyringParcel) { // However, if we're being restored from a previous state, // then we don't need to do anything and should return or else diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/FirstTimeActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/FirstTimeActivity.java index f18e475fc..277b08c48 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/FirstTimeActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/FirstTimeActivity.java @@ -29,7 +29,7 @@ import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Log; -public class FirstTimeActivity extends ActionBarActivity { +public class FirstTimeActivity extends BaseActivity { View mCreateKey; View mImportKey; @@ -43,8 +43,6 @@ public class FirstTimeActivity extends ActionBarActivity { super.onCreate(savedInstanceState); - setContentView(R.layout.first_time_activity); - mCreateKey = findViewById(R.id.first_time_create_key); mImportKey = findViewById(R.id.first_time_import_key); mSkipSetup = findViewById(R.id.first_time_cancel); @@ -72,7 +70,11 @@ public class FirstTimeActivity extends ActionBarActivity { startActivityForResult(intent, REQUEST_CODE_CREATE_OR_IMPORT_KEY); } }); + } + @Override + protected int getLayoutResource() { + return R.layout.first_time_activity; } @Override diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java index bbc1e4b1f..412de9984 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/HelpActivity.java @@ -27,7 +27,7 @@ import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.ui.adapter.PagerTabStripAdapter; import org.sufficientlysecure.keychain.ui.widget.SlidingTabLayout; -public class HelpActivity extends ActionBarActivity { +public class HelpActivity extends BaseActivity { public static final String EXTRA_SELECTED_TAB = "selected_tab"; public static final int TAB_START = 0; @@ -49,8 +49,6 @@ public class HelpActivity extends ActionBarActivity { actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setHomeButtonEnabled(false); - setContentView(R.layout.help_activity); - mViewPager = (ViewPager) findViewById(R.id.pager); SlidingTabLayout slidingTabLayout = (SlidingTabLayout) findViewById(R.id.sliding_tab_layout); @@ -98,4 +96,9 @@ public class HelpActivity extends ActionBarActivity { // switch to tab selected by extra mViewPager.setCurrentItem(selectedTab); } + + @Override + protected int getLayoutResource() { + return R.layout.help_activity; + } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java index dfb7b3056..1e413f5ac 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java @@ -51,7 +51,7 @@ import org.sufficientlysecure.keychain.util.ParcelableFileCache.IteratorWithSize import java.io.IOException; import java.util.ArrayList; -public class ImportKeysActivity extends ActionBarActivity { +public class ImportKeysActivity extends BaseActivity { public static final String ACTION_IMPORT_KEY = OpenKeychainIntents.IMPORT_KEY; public static final String ACTION_IMPORT_KEY_FROM_KEYSERVER = OpenKeychainIntents.IMPORT_KEY_FROM_KEYSERVER; public static final String ACTION_IMPORT_KEY_FROM_KEYSERVER_AND_RETURN_RESULT = @@ -90,8 +90,6 @@ public class ImportKeysActivity extends ActionBarActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.import_keys_activity); - mImportButton = findViewById(R.id.import_import); mImportButton.setOnClickListener(new OnClickListener() { @Override @@ -103,6 +101,11 @@ public class ImportKeysActivity extends ActionBarActivity { handleActions(savedInstanceState, getIntent()); } + @Override + protected int getLayoutResource() { + return R.layout.import_keys_activity; + } + protected void handleActions(Bundle savedInstanceState, Intent intent) { String action = intent.getAction(); Bundle extras = intent.getExtras(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/LogDisplayActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/LogDisplayActivity.java index 4a2b88518..f5eac09b1 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/LogDisplayActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/LogDisplayActivity.java @@ -25,7 +25,7 @@ import android.view.View; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.ui.util.ActionBarHelper; -public class LogDisplayActivity extends ActionBarActivity { +public class LogDisplayActivity extends BaseActivity { @Override public void onCreate(Bundle savedInstanceState) { @@ -42,8 +42,11 @@ public class LogDisplayActivity extends ActionBarActivity { } } ); + } - setContentView(R.layout.log_display_activity); + @Override + protected int getLayoutResource() { + return R.layout.log_display_activity; } } \ No newline at end of file diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NfcActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NfcActivity.java index d0e40a9b8..53b17654c 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NfcActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NfcActivity.java @@ -38,7 +38,7 @@ import java.util.Locale; * For the full specs, see http://g10code.com/docs/openpgp-card-2.0.pdf */ @TargetApi(Build.VERSION_CODES.GINGERBREAD_MR1) -public class NfcActivity extends ActionBarActivity { +public class NfcActivity extends BaseActivity { // actions public static final String ACTION_SIGN_HASH = "sign_hash"; @@ -82,8 +82,6 @@ public class NfcActivity extends ActionBarActivity { getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - setContentView(R.layout.nfc_activity); - Intent intent = getIntent(); Bundle data = intent.getExtras(); String action = intent.getAction(); @@ -123,6 +121,11 @@ public class NfcActivity extends ActionBarActivity { } } + @Override + protected int getLayoutResource() { + return R.layout.nfc_activity; + } + /** * Called when the system is about to start resuming a previous activity, * disables NFC Foreground Dispatch diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NfcIntentActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NfcIntentActivity.java index cb15dbec2..bb5277119 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NfcIntentActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/NfcIntentActivity.java @@ -36,7 +36,7 @@ import java.nio.ByteBuffer; * For the full specs, see http://g10code.com/docs/openpgp-card-2.0.pdf */ @TargetApi(Build.VERSION_CODES.GINGERBREAD_MR1) -public class NfcIntentActivity extends ActionBarActivity { +public class NfcIntentActivity extends BaseActivity { // special extra for OpenPgpService public static final String EXTRA_DATA = "data"; @@ -54,8 +54,6 @@ public class NfcIntentActivity extends ActionBarActivity { getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - setContentView(R.layout.nfc_activity); - Intent intent = getIntent(); Bundle data = intent.getExtras(); String action = intent.getAction(); @@ -87,7 +85,11 @@ public class NfcIntentActivity extends ActionBarActivity { Log.e(Constants.TAG, "IOException!", e); finish(); } + } + @Override + protected int getLayoutResource() { + return R.layout.nfc_activity; } /** diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/QrCodeViewActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/QrCodeViewActivity.java index cf0c3eb88..b0343a961 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/QrCodeViewActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/QrCodeViewActivity.java @@ -36,7 +36,7 @@ import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.QrCodeUtils; -public class QrCodeViewActivity extends ActionBarActivity { +public class QrCodeViewActivity extends BaseActivity { private ImageView mFingerprintQrCode; @@ -56,8 +56,6 @@ public class QrCodeViewActivity extends ActionBarActivity { } ); - setContentView(R.layout.qr_code_activity); - Uri dataUri = getIntent().getData(); if (dataUri == null) { Log.e(Constants.TAG, "Data missing. Should be Uri of key!"); @@ -108,6 +106,11 @@ public class QrCodeViewActivity extends ActionBarActivity { } } + @Override + protected int getLayoutResource() { + return R.layout.qr_code_activity; + } + @Override protected void onResume() { super.onResume(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java index c91d91ad9..deecffeea 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java @@ -56,7 +56,7 @@ import edu.cmu.cylab.starslinger.exchange.ExchangeActivity; import edu.cmu.cylab.starslinger.exchange.ExchangeConfig; @TargetApi(Build.VERSION_CODES.HONEYCOMB) -public class SafeSlingerActivity extends ActionBarActivity { +public class SafeSlingerActivity extends BaseActivity { private static final int REQUEST_CODE_SAFE_SLINGER = 211; @@ -69,8 +69,6 @@ public class SafeSlingerActivity extends ActionBarActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.safe_slinger_activity); - mMasterKeyId = getIntent().getLongExtra(EXTRA_MASTER_KEY_ID, 0); NumberPicker picker = (NumberPicker) findViewById(R.id.safe_slinger_picker); @@ -96,6 +94,11 @@ public class SafeSlingerActivity extends ActionBarActivity { }); } + @Override + protected int getLayoutResource() { + return R.layout.safe_slinger_activity; + } + private void startExchange(long masterKeyId, int number) { // retrieve public key blob and start SafeSlinger Uri uri = KeychainContract.KeyRingData.buildPublicKeyRingUri(masterKeyId); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectPublicKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectPublicKeyActivity.java index 148aa7d67..3ee1e14cc 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectPublicKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectPublicKeyActivity.java @@ -27,7 +27,7 @@ import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.ui.util.ActionBarHelper; -public class SelectPublicKeyActivity extends ActionBarActivity { +public class SelectPublicKeyActivity extends BaseActivity { // Actions for internal use only: public static final String ACTION_SELECT_PUBLIC_KEYS = Constants.INTENT_PREFIX @@ -63,8 +63,6 @@ public class SelectPublicKeyActivity extends ActionBarActivity { } ); - setContentView(R.layout.select_public_key_activity); - setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); handleIntent(getIntent()); @@ -101,6 +99,11 @@ public class SelectPublicKeyActivity extends ActionBarActivity { } + @Override + protected int getLayoutResource() { + return R.layout.select_public_key_activity; + } + @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java index 497486a5e..297a35eb5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java @@ -44,7 +44,7 @@ import org.sufficientlysecure.keychain.util.Log; /** * Sends the selected public key to a keyserver */ -public class UploadKeyActivity extends ActionBarActivity { +public class UploadKeyActivity extends BaseActivity { private View mUploadButton; private Spinner mKeyServerSpinner; @@ -54,8 +54,6 @@ public class UploadKeyActivity extends ActionBarActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.upload_key_activity); - mUploadButton = findViewById(R.id.upload_key_action_upload); mKeyServerSpinner = (Spinner) findViewById(R.id.upload_key_keyserver); @@ -86,6 +84,11 @@ public class UploadKeyActivity extends ActionBarActivity { } } + @Override + protected int getLayoutResource() { + return R.layout.upload_key_activity; + } + private void uploadKey() { // Send all information needed to service to upload key in other thread Intent intent = new Intent(this, KeychainIntentService.class); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewCertActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewCertActivity.java index 34c08a6c7..5dede6627 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewCertActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewCertActivity.java @@ -49,7 +49,7 @@ import org.sufficientlysecure.keychain.util.Log; import java.util.Date; -public class ViewCertActivity extends ActionBarActivity +public class ViewCertActivity extends BaseActivity implements LoaderManager.LoaderCallbacks { // These are the rows that we will retrieve. @@ -86,8 +86,6 @@ public class ViewCertActivity extends ActionBarActivity ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); - setContentView(R.layout.view_cert_activity); - mSigneeKey = (TextView) findViewById(R.id.signee_key); mSigneeUid = (TextView) findViewById(R.id.signee_uid); mAlgorithm = (TextView) findViewById(R.id.algorithm); @@ -112,6 +110,11 @@ public class ViewCertActivity extends ActionBarActivity getSupportLoaderManager().initLoader(0, null, this); } + @Override + protected int getLayoutResource() { + return R.layout.view_cert_activity; + } + @Override public Loader onCreateLoader(int id, Bundle args) { // Now create and return a CursorLoader that will take care of 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 0bc75b3a9..e441ff414 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java @@ -67,7 +67,7 @@ import org.sufficientlysecure.keychain.ui.util.Notify; import java.util.Date; import java.util.HashMap; -public class ViewKeyActivity extends ActionBarActivity implements +public class ViewKeyActivity extends BaseActivity implements LoaderManager.LoaderCallbacks { ExportHelper mExportHelper; @@ -111,8 +111,6 @@ public class ViewKeyActivity extends ActionBarActivity implements actionBar.setIcon(android.R.color.transparent); actionBar.setHomeButtonEnabled(true); - setContentView(R.layout.view_key_activity); - mStatusLayout = (LinearLayout) findViewById(R.id.view_key_status_layout); mStatusText = (TextView) findViewById(R.id.view_key_status_text); mStatusImage = (ImageView) findViewById(R.id.view_key_status_image); @@ -124,7 +122,7 @@ public class ViewKeyActivity extends ActionBarActivity implements mSlidingTabLayout.setCustomTabColorizer(new TabColorizer() { @Override public int getIndicatorColor(int position) { - return 0xFFAA66CC; + return 0xFF4caf50; } @Override @@ -169,6 +167,11 @@ public class ViewKeyActivity extends ActionBarActivity implements mViewPager.setCurrentItem(switchToTab); } + @Override + protected int getLayoutResource() { + return R.layout.view_key_activity; + } + private void initTabs(Uri dataUri) { mTabsAdapter = new PagerTabStripAdapter(this); mViewPager.setAdapter(mTabsAdapter); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvancedActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvancedActivity.java index f49f8e7cf..9fdcaaaf9 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvancedActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvancedActivity.java @@ -31,7 +31,7 @@ import org.sufficientlysecure.keychain.ui.util.ActionBarHelper; import org.sufficientlysecure.keychain.util.ExportHelper; import org.sufficientlysecure.keychain.util.Log; -public class ViewKeyAdvancedActivity extends ActionBarActivity { +public class ViewKeyAdvancedActivity extends BaseActivity { ExportHelper mExportHelper; ProviderHelper mProviderHelper; @@ -55,8 +55,6 @@ public class ViewKeyAdvancedActivity extends ActionBarActivity { } ); - setContentView(R.layout.view_key_advanced_activity); - Uri dataUri = getIntent().getData(); if (dataUri == null) { Log.e(Constants.TAG, "Data missing. Should be uri of key!"); @@ -69,6 +67,11 @@ public class ViewKeyAdvancedActivity extends ActionBarActivity { startFragment(savedInstanceState, dataUri); } + @Override + protected int getLayoutResource() { + return R.layout.view_key_advanced_activity; + } + private void startFragment(Bundle savedInstanceState, Uri dataUri) { // However, if we're being restored from a previous state, diff --git a/OpenKeychain/src/main/res/layout/api_account_settings_activity.xml b/OpenKeychain/src/main/res/layout/api_account_settings_activity.xml index b2a9c11f5..763504f54 100644 --- a/OpenKeychain/src/main/res/layout/api_account_settings_activity.xml +++ b/OpenKeychain/src/main/res/layout/api_account_settings_activity.xml @@ -1,28 +1,37 @@ - - + - - + + + android:layout_height="match_parent"> - + android:layout_height="wrap_content" + android:padding="16dp" + android:orientation="vertical"> - - - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/api_app_settings_activity.xml b/OpenKeychain/src/main/res/layout/api_app_settings_activity.xml index dae9de1f2..800e2eb87 100644 --- a/OpenKeychain/src/main/res/layout/api_app_settings_activity.xml +++ b/OpenKeychain/src/main/res/layout/api_app_settings_activity.xml @@ -1,41 +1,51 @@ - - + - - + + + android:layout_height="match_parent"> - + android:padding="16dp" + android:orientation="vertical"> - + - + - - - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/api_apps_list_content.xml b/OpenKeychain/src/main/res/layout/api_apps_list_content.xml index 9f9b99045..e1922079c 100644 --- a/OpenKeychain/src/main/res/layout/api_apps_list_content.xml +++ b/OpenKeychain/src/main/res/layout/api_apps_list_content.xml @@ -1,14 +1,24 @@ - + + + + - - \ No newline at end of file + android:layout_height="match_parent" /> + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/api_remote_create_account.xml b/OpenKeychain/src/main/res/layout/api_remote_create_account.xml index a6a39b1ad..7ae0a0e1e 100644 --- a/OpenKeychain/src/main/res/layout/api_remote_create_account.xml +++ b/OpenKeychain/src/main/res/layout/api_remote_create_account.xml @@ -1,37 +1,48 @@ - + android:layout_height="match_parent"> - + - + android:layout_height="match_parent" + android:orientation="vertical"> - + + + android:layout_height="wrap_content"> - - - + android:padding="16dp" + android:orientation="vertical"> - - - \ No newline at end of file + + + + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/api_remote_error_message.xml b/OpenKeychain/src/main/res/layout/api_remote_error_message.xml index 3d69a25b3..8483222ad 100644 --- a/OpenKeychain/src/main/res/layout/api_remote_error_message.xml +++ b/OpenKeychain/src/main/res/layout/api_remote_error_message.xml @@ -1,16 +1,27 @@ - + - + - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/api_remote_register_app.xml b/OpenKeychain/src/main/res/layout/api_remote_register_app.xml index f85f3b8f7..19981f59e 100644 --- a/OpenKeychain/src/main/res/layout/api_remote_register_app.xml +++ b/OpenKeychain/src/main/res/layout/api_remote_register_app.xml @@ -1,29 +1,40 @@ - + android:layout_height="match_parent"> - + + + android:layout_height="wrap_content"> - - - + android:padding="16dp" + android:orientation="vertical"> - - + + + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/api_remote_select_pub_keys.xml b/OpenKeychain/src/main/res/layout/api_remote_select_pub_keys.xml index bf4d0a70d..db54e4a44 100644 --- a/OpenKeychain/src/main/res/layout/api_remote_select_pub_keys.xml +++ b/OpenKeychain/src/main/res/layout/api_remote_select_pub_keys.xml @@ -1,21 +1,32 @@ - + - + - + - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/certify_key_activity.xml b/OpenKeychain/src/main/res/layout/certify_key_activity.xml index 2bf2c4197..3a4c343bb 100644 --- a/OpenKeychain/src/main/res/layout/certify_key_activity.xml +++ b/OpenKeychain/src/main/res/layout/certify_key_activity.xml @@ -1,21 +1,32 @@ - + - + - - - + - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/create_key_activity.xml b/OpenKeychain/src/main/res/layout/create_key_activity.xml index 0bd053c49..5225d4d77 100644 --- a/OpenKeychain/src/main/res/layout/create_key_activity.xml +++ b/OpenKeychain/src/main/res/layout/create_key_activity.xml @@ -1,15 +1,26 @@ - - + - + android:layout_height="match_parent"> - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/decrypt_content.xml b/OpenKeychain/src/main/res/layout/decrypt_content.xml index 5e7cda4f9..8944c821f 100644 --- a/OpenKeychain/src/main/res/layout/decrypt_content.xml +++ b/OpenKeychain/src/main/res/layout/decrypt_content.xml @@ -1,109 +1,117 @@ - + android:layout_height="match_parent"> - + - - - - - - - - + + android:layout_height="match_parent" + android:paddingTop="4dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:orientation="vertical"> + + + + + + + + + + style="@style/SelectableItem" + android:orientation="horizontal"> - + - + + + + + + + - + - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/decrypt_text_activity.xml b/OpenKeychain/src/main/res/layout/decrypt_text_activity.xml index e08ecb39e..5098d7ffa 100644 --- a/OpenKeychain/src/main/res/layout/decrypt_text_activity.xml +++ b/OpenKeychain/src/main/res/layout/decrypt_text_activity.xml @@ -1,14 +1,24 @@ - + android:layout_height="match_parent"> - + - + android:layout_height="match_parent" + android:orientation="vertical"> - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/edit_key_activity.xml b/OpenKeychain/src/main/res/layout/edit_key_activity.xml index 7e71ccf53..dfc12f328 100644 --- a/OpenKeychain/src/main/res/layout/edit_key_activity.xml +++ b/OpenKeychain/src/main/res/layout/edit_key_activity.xml @@ -1,15 +1,25 @@ - - + - + android:layout_height="match_parent"> - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/encrypt_content_adv_settings.xml b/OpenKeychain/src/main/res/layout/encrypt_content_adv_settings.xml index 67f7032c1..d14828ef7 100644 --- a/OpenKeychain/src/main/res/layout/encrypt_content_adv_settings.xml +++ b/OpenKeychain/src/main/res/layout/encrypt_content_adv_settings.xml @@ -1,24 +1,25 @@ + + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal"> + android:id="@+id/label_fileCompression" + android:layout_width="0dip" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:layout_weight="1" + android:paddingRight="10dip" + android:text="@string/label_file_compression" + android:textAppearance="?android:attr/textAppearanceSmall" /> + android:id="@+id/fileCompression" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" /> diff --git a/OpenKeychain/src/main/res/layout/encrypt_files_content.xml b/OpenKeychain/src/main/res/layout/encrypt_files_content.xml index b44a2bc4d..61c7e69c9 100644 --- a/OpenKeychain/src/main/res/layout/encrypt_files_content.xml +++ b/OpenKeychain/src/main/res/layout/encrypt_files_content.xml @@ -1,23 +1,33 @@ - + android:layout_height="match_parent"> - + - + android:layout_height="match_parent" + android:orientation="vertical"> - + - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/encrypt_text_content.xml b/OpenKeychain/src/main/res/layout/encrypt_text_content.xml index 809f00204..31ebef798 100644 --- a/OpenKeychain/src/main/res/layout/encrypt_text_content.xml +++ b/OpenKeychain/src/main/res/layout/encrypt_text_content.xml @@ -1,24 +1,33 @@ - + + + + - + - + - + - \ No newline at end of file + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/help_activity.xml b/OpenKeychain/src/main/res/layout/help_activity.xml index 3ad087da3..794964adb 100644 --- a/OpenKeychain/src/main/res/layout/help_activity.xml +++ b/OpenKeychain/src/main/res/layout/help_activity.xml @@ -1,17 +1,28 @@ - + android:layout_height="match_parent"> + + + + + android:layout_height="match_parent" + android:orientation="vertical"> - + - \ No newline at end of file + + + + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/import_keys_activity.xml b/OpenKeychain/src/main/res/layout/import_keys_activity.xml index 35818e4ea..78eaed02d 100644 --- a/OpenKeychain/src/main/res/layout/import_keys_activity.xml +++ b/OpenKeychain/src/main/res/layout/import_keys_activity.xml @@ -1,68 +1,78 @@ - + android:layout_height="match_parent"> - - - - - - - - - - - + + android:layout_height="match_parent" + android:orientation="vertical"> + + + + - + android:layout_height="16dp" /> + + + + + + + + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/key_server_preference.xml b/OpenKeychain/src/main/res/layout/key_server_preference.xml index 33866f746..259763e48 100644 --- a/OpenKeychain/src/main/res/layout/key_server_preference.xml +++ b/OpenKeychain/src/main/res/layout/key_server_preference.xml @@ -1,82 +1,94 @@ - + + + + android:layout_height="fill_parent" + android:orientation="vertical"> - - - - - -