Compare commits
14 Commits
42e7a4ef75
...
pvabel
| Author | SHA1 | Date | |
|---|---|---|---|
|
93e226f0b7
|
|||
|
e9af366986
|
|||
|
b0f0417d43
|
|||
|
|
8d0bd1f853 | ||
|
|
8322027cd7 | ||
|
|
f0f35c6a66 | ||
|
|
901a7a73bc | ||
|
|
4cf23609db | ||
|
|
2addbf07fe | ||
|
|
30aec855e2 | ||
|
|
095f0ba09c | ||
|
|
9c94fc1f4d | ||
|
|
9bf87cd816 | ||
|
|
65b94aa77e |
64
.tx/config
@@ -1,34 +1,46 @@
|
|||||||
[main]
|
[main]
|
||||||
host = https://www.transifex.com
|
host = https://www.transifex.com
|
||||||
lang_map = he: iw, zh_TW: zh-rTW, es_MX: es-rMX, pt_BR: pt-rBR, nl_BE: nl-rBE
|
lang_map = nl_BE: nl-rBE, he: iw, zh_TW: zh-rTW, es_MX: es-rMX, pt_BR: pt-rBR, pt_PT: pt-rPT
|
||||||
|
|
||||||
[open-keychain.strings]
|
[o:otf:p:open-keychain:r:advanced]
|
||||||
file_filter = OpenKeychain/src/main/res/values-<lang>/strings.xml
|
file_filter = OpenKeychain/src/main/res/raw-<lang>/advanced.md
|
||||||
source_file = OpenKeychain/src/main/res/values/strings.xml
|
source_file = OpenKeychain/src/main/res/raw/advanced.md
|
||||||
source_lang = en
|
source_lang = en
|
||||||
|
replace_edited_strings = false
|
||||||
|
keep_translations = false
|
||||||
|
|
||||||
[open-keychain.advanced]
|
[o:otf:p:open-keychain:r:help-about]
|
||||||
file_filter = OpenKeychain/src/main/res/raw-<lang>/advanced.md
|
file_filter = OpenKeychain/src/main/res/raw-<lang>/help_about.md
|
||||||
source_file = OpenKeychain/src/main/res/raw/advanced.md
|
source_file = OpenKeychain/src/main/res/raw/help_about.md
|
||||||
source_lang = en
|
source_lang = en
|
||||||
|
replace_edited_strings = false
|
||||||
|
keep_translations = false
|
||||||
|
|
||||||
[open-keychain.help-about]
|
[o:otf:p:open-keychain:r:help-certification]
|
||||||
file_filter = OpenKeychain/src/main/res/raw-<lang>/help_about.md
|
file_filter = OpenKeychain/src/main/res/raw-<lang>/help_certification.md
|
||||||
source_file = OpenKeychain/src/main/res/raw/help_about.md
|
source_file = OpenKeychain/src/main/res/raw/help_certification.md
|
||||||
source_lang = en
|
source_lang = en
|
||||||
|
replace_edited_strings = false
|
||||||
|
keep_translations = false
|
||||||
|
|
||||||
[open-keychain.help-changelog]
|
[o:otf:p:open-keychain:r:help-changelog]
|
||||||
file_filter = OpenKeychain/src/main/res/raw-<lang>/help_changelog.md
|
file_filter = OpenKeychain/src/main/res/raw-<lang>/help_changelog.md
|
||||||
source_file = OpenKeychain/src/main/res/raw/help_changelog.md
|
source_file = OpenKeychain/src/main/res/raw/help_changelog.md
|
||||||
source_lang = en
|
source_lang = en
|
||||||
|
replace_edited_strings = false
|
||||||
|
keep_translations = false
|
||||||
|
|
||||||
[open-keychain.help-certification]
|
[o:otf:p:open-keychain:r:help-start]
|
||||||
file_filter = OpenKeychain/src/main/res/raw-<lang>/help_certification.md
|
file_filter = OpenKeychain/src/main/res/raw-<lang>/help_start.md
|
||||||
source_file = OpenKeychain/src/main/res/raw/help_certification.md
|
source_file = OpenKeychain/src/main/res/raw/help_start.md
|
||||||
source_lang = en
|
source_lang = en
|
||||||
|
replace_edited_strings = false
|
||||||
|
keep_translations = false
|
||||||
|
|
||||||
[open-keychain.help-start]
|
[o:otf:p:open-keychain:r:strings]
|
||||||
file_filter = OpenKeychain/src/main/res/raw-<lang>/help_start.md
|
file_filter = OpenKeychain/src/main/res/values-<lang>/strings.xml
|
||||||
source_file = OpenKeychain/src/main/res/raw/help_start.md
|
source_file = OpenKeychain/src/main/res/values/strings.xml
|
||||||
source_lang = en
|
source_lang = en
|
||||||
|
replace_edited_strings = false
|
||||||
|
keep_translations = false
|
||||||
|
|
||||||
|
|||||||
@@ -95,8 +95,8 @@ android {
|
|||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion 15
|
minSdkVersion 15
|
||||||
targetSdkVersion 34
|
targetSdkVersion 34
|
||||||
versionCode 60300
|
versionCode 60400
|
||||||
versionName "6.0.3"
|
versionName "6.0.4"
|
||||||
applicationId "org.sufficientlysecure.keychain"
|
applicationId "org.sufficientlysecure.keychain"
|
||||||
// the androidjunitrunner is broken regarding coverage, see here:
|
// the androidjunitrunner is broken regarding coverage, see here:
|
||||||
// https://code.google.com/p/android/issues/detail?id=170607
|
// https://code.google.com/p/android/issues/detail?id=170607
|
||||||
@@ -111,6 +111,12 @@ android {
|
|||||||
sourceCompatibility JavaVersion.VERSION_17
|
sourceCompatibility JavaVersion.VERSION_17
|
||||||
targetCompatibility JavaVersion.VERSION_17
|
targetCompatibility JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = "17"
|
||||||
|
}
|
||||||
|
kotlin {
|
||||||
|
jvmToolchain(17)
|
||||||
|
}
|
||||||
|
|
||||||
testOptions.unitTests.all {
|
testOptions.unitTests.all {
|
||||||
// log results of tests to console, useful for travis
|
// log results of tests to console, useful for travis
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
|
||||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
|
||||||
</adaptive-icon>
|
|
||||||
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 12 KiB |
@@ -11,7 +11,6 @@ import androidx.annotation.StringRes;
|
|||||||
|
|
||||||
|
|
||||||
public class NotificationChannelManager {
|
public class NotificationChannelManager {
|
||||||
public static final String KEYSERVER_SYNC = "keyserverSync";
|
|
||||||
public static final String PERMISSION_REQUESTS = "permissionRequests";
|
public static final String PERMISSION_REQUESTS = "permissionRequests";
|
||||||
public static final String PASSPHRASE_CACHE = "passphraseCache";
|
public static final String PASSPHRASE_CACHE = "passphraseCache";
|
||||||
public static final String ORBOT = "orbot";
|
public static final String ORBOT = "orbot";
|
||||||
@@ -37,7 +36,6 @@ public class NotificationChannelManager {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
createNotificationChannel(KEYSERVER_SYNC, R.string.notify_channel_keysync, NotificationManager.IMPORTANCE_MIN);
|
|
||||||
createNotificationChannel(PERMISSION_REQUESTS, R.string.notify_channel_permission, NotificationManager.IMPORTANCE_MIN);
|
createNotificationChannel(PERMISSION_REQUESTS, R.string.notify_channel_permission, NotificationManager.IMPORTANCE_MIN);
|
||||||
createNotificationChannel(PASSPHRASE_CACHE, R.string.notify_channel_passcache, NotificationManager.IMPORTANCE_NONE);
|
createNotificationChannel(PASSPHRASE_CACHE, R.string.notify_channel_passcache, NotificationManager.IMPORTANCE_NONE);
|
||||||
createNotificationChannel(ORBOT, R.string.notify_channel_orbot, NotificationManager.IMPORTANCE_DEFAULT);
|
createNotificationChannel(ORBOT, R.string.notify_channel_orbot, NotificationManager.IMPORTANCE_DEFAULT);
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ import org.sufficientlysecure.keychain.operations.results.ImportKeyResult;
|
|||||||
import org.sufficientlysecure.keychain.service.ImportKeyringParcel;
|
import org.sufficientlysecure.keychain.service.ImportKeyringParcel;
|
||||||
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
|
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
|
||||||
|
|
||||||
|
import timber.log.Timber;
|
||||||
|
|
||||||
public class ImportKeysOperationCallback implements
|
public class ImportKeysOperationCallback implements
|
||||||
CryptoOperationHelper.Callback<ImportKeyringParcel, ImportKeyResult> {
|
CryptoOperationHelper.Callback<ImportKeyringParcel, ImportKeyResult> {
|
||||||
|
|
||||||
@@ -45,6 +47,7 @@ public class ImportKeysOperationCallback implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCryptoOperationSuccess(ImportKeyResult result) {
|
public void onCryptoOperationSuccess(ImportKeyResult result) {
|
||||||
|
Timber.d("+onCryptoOperationSuccess");
|
||||||
mResultListener.handleResult(result, mPosition);
|
mResultListener.handleResult(result, mPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,6 +58,7 @@ public class ImportKeysOperationCallback implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCryptoOperationError(ImportKeyResult result) {
|
public void onCryptoOperationError(ImportKeyResult result) {
|
||||||
|
Timber.d("+onCryptoOperationError");
|
||||||
mResultListener.handleResult(result, mPosition);
|
mResultListener.handleResult(result, mPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,9 +50,12 @@ import org.sufficientlysecure.keychain.pgp.Progressable;
|
|||||||
import org.sufficientlysecure.keychain.pgp.SignEncryptParcel;
|
import org.sufficientlysecure.keychain.pgp.SignEncryptParcel;
|
||||||
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
|
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
|
||||||
|
|
||||||
|
import timber.log.Timber;
|
||||||
|
|
||||||
|
|
||||||
public class KeychainServiceTask {
|
public class KeychainServiceTask {
|
||||||
public static KeychainServiceTask create(Activity activity) {
|
public static KeychainServiceTask create(Activity activity) {
|
||||||
|
Timber.d("+create#1");
|
||||||
Context context = activity.getApplicationContext();
|
Context context = activity.getApplicationContext();
|
||||||
KeyWritableRepository keyRepository = KeyWritableRepository.create(context);
|
KeyWritableRepository keyRepository = KeyWritableRepository.create(context);
|
||||||
return new KeychainServiceTask(context, keyRepository);
|
return new KeychainServiceTask(context, keyRepository);
|
||||||
|
|||||||
@@ -46,11 +46,14 @@ import org.sufficientlysecure.keychain.operations.ImportOperation;
|
|||||||
import org.sufficientlysecure.keychain.operations.results.ImportKeyResult;
|
import org.sufficientlysecure.keychain.operations.results.ImportKeyResult;
|
||||||
import org.sufficientlysecure.keychain.pgp.CanonicalizedKeyRing;
|
import org.sufficientlysecure.keychain.pgp.CanonicalizedKeyRing;
|
||||||
import org.sufficientlysecure.keychain.pgp.CanonicalizedKeyRing.VerificationStatus;
|
import org.sufficientlysecure.keychain.pgp.CanonicalizedKeyRing.VerificationStatus;
|
||||||
|
import org.sufficientlysecure.keychain.pgp.CanonicalizedPublicKey;
|
||||||
|
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
|
||||||
import org.sufficientlysecure.keychain.service.ImportKeyringParcel;
|
import org.sufficientlysecure.keychain.service.ImportKeyringParcel;
|
||||||
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
|
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
|
||||||
import org.sufficientlysecure.keychain.ui.keyview.ViewKeyActivity;
|
import org.sufficientlysecure.keychain.ui.keyview.ViewKeyActivity;
|
||||||
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
||||||
import org.sufficientlysecure.keychain.ui.util.Notify;
|
import org.sufficientlysecure.keychain.ui.util.Notify;
|
||||||
|
import org.sufficientlysecure.keychain.util.IterableIterator;
|
||||||
import org.sufficientlysecure.keychain.util.ParcelableFileCache;
|
import org.sufficientlysecure.keychain.util.ParcelableFileCache;
|
||||||
import timber.log.Timber;
|
import timber.log.Timber;
|
||||||
|
|
||||||
@@ -209,11 +212,17 @@ public class ImportKeysAdapter extends RecyclerView.Adapter<ImportKeysAdapter.Vi
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void getKey(int position, ImportKeysListEntry entry, boolean skipSave) {
|
private void getKey(int position, ImportKeysListEntry entry, boolean skipSave) {
|
||||||
|
Timber.d("+getKey position %d, entry %s, skipSave %s", position, entry.getKeyIdHex(), skipSave ? "true" : "false");
|
||||||
|
Timber.d("getKey => prepareKeyOperation");
|
||||||
ImportKeyringParcel inputParcel = prepareKeyOperation(entry, skipSave);
|
ImportKeyringParcel inputParcel = prepareKeyOperation(entry, skipSave);
|
||||||
ImportKeysResultListener listener = skipSave ? this : mListener;
|
ImportKeysResultListener listener = skipSave ? this : mListener;
|
||||||
|
Timber.d("getKey => new ImportKeysOperationCallback");
|
||||||
ImportKeysOperationCallback cb = new ImportKeysOperationCallback(listener, inputParcel, position);
|
ImportKeysOperationCallback cb = new ImportKeysOperationCallback(listener, inputParcel, position);
|
||||||
|
Timber.d("getKey => new CryptoOperationHelper");
|
||||||
CryptoOperationHelper opHelper = new CryptoOperationHelper<>(1, mActivity, cb, null);
|
CryptoOperationHelper opHelper = new CryptoOperationHelper<>(1, mActivity, cb, null);
|
||||||
|
Timber.d("getKey => opHelper.cryptoOperation");
|
||||||
opHelper.cryptoOperation();
|
opHelper.cryptoOperation();
|
||||||
|
Timber.d("-getKey");
|
||||||
}
|
}
|
||||||
|
|
||||||
private ImportKeyringParcel prepareKeyOperation(ImportKeysListEntry entry, boolean skipSave) {
|
private ImportKeyringParcel prepareKeyOperation(ImportKeysListEntry entry, boolean skipSave) {
|
||||||
@@ -264,9 +273,18 @@ public class ImportKeysAdapter extends RecyclerView.Adapter<ImportKeysAdapter.Vi
|
|||||||
ArrayList<CanonicalizedKeyRing> canKeyRings = result.mCanonicalizedKeyRings;
|
ArrayList<CanonicalizedKeyRing> canKeyRings = result.mCanonicalizedKeyRings;
|
||||||
if (canKeyRings.size() == 1) {
|
if (canKeyRings.size() == 1) {
|
||||||
CanonicalizedKeyRing keyRing = canKeyRings.get(0);
|
CanonicalizedKeyRing keyRing = canKeyRings.get(0);
|
||||||
Timber.e("Key ID: " + keyRing.getMasterKeyId() +
|
Timber.e("Key ID: %016X| isRev: " + keyRing.isRevoked() + " | isExp: " + keyRing.isExpired()
|
||||||
"| isRev: " + keyRing.isRevoked() + "| isExp: " + keyRing.isExpired()
|
+ " | isSec: " + keyRing.isSecure(), keyRing.getMasterKeyId());
|
||||||
+ "| isSec: " + keyRing.isSecure());
|
try {
|
||||||
|
Timber.e("[E]: %016X", keyRing.getEncryptId());
|
||||||
|
} catch (PgpKeyNotFoundException ignored) {}
|
||||||
|
try {
|
||||||
|
Timber.e("[S]: %016X", keyRing.getSigningId());
|
||||||
|
} catch (PgpKeyNotFoundException ignored) {}
|
||||||
|
|
||||||
|
for (CanonicalizedPublicKey val : keyRing.publicKeyIterator()) {
|
||||||
|
Timber.e("KEY %016X; [%s%s%s%s]", val.getKeyId(), val.canAuthenticate() ? "A" : "", val.canCertify() ? "C" : "", val.canEncrypt() ? "E" : "", val.canSign() ? "S" : "");
|
||||||
|
}
|
||||||
|
|
||||||
ImportKeysListEntry entry = mData.get(position);
|
ImportKeysListEntry entry = mData.get(position);
|
||||||
entry.setUpdated(result.isOkUpdated());
|
entry.setUpdated(result.isOkUpdated());
|
||||||
|
|||||||
@@ -264,6 +264,7 @@ public class CryptoOperationHelper<T extends Parcelable, S extends OperationResu
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void cryptoOperation(final CryptoInputParcel cryptoInput) {
|
public void cryptoOperation(final CryptoInputParcel cryptoInput) {
|
||||||
|
Timber.d("+cryptoOperation#1");
|
||||||
T operationInput = mCallback.createOperationInput();
|
T operationInput = mCallback.createOperationInput();
|
||||||
if (operationInput == null) {
|
if (operationInput == null) {
|
||||||
return;
|
return;
|
||||||
@@ -320,8 +321,12 @@ public class CryptoOperationHelper<T extends Parcelable, S extends OperationResu
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void cryptoOperation() {
|
public void cryptoOperation() {
|
||||||
|
Timber.d("+cryptoOperation");
|
||||||
operationStartTime = SystemClock.elapsedRealtime();
|
operationStartTime = SystemClock.elapsedRealtime();
|
||||||
cryptoOperation(CryptoInputParcel.createCryptoInputParcel(new Date()));
|
Timber.d("cryptoOperation => CryptoInputParcel.createCryptoInputParcel");
|
||||||
|
CryptoInputParcel tmp = CryptoInputParcel.createCryptoInputParcel(new Date());
|
||||||
|
Timber.d("cryptoOperation => cryptoOperation#1");
|
||||||
|
cryptoOperation(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@UiThread
|
@UiThread
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<translate android:fromYDelta="-10" android:toYDelta="0"
|
|
||||||
android:interpolator="@android:anim/decelerate_interpolator"
|
|
||||||
android:duration="200"
|
|
||||||
/>
|
|
||||||
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
|
|
||||||
android:interpolator="@android:anim/accelerate_interpolator"
|
|
||||||
android:duration="200"
|
|
||||||
/>
|
|
||||||
</set>
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<translate android:fromYDelta="10" android:toYDelta="0"
|
|
||||||
android:interpolator="@android:anim/decelerate_interpolator"
|
|
||||||
android:duration="200"
|
|
||||||
/>
|
|
||||||
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
|
|
||||||
android:interpolator="@android:anim/accelerate_interpolator"
|
|
||||||
android:duration="200"
|
|
||||||
/>
|
|
||||||
</set>
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
|
|
||||||
android:interpolator="@android:anim/accelerate_interpolator"
|
|
||||||
android:duration="300"
|
|
||||||
android:startOffset="400"
|
|
||||||
/>
|
|
||||||
</set>
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<translate android:fromYDelta="0.0" android:toYDelta="10"
|
|
||||||
android:interpolator="@android:anim/decelerate_interpolator"
|
|
||||||
android:duration="200"
|
|
||||||
/>
|
|
||||||
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
|
|
||||||
android:interpolator="@android:anim/decelerate_interpolator"
|
|
||||||
android:duration="150"
|
|
||||||
/>
|
|
||||||
</set>
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<translate android:fromYDelta="0.0" android:toYDelta="-10"
|
|
||||||
android:interpolator="@android:anim/decelerate_interpolator"
|
|
||||||
android:duration="200"
|
|
||||||
/>
|
|
||||||
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
|
|
||||||
android:interpolator="@android:anim/decelerate_interpolator"
|
|
||||||
android:duration="150"
|
|
||||||
/>
|
|
||||||
</set>
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:interpolator="@android:anim/decelerate_interpolator">
|
|
||||||
<scale
|
|
||||||
android:fromXScale="0.5"
|
|
||||||
android:toXScale="1.0"
|
|
||||||
android:fromYScale="0.5"
|
|
||||||
android:toYScale="1.0"
|
|
||||||
android:pivotX="50%p"
|
|
||||||
android:pivotY="50%p"
|
|
||||||
android:duration="@android:integer/config_mediumAnimTime" />
|
|
||||||
<alpha
|
|
||||||
android:fromAlpha="0"
|
|
||||||
android:toAlpha="1.0"
|
|
||||||
android:duration="@android:integer/config_mediumAnimTime" />
|
|
||||||
</set>
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:interpolator="@android:anim/decelerate_interpolator"
|
|
||||||
android:zAdjustment="top">
|
|
||||||
<scale
|
|
||||||
android:fromXScale="1.0"
|
|
||||||
android:toXScale="0.5"
|
|
||||||
android:fromYScale="1.0"
|
|
||||||
android:toYScale="0.5"
|
|
||||||
android:pivotX="50%p"
|
|
||||||
android:pivotY="50%p"
|
|
||||||
android:duration="@android:integer/config_mediumAnimTime" />
|
|
||||||
<alpha
|
|
||||||
android:fromAlpha="1.0"
|
|
||||||
android:toAlpha="0"
|
|
||||||
android:duration="@android:integer/config_mediumAnimTime" />
|
|
||||||
</set>
|
|
||||||
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 161 B |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 923 B |
|
Before Width: | Height: | Size: 416 B |
|
Before Width: | Height: | Size: 227 B |
|
Before Width: | Height: | Size: 1018 B |
|
Before Width: | Height: | Size: 326 B |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 381 B |
|
Before Width: | Height: | Size: 588 B |
|
Before Width: | Height: | Size: 920 B |
|
Before Width: | Height: | Size: 300 B |
|
Before Width: | Height: | Size: 551 B |
|
Before Width: | Height: | Size: 409 B |
|
Before Width: | Height: | Size: 408 B |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 740 B |
|
Before Width: | Height: | Size: 381 B |
|
Before Width: | Height: | Size: 576 B |
|
Before Width: | Height: | Size: 301 B |
|
Before Width: | Height: | Size: 183 B |
|
Before Width: | Height: | Size: 198 B |
|
Before Width: | Height: | Size: 247 B |
|
Before Width: | Height: | Size: 522 B |
|
Before Width: | Height: | Size: 314 B |
|
Before Width: | Height: | Size: 386 B |
|
Before Width: | Height: | Size: 453 B |
|
Before Width: | Height: | Size: 350 B |
|
Before Width: | Height: | Size: 572 B |
|
Before Width: | Height: | Size: 942 B |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 282 B |
|
Before Width: | Height: | Size: 443 B |
|
Before Width: | Height: | Size: 614 B |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 792 B |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 806 B |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 544 B |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 678 B |
|
Before Width: | Height: | Size: 142 B |
|
Before Width: | Height: | Size: 913 B |
|
Before Width: | Height: | Size: 751 B |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 623 B |
|
Before Width: | Height: | Size: 307 B |
|
Before Width: | Height: | Size: 157 B |
|
Before Width: | Height: | Size: 770 B |
|
Before Width: | Height: | Size: 244 B |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 288 B |
|
Before Width: | Height: | Size: 406 B |
|
Before Width: | Height: | Size: 540 B |
|
Before Width: | Height: | Size: 230 B |
|
Before Width: | Height: | Size: 370 B |
|
Before Width: | Height: | Size: 305 B |
|
Before Width: | Height: | Size: 298 B |
|
Before Width: | Height: | Size: 701 B |
|
Before Width: | Height: | Size: 485 B |
|
Before Width: | Height: | Size: 288 B |
|
Before Width: | Height: | Size: 431 B |
|
Before Width: | Height: | Size: 248 B |
|
Before Width: | Height: | Size: 122 B |
|
Before Width: | Height: | Size: 133 B |
|
Before Width: | Height: | Size: 168 B |
|
Before Width: | Height: | Size: 356 B |
|
Before Width: | Height: | Size: 224 B |
|
Before Width: | Height: | Size: 317 B |
|
Before Width: | Height: | Size: 322 B |
|
Before Width: | Height: | Size: 253 B |
|
Before Width: | Height: | Size: 423 B |
|
Before Width: | Height: | Size: 647 B |