Merge branch 'master' into auto-unlock-after-autofill

This commit is contained in:
Jakob Nixdorf 2021-02-26 07:08:57 +01:00 committed by GitHub
commit 7fef22a3ea
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
198 changed files with 5537 additions and 1421 deletions

View file

@ -7,7 +7,7 @@ assignees: flocke, RichyHBM, ziegenberg
---
Please fill in **all the information below** to help speed up the process!
<!-- Please fill in **all the information below** to help speed up the process! -->
**Name**:
**Website**:

View file

@ -19,6 +19,7 @@
* Bug fix: Crash when clicking on an entry multiple times (Issue #631, PR #634 by @jsoberg)
* Bug fix: Crash during settings changes (Issue #639, PR #640 by @jsoberg)
* Bug fix: Don't use regionalized language codes (Issue #567)
* Bug fix: Report backup failure correctly (Issue #671)
* Internal: Update Gradle, build tools and dependencies
* Internal: Min API Level set to 22 (Lollipop 5.1)
* Internal: Refactoring and reducing build warnings

View file

@ -1,7 +1,7 @@
# andOTP - Android OTP Authenticator
[![Build Status](https://travis-ci.org/andOTP/andOTP.svg?branch=master)](https://travis-ci.org/andOTP/andOTP)
[![Current release](https://img.shields.io/github/release/andOTP/andOTP/all.svg)](https://github.com/andOTP/andOTP/releases/download/v0.8.0-beta2/andOTP_v0.8.0-beta2.apk)
[![Current release](https://img.shields.io/github/release/andOTP/andOTP/all.svg)](https://github.com/andOTP/andOTP/releases/download/v0.8.0/andOTP_v0.8.0.apk)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/andotp/localized.svg)](https://crowdin.com/project/andotp)
[![Chat - Telegram](https://img.shields.io/badge/chat-Telegram-blue.svg)](https://t.me/andOTP)
[![Chat - Matrix](https://img.shields.io/badge/chat-Matrix-blue.svg)](https://matrix.to/#/#andOTP:privacytools.io)

View file

@ -8,8 +8,8 @@ android {
applicationId "org.shadowice.flocke.andotp"
minSdkVersion 22
targetSdkVersion 29
versionCode 34
versionName "0.8.0-beta2"
versionCode 35
versionName "0.8.0"
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@ -57,12 +57,12 @@ android {
dependencies {
def lifecycle_version = "2.2.0"
implementation 'androidx.media:media:1.2.0'
implementation 'androidx.media:media:1.2.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation "androidx.lifecycle:lifecycle-process:${lifecycle_version}"
implementation "androidx.lifecycle:lifecycle-common-java8:${lifecycle_version}"
implementation 'com.google.android.material:material:1.2.1'
@ -71,13 +71,14 @@ dependencies {
implementation "commons-codec:commons-codec:1.15"
implementation "com.github.aakira:expandable-layout:1.6.0"
implementation "com.heinrichreimersoftware:material-intro:2.0.0"
implementation "com.journeyapps:zxing-android-embedded:3.6.0"
implementation("com.journeyapps:zxing-android-embedded:4.1.0"){ transitive = false }
implementation "com.google.zxing:core:3.3.0" // Keep pinned to 3.3.0 to support SDK versions below 24
implementation "com.vanniktech:vntnumberpickerpreference:1.0.0"
implementation "me.zhanghai.android.materialprogressbar:library:1.6.1"
implementation "org.sufficientlysecure:openpgp-api:12.0"
implementation "com.leinardi.android:speed-dial:3.1.1"
implementation "com.mikepenz:aboutlibraries:6.2.3"
implementation "com.mikepenz:aboutlibraries:6.2.3" // Supporting a newer version will need some work
androidTestImplementation "androidx.test.espresso:espresso-core:3.3.0"
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.10'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.1'
}

View file

@ -6,6 +6,8 @@
android:installLocation="auto"
package="org.shadowice.flocke.andotp">
<uses-sdk tools:overrideLibrary="com.google.zxing.client.android" /> <!-- Needed to support SDK below 24, see build.gradle -->
<application
android:allowBackup="true"
android:backupAgent=".Utilities.BackupAgent"

View file

@ -22,188 +22,266 @@
package org.shadowice.flocke.andotp.Activities;
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import com.google.android.material.textfield.TextInputLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ProcessLifecycleOwner;
import android.text.Editable;
import android.text.InputType;
import android.text.method.PasswordTransformationMethod;
import android.util.Base64;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewStub;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.shadowice.flocke.andotp.R;
import org.shadowice.flocke.andotp.Tasks.AuthenticationTask;
import org.shadowice.flocke.andotp.Tasks.AuthenticationTask.Result;
import org.shadowice.flocke.andotp.Utilities.Constants;
import org.shadowice.flocke.andotp.Utilities.EncryptionHelper;
import org.shadowice.flocke.andotp.View.AutoFillable.AutoFillableTextInputEditText;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.Arrays;
import static org.shadowice.flocke.andotp.Utilities.Constants.AuthMethod;
public class AuthenticateActivity extends ThemedActivity
implements EditText.OnEditorActionListener, View.OnClickListener {
private String password;
public class AuthenticateActivity extends BaseActivity
implements EditText.OnEditorActionListener, View.OnClickListener {
private final AutoFillableTextInputEditText.AutoFillTextListener autoFillTextListener = text -> checkPassword(text.toString());
AuthMethod authMethod;
String newEncryption = "";
boolean oldPassword = false;
private static final String TAG_TASK_FRAGMENT = "AuthenticateActivity.TaskFragmentTag";
private AuthMethod authMethod;
private String newEncryption = "";
private String existingAuthCredentials;
private boolean isAuthUpgrade = false;
private ProcessLifecycleObserver observer;
private TextInputLayout passwordLayout;
AutoFillableTextInputEditText passwordInput;
private Button unlockButton;
private ProgressBar unlockProgress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (! settings.getScreenshotsEnabled())
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
authMethod = settings.getAuthMethod();
newEncryption = getIntent().getStringExtra(Constants.EXTRA_AUTH_NEW_ENCRYPTION);
existingAuthCredentials = settings.getAuthCredentials();
if (existingAuthCredentials.isEmpty()) {
existingAuthCredentials = settings.getOldCredentials(authMethod);
isAuthUpgrade = true;
}
// If our password is still empty at this point, we can't do anything.
if (existingAuthCredentials.isEmpty()) {
int missingPwResId = (authMethod == AuthMethod.PASSWORD)
? R.string.auth_toast_password_missing : R.string.auth_toast_pin_missing;
Toast.makeText(this, missingPwResId, Toast.LENGTH_LONG).show();
finishWithResult(true, null);
}
// If we're not using password or pin for auth method, we have nothing to authenticate here.
if (authMethod != AuthMethod.PASSWORD && authMethod != AuthMethod.PIN) {
finishWithResult(true, null);
}
setTitle(R.string.auth_activity_title);
if (! settings.getScreenshotsEnabled())
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
setContentView(R.layout.activity_container);
initToolbar();
initPasswordViews();
setBroadcastCallback(() -> {
if (settings.getRelockOnScreenOff()) {
cancelBackgroundTask();
}
});
observer = new ProcessLifecycleObserver();
ProcessLifecycleOwner.get().getLifecycle()
.addObserver(observer);
getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
private void initToolbar() {
Toolbar toolbar = findViewById(R.id.container_toolbar);
toolbar.setNavigationIcon(null);
setSupportActionBar(toolbar);
}
private void initPasswordViews() {
ViewStub stub = findViewById(R.id.container_stub);
stub.setLayoutResource(R.layout.content_authenticate);
View v = stub.inflate();
Intent callingIntent = getIntent();
int labelMsg = callingIntent.getIntExtra(Constants.EXTRA_AUTH_MESSAGE, R.string.auth_msg_authenticate);
newEncryption = callingIntent.getStringExtra(Constants.EXTRA_AUTH_NEW_ENCRYPTION);
initPasswordLabelView(v);
initPasswordLayoutView(v);
initPasswordInputView(v);
initUnlockViews(v);
}
private void initPasswordLabelView(View v) {
int labelMsg = getIntent().getIntExtra(Constants.EXTRA_AUTH_MESSAGE, R.string.auth_msg_authenticate);
TextView passwordLabel = v.findViewById(R.id.passwordLabel);
TextInputLayout passwordLayout = v.findViewById(R.id.passwordLayout);
passwordInput = v.findViewById(R.id.passwordEdit);
if (settings.getBlockAccessibility())
passwordLayout.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && settings.getBlockAutofill())
passwordLayout.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
passwordLabel.setText(labelMsg);
}
authMethod = settings.getAuthMethod();
password = settings.getAuthCredentials();
if (password.isEmpty()) {
password = settings.getOldCredentials(authMethod);
oldPassword = true;
private void initPasswordLayoutView(View v) {
passwordLayout = v.findViewById(R.id.passwordLayout);
int hintResId = (authMethod == AuthMethod.PASSWORD) ? R.string.auth_hint_password : R.string.auth_hint_pin;
passwordLayout.setHint(getString(hintResId));
if (settings.getBlockAccessibility()) {
passwordLayout.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
}
if (authMethod == AuthMethod.PASSWORD) {
if (password.isEmpty()) {
Toast.makeText(this, R.string.auth_toast_password_missing, Toast.LENGTH_LONG).show();
finishWithResult(true, null);
} else {
passwordLayout.setHint(getString(R.string.auth_hint_password));
passwordInput.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
} else if (authMethod == AuthMethod.PIN) {
if (password.isEmpty()) {
Toast.makeText(this, R.string.auth_toast_pin_missing, Toast.LENGTH_LONG).show();
finishWithResult(true, null);
} else {
passwordLayout.setHint(getString(R.string.auth_hint_pin));
passwordInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
}
} else {
finishWithResult(true, null);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && settings.getBlockAutofill()) {
passwordLayout.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
}
}
private void initPasswordInputView(View v) {
passwordInput = v.findViewById(R.id.passwordEdit);
int inputType = (authMethod == AuthMethod.PASSWORD)
? (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)
: (InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
passwordInput.setInputType(inputType);
passwordInput.setTransformationMethod(new PasswordTransformationMethod());
passwordInput.setOnEditorActionListener(this);
}
Button unlockButton = v.findViewById(R.id.buttonUnlock);
private void initUnlockViews(View v) {
unlockButton = v.findViewById(R.id.buttonUnlock);
unlockButton.setOnClickListener(this);
unlockProgress = v.findViewById(R.id.unlockProgress);
}
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
private void cancelBackgroundTask() {
TaskFragment taskFragment = findTaskFragment();
if (taskFragment != null) {
taskFragment.task.cancel();
}
setupUiForTaskState(false);
}
private class ProcessLifecycleObserver implements DefaultLifecycleObserver {
@Override
public void onStop(LifecycleOwner owner) {
if (settings.getRelockOnBackground()) {
cancelBackgroundTask();
}
}
}
@Override
public void onResume() {
super.onResume();
checkBackgroundTask();
}
private void checkBackgroundTask() {
TaskFragment taskFragment = findTaskFragment();
if (taskFragment != null) {
if (taskFragment.task.isCanceled()) {
// The task was canceled, so remove the task fragment and reset password input.
getFragmentManager().beginTransaction()
.remove(taskFragment)
.commit();
resetPasswordInput();
} else {
taskFragment.task.setCallback(this::handleResult);
setupUiForTaskState(true);
}
}
}
private void resetPasswordInput() {
passwordInput.setText("");
passwordInput.requestFocus();
InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.showSoftInput(passwordInput, 0);
}
@Nullable
private TaskFragment findTaskFragment() {
return (TaskFragment) getFragmentManager().findFragmentByTag(TAG_TASK_FRAGMENT);
}
private void setupUiForTaskState(boolean isTaskRunning) {
passwordLayout.setEnabled(!isTaskRunning);
passwordInput.setEnabled(!isTaskRunning);
unlockButton.setEnabled(!isTaskRunning);
unlockButton.setVisibility(isTaskRunning? View.INVISIBLE : View.VISIBLE);
unlockProgress.setVisibility(isTaskRunning ? View.VISIBLE : View.GONE);
}
@Override
public void onClick(View view) {
checkPassword(passwordInput.getText().toString());
Editable text = passwordInput.getText();
startAuthTask(text != null ? text.toString() : "");
}
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
checkPassword(v.getText().toString());
startAuthTask(v.getText().toString());
return true;
}
return false;
}
public void checkPassword(String plainPassword) {
if (! oldPassword) {
try {
EncryptionHelper.PBKDF2Credentials credentials = EncryptionHelper.generatePBKDF2Credentials(plainPassword, settings.getSalt(), settings.getIterations());
byte[] passwordArray = Base64.decode(password, Base64.URL_SAFE);
private void startAuthTask(String plainPassword) {
TaskFragment taskFragment = findTaskFragment();
// Don't start a task if we already have an active task running.
if (taskFragment == null || taskFragment.task.isCanceled()) {
AuthenticationTask task = new AuthenticationTask(this, isAuthUpgrade, existingAuthCredentials, plainPassword);
task.setCallback(this::handleResult);
if (Arrays.equals(passwordArray, credentials.password)) {
finishWithResult(true, credentials.key);
} else {
finishWithResult(false, null);
}
} catch (NoSuchAlgorithmException | InvalidKeySpecException | IllegalArgumentException e) {
e.printStackTrace();
finishWithResult(false, null);
}
} else {
String hashedPassword = new String(Hex.encodeHex(DigestUtils.sha256(plainPassword)));
if (hashedPassword.equals(password)) {
byte[] key = settings.setAuthCredentials(plainPassword);
if (key == null)
Toast.makeText(this, R.string.settings_toast_auth_upgrade_failed, Toast.LENGTH_LONG).show();
if (authMethod == AuthMethod.PASSWORD)
settings.removeAuthPasswordHash();
else if (authMethod == AuthMethod.PIN)
settings.removeAuthPINHash();
finishWithResult(true, key);
} else {
finishWithResult(false, null);
if (taskFragment == null) {
taskFragment = new TaskFragment();
getFragmentManager()
.beginTransaction()
.add(taskFragment, TAG_TASK_FRAGMENT)
.commit();
}
taskFragment.startTask(task);
setupUiForTaskState(true);
}
}
// End with a result
public void finishWithResult(boolean success, byte[] key) {
private void handleResult(Result result) {
if (result.authUpgradeFailed) {
Toast.makeText(this, R.string.settings_toast_auth_upgrade_failed, Toast.LENGTH_LONG).show();
}
finishWithResult(result.encryptionKey != null, result.encryptionKey);
}
private void finishWithResult(boolean success, byte[] encryptionKey) {
Intent data = new Intent();
if (newEncryption != null && ! newEncryption.isEmpty())
if (newEncryption != null && !newEncryption.isEmpty())
data.putExtra(Constants.EXTRA_AUTH_NEW_ENCRYPTION, newEncryption);
if (key != null)
data.putExtra(Constants.EXTRA_AUTH_PASSWORD_KEY, key);
if (encryptionKey != null)
data.putExtra(Constants.EXTRA_AUTH_PASSWORD_KEY, encryptionKey);
if (success)
setResult(RESULT_OK, data);
finish();
}
// Go back to the main activity
@Override
public void onBackPressed() {
finishWithResult(false, null);
@ -218,9 +296,47 @@ public class AuthenticateActivity extends ThemedActivity
}
}
@Override
protected void onPause() {
super.onPause();
// We don't want the task to callback to a dead activity and cause a memory leak, so null it here.
TaskFragment taskFragment = findTaskFragment();
if (taskFragment != null) {
taskFragment.task.setCallback(null);
}
}
@Override
protected void onStop() {
passwordInput.setAutoFillTextListener(null);
super.onStop();
}
@Override
protected void onDestroy() {
ProcessLifecycleOwner.get().getLifecycle()
.removeObserver(observer);
super.onDestroy();
}
@Override
protected boolean shouldDestroyOnScreenOff() {
return false;
}
/** Retained instance fragment to hold a running {@link AuthenticationTask} between configuration changes.*/
public static class TaskFragment extends Fragment {
AuthenticationTask task;
public TaskFragment() {
super();
setRetainInstance(true);
}
public void startTask(@NonNull AuthenticationTask task) {
this.task = task;
task.execute();
}
}
}

View file

@ -23,6 +23,7 @@
package org.shadowice.flocke.andotp.Activities;
import android.app.AlertDialog;
import android.app.Fragment;
import android.app.PendingIntent;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
@ -30,17 +31,25 @@ import android.content.Intent;
import android.content.IntentSender;
import android.net.Uri;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.ViewStub;
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ProgressBar;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.material.switchmaterial.SwitchMaterial;
import org.openintents.openpgp.OpenPgpError;
import org.openintents.openpgp.OpenPgpSignatureResult;
import org.openintents.openpgp.util.OpenPgpApi;
@ -48,26 +57,35 @@ import org.openintents.openpgp.util.OpenPgpServiceConnection;
import org.shadowice.flocke.andotp.Database.Entry;
import org.shadowice.flocke.andotp.Dialogs.PasswordEntryDialog;
import org.shadowice.flocke.andotp.R;
import org.shadowice.flocke.andotp.Tasks.EncryptedBackupTask;
import org.shadowice.flocke.andotp.Tasks.EncryptedRestoreTask;
import org.shadowice.flocke.andotp.Tasks.GenericBackupTask;
import org.shadowice.flocke.andotp.Tasks.GenericRestoreTask;
import org.shadowice.flocke.andotp.Tasks.PGPBackupTask;
import org.shadowice.flocke.andotp.Tasks.PGPRestoreTask;
import org.shadowice.flocke.andotp.Tasks.PlainTextBackupTask;
import org.shadowice.flocke.andotp.Tasks.PlainTextRestoreTask;
import org.shadowice.flocke.andotp.Utilities.BackupHelper;
import org.shadowice.flocke.andotp.Utilities.Constants;
import org.shadowice.flocke.andotp.Utilities.DatabaseHelper;
import org.shadowice.flocke.andotp.Utilities.EncryptionHelper;
import org.shadowice.flocke.andotp.Utilities.StorageAccessHelper;
import org.shadowice.flocke.andotp.Utilities.Tools;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import javax.crypto.SecretKey;
public class BackupActivity extends BaseActivity {
private final static String TAG = BackupActivity.class.getSimpleName();
private static final String TAG_BACKUP_TASK_FRAGMENT = "BackupActivity.BackupTaskFragmentTag";
private static final String TAG_RESTORE_TASK_FRAGMENT = "BackupActivity.RestoreTaskFragmentTag";
private Constants.BackupType backupType = Constants.BackupType.ENCRYPTED;
private SecretKey encryptionKey = null;
private OpenPgpServiceConnection pgpServiceConnection;
@ -76,9 +94,17 @@ public class BackupActivity extends BaseActivity {
private Uri encryptTargetFile;
private Uri decryptSourceFile;
private Switch replace;
private Button btnBackup;
private Button btnRestore;
private TextView txtBackupLabel;
private TextView txtBackupWarning;
private SwitchMaterial swReplace;
private CheckBox chkOldFormat;
private ProgressBar progressBackup;
private ProgressBar progressRestore;
private boolean reload = false;
private boolean allowExit = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -98,96 +124,119 @@ public class BackupActivity extends BaseActivity {
byte[] keyMaterial = callingIntent.getByteArrayExtra(Constants.EXTRA_BACKUP_ENCRYPTION_KEY);
encryptionKey = EncryptionHelper.generateSymmetricKey(keyMaterial);
// Plain-text
Spinner spBackupType = v.findViewById(R.id.backupType);
btnBackup = v.findViewById(R.id.buttonBackup);
btnRestore = v.findViewById(R.id.buttonRestore);
txtBackupLabel = v.findViewById(R.id.backupLabel);
txtBackupWarning = v.findViewById(R.id.backupErrorLabel);
swReplace = v.findViewById(R.id.backup_replace);
chkOldFormat = v.findViewById(R.id.restoreOldCrypt);
progressBackup = v.findViewById(R.id.progressBarBackup);
progressRestore = v.findViewById(R.id.progressBarRestore);
LinearLayout backupPlain = v.findViewById(R.id.button_backup_plain);
LinearLayout restorePlain = v.findViewById(R.id.button_restore_plain);
setupBackupType(settings.getDefaultBackupType());
spBackupType.setSelection(backupType.ordinal());
backupPlain.setOnClickListener(new View.OnClickListener() {
spBackupType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onClick(View view) {
backupPlainWithWarning();
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
Constants.BackupType type = Constants.BackupType.values()[i];
setupBackupType(type);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) { }
});
restorePlain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showOpenFileSelector(Constants.INTENT_BACKUP_OPEN_DOCUMENT_PLAIN);
}
});
// Password
TextView cryptSetup = v.findViewById(R.id.msg_crypt_setup);
LinearLayout backupCrypt = v.findViewById(R.id.button_backup_crypt);
LinearLayout restoreCrypt = v.findViewById(R.id.button_restore_crypt);
LinearLayout restoreCryptOld = v.findViewById(R.id.button_restore_crypt_old);
if (settings.getBackupPasswordEnc().isEmpty()) {
cryptSetup.setVisibility(View.VISIBLE);
} else {
cryptSetup.setVisibility(View.GONE);
}
backupCrypt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showSaveFileSelector(Constants.BACKUP_MIMETYPE_CRYPT, Constants.BackupType.ENCRYPTED, Constants.INTENT_BACKUP_SAVE_DOCUMENT_CRYPT);
}
});
restoreCrypt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showOpenFileSelector(Constants.INTENT_BACKUP_OPEN_DOCUMENT_CRYPT);
}
});
restoreCryptOld.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showOpenFileSelector(Constants.INTENT_BACKUP_OPEN_DOCUMENT_CRYPT_OLD);
}
});
// OpenPGP
String PGPProvider = settings.getOpenPGPProvider();
pgpEncryptionUserIDs = settings.getOpenPGPEncryptionUserIDs();
TextView setupPGP = v.findViewById(R.id.msg_openpgp_setup);
LinearLayout backupPGP = v.findViewById(R.id.button_backup_openpgp);
LinearLayout restorePGP = v.findViewById(R.id.button_restore_openpgp);
if (TextUtils.isEmpty(PGPProvider)) {
setupPGP.setVisibility(View.VISIBLE);
backupPGP.setVisibility(View.GONE);
restorePGP.setVisibility(View.GONE);
} else if (TextUtils.isEmpty(pgpEncryptionUserIDs)){
setupPGP.setVisibility(View.VISIBLE);
setupPGP.setText(R.string.backup_desc_openpgp_keyid);
backupPGP.setVisibility(View.GONE);
} else {
pgpServiceConnection = new OpenPgpServiceConnection(BackupActivity.this.getApplicationContext(), PGPProvider);
pgpServiceConnection.bindToService();
backupPGP.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
btnBackup.setOnClickListener(view -> {
switch (backupType) {
case PLAIN_TEXT:
backupPlainWithWarning();
break;
case ENCRYPTED:
showSaveFileSelector(Constants.BACKUP_MIMETYPE_CRYPT, Constants.BackupType.ENCRYPTED, Constants.INTENT_BACKUP_SAVE_DOCUMENT_CRYPT);
break;
case OPEN_PGP:
showSaveFileSelector(Constants.BACKUP_MIMETYPE_PGP, Constants.BackupType.OPEN_PGP, Constants.INTENT_BACKUP_SAVE_DOCUMENT_PGP);
}
});
break;
}
});
restorePGP.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
btnRestore.setOnClickListener(view -> {
switch (backupType) {
case PLAIN_TEXT:
showOpenFileSelector(Constants.INTENT_BACKUP_OPEN_DOCUMENT_PLAIN);
break;
case ENCRYPTED:
if (chkOldFormat.isChecked())
showOpenFileSelector(Constants.INTENT_BACKUP_OPEN_DOCUMENT_CRYPT_OLD);
else
showOpenFileSelector(Constants.INTENT_BACKUP_OPEN_DOCUMENT_CRYPT);
break;
case OPEN_PGP:
showOpenFileSelector(Constants.INTENT_BACKUP_OPEN_DOCUMENT_PGP);
break;
}
});
}
private void setupBackupType(Constants.BackupType type) {
switch (type) {
case PLAIN_TEXT:
txtBackupLabel.setText(R.string.backup_label_warning_plain);
chkOldFormat.setVisibility(View.GONE);
txtBackupWarning.setVisibility(View.GONE);
btnBackup.setEnabled(true);
btnRestore.setEnabled(true);
break;
case ENCRYPTED:
txtBackupLabel.setText(R.string.backup_label_crypt);
chkOldFormat.setVisibility(View.VISIBLE);
txtBackupWarning.setVisibility(View.GONE);
btnBackup.setEnabled(true);
btnRestore.setEnabled(true);
break;
case OPEN_PGP:
txtBackupLabel.setText(R.string.backup_label_pgp);
chkOldFormat.setVisibility(View.GONE);
String PGPProvider = settings.getOpenPGPProvider();
pgpEncryptionUserIDs = settings.getOpenPGPEncryptionUserIDs();
if (TextUtils.isEmpty(PGPProvider)) {
txtBackupWarning.setText(R.string.backup_desc_openpgp_provider);
txtBackupWarning.setVisibility(View.VISIBLE);
btnBackup.setEnabled(false);
btnRestore.setEnabled(false);
} else if (TextUtils.isEmpty(pgpEncryptionUserIDs)){
txtBackupWarning.setText(R.string.backup_desc_openpgp_keyid);
txtBackupWarning.setVisibility(View.VISIBLE);
btnBackup.setEnabled(false);
btnRestore.setEnabled(false);
} else {
txtBackupWarning.setVisibility(View.GONE);
btnBackup.setEnabled(true);
btnRestore.setEnabled(true);
pgpServiceConnection = new OpenPgpServiceConnection(BackupActivity.this.getApplicationContext(), PGPProvider);
pgpServiceConnection.bindToService();
}
});
break;
}
replace = v.findViewById(R.id.backup_replace);
backupType = type;
settings.setDefaultBackupType(type);
}
// End with a result
@ -201,14 +250,18 @@ public class BackupActivity extends BaseActivity {
// Go back to the main activity
@Override
public boolean onSupportNavigateUp() {
finishWithResult();
if (allowExit)
finishWithResult();
return true;
}
@Override
public void onBackPressed() {
finishWithResult();
super.onBackPressed();
if (allowExit) {
finishWithResult();
super.onBackPressed();
}
}
@Override
@ -219,6 +272,85 @@ public class BackupActivity extends BaseActivity {
pgpServiceConnection.unbindFromService();
}
// TODO: Show more information about the finished backup (e.g. a notification with the file name)
private void notifyBackupState(int msgId) {
Toast.makeText(this, msgId, Toast.LENGTH_LONG).show();
}
private void handleBackupTaskResult(GenericBackupTask.BackupTaskResult result) {
showBackupProgress(false);
if (result.messageId != 0)
notifyBackupState(result.messageId);
else
if (!result.success)
notifyBackupState(R.string.backup_toast_export_failed);
// Clean up the task fragment
BackupTaskFragment backupTaskFragment = findBackupTaskFragment();
if (backupTaskFragment != null) {
getFragmentManager().beginTransaction()
.remove(backupTaskFragment)
.commit();
}
if (result.success)
finishWithResult();
}
private void handleRestoreTaskResult(GenericRestoreTask.RestoreTaskResult result) {
if (result.success) {
if (result.isPGP) {
InputStream is = new ByteArrayInputStream(result.payload.getBytes(StandardCharsets.UTF_8));
ByteArrayOutputStream os = new ByteArrayOutputStream();
OpenPgpApi api = new OpenPgpApi(this, pgpServiceConnection.getService());
Intent resultIntent = api.executeApi(result.decryptIntent, is, os);
handleOpenPGPResult(resultIntent, os, result.uri, Constants.INTENT_BACKUP_DECRYPT_PGP);
} else {
restoreEntries(result.payload, false);
}
} else {
if (result.messageId != 0)
notifyBackupState(result.messageId);
else
notifyBackupState(R.string.backup_toast_import_failed);
}
showRestoreProgress(false);
// Clean up the task fragment
RestoreTaskFragment restoreTaskFragment = findRestoreTaskFragment();
if (restoreTaskFragment != null) {
getFragmentManager().beginTransaction()
.remove(restoreTaskFragment)
.commit();
}
if (result.success && !result.isPGP)
finishWithResult();
}
private void toggleInProgressMode(boolean running) {
allowExit = !running;
btnBackup.setEnabled(!running);
btnRestore.setEnabled(!running);
chkOldFormat.setEnabled(!running);
swReplace.setEnabled(!running);
}
private void showBackupProgress(boolean running) {
toggleInProgressMode(running);
progressBackup.setVisibility(running ? View.VISIBLE : View.GONE);
}
private void showRestoreProgress(boolean running) {
toggleInProgressMode(running);
progressRestore.setVisibility(running ? View.VISIBLE : View.GONE);
}
// Get the result from external activities
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
@ -291,26 +423,11 @@ public class BackupActivity extends BaseActivity {
} else {
if (settings.isBackupLocationSet()) {
if (intentId == Constants.INTENT_BACKUP_SAVE_DOCUMENT_PLAIN) {
BackupHelper.BackupFile plainBackupFile = BackupHelper.backupFile(this, settings.getBackupLocation(), Constants.BackupType.PLAIN_TEXT);
if (plainBackupFile.file != null)
doBackupPlain(plainBackupFile.file.getUri());
else
Toast.makeText(this, plainBackupFile.errorMessage, Toast.LENGTH_LONG).show();
doBackupPlain(null);
} else if (intentId == Constants.INTENT_BACKUP_SAVE_DOCUMENT_CRYPT) {
BackupHelper.BackupFile cryptBackupFile = BackupHelper.backupFile(this, settings.getBackupLocation(), Constants.BackupType.ENCRYPTED);
if (cryptBackupFile.file != null)
doBackupCrypt(cryptBackupFile.file.getUri());
else
Toast.makeText(this, cryptBackupFile.errorMessage, Toast.LENGTH_LONG).show();
doBackupCrypt(null);
} else if (intentId == Constants.INTENT_BACKUP_SAVE_DOCUMENT_PGP) {
BackupHelper.BackupFile pgpBackupFile = BackupHelper.backupFile(this, settings.getBackupLocation(), Constants.BackupType.OPEN_PGP);
if (pgpBackupFile.file != null)
backupEncryptedWithPGP(pgpBackupFile.file.getUri(), null);
else
Toast.makeText(this, pgpBackupFile.errorMessage, Toast.LENGTH_LONG).show();
backupEncryptedWithPGP(null, null);
}
} else {
Toast.makeText(this, R.string.backup_toast_no_location, Toast.LENGTH_LONG).show();
@ -318,11 +435,11 @@ public class BackupActivity extends BaseActivity {
}
}
private void restoreEntries(String text) {
private void restoreEntries(String text, boolean finish) {
ArrayList<Entry> entries = DatabaseHelper.stringToEntries(text);
if (entries.size() > 0) {
if (! replace.isChecked()) {
if (! swReplace.isChecked()) {
ArrayList<Entry> currentEntries = DatabaseHelper.loadDatabase(this, encryptionKey);
entries.removeAll(currentEntries);
@ -332,7 +449,9 @@ public class BackupActivity extends BaseActivity {
if (DatabaseHelper.saveDatabase(this, entries, encryptionKey)) {
reload = true;
Toast.makeText(this, R.string.backup_toast_import_success, Toast.LENGTH_LONG).show();
finishWithResult();
if (finish)
finishWithResult();
} else {
Toast.makeText(this, R.string.backup_toast_import_save_failed, Toast.LENGTH_LONG).show();
}
@ -345,9 +464,10 @@ public class BackupActivity extends BaseActivity {
private void doRestorePlain(Uri uri) {
if (Tools.isExternalStorageReadable()) {
String content = StorageAccessHelper.loadFileString(this, uri);
PlainTextRestoreTask task = new PlainTextRestoreTask(this, uri);
task.setCallback(this::handleRestoreTaskResult);
restoreEntries(content);
startRestoreTask(task);
} else {
Toast.makeText(this, R.string.backup_toast_storage_not_accessible, Toast.LENGTH_LONG).show();
}
@ -357,15 +477,13 @@ public class BackupActivity extends BaseActivity {
if (Tools.isExternalStorageWritable()) {
ArrayList<Entry> entries = DatabaseHelper.loadDatabase(this, encryptionKey);
if (StorageAccessHelper.saveFile(this, uri, DatabaseHelper.entriesToString(entries)))
Toast.makeText(this, R.string.backup_toast_export_success, Toast.LENGTH_LONG).show();
else
Toast.makeText(this, R.string.backup_toast_export_failed, Toast.LENGTH_LONG).show();
PlainTextBackupTask task = new PlainTextBackupTask(this, entries, uri);
task.setCallback(this::handleBackupTaskResult);
startBackupTask(task);
} else {
Toast.makeText(this, R.string.backup_toast_storage_not_accessible, Toast.LENGTH_LONG).show();
}
finishWithResult();
}
private void backupPlainWithWarning() {
@ -408,39 +526,10 @@ public class BackupActivity extends BaseActivity {
private void doRestoreCryptWithPassword(Uri uri, String password, boolean old_format) {
if (Tools.isExternalStorageReadable()) {
boolean success = true;
String decryptedString = "";
EncryptedRestoreTask task = new EncryptedRestoreTask(this, uri, password, old_format);
task.setCallback(this::handleRestoreTaskResult);
try {
byte[] data = StorageAccessHelper.loadFile(this, uri);
if (old_format) {
SecretKey key = EncryptionHelper.generateSymmetricKeyFromPassword(password);
byte[] decrypted = EncryptionHelper.decrypt(key, data);
decryptedString = new String(decrypted, StandardCharsets.UTF_8);
} else {
byte[] iterBytes = Arrays.copyOfRange(data, 0, Constants.INT_LENGTH);
byte[] salt = Arrays.copyOfRange(data, Constants.INT_LENGTH, Constants.INT_LENGTH + Constants.ENCRYPTION_IV_LENGTH);
byte[] encrypted = Arrays.copyOfRange(data, Constants.INT_LENGTH + Constants.ENCRYPTION_IV_LENGTH, data.length);
int iter = ByteBuffer.wrap(iterBytes).getInt();
SecretKey key = EncryptionHelper.generateSymmetricKeyPBKDF2(password, iter, salt);
byte[] decrypted = EncryptionHelper.decrypt(key, encrypted);
decryptedString = new String(decrypted, StandardCharsets.UTF_8);
}
} catch (Exception e) {
success = false;
e.printStackTrace();
}
if (success) {
restoreEntries(decryptedString);
} else {
Toast.makeText(this,R.string.backup_toast_import_decryption_failed, Toast.LENGTH_LONG).show();
}
startRestoreTask(task);
} else {
Toast.makeText(this, R.string.backup_toast_storage_not_accessible, Toast.LENGTH_LONG).show();
}
@ -464,19 +553,15 @@ public class BackupActivity extends BaseActivity {
private void doBackupCryptWithPassword(Uri uri, String password) {
if (Tools.isExternalStorageWritable()) {
ArrayList<Entry> entries = DatabaseHelper.loadDatabase(this, encryptionKey);
boolean success = BackupHelper.backupToFile(this, uri, password, encryptionKey);
EncryptedBackupTask task = new EncryptedBackupTask(this, entries, password, uri);
task.setCallback(this::handleBackupTaskResult);
if (success) {
Toast.makeText(this, R.string.backup_toast_export_success, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, R.string.backup_toast_export_failed, Toast.LENGTH_LONG).show();
}
startBackupTask(task);
} else {
Toast.makeText(this, R.string.backup_toast_storage_not_accessible, Toast.LENGTH_LONG).show();
}
finishWithResult();
}
/* OpenPGP backup functions */
@ -485,28 +570,21 @@ public class BackupActivity extends BaseActivity {
if (decryptIntent == null)
decryptIntent = new Intent(OpenPgpApi.ACTION_DECRYPT_VERIFY);
String input = StorageAccessHelper.loadFileString(this, uri);
PGPRestoreTask task = new PGPRestoreTask(this, uri, decryptIntent);
task.setCallback(this::handleRestoreTaskResult);
InputStream is = new ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8));
ByteArrayOutputStream os = new ByteArrayOutputStream();
OpenPgpApi api = new OpenPgpApi(this, pgpServiceConnection.getService());
Intent result = api.executeApi(decryptIntent, is, os);
handleOpenPGPResult(result, os, uri, Constants.INTENT_BACKUP_DECRYPT_PGP);
startRestoreTask(task);
}
private void doBackupEncrypted(Uri uri, String data) {
if (Tools.isExternalStorageWritable()) {
boolean success = StorageAccessHelper.saveFile(this, uri, data);
PGPBackupTask task = new PGPBackupTask(this, data, uri);
task.setCallback(this::handleBackupTaskResult);
if (success)
Toast.makeText(this, R.string.backup_toast_export_success, Toast.LENGTH_LONG).show();
else
Toast.makeText(this, R.string.backup_toast_export_failed, Toast.LENGTH_LONG).show();
startBackupTask(task);
} else {
Toast.makeText(this, R.string.backup_toast_storage_not_accessible, Toast.LENGTH_LONG).show();
}
finishWithResult();
}
private void backupEncryptedWithPGP(Uri uri, Intent encryptIntent) {
@ -549,12 +627,12 @@ public class BackupActivity extends BaseActivity {
OpenPgpSignatureResult sigResult = result.getParcelableExtra(OpenPgpApi.RESULT_SIGNATURE);
if (sigResult.getResult() == OpenPgpSignatureResult.RESULT_VALID_KEY_CONFIRMED) {
restoreEntries(outputStreamToString(os));
restoreEntries(outputStreamToString(os), true);
} else {
Toast.makeText(this, R.string.backup_toast_openpgp_not_verified, Toast.LENGTH_LONG).show();
}
} else {
restoreEntries(outputStreamToString(os));
restoreEntries(outputStreamToString(os), true);
}
}
}
@ -578,4 +656,145 @@ public class BackupActivity extends BaseActivity {
Toast.makeText(this, String.format(getString(R.string.backup_toast_openpgp_error), error.getMessage()), Toast.LENGTH_LONG).show();
}
}
@Nullable
private BackupTaskFragment findBackupTaskFragment() {
return (BackupTaskFragment) getFragmentManager().findFragmentByTag(TAG_BACKUP_TASK_FRAGMENT);
}
@Nullable
private RestoreTaskFragment findRestoreTaskFragment() {
return (RestoreTaskFragment) getFragmentManager().findFragmentByTag(TAG_RESTORE_TASK_FRAGMENT);
}
private void startBackupTask(GenericBackupTask task) {
BackupTaskFragment backupTaskFragment = findBackupTaskFragment();
RestoreTaskFragment restoreTaskFragment = findRestoreTaskFragment();
// Don't start a task if we already have an active task running (backup or restore).
if ((backupTaskFragment == null || backupTaskFragment.task.isCanceled()) && (restoreTaskFragment == null || restoreTaskFragment.task.isCanceled())) {
if (backupTaskFragment == null) {
backupTaskFragment = new BackupTaskFragment();
getFragmentManager()
.beginTransaction()
.add(backupTaskFragment, TAG_BACKUP_TASK_FRAGMENT)
.commit();
}
backupTaskFragment.startTask(task);
showBackupProgress(true);
}
}
private void startRestoreTask(GenericRestoreTask task) {
BackupTaskFragment backupTaskFragment = findBackupTaskFragment();
RestoreTaskFragment restoreTaskFragment = findRestoreTaskFragment();
// Don't start a task if we already have an active task running (backup or restore).
if ((backupTaskFragment == null || backupTaskFragment.task.isCanceled()) && (restoreTaskFragment == null || restoreTaskFragment.task.isCanceled())) {
if (restoreTaskFragment == null) {
restoreTaskFragment = new RestoreTaskFragment();
getFragmentManager()
.beginTransaction()
.add(restoreTaskFragment, TAG_RESTORE_TASK_FRAGMENT)
.commit();
}
restoreTaskFragment.startTask(task);
showRestoreProgress(true);
}
}
private void checkBackgroundBackupTask() {
BackupTaskFragment backupTaskFragment = findBackupTaskFragment();
if (backupTaskFragment != null) {
if (backupTaskFragment.task.isCanceled()) {
// The task was canceled or has finished, so remove the task fragment.
getFragmentManager().beginTransaction()
.remove(backupTaskFragment)
.commit();
} else {
backupTaskFragment.task.setCallback(this::handleBackupTaskResult);
showBackupProgress(true);
}
}
}
private void checkBackgroundRestoreTask() {
RestoreTaskFragment restoreTaskFragment = findRestoreTaskFragment();
if (restoreTaskFragment != null) {
if (restoreTaskFragment.task.isCanceled()) {
// The task was canceled or has finished, so remove the task fragment.
getFragmentManager().beginTransaction()
.remove(restoreTaskFragment)
.commit();
} else {
restoreTaskFragment.task.setCallback(this::handleRestoreTaskResult);
showRestoreProgress(true);
}
}
}
@Override
protected void onPause() {
super.onPause();
// We don't want the task to callback to a dead activity and cause a memory leak, so null it here.
BackupTaskFragment backupTaskFragment = findBackupTaskFragment();
RestoreTaskFragment restoreTaskFragment = findRestoreTaskFragment();
if (backupTaskFragment != null)
backupTaskFragment.task.setCallback(null);
if (restoreTaskFragment != null)
restoreTaskFragment.task.setCallback(null);
}
@Override
public void onResume() {
super.onResume();
checkBackgroundBackupTask();
checkBackgroundRestoreTask();
}
@Override
protected boolean shouldDestroyOnScreenOff() {
return allowExit; // Don't destroy the backup activity as long as a backup task is running
}
/** Retained instance fragment to hold a running {@link GenericBackupTask} between configuration changes.*/
public static class BackupTaskFragment extends Fragment {
GenericBackupTask task;
public BackupTaskFragment() {
super();
setRetainInstance(true);
}
public void startTask(@NonNull GenericBackupTask task) {
this.task = task;
this.task.execute();
}
}
/** Retained instance fragment to hold a running {@link GenericRestoreTask} between configuration changes.*/
public static class RestoreTaskFragment extends Fragment {
GenericRestoreTask task;
public RestoreTaskFragment() {
super();
setRetainInstance(true);
}
public void startTask(@NonNull GenericRestoreTask task) {
this.task = task;
this.task.execute();
}
}
}

View file

@ -43,15 +43,9 @@ public abstract class BaseActivity extends ThemedActivity {
@Override
protected void onDestroy() {
unregisterReceiver(screenOffReceiver);
super.onDestroy();
}
private void destroyIfNotMain() {
if (getClass() != MainActivity.class)
finish();
}
public void setBroadcastCallback(BroadcastReceivedCallback cb) {
this.broadcastReceivedCallback = cb;
}
@ -62,14 +56,20 @@ public abstract class BaseActivity extends ThemedActivity {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
if (broadcastReceivedCallback != null)
if (broadcastReceivedCallback != null) {
broadcastReceivedCallback.onReceivedScreenOff();
destroyIfNotMain();
}
if (shouldDestroyOnScreenOff()) {
finish();
}
}
}
}
protected boolean shouldDestroyOnScreenOff() {
return true;
}
interface BroadcastReceivedCallback {
void onReceivedScreenOff();
}

View file

@ -41,6 +41,7 @@ import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.Switch;
import android.widget.TextView;
import androidx.annotation.NonNull;
@ -64,6 +65,7 @@ public class IntroScreenActivity extends IntroActivity {
private EncryptionFragment encryptionFragment;
private AuthenticationFragment authenticationFragment;
private AndroidSyncFragment androidSyncFragment;
private void saveSettings() {
Constants.EncryptionType encryptionType = encryptionFragment.getEncryptionType();
@ -71,6 +73,7 @@ public class IntroScreenActivity extends IntroActivity {
settings.setEncryption(encryptionType);
settings.setAuthMethod(authMethod);
settings.setAndroidBackupServiceEnabled(androidSyncFragment.getSyncEnabled());
if (authMethod == Constants.AuthMethod.PASSWORD || authMethod == Constants.AuthMethod.PIN) {
String password = authenticationFragment.getPassword();
@ -87,6 +90,7 @@ public class IntroScreenActivity extends IntroActivity {
encryptionFragment = new EncryptionFragment();
authenticationFragment = new AuthenticationFragment();
androidSyncFragment = new AndroidSyncFragment(encryptionFragment);
encryptionFragment.setEncryptionChangedCallback(newEncryptionType -> authenticationFragment.updateEncryptionType(newEncryptionType));
@ -119,6 +123,13 @@ public class IntroScreenActivity extends IntroActivity {
.build()
);
addSlide(new FragmentSlide.Builder()
.background(R.color.colorPrimary)
.backgroundDark(R.color.colorPrimaryDark)
.fragment(androidSyncFragment)
.build()
);
addSlide(new SimpleSlide.Builder()
.title(R.string.intro_slide4_title)
.description(R.string.intro_slide4_desc)
@ -128,6 +139,7 @@ public class IntroScreenActivity extends IntroActivity {
.build()
);
addOnNavigationBlockedListener((position, direction) -> {
if (position == 2)
authenticationFragment.flashWarning();
@ -136,7 +148,7 @@ public class IntroScreenActivity extends IntroActivity {
addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if (position == 3)
if (position == getSlides().size() - 1)
saveSettings();
}
@ -221,6 +233,39 @@ public class IntroScreenActivity extends IntroActivity {
}
}
public static class AndroidSyncFragment extends SlideFragment {
private Switch introAndroidSync;
private EncryptionFragment encryptionFragment;
public AndroidSyncFragment(EncryptionFragment encryptionFragment) {
this.encryptionFragment = encryptionFragment;
}
public boolean getSyncEnabled()
{
return introAndroidSync.isChecked();
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.component_intro_android_sync, container, false);
introAndroidSync = root.findViewById(R.id.introAndroidSync);
introAndroidSync.setOnCheckedChangeListener((compoundButton, b) -> {
compoundButton.setText( b ?
R.string.settings_toast_android_sync_enabled :
R.string.settings_toast_android_sync_disabled
);
});
introAndroidSync.setChecked(encryptionFragment.getEncryptionType() != Constants.EncryptionType.KEYSTORE);
introAndroidSync.setEnabled(encryptionFragment.getEncryptionType() != Constants.EncryptionType.KEYSTORE);
return root;
}
}
public static class AuthenticationFragment extends SlideFragment {
private Constants.EncryptionType encryptionType = Constants.EncryptionType.KEYSTORE;
@ -230,6 +275,7 @@ public class IntroScreenActivity extends IntroActivity {
private String lengthWarning = "";
private String noPasswordWarning = "";
private String confirmPasswordWarning = "";
private String passwordMismatchWarning = "";
private TextView desc = null;
private Spinner selection = null;
@ -387,6 +433,7 @@ public class IntroScreenActivity extends IntroActivity {
lengthWarning = getString(R.string.settings_label_short_password, minLength);
noPasswordWarning = getString(R.string.intro_slide3_warn_no_password);
confirmPasswordWarning = getString(R.string.intro_slide3_warn_confirm_password);
passwordMismatchWarning = getString(R.string.intro_slide3_warn_password_mismatch);
focusOnPasswordInput();
}
@ -413,6 +460,7 @@ public class IntroScreenActivity extends IntroActivity {
lengthWarning = getString(R.string.settings_label_short_pin, minLength);
noPasswordWarning = getString(R.string.intro_slide3_warn_no_pin);
confirmPasswordWarning = getString(R.string.intro_slide3_warn_confirm_pin);
passwordMismatchWarning = getString(R.string.intro_slide3_warn_pin_mismatch);
focusOnPasswordInput();
}
@ -461,6 +509,9 @@ public class IntroScreenActivity extends IntroActivity {
if (! confirm.isEmpty() && confirm.equals(password)) {
hideWarning();
return true;
} else if (! confirm.isEmpty() && ! confirm.equals(password)) {
updateWarning(passwordMismatchWarning);
return false;
} else {
updateWarning(confirmPasswordWarning);
return false;

View file

@ -34,6 +34,8 @@ import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.preference.PreferenceManager;
import androidx.annotation.Nullable;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.ActionBarDrawerToggle;
@ -56,6 +58,7 @@ import android.widget.AdapterView;
import android.widget.CheckedTextView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.google.zxing.integration.android.IntentIntegrator;
@ -114,6 +117,8 @@ public class MainActivity extends BaseActivity
private String filterString;
private CountDownTimer countDownTimer;
private ProgressBar progressBar;
private TextView emptyListView;
// QR code scanning
private void scanQRCode(){
@ -245,8 +250,8 @@ public class MainActivity extends BaseActivity
}
});
final ProgressBar progressBar = findViewById(R.id.progressBar);
progressBar.setVisibility(settings.isHideGlobalTimeoutEnabled() ? View.GONE : View.VISIBLE);
progressBar = findViewById(R.id.progressBar);
emptyListView = findViewById(R.id.emptyListView);
RecyclerView recList = findViewById(R.id.cardList);
recList.setHasFixedSize(true);
@ -256,6 +261,43 @@ public class MainActivity extends BaseActivity
tagsDrawerAdapter = new TagsAdapter(this, new HashMap<String, Boolean>());
adapter = new EntriesCardAdapter(this, tagsDrawerAdapter);
adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onChanged() {
super.onChanged();
hideProgressBar();
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount) {
super.onItemRangeChanged(positionStart, itemCount);
hideProgressBar();
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount, @Nullable Object payload) {
super.onItemRangeChanged(positionStart, itemCount, payload);
hideProgressBar();
}
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
super.onItemRangeInserted(positionStart, itemCount);
hideProgressBar();
}
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
super.onItemRangeRemoved(positionStart, itemCount);
hideProgressBar();
}
@Override
public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
super.onItemRangeMoved(fromPosition, toPosition, itemCount);
hideProgressBar();
}
});
if (savedInstanceState != null) {
byte[] encKey = savedInstanceState.getByteArray("encKey");
@ -586,6 +628,10 @@ public class MainActivity extends BaseActivity
}
});
if (settings.isFocusSearchOnStartEnabled()) {
searchItem.expandActionView();
}
return true;
}
@ -894,4 +940,20 @@ public class MainActivity extends BaseActivity
settings.unregisterPreferenceChangeListener(this);
super.onDestroy();
}
}
/**
* This function will hide the progress bar if the token list is empty along with
* showing a view which has instruction on how to add the tokens
* */
private void hideProgressBar(){
int itemCount = adapter.getItemCount();
progressBar.setVisibility((settings.isHideGlobalTimeoutEnabled() || itemCount <= 0) ? View.GONE : View.VISIBLE);
emptyListView.setVisibility(itemCount > 0 ? View.GONE : View.VISIBLE);
}
@Override
protected boolean shouldDestroyOnScreenOff() {
return false;
}
}

View file

@ -40,6 +40,7 @@ import android.preference.PreferenceManager;
import androidx.appcompat.widget.Toolbar;
import android.provider.DocumentsContract;
import android.util.Log;
import android.view.ViewStub;
import android.widget.Toast;
@ -168,6 +169,13 @@ public class SettingsActivity extends BaseActivity
if (fragment.useAndroidSync != null)
fragment.useAndroidSync.setEnabled(true);
}
} else if(key.equals(getString(R.string.settings_key_enable_android_backup_service)))
{
Log.d(SettingsActivity.class.getSimpleName(), "onSharedPreferenceChanged called modifying settings_key_enable_android_backup_service service is now: " +
(settings.getAndroidBackupServiceEnabled() ? "enabled" : "disabled"));
int message = settings.getAndroidBackupServiceEnabled() ? R.string.settings_toast_android_sync_enabled : R.string.settings_toast_android_sync_disabled;
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
fragment.updateAutoBackup();

View file

@ -30,7 +30,6 @@ import android.preference.DialogPreference;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.text.method.PasswordTransformationMethod;
import android.util.AttributeSet;
import android.view.View;
import android.widget.AdapterView;
@ -67,7 +66,7 @@ public class CredentialsPreference extends DialogPreference
boolean testEncryptionChange(byte[] newKey);
}
private List<String> entries;
private final List<String> entries;
private static final List<AuthMethod> entryValues = Arrays.asList(
AuthMethod.NONE,
AuthMethod.PASSWORD,
@ -77,7 +76,7 @@ public class CredentialsPreference extends DialogPreference
private int minLength = 0;
private Settings settings;
private final Settings settings;
private AuthMethod value = AuthMethod.NONE;
private EncryptionChangeCallback encryptionChangeCallback = null;
@ -230,77 +229,65 @@ public class CredentialsPreference extends DialogPreference
if (password.length() >= minLength) {
toShortWarning.setVisibility(View.GONE);
String confirm = passwordConfirm.getEditableText().toString();
if (!password.isEmpty() && !confirm.isEmpty() && password.equals(confirm)) {
btnSave.setEnabled(true);
} else {
btnSave.setEnabled(false);
}
boolean canSave = !password.isEmpty() && !confirm.isEmpty() && password.equals(confirm);
btnSave.setEnabled(canSave);
} else {
toShortWarning.setVisibility(View.VISIBLE);
}
}
private void updateLayout() {
if (value == AuthMethod.NONE) {
if (value == AuthMethod.NONE || value == AuthMethod.DEVICE) {
credentialsLayout.setVisibility(View.GONE);
if (getDialog() != null)
UIHelper.hideKeyboard(getContext(), getDialog().getCurrentFocus());
btnSave.setEnabled(true);
} else if (value == AuthMethod.PASSWORD) {
credentialsLayout.setVisibility(View.VISIBLE);
passwordLayout.setHint(getContext().getString(R.string.settings_hint_password));
passwordConfirm.setHint(R.string.settings_hint_password_confirm);
ConfirmedPasswordTransformationHelper.setup(passwordLayout, passwordInput, passwordConfirm);
passwordInput.setTransformationMethod(new PasswordTransformationMethod());
passwordConfirm.setTransformationMethod(new PasswordTransformationMethod());
minLength = Constants.AUTH_MIN_PASSWORD_LENGTH;
toShortWarning.setText(getContext().getString(R.string.settings_label_short_password, minLength));
passwordInput.requestFocus();
UIHelper.showKeyboard(getContext(), passwordInput);
btnSave.setEnabled(false);
} else if (value == AuthMethod.PIN) {
credentialsLayout.setVisibility(View.VISIBLE);
passwordLayout.setHint(getContext().getString(R.string.settings_hint_pin));
passwordConfirm.setHint(R.string.settings_hint_pin_confirm);
passwordInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
passwordConfirm.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
ConfirmedPasswordTransformationHelper.setup(passwordLayout, passwordInput, passwordConfirm);
minLength = Constants.AUTH_MIN_PIN_LENGTH;
toShortWarning.setText(getContext().getString(R.string.settings_label_short_pin, minLength));
passwordInput.requestFocus();
UIHelper.showKeyboard(getContext(), passwordInput);
btnSave.setEnabled(false);
} else if (value == AuthMethod.DEVICE) {
credentialsLayout.setVisibility(View.GONE);
if (getDialog() != null)
UIHelper.hideKeyboard(getContext(), getDialog().getCurrentFocus());
if (getDialog() != null) {
UIHelper.hideKeyboard(getContext(), passwordInput);
}
btnSave.setEnabled(true);
} else if (value == AuthMethod.PASSWORD || value == AuthMethod.PIN) {
prepareAuthMethodInputFields();
}
}
private void prepareAuthMethodInputFields() {
if (value != AuthMethod.PIN && value != AuthMethod.PASSWORD) {
return;
}
boolean isPassword = value == AuthMethod.PASSWORD;
credentialsLayout.setVisibility(View.VISIBLE);
int layoutHintRes = isPassword ? R.string.settings_hint_password : R.string.settings_hint_pin;
passwordLayout.setHint(getContext().getString(layoutHintRes));
int confirmHintRes = isPassword ? R.string.settings_hint_password_confirm : R.string.settings_hint_pin_confirm;
passwordConfirm.setHint(confirmHintRes);
int inputType = isPassword ?
(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD) :
(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
passwordInput.setInputType(inputType);
passwordConfirm.setInputType(inputType);
ConfirmedPasswordTransformationHelper.setup(passwordLayout, passwordInput, passwordConfirm);
minLength = isPassword ? Constants.AUTH_MIN_PASSWORD_LENGTH : Constants.AUTH_MIN_PIN_LENGTH;
int shortWarningRes = isPassword ? R.string.settings_label_short_password : R.string.settings_label_short_pin;
toShortWarning.setText(getContext().getString(shortWarningRes, minLength));
passwordInput.requestFocus();
UIHelper.showKeyboard(getContext(), passwordInput);
btnSave.setEnabled(false);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
value = entryValues.get(position);
updateLayout();
clearInputFields();
}
private void clearInputFields() {
passwordInput.setText(null);
passwordConfirm.setText(null);
}
// Needed stub functions

View file

@ -0,0 +1,114 @@
package org.shadowice.flocke.andotp.Tasks;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Base64;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.shadowice.flocke.andotp.Tasks.AuthenticationTask.Result;
import org.shadowice.flocke.andotp.Utilities.Constants.AuthMethod;
import org.shadowice.flocke.andotp.Utilities.EncryptionHelper;
import org.shadowice.flocke.andotp.Utilities.EncryptionHelper.PBKDF2Credentials;
import org.shadowice.flocke.andotp.Utilities.Settings;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.Arrays;
public class AuthenticationTask extends UiBasedBackgroundTask<Result> {
private final Settings settings;
private final boolean isAuthUpgrade;
private final String existingAuthCredentials;
private final String plainPassword;
/**
* @param context Context to be used to query settings (the application Context will be used to avoid memory leaks).
* @param isAuthUpgrade true if this is an authentication upgrade and new credentials should be saved, false if this is just confirmation.
* @param existingAuthCredentials The existing hashed authentication credentials that we have stored.
* @param plainPassword The plaintext user-entered password to check authentication with. */
public AuthenticationTask(Context context, boolean isAuthUpgrade, String existingAuthCredentials, String plainPassword) {
super(Result.failure());
Context applicationContext = context.getApplicationContext();
this.settings = new Settings(applicationContext);
this.isAuthUpgrade = isAuthUpgrade;
this.existingAuthCredentials = existingAuthCredentials;
this.plainPassword = plainPassword;
}
@Override
@NonNull
protected Result doInBackground() {
if (isAuthUpgrade) {
return upgradeAuthentication();
} else {
return confirmAuthentication();
}
}
@NonNull
private Result upgradeAuthentication() {
String hashedPassword = new String(Hex.encodeHex(DigestUtils.sha256(plainPassword)));
if (!hashedPassword.equals(existingAuthCredentials))
return Result.failure();
byte[] key = settings.setAuthCredentials(plainPassword);
AuthMethod authMethod = settings.getAuthMethod();
if (authMethod == AuthMethod.PASSWORD)
settings.removeAuthPasswordHash();
else if (authMethod == AuthMethod.PIN)
settings.removeAuthPINHash();
if (key == null)
return Result.upgradeFailure();
else
return Result.success(key);
}
@NonNull
private Result confirmAuthentication() {
try {
PBKDF2Credentials credentials = EncryptionHelper.generatePBKDF2Credentials(plainPassword, settings.getSalt(), settings.getIterations());
byte[] passwordArray = Base64.decode(existingAuthCredentials, Base64.URL_SAFE);
if (Arrays.equals(passwordArray, credentials.password)) {
return Result.success(credentials.key);
}
return Result.failure();
} catch (NoSuchAlgorithmException | InvalidKeySpecException | IllegalArgumentException e) {
Log.e("AuthenticationTask", "Problem decoding password", e);
return Result.failure();
}
}
public static class Result {
@Nullable
public final byte[] encryptionKey;
public final boolean authUpgradeFailed;
public Result(@Nullable byte[] encryptionKey, boolean authUpgradeFailed) {
this.encryptionKey = encryptionKey;
this.authUpgradeFailed = authUpgradeFailed;
}
public static Result success(byte[] encryptionKey) {
return new Result(encryptionKey, false);
}
public static Result upgradeFailure() {
return new Result(null, true);
}
public static Result failure() {
return new Result(null, false);
}
}
}

View file

@ -0,0 +1,37 @@
package org.shadowice.flocke.andotp.Tasks;
import android.content.Context;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.shadowice.flocke.andotp.Database.Entry;
import org.shadowice.flocke.andotp.Utilities.BackupHelper;
import org.shadowice.flocke.andotp.Utilities.Constants;
import org.shadowice.flocke.andotp.Utilities.DatabaseHelper;
import java.util.ArrayList;
public class EncryptedBackupTask extends GenericBackupTask {
private final String password;
private final ArrayList<Entry> entries;
public EncryptedBackupTask(Context context, ArrayList<Entry> entries, String password, @Nullable Uri uri) {
super(context, uri);
this.entries = entries;
this.password = password;
}
@Override
@NonNull
protected Constants.BackupType getBackupType() {
return Constants.BackupType.ENCRYPTED;
}
@Override
protected boolean doBackup() {
String payload = DatabaseHelper.entriesToString(entries);
return BackupHelper.backupToFile(applicationContext, uri, password, payload);
}
}

View file

@ -0,0 +1,66 @@
package org.shadowice.flocke.andotp.Tasks;
import android.content.Context;
import android.net.Uri;
import androidx.annotation.NonNull;
import org.shadowice.flocke.andotp.R;
import org.shadowice.flocke.andotp.Utilities.Constants;
import org.shadowice.flocke.andotp.Utilities.EncryptionHelper;
import org.shadowice.flocke.andotp.Utilities.StorageAccessHelper;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import javax.crypto.SecretKey;
public class EncryptedRestoreTask extends GenericRestoreTask {
private final String password;
private final boolean oldFormat;
public EncryptedRestoreTask(Context context, Uri uri, String password, boolean oldFormat) {
super(context, uri);
this.password = password;
this.oldFormat = oldFormat;
}
@Override
@NonNull
protected RestoreTaskResult doInBackground() {
boolean success = true;
String decryptedString = "";
try {
byte[] data = StorageAccessHelper.loadFile(applicationContext, uri);
if (oldFormat) {
SecretKey key = EncryptionHelper.generateSymmetricKeyFromPassword(password);
byte[] decrypted = EncryptionHelper.decrypt(key, data);
decryptedString = new String(decrypted, StandardCharsets.UTF_8);
} else {
byte[] iterBytes = Arrays.copyOfRange(data, 0, Constants.INT_LENGTH);
byte[] salt = Arrays.copyOfRange(data, Constants.INT_LENGTH, Constants.INT_LENGTH + Constants.ENCRYPTION_IV_LENGTH);
byte[] encrypted = Arrays.copyOfRange(data, Constants.INT_LENGTH + Constants.ENCRYPTION_IV_LENGTH, data.length);
int iter = ByteBuffer.wrap(iterBytes).getInt();
SecretKey key = EncryptionHelper.generateSymmetricKeyPBKDF2(password, iter, salt);
byte[] decrypted = EncryptionHelper.decrypt(key, encrypted);
decryptedString = new String(decrypted, StandardCharsets.UTF_8);
}
} catch (Exception e) {
success = false;
e.printStackTrace();
}
if (success) {
return RestoreTaskResult.success(decryptedString);
} else {
return RestoreTaskResult.failure(R.string.backup_toast_import_decryption_failed);
}
}
}

View file

@ -0,0 +1,72 @@
package org.shadowice.flocke.andotp.Tasks;
import android.content.Context;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.shadowice.flocke.andotp.R;
import org.shadowice.flocke.andotp.Utilities.BackupHelper;
import org.shadowice.flocke.andotp.Utilities.Constants;
import org.shadowice.flocke.andotp.Utilities.Settings;
public abstract class GenericBackupTask extends UiBasedBackgroundTask<GenericBackupTask.BackupTaskResult> {
protected final Context applicationContext;
protected final Settings settings;
protected final Constants.BackupType type;
protected Uri uri;
public GenericBackupTask(Context context, @Nullable Uri uri) {
super(BackupTaskResult.failure());
this.applicationContext = context.getApplicationContext();
this.settings = new Settings(applicationContext);
this.type = getBackupType();
this.uri = uri;
}
@Override
@NonNull
protected BackupTaskResult doInBackground() {
if (uri == null) {
BackupHelper.BackupFile backupFile = BackupHelper.backupFile(applicationContext, settings.getBackupLocation(), type);
if (backupFile.file == null)
return new BackupTaskResult(false, backupFile.errorMessage);
uri = backupFile.file.getUri();
}
boolean success = doBackup();
if (success)
return BackupTaskResult.success();
else
return BackupTaskResult.failure();
}
@NonNull
protected abstract Constants.BackupType getBackupType();
protected abstract boolean doBackup();
public static class BackupTaskResult {
public final boolean success;
public final int messageId;
public BackupTaskResult(boolean success, int messageId) {
this.success = success;
this.messageId = messageId;
}
public static BackupTaskResult success() {
return new BackupTaskResult(true, R.string.backup_toast_export_success);
}
public static BackupTaskResult failure() {
return new BackupTaskResult(false, R.string.backup_toast_export_failed);
}
}
}

View file

@ -0,0 +1,63 @@
package org.shadowice.flocke.andotp.Tasks;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.shadowice.flocke.andotp.R;
import org.shadowice.flocke.andotp.Utilities.Settings;
public abstract class GenericRestoreTask extends UiBasedBackgroundTask<GenericRestoreTask.RestoreTaskResult> {
protected final Context applicationContext;
protected final Settings settings;
protected Uri uri;
public GenericRestoreTask(Context context, @Nullable Uri uri) {
super(GenericRestoreTask.RestoreTaskResult.failure(R.string.backup_toast_import_failed));
this.applicationContext = context.getApplicationContext();
this.settings = new Settings(applicationContext);
this.uri = uri;
}
@Override
@NonNull
protected abstract RestoreTaskResult doInBackground();
public static class RestoreTaskResult {
public final boolean success;
public final String payload;
public final int messageId;
public boolean isPGP = false;
public Intent decryptIntent = null;
public Uri uri = null;
public RestoreTaskResult(boolean success, String payload, int messageId) {
this.success = success;
this.payload = payload;
this.messageId = messageId;
}
public RestoreTaskResult(boolean success, String payload, int messageId, boolean isPGP, Intent decryptIntent, Uri uri) {
this.success = success;
this.payload = payload;
this.messageId = messageId;
this.isPGP = isPGP;
this.decryptIntent = decryptIntent;
this.uri = uri;
}
public static RestoreTaskResult success(String payload) {
return new RestoreTaskResult(true, payload, 0);
}
public static RestoreTaskResult failure(int messageId) {
return new RestoreTaskResult(false, null, messageId);
}
}
}

View file

@ -0,0 +1,30 @@
package org.shadowice.flocke.andotp.Tasks;
import android.content.Context;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.shadowice.flocke.andotp.Utilities.Constants;
import org.shadowice.flocke.andotp.Utilities.StorageAccessHelper;
public class PGPBackupTask extends GenericBackupTask {
private final String payload;
public PGPBackupTask(Context context, String payload, @Nullable Uri uri) {
super(context, uri);
this.payload = payload;
}
@Override
@NonNull
protected Constants.BackupType getBackupType() {
return Constants.BackupType.OPEN_PGP;
}
@Override
protected boolean doBackup() {
return StorageAccessHelper.saveFile(applicationContext, uri, payload);
}
}

View file

@ -0,0 +1,26 @@
package org.shadowice.flocke.andotp.Tasks;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import androidx.annotation.NonNull;
import org.shadowice.flocke.andotp.Utilities.StorageAccessHelper;
public class PGPRestoreTask extends GenericRestoreTask {
private final Intent decryptIntent;
public PGPRestoreTask(Context context, Uri uri, Intent decryptIntent) {
super(context, uri);
this.decryptIntent = decryptIntent;
}
@Override
@NonNull
protected RestoreTaskResult doInBackground() {
String data = StorageAccessHelper.loadFileString(applicationContext, uri);
return new RestoreTaskResult(true, data, 0, true, decryptIntent, uri);
}
}

View file

@ -0,0 +1,35 @@
package org.shadowice.flocke.andotp.Tasks;
import android.content.Context;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.shadowice.flocke.andotp.Database.Entry;
import org.shadowice.flocke.andotp.Utilities.Constants;
import org.shadowice.flocke.andotp.Utilities.DatabaseHelper;
import org.shadowice.flocke.andotp.Utilities.StorageAccessHelper;
import java.util.ArrayList;
public class PlainTextBackupTask extends GenericBackupTask {
private final ArrayList<Entry> entries;
public PlainTextBackupTask(Context context, ArrayList<Entry> entries, @Nullable Uri uri) {
super(context, uri);
this.entries = entries;
}
@Override
@NonNull
protected Constants.BackupType getBackupType() {
return Constants.BackupType.PLAIN_TEXT;
}
@Override
protected boolean doBackup() {
String payload = DatabaseHelper.entriesToString(entries);
return StorageAccessHelper.saveFile(applicationContext, uri, payload);
}
}

View file

@ -0,0 +1,21 @@
package org.shadowice.flocke.andotp.Tasks;
import android.content.Context;
import android.net.Uri;
import androidx.annotation.NonNull;
import org.shadowice.flocke.andotp.Utilities.StorageAccessHelper;
public class PlainTextRestoreTask extends GenericRestoreTask {
public PlainTextRestoreTask(Context context, Uri uri) {
super(context, uri);
}
@Override
@NonNull
protected RestoreTaskResult doInBackground() {
String data = StorageAccessHelper.loadFileString(applicationContext, uri);
return RestoreTaskResult.success(data);
}
}

View file

@ -0,0 +1,109 @@
package org.shadowice.flocke.andotp.Tasks;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import androidx.annotation.AnyThread;
import androidx.annotation.MainThread;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/** Encapsulates a background task that needs to communicate back to the UI (on the main thread) to
* provide a result. */
public abstract class UiBasedBackgroundTask<Result> {
private final Result failedResult;
private final ExecutorService executor;
private final Handler mainThreadHandler;
private final Object callbackLock = new Object();
@Nullable
private UiCallback<Result> callback;
@Nullable
private Result awaitedResult;
private volatile boolean isCanceled = false;
/** @param failedResult The result to return if the task fails (throws an exception or returns null). */
public UiBasedBackgroundTask(@NonNull Result failedResult) {
this.failedResult = failedResult;
this.executor = Executors.newSingleThreadExecutor();
this.mainThreadHandler = new Handler(Looper.getMainLooper());
}
/** @param callback If null, any results which may arrive from a currently executing task will
* be stored until a new callback is set. */
public void setCallback(@Nullable UiCallback<Result> callback) {
synchronized (callbackLock) {
// Don't bother doing anything if the task was canceled.
if (isCanceled()) {
return;
}
this.callback = callback;
// If we have an awaited result and are setting a new callback, publish the result immediately.
if (awaitedResult != null && callback != null) {
emitResultOnMainThread(callback, awaitedResult);
}
}
}
private void emitResultOnMainThread(@NonNull UiCallback<Result> callback, @NonNull Result result) {
mainThreadHandler.post(() -> callback.onResult(result));
this.callback = null;
this.awaitedResult = null;
}
/** Executed the task on a background thread. Safe to call from the main thread. */
@AnyThread
public void execute() {
executor.execute(this::runTask);
}
private void runTask() {
Result result = failedResult;
try {
result = doInBackground();
} catch (Exception e) {
Log.e("UiBasedBackgroundTask", "Problem running background task", e);
}
synchronized (callbackLock) {
// Don't bother issuing callback or storing result if this task is canceled.
if (isCanceled()) {
return;
}
if (callback != null) {
emitResultOnMainThread(callback, result);
} else {
awaitedResult = result;
}
}
}
/** Work to be done in a background thread.
* @return Return the result from this task's execution.
* @throws Exception If an Exception is thrown from this task's execution, it will be logged
* and the provided default Result will be returned. */
@NonNull
protected abstract Result doInBackground() throws Exception;
@AnyThread
public boolean isCanceled() {
return isCanceled;
}
@AnyThread
public void cancel() {
isCanceled = true;
}
@FunctionalInterface
public interface UiCallback<Result> {
@MainThread
void onResult(@NonNull Result result);
}
}

View file

@ -29,6 +29,8 @@ import android.app.backup.BackupDataOutput;
import android.app.backup.FileBackupHelper;
import android.app.backup.SharedPreferencesBackupHelper;
import android.os.ParcelFileDescriptor;
import android.util.Log;
import java.io.IOException;
@ -44,19 +46,29 @@ public class BackupAgent extends BackupAgentHelper {
@Override
public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) throws IOException {
Settings settings = new Settings(this);
StringBuilder stringBuilder = new StringBuilder("onBackup called with the backup service set to ");
stringBuilder.append(settings.getAndroidBackupServiceEnabled() ? "enabled" : "disabled");
if(settings.getAndroidBackupServiceEnabled()) {
synchronized (DatabaseHelper.DatabaseFileLock) {
stringBuilder.append(" calling parent onBackup");
super.onBackup(oldState, data, newState);
}
}
Log.d(BackupAgent.class.getSimpleName(), stringBuilder.toString());
}
@Override
public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) throws IOException {
Settings settings = new Settings(this);
StringBuilder stringBuilder = new StringBuilder("onRestore called with the backup service set to ");
stringBuilder.append(settings.getAndroidBackupServiceEnabled() ? "enabled" : "disabled");
synchronized (DatabaseHelper.DatabaseFileLock) {
stringBuilder.append(" but restore happens regardless, calling parent onRestore");
super.onRestore(data, appVersionCode, newState);
}
Log.d(BackupAgent.class.getSimpleName(), stringBuilder.toString());
}
@Override

View file

@ -101,11 +101,17 @@ public class BackupHelper {
return Constants.BackupType.UNAVAILABLE;
}
public static boolean backupToFile(Context context, Uri uri, String password, SecretKey encryptionKey)
{
public static boolean backupToFile(Context context, Uri uri, String password, SecretKey encryptionKey) {
ArrayList<Entry> entries = DatabaseHelper.loadDatabase(context, encryptionKey);
String plain = DatabaseHelper.entriesToString(entries);
return backupToFile(context, uri, password, plain);
}
public static boolean backupToFile(Context context, Uri uri, String password, String plain)
{
boolean success = true;
try {
int iter = EncryptionHelper.generateRandomIterations();
byte[] salt = EncryptionHelper.generateRandom(Constants.ENCRYPTION_IV_LENGTH);
@ -120,12 +126,12 @@ public class BackupHelper {
System.arraycopy(salt, 0, data, Constants.INT_LENGTH, Constants.ENCRYPTION_IV_LENGTH);
System.arraycopy(encrypted, 0, data, Constants.INT_LENGTH + Constants.ENCRYPTION_IV_LENGTH, encrypted.length);
StorageAccessHelper.saveFile(context, uri, data);
success = StorageAccessHelper.saveFile(context, uri, data);
} catch (Exception e) {
e.printStackTrace();
return false;
success = false;
}
return true;
return success;
}
}

View file

@ -79,6 +79,7 @@ public class EntryThumbnail {
AirBNB(R.drawable.thumb_airbnb),
Airbrake(R.drawable.thumb_airbrake),
AirTable(R.drawable.thumb_airtable),
AirVPN(R.drawable.thumb_airvpn),
AllegroPl(R.drawable.thumb_allegropl),
Alwaysdata(R.drawable.thumb_alwaysdata),
Amazon(R.drawable.thumb_amazon),
@ -86,16 +87,19 @@ public class EntryThumbnail {
AngelList(R.drawable.thumb_angellist),
AnimeBytes(R.drawable.thumb_animebytes),
Anonaddy(R.drawable.thumb_anonaddy),
AnyDesk(R.drawable.thumb_anydesk),
Apache(R.drawable.thumb_apache),
Apple(R.drawable.thumb_apple),
Appveyor(R.drawable.thumb_appveyor),
ArenaNet(R.drawable.thumb_arenanet),
AtlanticNet(R.drawable.thumb_atlantic_net),
Atlassian(R.drawable.thumb_atlassian),
Autodesk(R.drawable.thumb_autodesk),
AutoDNS(R.drawable.thumb_autodns),
AVM(R.drawable.thumb_avm),
Backblaze(R.drawable.thumb_backblaze),
BattleNet(R.drawable.thumb_battlenet),
BestBuy(R.drawable.thumb_bestbuy),
Betterment(R.drawable.thumb_betterment),
Binance(R.drawable.thumb_binance),
BitBucket(R.drawable.thumb_bitbucket),
@ -109,14 +113,18 @@ public class EntryThumbnail {
Bitwala(R.drawable.thumb_bitwala),
Bitwarden(R.drawable.thumb_bitwarden),
BlockchainInfo(R.drawable.thumb_blockchain_info),
Boxcryptor(R.drawable.thumb_boxcryptor),
BraveRewards(R.drawable.thumb_braverewards),
Bugcrowd(R.drawable.thumb_bugcrowd),
CEXio(R.drawable.thumb_cexio),
ChurchTools(R.drawable.thumb_church_tools),
Cisco(R.drawable.thumb_cisco),
Citrix(R.drawable.thumb_citrix),
CloudDownload(R.drawable.thumb_cloud_download),
Cloudflare(R.drawable.thumb_cloudflare),
Clubhouse(R.drawable.thumb_clubhouse),
Cobranded(R.drawable.thumb_cobranded),
Codeberg(R.drawable.thumb_codeberg),
Codegiant(R.drawable.thumb_codegiant),
Coinbase(R.drawable.thumb_coinbase),
CoinJar(R.drawable.thumb_coinjar),
@ -124,12 +132,14 @@ public class EntryThumbnail {
ComputerBase(R.drawable.thumb_computerbase),
ConnectWiseManage(R.drawable.thumb_connectwise_manage),
CozyCloud(R.drawable.thumb_cozycloud),
CrowdSupply(R.drawable.thumb_crowd_supply),
Crowdin(R.drawable.thumb_crowdin),
Cyon(R.drawable.thumb_cyon),
Dashlane(R.drawable.thumb_dashlane),
Debian(R.drawable.thumb_debian),
Degiro(R.drawable.thumb_degiro),
Denic(R.drawable.thumb_denic),
Deribit(R.drawable.thumb_deribit),
Diaspora(R.drawable.thumb_diaspora),
Digidentity(R.drawable.thumb_digidentity),
DigitalOcean(R.drawable.thumb_digital_ocean),
@ -152,6 +162,7 @@ public class EntryThumbnail {
FACEIT(R.drawable.thumb_faceit),
Fanatical(R.drawable.thumb_fanatical),
Fastmail(R.drawable.thumb_fastmail),
FidelityInvestments(R.drawable.thumb_fidelity_investments),
Figma(R.drawable.thumb_figma),
Fingerprint(R.drawable.thumb_fingerprint),
Finnair(R.drawable.thumb_finnair),
@ -168,6 +179,7 @@ public class EntryThumbnail {
GitHub(R.drawable.thumb_github),
GitLab(R.drawable.thumb_gitlab),
GMX(R.drawable.thumb_gmx),
GoatCounter(R.drawable.thumb_goatcounter),
GoDaddy(R.drawable.thumb_godaddy),
Gogs(R.drawable.thumb_gogs),
Google(R.drawable.thumb_google),
@ -180,12 +192,14 @@ public class EntryThumbnail {
HitBTC(R.drawable.thumb_hitbtc),
HMRC(R.drawable.thumb_hmrc),
HomeAssistant(R.drawable.thumb_home_assistant),
HostingDE(R.drawable.thumb_hosting_de),
Hover(R.drawable.thumb_hover),
HumbleBundle(R.drawable.thumb_humblebundle),
HurricaneElectric(R.drawable.thumb_hurricane_electric),
IBM(R.drawable.thumb_ibm),
Iconomi(R.drawable.thumb_iconomi),
IFTTT(R.drawable.thumb_ifttt),
ImmoScout24(R.drawable.thumb_immo_scout24),
Infomaniak(R.drawable.thumb_infomaniak),
Instagram(R.drawable.thumb_instagram),
INWX(R.drawable.thumb_inwx),
@ -193,7 +207,9 @@ public class EntryThumbnail {
Jagex(R.drawable.thumb_jagex),
JetBrains(R.drawable.thumb_jetbrains),
Joomla(R.drawable.thumb_joomla),
KDE(R.drawable.thumb_kde),
Keeper(R.drawable.thumb_keeper),
Keycloak(R.drawable.thumb_keycloak),
Kickstarter(R.drawable.thumb_kickstarter),
Kraken(R.drawable.thumb_kraken),
Kucoin(R.drawable.thumb_kucoin),
@ -209,17 +225,23 @@ public class EntryThumbnail {
LocalMonero(R.drawable.thumb_localmonero),
LoginGov(R.drawable.thumb_login_gov),
LogMeIn(R.drawable.thumb_logmein),
LuaDNS(R.drawable.thumb_luadns),
MailDE(R.drawable.thumb_mail_de),
Mailbox(R.drawable.thumb_mailbox),
Mailchimp(R.drawable.thumb_mailchimp),
Mailcow(R.drawable.thumb_mailcow),
Mailgun(R.drawable.thumb_mailgun),
Mailru(R.drawable.thumb_mailru),
Malwaretips(R.drawable.thumb_malwaretips),
Mangadex(R.drawable.thumb_mangadex),
Mapbox(R.drawable.thumb_mapbox),
Mastodon(R.drawable.thumb_mastodon),
Matomo(R.drawable.thumb_matomo),
Mattermost(R.drawable.thumb_mattermost),
Mediawiki(R.mipmap.thumb_mediawiki, AssetType.Bitmap),
Mega(R.drawable.thumb_mega),
MercadoLibre(R.drawable.thumb_mercadolibre),
Mercury(R.drawable.thumb_mercury),
Microsoft(R.drawable.thumb_microsoft),
MicrosoftTeams(R.drawable.thumb_microsoft_teams),
Migadu(R.drawable.thumb_migadu),
@ -229,11 +251,14 @@ public class EntryThumbnail {
Mixer(R.drawable.thumb_mixer),
MongoDB(R.drawable.thumb_mongodb),
MVPSnet(R.drawable.thumb_mvpsnet),
MyGovAU(R.drawable.thumb_my_gov_au),
NameCheap(R.drawable.thumb_namecheap),
NameCom(R.drawable.thumb_namecom),
NAS(R.drawable.thumb_nas),
netcup(R.drawable.thumb_netcup),
netlify(R.drawable.thumb_netlify),
NextCloud(R.drawable.thumb_nextcloud),
NextDNS(R.drawable.thumb_nextdns),
Nintendo(R.drawable.thumb_nintendo),
NoStarchPress(R.drawable.thumb_no_starch_press),
NOYB(R.drawable.thumb_noyb),
@ -257,8 +282,11 @@ public class EntryThumbnail {
PaySafe(R.drawable.thumb_paysafecard),
PayWithPrivacy(R.drawable.thumb_paywithprivacy),
PCloud(R.drawable.thumb_pcloud),
PeeringDB(R.drawable.thumb_peeringdb),
Phabricator(R.drawable.thumb_phabricator),
phpMyAdmin(R.drawable.thumb_phpmyadmin),
PlayStation(R.drawable.thumb_playstation),
Plex(R.drawable.thumb_plex),
Pluralsight(R.drawable.thumb_pluralsight),
Plurk(R.drawable.thumb_plurk),
Posteo(R.drawable.thumb_posteo),
@ -281,15 +309,19 @@ public class EntryThumbnail {
RSS(R.drawable.thumb_rss),
Samsung(R.drawable.thumb_samsung),
SAP(R.drawable.thumb_sap),
Saxobank(R.drawable.thumb_saxobank),
Scaleway(R.drawable.thumb_scaleway),
School(R.drawable.thumb_school),
Sciebo(R.drawable.thumb_sciebo),
SelfWealth(R.drawable.thumb_selfwealth),
Seafile(R.mipmap.thumb_seafile, AssetType.Bitmap),
Sentry(R.drawable.thumb_sentry),
Sevdesk(R.drawable.thumb_sevdesk),
SimpleLogin(R.drawable.thumb_simple_login),
Skrill(R.drawable.thumb_skrill),
Slack(R.drawable.thumb_slack),
Snapchat(R.drawable.thumb_snapchat),
SOGo(R.drawable.thumb_sogo),
Sophos(R.drawable.thumb_sophos),
SourceForge(R.drawable.thumb_sourceforge),
Squarespace(R.drawable.thumb_squarespace),
@ -297,14 +329,18 @@ public class EntryThumbnail {
StarCitizen(R.drawable.thumb_starcitizen),
Steam(R.drawable.thumb_steam),
Stripe(R.drawable.thumb_stripe),
Sumologic(R.drawable.thumb_sumologic),
Sync(R.drawable.thumb_sync),
Synology(R.drawable.thumb_synology),
TeaHub(R.drawable.thumb_teahub),
TeamViewer(R.drawable.thumb_teamviewer),
Terminal(R.drawable.thumb_terminal),
TeslaMotors(R.drawable.thumb_tesla_motors),
TMobile(R.drawable.thumb_t_mobile),
TransIP(R.drawable.thumb_transip),
Trello(R.drawable.thumb_trello),
Tumblr(R.drawable.thumb_tumblr),
TUBerlin(R.drawable.thumb_tu_berlin),
TurboTax(R.drawable.thumb_turbotax),
Tutanota(R.drawable.thumb_tutanota),
TUWien(R.drawable.thumb_tuwien_ac_at),
@ -314,8 +350,8 @@ public class EntryThumbnail {
Uber(R.drawable.thumb_uber),
UbiquitiNetworks(R.drawable.thumb_ubnt),
Ubisoft(R.drawable.thumb_ubisoft),
Unity(R.drawable.thumb_unity),
UbuntuOne(R.drawable.thumb_ubuntu_one),
Unity(R.drawable.thumb_unity),
Uphold(R.drawable.thumb_uphold),
USAA(R.drawable.thumb_usaa),
VagrantCloud(R.drawable.thumb_vagrant_cloud),
@ -326,9 +362,10 @@ public class EntryThumbnail {
Wallet(R.drawable.thumb_wallet),
Wargaming(R.drawable.thumb_wargaming),
Wasabi(R.drawable.thumb_wasabi),
Weclapp(R.drawable.thumb_weclapp),
WebDe(R.drawable.thumb_web_de),
Weclapp(R.drawable.thumb_weclapp),
Wikimedia(R.drawable.thumb_wikimedia),
Wildduck(R.drawable.thumb_wildduck),
Wordfence(R.drawable.thumb_wordfence),
Wordpress(R.drawable.thumb_wordpress),
Workplace(R.drawable.thumb_workplace),
@ -341,8 +378,8 @@ public class EntryThumbnail {
Zoho(R.drawable.thumb_zoho),
Zoom(R.drawable.thumb_zoom);
private int resource;
private AssetType assetType;
private final int resource;
private final AssetType assetType;
EntryThumbnails(int resource) {
this.resource = resource;

View file

@ -576,6 +576,10 @@ public class Settings {
return getBoolean(R.string.settings_key_show_individual_timeouts, false);
}
public boolean isFocusSearchOnStartEnabled() {
return getBoolean(R.string.settings_key_focus_search_on_start, false);
}
public Constants.TapMode getTapSingle() {
String singleTap = getString(R.string.settings_key_tap_single, R.string.settings_default_tap_single);
return Constants.TapMode.valueOf(singleTap.toUpperCase(Locale.ENGLISH));
@ -605,4 +609,13 @@ public class Settings {
public boolean getAutoUnlockAfterAutofill() {
return getBoolean(R.string.settings_key_auto_unlock_after_autofill, false);
}
public void setDefaultBackupType(Constants.BackupType type) {
setString(R.string.settings_key_backup_default_type, type.name().toLowerCase(Locale.ENGLISH));
}
public Constants.BackupType getDefaultBackupType() {
String defaultType = getString(R.string.settings_key_backup_default_type, Constants.BackupType.ENCRYPTED.name());
return Constants.BackupType.valueOf(defaultType.toUpperCase(Locale.ENGLISH));
}
}

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="200dp"
android:viewportWidth="200"
android:viewportHeight="200">
<path
android:fillColor="#4ea9ff"
android:pathData="m100,0c-55.22,-0 -100,44.76 -100,100 0,55.22 44.76,100 100,100 55.22,-0 100,-44.76 100,-100 0,-55.22 -44.76,-100 -100,-100zM128.31,44.51c3.82,1.97 6.13,5.50 7.34,9.35 1.11,5.12 0.34,9.93 -0.03,14.66 3.86,-0.03 8.08,0.85 11.15,2.78 2.66,1.99 3.77,4.67 3.92,7.76 0.02,1.01 -0.07,1.92 -0.24,2.83 -0.05,0.30 -0.14,0.61 -0.25,0.92 1.47,-0.42 2.98,-0.48 4.39,-0.47 6.83,0.55 12.99,4.05 17.55,8.50 4.31,4.56 7.70,9.94 8.08,15.85 -0.29,9.08 -7.18,15.37 -14.66,18.20 -8.40,2.63 -17.58,3.25 -25.41,0.70 -4.56,-1.59 -8.3,-4.12 -10.61,-8.23 -0.43,-0.84 -0.70,-1.75 -0.94,-2.60l-0.24,0c-0.13,0.59 -0.32,1.17 -0.54,1.73 -0.44,1.18 -1.13,2.22 -1.79,3.18 -1.57,2.10 -3.62,3.68 -5.71,4.94 -3.45,1.95 -7.26,2.78 -11.04,2.64 -3.83,-0.28 -7.58,-2.38 -10.01,-4.87 -0.43,-0.48 -0.75,-1.06 -1.04,-1.60l-0.49,0c-0.24,0.82 -0.73,1.52 -1.19,2.17 -1.12,1.38 -2.61,2.28 -4.05,3.06 -3.78,1.70 -8.00,2.62 -11.85,2.88 -3.42,0.23 -6.74,-0.21 -9.74,-1.61 -3.51,-1.83 -4.9,-5.42 -5.47,-8.99 -0.48,-4.84 0.67,-9.55 2.35,-13.84 1.41,-3.45 3.26,-6.67 5.44,-9.41 2.68,-3.43 6.46,-6.31 10.13,-8.13 5.64,-2.51 11.82,-2.97 17.50,-2.34 3.79,0.5 7.37,1.60 10.71,3.14 1.35,0.63 2.61,1.38 3.79,2.13 -0.78,-1.50 -1.77,-2.82 -2.77,-4.04 -1.05,-1.22 -2.26,-2.24 -3.45,-3.15 -3.91,-2.84 -8.48,-4.13 -13.04,-4.67 -4.88,-0.43 -9.68,0.23 -14.16,1.58 -4.43,1.39 -8.40,3.69 -11.91,6.42 -3.63,2.90 -6.59,6.42 -8.93,10.21 -2.84,4.70 -4.36,10.14 -4.86,15.35 -0.30,3.28 -0.22,6.79 0.20,9.76 -0.05,1.74 -1.06,1.94 -2.43,2.09 -3.97,0.16 -7.61,-0.79 -11.25,-1.82 -6.30,-1.76 -12.84,-4.89 -17.11,-9.14 -2.54,-2.72 -4.21,-6.01 -5.30,-9.39 -1.7,-7.27 -0.82,-13.84 3.32,-19.48 3.84,-4.60 9.12,-7.39 14.34,-9.24 2.83,-0.91 5.73,-1.57 8.48,-1.94 1.39,-0.18 2.76,-0.30 4.09,-0.36 -0.02,-2.35 0.68,-4.48 1.75,-6.45 3.22,-4.80 8.51,-6.84 13.79,-7.8 3.70,-0.46 7.30,-0.33 10.57,-0.19 0.92,0.10 2.60,0.26 2.60,0.26 0.85,-1.97 1.41,-3.14 2.36,-4.64 4.22,-5.75 11.59,-9.02 17.83,-10.63 9.87,-1.65 20.14,-2.16 28.89,1.93z" />
</vector>

View file

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="71.33dp"
android:height="49.43dp"
android:viewportWidth="71.33"
android:viewportHeight="49.43">
<path
android:pathData="M60.38,24.71l-19.24,19.24l5.48,5.48l24.71,-24.72l-24.71,-24.71l-5.48,5.48z"
android:fillColor="#e74f3d" />
<path
android:pathData="M24.71,49.42l-24.71,-24.71l24.71,-24.71l24.71,24.71z"
android:fillColor="#e74f3d" />
</vector>

View file

@ -0,0 +1,69 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="174.42dp"
android:height="166.08dp"
android:viewportWidth="174.42"
android:viewportHeight="166.08">
<path android:pathData="m32.58,166.08c-4.72,0 -7.18,-1.78 -9.54,-5.92l-21.53,-39.92c-1.48,-2.86 -1.50,-3.81 -1.50,-5.87l33.84,1.49 7.74,7.74h67.89l-56.37,34.92c-2.74,1.62 -13.19,7.56 -20.53,7.56z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="109.14"
android:endY="124.80"
android:startX="14.14"
android:startY="143.72"
android:type="linear">
<item
android:color="#FF2B7A77"
android:offset="0" />
<item
android:color="#FF4EBAA9"
android:offset="0.5126" />
<item
android:color="#FF5CC2B1"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m41.62,123.60h-29.27c-8.84,0 -12.34,-4.62 -12.34,-9.23 0,-2.92 0.93,-4.51 2.23,-7.75l42.66,-101.85 0.45,-0.89 0.59,-0.91 1.22,-1.19 1.80,-0.96 2.61,-0.57 4.49,0.11 29.64,11.02 -10.02,31.61z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="15.92"
android:endY="123.72"
android:startX="63.07"
android:startY="13.01"
android:type="linear">
<item
android:color="#FF236736"
android:offset="0" />
<item
android:color="#FF6BA443"
android:offset="0.4997" />
<item
android:color="#FF86C146"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path
android:fillType="evenOdd"
android:pathData="m127.59,166.08 l-67.34,-159.43c-1.16,-2.71 -3.02,-6.21 -7.83,-6.21 -4.30,0 -6.35,2.08 -7.50,4.32 0.59,-1.61 2.40,-4.75 7.65,-4.75h46.48c4.28,0 6.33,2.52 7.27,4.83l68.10,161.24z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="150.57"
android:endY="165.51"
android:startX="81.28"
android:startY="0.512"
android:type="linear">
<item
android:color="#FF29A5E3"
android:offset="0" />
<item
android:color="#FF356EB9"
android:offset="0.5104" />
<item
android:color="#FF394DA5"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
</vector>

View file

@ -0,0 +1,42 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="137.81dp"
android:viewportWidth="200.00"
android:viewportHeight="137.81">
<path
android:fillColor="#010101"
android:pathData="M46.72,0l153.27,14.64l-11.60,123.17l-153.53,-14.38l-34.85,-40.77l4.70,-49.82z" />
<path
android:fillColor="#f6eb16"
android:pathData="M47.71,2.79l149.48,14.35l-11.06,117.86l-149.99,-14.35l-33.60,-39.00l4.68,-47.55z" />
<path
android:fillColor="#010101"
android:pathData="M92.93,53.1l-0.35,3.69l15.62,1.49l-0.92,9.66l-34.17,-3.27l3.28,-36.12l33.93,3.24l-0.97,10.16l-15.28,-1.46l-0.31,3.27l13.94,1.33l-0.89,9.31z" />
<path
android:fillColor="#010101"
android:pathData="m115.38,56.00 l-6.41,9.46c0,0 8.06,4.33 19.24,5.30 11.16,0.99 19.36,-2.21 21.98,-7.56 2.63,-5.33 -0.51,-11.40 -5.69,-13.08 -5.18,-1.67 -14.16,-3.46 -13.22,-5.24 0.93,-1.77 6.57,-1.40 9.99,0.02 3.42,1.42 4.35,2.28 4.35,2.28l5.89,-8.42c0,0 -6.26,-4.58 -17.97,-5.27 -11.72,-0.69 -20.33,5.17 -20.93,10.62 -0.60,5.45 2.89,8.67 8.22,10.61 0,0 4.51,1.45 7.92,2.19 3.40,0.75 5.56,2.99 1.50,3.79 -4.06,0.79 -12.42,-2.20 -14.89,-4.72z" />
<path
android:fillColor="#010101"
android:pathData="m159.93,73.13 l2.08,-24.46 -9.98,-0.95 1.11,-11.76 38.46,3.67 -1.11,11.76 -9.99,-0.95 -2.33,24.43z" />
<path
android:fillColor="#010101"
android:pathData="m79.22,69.84 l17.65,1.59 -1.87,20.50c0,0 -1.74,4.91 4.13,5.48 5.88,0.55 5.62,-4.72 5.62,-4.72l1.93,-20.23 17.72,1.69 -2.27,23.85c0,0 -2.09,13.02 -23.76,10.95C76.7,106.89 76.99,93.19 76.99,93.19Z" />
<path
android:fillColor="#010101"
android:pathData="M139.62,96.71l-15.39,-22.49l20.50,1.87l5.06,9.97l6.53,-8.86l20.57,1.95l-19.19,19.01l-1.48,15.53l-18.05,-1.72z" />
<path
android:fillColor="#010101"
android:pathData="m67.83,86.56c0,0 7.43,-1.46 7.24,-9.05 -0.19,-7.6 -15.36,-9.48 -15.36,-9.48l-25.03,-2.48 -3.41,36.25c0,0 19.98,2.1 25.80,2.57 5.82,0.46 17.54,-0.03 18.70,-7.52 1.15,-7.50 -7.93,-10.27 -7.93,-10.27zM50.73,76.18c0,0 7.68,-0.71 7.26,2.89 -0.43,3.60 -7.73,1.97 -7.73,1.97zM49.13,94.67 L49.53,88.78c0,0 9.61,-0.35 9.30,3.76 -0.31,4.12 -9.7,2.12 -9.7,2.12z" />
<path
android:fillColor="#010101"
android:pathData="m64.17,45.02c0,0 7.43,-1.46 7.24,-9.05 -0.19,-7.59 -15.36,-9.49 -15.36,-9.49L31.00,24.00 27.6,60.26c0,0 19.98,2.1 25.79,2.56 5.82,0.47 17.54,-0.02 18.70,-7.52 1.15,-7.50 -7.92,-10.27 -7.92,-10.27zM47.23,34.74c0,0 7.69,-0.70 7.27,2.89 -0.43,3.60 -7.73,1.97 -7.73,1.97zM45.63,53.24 L46.03,47.34c0,0 9.60,-0.35 9.30,3.77 -0.31,4.12 -9.70,2.12 -9.70,2.12z" />
<path
android:fillColor="#010101"
android:pathData="m22.25,60.56c-0.35,3.74 -3.67,6.48 -7.40,6.13 -3.74,-0.35 -6.48,-3.68 -6.13,-7.42 0.36,-3.73 3.68,-6.47 7.42,-6.12 3.73,0.35 6.47,3.68 6.11,7.41z" />
<path
android:fillColor="#ffffff"
android:pathData="m19.77,60.33c-0.22,2.36 -2.32,4.09 -4.69,3.87 -2.36,-0.22 -4.09,-2.33 -3.87,-4.69 0.23,-2.36 2.33,-4.09 4.69,-3.87 2.36,0.22 4.09,2.32 3.87,4.69z" />
<path
android:fillColor="#010101"
android:pathData="m177.03,82.72c0.15,-1.60 1.58,-2.78 3.18,-2.63 1.60,0.15 2.79,1.58 2.64,3.19 -0.15,1.60 -1.58,2.78 -3.19,2.63 -1.60,-0.16 -2.78,-1.58 -2.63,-3.19zM182.14,83.21c0.13,-1.36 -0.75,-2.44 -1.97,-2.55 -1.22,-0.12 -2.29,0.77 -2.42,2.13 -0.13,1.36 0.75,2.44 1.97,2.56 1.22,0.11 2.29,-0.77 2.42,-2.14zM178.98,81.23 L180.20,81.35c0.79,0.07 1.19,0.39 1.13,1.08 -0.05,0.56 -0.40,0.80 -0.95,0.80l0.75,1.52 -0.63,-0.05 -0.71,-1.50 -0.37,-0.03 -0.13,1.42 -0.61,-0.05zM179.46,82.70 L180.00,82.75c0.36,0.03 0.68,0.01 0.72,-0.43 0.04,-0.38 -0.30,-0.47 -0.62,-0.51l-0.55,-0.05z" />
</vector>

View file

@ -0,0 +1,57 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="150dp"
android:height="150dp"
android:viewportWidth="200"
android:viewportHeight="200">
<path
android:fillColor="#008e5a"
android:pathData="m179.02,143.60c-0.14,0 -0.88,0.67 -1.72,1.48 -4.77,4.87 -15.54,12.05 -24.35,16.21 -11.11,5.21 -22.23,8.08 -35.22,9.18l-6.54,0.57v14.25c0,12.58 0.09,14.30 0.78,14.59 1.13,0.43 14.02,-0.66 20.17,-1.72 23.95,-4.06 46.34,-14.59 63.66,-29.94 2.01,-1.77 3.88,-3.44 4.18,-3.68 0.29,-0.23 -3.59,-4.35 -10.08,-10.66 -5.80,-5.64 -10.67,-10.28 -10.87,-10.28z" />
<path
android:fillColor="#008e5a"
android:pathData="m168.15,133.07c-0.19,0 -1.86,1.29 -3.69,2.91 -6.78,5.88 -17.75,12.10 -26.71,15.16 -7.08,2.39 -15.84,4.01 -24.35,4.54l-1.96,0.09 -0.14,5.93c-0.04,3.25 0.05,6.12 0.24,6.31 0.19,0.19 3.05,0.14 6.29,-0.09 15.98,-1.24 31.33,-6.31 44.52,-14.68 4.67,-2.96 13.77,-9.95 14.56,-11.19 0.19,-0.23 -1.62,-2.39 -4.03,-4.73 -2.41,-2.34 -4.52,-4.25 -4.72,-4.25z" />
<path
android:fillColor="#008e5a"
android:pathData="m145.13,110.64c-0.14,0 -1.91,1.29 -3.93,2.87 -7.62,5.88 -16.28,9.18 -26.66,10.23l-3.34,0.33v14.30c0,12.43 0.09,14.35 0.73,14.63 0.44,0.14 3.05,-0 5.90,-0.28 17.17,-1.72 31.87,-7.84 44.71,-18.46l3.83,-3.25 -10.47,-10.18c-5.80,-5.64 -10.62,-10.23 -10.77,-10.18z" />
<path
android:fillColor="#008e5a"
android:pathData="m76.30,110.59c-0.19,0 -2.36,2.00 -4.87,4.44l-4.52,4.40 2.36,1.96c4.03,3.39 8.21,6.17 12.25,8.22 7.42,3.73 18.89,6.79 25.53,6.79h2.65v-6.17,-6.17l-3.54,-0.33c-4.87,-0.47 -11.75,-2.20 -15.84,-4.01 -3.83,-1.67 -10.77,-6.07 -12.54,-7.89 -0.68,-0.67 -1.32,-1.24 -1.47,-1.24z" />
<path
android:fillColor="#008e5a"
android:pathData="m133.07,98.73 l-3.19,2.34c-3.98,2.91 -9.10,5.02 -13.82,5.74 -2.01,0.28 -3.93,0.62 -4.23,0.71 -0.49,0.09 -0.63,1.91 -0.63,6.84 0,3.68 0.14,6.79 0.39,6.88 0.78,0.47 8.51,-0.71 12.39,-1.86 6.78,-2.00 15.05,-6.60 18.30,-10.09 0.83,-0.86 0.64,-1.1 -4.18,-5.74z" />
<path
android:fillColor="#008e5a"
android:pathData="m88.25,98.63 l-5.11,5.07 -5.16,5.02 1.72,1.43c7.28,6.12 18.15,10.52 27.05,11.05l2.70,0.14 0.14,-6.98 0.14,-6.98 -3.24,-0.33c-3.98,-0.38 -9.44,-2.24 -13.03,-4.44 -1.47,-0.95 -3.24,-2.20 -3.93,-2.82z" />
<path
android:fillColor="#008e5a"
android:pathData="m159.88,76.63v2.24c0,3.34 -1.62,10.33 -3.39,14.73 -1.42,3.58 -5.65,10.38 -8.70,14.01l-1.37,1.57 10.62,10.33 10.57,10.28 3.44,-3.97c4.87,-5.64 7.67,-9.85 10.97,-16.45 4.57,-9.18 7.13,-18.27 7.72,-27.64l0.29,-5.11h-15.05z" />
<path
android:fillColor="#008e5a"
android:pathData="m143.21,76.63 l-0.29,2.24c-0.88,6.26 -3.34,12.15 -6.83,16.40l-1.77,2.15 5.01,4.87 5.01,4.92 1.18,-1.1c2.21,-2.00 6.88,-9.32 8.46,-13.29 1.72,-4.30 3.44,-11.52 3.44,-14.44V76.63h-7.08z" />
<path
android:fillColor="#008e5a"
android:pathData="m68.26,76.24c-2.53,0.02 -4.39,0.14 -4.50,0.28 -0.49,0.81 0.78,8.89 2.01,12.77 1.91,5.93 5.26,11.81 9.34,16.40l1.37,1.57 5.06,-4.97 5.11,-4.97 -1.77,-2.29C81.02,90.12 79.01,85.33 78.32,79.64L77.97,76.39 70.99,76.25c-0.95,-0.01 -1.88,-0.01 -2.72,-0.00z" />
<path
android:fillColor="#008e5a"
android:pathData="m144.39,44.10 l-5.11,4.97 -5.06,4.97 1.96,2.44c3.54,4.30 5.75,9.80 6.74,16.40l0.29,1.81h7.18,7.18l-0.34,-3.39c-0.73,-7.17 -3.69,-15.11 -7.92,-21.14 -0.93,-1.38 -2.46,-3.30 -3.34,-4.30z" />
<path
android:fillColor="#008e5a"
android:pathData="m76.89,44.05 l-1.82,1.96C69.02,52.57 64.39,63.23 63.85,71.84l-0.14,2.63 7.03,0.14c5.36,0.09 7.03,-0 7.18,-0.47 0.09,-0.33 0.49,-2.44 0.93,-4.68 0.88,-4.54 3.19,-9.42 6.19,-13.20l1.91,-2.48 -5.01,-4.83z" />
<path
android:fillColor="#008e5a"
android:pathData="m109.70,30.23 l-2.06,0.04c-8.80,0.19 -20.71,4.83 -27.45,10.76l-2.01,1.76 5.01,4.92 5.06,4.92 1.72,-1.33c4.92,-3.73 9.79,-5.78 15.93,-6.74l3.78,-0.62v-6.84z" />
<path
android:fillColor="#008e5a"
android:pathData="m111.67,30.08v6.98,6.98l2.36,0.28c5.95,0.76 11.95,3.10 16.18,6.36l2.46,1.91 5.11,-4.97c3.09,-3.01 4.92,-5.11 4.62,-5.35 -5.26,-4.64 -13.48,-8.99 -20.17,-10.62 -2.11,-0.52 -5.41,-1.1 -7.23,-1.29z" />
<path
android:fillColor="#008e5a"
android:pathData="m167.31,22.1c-0.14,0 -5.01,4.59 -10.77,10.18l-10.47,10.18 1.27,1.14c2.06,1.86 6.1,7.89 8.11,12.10 2.31,4.78 3.88,10.38 4.28,15.26l0.29,3.73h15.00,15.00l-0.29,-4.68C188.71,53.52 181.19,36.25 169.77,24.34c-1.18,-1.24 -2.31,-2.24 -2.46,-2.24z" />
<path
android:fillColor="#008e5a"
android:pathData="m111.67,14.82v6.50,6.50h2.36c8.26,0.04 19.77,4.44 27.74,10.71l3.00,2.29 4.52,-4.40 4.57,-4.44 -2.75,-2.34c-7.77,-6.60 -18.74,-11.76 -28.87,-13.53 -2.16,-0.38 -5.41,-0.81 -7.23,-1.00z" />
<path
android:fillColor="#008e5a"
android:pathData="m42.75,11.09c-0.54,0 -5.95,6.12 -9.15,10.38C22.92,35.54 16.28,53.81 15.64,71.13l-0.14,3.34 22.68,0.14 22.72,0.09 0.29,-3.20c0.98,-9.61 4.92,-18.89 11.21,-26.45L74.92,42.09 58.98,26.59C50.23,18.08 42.9,11.09 42.75,11.09Z" />
<path
android:fillColor="#008e5a"
android:pathData="M31.63,0 L26.81,5.45C18.25,15.11 11.06,26.88 6.64,38.60 2.90,48.40 0,62.61 0,71.17v3.53h6.34,6.29l0.39,-4.92c1.42,-20.47 9.69,-40.46 22.77,-55.10 1.82,-2.05 3.69,-4.21 4.13,-4.78 0.83,-1.00 0.73,-1.1 -3.73,-5.45z" />
</vector>

View file

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="170.43dp"
android:height="200dp"
android:viewportWidth="170.43"
android:viewportHeight="200">
<path
android:fillColor="#f1471f"
android:pathData="m170.43,64.64 l-6.19,-16.71 4.26,-9.58c0.53,-1.26 0.26,-2.66 -0.66,-3.66l-11.65,-11.78c-5.12,-5.12 -12.71,-6.92 -19.57,-4.52l-3.26,1.13 -17.84,-19.30 -30.15,-0.19l-0.2,-0L54.79,0.26 37.01,19.70 33.82,18.57c-6.92,-2.46 -14.58,-0.66 -19.70,4.59L2.26,35.15C1.46,35.95 1.26,37.08 1.66,38.08L6.12,48.07 -0,64.78 3.99,79.89 22.10,148.66c2.06,7.92 6.85,14.84 13.58,19.64 0,-0 21.97,15.51 43.60,29.56C81.22,199.13 83.22,200 85.35,200c2.13,-0 4.12,-0.86 6.05,-2.13 24.36,-15.97 43.60,-29.62 43.60,-29.62 6.65,-4.79 11.45,-11.71 13.51,-19.64l17.97,-68.77 3.92,-15.18" />
<path
android:fillColor="#f25934"
android:pathData="m23.04,22.42c-3.39,0.00 -7.41,1.22 -9.85,3.40L2.06,37.15 6.72,49.53 -0,66.24 22.96,151.59c1.46,5.26 4.72,9.85 8.98,13.91L71.57,192.07C78.71,196.67 82.4,199.68 84.31,199.68c2.38,-0 2.02,-4.67 2.17,-16.79l-1.46,-151.59 -17.64,7.32 -22.63,-5.26 -17.37,-9.98c-1.10,-0.64 -2.63,-0.94 -4.32,-0.94" />
<path
android:fillColor="#ffffff"
android:pathData="m89.21,123.03c-0.79,-0.33 -1.66,-0.59 -1.93,-0.59l-1.06,-0 -1.06,-0c-0.26,-0 -1.13,0.26 -1.93,0.59l-8.65,3.59c-0.79,0.33 -2.13,0.93 -2.92,1.33l-13.04,6.79c-0.79,0.39 -0.86,1.13 -0.13,1.66l11.51,8.12c0.73,0.53 1.86,1.39 2.53,1.99l5.12,4.39c0.66,0.59 1.73,1.53 2.39,2.13l4.92,4.39c0.66,0.59 1.73,0.59 2.39,-0l5.05,-4.39c0.66,-0.6 1.73,-1.53 2.39,-2.13l5.12,-4.46c0.66,-0.59 1.79,-1.46 2.53,-1.99l11.51,-8.18c0.73,-0.53 0.66,-1.26 -0.13,-1.66l-13.04,-6.65c-0.79,-0.39 -2.13,-0.99 -2.92,-1.33l-8.65,-3.59" />
<path
android:fillColor="#ffffff"
android:pathData="m151.67,67.61c0.26,-0.86 0.26,-1.19 0.26,-1.19 0,-0.86 -0.06,-2.33 -0.2,-3.19l-0.66,-1.93c-0.4,-0.79 -1.06,-2.06 -1.59,-2.79l-7.52,-11.11c-0.46,-0.73 -1.33,-1.86 -1.93,-2.59L130.30,32.59c-0.53,-0.66 -1.06,-1.26 -1.13,-1.19l-0.13,-0c0,-0 -0.73,0.13 -1.59,0.26l-14.84,2.92c-0.86,0.2 -2.26,0.46 -3.12,0.59l-0.26,0.06c-0.86,0.13 -2.26,0.06 -3.12,-0.19l-12.45,-3.99c-0.86,-0.26 -2.26,-0.66 -3.06,-0.86 0,-0 -2.53,-0.59 -4.59,-0.53 -2.06,-0 -4.59,0.53 -4.59,0.53 -0.86,0.19 -2.26,0.59 -3.06,0.86l-12.45,3.99c-0.86,0.26 -2.26,0.33 -3.12,0.19l-0.26,-0.06c-0.86,-0.13 -2.26,-0.46 -3.12,-0.59l-14.98,-2.79c-0.86,-0.2 -1.59,-0.26 -1.59,-0.26l-0.13,-0c-0.06,-0 -0.59,0.53 -1.13,1.19L31.76,44.91c-0.53,0.66 -1.39,1.86 -1.93,2.59L22.31,58.62c-0.46,0.73 -1.19,1.99 -1.59,2.79l-0.66,1.93c-0.13,0.86 -0.26,2.33 -0.2,3.19 0,-0 0,0.26 0.26,1.19 0.46,1.59 1.59,3.06 1.59,3.06 0.53,0.66 1.53,1.79 2.13,2.39l22.03,23.43c0.59,0.66 0.79,1.86 0.46,2.66l-4.59,10.85c-0.33,0.79 -0.39,2.13 -0.06,2.99l1.26,3.39c1.06,2.86 2.86,5.39 5.26,7.32l4.46,3.59c0.66,0.53 1.86,0.73 2.66,0.33l14.11,-6.72c0.79,-0.4 1.99,-1.19 2.66,-1.79l10.11,-9.12c1.46,-1.33 1.53,-3.59 0.2,-5.06l-21.23,-14.31c-0.73,-0.46 -0.99,-1.53 -0.59,-2.33l9.32,-17.57c0.39,-0.79 0.46,-2.06 0.13,-2.86l-1.13,-2.59c-0.33,-0.79 -1.33,-1.73 -2.13,-2.06l-27.36,-10.25c-0.79,-0.33 -0.79,-0.66 0.06,-0.73l17.64,-1.66c0.86,-0.06 2.26,0.06 3.12,0.26l15.71,4.39c0.86,0.26 1.39,1.13 1.26,1.99l-5.46,29.89c-0.13,0.86 -0.13,2.06 0.06,2.72 0.19,0.66 1.06,1.26 1.93,1.46l10.91,2.33c0.86,0.2 2.26,0.2 3.12,-0l10.18,-2.33c0.86,-0.2 1.73,-0.86 1.93,-1.46 0.19,-0.59 0.26,-1.86 0.06,-2.72l-5.39,-29.89c-0.13,-0.86 0.39,-1.79 1.26,-1.99l15.71,-4.39c0.86,-0.26 2.26,-0.33 3.12,-0.26l17.64,1.66c0.86,0.06 0.93,0.39 0.06,0.73l-27.36,10.38c-0.79,0.33 -1.79,1.19 -2.13,2.06l-1.13,2.59c-0.33,0.79 -0.33,2.13 0.13,2.86l9.38,17.57c0.39,0.79 0.13,1.79 -0.59,2.33l-21.23,14.38c-1.39,1.39 -1.26,3.72 0.19,5.06l10.12,9.12c0.66,0.59 1.86,1.39 2.66,1.73l14.18,6.72c0.79,0.4 1.99,0.20 2.66,-0.33l4.46,-3.66c2.39,-1.93 4.19,-4.46 5.19,-7.32l1.26,-3.39c0.33,-0.79 0.26,-2.19 -0.06,-2.99l-4.59,-10.85c-0.33,-0.79 -0.13,-1.99 0.46,-2.66l22.03,-23.43c0.59,-0.66 1.53,-1.73 2.13,-2.39 -0.13,-0.2 1.06,-1.66 1.46,-3.26" />
</vector>

View file

@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="112.50dp"
android:height="38.21dp"
android:viewportWidth="150.00"
android:viewportHeight="50.95">
<path
android:fillColor="#0f0c0c"
android:pathData="M0,31.45C0,19.95 7.71,11.95 18.70,11.95c7.41,0 13.46,3.71 15.86,9.46 0.29,0.58 0.36,1.08 0.36,1.67 0,1.31 -1.02,2.18 -2.32,2.18 -1.02,0 -1.89,-0.58 -2.32,-1.74 -1.88,-4.65 -6.18,-7.34 -11.56,-7.34 -8.22,0 -13.97,6.25 -13.97,15.28 0,8.95 5.67,15.20 13.97,15.20 5.38,0 9.45,-2.61 11.64,-8.07 0.43,-1.09 1.16,-1.74 2.25,-1.74 1.30,0 2.32,1.01 2.32,2.32 0,0.51 -0.07,0.87 -0.29,1.52C32.30,46.94 26.34,50.95 18.70,50.95 7.63,50.95 0,42.94 0,31.45" />
<path
android:fillColor="#0f0c0c"
android:pathData="m62.41,47.75c0,1.59 -0.87,2.61 -2.4,2.61 -1.52,0 -2.32,-1.02 -2.32,-2.61V2.62C57.68,0.94 58.55,0 60.08,0c1.52,0 2.32,0.94 2.32,2.62v10.27h8.14c1.45,0 2.32,0.8 2.32,2.10 0,1.31 -0.87,2.11 -2.32,2.11h-8.14l-0.00,30.63" />
<path
android:fillColor="#0f0c0c"
android:pathData="m98.85,15.44c0,1.30 -0.94,2.25 -2.32,2.25 -0.51,0 -1.02,-0.14 -1.74,-0.50 -1.08,-0.51 -2.25,-0.80 -3.78,-0.80 -5.02,0 -8.29,4.36 -8.29,9.89v21.46c0,1.67 -0.8,2.61 -2.32,2.61 -1.52,0 -2.40,-0.94 -2.40,-2.61V15.15c0,-1.67 0.87,-2.62 2.40,-2.62 1.52,0 2.32,0.94 2.32,2.62v0.94c2.03,-2.69 5.23,-4.14 8.80,-4.14 2.76,0 4.72,0.58 6.11,1.45 0.8,0.50 1.23,1.16 1.23,2.03" />
<path
android:fillColor="#0f0c0c"
android:pathData="m103.65,15.15c0,-1.67 0.86,-2.62 2.39,-2.62 1.52,0 2.32,0.94 2.32,2.62v32.59c0,1.59 -0.87,2.61 -2.4,2.61 -1.52,0 -2.32,-1.02 -2.32,-2.61V15.15" />
<path
android:fillColor="#0f0c0c"
android:pathData="m43.23,15.15c0,-1.67 0.87,-2.62 2.4,-2.62 1.52,0 2.32,0.94 2.32,2.62v32.59c0,1.59 -0.87,2.61 -2.39,2.61 -1.52,0 -2.32,-1.02 -2.32,-2.61V15.15" />
<path
android:fillColor="#0f0c0c"
android:pathData="m49.31,3.71c0,2.05 -1.66,3.71 -3.71,3.71 -2.05,0 -3.71,-1.66 -3.71,-3.71C41.88,1.66 43.54,0 45.59,0c2.05,0 3.71,1.66 3.71,3.71" />
<path
android:fillColor="#0f0c0c"
android:pathData="m132.97,34.36 l-12.88,15.06c-0.50,0.65 -1.16,0.94 -1.89,0.94 -1.30,0 -2.25,-1.02 -2.25,-2.18 0,-0.50 0.14,-1.09 0.65,-1.67L130.06,31.30 117.11,16.46c-0.51,-0.58 -0.80,-1.09 -0.80,-1.74 0,-1.16 0.94,-2.18 2.32,-2.18 0.72,0 1.23,0.29 1.81,0.94l12.51,14.69 12.51,-14.69c0.58,-0.65 1.09,-0.94 1.82,-0.94 1.38,0 2.32,1.02 2.32,2.18 0,0.65 -0.29,1.16 -0.8,1.74l-12.95,14.84 13.46,15.20c0.51,0.58 0.65,1.16 0.65,1.67 0,1.16 -0.94,2.18 -2.25,2.18 -0.73,0 -1.38,-0.29 -1.89,-0.94L132.97,34.36" />
<path
android:fillColor="#0f0c0c"
android:pathData="m136.69,3.71c0,2.05 -1.66,3.71 -3.71,3.71 -2.05,0 -3.71,-1.66 -3.71,-3.71C129.25,1.66 130.92,0 132.97,0c2.05,0 3.71,1.66 3.71,3.71" />
</vector>

View file

@ -0,0 +1,33 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="47.10dp"
android:height="45.62dp"
android:viewportWidth="47.10"
android:viewportHeight="45.62">
<path
android:fillColor="#2185d0"
android:pathData="M26.32,35.16L24.75,36.05L24.75,43.23L26.02,43.23L26.15,42.67C26.53,43.15 27.07,43.38 27.77,43.38C28.48,43.38 29.08,43.17 29.56,42.75C30.18,42.19 30.49,41.37 30.49,40.28C30.49,39.44 30.28,38.76 29.86,38.25C29.39,37.68 28.73,37.39 27.89,37.39C27.58,37.39 27.31,37.45 27.06,37.57C26.74,37.72 26.50,37.93 26.32,38.19L26.32,35.16zM27.58,38.54C27.97,38.54 28.27,38.71 28.49,39.04C28.70,39.38 28.81,39.83 28.81,40.41C28.81,40.99 28.69,41.45 28.46,41.78C28.23,42.12 27.91,42.28 27.51,42.28C27.20,42.28 26.93,42.18 26.70,41.97C26.47,41.76 26.34,41.50 26.32,41.19L26.32,39.83C26.32,39.47 26.44,39.17 26.68,38.92C26.93,38.67 27.23,38.54 27.58,38.54z" />
<path
android:fillColor="#2185d0"
android:pathData="M44.06,37.40C43.40,37.40 42.83,37.63 42.34,38.07C41.71,38.66 41.39,39.50 41.39,40.59C41.39,41.36 41.59,41.99 41.98,42.5C42.44,43.09 43.08,43.38 43.92,43.38C44.60,43.38 45.13,43.10 45.51,42.55C45.51,43.80 45.06,44.42 44.16,44.42C43.52,44.42 42.95,44.25 42.44,43.92L42.04,44.72C42.70,45.32 43.48,45.62 44.38,45.62C45.25,45.62 45.92,45.37 46.38,44.86C46.86,44.34 47.10,43.60 47.10,42.65L47.10,37.55L45.88,37.55L45.76,38.17C45.76,38.08 45.64,37.96 45.40,37.79C45.03,37.53 44.58,37.40 44.06,37.40zM44.40,38.53C44.66,38.53 44.90,38.63 45.12,38.82C45.35,39.00 45.48,39.22 45.51,39.48L45.51,40.92C45.51,41.28 45.38,41.59 45.13,41.86C44.88,42.12 44.59,42.25 44.25,42.25C43.43,42.25 43.02,41.62 43.02,40.38C43.02,39.81 43.14,39.36 43.39,39.03C43.64,38.70 43.98,38.53 44.40,38.53z" />
<path
android:fillColor="#2185d0"
android:pathData="M17.84,35.19L16.26,36.07L16.26,37.88C15.87,37.56 15.38,37.40 14.81,37.40C14.14,37.40 13.57,37.63 13.10,38.07C12.46,38.66 12.15,39.50 12.15,40.59C12.15,41.37 12.34,42.00 12.73,42.5C13.20,43.09 13.88,43.38 14.77,43.38C15.09,43.38 15.40,43.31 15.70,43.17C16.00,43.03 16.21,42.85 16.35,42.63L16.58,43.23L17.84,43.23L17.84,35.19zM15.15,38.53C15.42,38.53 15.66,38.62 15.86,38.81C16.07,38.98 16.20,39.20 16.26,39.48L16.26,41.07C16.22,41.38 16.07,41.65 15.81,41.90C15.55,42.13 15.27,42.25 14.97,42.25C14.16,42.25 13.76,41.62 13.76,40.38C13.76,39.81 13.89,39.36 14.14,39.03C14.39,38.70 14.72,38.53 15.15,38.53z" />
<path
android:fillColor="#2185d0"
android:pathData="M8.96,37.40C8.14,37.40 7.48,37.66 6.97,38.18C6.41,38.75 6.13,39.49 6.13,40.41C6.13,41.21 6.39,41.90 6.89,42.46C7.44,43.08 8.14,43.38 8.96,43.38C9.67,43.38 10.29,43.14 10.83,42.66C11.47,42.08 11.79,41.33 11.79,40.41C11.79,39.61 11.57,38.94 11.14,38.39C10.62,37.73 9.90,37.40 8.96,37.40zM8.96,38.53C9.77,38.53 10.18,39.15 10.18,40.41C10.18,41.61 9.77,42.21 8.96,42.21C8.15,42.21 7.75,41.61 7.75,40.41C7.75,39.15 8.15,38.53 8.96,38.53z" />
<path
android:fillColor="#2185d0"
android:pathData="M33.88,37.40C33.07,37.40 32.40,37.67 31.88,38.20C31.29,38.79 31.00,39.53 31.00,40.42C31.00,41.33 31.26,42.04 31.78,42.56C32.32,43.11 33.07,43.38 34.04,43.38C34.94,43.38 35.69,43.12 36.29,42.58L35.89,41.75C35.30,42.08 34.73,42.25 34.19,42.25C33.81,42.25 33.47,42.12 33.19,41.87C32.91,41.61 32.76,41.29 32.73,40.91L36.63,40.91L36.63,40.33C36.63,39.51 36.42,38.83 35.98,38.32C35.48,37.71 34.78,37.40 33.88,37.40zM33.87,38.52C34.62,38.52 35.01,38.93 35.06,39.74L32.64,39.74C32.73,38.93 33.14,38.52 33.87,38.52z" />
<path
android:fillColor="#2185d0"
android:pathData="M21.37,37.40C20.56,37.40 19.89,37.67 19.36,38.20C18.78,38.79 18.49,39.53 18.49,40.42C18.49,41.33 18.75,42.04 19.26,42.56C19.81,43.11 20.56,43.38 21.53,43.38C22.43,43.38 23.18,43.12 23.78,42.58L23.38,41.75C22.79,42.08 22.22,42.25 21.68,42.25C21.29,42.25 20.96,42.12 20.68,41.87C20.40,41.61 20.25,41.29 20.22,40.91L24.12,40.91L24.12,40.33C24.12,39.51 23.90,38.83 23.47,38.32C22.97,37.71 22.27,37.40 21.37,37.40zM21.35,38.52C22.10,38.52 22.50,38.93 22.54,39.74L20.13,39.74C20.22,38.93 20.63,38.52 21.35,38.52z" />
<path
android:fillColor="#2185d0"
android:pathData="m39.99,37.40c-0.25,0 -0.49,0.06 -0.73,0.20 -0.23,0.12 -0.39,0.27 -0.47,0.45l-0.15,-0.50h-1.33v5.67h1.55v-4.07c0.13,-0.29 0.34,-0.43 0.62,-0.43 0.30,0 0.60,0.15 0.87,0.47l1.32,-0.72c-0.36,-0.70 -0.92,-1.06 -1.67,-1.06z" />
<path
android:fillColor="#2185d0"
android:pathData="m3.65,35.16c-1.14,0 -2.03,0.38 -2.67,1.15 -0.65,0.76 -0.97,1.78 -0.97,3.03 0,0.96 0.23,1.81 0.71,2.52 0.65,1.00 1.65,1.50 3.00,1.50 0.93,0 1.74,-0.34 2.43,-1.03L5.51,41.36c-0.61,0.39 -1.15,0.58 -1.60,0.58 -0.68,0 -1.23,-0.26 -1.63,-0.78 -0.38,-0.50 -0.57,-1.10 -0.57,-1.80 0,-0.79 0.16,-1.43 0.48,-1.92 0.37,-0.57 0.90,-0.86 1.58,-0.86 0.49,0 1.03,0.21 1.63,0.65l0.63,-1.03C5.25,35.50 4.45,35.16 3.65,35.16Z" />
<path
android:fillColor="#2185d0"
android:pathData="M24.27,0A16.12,16.12 0,0 0,8.21 16.12,16.12 16.12,0 0,0 10.67,24.68L24.12,7.30a0.25,0.18 0,0 1,0.43 0L38,24.68A16.12,16.12 0,0 0,40.46 16.12,16.12 16.12,0 0,0 24.33,0a16.12,16.12 0,0 0,-0.06 0z" />
</vector>

View file

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="124dp"
android:height="120.6dp"
android:viewportWidth="124"
android:viewportHeight="120.6">
<path
android:fillColor="#00b2ad"
android:pathData="M63.7,0L63.7,120.6L124,60.3ZM82.7,81.3c-6.6,0 -11.8,-3.6 -14,-12l8,-1.7c0.9,5.1 3.9,7 6.3,7 2.8,0 5,-1.9 5,-5.1 0,-8 -18.2,-8.2 -18.2,-20.1 0,-7.3 4.4,-12 12.8,-12 7.3,0 11.7,4.3 13.1,10.4l-7.3,2.1c-1.4,-4 -3.1,-5.7 -6,-5.7 -2.9,0 -4.5,1.8 -4.5,4.7 0,6.4 18.2,6.9 18.2,20.3 0.2,7.2 -4.9,12.1 -13.4,12.1z" />
<path
android:fillColor="#4e4e56"
android:pathData="m0,60.3 l60.3,60.3L60.3,0ZM52.7,54.2h-8.2v-3.6c0,-4.7 -2.1,-6 -5.3,-6 -3.2,0 -5.3,1.3 -5.3,6L33.9,68c0,4.7 2.1,6 5.3,6 3.2,0 5.3,-1.3 5.3,-6v-3.8h8.2v2.7c0,10.5 -5.6,14.3 -13.5,14.3 -7.9,0 -13.5,-3.8 -13.5,-14.3L25.7,51.7c0,-10.5 5.6,-14.3 13.5,-14.3 7.9,0 13.5,3.8 13.5,14.3z" />
</vector>

View file

@ -1,9 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:viewportWidth="128"
android:viewportHeight="128"
android:width="128dp"
android:height="128dp">
<path
android:pathData="M84.29 53.81A10.62 10.62 0 0 1 80 45.23a21.44 21.44 0 0 1 1 -4.46c0.19 -0.66 0.23 -1 1 -1.14 3.65 -0.75 5.25 -0.63 5.56 -1.07a13.17 13.17 0 0 0 1.38 -3.85l-28.2 -9s1.78 4.58 2.71 5l12.82 5.7S69.6 37.83 66 38.93l-0.86 0.27a12.17 12.17 0 0 0 3.56 3.67c2.38 -0.69 6.76 -1.81 6.76 -1.81A36.94 36.94 0 0 1 42.69 61.18c-0.63 0 -3.27 0 -4.92 0.1 -1.44 0.13 -2.13 1.31 -0.72 1.94a10.69 10.69 0 0 1 5.17 6.27c0.51 1.65 -0.39 2.64 -1.52 3.54 -2.49 1.92 -8.83 6.66 -15.07 11.3 -0.73 -1.38 -1.41 -2.78 -2 -4.18 -5.62 -12.71 -8.35 -30.36 -8.35 -54V26L63.93 10.34 112.62 26v0.22a231.3 231.3 0 0 1 -1.11 23.55l-0.07 0.62h8l0 -0.51a236.47 236.47 0 0 0 1.09 -23.66v-6L63.93 2 7.3 20.18v6c0 24.74 3 43.44 9 57.19 0.86 1.94 1.82 3.87 2.86 5.76l-8.75 6.49c1.13 2 2.42 3.87 2.42 3.87L44 77.24A101.06 101.06 0 0 1 100.63 60h9.45a88 88 0 0 1 -5.82 20.16A68.1 68.1 0 0 1 92.93 97.79 72.62 72.62 0 0 1 80 109.27a67.73 67.73 0 0 1 -16 8.4l-0.06 0 -0.15 0a68.06 68.06 0 0 1 -15.93 -8.38A73.34 73.34 0 0 1 34.92 97.78c-1.19 -1.35 -2.38 -2.82 -3.63 -4.51L31 92.83 24.5 97.46l0.34 0.46c1.42 1.91 2.77 3.59 4.13 5.12A81.27 81.27 0 0 0 43.3 115.78a74.81 74.81 0 0 0 18 9.39c0.06 0 1.47 0.51 2.18 0.71l0.37 0.09 0.12 0 0.12 0 0.38 -0.09c0.7 -0.2 2.11 -0.69 2.17 -0.71a74.65 74.65 0 0 0 17.93 -9.38 81 81 0 0 0 14.35 -12.73 76.17 76.17 0 0 0 12.65 -19.69A96.83 96.83 0 0 0 118.14 60h6.77l0.72 -4.53h-25C90 55.26 86.88 55.66 84.29 53.81Z"
android:fillColor="#007C97" />
</vector>
android:width="91.03dp"
android:height="122.87dp"
android:viewportWidth="91.03"
android:viewportHeight="122.87">
<path
android:pathData="m19.21,8.26c0,-0.77 -0.76,-1.53 -1.83,-1.83l-12.81,-4.73C2.44,0.79 0,1.86 0,3.38V114.70c0,0.76 0.76,1.67 1.53,1.98l13.11,4.72c1.98,0.76 4.57,-0.3 4.57,-1.98z"
android:fillColor="#0e353d"/>
<path
android:pathData="m43.15,6.88c0,-0.76 -0.76,-1.52 -1.83,-1.82L28.51,0.33c-2.14,-0.91 -4.57,0.16 -4.57,1.68v34.77c0,0.76 0.76,1.67 1.52,1.98l13.11,4.72c1.99,0.76 4.58,-0.3 4.58,-1.98z"
android:fillColor="#0e353d"/>
<path
android:pathData="m43.15,86.03c0,-0.76 -0.76,-1.53 -1.83,-1.83l-12.81,-4.73c-2.14,-0.91 -4.57,0.16 -4.57,1.68v34.77c0,0.76 0.76,1.68 1.52,1.98l13.11,4.72c1.99,0.77 4.58,-0.3 4.58,-1.98z"
android:fillColor="#0e353d"/>
<path
android:pathData="m67.09,79.47c0,-0.76 -0.76,-1.52 -1.83,-1.83l-12.81,-4.72c-2.13,-0.91 -4.57,0.15 -4.57,1.68v32.62c0,0.77 0.76,1.68 1.52,1.98l13.11,4.73c1.99,0.76 4.58,-0.31 4.58,-1.99z"
android:fillColor="#0e353d"/>
<path
android:pathData="m67.09,20.76c0,-0.76 -0.76,-1.52 -1.83,-1.83l-12.81,-4.72c-2.13,-0.92 -4.57,0.15 -4.57,1.68v32.62c0,0.76 0.76,1.68 1.52,1.99l13.11,4.72c1.99,0.76 4.58,-0.3 4.58,-1.98z"
android:fillColor="#0e353d"/>
<path
android:pathData="m91.03,39.52c0,-0.76 -0.76,-1.53 -1.83,-1.83l-12.81,-4.72c-2.13,-0.92 -4.57,0.15 -4.57,1.68v53.66c0,0.77 0.76,1.68 1.52,1.98l13.12,4.73c1.98,0.76 4.57,-0.31 4.57,-1.99z"
android:fillColor="#0e353d"/>
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="172.40dp"
android:height="167dp"
android:viewportWidth="172.40"
android:viewportHeight="167">
<path
android:fillColor="#15C8B1"
android:pathData="m116.6,27.8h-4.9V0H83.8V27.8H55.9V0H27.9V27.8H0V55.6H27.9V111.3H0V139.1H27.9v27.9H55.8V139.2h27.9v27.8H111.6V139.2h4.9c30.8,0 55.9,-24.9 55.9,-55.7 0.1,-30.7 -24.9,-55.7 -55.8,-55.7m0,83.6H55.9V55.7h60.8c15.4,0 27.9,12.5 27.9,27.8 0,15.4 -12.6,27.9 -28,27.9" />
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="57.23dp"
android:height="54.91dp"
android:viewportWidth="76.31"
android:viewportHeight="73.21">
<path
android:fillColor="#1e1c1c"
android:pathData="M32.65,45.20H46.35l4.00,2.59H32.04L23.82,73.21C14.74,69.69 6.33,61.53 2.80,52.36 -0.94,43.47 -0.94,32.30 2.89,23.38 6.49,14.20 15.14,5.92 24.34,2.51c7.24,-2.99 16.93,-3.31 24.62,-0.95 8.81,2.52 17.14,8.84 21.98,17.09 5.41,9.04 6.92,20.53 3.64,30.86 -2.07,6.85 -6.36,13.41 -12.25,18.10L52.21,50.75 66.30,58.61c0.08,0 0.12,-0.08 0.08,-0.16L47.93,42.51 71.79,46.15c0.08,0 0.11,-0.03 0.11,-0.07L71.75,45.95 49.25,38.06 72.63,32.42c0.08,0 0.08,-0.07 0.03,-0.11l-23.98,1.56 18.78,-14.21c0.03,-0.07 -0.12,-0.11 -0.16,-0.03L46.21,30.31 57.85,9.76c0,-0.03 0,-0.12 -0.07,-0.07L42.56,27.54 45.48,4.08c0,-0.04 -0.08,-0.08 -0.16,-0.04l-7,22.78 -6.12,-23.46c-0.03,-0.03 -0.12,-0.08 -0.16,0L33.72,27.69 19.27,8.88c-0.05,-0.04 -0.08,0 -0.12,0.03L30.07,29.74 9.41,18.45c-0.03,0 -0.11,0.04 -0.11,0.07L27.67,33.61 4.21,31.14c-0.08,0.04 -0.08,0.11 0,0.15L26.95,37.95 4.33,44.59c-0.04,0.03 -0.04,0.11 0,0.15L27.67,42.03 9.33,57.60c-0.03,0 -0.07,0.07 0,0.12l0.24,-0.08 14.68,-7.68 3.44,-5.48h3.91l-2.71,-1.92 9.08,-14.57 -5.36,17.21 0.01,0.00" />
</vector>

View file

@ -0,0 +1,14 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="193.85dp"
android:height="199.90dp"
android:viewportWidth="193.85"
android:viewportHeight="199.90">
<path
android:pathData="M11.57,109.62 L66.88,46.48c0,0 -58.21,-26.60 -56.47,-27.52 85.13,-44.98 173.05,99.89 173.05,99.89l-11.59,30.57c0,0 -79.32,-0.23 -89.83,-35.34"
android:strokeWidth="20.76"
android:strokeColor="#9a15a4" />
<path
android:pathData="M83.31,189.52C83.29,172.59 101.23,134.80 101.23,134.80"
android:strokeWidth="20.76"
android:strokeColor="#9a15a4" />
</vector>

View file

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="124.31dp"
android:height="150dp"
android:viewportWidth="124.31"
android:viewportHeight="150">
<path
android:fillColor="#faaf3c"
android:pathData="M69.88,139.38C39.71,143.23 5.25,119.56 0.8,84.67 -1.65,65.47 1.25,46.45 13.45,34.29 25.66,22.12 29.36,46.69 29.27,57.81c-0.09,11.11 2.60,35.95 4.67,44.23 5.56,22.24 19.04,37.38 35.93,37.33z" />
<path
android:fillColor="#8cc864"
android:pathData="M7.62,1.60C28.02,-4.61 54.62,7.68 61.81,31.27 65.77,44.25 66.00,57.73 59.00,67.58 52,77.43 46.54,60.88 45.30,53.19 44.05,45.50 39.26,28.65 36.86,23.17 30.39,8.45 19.29,-0.42 7.62,1.60Z" />
<path
android:fillColor="#e6322d"
android:pathData="m54.43,10.61c30.16,-3.85 64.62,19.81 69.08,54.71 2.45,19.2 -0.45,38.21 -12.65,50.37 -12.20,12.16 -15.90,-12.40 -15.81,-23.52 0.09,-11.11 -2.6,-35.95 -4.67,-44.23C84.80,25.70 71.32,10.56 54.43,10.61Z" />
<path
android:fillColor="#194b64"
android:pathData="m116.69,148.39c-20.39,6.21 -46.99,-6.08 -54.19,-29.67 -3.95,-12.98 -4.18,-26.46 2.81,-36.31 7.00,-9.84 12.45,6.7 13.70,14.38 1.24,7.69 6.03,24.54 8.44,30.02 6.46,14.72 17.57,23.59 29.23,21.56z" />
</vector>

View file

@ -0,0 +1,42 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="52.91dp"
android:height="31.87dp"
android:viewportWidth="52.91"
android:viewportHeight="31.87">
<path
android:fillColor="#00fdce"
android:pathData="m43.61,19.52c-2.75,-0.92 -5.54,-1.72 -8.32,-2.57 -3.71,0.18 -7.40,0.75 -11.11,1.00 -5.93,0.54 -11.86,1.11 -17.79,1.67 -0.19,-0.73 -0.17,-1.45 -0.17,-2.27 -0.52,-0.90 -0.17,-2.15 -0.43,-3.16 -0.51,-0.63 0.28,-1.30 -0.14,-1.91 0.06,-0.60 -0.48,-1.35 -0.08,-1.86 -1.00,-0.88 1.10,-0.75 0.46,-1.74 -0.36,-0.50 0.10,-1.51 -0.24,-2.02 -0.33,-0.47 0.25,-1.56 -0.05,-2.19 -0.23,-1.00 -0.17,-1.68 1.23,-1.49 6.20,-0.61 12.41,-1.25 18.61,-1.94 3.39,-0.25 6.77,-0.66 10.16,-0.99 1.58,0.14 2.96,1.11 4.45,1.60 2.86,1.15 5.70,2.39 8.54,3.61 0.01,0.63 -0.06,1.41 -0.29,2.02 -0.22,0.81 -0.98,1.58 -0.69,2.43 -0.70,0.41 -0.53,1.02 -0.62,1.76 -0.34,0.14 -0.12,0.89 -0.52,0.96 0.28,0.51 -0.77,0.96 -0.22,1.65 -0.21,0.17 -0.46,0.90 -0.66,1.26 0.12,0.53 -0.16,0.88 -0.71,1.57 -0.37,0.38 -0.20,1.29 -0.58,1.51 0.17,0.45 -0.00,1.67 -0.76,1.08z" />
<path
android:fillColor="#323232"
android:pathData="m24.14,11.38c0,-1.33 0,-2.66 0,-3.99 0.38,0 0.77,0 1.16,0 0.06,0.27 0.13,0.55 0.19,0.83 0.39,-0.67 1.17,-1.05 1.95,-1.02 0.90,-0.03 1.77,0.55 2.08,1.40 0.40,-0.98 1.52,-1.46 2.54,-1.40 1.10,-0.00 2.16,0.80 2.34,1.91 0.09,1.02 0.03,2.06 0.05,3.09 0.00,1.05 0.00,2.11 0.00,3.17 -0.47,0 -0.95,0 -1.42,0 -0.00,-1.84 0.01,-3.68 -0.02,-5.53 0.01,-0.67 -0.54,-1.33 -1.24,-1.30 -0.74,-0.09 -1.46,0.44 -1.65,1.16 -0.17,0.63 -0.07,1.31 -0.10,1.96 -0.00,1.23 -0.00,2.47 -0.00,3.71 -0.47,0 -0.95,0 -1.42,0 -0.01,-1.88 0.00,-3.76 -0.02,-5.64 -0.04,-0.62 -0.55,-1.18 -1.19,-1.19 -0.69,-0.08 -1.40,0.33 -1.63,1.00 -0.22,0.46 -0.14,0.97 -0.15,1.46 -0.00,1.45 -0.00,2.91 -0.00,4.36 -0.47,0 -0.95,0 -1.42,0 0,-1.33 0.00,-2.66 0.00,-3.99z" />
<path
android:fillColor="#323232"
android:pathData="m12.45,11.39c0,-1.33 0,-2.66 0,-3.99 0.38,0 0.77,0 1.16,0 0.06,0.27 0.13,0.55 0.19,0.83 0.39,-0.67 1.17,-1.05 1.95,-1.02 0.90,-0.03 1.77,0.55 2.08,1.40 0.40,-0.98 1.52,-1.46 2.54,-1.40 1.10,-0.00 2.16,0.80 2.34,1.91 0.09,1.02 0.03,2.06 0.05,3.09 0.00,1.05 0.00,2.11 0.00,3.17 -0.47,0 -0.95,0 -1.42,0 -0.00,-1.84 0.01,-3.68 -0.02,-5.53 0.01,-0.67 -0.54,-1.33 -1.24,-1.30 -0.74,-0.09 -1.46,0.44 -1.65,1.16 -0.17,0.63 -0.07,1.31 -0.10,1.96 -0.00,1.23 -0.00,2.47 -0.00,3.71 -0.47,0 -0.95,0 -1.42,0 -0.01,-1.88 0.00,-3.76 -0.02,-5.64 -0.04,-0.62 -0.55,-1.18 -1.19,-1.19 -0.69,-0.08 -1.40,0.33 -1.63,1.00 -0.22,0.46 -0.14,0.97 -0.15,1.46 -0.00,1.45 -0.00,2.91 -0.00,4.36 -0.47,0 -0.95,0 -1.42,0 0,-1.33 0.00,-2.66 0.00,-3.99z" />
<path
android:fillColor="#323232"
android:pathData="m9.50,10.18c0,-4.94 0.00,-5.21 0.03,-5.22 0.13,-0.05 1.50,-0.57 1.51,-0.57 0.00,0 0.00,2.47 0.00,5.50v5.50h-0.77,-0.77z" />
<path
android:fillColor="#323232"
android:pathData="m39.11,15.56c-1.22,-0.07 -2.38,-0.79 -2.98,-1.86 -0.47,-0.81 -0.63,-1.77 -0.56,-2.70 0.08,-1.43 0.91,-2.87 2.26,-3.46 1.41,-0.61 3.22,-0.38 4.33,0.72 1.17,1.11 1.47,2.92 1.06,4.44 -0.33,1.24 -1.28,2.32 -2.53,2.68 -0.50,0.15 -1.04,0.20 -1.57,0.16zM39.92,14.15c0.97,-0.17 1.74,-1.02 1.92,-1.98 0.22,-1.07 -0.01,-2.32 -0.89,-3.04 -0.92,-0.77 -2.44,-0.65 -3.23,0.26 -0.84,0.95 -0.92,2.45 -0.33,3.55 0.48,0.89 1.53,1.40 2.53,1.20z" />
<path
android:fillColor="#323232"
android:pathData="m49.62,30.27c0,-0.44 0,-0.88 0,-1.32 -1.67,0 -3.35,0 -5.03,0 0.00,-0.36 -0.01,-0.74 0.01,-1.11 1.37,-2.34 2.75,-4.68 4.13,-7.03 0.53,-0.00 1.06,-0.01 1.59,0.00 -1.29,2.22 -2.60,4.44 -3.90,6.67 0.96,0.05 1.93,0.01 2.90,0.02 0.19,0.01 0.36,0.02 0.29,-0.21 0.00,-0.82 0.00,-1.64 0.00,-2.46 0.47,-0.18 0.95,-0.36 1.42,-0.55 0.00,1.07 0.00,2.15 0.00,3.23 0.61,0 1.23,0 1.84,0 0,0.48 0,0.96 0,1.44 -0.61,0 -1.23,0 -1.84,0 0,0.88 0,1.77 0,2.65 -0.48,0 -0.96,0 -1.44,0 0,-0.44 0,-0.88 0,-1.32z" />
<path
android:fillColor="#323232"
android:pathData="m37.15,30.93c0,-0.22 0,-0.45 0,-0.67 1.45,-1.15 2.99,-2.22 4.32,-3.53 0.77,-0.79 1.48,-1.85 1.31,-3.01 -0.07,-0.86 -0.80,-1.58 -1.67,-1.67 -0.99,-0.16 -2.06,0.47 -2.30,1.47 -0.12,0.20 0.03,0.58 -0.19,0.68 -0.43,0.16 -0.86,0.33 -1.30,0.50 -0.16,-1.36 0.43,-2.86 1.67,-3.55 1.31,-0.75 3.13,-0.67 4.27,0.36 1.01,0.92 1.19,2.48 0.75,3.73 -0.54,1.51 -1.81,2.60 -3.03,3.59 -0.54,0.43 -1.10,0.86 -1.66,1.29 1.73,0.00 3.47,0.00 5.21,0.00 0,0.49 0,0.98 0,1.47 -2.46,0 -4.93,0 -7.39,0 -0,-0.22 -0,-0.44 -0,-0.67z" />
<path
android:fillColor="#323232"
android:pathData="m34.71,31.78c-0.68,-0.06 -1.27,-0.56 -1.48,-1.21 -0.26,-0.72 -0.14,-1.51 -0.17,-2.27 -0.00,-1.11 -0.00,-2.23 -0.01,-3.34 -0.44,-0.00 -0.88,-0.00 -1.32,-0.01 0,-0.42 0,-0.85 0,-1.28 0.44,0 0.89,0 1.33,0 0.00,-0.57 0.00,-1.15 0.00,-1.73 0.45,-0.17 0.90,-0.35 1.36,-0.52 0.02,0.75 0.01,1.50 0.01,2.25 0.55,0 1.10,0 1.65,0 0,0.42 0,0.85 0,1.28 -0.54,0.00 -1.09,0.00 -1.64,0.01 0.00,1.55 -0.01,3.11 0.01,4.67 0.01,0.45 0.36,0.94 0.86,0.89 0.26,0.08 0.62,-0.26 0.76,-0.20 0.00,0.44 0.00,0.88 0.00,1.33 -0.44,0.12 -0.91,0.18 -1.38,0.14z" />
<path
android:fillColor="#323232"
android:pathData="m26.62,31.77c-0.96,-0.10 -1.83,-0.80 -2.12,-1.73 -0.27,-0.72 -0.15,-1.50 -0.19,-2.26 -0.00,-1.37 -0.00,-2.75 -0.00,-4.13 0.46,0 0.93,0 1.40,0 0.00,1.82 0.00,3.65 0.00,5.48 0.10,0.51 0.39,1.03 0.90,1.22 0.92,0.37 2.06,-0.10 2.49,-0.99 0.34,-0.62 0.24,-1.35 0.26,-2.04 0.00,-1.22 0.00,-2.44 0.00,-3.66 0.46,0 0.93,0 1.40,0 0,2.65 0,5.30 0,7.95 -0.38,0 -0.76,0 -1.15,0 -0.08,-0.35 -0.17,-0.70 -0.26,-1.06 -0.47,0.76 -1.33,1.22 -2.22,1.25 -0.17,0.00 -0.35,0.00 -0.52,-0.02z" />
<path
android:fillColor="#323232"
android:pathData="m19.13,31.79c-1.23,-0.09 -2.40,-0.81 -2.99,-1.90 -0.76,-1.37 -0.75,-3.15 0.01,-4.52 0.66,-1.21 2.04,-1.96 3.42,-1.88 1.41,-0.02 2.78,0.85 3.37,2.13 0.36,0.73 0.47,1.57 0.42,2.39 -0.05,1.44 -0.90,2.86 -2.23,3.46 -0.62,0.29 -1.31,0.36 -2.00,0.33zM19.75,30.42c1.00,-0.10 1.84,-0.91 2.07,-1.88 0.31,-1.15 0.02,-2.56 -0.99,-3.29 -0.98,-0.72 -2.51,-0.49 -3.23,0.49 -0.60,0.77 -0.71,1.82 -0.49,2.75 0.23,0.99 1.09,1.82 2.12,1.92 0.17,0.01 0.34,0.02 0.51,-0.00z" />
<path
android:fillColor="#323232"
android:pathData="m11.37,31.78c-1.23,-0.11 -2.37,-0.90 -2.90,-2.02 -0.52,-1.06 -0.56,-2.32 -0.29,-3.46 0.27,-1.16 1.12,-2.20 2.26,-2.60 1.40,-0.52 3.16,-0.14 4.10,1.06 0.16,0.24 0.63,0.72 0.09,0.79 -0.33,0.12 -0.66,0.27 -1.01,0.37 -0.26,-0.36 -0.59,-0.74 -1.03,-0.91 -0.86,-0.37 -1.97,-0.12 -2.53,0.64 -0.67,0.90 -0.76,2.16 -0.40,3.22 0.30,0.86 1.13,1.52 2.06,1.55 0.85,0.05 1.69,-0.41 2.12,-1.15 0.29,-0.07 0.70,0.22 1.04,0.31 0.49,0.03 0.06,0.43 -0.05,0.65 -0.71,1.01 -1.95,1.62 -3.19,1.56 -0.08,-0.00 -0.17,-0.00 -0.25,-0.01z" />
<path
android:fillColor="#323232"
android:pathData="m3.43,31.85c-1.31,-0.05 -2.58,-0.82 -3.15,-2.02 -0.11,-0.23 -0.07,-0.15 -0.27,-0.74 0.64,-0.25 0.94,-0.36 1.45,-0.55 0.27,1.14 1.11,1.83 2.11,1.88 0.79,0.08 1.74,-0.27 1.97,-1.10 0.21,-0.66 -0.06,-1.41 -0.65,-1.78 -1.21,-0.82 -2.83,-0.99 -3.82,-2.15 -0.72,-0.85 -0.78,-2.12 -0.39,-3.14 0.49,-1.24 1.90,-1.92 3.20,-1.81 1.22,0.07 2.46,0.78 2.90,1.97 -0.44,0.19 -0.90,0.35 -1.36,0.53 -0.49,-1.09 -2.14,-1.49 -3.01,-0.60 -0.63,0.64 -0.52,1.84 0.25,2.33 1.19,0.79 2.75,0.97 3.78,2.03 0.92,0.89 0.98,2.41 0.41,3.51 -0.65,1.21 -2.11,1.73 -3.42,1.65z" />
</vector>

View file

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="34dp"
android:height="35.94dp"
android:viewportWidth="34"
android:viewportHeight="35.94">
<path
android:fillColor="#1d99f3"
android:pathData="m6.26,5.99c-0.06,0.00 -0.13,0.03 -0.18,0.08l-2.34,2.34c-0.09,0.09 -0.11,0.25 -0.04,0.37l2.74,4.52c-0.48,0.81 -0.87,1.70 -1.15,2.63L0.24,17.00C0.10,17.03 0,17.16 0,17.30v3.31c0,0.14 0.09,0.26 0.23,0.29l4.89,1.19c0.26,1.07 0.66,2.10 1.2,3.04l-2.83,4.32c-0.07,0.12 -0.06,0.27 0.03,0.38l2.34,2.34c0.09,0.09 0.25,0.11 0.37,0.04L10.68,29.55c0.87,0.50 1.81,0.89 2.80,1.16l1.03,4.98c0.02,0.14 0.15,0.24 0.29,0.24h3.31c0.13,0 0.26,-0.09 0.29,-0.23l1.22,-4.99c1.02,-0.27 1.99,-0.68 2.88,-1.21l4.37,2.86c0.12,0.07 0.27,0.06 0.38,-0.03l2.34,-2.34c0.09,-0.09 0.11,-0.25 0.04,-0.37l-1.59,-2.63 -0.51,0.16c-0.07,0.02 -0.15,-0.00 -0.20,-0.06 0,0 -1.01,-1.49 -2.33,-3.41 -1.57,3.07 -4.77,5.18 -8.46,5.18 -5.24,0 -9.50,-4.25 -9.50,-9.50 0,-3.86 2.30,-7.18 5.61,-8.67V8.21c-0.60,0.21 -1.18,0.46 -1.73,0.76 -0.00,-0.00 -0.00,-0.00 -0.00,-0.00L6.46,6.04c-0.06,-0.03 -0.13,-0.05 -0.19,-0.04z" />
<path
android:fillColor="#1d99f3"
android:pathData="M19.81,0 L13.83,0.57V25.18l5.91,-0.89V13.80l7.94,11.63 6.23,-1.97L25.79,12.27 34,1.71 27.64,0.25 19.75,10.81Z" />
</vector>

View file

@ -0,0 +1,112 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="166.98dp"
android:viewportWidth="200"
android:viewportHeight="166.98">
<path
android:fillColor="#4d4d4d"
android:pathData="m169.34,41.75a1.52,1.52 0,0 1,-1.33 -0.76L144.81,0.80A1.60,1.60 0,0 0,143.45 0H48.84A1.52,1.52 0,0 0,47.51 0.76L23.42,42.51 0.20,82.74a1.55,1.55 0,0 0,0 1.53l23.20,40.18 24.08,41.75a1.52,1.52 0,0 0,1.33 0.76h94.62a1.60,1.60 0,0 0,1.34 -0.76l23.22,-40.14a1.52,1.52 0,0 1,1.33 -0.76h28.90a1.73,1.73 0,0 0,1.73 -1.73V43.49a1.73,1.73 0,0 0,-1.76 -1.74h-28.90z" />
<path
android:fillColor="#e1e1e1"
android:pathData="m28.67,79.30 l-25.92,9.41 -2.54,-4.4a1.52,1.52 0,0 1,0 -1.54L11.94,62.44Z" />
<path
android:fillColor="#c8c8c8"
android:pathData="M199.96,84.36l0,19.81l-17.07,-17.37z" />
<path
android:fillColor="#c2c2c2"
android:pathData="m182.88,86.81 l17.07,17.37v19.35a1.71,1.71 0,0 1,-1.70 1.71h-19.88z" />
<path
android:fillColor="#c7c7c7"
android:pathData="M147.23,107.81l35.65,-21.00l-4.50,38.44l-23.89,0z" />
<path
android:fillColor="#cecece"
android:pathData="M199.96,66.01l0,18.35l-17.07,2.44z" />
<path
android:fillColor="#d3d3d3"
android:pathData="M199.96,43.49V65.98L182.88,86.77 170.00,41.75h28.23a1.73,1.73 0,0 1,1.73 1.74z" />
<path
android:fillColor="#c6c6c6"
android:pathData="M147.23,107.81l7.25,17.44l-12.61,0l-3.26,-4.68z" />
<path
android:fillColor="#d5d5d5"
android:pathData="M170.00,41.77l12.88,45.03l-47.28,-19.98l24.86,-25.05z" />
<path
android:fillColor="#d0d0d0"
android:pathData="m135.60,66.82 l11.63,40.99 35.65,-21.00z" />
<path
android:fillColor="#bfbfbf"
android:pathData="M138.45,125.25l0.15,-4.68l3.26,4.68z" />
<path
android:fillColor="#d9d9d9"
android:pathData="M140.71,41.77l19.75,0l-24.86,25.05l-4.48,-22.41z" />
<path
android:fillColor="#d4d4d4"
android:pathData="M135.60,66.82 L78.20,80.05 138.63,120.57Z" />
<path
android:fillColor="#d0d0d0"
android:pathData="m135.60,66.82 l3.03,53.75 8.63,-12.75z" />
<path
android:fillColor="#d9d9d9"
android:pathData="M131.11,44.41 L78.20,80.05 135.60,66.82Z"
android:strokeWidth="0.80" />
<path
android:fillColor="#d8d8d8"
android:pathData="M28.67,79.30l49.52,0.75l-24.87,45.2l-14.17,0z" />
<path
android:fillColor="#e2e2e2"
android:pathData="M52.71,41.75 L28.67,79.30 22.55,44.02 23.41,42.55c0,0 0,0 0,0a1.60,1.60 0,0 1,1.34 -0.80z" />
<path
android:fillColor="#d8d8d8"
android:pathData="m39.15,125.26h-14.39a1.54,1.54 0,0 1,-1.34 -0.80L2.75,88.71 28.67,79.30Z" />
<path
android:fillColor="#e4e4e4"
android:pathData="M11.94,62.42l10.61,-18.39l6.11,35.27z" />
<path
android:fillColor="#dedede"
android:pathData="M87.87,41.77l-25.35,0l15.69,38.28l52.90,-35.64l-15.94,-2.64l-10.73,0z" />
<path
android:fillColor="#dedede"
android:pathData="M28.67,79.30l49.52,0.75l-15.69,-38.28l-6.53,0l-3.27,0z" />
<path
android:fillColor="#c5c5c5"
android:pathData="M138.60,120.57l-11.51,4.68l9.23,0l2.12,0z" />
<path
android:fillColor="#d0d0d0"
android:pathData="M89.08,125.25l15.34,0l22.66,0l11.51,-4.68l-60.4,-40.51z" />
<path
android:fillColor="#d1d1d1"
android:pathData="M87.87,125.25l1.21,0l-10.88,-45.2l-24.87,45.2l2.65,0z" />
<path
android:fillColor="#ddd"
android:pathData="M136.32,41.77l-5.05,0l-0.16,2.64l9.60,-2.64z" />
<path
android:fillColor="#e3e3e3"
android:pathData="M131.11,44.41l-1.47,-2.64l-14.47,0z" />
<path
android:fillColor="#e2e2e2"
android:pathData="M131.11,44.41l0.16,-2.64l-1.63,0z" />
<path
android:fillColor="#00b8e3"
android:pathData="M87.71,42.48 L64.37,82.9a1.35,1.35 0,0 0,-0.16 0.65H47.89L79.94,28.10a1.26,1.26 0,0 1,0.47 0.46l0.04,0.04 7.22,12.60a1.39,1.39 0,0 1,0.02 1.26z" />
<path
android:fillColor="#33c6e9"
android:pathData="m87.68,126.06 l-7.22,12.55a1.40,1.40 0,0 1,-0.49 0.46L47.89,83.57v0h16.30a1.23,1.23 0,0 0,0.15 0.63,0.14 0.14,0 0,0 0,0.07l23.28,40.38a1.36,1.36 0,0 1,0.04 1.40z" />
<path
android:fillColor="#008aaa"
android:pathData="M79.94,28.10 L47.89,83.55v0,0l-8.03,13.92 -7.66,-13.29a1.23,1.23 0,0 1,-0.15 -0.63,1.35 1.35,0 0,1 0.16,-0.65L39.98,69.44 63.58,28.60a1.36,1.36 0,0 1,1.17 -0.69h14.45a1.43,1.43 0,0 1,0.73 0.20z" />
<path
android:fillColor="#00b8e3"
android:pathData="m79.94,139.04a1.43,1.43 0,0 1,-0.69 0.18H64.76a1.36,1.36 0,0 1,-1.19 -0.69l-21.53,-37.35 -2.16,-3.69 8.03,-13.91z" />
<path
android:fillColor="#008aaa"
android:pathData="m144.33,83.55 l-32.03,55.48a1.50,1.50 0,0 1,-0.47 -0.46v-0.04l-7.22,-12.58a1.39,1.39 0,0 1,0 -1.29l23.28,-40.40a1.35,1.35 0,0 0,0.19 -0.69z" />
<path
android:fillColor="#00b8e3"
android:pathData="m160.18,83.55a1.35,1.35 0,0 1,-0.19 0.69l-31.36,54.32a1.37,1.37 0,0 1,-1.16 0.64h-14.45a1.49,1.49 0,0 1,-0.69 -0.18l32.03,-55.48 8.03,-13.9 7.62,13.20a1.34,1.34 0,0 1,0.18 0.69z" />
<path
android:fillColor="#00b8e3"
android:pathData="m144.33,83.55h-16.28a1.34,1.34 0,0 0,-0.19 -0.69L104.57,42.50a1.36,1.36 0,0 1,0 -1.38l7.22,-12.56a1.50,1.50 0,0 1,0.49 -0.44z" />
<path
android:fillColor="#33c6e9"
android:pathData="m152.36,69.64v0L144.33,83.54 112.29,28.10a1.49,1.49 0,0 1,0.69 -0.18h14.45a1.37,1.37 0,0 1,1.16 0.64z" />
</vector>

View file

@ -0,0 +1,42 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="53.68dp"
android:viewportWidth="200"
android:viewportHeight="53.68">
<path
android:fillColor="#083338"
android:pathData="M189.84,17.34l9.83,0l0,-15.37l-1.96,-1.96l-27.76,0l0,20.71l1.96,1.96l15.25,11.50l0,7.74l-4.76,0l0,-4.33l-1.96,-1.96l-10.83,0l0,16.09l1.96,1.96l28.43,0l0,-22.14l-1.96,-1.96l-15.27,-11.47l0,-6.26l5.12,0l0,3.54z" />
<path
android:fillColor="#083338"
android:pathData="M0,51.72l1.96,1.96l26,0l0,-9.79l-1.96,-1.96l-13.20,0l0,-39.96l-1.96,-1.96l-10.83,0z" />
<path
android:fillColor="#083338"
android:pathData="M39.85,-0l-10.83,0l0,51.72l1.96,1.96l30.58,0l0,-51.72l-1.96,-1.96l-10.87,0l0,41.92l-6.90,0l0,-39.96z" />
<path
android:fillColor="#083338"
android:pathData="M93.74,-0L71.13,-0l-8.33,8.18l0,43.52l1.96,1.96L75.63,53.67L75.63,36.69l7.26,0l0,15.02l1.96,1.96L95.70,53.67L95.70,1.96ZM82.90,11.79L82.90,24.89L75.63,24.89L75.63,11.79Z" />
<path
android:fillColor="#083338"
android:pathData="m132.09,8.18 l-8.33,-8.18l-22.24,0l0,51.72l1.96,1.96L126.79,53.68l7.25,-7.15l0,-36.38l-1.96,-1.93zM114.31,11.79l6.90,0l0,30.12l-6.90,0z" />
<path
android:fillColor="#083338"
android:pathData="M135.11,-0l0,51.72l1.96,1.96l10.16,0l0,-26.14l8.62,24.18l1.96,1.96l10.73,0l0,-51.72l-1.96,-1.96l-10.23,0l0,26.11l-8.55,-24.15l-1.96,-1.96z" />
<path
android:fillColor="#D90C38"
android:pathData="M0,51.72V-0H10.83V41.91h15.16v9.79H0Z" />
<path
android:fillColor="#D90C38"
android:pathData="M59.60,51.72H29.02V-0H39.85V41.91h8.86V-0h10.87z" />
<path
android:fillColor="#D90C38"
android:pathData="M73.67,51.72L62.79,51.72L62.79,8.18L71.13,-0L93.74,-0L93.74,51.72L82.90,51.72L82.90,34.72h-9.22zM82.90,24.90L82.90,9.83h-9.22L73.67,24.89h9.22z" />
<path
android:fillColor="#1097A3"
android:pathData="m101.51,-0h22.24L132.09,8.18V44.56l-7.25,7.15H101.51ZM121.22,41.92V9.83h-8.86V41.91h8.86z" />
<path
android:fillColor="#1097A3"
android:pathData="M156.35,29.68V-0h10.23V51.72h-10.73L145.27,22.03V51.72H135.11V-0h10.73z" />
<path
android:fillColor="#1097A3"
android:pathData="M198.03,51.72H169.60V35.63h10.83v6.29h6.72V33.69L169.96,20.71V-0H197.72V15.37h-9.83V9.86h-7.08v6.75l17.24,12.94v22.15z" />
</vector>

View file

@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="22.36dp"
android:height="14.15dp"
android:viewportWidth="22.36"
android:viewportHeight="14.15">
<path
android:fillColor="#78bddc"
android:pathData="m14.91,13.32c-0.13,0.33 -0.60,0.69 -0.88,0.69h-13.30c0.08,0 -0.88,0 -0.52,-0.69l3.72,-8.47c0.13,-0.27 0.49,-0.63 0.82,-0.63l14.70,-2.15c0.35,-0.05 0.41,0.22 0.27,0.63l-4.83,10.62" />
<path
android:fillColor="#0c87bf"
android:pathData="m0.72,13.88h13.30c0.19,0 0.60,-0.35 0.74,-0.63l4.83,-10.62c0.08,-0.19 0.08,-0.33 0.08,-0.41 -0.08,0 -0.08,-0.05 -0.22,0l-14.70,2.15c-0.27,0 -0.60,0.27 -0.74,0.55l-3.69,8.41c-0.05,0.19 -0.05,0.27 0,0.33 0.08,0.13 0.27,0.22 0.41,0.22m0,0.27c0,0 -0.46,0 -0.66,-0.35 -0.08,-0.13 -0.08,-0.33 0,-0.55l3.72,-8.47c0.13,-0.33 0.55,-0.69 0.96,-0.69l14.65,-2.15c0.19,-0.05 0.41,0 0.46,0.13 0.08,0.13 0.08,0.41 0,0.69l-4.83,10.56c-0.19,0.41 -0.69,0.82 -1.02,0.82h-13.30" />
<path
android:fillColor="#ffffff"
android:pathData="m8.42,12.28 l-0.05,-0.08 -3.94,-7.47c-0.08,-0.08 -0.08,-0.13 0,-0.22h0.19l4.22,4.38 13.16,-8.69c0.05,0 0.05,-0.05 0.05,-0.05 0.08,0 0.13,0.05 0.13,0.05 0.08,0.08 0,0.13 -0.05,0.22l-13.57,11.78c0,0.08 -0.05,0.08 -0.05,0.08h-0.08" />
<path
android:fillColor="#0c87bf"
android:pathData="m22.14,0c-0.08,0 -0.13,0.05 -0.22,0.05l-13.08,8.69 -4.22,-4.44c-0.05,-0.08 0,0.05 -0.05,0.05 -0.08,0 -0.13,0 -0.22,0.08 -0.13,0.05 -0.19,0.05 -0.13,0.13l4.02,7.70c0.05,0.05 0.13,0.13 0.19,0.13h0.08c0.05,0 0.13,-0.08 0.13,-0.08l13.63,-11.78c0.05,-0.13 0.13,-0.35 0.05,-0.41 -0.05,-0.08 -0.13,-0.13 -0.19,-0.13m-0.08,0.33 l-13.55,11.81 -4.02,-7.50 4.30,4.44 13.27,-8.74" />
<path
android:fillColor="#3a97c7"
android:pathData="m18.52,2.34 l-13.77,2.01h-0.05l4.14,4.38zM18.52,2.34" />
<path
android:fillColor="#0c87bf"
android:pathData="m18.80,2.15 l-14.18,2.20h0.13l13.77,-2.01 0.27,-0.19m-14.24,2.20h-0.22v0.08c0.08,-0.08 0.13,-0.08 0.22,-0.08" />
<path
android:fillColor="#78a8d1"
android:pathData="m19.46,2.06 l-10.67,7.01 -4.22,-4.44 4.22,5.49" />
<path
android:fillColor="#0c87bf"
android:pathData="m19.46,2.06 l-0.66,0.08 -0.27,0.19 -9.68,6.40 -4.14,-4.38h-0.13c-0.08,0 -0.13,0 -0.22,0.08l0.22,0.19 4.22,4.44 10.67,-7.01" />
</vector>

View file

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="183.95dp"
android:height="200dp"
android:viewportWidth="183.95"
android:viewportHeight="200">
<path
android:fillColor="#1b967e"
android:pathData="M181.74,0 L143.61,29.04L112.95,29.04L112.95,52.70L91.17,69.08 69.38,52.70L69.38,29.04L38.72,29.04L0.59,0ZM91.17,154.91 L112.95,138.61l0,50.54c-6.72,3.34 -14.52,7.69 -21.78,10.84C83.91,196.86 76.11,192.44 69.38,189.10l0,-50.54z" />
<path
android:fillColor="#1b967e"
android:pathData="m142.00,117.28 l41.95,-31.62l0,23.54c0,18.05 -9.55,34.98 -24.75,49.60A142.56,142.56 45,0 1,142.00 172.79ZM183.96,19.68 L91.98,89.23 0,19.68l0,45.18l91.98,69.55 91.98,-69.55zM41.95,117.28l0,55.49A139.53,139.53 135,0 1,24.77 158.80C9.55,144.18 0,127.25 0,109.19l0,-23.54z" />
</vector>

View file

@ -0,0 +1,42 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="138.6dp"
android:height="118.22dp"
android:viewportWidth="138.6"
android:viewportHeight="118.22">
<path
android:pathData="M124.42,75.20H23.76c-1.23,0 -2.23,-1.00 -2.23,-2.23 0,-1.23 1.00,-2.23 2.23,-2.23h100.66c1.23,0 2.23,1.00 2.23,2.23 0.00,1.23 -1.00,2.23 -2.23,2.23"
android:fillColor="#f79421" />
<path
android:pathData="M124.42,83.68H23.76c-1.23,0 -2.23,-1 -2.23,-2.23 0,-1.23 1.00,-2.23 2.23,-2.23h100.66c1.23,0 2.23,1.00 2.23,2.23 0.00,1.23 -1.00,2.23 -2.23,2.23"
android:fillColor="#f79421" />
<path
android:pathData="M107.95,96.12l6.40,-3.71l6.40,3.71l0,-14.96l-12.81,0z"
android:fillColor="#f79421" />
<path
android:pathData="M112.07,33.9h16.83v9.33h-16.83z"
android:fillColor="#272b30" />
<path
android:pathData="m137.95,45.60c-0.08,-0.07 -0.16,-0.14 -0.25,-0.21 -1.92,-1.67 -3.56,-3.65 -4.84,-5.87 -0.01,-0.02 -0.02,-0.04 -0.03,-0.06h-0.00c-1.40,-2.48 -2.36,-5.26 -2.75,-8.22 -0.01,-0.17 -0.03,-0.35 -0.05,-0.53 0,-0.01 -0.00,-0.02 -0.00,-0.03 -0.16,-1.04 -0.60,-1.99 -1.24,-2.77 -0.06,-0.06 -0.12,-0.14 -0.18,-0.20 -5.28,-5.93 -12.30,-10.27 -20.27,-12.22 -0.01,-0.38 -0.02,-0.76 -0.02,-1.15 0,-4.41 1.13,-8.56 3.12,-12.17 0.11,-0.20 0.17,-0.43 0.17,-0.68 0,-0.79 -0.64,-1.44 -1.44,-1.44 -0.03,0 -0.06,0 -0.10,0.00 -0.08,0.00 -0.16,0.02 -0.24,0.03 -10.04,1.67 -19.12,6.18 -26.38,12.69 -3.06,2.73 -5.79,5.83 -8.14,9.21 -0.98,1.41 -1.90,2.88 -2.74,4.39C72.01,26.07 71.49,25.81 70.97,25.55 69.34,24.75 67.66,24.04 65.93,23.42 60.73,21.56 55.14,20.55 49.30,20.55c-1.53,0 -3.05,0.07 -4.54,0.21 -5.63,0.50 -10.99,1.97 -15.92,4.22C12.92,32.25 1.54,47.75 0.15,66.03 0.05,67.29 0,68.57 0,69.86v12.36c0,2.13 0.31,4.19 0.90,6.13 1.59,5.28 5.20,9.68 9.92,12.33 2.90,1.63 6.23,2.6 9.78,2.68h31.40c0.15,-0.01 0.31,-0.01 0.46,-0.01 0.15,0 0.30,0.00 0.45,0.01 0.05,0.00 0.1,0.00 0.15,0.01 0.08,0.00 0.16,0.01 0.24,0.02 1.93,0.22 3.63,1.18 4.82,2.6 0.18,0.21 0.36,0.45 0.52,0.69 0.59,0.9 0.99,1.93 1.14,3.04 0.01,0.05 0.01,0.10 0.02,0.16 0.03,0.22 0.05,0.46 0.05,0.70 0.00,0.05 0.00,0.11 0.00,0.17 0,0.05 0,0.09 -0.00,0.14v0.01c0.01,0.92 0.20,1.79 0.53,2.61 0.59,1.47 1.64,2.71 2.97,3.54 1.13,0.70 2.47,1.10 3.9,1.10 3.61,0 6.63,-2.59 7.28,-6.02 0.06,-0.28 0.09,-0.57 0.11,-0.86 0.00,-0.1 0.01,-0.19 0.01,-0.29 0.00,-0.07 0.00,-0.15 0.00,-0.22v-0.18c0,-2.53 -0.42,-4.97 -1.20,-7.23 -1.12,-3.28 -3.00,-6.22 -5.43,-8.61 -2.58,-2.55 -5.79,-4.47 -9.37,-5.51 -1.97,-0.57 -4.08,-0.89 -6.24,-0.89H26.30c-0.06,0.00 -0.12,0.00 -0.19,0.00 -0.06,0 -0.12,0 -0.19,-0.00C20.09,88.26 15.35,83.70 14.97,77.95 14.96,77.70 14.95,77.45 14.95,77.2c0,-6.17 4.99,-11.16 11.16,-11.16h99.81c2.57,0 4.76,-1.68 5.51,-4.01 0.02,-0.09 0.05,-0.18 0.07,-0.27 0.34,-1.12 1.03,-2.10 1.93,-2.81 0.00,-0.00 0.00,-0.00 0.01,-0.00 0.07,-0.06 0.15,-0.11 0.22,-0.16 0.1,-0.07 0.20,-0.14 0.31,-0.21 2.47,-1.84 4.16,-4.67 4.51,-7.89 0.05,-0.41 0.07,-0.83 0.07,-1.26 -0.00,-1.32 -0.22,-2.59 -0.64,-3.77M124.62,41.15c-0.24,0 -0.47,-0.06 -0.67,-0.16 -0.97,-0.56 -2.09,-0.92 -3.27,-1.01 -0.21,-0.01 -0.42,-0.02 -0.64,-0.02 -0.52,0 -1.02,0.05 -1.52,0.15 -0.81,0.15 -1.57,0.43 -2.27,0.82 -0.01,0.00 -0.02,0.01 -0.03,0.02 -0.04,0.01 -0.08,0.04 -0.12,0.07 -0.18,0.09 -0.40,0.14 -0.62,0.14 -0.77,0 -1.40,-0.63 -1.40,-1.40 0,-0.48 0.24,-0.91 0.62,-1.16 0.04,-0.03 0.09,-0.05 0.14,-0.08 0.90,-0.50 1.89,-0.88 2.94,-1.11 0.73,-0.16 1.50,-0.24 2.28,-0.24 1.68,0 3.27,0.38 4.68,1.08 0.18,0.08 0.36,0.17 0.54,0.27 0.05,0.02 0.09,0.05 0.14,0.08 0.37,0.25 0.62,0.68 0.62,1.16 0,0.77 -0.63,1.40 -1.40,1.40"
android:fillColor="#e6e6e6" />
<path
android:pathData="m72.66,26.09c2.68,12.92 13.89,22.61 27.32,22.61 7.90,0 15.03,-3.36 20.11,-8.76 -0.02,-0.00 -0.05,-0.00 -0.08,-0.00 -0.52,0 -1.02,0.05 -1.52,0.15 -0.81,0.15 -1.57,0.43 -2.27,0.82 -0.01,0.00 -0.02,0.01 -0.03,0.02 -0.04,0.01 -0.08,0.04 -0.12,0.07 -0.18,0.09 -0.40,0.14 -0.62,0.14 -0.77,0 -1.40,-0.63 -1.40,-1.40 0,-0.48 0.24,-0.91 0.62,-1.16 0.04,-0.03 0.09,-0.05 0.14,-0.08 0.90,-0.50 1.89,-0.88 2.94,-1.11 0.73,-0.16 1.50,-0.24 2.28,-0.24 0.76,0 1.51,0.08 2.23,0.23 2.39,-3.22 4.12,-6.98 5.00,-11.07 -5.11,-5.21 -11.63,-9.04 -18.96,-10.83 -0.01,-0.38 -0.02,-0.76 -0.02,-1.15 0,-4.41 1.13,-8.56 3.12,-12.17 0.11,-0.20 0.17,-0.43 0.17,-0.68 0,-0.79 -0.64,-1.44 -1.44,-1.44 -0.03,0 -0.06,0 -0.10,0.00 -0.08,0.00 -0.16,0.02 -0.24,0.03 -10.04,1.67 -19.12,6.18 -26.38,12.69 -3.05,2.73 -5.79,5.82 -8.14,9.21 -0.93,1.33 -1.79,2.72 -2.59,4.14"
android:fillColor="#f79421" />
<path
android:pathData="m130.55,52.79c-1.21,-0.36 -2.42,-0.72 -3.65,-0.99 -1.21,-0.31 -2.44,-0.57 -3.67,-0.80 -2.46,-0.44 -4.94,-0.79 -7.43,-0.94 -2.49,-0.20 -4.99,-0.10 -7.47,0.08l-1.86,0.20c-0.62,0.08 -1.22,0.23 -1.84,0.34 -1.25,0.15 -2.43,0.60 -3.67,0.87 2.30,-1.03 4.75,-1.82 7.28,-2.18 2.52,-0.37 5.09,-0.51 7.63,-0.32 2.54,0.18 5.07,0.56 7.53,1.19 2.46,0.63 4.88,1.42 7.16,2.54"
android:fillColor="#272b30" />
<path
android:pathData="m129.45,55.08c-1.25,-0.17 -2.5,-0.35 -3.75,-0.43 -1.25,-0.12 -2.50,-0.20 -3.75,-0.25 -2.50,-0.07 -5.00,-0.04 -7.49,0.16 -2.49,0.16 -4.95,0.63 -7.38,1.19l-1.81,0.48c-0.59,0.17 -1.17,0.41 -1.77,0.61 -1.21,0.33 -2.31,0.96 -3.50,1.40 2.12,-1.36 4.43,-2.50 6.88,-3.24 2.43,-0.75 4.96,-1.26 7.50,-1.45 2.54,-0.19 5.10,-0.19 7.63,0.06 2.52,0.26 5.04,0.68 7.46,1.45"
android:fillColor="#272b30" />
<path
android:pathData="m129.28,57.75c-1.26,0.1 -2.51,0.19 -3.76,0.38 -1.24,0.14 -2.48,0.33 -3.72,0.56 -2.46,0.46 -4.9,1.03 -7.28,1.78 -2.40,0.69 -4.69,1.68 -6.94,2.76l-1.66,0.86c-0.54,0.30 -1.06,0.65 -1.59,0.98 -1.11,0.59 -2.05,1.43 -3.12,2.13 1.78,-1.79 3.78,-3.40 6.02,-4.65 2.21,-1.25 4.57,-2.30 7.01,-3.03 2.44,-0.74 4.93,-1.29 7.46,-1.58 2.52,-0.29 5.07,-0.42 7.60,-0.19"
android:fillColor="#272b30" />
<path
android:pathData="m137.70,45.39c-0.42,-0.36 -0.82,-0.75 -1.22,-1.14 -1.07,0.64 -1.79,1.82 -1.79,3.16 0,2.04 1.65,3.70 3.70,3.70 0.02,0 0.03,-0.00 0.05,-0.00 0.02,-0.15 0.05,-0.30 0.07,-0.46 0.05,-0.41 0.07,-0.83 0.07,-1.26 0,-1.32 -0.22,-2.59 -0.64,-3.77 -0.08,-0.07 -0.16,-0.13 -0.24,-0.21"
android:fillColor="#f27baa" />
<path
android:pathData="m107.03,17.36c0,0.17 0,0.35 0.00,0.52 -4.50,1.82 -8.60,4.46 -12.10,7.71 -0.14,-0.99 -0.21,-2.00 -0.21,-3.04 0,-10.21 7.21,-18.75 16.83,-20.77 -2.85,4.50 -4.51,9.84 -4.51,15.58"
android:fillColor="#ffffff" />
<path
android:pathData="m68.11,94.76c-0.49,-0.48 -1.01,-0.93 -1.54,-1.37 -5.61,1.14 -10.22,5.01 -12.41,10.16 1.59,0.36 2.99,1.24 4.01,2.45 0.18,0.21 0.36,0.45 0.52,0.69 0.59,0.9 0.99,1.93 1.14,3.04 0.01,0.04 0.01,0.10 0.02,0.16 0.03,0.22 0.05,0.46 0.05,0.70 0.00,0.05 0.00,0.11 0.00,0.17 0,0.04 0,0.09 -0.00,0.13v0.01c0.01,0.92 0.20,1.80 0.53,2.60 0.59,1.47 1.64,2.71 2.97,3.55 1.13,0.70 2.47,1.10 3.90,1.10 3.61,0 6.63,-2.59 7.28,-6.03 0.06,-0.27 0.09,-0.56 0.11,-0.86 0.00,-0.10 0.01,-0.19 0.01,-0.29 0.00,-0.08 0.00,-0.15 0.00,-0.23v-0.18c0,-2.53 -0.42,-4.97 -1.20,-7.23 -1.13,-3.28 -3.00,-6.22 -5.43,-8.62"
android:fillColor="#f79421" />
</vector>

View file

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200.00dp"
android:height="200dp"
android:viewportWidth="666.66"
android:viewportHeight="666.65">
<path
android:fillColor="#3957af"
android:pathData="M529.21,63.61l3.50,70.75c57.36,63.36 79.99,153.10 51.44,237.44C541.54,497.71 401.00,563.9 270.26,519.63 139.51,475.37 68.07,337.43 110.69,211.53 139.34,126.90 212.22,69.26 296.64,54L342.24,0.11c-142.28,-3.85 -276.53,84.46 -324.56,226.35 -59.01,174.32 34.46,363.48 208.79,422.50C400.80,707.98 589.96,614.5 648.98,440.17c47.95,-141.65 -4.78,-293.10 -119.76,-376.56" />
<path
android:fillColor="#3957af"
android:pathData="M447.49,272.37l-2.41,-98.90 -1.93,-56.91 -1.31,-49.30s0.27,-23.77 -0.55,-29.36a9.14,9.14 0,0 0,-0.98 -2.96l-0.16,-0.34 -0.18,-0.30c-0.91,-1.56 -2.34,-2.84 -4.2,-3.47 -1.89,-0.64 -3.85,-0.48 -5.56,0.25l-0.10,0.03a8.47,8.47 0,0 0,-0.59 0.30,9.11 9.11,0 0,0 -2.43,1.68c-4.05,3.93 -18.27,22.98 -18.27,22.98l-30.99,38.37 -36.11,44.03 -61.99,77.10s-28.45,35.50 -22.16,79.21c6.28,43.70 38.78,64.99 63.99,73.53 25.20,8.53 63.95,11.35 95.49,-19.54 31.54,-30.9 30.51,-76.38 30.51,-76.38" />
</vector>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,48 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="200dp"
android:height="200dp"
android:viewportWidth="200"
android:viewportHeight="200">
<path
android:fillColor="#6CB535"
android:pathData="m0,18.73c0,-9.86 8.86,-18.6 18.86,-18.6h50.33c10,0 18.86,8.73 18.86,18.6v21.13c0,9.86 -8.86,18.6 -18.86,18.6H18.86C8.86,58.46 0,49.73 0,39.86Z" />
<path
android:fillColor="#00614B"
android:pathData="M0,171.19C0,188.68 11.38,200 28.97,200H171.02C188.61,200 200,188.68 200,171.19V18.81C200,8.74 191.20,0 181.08,0H110.49C97.36,0 92.64,15.52 91.10,17.95c-2.13,3.35 -4.12,5.98 -13.25,5.98H0Z" />
<path
android:fillAlpha="0.28"
android:pathData="M193,4.46C189.73,1.73 185.6,0 181.2,0h-70.6C97.46,0 92.53,15.93 91.2,18.2c-2.2,3.6 -4.13,6.06 -13.26,6.06H0V165.06Z"
android:strokeAlpha="0.28">
<aapt:attr name="android:fillColor">
<gradient
android:endX="193.03"
android:endY="82.50"
android:startX="-0.00741"
android:startY="82.50"
android:type="linear">
<item
android:color="#00FFFFFF"
android:offset="0" />
<item
android:color="#FFF0EC92"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:pathData="M5.46,114.6H23.66V93.46c0,-3.4 0.6,-5.86 1.86,-7.33 1.26,-1.46 2.86,-2.26 4.8,-2.26 1.2,0 2.26,0.33 3.2,1.06 0.86,0.73 1.53,1.6 1.86,2.73 0.2,0.73 0.33,2.06 0.33,4V114.6h18.2V93.26c0,-3.2 0.6,-5.6 1.8,-7.06 1.2,-1.46 2.86,-2.2 4.86,-2.2 1.73,0 3.13,0.8 4.26,2.33 0.73,1 1.13,2.46 1.13,4.53V114.6h18.2V86.86c0,-6 -1.4,-10.4 -4.2,-13.2 -2.8,-2.8 -6.66,-4.26 -11.6,-4.26 -3.33,0 -6.2,0.53 -8.46,1.53 -2.26,1 -4.8,3 -7.6,5.86 -1.4,-2.46 -3.13,-4.33 -5.26,-5.53 -2.13,-1.2 -5.06,-1.86 -8.73,-1.86 -3.4,0 -6.4,0.6 -8.8,1.73 -2.4,1.13 -4.8,3 -7.2,5.66v-6H5.46Z" />
<path
android:fillColor="#FFFFFF"
android:pathData="m96,117.73c-0.66,0.53 -1.26,0.73 -3.26,0.73 -1.8,0 -2.06,-0.26 -4.53,-1.13L88.06,130.8c5.06,0.66 6.46,1 8.86,1 6,0 10.13,-1.06 13.06,-3.8 2.06,-1.93 4.13,-6.93 6.13,-12.4L131.13,70.8H112.8l-6.33,28.2 -6.06,-28.2H81.26l15.93,44.13c0,0 0.06,1.73 -1.2,2.8" />
<path
android:fillColor="#F0EC92"
android:pathData="m81.8,150.46c1.53,-1.86 3.46,-2.8 5.86,-2.8 2.2,0 4.06,0.93 5.6,2.73 1.53,1.8 2.26,4.6 2.26,8.26 0,4 -0.73,6.86 -2.26,8.73 -1.53,1.8 -3.4,3.2 -5.73,3.2 -2.33,0 -4.26,-1.4 -5.8,-3.26 -1.53,-1.86 -2.26,-4.66 -2.26,-8.46 0,-3.73 0.8,-6.53 2.33,-8.4m-12.2,27.86c4.53,3.8 10.46,5.66 17.8,5.66 8.2,0 14.66,-2.26 19.33,-6.86 4.66,-4.53 7,-10.4 7,-17.53 0,-6.33 -1.86,-11.66 -5.66,-16 -4.66,-5.4 -11.6,-8.6 -20.73,-8.6 -8,0 -14.4,2.86 -19.06,7.46 -4.66,4.6 -7.06,10.4 -7.06,17.46 0.06,7.53 2.86,13.73 8.4,18.4" />
<path
android:fillColor="#F0EC92"
android:pathData="M106.13,136.6l15.46,45.2l18.86,0l16,-45.2l-19.86,0l-5.8,24.53l-5.53,-24.53z" />
<path
android:fillColor="#F0EC92"
android:pathData="m45.2,162.8v4.66c-2.2,1.2 -5.73,3.26 -11.2,3.26 -3.93,0 -7,-1.26 -9.2,-3.86C22.6,164.33 21.53,160 21.53,154c0,-5.66 1.13,-9.8 3.4,-12.4 2.26,-2.6 5.33,-3.93 9.13,-3.93 2.53,0 4.66,0.46 6.33,1.33 1.66,0.93 2.8,2.2 3.53,3.93l17.13,-2.4c-1,-3.66 -2.6,-6.66 -4.6,-9.06 -2.06,-2.4 -4.6,-4.13 -7.66,-5.26 -3.06,-1.13 -7.73,-1.73 -14,-1.73 -6.46,0 -11.6,0.93 -15.4,2.8 -4.93,2.4 -8.6,5.93 -11.13,10.6 -2.53,4.66 -3.8,10.13 -3.8,16.4 0,6 1.13,11.26 3.46,15.86 2.33,4.6 5.66,8.06 9.93,10.4 4.26,2.33 9.8,3.46 16.53,3.46 5.46,0 10.26,-0.66 14.2,-2.06C52.6,180.6 57.2,178 62.4,174.26V149.6h-27.66v13.2z" />
</vector>

View file

@ -0,0 +1,231 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="38.30dp"
android:height="38.34dp"
android:viewportWidth="38.30"
android:viewportHeight="38.34">
<path android:pathData="m13.40,21.37 l12.28,-5.23c0,0 0.01,0 0.03,0.01 0.06,0.06 0.12,0.11 0.17,0.15l0.02,0.01c0.02,0.01 0.05,0.03 0.05,0.05 0,0.01 0,0.01 -0.00,0.02l-1.05,6.46 -0.00,0.02c-0.00,0.05 -0.01,0.10 -0.06,0.10a1.72,1.72 0,0 0,-1.37 0.84l-0.00,0.00c-0.01,0.02 -0.02,0.04 -0.05,0.05 -0.02,0.01 -0.04,0.00 -0.07,0.00l-9.79,-2.02c-0.01,-0.00 -0.15,-0.51 -0.16,-0.52z">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="38.34"
android:centerX="19.15"
android:centerY="1.471E-8"
android:type="radial">
<item
android:offset="0"
android:color="#FF20C6B7" />
<item
android:offset="1"
android:color="#FF4D9ABF" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m19.65,12.19 l5.45,2.31c0.03,0.01 0.06,0.02 0.07,0.05a0.10,0.10 0,0 1,0 0.05c-0.01,0.08 -0.03,0.17 -0.03,0.26v0.15c0,0.03 -0.03,0.05 -0.07,0.06l-0.01,0.00c-0.86,0.36 -12.13,5.17 -12.14,5.17 -0.01,0 -0.03,0 -0.05,-0.01 -0.03,-0.03 0,-0.07 0.02,-0.11a0.76,0.76 0,0 0,0.01 -0.02l4.48,-6.94 0.00,-0.01c0.02,-0.04 0.05,-0.08 0.10,-0.08l0.04,0.00c0.10,0.01 0.19,0.02 0.28,0.02 0.68,0 1.31,-0.33 1.69,-0.89a0.16,0.16 0,0 1,0.03 -0.04c0.02,-0.02 0.06,-0.01 0.09,0.00z">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="38.34"
android:centerX="19.15"
android:centerY="1.471E-8"
android:type="radial">
<item
android:offset="0"
android:color="#FF20C6B7" />
<item
android:offset="1"
android:color="#FF4D9ABF" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m23.58,3.58 l3.81,3.81 -0.92,5.69v0.01a0.13,0.13 0,0 1,-0.00 0.03c-0.01,0.02 -0.03,0.02 -0.05,0.03a1.83,1.83 0,0 0,-0.54 0.27,0.15 0.15,0 0,0 -0.02,0.01c-0.01,0.01 -0.02,0.02 -0.04,0.02a0.11,0.11 0,0 1,-0.04 -0.00l-5.81,-2.47 -0.01,-0.00c-0.03,-0.01 -0.08,-0.03 -0.08,-0.07a2.19,2.19 0,0 0,-0.31 -0.91c-0.02,-0.04 -0.05,-0.09 -0.03,-0.14z">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="38.34"
android:centerX="19.15"
android:centerY="1.471E-8"
android:type="radial">
<item
android:offset="0"
android:color="#FF20C6B7" />
<item
android:offset="1"
android:color="#FF4D9ABF" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m11.07,7.26 l5.81,-5.81C17.69,0.64 18.1,0.24 18.56,0.09a2,2 0,0 1,1.20 0c0.46,0.14 0.86,0.55 1.67,1.35l1.26,1.26 -4.13,6.40a0.15,0.15 0,0 1,-0.04 0.04c-0.02,0.01 -0.06,0.01 -0.09,0a2.09,2.09 0,0 0,-1.92 0.37c-0.02,0.02 -0.06,0.01 -0.10,-0.00 -0.54,-0.23 -4.74,-2.01 -5.34,-2.26z">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="38.34"
android:centerX="19.15"
android:centerY="1.471E-8"
android:type="radial">
<item
android:offset="0"
android:color="#FF20C6B7" />
<item
android:offset="1"
android:color="#FF4D9ABF" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m5.68,12.66 l4.49,-4.49c0.42,0.18 1.95,0.83 3.33,1.41 1.04,0.44 1.98,0.84 2.28,0.97 0.03,0.01 0.05,0.02 0.07,0.05 0.00,0.01 0.00,0.04 0,0.06a2.00,2.00 0,0 0,0.52 1.82c0.03,0.03 0,0.07 -0.02,0.11l-0.01,0.02 -4.56,7.06c-0.01,0.02 -0.02,0.03 -0.04,0.05 -0.02,0.01 -0.05,0.00 -0.08,0.00a2.27,2.27 0,0 0,-0.54 -0.07c-0.16,0 -0.34,0.03 -0.52,0.06h-0.00c-0.02,0.00 -0.03,0.00 -0.05,-0.00a0.21,0.21 0,0 1,-0.04 -0.05z">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="38.34"
android:centerX="19.15"
android:centerY="1.471E-8"
android:type="radial">
<item
android:offset="0"
android:color="#FF20C6B7" />
<item
android:offset="1"
android:color="#FF4D9ABF" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m0,19.06a2,2 0,0 1,0.09 -0.49c0.14,-0.46 0.55,-0.86 1.35,-1.67l3.34,-3.34a2175.52,2175.52 0,0 0,4.62 6.68c0.02,0.03 0.05,0.07 0.02,0.10 -0.14,0.16 -0.29,0.33 -0.39,0.52a0.16,0.16 0,0 1,-0.05 0.06c-0.01,0.00 -0.02,0.00 -0.04,0.00H8.94L0,19.06Z">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="38.34"
android:centerX="19.15"
android:centerY="1.471E-8"
android:type="radial">
<item
android:offset="0"
android:color="#FF20C6B7" />
<item
android:offset="1"
android:color="#FF4D9ABF" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m4.05,24.05 l-2.61,-2.61c-0.44,-0.44 -0.76,-0.76 -0.99,-1.04l7.93,1.64a0.84,0.84 0,0 0,0.03 0.00c0.04,0.00 0.10,0.01 0.10,0.06 0,0.05 -0.05,0.07 -0.10,0.09l-0.02,0.01z">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="38.34"
android:centerX="19.15"
android:centerY="1.471E-8"
android:type="radial">
<item
android:offset="0"
android:color="#FF20C6B7" />
<item
android:offset="1"
android:color="#FF4D9ABF" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m7.03,27.03 l-2.06,-2.06 4.07,-1.73a0.08,0.08 0,0 1,0.03 -0.00c0.03,0 0.05,0.03 0.07,0.06a2.91,2.91 0,0 0,0.13 0.18l0.01,0.01c0.01,0.01 0.00,0.03 -0.00,0.05l-2.25,3.49z">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="38.34"
android:centerX="19.15"
android:centerY="1.471E-8"
android:type="radial">
<item
android:offset="0"
android:color="#FF20C6B7" />
<item
android:offset="1"
android:color="#FF4D9ABF" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m21.11,37.22c-0.59,0.59 -0.94,0.90 -1.34,1.03a2,2 0,0 1,-1.20 0c-0.46,-0.14 -0.86,-0.55 -1.67,-1.35l-8.99,-8.99 2.34,-3.64c0.01,-0.01 0.02,-0.03 0.04,-0.04 0.02,-0.01 0.06,-0.01 0.09,0a2.43,2.43 0,0 0,1.63 -0.08c0.02,-0.01 0.05,-0.01 0.07,0.00a0.19,0.19 0,0 1,0.02 0.03l8.99,13.05z">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="38.34"
android:centerX="19.15"
android:centerY="1.471E-8"
android:type="radial">
<item
android:offset="0"
android:color="#FF20C6B7" />
<item
android:offset="1"
android:color="#FF4D9ABF" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m22.81,35.52 l-0.81,0.81 -8.95,-12.94a0.42,0.42 0,0 0,-0.01 -0.01c-0.01,-0.01 -0.02,-0.03 -0.02,-0.06 0.00,-0.01 0.01,-0.03 0.02,-0.04l0.01,-0.01c0.02,-0.04 0.05,-0.08 0.07,-0.12l0.02,-0.03 0.00,-0.00c0.01,-0.02 0.02,-0.04 0.05,-0.06 0.02,-0.01 0.05,-0.00 0.07,-0.00l9.92,2.04a0.16,0.16 0,0 1,0.07 0.03c0.01,0.01 0.01,0.02 0.01,0.04a1.75,1.75 0,0 0,1.02 1.17c0.02,0.01 0.01,0.04 0.00,0.07a0.23,0.23 0,0 0,-0.01 0.04c-0.12,0.76 -1.19,7.29 -1.48,9.06z">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="38.34"
android:centerX="19.15"
android:centerY="1.471E-8"
android:type="radial">
<item
android:offset="0"
android:color="#FF20C6B7" />
<item
android:offset="1"
android:color="#FF4D9ABF" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m31.51,26.82 l-7.18,7.18 1.23,-7.56 0.00,-0.01c0.00,-0.01 0.00,-0.02 0.00,-0.02 0.01,-0.02 0.03,-0.03 0.06,-0.04l0.01,-0.00a1.85,1.85 0,0 0,0.69 -0.51c0.02,-0.02 0.05,-0.05 0.09,-0.06a0.09,0.09 0,0 1,0.02 0l5.06,1.04z">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="38.34"
android:centerX="19.15"
android:centerY="1.471E-8"
android:type="radial">
<item
android:offset="0"
android:color="#FF20C6B7" />
<item
android:offset="1"
android:color="#FF4D9ABF" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m38.14,20.02c-0.2,0.37 -0.59,0.76 -1.25,1.42l-4.37,4.36 -5.65,-1.17 -0.03,-0.00c-0.05,-0.00 -0.10,-0.01 -0.10,-0.06a1.70,1.70 0,0 0,-0.65 -1.19c-0.02,-0.02 -0.01,-0.05 -0.01,-0.09 0,-0.00 0,-0.01 0.00,-0.01l1.06,-6.52 0.00,-0.02c0.00,-0.05 0.01,-0.10 0.06,-0.10a1.73,1.73 0,0 0,1.16 -0.66c0.00,-0.01 0.01,-0.02 0.02,-0.02 0.03,-0.01 0.07,0 0.10,0.01l9.65,4.08z">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="38.34"
android:centerX="19.15"
android:centerY="1.471E-8"
android:type="radial">
<item
android:offset="0"
android:color="#FF20C6B7" />
<item
android:offset="1"
android:color="#FF4D9ABF" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m33.01,13.01 l3.87,3.87c0.80,0.80 1.20,1.20 1.35,1.67 0.02,0.06 0.04,0.13 0.05,0.20l-9.26,-3.92a0.72,0.72 0,0 0,-0.01 -0.00c-0.03,-0.01 -0.08,-0.03 -0.08,-0.07 0,-0.03 0.04,-0.05 0.08,-0.07l0.01,-0.00z">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="38.34"
android:centerX="19.15"
android:centerY="1.471E-8"
android:type="radial">
<item
android:offset="0"
android:color="#FF20C6B7" />
<item
android:offset="1"
android:color="#FF4D9ABF" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m27.75,13.30 l-0.01,-0.00c-0.00,-0.00 -0.01,-0.00 -0.02,-0.01a0.11,0.11 0,0 1,-0.02 -0.09l0.77,-4.72 3.62,3.62 -3.77,1.60a0.08,0.08 0,0 1,-0.03 0.00h-0.01c-0.00,-0.00 -0.01,-0.00 -0.02,-0.01a1.71,1.71 0,0 0,-0.49 -0.38z">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="38.34"
android:centerX="19.15"
android:centerY="1.471E-8"
android:type="radial">
<item
android:offset="0"
android:color="#FF20C6B7" />
<item
android:offset="1"
android:color="#FF4D9ABF" />
</gradient>
</aapt:attr>
</path>
</vector>

View file

@ -0,0 +1,61 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="172.86dp"
android:height="200dp"
android:viewportWidth="172.86"
android:viewportHeight="200.00">
<path
android:pathData="m82.73,7.64 l-18.55,12.50 -23.13,9.17 -27.09,8.96 -9.17,8.12 4.16,40.85 11.46,33.76 16.25,29.38c0,0 20.21,21.25 20.42,21.88 0.20,0.62 18.96,15.98 18.96,15.98l12.08,4.44 34.18,-27.09 33.97,-53.03 5.90,-29.08 4.52,-25.42 -1.66,-15.84L135.25,29.52 106.28,18.89 89.19,7.64Z"
android:fillColor="#FFFFFF" />
<path android:pathData="m22.97,54.30c-0.97,31.26 8.20,56.24 19.86,75.14L125.76,46.51C113.28,41.72 98.23,34.73 86.43,25.49 61.79,44.78 22.97,54.30 22.97,54.30Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="27.06"
android:startX="34.71"
android:endY="148.78"
android:endX="133.79"
android:type="linear">
<item
android:offset="0"
android:color="#FF009EFF" />
<item
android:offset="1"
android:color="#FF0063FF" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m86.43,174.33c0,0 65.99,-38.78 63.46,-120.03 0,0 -4.68,-1.15 -11.83,-3.46L49.54,139.36c17.39,23.51 36.89,34.97 36.89,34.97z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="23.09"
android:startX="39.59"
android:endY="144.81"
android:endX="138.67"
android:type="linear">
<item
android:offset="0"
android:color="#FF009EFF" />
<item
android:offset="1"
android:color="#FF0063FF" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m172.43,44.52c-0.89,-7.44 -5.36,-8.33 -5.36,-8.33C136.99,30.23 97.67,7.14 94.25,4.02 90.82,0.89 87.96,-0 86.43,-0c-1.52,0 -4.39,0.89 -7.81,4.02 -3.42,3.12 -42.74,26.21 -72.82,32.16 0,0 -4.46,0.89 -5.36,8.33 -0.89,7.44 -6.99,88.60 78.78,151.89 0,0 5.21,3.57 7.22,3.57 2.01,0 7.22,-3.57 7.22,-3.57 85.77,-63.29 79.67,-144.45 78.77,-151.89zM86.43,188.28c0,0 -76.63,-49.18 -75.76,-142.61 0,0 33.97,-4.80 75.76,-33.37 41.79,28.57 75.76,33.37 75.76,33.37 0.86,93.43 -75.76,142.61 -75.76,142.61z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="21.26"
android:startX="41.84"
android:endY="142.97"
android:endX="140.92"
android:type="linear">
<item
android:offset="0"
android:color="#FF009EFF" />
<item
android:offset="1"
android:color="#FF0063FF" />
</gradient>
</aapt:attr>
</path>
</vector>

View file

@ -0,0 +1,90 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="78.50dp"
android:height="100dp"
android:viewportWidth="78.50"
android:viewportHeight="100">
<path android:pathData="M13.72,7.42L38.99,0.24c1.21,-0.34 2.51,-0.31 3.71,0.07L73.92,10.59c2.6,0.85 4.35,3.28 4.35,6.02l0,11.08c0,3.5 -2.83,6.33 -6.33,6.33 -0.46,0 -0.92,-0.05 -1.37,-0.15L42.36,27.60c-0.98,-0.22 -2.01,-0.20 -2.98,0.05L17.07,33.51C13.68,34.40 10.22,32.38 9.33,28.99 9.19,28.47 9.12,27.93 9.12,27.38L9.12,13.51C9.12,10.68 11.00,8.19 13.72,7.42Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="43.69"
android:endY="34.03"
android:startX="43.69"
android:startY="-3.57E-7"
android:type="linear">
<item
android:color="#FFA1B5B8"
android:offset="0" />
<item
android:color="#FF687F82"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<group>
<clip-path android:pathData="M13.72,7.42L38.99,0.24c1.21,-0.34 2.51,-0.31 3.71,0.07L73.92,10.59c2.6,0.85 4.35,3.28 4.35,6.02l0,11.08c0,3.5 -2.83,6.33 -6.33,6.33 -0.46,0 -0.92,-0.05 -1.37,-0.15L42.36,27.60c-0.98,-0.22 -2.01,-0.20 -2.98,0.05L17.07,33.51C13.68,34.40 10.22,32.38 9.33,28.99 9.19,28.47 9.12,27.93 9.12,27.38L9.12,13.51C9.12,10.68 11.00,8.19 13.72,7.42Z" />
<path
android:fillColor="#4b6063"
android:pathData="M0.91,-0.34l40.27,0l0,40.21l-40.27,0z" />
</group>
<path android:pathData="M68.31,43.37L42.71,36.1C41.70,35.81 40.64,35.78 39.62,36.00L4.98,43.59c-2.91,0.63 -4.98,3.21 -4.98,6.19l-0,9.94c-0,3.35 2.61,6.12 5.96,6.32l34.78,2.06c0.28,0.01 0.57,0.01 0.86,-0.00L67.07,66.15C70.37,65.89 72.92,63.14 72.92,59.83L72.92,49.47C72.92,46.63 71.04,44.14 68.31,43.37Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="2.005"
android:endY="67.24"
android:startX="36.46"
android:startY="1.712"
android:type="linear">
<item
android:color="#FF656D78"
android:offset="0" />
<item
android:color="#FF040405"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<group>
<clip-path android:pathData="M68.31,43.37L42.71,36.1C41.70,35.81 40.64,35.78 39.62,36.00L4.98,43.59c-2.91,0.63 -4.98,3.21 -4.98,6.19l-0,9.94c-0,3.35 2.61,6.12 5.96,6.32l34.78,2.06c0.28,0.01 0.57,0.01 0.86,-0.00L67.07,66.15C70.37,65.89 72.92,63.14 72.92,59.83L72.92,49.47C72.92,46.63 71.04,44.14 68.31,43.37Z" />
<path android:pathData="M81.13,35.61l-40.27,0l-0,40.21l40.27,0z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="41.73"
android:endY="67.24"
android:startX="71.71"
android:startY="37.07"
android:type="linear">
<item
android:color="#FF656D78"
android:offset="0" />
<item
android:color="#FF2F3640"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
</group>
<path android:pathData="M16.12,74.11L40.26,76.63c0.40,0.04 0.81,0.04 1.21,0.01L71.61,73.99c3.48,-0.30 6.56,2.27 6.87,5.75 0.01,0.18 0.02,0.37 0.02,0.55l0,6.76c0,2.99 -2.09,5.58 -5.02,6.20l-31.18,6.58c-0.94,0.2 -1.91,0.18 -2.85,-0.05L13.92,93.41C11.1,92.70 9.12,90.17 9.12,87.26L9.12,80.42C9.12,76.91 11.96,74.08 15.46,74.08c0.22,0 0.44,0.01 0.65,0.03z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="43.81"
android:endY="100"
android:startX="43.81"
android:startY="73.96"
android:type="linear">
<item
android:color="#FF62AC81"
android:offset="0" />
<item
android:color="#FF33744A"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<group>
<clip-path android:pathData="M16.12,74.11L40.26,76.63c0.40,0.04 0.81,0.04 1.21,0.01L71.61,73.99c3.48,-0.30 6.56,2.27 6.87,5.75 0.01,0.18 0.02,0.37 0.02,0.55l0,6.76c0,2.99 -2.09,5.58 -5.02,6.20l-31.18,6.58c-0.94,0.2 -1.91,0.18 -2.85,-0.05L13.92,93.41C11.1,92.70 9.12,90.17 9.12,87.26L9.12,80.42C9.12,76.91 11.96,74.08 15.46,74.08c0.22,0 0.44,0.01 0.65,0.03z" />
<path
android:fillColor="#1c3f28"
android:pathData="M-0.28,69.92l40.27,0l0,40.21l-40.27,0z" />
</group>
</vector>

View file

@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="198dp"
android:height="152.81dp"
android:viewportWidth="198"
android:viewportHeight="152.81">
<path
android:fillColor="#0072ce"
android:pathData="M14.86,130.01C-0.75,125.61 -3.35,116.45 3.76,111.17c6.58,-4.87 17.76,-8.54 17.76,-8.54 0,0 46.24,-16.44 46.24,-16.44 0,0 0,18.74 0,18.74 0,0 -33.27,11.90 -33.27,11.90 -5.87,2.10 -6.78,5.09 -2.00,6.66 4.78,1.56 13.43,1.12 19.32,-0.99 0,0 15.96,-5.79 15.96,-5.79 0,0 0,16.77 0,16.77 -1.01,0.18 -2.14,0.36 -3.18,0.53 -15.96,2.60 -32.97,1.52 -49.72,-4.00z" />
<path
android:fillColor="#0072ce"
android:pathData="m119.11,85.16c0,0 0,-47.75 0,-47.75 0,-5.60 -1.03,-10.77 -6.29,-12.23 -4.03,-1.29 -6.53,2.45 -6.53,8.05 0,0 0,119.58 0,119.58 0,0 -32.25,-10.23 -32.25,-10.23 0,0 0,-142.58 0,-142.58 13.71,2.54 33.68,8.56 44.42,12.18 27.31,9.37 36.57,21.04 36.57,47.34 0,25.63 -15.82,35.34 -35.92,25.63z" />
<path
android:fillColor="#0072ce"
android:pathData="m196.23,116.96c-3.86,4.88 -13.34,8.36 -13.34,8.36 0,0 -70.49,25.32 -70.49,25.32 0,0 0,-18.67 0,-18.67 0,0 51.87,-18.48 51.87,-18.48 5.88,-2.10 6.79,-5.09 2.00,-6.65 -4.77,-1.57 -13.42,-1.12 -19.31,0.99 0,0 -34.56,12.17 -34.56,12.17 0,0 0,-19.37 0,-19.37 0,0 1.99,-0.67 1.99,-0.67 0,0 9.98,-3.53 24.03,-5.09 14.04,-1.54 31.24,0.21 44.74,5.32 15.21,4.80 16.92,11.89 13.06,16.77z" />
</vector>

View file

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="200dp"
android:viewportWidth="200"
android:viewportHeight="200">
<path
android:fillColor="#282a2d"
android:pathData="M5.85,0L194.14,0A5.85,5.85 0,0 1,200 5.85L200,194.14A5.85,5.85 0,0 1,194.14 200L5.85,200A5.85,5.85 0,0 1,0 194.14L0,5.85A5.85,5.85 0,0 1,5.85 0z" />
<path
android:fillColor="#e5a00d"
android:pathData="M100,27.34H57.81L100,100 57.81,172.65H100L142.18,100Z" />
</vector>

View file

@ -0,0 +1,54 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="158.60dp"
android:viewportWidth="200"
android:viewportHeight="158.60">
<path
android:pathData="M68.51,53.93l11.95,0l-6.12,-17.20z"
android:fillColor="#031329" />
<path
android:pathData="m155.97,64.14c8.45,0 11.66,-7.58 11.66,-15.16 0,-7.28 -3.49,-14.86 -11.66,-14.86 -8.16,0 -11.66,7.58 -11.66,14.86 0,7.58 2.91,15.16 11.66,15.16z"
android:fillColor="#031329" />
<path
android:pathData="m73.46,111.95 l-10.49,26.82h5.53l2.33,-6.12h10.78l2.33,6.12h6.12L79.59,111.95ZM72.30,128.57 L76.09,117.49v0l3.79,11.07z"
android:fillColor="#031329" />
<path
android:pathData="M150.14,139.06l5.24,0l0,-12.82l9.62,12.53l7.28,0l-11.66,-14.28l11.07,-12.53l-6.70,0l-9.62,11.66l0,-11.66l-5.24,0z"
android:fillColor="#031329" />
<path
android:pathData="M5.53,93.29H194.75V5.53H5.53Z"
android:fillColor="#031329" />
<path
android:pathData="M112.82,139.06l0,-20.40l0,0l10.20,20.40l6.70,0l0,-27.11l-5.24,0l0,20.11l-10.20,-20.11l-6.70,0l0,27.11z"
android:fillColor="#031329" />
<path
android:pathData="m40.52,125.07v0c3.20,-0.58 5.24,-2.91 5.24,-6.12 0,-5.83 -5.24,-6.99 -8.74,-6.99h-9.32v26.82h9.32c3.49,0 9.32,-1.16 9.32,-7.87 0.29,-3.20 -2.04,-5.53 -5.83,-5.83zM33.23,116.32h2.04c2.33,0 5.24,0.29 5.24,3.49 0,2.91 -2.91,3.20 -5.24,3.20h-2.04zM35.56,134.69h-2.62v-7.87h2.62c2.62,0 5.53,0.58 5.53,4.08 0,3.20 -2.91,3.79 -5.53,3.79z"
android:fillColor="#031329" />
<path
android:pathData="m35.56,126.82h-2.62v7.87h2.62c2.62,0 5.53,-0.58 5.53,-3.79 0,-3.49 -2.62,-4.08 -5.53,-4.08z"
android:fillColor="#FFFFFF" />
<path
android:pathData="M72.30,128.57l7.87,0l-3.79,-11.07l-0.29,0z"
android:fillColor="#FFFFFF" />
<path
android:pathData="M0.87,0.87L0.87,157.72L199.12,157.72L199.12,0.87ZM37.02,139.06L27.69,139.06L27.69,112.24h9.32c3.49,0 8.74,1.16 8.74,6.99 0,3.20 -2.04,5.53 -5.24,6.12v0c3.79,0.29 6.12,2.91 6.12,6.12 0,6.41 -6.12,7.58 -9.62,7.58zM83.96,139.06 L81.63,132.65L70.84,132.65l-2.33,6.12h-5.53l10.49,-26.82h6.12l10.49,26.82h-6.12zM129.73,139.06h-6.70l-10.20,-20.11v0,20.11h-5.24L107.58,112.24h6.70l10.20,20.11v0,-20.11h5.24zM165.01,138.77 L155.39,126.23v12.53h-5.24v-26.82h5.24v11.66l9.62,-11.66h6.70l-11.07,12.53 11.66,14.28zM194.46,93.29L5.53,93.29L5.53,5.53L194.75,5.53v87.75z"
android:fillColor="#FFFFFF" />
<path
android:pathData="m40.52,119.53c0,-3.20 -2.91,-3.49 -5.24,-3.49h-2.04v6.70h2.04c2.33,0 5.24,-0.29 5.24,-3.20z"
android:fillColor="#FFFFFF" />
<path
android:pathData="m41.98,58.89c0,3.79 -4.37,5.24 -7.28,5.24 -2.62,0 -5.24,-0.58 -7.58,-1.74l-2.62,6.70c4.08,1.16 6.12,1.45 10.78,1.45 8.45,0 15.74,-3.49 15.74,-12.53 0,-13.99 -18.36,-11.07 -18.36,-18.07 0,-4.37 3.79,-5.83 6.41,-5.83 2.33,0 4.66,0.29 6.70,1.16l2.33,-6.12c-2.91,-1.16 -6.41,-1.45 -9.91,-1.45 -7.28,0 -14.57,3.49 -14.57,12.53 0,13.99 18.36,10.78 18.36,18.65z"
android:fillColor="#FFFFFF" />
<path
android:pathData="M132.07,28.57l-8.74,0l-9.03,14.86l-8.45,-14.86l-9.62,0l12.24,19.82l-13.70,21.57l9.62,0l9.62,-16.03l9.62,16.03l9.62,0l-13.41,-21.57z"
android:fillColor="#FFFFFF" />
<path
android:pathData="m155.97,70.84c13.12,0 20.40,-9.03 20.40,-21.57 0,-12.53 -7.28,-21.28 -20.40,-21.28 -13.12,0 -20.40,8.45 -20.40,21.28 0,12.82 6.99,21.57 20.40,21.57zM155.97,34.40c8.16,0 11.66,7.58 11.66,14.86 0,7.58 -3.20,15.16 -11.66,15.16 -8.45,0 -11.66,-7.58 -11.66,-15.16 0,-7.28 3.20,-14.86 11.66,-14.86z"
android:fillColor="#FFFFFF" />
<path
android:pathData="m65.88,60.35h16.91l3.49,9.62 5.53,-9.03 -12.53,-32.36h-9.32l-16.32,41.39h8.45zM74.34,36.73v0l6.12,17.20L68.51,53.93Z"
android:fillColor="#FFFFFF" />
<path
android:pathData="M199.12,0.87L199.12,157.72L0.87,157.72L0.87,0.87l198.25,0M200,0L199.12,0 0.87,0 0,0l0,0.87 0,156.85 0,0.87l0.87,0 198.25,0 0.87,0L200,157.72 200,0.87Z"
android:fillColor="#031329" />
</vector>

View file

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="100dp"
android:height="48.32dp"
android:viewportWidth="99.99"
android:viewportHeight="48.32">
<path
android:pathData="m33.33,23.19c-2.59,-1.69 -5.19,-2.39 -8.09,-3.12 -2.91,-0.75 -5.17,-1.29 -7.01,-1.83 -2.28,-0.58 -4.66,-1.27 -6.25,-2.91 -0.79,-1.59 -0.54,-3.15 0.10,-4.63 0.43,-0.64 0.97,-1.18 1.61,-1.61 2.65,-1.28 5.55,-1.27 8.19,-0.75 2.01,0.43 3.95,1.51 4.74,3.23 0.53,0.86 0.75,2.04 0.86,3.45h9.81c0,-2.69 -0.53,-4.96 -1.51,-6.79C34.84,6.36 33.44,4.74 31.71,3.55 27.72,1.09 23.23,0.01 18.87,0 16.82,0 14.77,0.32 12.62,0.86 8.59,2.05 5.07,4.37 3.12,7.76 2.04,9.49 1.51,11.65 1.51,14.02c0.08,3.72 1.56,6.96 4.31,9.06 2.92,2.07 6.28,3.18 9.49,3.99 1.72,0.43 3.34,0.86 4.96,1.29 2.67,0.80 5.60,1.43 7.55,3.34 0.75,0.75 1.18,1.83 1.18,3.02 -0.03,2.32 -1.43,3.67 -3.12,4.74 -1.90,0.89 -3.84,1.00 -5.82,1.07 -2.58,-0.05 -5.10,-0.45 -7.11,-1.94 -0.86,-0.64 -1.61,-1.51 -2.26,-2.58 -0.64,-1.07 -0.86,-2.37 -0.86,-3.99H0c0,2.80 0.43,5.28 1.51,7.33 1.07,2.04 2.48,3.77 4.31,5.07 1.83,1.29 3.99,2.26 6.36,2.91 2.37,0.64 4.85,0.97 7.44,0.97 3.12,0 5.93,-0.32 8.30,-1.07 2.37,-0.75 4.42,-1.72 6.04,-3.02 1.61,-1.29 2.80,-2.91 3.66,-4.63 0.86,-1.83 1.18,-3.77 1.18,-5.93 0,-2.58 -0.53,-4.74 -1.61,-6.36 -1.07,-1.72 -2.37,-3.02 -3.88,-4.09z"
android:fillColor="#434c4d" />
<path
android:pathData="M89.96,1.07 L82.41,32.90H82.30L74.43,1.07H64.83L56.85,32.57H56.74L49.40,1.07H39.26l12.18,46.27h10.35l7.65,-31.49h0.10l7.87,31.49H87.48L100,1.07Z"
android:fillColor="#7ab800" />
</vector>

View file

@ -0,0 +1,43 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="164.43dp"
android:height="121.48dp"
android:viewportWidth="164.43"
android:viewportHeight="121.48">
<path android:pathData="m75.28,51.62a70.21,70.21 0,0 1,-30.58 -17.43,70.25 70.25,0 0,1 -30.74,17.48 49.77,49.77 0,0 0,-0.88 9.35,49.74 49.74,0 0,0 30.93,45.84 49.54,49.54 0,0 0,32.08 -46.3,49.91 49.91,0 0,0 -0.80,-8.94zM42.38,88.22h-0.01l-18.85,-18.85 5.8,-5.81 13.07,13.07 20.44,-20.44 5.80,5.8zM75.28,51.62a70.21,70.21 0,0 1,-30.58 -17.43,70.25 70.25,0 0,1 -30.74,17.48 49.77,49.77 0,0 0,-0.88 9.35,49.74 49.74,0 0,0 30.93,45.84 49.54,49.54 0,0 0,32.08 -46.3,49.91 49.91,0 0,0 -0.80,-8.94zM42.38,88.22h-0.01l-18.85,-18.85 5.8,-5.81 13.07,13.07 20.44,-20.44 5.80,5.8zM44.7,34.18a70.25,70.25 0,0 1,-30.74 17.48,49.77 49.77,0 0,0 -0.88,9.35 49.74,49.74 0,0 0,30.93 45.84,49.54 49.54,0 0,0 32.08,-46.3 49.91,49.91 0,0 0,-0.80 -8.94,70.21 70.21,0 0,1 -30.58,-17.44zM42.38,88.22h-0.01l-18.85,-18.85 5.8,-5.81 13.07,13.07 20.44,-20.44 5.80,5.8zM75.28,51.62a70.21,70.21 0,0 1,-30.58 -17.43,70.25 70.25,0 0,1 -30.74,17.48 49.77,49.77 0,0 0,-0.88 9.35,49.74 49.74,0 0,0 30.93,45.84 49.54,49.54 0,0 0,32.08 -46.3,49.91 49.91,0 0,0 -0.80,-8.94zM42.38,88.22h-0.01l-18.85,-18.85 5.8,-5.81 13.07,13.07 20.44,-20.44 5.80,5.8zM75.28,51.62a70.21,70.21 0,0 1,-30.58 -17.43,70.25 70.25,0 0,1 -30.74,17.48 49.77,49.77 0,0 0,-0.88 9.35,49.74 49.74,0 0,0 30.93,45.84 49.54,49.54 0,0 0,32.08 -46.3,49.91 49.91,0 0,0 -0.80,-8.94zM42.38,88.22h-0.01l-18.85,-18.85 5.8,-5.81 13.07,13.07 20.44,-20.44 5.80,5.8z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="76"
android:endY="82.50"
android:startX="13"
android:startY="82.50"
android:type="linear">
<item
android:color="#e3156a"
android:offset="0" />
<item
android:color="#91187f"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="m162.57,6.06a13.03,13.03 0,0 0,-1.9 -2.38c-0.22,-0.22 -0.45,-0.43 -0.7,-0.64a12.57,12.57 0,0 0,-7.48 -3.04h-95.88a12.57,12.57 0,0 0,-7.48 3.04,6.58 6.58,0 0,0 -0.68,0.64 12.31,12.31 0,0 0,-1.9 2.37,12.68 12.68,0 0,0 -1.87,6.66v5l-1.58,1.63 -0.27,0.29a82.04,82.04 0,0 1,-38.15 22.35c-0.36,0.1 -0.73,0.2 -1.11,0.29l-1.61,0.4 -0.35,1.62c-0.12,0.58 -0.24,1.18 -0.36,1.77a67.17,67.17 0,0 0,-1.19 12.61,66.47 66.47,0 0,0 12.03,38.27 66.73,66.73 0,0 0,27.90 22.95c0.96,0.42 1.92,0.82 2.91,1.20l0.92,0.35 0.93,-0.34c1.26,-0.44 2.51,-0.94 3.75,-1.46a66.93,66.93 0,0 0,31.87 -28.44h71.36a12.62,12.62 0,0 0,8.22 -3.03c0.25,-0.21 0.48,-0.42 0.72,-0.66a13.24,13.24 0,0 0,1.9 -2.38,12.65 12.65,0 0,0 1.87,-6.65v-65.8a12.74,12.74 0,0 0,-1.86 -6.64zM56.71,6.07c0.22,-0.01 0.44,-0.02 0.67,-0.02h94.33c0.22,0 0.45,0.00 0.67,0.02h1l-0.16,0.14 -46.69,41.31a2.98,2.98 0,0 1,-3.94 0l-46.69,-41.31 -0.16,-0.14zM50.74,12.71a6.50,6.50 0,0 1,0.49 -2.51l40.03,35.43 -2.85,2.52q-0.21,-1.47 -0.51,-2.93c-0.05,-0.31 -0.10,-0.61 -0.17,-0.93l-0.34,-1.63 -1.62,-0.4c-0.39,-0.1 -0.78,-0.2 -1.17,-0.3a82.21,82.21 0,0 1,-33.83 -18.36zM43.86,115.76a61.95,61.95 0,0 1,-38.5 -57.07,61.87 61.87,0 0,1 1.10,-11.63 87.3,87.3 0,0 0,38.25 -21.76,87.31 87.31,0 0,0 38.06,21.71 61.8,61.8 0,0 1,1.01 11.13,61.67 61.67,0 0,1 -39.93,57.62zM83.42,85.16a66.55,66.55 0,0 0,5.73 -27.02c0,-0.83 -0.01,-1.65 -0.05,-2.49l6.73,-5.96 6.74,5.96a2.98,2.98 0,0 0,3.94 0l6.74,-5.96 39.92,35.31 0.18,0.17zM158.37,78.51a6.52,6.52 0,0 1,-0.49 2.50l-40,-35.38 40.01,-35.40a6.56,6.56 0,0 1,0.48 2.49z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="164.43"
android:endY="82.50"
android:startX="-0.00"
android:startY="82.50"
android:type="linear">
<item
android:color="#e3156a"
android:offset="0" />
<item
android:color="#91187f"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
</vector>

View file

@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="109.37dp"
android:viewportWidth="200"
android:viewportHeight="109.37">
<path
android:fillColor="#50bd37"
android:pathData="M125.22,17.44C111.01,17.44 100.92,27.73 100.92,41.55C100.92,50.89 105.53,58.61 112.91,62.64C112.81,62.73 112.71,62.84 112.62,62.94C110.72,65.03 109.74,67.70 109.74,70.41C109.73,71.61 109.93,72.83 110.35,74.00C109.40,74.61 108.26,75.45 107.09,76.55C104.26,79.18 101.23,83.59 101.14,89.70C101.14,89.85 101.14,89.96 101.14,90.05C101.14,93.20 101.88,96.04 103.16,98.42C105.07,102.00 108.06,104.50 111.14,106.16C114.24,107.83 117.47,108.71 120.29,109.06C121.97,109.26 123.67,109.37 125.37,109.37C130.10,109.36 134.83,108.56 138.93,106.55C143.02,104.57 146.54,101.16 148.06,96.37C148.51,94.95 148.75,93.34 148.76,91.55C148.75,87.93 147.71,83.50 144.45,79.85C141.20,76.18 135.81,73.73 128.43,73.77C126.82,73.77 125.11,73.88 123.29,74.10C122.71,74.18 122.17,74.21 121.68,74.21C119.42,74.2 118.28,73.57 117.60,72.93C116.94,72.28 116.60,71.42 116.6,70.41C116.59,69.39 117.00,68.31 117.68,67.58C118.38,66.85 119.24,66.35 120.76,66.33C120.89,66.33 121.04,66.34 121.18,66.35C122.15,66.42 123.1,66.45 124.01,66.45C131.57,66.47 137.25,64.12 141.12,60.90C145.00,57.68 147.05,53.76 148.02,50.67L148.01,50.66C149.06,47.88 149.63,44.81 149.63,41.55C149.63,27.73 139.53,17.44 125.22,17.44zM125.22,23.32C135.91,23.32 142.57,31.26 142.57,41.55C142.57,46.92 140.75,51.65 137.5,54.94C137.25,55.17 137.01,55.40 136.75,55.62C136.40,55.94 136.00,56.28 135.54,56.62C132.78,58.62 129.30,59.77 125.22,59.77C114.64,59.77 107.97,51.84 107.97,41.55C107.97,31.26 114.64,23.32 125.22,23.32zM114.78,79.34C116.68,80.47 119.05,81.08 121.68,81.07C122.47,81.07 123.29,81.02 124.13,80.91C125.70,80.72 127.13,80.63 128.43,80.63C134.44,80.66 137.50,82.41 139.35,84.43C141.19,86.46 141.90,89.21 141.89,91.55C141.90,92.67 141.72,93.68 141.53,94.28C140.61,97.07 138.75,98.97 135.90,100.4C133.08,101.80 129.31,102.51 125.37,102.51C123.96,102.51 122.52,102.42 121.11,102.25C118.43,101.94 114.89,100.79 112.32,98.78C111.02,97.78 109.96,96.60 109.21,95.19C108.47,93.78 108.00,92.15 108.00,90.05L108.00,89.82C108.08,85.96 109.85,83.40 111.79,81.54C112.75,80.63 113.74,79.96 114.46,79.53C114.57,79.46 114.68,79.40 114.78,79.34z" />
<path
android:fillColor="#50bd37"
android:pathData="m68.67,17.60c-14.21,0 -24.30,10.28 -24.30,24.10 0,13.81 10.09,24.10 24.30,24.10 14.30,0 24.40,-10.29 24.40,-24.10 0,-13.82 -10.09,-24.10 -24.40,-24.10zM68.67,23.48c10.68,0 17.34,7.93 17.34,18.23 0,10.29 -6.66,18.22 -17.34,18.22 -10.58,0 -17.25,-7.93 -17.25,-18.22 0,-10.29 6.66,-18.23 17.25,-18.23z" />
<path
android:fillColor="#50bd37"
android:pathData="M24.82,39.19 L18.26,37.62c-5.97,-1.37 -9.01,-2.94 -9.01,-7.25 0,-4.90 4.99,-6.86 9.50,-6.86 4.58,0 7.93,2.29 9.90,5.85 0.00,0.01 0.01,0.03 0.02,0.04 0.04,0.07 0.08,0.15 0.12,0.22l0.00,-0.00c0.62,0.93 1.66,1.56 2.78,1.56 1.91,0 3.29,-1.38 3.29,-3.29 0,-0.73 -0.15,-1.50 -0.5,-2.09 -3.36,-5.71 -8.91,-8.18 -15.26,-8.18 -8.62,0 -16.95,4.31 -16.95,13.81 0,8.72 8.62,11.27 11.76,12.05l6.27,1.47c4.80,1.17 8.72,2.74 8.72,7.34 0,5.29 -5.48,7.64 -10.78,7.64 -5.38,0 -9.38,-2.75 -12.13,-6.82h-0.00c-0.61,-0.89 -1.55,-1.51 -2.71,-1.51 -1.87,0 -3.37,1.53 -3.30,3.40 0.03,0.76 0.28,1.40 0.67,1.96 4.30,6.44 10.54,8.85 17.48,8.85 8.92,0 17.83,-4.11 17.83,-14.11 0,-6.46 -4.80,-11.07 -11.17,-12.54z" />
<path
android:fillColor="#50bd37"
android:pathData="M178.04,0C165.25,0 156.16,9.35 156.16,21.92C156.16,34.47 165.25,43.83 178.04,43.83C190.91,43.83 200,34.47 200,21.92C200,9.35 190.91,0 178.04,0zM178.05,5.91C187.45,5.91 194.08,12.74 194.08,21.92C194.08,31.09 187.45,37.92 178.05,37.92C168.71,37.92 162.07,31.09 162.07,21.92C162.07,12.74 168.71,5.91 178.05,5.91z" />
<path
android:fillColor="#50bd37"
android:pathData="M178.06,11.37C171.90,11.37 167.53,15.87 167.53,21.92C167.53,27.96 171.90,32.45 178.06,32.45C184.25,32.45 188.62,27.96 188.62,21.92C188.62,15.87 184.25,11.37 178.06,11.37zM178.07,16.59C181.20,16.59 183.41,18.86 183.41,21.92C183.41,24.97 181.20,27.24 178.07,27.24C174.96,27.24 172.75,24.97 172.75,21.92C172.75,18.86 174.96,16.59 178.07,16.59z" />
</vector>

View file

@ -0,0 +1,36 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="37.24dp"
android:viewportWidth="200"
android:viewportHeight="37.24">
<path
android:fillColor="#000099"
android:pathData="m155.13,7.55c-3.95,0 -7.14,2.42 -8.53,6.27v8.63c1.35,3.84 4.54,6.24 8.53,6.24 2.67,0 4.68,-0.90 6.10,-2.67v1.66c0,3.46 -2.01,5.09 -5.13,5.09 -2.32,0 -4.23,-0.69 -7.28,-2.49l-2.60,3.84c2.94,1.97 6.41,3.05 9.95,3.08 5.89,0 10.22,-3.15 10.22,-9.05L166.40,8.25h-4.88L161.51,10.57C160.16,8.56 158.04,7.55 155.13,7.55ZM156.31,12.06c2.11,0 3.74,1.21 4.54,3.19v5.72c-0.79,1.97 -2.46,3.22 -4.54,3.22 -2.08,0 -3.74,-1.21 -4.54,-3.22v-5.72c0.79,-1.97 2.42,-3.19 4.54,-3.19z" />
<path
android:fillColor="#000099"
android:pathData="m132.83,7.52c-4.82,0 -8.59,2.60 -10.15,6.76v8.80c1.56,4.16 5.33,6.76 10.15,6.76 4.82,0 8.56,-2.60 10.09,-6.72v-8.87c-1.52,-4.12 -5.30,-6.72 -10.09,-6.72zM132.83,12.03c2.39,0 4.09,1.35 4.92,3.57v6.17c-0.83,2.21 -2.60,3.53 -4.92,3.53 -2.32,0 -4.16,-1.31 -4.99,-3.53v-6.17c0.83,-2.21 2.60,-3.57 4.99,-3.57z" />
<path
android:fillColor="#000099"
android:pathData="m89.70,7.52c-4.82,0 -8.59,2.60 -10.15,6.76v8.80c1.52,4.16 5.33,6.76 10.15,6.76 4.82,0 8.56,-2.60 10.09,-6.72L99.79,14.25C98.23,10.12 94.45,7.52 89.70,7.52ZM89.66,12.03c2.35,0 4.09,1.35 4.92,3.57l0.03,6.17c-0.83,2.21 -2.60,3.53 -4.95,3.53 -2.32,0 -4.16,-1.31 -4.99,-3.53v-6.17c0.83,-2.21 2.60,-3.57 4.99,-3.57z" />
<path
android:fillColor="#000099"
android:pathData="M10.99,16.29C9.53,15.98 8.49,15.70 7.90,15.56 7.17,15.36 6.62,15.08 6.34,14.70v-1.59c0.48,-0.76 1.66,-1.24 3.29,-1.24 2.25,0 3.81,0.52 6.27,2.46l2.87,-3.46C15.88,8.42 13.38,7.55 9.77,7.55c-4.16,0 -7.03,1.69 -8.18,4.12v5.27c0.90,1.76 2.98,2.77 7.14,3.67 1.49,0.34 2.49,0.58 3.08,0.69 0.76,0.24 1.45,0.55 1.83,1.11v1.83c-0.52,0.83 -1.76,1.28 -3.39,1.28C9.08,25.58 7.94,25.34 6.86,24.89 5.82,24.48 4.61,23.68 3.08,22.43L0,25.86c3.32,2.94 6.13,3.95 10.12,3.95 4.26,0 7.28,-1.63 8.42,-4.23V20.28C17.58,18.30 15.25,17.26 10.99,16.29Z" />
<path
android:fillColor="#000099"
android:pathData="m196.46,22.05c-2.18,2.32 -3.67,3.22 -5.68,3.22 -2.39,0 -4.09,-1.38 -4.85,-3.53v-6.10c0.79,-2.18 2.49,-3.57 4.92,-3.57 1.76,0 3.19,0.62 5.44,2.73l3.32,-3.29c-2.67,-2.91 -5.27,-3.98 -8.77,-3.98 -4.88,0 -8.66,2.56 -10.16,6.86v8.59c1.45,4.3 5.16,6.83 10.02,6.83 3.77,0 6.38,-1.24 9.29,-4.85z" />
<path
android:fillColor="#000099"
android:pathData="m171.01,5.09h5.51V0h-5.51z" />
<path
android:fillColor="#000099"
android:pathData="M176.45,29.19H171.11V8.25h5.34z" />
<path
android:fillColor="#000099"
android:pathData="m118.55,29.19h-5.34V0.06h5.34z" />
<path
android:fillColor="#000099"
android:pathData="m75.69,14.56v14.63h-5.34V16.15c0,-2.49 -1.00,-4.02 -3.32,-4.02 -2.32,0 -3.67,1.73 -3.67,4.16v12.89h-5.34V16.15c0,-2.67 -1.11,-4.02 -3.32,-4.02 -2.35,0 -3.67,1.73 -3.67,4.16V29.19H45.66V8.25h4.95v2.32c1.21,-2.01 3.22,-3.01 5.96,-3.01 2.67,0 4.68,1.11 5.82,3.08 1.42,-2.04 3.53,-3.08 6.27,-3.08 4.47,0 7.00,2.67 7.00,7.00z" />
<path
android:fillColor="#000099"
android:pathData="m41.01,8.25v20.94h-4.88v-2.21c-1.11,1.80 -3.15,2.84 -6.13,2.84 -4.95,0 -7.42,-2.56 -7.42,-6.65V8.25h5.34v13.48c0,2.18 1.17,3.46 3.46,3.46 2.67,0 4.3,-1.52 4.3,-4.33V8.25Z" />
</vector>

View file

@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="23.16dp"
android:height="28.23dp"
android:viewportWidth="23.16"
android:viewportHeight="28.23">
<path
android:fillColor="#e20074"
android:pathData="m0.28,0 l-0.28,9.96 1.50,0.26q0.41,-4.40 2.31,-6.53c1.32,-1.48 3.15,-2.26 5.51,-2.33v20.84c0,1.82 -0.26,3.00 -0.79,3.55 -0.45,0.46 -1.21,0.74 -2.29,0.85q-0.47,0.03 -1.63,0.03v1.58h13.94v-1.58c-0.77,0 -1.32,0 -1.63,-0.03C15.83,26.50 15.05,26.22 14.62,25.75 14.09,25.21 13.82,24.02 13.82,22.20L13.82,1.35c2.35,0.06 4.18,0.84 5.51,2.33q1.89,2.13 2.31,6.53L23.15,9.95 22.87,0Z" />
<path
android:fillColor="#e20074"
android:pathData="M20.20,12.99l-2.75,0l0,5.72l5.71,0l0,-5.72z" />
<path
android:fillColor="#e20074"
android:pathData="M5.72,18.71l0,-5.72l-2.82,0l-2.89,0l0,5.72z" />
</vector>

View file

@ -0,0 +1,66 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="154.62dp"
android:height="200dp"
android:viewportWidth="154.62"
android:viewportHeight="200">
<path
android:fillColor="#e82127"
android:pathData="m132.10,187.81v12.15h3.89v-8.09h14.19v8.09h3.89v-12.13l-21.98,-0.02" />
<path
android:fillColor="#e82127"
android:pathData="m135.56,183.88h14.99c2.08,-0.41 3.63,-2.25 4.06,-4.03h-23.12c0.43,1.77 2.00,3.61 4.06,4.03" />
<path
android:fillColor="#e82127"
android:pathData="m120.29,199.98c1.96,-0.83 3.02,-2.27 3.42,-3.96l-17.48,0l0.01,-16.15 -3.92,0.01l0,20.10l17.96,0" />
<path
android:fillColor="#e82127"
android:pathData="m73.17,183.83l13.84,0c2.08,-0.60 3.84,-2.19 4.26,-3.96l-21.99,0l0,11.88l18.00,0l0,4.17l-14.12,0.01c-2.21,0.61 -4.08,2.10 -5.02,4.06l1.14,-0.02l21.87,0l0,-12.17l-17.98,0l0,-3.97" />
<path
android:fillColor="#e82127"
android:pathData="m38.99,183.86h14.98c2.08,-0.41 3.63,-2.25 4.06,-4.03H34.92c0.43,1.78 2.00,3.61 4.06,4.03" />
<path
android:fillColor="#e82127"
android:pathData="m38.99,191.81h14.98c2.08,-0.41 3.63,-2.24 4.06,-4.03H34.92c0.43,1.78 2.00,3.61 4.06,4.03" />
<path
android:fillColor="#e82127"
android:pathData="m38.99,199.98h14.98c2.08,-0.41 3.63,-2.25 4.06,-4.03H34.92c0.43,1.77 2.00,3.61 4.06,4.03" />
<path
android:fillColor="#e82127"
android:pathData="m0,179.88c0.45,1.75 1.97,3.55 4.06,4.00l6.30,0l0.32,0.12l0,15.92l3.94,0L14.63,184.01l0.35,-0.12l6.31,0c2.11,-0.54 3.6,-2.24 4.04,-4.00l0,-0.03L0,179.84l0,0.03" />
<path
android:fillColor="#e82127"
android:pathData="M77.32,140.10 L97.00,29.39c18.76,0 24.68,2.05 25.53,10.45 0,0 12.58,-4.69 18.93,-14.22C116.70,14.15 91.81,13.63 91.81,13.63l-14.52,17.69 0.03,-0.00 -14.52,-17.69c0,0 -24.89,0.51 -49.66,11.99 6.34,9.53 18.93,14.22 18.93,14.22 0.86,-8.39 6.77,-10.45 25.40,-10.46l19.84,110.72" />
<path
android:fillColor="#e82127"
android:pathData="m77.31,8.52c20.02,-0.15 42.94,3.09 66.41,13.32 3.13,-5.64 3.94,-8.14 3.94,-8.14C122.01,3.56 97.99,0.08 77.31,0 56.62,0.08 32.60,3.56 6.96,13.70c0,0 1.14,3.07 3.94,8.14C34.36,11.62 57.28,8.37 77.31,8.52h0.00" />
<path
android:fillColor="#e82127"
android:pathData="m132.10,187.81v12.15h3.89v-8.09h14.19v8.09h3.89v-12.13l-21.98,-0.02" />
<path
android:fillColor="#e82127"
android:pathData="m135.56,183.88h14.99c2.08,-0.41 3.63,-2.25 4.06,-4.03h-23.12c0.43,1.77 2.00,3.61 4.06,4.03" />
<path
android:fillColor="#e82127"
android:pathData="m120.29,199.98c1.96,-0.83 3.02,-2.27 3.42,-3.96l-17.48,0l0.01,-16.15 -3.92,0.01l0,20.10l17.96,0" />
<path
android:fillColor="#e82127"
android:pathData="m73.17,183.83l13.84,0c2.08,-0.60 3.84,-2.19 4.26,-3.96l-21.99,0l0,11.88l18.00,0l0,4.17l-14.12,0.01c-2.21,0.61 -4.08,2.10 -5.02,4.06l1.14,-0.02l21.87,0l0,-12.17l-17.98,0l0,-3.97" />
<path
android:fillColor="#e82127"
android:pathData="m38.99,183.86h14.98c2.08,-0.41 3.63,-2.25 4.06,-4.03H34.92c0.43,1.78 2.00,3.61 4.06,4.03" />
<path
android:fillColor="#e82127"
android:pathData="m38.99,191.81h14.98c2.08,-0.41 3.63,-2.24 4.06,-4.03H34.92c0.43,1.78 2.00,3.61 4.06,4.03" />
<path
android:fillColor="#e82127"
android:pathData="m38.99,199.98h14.98c2.08,-0.41 3.63,-2.25 4.06,-4.03H34.92c0.43,1.77 2.00,3.61 4.06,4.03" />
<path
android:fillColor="#e82127"
android:pathData="m0,179.88c0.45,1.75 1.97,3.55 4.06,4.00l6.30,0l0.32,0.12l0,15.92l3.94,0L14.63,184.01l0.35,-0.12l6.31,0c2.11,-0.54 3.6,-2.24 4.04,-4.00l0,-0.03L0,179.84l0,0.03" />
<path
android:fillColor="#e82127"
android:pathData="M77.32,140.10 L97.00,29.39c18.76,0 24.68,2.05 25.53,10.45 0,0 12.58,-4.69 18.93,-14.22C116.70,14.15 91.81,13.63 91.81,13.63l-14.52,17.69 0.03,-0.00 -14.52,-17.69c0,0 -24.89,0.51 -49.66,11.99 6.34,9.53 18.93,14.22 18.93,14.22 0.86,-8.39 6.77,-10.45 25.40,-10.46l19.84,110.72" />
<path
android:fillColor="#e82127"
android:pathData="m77.31,8.52c20.02,-0.15 42.94,3.09 66.41,13.32 3.13,-5.64 3.94,-8.14 3.94,-8.14C122.01,3.56 97.99,0.08 77.31,0 56.62,0.08 32.60,3.56 6.96,13.70c0,0 1.14,3.07 3.94,8.14C34.36,11.62 57.28,8.37 77.31,8.52h0.00" />
</vector>

View file

@ -0,0 +1,33 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="148.71dp"
android:viewportWidth="200"
android:viewportHeight="148.71">
<path
android:fillColor="#c50e1f"
android:pathData="m142.65,148.71c11.94,0 20.52,-3.54 27.19,-8.01 6.21,-4.16 11.03,-9.09 14.73,-15.45 4.77,-8.21 6.24,-15.85 6.65,-20.28C191.22,104.92 200,12.60 200,12.60l-44.28,-0.00c0,0 -13.08,136.11 -13.06,136.11" />
<path
android:fillColor="#c50e1f"
android:pathData="m100.75,43.54 l-5.99,62.27c-1.10,14.90 4.48,22.56 7.96,26.59 6.35,7.36 18.02,13.16 31.51,15.57C134.60,144.03 146.22,23.48 146.22,23.46 146.62,17.27 144.82,11.86 140.69,7.14 135.88,1.64 128.76,0 125.81,0L19.94,0.01C11.97,0.01 0,8.09 0,21.42c0,16.47 14.63,22.11 19.67,22.11 2.57,0 81.08,-0.00 81.08,-0.00" />
<path
android:fillColor="#c50e1f"
android:pathData="m39.09,136.19 l39.42,-0.00 8.06,-83.78 -39.42,0.00c0,0 -7.04,72.93 -8.06,83.78v0" />
<path
android:fillColor="#ffffff"
android:pathData="m171.16,86.98c-0.23,2.47 2.48,3.80 5.05,3.80l4.71,0.00c0.28,-0.68 0.44,-1.45 0.54,-2.41 0.25,-2.62 -1.16,-4.42 -5.27,-4.42 -3.06,-0.00 -4.84,0.95 -5.03,3.02zM184.05,88.62c-0.20,2.16 -0.57,3.80 -1.17,5.47l-21.96,-0.01 0.32,-3.30 7.01,0.00c0.88,0.00 2.10,0.09 2.88,0.28l0.00,-0.06c-1.82,-0.80 -2.84,-2.63 -2.62,-4.88 0.35,-3.64 3.11,-5.65 7.71,-5.65 5.27,0.00 8.31,3.06 7.82,8.17" />
<path
android:fillColor="#ffffff"
android:pathData="m172.43,70.92c-0.17,1.85 1.07,3.15 3.16,3.43l0.62,-6.52c-2.14,-0.06 -3.60,1.14 -3.79,3.08zM178.8,64.65 L177.86,74.42c3.45,0.09 5.12,-1.38 5.43,-4.54 0.14,-1.48 -0.01,-3.03 -0.46,-4.42l2.58,-0.42c0.45,1.60 0.64,3.52 0.45,5.44 -0.45,4.73 -3.15,7.35 -8.51,7.35 -4.56,-0.00 -7.77,-2.63 -7.34,-7.08 0.42,-4.39 3.47,-6.21 6.93,-6.21 0.49,0 1.22,0.03 1.85,0.12" />
<path
android:fillColor="#ffffff"
android:pathData="m174.96,52.97c-0.87,3.06 1.09,4.54 5.65,4.55l6.19,0.00 -0.32,3.30 -15.22,-0.01 0.30,-3.15c0.85,0.00 2.19,0.09 3.34,0.31l0.00,-0.06c-1.98,-0.68 -3.73,-2.23 -3.15,-5.10l3.2,0.15" />
<path
android:fillColor="#ffffff"
android:pathData="m187.53,49.99 l-22.36,-0.01 0.31,-3.30 22.36,0.01 -0.31,3.30" />
<path
android:fillColor="#ffffff"
android:pathData="m188.28,42.15 l-15.22,-0.01 0.31,-3.30 15.22,0.01zM170.52,40.47c-0.11,1.17 -1.09,2.13 -2.25,2.13 -1.13,0 -1.95,-0.95 -1.84,-2.13 0.11,-1.14 1.12,-2.1 2.25,-2.1 1.13,0.00 1.95,0.96 1.84,2.10" />
<path
android:fillColor="#ffffff"
android:pathData="m189.96,24.72 l-9.77,-0.00c-1.89,-0.00 -3.08,0.52 -3.25,2.28 -0.22,2.32 2.03,4.02 5.09,4.02l7.32,0.00 -0.31,3.30 -15.22,-0.01 0.30,-3.15c0.82,0.00 2.13,0.06 2.97,0.21l0.00,-0.03c-1.87,-0.89 -3.04,-2.75 -2.79,-5.35 0.33,-3.49 2.64,-4.57 5.31,-4.57l10.66,0.00 -0.31,3.27" />
</vector>

View file

@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200.15dp"
android:height="196.73dp"
android:viewportWidth="200.15"
android:viewportHeight="196.73">
<path
android:fillColor="#FF0000"
android:pathData="M2.78,78.82C35.86,52 67.81,26.09 99.99,0c32.18,26.09 64.12,51.99 97.22,78.82 -65.19,0 -128.91,0 -194.43,0z" />
<path
android:fillColor="#FF0000"
android:pathData="m2.7,196.73c33.16,-26.88 65.1,-52.78 97.29,-78.88 32.19,26.09 64.13,51.99 97.3,78.88 -65.32,0 -128.95,0 -194.59,0z" />
<path
android:fillColor="#FF0000"
android:pathData="m2.65,82.56c65.58,0 129.16,0 194.66,0 -23.35,18.94 -45.4,36.83 -67.99,55.15 -8.23,-6.67 -16.58,-13.1 -24.5,-20.02 -3.66,-3.19 -6.08,-3.09 -9.68,0.05 -7.78,6.78 -15.97,13.08 -24.44,19.94C48.37,119.6 26.25,101.68 2.65,82.56Z" />
<path
android:fillColor="#FF0000"
android:pathData="m200.15,195.13c-23.17,-18.78 -45.38,-36.78 -68.42,-55.46 22.75,-18.45 45.13,-36.59 68.42,-55.49 0,37.45 0,73.52 0,110.95z" />
<path
android:fillColor="#FF0000"
android:pathData="M68.28,139.65C45.19,158.36 23,176.35 0,194.99 0,158.03 0,121.98 0,84.35c22.94,18.57 45.28,36.67 68.28,55.3z" />
</vector>

View file

@ -66,7 +66,19 @@
android:paddingTop="@dimen/activity_margin_xsmall"
android:paddingBottom="@dimen/fab_recyclerview_padding"
android:clipToPadding="false" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="@dimen/activity_margin_large"
android:paddingEnd="@dimen/activity_margin_large"
android:clipToPadding="false"
android:text="@string/empty_list_view_text"
android:textSize="18sp"
android:textStyle="bold"
android:gravity="center"
tools:visibility="visible"
android:visibility="gone"
android:id="@+id/emptyListView"/>
<include layout="@layout/component_tags" />
</androidx.drawerlayout.widget.DrawerLayout>

View file

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:gravity="top"
android:padding="@dimen/activity_margin_large" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
android:textStyle="bold"
android:text="@string/settings_title_enable_android_backup_service" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_margin"
android:text="@string/intro_slide_android_backup_desc"/>
<Switch
android:id="@+id/introAndroidSync"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_margin"
android:checked="true"
android:text="@string/settings_toast_android_sync_enabled" />
</LinearLayout>
</ScrollView>

View file

@ -34,12 +34,27 @@
<requestFocus/>
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/buttonUnlock"
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
style="?android:attr/buttonBarButtonStyle"
android:text="@string/auth_button_unlock" />
android:layout_gravity="end">
<Button
android:id="@+id/buttonUnlock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="?android:attr/buttonBarButtonStyle"
android:text="@string/auth_button_unlock" />
<ProgressBar
android:id="@+id/unlockProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyle"
android:layout_centerVertical="true"
android:layout_alignEnd="@id/buttonUnlock"
android:visibility="gone"/>
</RelativeLayout>
</LinearLayout>

View file

@ -2,222 +2,78 @@
<androidx.core.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"
app:layout_behavior="@string/appbar_scrolling_view_behavior" >
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/activity_margin"
android:paddingEnd="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin"
android:textColor="@color/colorAccent"
android:textStyle="bold"
android:text="@string/backup_category_plain" />
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/activity_margin"
android:layout_marginTop="@dimen/activity_margin_large"
android:gravity="center_horizontal">
<LinearLayout
android:id="@+id/button_backup_plain"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/activity_margin"
android:background="?android:attr/selectableItemBackground" >
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItem"
android:text="@string/backup_title_export_plain" />
android:textColor="@color/colorAccent"
android:textStyle="bold"
android:textAppearance="@style/TextAppearance.AppCompat.Widget.TextView.SpinnerItem"
android:text="@string/backup_label_type"/>
<TextView
<Spinner
android:id="@+id/backupType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/backup_desc_export_plain"/>
</LinearLayout>
<LinearLayout
android:id="@+id/button_restore_plain"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/activity_margin"
android:background="?android:attr/selectableItemBackground" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItem"
android:text="@string/backup_title_import_plain" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/backup_desc_import_plain"/>
android:entries="@array/backup_list_type_names" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:id="@+id/backupLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="@dimen/activity_margin"
android:paddingEnd="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin"
android:textColor="@color/colorAccent"
android:textStyle="bold"
android:text="@string/backup_category_crypt" />
android:layout_marginTop="@dimen/activity_margin"
android:padding="@dimen/activity_margin"
android:text="@string/backup_label_warning_plain"/>
<TextView
android:id="@+id/msg_crypt_setup"
android:layout_width="match_parent"
android:id="@+id/backupErrorLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/activity_margin"
android:visibility="gone"
android:text="@string/backup_desc_crypt_setup"/>
android:textColor="?attr/colorExpiring"
android:text="@string/backup_desc_openpgp_provider"
android:visibility="gone"/>
<LinearLayout
android:id="@+id/button_backup_crypt"
android:orientation="vertical"
android:layout_width="match_parent"
<Button
android:id="@+id/buttonBackup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/activity_margin"
android:background="?android:attr/selectableItemBackground" >
android:text="@string/backup_button_backup"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItem"
android:text="@string/backup_title_export_crypt" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/backup_desc_export_crypt"/>
</LinearLayout>
<LinearLayout
android:id="@+id/button_restore_crypt"
android:orientation="vertical"
android:layout_width="match_parent"
<ProgressBar
android:id="@+id/progressBarBackup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/activity_margin"
android:background="?android:attr/selectableItemBackground" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItem"
android:text="@string/backup_title_import_crypt" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/backup_desc_import_crypt"/>
</LinearLayout>
<LinearLayout
android:id="@+id/button_restore_crypt_old"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/activity_margin"
android:background="?android:attr/selectableItemBackground" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItem"
android:text="@string/backup_title_import_crypt_old" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/backup_desc_import_crypt_old"/>
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="@dimen/activity_margin"
android:paddingEnd="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin"
android:textColor="@color/colorAccent"
android:textStyle="bold"
android:text="@string/backup_category_openpgp" />
<TextView
android:id="@+id/msg_openpgp_setup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/activity_margin"
android:visibility="gone"
android:text="@string/backup_desc_openpgp_provider"/>
<LinearLayout
android:id="@+id/button_backup_openpgp"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/activity_margin"
android:background="?android:attr/selectableItemBackground" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItem"
android:text="@string/backup_title_export_openpgp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/backup_desc_export_openpgp"/>
</LinearLayout>
<LinearLayout
android:id="@+id/button_restore_openpgp"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/activity_margin"
android:background="?android:attr/selectableItemBackground" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItem"
android:text="@string/backup_title_import_openpgp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/backup_desc_import_openpgp"/>
</LinearLayout>
android:layout_marginTop="@dimen/activity_margin"
android:indeterminate="true"
style="?android:attr/progressBarStyle"
android:visibility="gone"/>
<RelativeLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_margin"
android:layout_marginTop="@dimen/activity_margin_large"
android:layout_marginBottom="@dimen/activity_margin"
android:padding="@dimen/activity_margin"
android:background="?android:attr/selectableItemBackground" >
@ -242,7 +98,7 @@
</LinearLayout>
<Switch
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/backup_replace"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -252,5 +108,30 @@
</RelativeLayout>
<CheckBox
android:id="@+id/restoreOldCrypt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/activity_margin"
android:layout_marginBottom="@dimen/activity_margin"
android:text="@string/backup_check_restore_old"
android:visibility="gone" />
<Button
android:id="@+id/buttonRestore"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/backup_button_restore" />
<ProgressBar
android:id="@+id/progressBarRestore"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_margin"
android:indeterminate="true"
style="?android:attr/progressBarStyle"
android:visibility="gone"/>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View file

@ -8,38 +8,37 @@
<string name="about_label_changelog">سِجل التغييرات</string>
<string name="about_label_license">الرخصة</string>
<string name="about_label_MIT">رخصة MIT</string>
<string name="about_label_source">مصدر الرمز</string>
<string name="about_label_source">الكود المصدري</string>
<string name="about_label_version">الإصدار</string>
<string name="about_label_faq">الأسئلة الشائعة</string>
<string name="about_label_faq_long">الأسئلة المتداولة</string>
<string name="about_label_faq_long">الأسئلة الشائعة</string>
<!-- Authors -->
<string name="about_title_authors">المؤلفون</string>
<string name="about_label_main_developer">المطور الرئيسي</string>
<string name="about_label_developer">المطور</string>
<string name="about_label_original_author">مؤلف التطبيق الأصلي</string>
<string name="about_label_original_app">التطبيق الأصلي</string>
<string name="about_label_website">الموقع الإلكتروني</string>
<string name="about_label_website">موقع الويب</string>
<string name="about_label_donate">التبرع</string>
<string name="about_label_contributors">المساهمون</string>
<string name="about_label_translators">المترجمون</string>
<!-- Thumbnail disclaimer -->
<string name="about_title_thumbnail_disclaimer">تحذير على الصور المصغرة</string>
<string name="about_thumbnails_disclaimer_no1">&lt;b/&gt;١.&lt;b&gt; جميع الصور المصغرة علامات تجارية
تعود لمالكيها الشرعيين.</string>
<string name="about_thumbnails_disclaimer_no2">&lt;b/&gt;٢.&lt;b&gt; إستخدام هذه العلامات التجارية لا تشير
إلى تسويق andOTP لمالكين هذه العلامات التجارية.</string>
<string name="about_thumbnails_disclaimer_no1"><b>١.</b> جميع الصور المصغرة علامات تجارية تعود لمالكيها الشرعيين.</string>
<string name="about_thumbnails_disclaimer_no2"><b>٢.</b> إستخدام هذه العلامات التجارية لا تشير
إلى تسويق andOTP لمالكين هذه العلامات التجارية، أو العكس.</string>
<string name="about_thumbnails_disclaimer_no3">&lt;b/&gt;٣.&lt;b&gt; الصور المصغرة يجب أن تستعمل فقط
لتمثيل الشركة أو المنتج التي تشير إليها.</string>
<string name="about_thumbnails_disclaimer_no4">&lt;b/&gt;٤. الرجاء عدم استخدام الصور المصغرة لأي سبب عدا تمثيل علامات تجارية معينة.&lt;b&gt;</string>
<string name="about_thumbnails_disclaimer_no4"><b>٤. الرجاء عدم استخدام الصور المصغرة لأي سبب عدا تمثيل علامات تجارية معينة.</b></string>
<!-- Support -->
<string name="about_title_support">للمساهمة في تطوير التطبيق</string>
<string name="about_desc_support">Find out how you can support the development of andOTP</string>
<string name="about_desc_support">اعرف كيف يمكنك دعم تطوير andOTP</string>
<string name="about_title_special_features">الميزات الخاصة</string>
<string name="about_dialog_special_features">هل أنت متأكد إنك تريد تمكين الميزات الخاصة؟
معظمهم خوارزميات OTP غير معتمدة طبقوا على طلب خاص.
إنهم ليس &lt;b/&gt;معتمدون رسميا&lt;b&gt; ويمكن أن يأتوا مع &lt;b/&gt;قيود معينة&lt;b&gt;.
الرجاء قراءة وفهم صفحة \"Special features\" في GitHub لمزيد من المعلومات.</string>
<string name="about_toast_special_features">تم تمكين الميزات الخاصة</string>
<string name="about_toast_special_features_enabled">تم تمكين الميزات الخاصة من قبل</string>
<string name="about_dialog_special_features">هل أنت متأكد إنك تريد تفعيل الميزات الخاصة؟
معظمهم خوارزميات OTP غير معتمدة طُبّقوا بناء على طلب خاص.
إنهم <b>ليسوا معتمدين رسميا</b> ويمكن أن يأتوا مع <b>قيود معينة</b>.
الرجاء قراءة (وفهم) صفحة \"Special features\" في GitHub لمزيد من المعلومات قبل استخدامهم.</string>
<string name="about_toast_special_features">تم تفعيل الميزات الخاصة</string>
<string name="about_toast_special_features_enabled">تم تفعيل الميزات الخاصة من قبل</string>
<string name="about_toast_copied_to_clipboard">تم نسخ رابط التبرع إلى الحافظة</string>
</resources>

View file

@ -5,14 +5,14 @@
<string name="auth_hint_password">كلمة المرور</string>
<string name="auth_hint_pin">‏رمز PIN</string>
<!-- Messages -->
<string name="auth_msg_authenticate">الرجاء قم بالمصادقة قبل تشغيل التطبيق!</string>
<string name="auth_msg_confirm_encryption">يرجى تأكيد المصادقة لخلق
مفتاح التشفير الجديد!</string>
<string name="auth_msg_authenticate">الرجاء المصادقة لبدء andOTP!</string>
<string name="auth_msg_confirm_encryption">يرجى تأكيد المصادقة لتوليد
مفتاح تشفيرك!</string>
<!-- Buttons -->
<string name="auth_button_unlock">فتح</string>
<string name="auth_button_unlock">فتح القفل</string>
<!-- Toast messages -->
<string name="auth_toast_password_missing">الرجاء تعيين كلمة مرور في <b>الإعدادات</b>!</string>
<string name="auth_toast_pin_missing">الرجاء تعيين PIN في <b>الإعدادات</b>!</string>
<string name="auth_toast_password_again">كلمة المرور خاطئة، حاول مُجددًا من فضلك!</string>
<string name="auth_toast_pin_again">رمز الـ PIN خاطئ، الرجاء إعادة المحاولة من مُجددًا!</string>
<string name="auth_toast_password_again">كلمة المرور خاطئة، الرجاء المحاولة مُجددًا!</string>
<string name="auth_toast_pin_again">رمز PIN خاطئ، الرجاء المحاولة مُجددًا!</string>
</resources>

View file

@ -1,63 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="backup_activity_title">النُّسَخ الإحتياطية</string>
<string name="backup_category_plain">النُّسَخ الإحتياطية نص مجرّد</string>
<string name="backup_category_crypt">النُّسَخ الإحتياطية المشفرة</string>
<string name="backup_category_openpgp">النُّسَخ الإحتياطية بأوبن بي جي بي</string>
<string name="backup_title_export_plain">النسخ الإحتياطي (نص مجرّد)</string>
<string name="backup_title_export_crypt">النسخ الاحتياطي (مشفر)</string>
<string name="backup_title_export_openpgp">النسخ الاحتياطي (أوبن بي جي بي)</string>
<string name="backup_title_import_plain">إسترجاع (نص مجرّد)</string>
<string name="backup_title_import_crypt">إسترجاع (مشفّر)</string>
<string name="backup_title_import_crypt_old">Restore (encrypted, old encryption)</string>
<string name="backup_category_plain">النُسَخ الاحتياطية نص مجرّد</string>
<string name="backup_category_crypt">النُسَخ الاحتياطية المشفّرة</string>
<string name="backup_category_openpgp">النُسَخ الاحتياطية بأوبن بي جي بي</string>
<string name="backup_title_export_plain">نسخ احتياطي (نص مجرّد)</string>
<string name="backup_title_export_crypt">نسخ احتياطي (مشفّر)</string>
<string name="backup_title_export_openpgp">نسخ احتياطي (أوبن بي جي بي)</string>
<string name="backup_title_import_plain">استعادة (نص مجرّد)</string>
<string name="backup_title_import_crypt">استعادة (مشفّر)</string>
<string name="backup_title_import_crypt_old">استعادة (مشفّر، التشفير القديم)</string>
<string name="backup_title_import_openpgp">إسترجاع (أوبن بي جي بي)</string>
<string name="backup_title_replace">إستبدال البيانات الموجودة</string>
<string name="backup_desc_export_plain">أنسخ إحتياطيا لكافة الحسابات في ملف JSON نص مُجرَّد </string>
<string name="backup_desc_export_crypt">أنسخ إحتياطيا كافة الحسابات على شكل نص مُجرَّد مُؤمَّن بكلمة سرية في ملف JSON</string>
<string name="backup_desc_export_openpgp">أنسخ إحتياطيا لكافة الحسابات في ملف JSON مشفّر بواسطة أوبن بي جي بي</string>
<string name="backup_desc_import_plain">استعادة حسابات من ملف JSON نص مجرّد</string>
<string name="backup_desc_import_crypt">استعادة حسابات من ملف JSON محمي بكلمة مرور</string>
<string name="backup_desc_import_crypt_old">Restore accounts from a password-protected JSON file
created with an <b>andOTP version lower than 0.6.3</b></string>
<string name="backup_desc_import_openpgp">استعادة حسابات من ملف JSON (مشفر بتقنية اوبن بي جي بي)</string>
<string name="backup_desc_crypt_setup">فشل في تحميل كلمة مرور النسخ الاحتياطي من الإعدادات، هذا أما يعني إنه لم يتم تعيين أية كلمة مرور أو حدث خطأ ما. سيطلب منك إدخال كلمة المرور يدوياً عند إنشاء أو استيراد نسخة احتياطية.
</string>
<string name="backup_desc_openpgp_provider">تحتاج الى تثبيت مزود اوبن بي جي بي وتمكينها في الإعدادات لتمكين هذه الخاصية. </string>
<string name="backup_desc_openpgp_keyid">تحتاج إلى تحديد مفتاح أوبن بي جي بي في الإعدادات قبل أن يمكنك إنشاء نسخ احتياطية مشفرة.
</string>
<string name="backup_desc_replace">عند المكن, جميع الإدخالات القديمة سوف تستبدل بالنسخة التي تم إستيرادها. عند التعطيل, الإدخلات القديمة سوف تدمج مع مكونات النسخة.</string>
<string name="backup_title_replace">استبدال العناصر الموجودة</string>
<string name="backup_desc_export_plain">انسخ احتياطيًا كافة الحسابات في ملف JSON نص مُجرَّد</string>
<string name="backup_desc_export_crypt">انسخ احتياطيًا كافة الحسابات في ملف JSON محمي بكلمة مرور</string>
<string name="backup_desc_export_openpgp">انسخ احتياطيًا كافة الحسابات في ملف JSON مشفّر بواسطة أوبن بي جي بي</string>
<string name="backup_desc_import_plain">استعادة الحسابات من ملف JSON نص مجرّد</string>
<string name="backup_desc_import_crypt">استعادة الحسابات من ملف JSON محمي بكلمة مرور</string>
<string name="backup_desc_import_crypt_old">استعادة الحسابات من ملف JSON محمي بكلمة مرور
الذي تم إنشاؤه بواسطة إصدار andOTP <b>أقل من 0.6.3</b></string>
<string name="backup_desc_import_openpgp">استعادة الحسابات من ملف JSON مشفر بأوبن بي جي بي</string>
<string name="backup_desc_crypt_setup">فشل في تحميل كلمة مرور النسخ الاحتياطي من <b>الإعدادات</b>،
هذا يعني إما أنه لم يتم تعيين كلمة مرور أو حدث خطأ ما. سيطلب منك إدخال
كلمة المرور يدويًا عند إنشاء أو استيراد نسخة احتياطية.</string>
<string name="backup_desc_openpgp_provider">تحتاج إلى تثبيت مزود أوبن بي جي بي وتفعيله
في <b>الإعدادات</b> لاستعمال هذه الخاصية.</string>
<string name="backup_desc_openpgp_keyid">تحتاج إلى تحديد مفتاح أوبن بي جي بي في <b>الإعدادات</b>
قبل أن يمكنك إنشاء نسخ احتياطية مشفرة.</string>
<string name="backup_desc_replace">عند التفعيل, سوف تستبدل النسخة التي تم استيرادها بجميع الإدخالات القديمة. عند التعطيل, الإدخالات القديمة ستدمج مع محتويات النسخة.</string>
<!-- Dialogs -->
<string name="backup_dialog_title_security_warning">تحذير الأمان</string>
<string name="backup_dialog_msg_export_warning">هل حقا تريد تصدير قاعدة البيانات كملف JSON نص مجرّد؟ الملف يحتوي جميع المفاتيح السرية. الرجاء الإحتفاظ عليها! </string>
<string name="backup_dialog_msg_export_warning">هل حقا تريد تصدير قاعدة البيانات كملف JSON نص مجرّد؟ الملف يحتوي جميع المفاتيح السرية. الرجاء <b>الحفاظ عليها آمنة</b>! </string>
<string name="backup_receiver_title_backup_failed">فشل النسخ الاحتياطي</string>
<string name="backup_receiver_title_backup_success">نجحت عملية النسخ الإحتياطي</string>
<string name="backup_receiver_plain_disabled">التنسيخ المشفر غير مسموح حاليا. الرجاء تمكينهم من الإعدادات</string>
<string name="backup_receiver_encrypted_disabled">التنسيخ المشفر غير مسموح حاليا. الرجاء تمكينها في الإعدادات</string>
<string name="backup_receiver_read_permission_failed">الإذن للقراءة لم يمنح. الرجاء تمكينها قبل محاولة النسخ</string>
<string name="backup_receiver_write_permission_failed">الإذن للكتابة لم يمنح. الرجاء تمكينها قبل محاولة النسخ</string>
<string name="backup_receiver_custom_encryption_failed">التشفير عبر كلمة المرور / PIN غير مدعومة مع البث الإحتياطي</string>
<string name="backup_new_format_dialog_title">طريقة تشفير جديدة</string>
<string name="backup_new_format_dialog_msg">Since version 0.6.3 of andOTP, a <b>new and improved
encryption method</b> is used for password-protected backups. The old backups can still be
imported, but it is <b>highly recommended to create new backups with the improved
encryption</b>.\n\nThis message will not be shown again.</string>
<string name="backup_receiver_title_backup_success">نجحت عملية النسخ الاحتياطي</string>
<string name="backup_receiver_plain_disabled">النسخ الاحتياطية نص-مجرّد غير مسموح بها حاليًا. الرجاء الذهاب إلى الإعدادات لتفعيلها</string>
<string name="backup_receiver_encrypted_disabled">النسخ الاحتياطية المشفرة غير مسموح بها حاليًا. الرجاء الذهاب إلى الإعدادات لتفعيلها</string>
<string name="backup_receiver_read_permission_failed">إذن القراءة لم يمنح. الرجاء منحه قبل محاولة النسخ الاحتياطي</string>
<string name="backup_receiver_write_permission_failed">إذن الكتابة لم يمنح. الرجاء منحه قبل محاولة النسخ الاحتياطي</string>
<string name="backup_receiver_custom_encryption_failed">التشفير القائم على كلمة المرور/PIN غير مدعوم
مع النسخ الإحتياطي المبث</string>
<!-- Notification channels -->
<string name="notification_channel_name_backup_failed">فشل النسخ التلقائي</string>
<string name="notification_channel_name_backup_success">نجح النسخ التلقائي</string>
<string name="notification_channel_desc_backup_failed">هذه الإعلامات تظهر عندما يفشل النسخ التلقائي لسبب ما</string>
<string name="notification_channel_desc_backup_success">هذه الإعلامات تظهر عندما ينجح النسخ التلقائي</string>
<string name="notification_channel_name_backup_failed">فشل النسخ الاحتياطي التلقائي</string>
<string name="notification_channel_name_backup_success">تم النسخ الاحتياطي التلقائي بنجاح</string>
<string name="notification_channel_desc_backup_failed">هذه الإشعارات تظهر عندما يفشل
النسخ الاحتياطي التلقائي لسبب ما</string>
<string name="notification_channel_desc_backup_success">هذه الإشعارات تظهر عندما ينجح النسخ الاحتياطي التلقائي</string>
<!-- Toast messages -->
<string name="backup_toast_mkdir_failed">فشلت عملية إنشاء دليل للنسخ الإحتياطي</string>
<string name="backup_toast_no_location">الرجاء تعيين موقع النسخ الاحتياطي الافتراضي في الإعدادات!</string>
<string name="backup_toast_location_access_failed">فشل الوصول إلى موقع النسخ الاحتياطي!</string>
<string name="backup_toast_file_creation_failed">فشل في إنشاء ملف النسخة الاحتياطية!</string>
<string name="backup_toast_export_success">نجحت عملية التصدير إلى ذاكرة التخزين الخارجية</string>
<string name="backup_toast_export_failed">فشلت عملية التصدير إلى ذاكرة التخزين الخارجية</string>
<string name="backup_toast_import_success">نجحت عملية الإستعادة مِن ذاكرة التخزين الخارجية</string>
<string name="backup_toast_import_success">نجحت عملية الاستيراد من ذاكرة التخزين الخارجية</string>
<string name="backup_toast_import_save_failed">فشلت عملية الإحتفاظ بالبيانات المسترجَعة</string>
<string name="backup_toast_import_decryption_failed">فشلت عملية فك تشفير النسخة الإحتياطية</string>
<string name="backup_toast_import_no_entries">لم يتم العثور على أي عنصر في البيانات التي تم إستعادتها</string>
<string name="backup_toast_storage_not_accessible">لا يمكن الوصول إلى الذاكرة الخارجية حاليا</string>
<string name="backup_toast_storage_permissions">لا يوجد إذن للوصول إلى ذاكرة التخزين</string>
<string name="backup_toast_storage_not_accessible">لا يمكن الوصول إلى ذاكرة التخزين الخارجية حاليًا</string>
<string name="backup_toast_openpgp_error">خلل في أوبن بي جي بي : %s</string>
<string name="backup_toast_openpgp_not_verified">لم يتم العثور على أي توقيع مُصادَق عليه</string>
<string name="backup_toast_crypt_password_not_set">لم يتم إدخال أية كلمة سرية، الرجاء التحقق من ذلك في الإعدادات</string>
<string name="backup_toast_file_selection_failed">Can\'t open file selection dialog!</string>
<string name="backup_toast_crypt_password_not_set">لم يتم تعيين كلمة المرور، الرجاء التحقق من <b>الإعدادات</b></string>
<string name="backup_toast_file_selection_failed">لا يمكن فتح مربع حوار اختيار الملف!</string>
</resources>

View file

@ -1,24 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="intro_slide1_title">دعنا نبدأ</string>
<string name="intro_slide1_desc">مرحبا بكم. التالي سوف يساعدكم في الإعداد الأولي.
يرجى الإنتباه والقراءة جيدا وإلا من الممكن خسر معلومات!
لا داع للقلق, يمكنك تغيير أي من الخيارات في الإعدادات لاحقا.</string>
<string name="intro_slide2_desc">لضمان أمن حساباتك, هذا التطبيق يحفظهم فقط في ملفات مشفرة. هنا يمكنك إختيار طريقة التشفير المتبعة.</string>
<string name="intro_slide2_desc_keystore">مخزنة المفاتيح نظام عضوي لأندرويد من أجل
الحفظ الآمن على مفاتيح التشفير. هذه الطريقة سوف
تحفظ المفاتيح خارجة الملفات المعلوماتية ويمكن تنسيخ إحتياطي عبر التشفير عبر الأجهزة (إذا جهازك يدعمها)
لكن لأن المفاتيح ليست محفوظة في معلومات التطبيق, هذه الطريقة تمنع حلول النسخ الخارجي (مثل تطبيق Titanium).
إذا إخترت هذه الطريقة, ستعتمد على وسائل النسخ المتاحة في التطبيق. إنتبه, مخزنة المفاتيح تسبب مشاكل عديدة.
الرجاء إستعمالها فقط في حالة اللزوم. إذا لا تمانع إدخال كلمة المرور / كل مرة تدخل الى التطبيق, من المحبذ إستعمال
التشفير عبر كلمة المرور.
</string>
<string name="intro_slide2_desc_password">هذا الأسلوب سيتم تشفير البيانات الخاصة بك مع مفتاح
متولدة من كلمة المرور أو رقم التعريف الشخصي (PIN). الميزة الرئيسية هنا هو أن هذا سوف يعمل مع حلول النسخ الاحتياطي الخارجي
(مثل تطبيق \"Titanium\") وهو أقل عرضة للفشل من مخزن المفاتيح.
مع ذلك، سيوجب عليك إدخال بيانات الاعتماد الخاصة بك كل مرة تشغل <b>التطبيق</b>.</string>
<string name="intro_slide3_desc_keystore">هنا من الممكن إقامة مطابقة لقفل التطبيق. لأنك حددت مخزن المفاتيح لأندرويد
كنوع التشفير, التالي إختياري.</string>
<string name="intro_slide1_desc">مرحبا بكم في <b>andOTP</b>. المساعد التالي سوف يساعدكم في الإعداد الأوّلي.
يرجى الانتباه والقراءة جيدًا لتجنب خسارة البيانات!
\n\nلا داعٍ للقلق، يمكنك تغيير أي من الخيارات لاحقًا في <b>الإعدادات</b>.</string>
<string name="intro_slide2_desc">لضمان أمان حساباتك، يستعمل <b>andOTP</b> التشفير في تخزين بيانات الحساب. يمكنك هنا اختيار أية طريقة تشفير ستستعمل.</string>
<string name="intro_slide2_desc_keystore">KeyStore هو مكون في نظام أندرويد يستعمل في حفظ مفاتيح التشفير بشكل آمن. ميزة استعمال KeyStore هي أن المفاتيح تحفظ بشكل منفصل عن بيانات <b>andOTP</b>، ويمكن دعمه بالتشفير المعتمد-على-العتاد (إن كان جهازك يدعمه).
مع ذلك، لأن المفاتيح لن تحفظ ضمن بيانات <b>andOTP</b>، <b>هذه الطريقة تمنع حلول النسخ الاحتياطي الخارجي (مثل تطبيق Titanium Backup) من العمل</b>.
إذا تم اختيار هذه الطريقة، سيتوجب الاعتماد على وسائل النسخ الاحتياطي المتاحة في<b>andOTP</b>.
\n\n<b>تحذير</b>، KeyStore يسبب مشاكل عديدة، يرجى استعماله فقط في حالة اللزوم.
إذا لا تمانع إدخال كلمة المرور/PIN كل مرة تدخل <b>andOTP</b>، <b>يُنصح بشدّة استعمال التشفير عبر-كلمة-المرور بدلًا من ذلك</b>.</string>
<string name="intro_slide2_desc_password">تلك الطريقة ستشفّر بياناتك بمفتاح تم توليده من كلمة مرور أو PIN. الميزة الرئيسية لاستخدام هذه الطريقة هي أن حلول النسخ الاحتياطي الخارجية (مثل تطبيق Titanium Backup) ستعمل كما يجب، وهي أقل عرضة للفشل من KeyStore. ولكن سيوجب عليك إدخال بيانات الإعتماد الخاصة بك كل مرة تفتح <b>andOTP</b>.</string>
<string name="intro_slide3_desc_keystore">هنا من الممكن تعيين طريقة مصادقة لقَفل <b>andOTP</b>. لأنك اخترت <b>أندرويد KeyStore</b>
كطريقة التشفير, هذه الخطوة اختيارية.</string>
<string name="intro_slide3_desc_password">هنا من الممكن إقامة عملية المطابقة لإقفال التطبيق.
لأنك حددت كلمة المرور / PIN كنوع التشفير, عليك تحديد
إما كلمة مرور أو PIN للمتابعة. </string>

View file

@ -41,10 +41,17 @@
<string name="menu_sort_label">تسمية</string>
<string name="menu_sort_last_used">آخر استخدام</string>
<string name="menu_sort_most_used">الأكثر استخداما</string>
<string name="menu_popup_edit">Edit</string>
<string name="menu_popup_edit">تعديل</string>
<string name="menu_popup_change_image">تغيير الصورة</string>
<string name="menu_popup_remove">حذف</string>
<string name="menu_popup_show_qr_code">Show QR Code</string>
<string name="menu_popup_show_qr_code">إظهار رمز QR</string>
<!-- Buttons -->
<string name="button_card_options">More options</string>
<string name="button_card_options_format">More options for %1$s</string>
<string name="button_card_copy">Copy token</string>
<string name="button_card_copy_format">Copy %1$s token</string>
<string name="button_add">Add new account</string>
<string name="button_close_menu">Close menu</string>
<!-- Toast messages -->
<string name="toast_auth_failed">أخفقت المصادقة، الرجاء إعادة المحاولة !</string>
<string name="toast_auth_failed_fatal">أخفقت عملية المصادقة، جارٍ إغلاق التطبيق!</string>
@ -52,44 +59,38 @@
<string name="toast_entry_exists">هذا العنصر موجود من قبل</string>
<string name="toast_invalid_qr_code">رمز الكيو آر غير صالح</string>
<string name="toast_encryption_key_empty">تعذرت عملية تحميل مفتاح التشفير</string>
<string name="toast_intent_creation_failed">Invalid intent-provided code</string>
<string name="toast_intent_creation_succeeded">Intent-provided code added</string>
<string name="toast_intent_creation_failed">الرمز المقدم غير صالح</string>
<string name="toast_intent_creation_succeeded">تم إضافة الرمز المقدم</string>
<string name="toast_file_load_error">لا يمكن فتح الملف</string>
<string name="toast_qr_error">تعذر العثور على/تأكيد رمز كيو آر</string>
<string name="toast_qr_checksum_exception">Checksum verification failed while decoding QR code</string>
<string name="toast_qr_checksum_exception">فشل تدقيق المجموع أثناء فك ترميز رمز QR</string>
<string name="toast_qr_format_error">نسق خاطئ في رمز الكيو آر</string>
<string name="toast_qr_unsuported">QR Code not supported</string>
<string name="toast_qr_failed_to_generate">Failed to generate QR Code</string>
<string name="toast_qr_unsuported">رمز QR غير مدعوم</string>
<string name="toast_qr_failed_to_generate">فشل في إنشاء رمز QR</string>
<!-- Errors -->
<string name="error_invalid_secret">Invalid secret</string>
<string name="error_invalid_secret">سر غير صالح</string>
<!-- Dialogs -->
<string name="dialog_title_auth">مصادقة</string>
<string name="dialog_title_manual_entry">أدخل التفاصيل</string>
<string name="dialog_title_remove">حذف</string>
<string name="dialog_title_rename">تعديل التسمية</string>
<string name="dialog_title_counter">عداد</string>
<string name="dialog_title_used_tokens">Tokens usage</string>
<string name="dialog_title_used_tokens">استخدام الرموز</string>
<string name="dialog_title_keystore_error">خطأ في مخزن المفاتيح</string>
<string name="dialog_title_qr_code">QR Code</string>
<string name="dialog_title_android21_depreaction">Deprecation notice</string>
<string name="dialog_title_qr_code">رمز QR</string>
<string name="dialog_title_enter_password">أدخل كلمة المرور</string>
<string name="dialog_label_enter_password">أدخل كلمة المرور</string>
<string name="dialog_label_confirm_password">تأكيد كلمة المرور</string>
<string name="dialog_msg_auth">الرجاء إدخال بيانات الإعتماد الخاصة بجهازك لتشغيل التطبيق.</string>
<string name="dialog_msg_confirm_delete">هل أنت متأكد من أنك تريد إزالة الحساب ؟</string>
<string name="dialog_msg_used_tokens">andOTP will track when you use your tokens (using the \"Tap
to reveal\" feature or copying to clipboard) to be able to sort them by \"Most used\" or
\"Last used\".\n\nThis message will not be shown again.</string>
<string name="dialog_msg_used_tokens">سوف يتتبع andOTP استخدام الرموز المميزة الخاصة بك (باستخدام خاصية \"اضغط
للكشف\" أو نسخ إلى الحافظة) لتتمكن من فرزها بواسطة \"الأكثر استخداما\" أو
\"آخر مستخدم\".\n\nلن تظهر هذه الرسالة مرة أخرى.</string>
<string name="dialog_msg_keystore_error">فشل تحميل مفتاح التشفير من مخزن المفاتيح.
الإدخالات المضافة سوف تحذف. لمزاولة التطبيق,
أبدل تشفيرة قاعدة البيانات الى كلمة مرور أو PIN في الإعدادات.</string>
<string name="dialog_msg_android21_deprecation">This will be the last version of andOTP to
support Android versions below 5.1 (Lollipop). The increased effort required to maintain a
separate storage implementation just for those older versions as well as their low market
shares make a continued support infeasible for our small team.\n\nThis message will not be
shown again.</string>
<!-- Shortcuts -->
<string name="shortcut_name_scan_qr">مسح رمز الكيو آر</string>
<string name="shortcut_name_scan_qr">مسح رمز QR</string>
<string name="shortcut_name_import_qr">استيراد رمز كيو آر</string>
<string name="shortcut_name_enter_details">أدخل التفاصيل</string>
</resources>

View file

@ -14,17 +14,18 @@
<string name="settings_title_encryption">تشفير قاعدة البيانات</string>
<string name="settings_title_panic">زر الذعر</string>
<string name="settings_title_relock_screen_off">الإقفال عند إغلاق الجهاز</string>
<string name="settings_title_relock_background">Re-lock when going into the background</string>
<string name="settings_title_auth_inactivity">Re-lock on inactivity</string>
<string name="settings_title_auth_inactivity_delay">Delay for inactivity re-lock</string>
<string name="settings_title_block_accessibility">Block accessibility services</string>
<string name="settings_title_relock_background">إعادة قفل عند الذهاب إلى الخلفية</string>
<string name="settings_title_auth_inactivity">إعادة قفل عند عدم النشاط</string>
<string name="settings_title_auth_inactivity_delay">تأخير إعادة قفل عدم النشاط</string>
<string name="settings_title_block_accessibility">حظر إمكانية الوصول</string>
<string name="settings_title_block_autofill">حظر التعبئة التلقائية</string>
<string name="settings_title_lang">اللغة</string>
<string name="settings_title_theme">المظهر</string>
<string name="settings_title_card_layout">تصميم البطاقة</string>
<string name="settings_title_label_size">حجم خط إسم العلامات</string>
<string name="settings_title_label_scroll">تسمية التمرير</string>
<string name="settings_title_tap_single">Single-tap</string>
<string name="settings_title_tap_double">Double-tap</string>
<string name="settings_title_tap_single">نقرة</string>
<string name="settings_title_tap_double">نقر مزدوج</string>
<string name="settings_title_thumbnail_size_ask">حجم الصور المصغرة</string>
<string name="settings_title_split_group_size">تقسيم تذكرة أمان النفاذ بمسافة بيضاء</string>
<string name="settings_title_tag_functionality">سلوك إختيار العلامة</string>
@ -35,7 +36,7 @@
<string name="settings_title_show_individual_timeouts">Show individual timeouts</string>
<string name="settings_title_backup_append_date">إلحاق تاريخ اليوم باسم الملف</string>
<string name="settings_title_backup_ask">إسأل عن إسم الملف</string>
<string name="settings_title_backup_directory">مجلد النسخ الإحتياطي</string>
<string name="settings_title_backup_location">Default backup location</string>
<string name="settings_title_backup_password">كلمة المرور للنسخة الإحتياطية</string>
<string name="settings_title_auto_backup_password_enc">نسخ احتياطي تلقائي للإدخالات الجديدة</string>
<string name="settings_title_backup_broadcasts">النسخ الاحتياطي المبث</string>
@ -60,6 +61,10 @@
require reauthentication</string>
<string name="settings_desc_block_accessibility">Hide sensitive fields from the accessibility
services. <b>DO NOT enable this if you rely on the accessibility services!</b></string>
<string name="settings_desc_block_autofill">Block autofill services from accessing password
fields inside the app</string>
<string name="settings_desc_block_autofill_android">This feature requires an Android version
above 8.0 (Oreo)</string>
<string name="settings_desc_label_scroll">قم بتمرير علامات متجاورة بدلاً من اقتطاعها</string>
<string name="settings_desc_minimize_on_copy">App will be minimized when you copy the OTP to clipboard</string>
<string name="settings_desc_search_includes">Specify which values should be included when searching</string>
@ -69,9 +74,13 @@
This can slow down the app, only enable if really necessary.</string>
<string name="settings_desc_backup_append_date">إلحاق بالتاريخ الحالي والوقت إلى اسم الملف النسخ الاحتياطي المقترح</string>
<string name="settings_desc_backup_ask">اسأل عن اسم الملف كل مرة يتم إنشاء نسخة احتياطية أو نسخة مستعادة</string>
<string name="settings_desc_backup_location">Choose a default backup location</string>
<string name="settings_desc_backup_location_set">Backup location has been chosen</string>
<string name="settings_desc_backup_password">إختر كلمة المرور التي سوف تستخدم لتشفير النسخ الإحتياطية</string>
<string name="settings_desc_auto_backup_password_enc">Creates a new encrypted backup when new
entries are added, or edited, if settings conditions are met</string>
<string name="settings_desc_auto_backup_requirements">Set a default backup location and a
backup password to enable this option</string>
<string name="settings_desc_backup_broadcasts">حدد أنواع النسخ الإحتياطي التي يمكن تشغيلها بواسطة تطبيقات البث</string>
<string name="settings_desc_openpgp_key_encrypt">عنوان البريد الإلكتروني للمفتاح المستخدَم لتشفير النسخ الإحتياطية</string>
<string name="settings_desc_openpgp_verify">النسخ المشفرة تسترد فقط إذا وقعوا بمفتاح صالح</string>
@ -81,7 +90,7 @@
<string name="settings_desc_enable_android_backup_service">تمكين التطبيق أن يستعمل خدمة النسخ الموجودة في أندرويد لنسخ المفاتيح والتفضيلات</string>
<string name="settings_desc_clear_keystore">حذف مفتاح التعمية من مخزن المفاتيح</string>
<!-- Toasts -->
<string name="settings_toast_auth_device_not_secure">هذه الخاصة تتطلب ضبط القفل الآمن
<string name="settings_toast_auth_device_not_secure">هذه الخاصة تتطلب ضبط القفل الآمن
(الإعدادت -> شاشة القفل والحماية -> ضبط القفل الآمن) </string>
<string name="settings_toast_password_empty">كلمة مرور فارغة مرفوضة. إختر نوع المصادقة كفارغة لتعطيلها!</string>
<string name="settings_toast_encryption_changing">محاولة تغيير تشفيرة قاعدة البيانات،

View file

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="about_activity_title">Tocante a </string>
<string name="about_description">Autenticación en dos pasos de códigu llibre p\'Android</string>
<string name="about_tab_about">Tocante a</string>
<string name="about_tab_libraries">Biblioteques</string>
<!-- Misc -->
<string name="about_label_changelog">Rexistru de cambeos</string>
<string name="about_label_license">Llicencia</string>
<string name="about_label_MIT">Llicencia MIT</string>
<string name="about_label_source">Códigu fonte</string>
<string name="about_label_version">Versión</string>
<string name="about_label_faq">FAQ</string>
<string name="about_label_faq_long">Entrugues frecuentes</string>
<!-- Authors -->
<string name="about_title_authors">Autores</string>
<string name="about_label_main_developer">Densendolcador principal</string>
<string name="about_label_developer">Desendolcador</string>
<string name="about_label_original_author">Autor de l\'aplicación orixinal</string>
<string name="about_label_original_app">Aplicación orixinal</string>
<string name="about_label_website">Sitiu web</string>
<string name="about_label_donate">Donar</string>
<string name="about_label_contributors">Collaboradores</string>
<string name="about_label_translators">Traductores</string>
<!-- Thumbnail disclaimer -->
<string name="about_title_thumbnail_disclaimer">Avisu de renuncia de les miniatures</string>
<string name="about_thumbnails_disclaimer_no1"><b>1.</b> Toles miniatures son marques rexistraes
de los sos respeutivos miembros.</string>
<string name="about_thumbnails_disclaimer_no2"><b>2.</b> L\'usu d\'estes marques rexistraes nun
indiquen rellación col dueñu de los drechos d\'autor y andOTP o viceversa.</string>
<string name="about_thumbnails_disclaimer_no3"><b>3.</b> Les miniatures namás deberíen usase
pa representar la compaña o serviciu qu\'indiquen.</string>
<string name="about_thumbnails_disclaimer_no4"><b>4. Nun uses les miniatures pa otru
propósitu que nun seya\'l de representar una marca o serviciu en particular.</b></string>
<!-- Support -->
<string name="about_title_support">Sofita\'l desendolcu</string>
<string name="about_desc_support">Descubri cómo pues sofitar el desendolcu d\'andOTP</string>
<string name="about_title_special_features">Carauterístiques especiales</string>
<string name="about_dialog_special_features">¿De xuru que quies activar les carauterístiques
especiales? La mayoría d\'elles son algoritmos OTP que nun son estándares y
s\'implementaron so petición. Nun tán <b>sofitaes oficialmente</b> y puen venir con
<b>ciertes llendes</b>, llei (y entiendi) la páxina «Carauterístiques especiales» na wiki de
GitHub pa deprender más enantes d\'usales.</string>
<string name="about_toast_special_features">Activáronse les carauterístiques especial</string>
<string name="about_toast_special_features_enabled">Les carauterístiques especiales yá s\'activaron</string>
<string name="about_toast_copied_to_clipboard">L\'enllaz de donación copióse al cartafueyu</string>
</resources>

View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="auth_activity_title">Autenticación</string>
<!-- Hints -->
<string name="auth_hint_password">Contraseña</string>
<string name="auth_hint_pin">PIN</string>
<!-- Messages -->
<string name="auth_msg_authenticate">¡Autentícate p\'aniciar andOTP!</string>
<string name="auth_msg_confirm_encryption">¡Confirma l\'autenticación pa xenerar la clave
de cifráu!</string>
<!-- Buttons -->
<string name="auth_button_unlock">Desbloquiar</string>
<!-- Toast messages -->
<string name="auth_toast_password_missing">¡Afita una contraseña n\'<b>Axustes</b>!</string>
<string name="auth_toast_pin_missing">¡Afita un PIN n\'<b>Axustes</b>!</string>
<string name="auth_toast_password_again">Contraseña incorreuta, ¡volvi tentalo!</string>
<string name="auth_toast_pin_again">PIN incorreutu, ¡volvi tentalo!</string>
</resources>

View file

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="backup_activity_title">Copies de seguranza</string>
<string name="backup_category_plain">Copies de seguranza en testu planu</string>
<string name="backup_category_crypt">Copies de seguranza cifraes</string>
<string name="backup_category_openpgp">Copies de seguranza n\'OpenPGP</string>
<string name="backup_title_export_plain">Copia de seguranza (testu planu)</string>
<string name="backup_title_export_crypt">Copia de seguranza (cifrada)</string>
<string name="backup_title_export_openpgp">Copia de seguranza (OpenPGP)</string>
<string name="backup_title_import_plain">Restauración (testu planu)</string>
<string name="backup_title_import_crypt">Restauración (cifrada)</string>
<string name="backup_title_import_crypt_old">Restauración (cifrada, cifráu vieyu)</string>
<string name="backup_title_import_openpgp">Restauración (OpenPGP)</string>
<string name="backup_title_replace">Trocar les entraes esistentes</string>
<string name="backup_desc_export_plain">Fai una copia de seguranza de toles cuentes nun ficheru JSON</string>
<string name="backup_desc_export_crypt">Fai una copia de seguranza de toles cuentes nun ficheru JSON protexíu por contraseña</string>
<string name="backup_desc_export_openpgp">Fai una copia de seguranza de toles cuentes nun ficheru JSON cifráu con OpenPGP</string>
<string name="backup_desc_import_plain">Restaura les cuentes d\'un ficheru JSON</string>
<string name="backup_desc_import_crypt">Restaura les cuentes d\'un ficheru JSON protexíu por contraseña</string>
<string name="backup_desc_import_crypt_old">Restaura cuentes dende un ficheru JSON protexíu con contraseña
y creáu con una <b>versión d\'andOTP menor a la 0.6.3</b></string>
<string name="backup_desc_import_openpgp">Restaura les cuentes d\'un ficheru JSON cifráu con OpenPGP</string>
<string name="backup_desc_crypt_setup">Fallu al cargar la contraseña de la copia de seguranza dende <b>Axustes</b>,
esto significa que nun s\'afitó nenguna contraseña o asocedió daqué malo. Va pidísete qu\'introduzas
la contraseña a mano al crear o importar una copia de seguranza.
</string>
<string name="backup_desc_openpgp_provider">Precises instalar un fornidor OpenPGP y activalu
n\'<b>Axustes</b> pa usar esta carauterística.
</string>
<string name="backup_desc_openpgp_keyid">Precises esbillar una clave OpenPGP n\'<b>Axustes</b>
enantes que pueas crear copies de seguranza cifraes.
</string>
<string name="backup_desc_replace">Si s\'activa, toles entraes vieyes van trocase al importar
una copia de seguranza y namás si esta ta presente. Si se desactiva, les entraes vieyes y el
conteníu de les copies de seguranza mécense.</string>
<!-- Dialogs -->
<string name="backup_dialog_title_security_warning">Alvertencia de seguranza</string>
<string name="backup_dialog_msg_export_warning">¿De xuru que quies esportar la base de datos
como ficheru JSON en testu planu? Esti ficheru contién toles claves
secretes polo que <b>guárdalu con curiáu</b></string>
<string name="backup_receiver_title_backup_failed">Falló la copia de seguranza</string>
<string name="backup_receiver_title_backup_success">La copia de seguranza tuvo ésitu</string>
<string name="backup_receiver_plain_disabled">Anguaño nun se permiten les copies de
seguranza en testu planu, vete a Axustes
p\'activales</string>
<string name="backup_receiver_encrypted_disabled">Anguaño les copies de seguranza cifraes nun
tán permitíes, vete a axustes p\'activales</string>
<string name="backup_receiver_read_permission_failed">Nun se concedió\'l permisu de llectura,
concédelu enantes de crear esta
copia de seguranza</string>
<string name="backup_receiver_write_permission_failed">Nun se concedió\'l permisu d\'escritura,
concédelu enantes de crear una
copia de seguranza</string>
<string name="backup_receiver_custom_encryption_failed">El cifráu según contraseña/PIN nun
sofita cola copia de seguranza remota</string>
<!-- Notification channels -->
<string name="notification_channel_name_backup_failed">Falló la copia de seguranza automática</string>
<string name="notification_channel_name_backup_success">La copia de seguranza automática tuvo ésitu</string>
<string name="notification_channel_desc_backup_failed">Estos avisos amuésense cuando una
copia de seguranza falló por dalguna razón</string>
<string name="notification_channel_desc_backup_success">Estos avisos amuésense cuando una
copia de seguranza tuvo ésitu</string>
<!-- Toast messages -->
<string name="backup_toast_no_location">¡Afita un allugamientu predetermináu nos axustes!</string>
<string name="backup_toast_location_access_failed">¡Fallu al acceder al allugamientu de les copies de seguranza!</string>
<string name="backup_toast_file_creation_failed">¡Fallu al crear el ficheru del copia de seguranza!</string>
<string name="backup_toast_export_success">La esportación al almacenamientu esternu tuvo ésitu</string>
<string name="backup_toast_export_failed">Falló la esportación al almacenamientu esternu</string>
<string name="backup_toast_import_success">La importación al almacenamientu esternu tuvo ésitu</string>
<string name="backup_toast_import_save_failed">Fallu al guardar les entraes restauraes</string>
<string name="backup_toast_import_decryption_failed">Falló\'l descifráu de la copia de seguranza</string>
<string name="backup_toast_import_no_entries">Nun s\'alcontraron entraes nos datos importaos</string>
<string name="backup_toast_storage_not_accessible">Anguaño nun pue accedese al almacenamientu esternu</string>
<string name="backup_toast_openpgp_error">Fallu d\'OpenPGP: %s</string>
<string name="backup_toast_openpgp_not_verified">Nun se deteutó nenguna robla verificada</string>
<string name="backup_toast_crypt_password_not_set">Nun s\'afitó la contraseña, comprueba los axustes</string>
<string name="backup_toast_file_selection_failed">¡Nun pue abrise\'l diálogu d\'esbilla de ficheros!</string>
</resources>

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="intro_slide1_title">Vamos entamar</string>
<string name="intro_slide1_desc">Afáyate n\'<b>andOTP</b>, esti encontu va guiate pente la
configuración inicial. ¡Llei con procuru darréu que podríes perder datos!
\n\nNun t\'esmolezas, entá pues camudar cualesquier opción más sero n\'<b>Axustes</b>.</string>
<string name="intro_slide2_desc">P\'asegurar la seguranza de les cuentes, <b>andOTP</b>
namás les atroxa en ficheros cifraos. Equí pues escoyer el métodu de cifráu que va usase.</string>
<string name="intro_slide2_desc_keystore">L\'almacenamientu de claves ye un componente del sistema Android
p\'atroxar de mou seguru les claves criptográfiques. La ventaya d\'esti métodu ye que les claves
atróxense separtaes de los ficheros de datos y la criptografía del hardware pue facer copies
de seguranza (si\'l preséu lo sofita). Por embargu y darréu que les claves nun s\'atroxen colos
datos de les aplicaciones, <b>esti métodu evita que funcionen les soluciones de copies de
seguranza (como Titanum)</b>. Si escueyes esti métodu vas tener d\'encontate nes funciones
de copies de seguranza internes d\'<b>andOTP</b>.\n\n<b>Alvertencia:</b> L\'almacenamientu
de claves tien l\'enclín a causar munchos problemes, úsalu namás si lu precises daveres. Si nun
t\'importa introducir una contraseña / PIN cada vegada qu\'anicies <b>andOTP</b>, <b>aconséyase
muncho usar el cifráu basáu en contraseña.</b></string>
<string name="intro_slide2_desc_password">Esti métodu va cifrar los datos con una clave
xenerada de magar una contraseña o PIN. La ventaya principal equí ye qu\'esto va
funcionar con soluciones esternes de copies de seguranza (como Titanium), y nun falla
tanto como l\'almacén de claves. Por embargu, vas tener d\'introducir les credenciales
cada vegada qu\'anicies <b>andOTP</b>.</string>
<string name="intro_slide3_desc_keystore">Equí pues configurar una autenticación pa bloquiar
<b>andOTP</b>. Darréu qu\'escoyesti <b>Almacén de claves d\'Android</b> como métodu de
cifráu, esto ye opcional.</string>
<string name="intro_slide3_desc_password">Equí pues configurar una autenticación pa bloquiar
<b>andOTP</b>. Darréu qu\'escoyesti <b>Contraseña / PIN</b> como métodu de cifráu, precises
afitar una contraseña o un PIN pa siguir.</string>
<string name="intro_slide3_warn_no_password">¡Afita una contraseña pa siguir!</string>
<string name="intro_slide3_warn_no_pin">¡Afita un PIN pa siguir!</string>
<string name="intro_slide3_warn_confirm_password">¡Confirma la contraseña pa siguir!</string>
<string name="intro_slide3_warn_confirm_pin">¡Confirma\'l PIN pa siguir!</string>
<string name="intro_slide4_title">Finesti</string>
<string name="intro_slide4_desc">Guardáronse los axutes, ¡yá tas preparáu pa
usar <b>andOTP</b>!</string>
</resources>

View file

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Buttons -->
<string name="button_cancel">Encaboxar</string>
<string name="button_enter_details">Amestar a mano</string>
<string name="button_scan_qr">Escaniar códigu QR</string>
<string name="button_save">Guardar</string>
<string name="button_new_tag">Etiqueta nueva</string>
<string name="button_settings">Axustes</string>
<string name="button_all_tags">Toles etiquetes</string>
<string name="button_no_tags">Ensin etiquetes</string>
<string name="button_qr_from_image">Códigu QR a partir d\'una imaxe</string>
<!-- Custom formatting -->
<string name="format_custom_period">%d s</string>
<!-- Hints -->
<string name="hint_label">Etiqueta</string>
<string name="hint_secret">Secretu</string>
<!-- Labels -->
<string name="label_hidden">Anubrióse</string>
<string name="label_type">Triba</string>
<string name="label_secret">Secretu</string>
<string name="label_period">Periodu</string>
<string name="label_digits">Díxitos</string>
<string name="label_counter">Contador</string>
<string name="label_issuer">Emisor</string>
<string name="label_label">Etiqueta</string>
<string name="label_algorithm">Algoritmu</string>
<string name="label_tags">Etiquetes</string>
<string name="label_advanced">Opciones avanzaes</string>
<!-- Drawer -->
<string name="drawer_open">Amosar etiquetes</string>
<string name="drawer_close">Anubrir etiquetes</string>
<!-- Menu -->
<string name="menu_main_about">Tocante a</string>
<string name="menu_main_backup">Copia seguranza</string>
<string name="menu_main_search">Guetar</string>
<string name="menu_main_settings">Axustes</string>
<string name="menu_main_sort">Ordenar</string>
<string name="menu_sort_none">Ensin ordenar</string>
<string name="menu_sort_issuer">Emisor</string>
<string name="menu_sort_label">Etiqueta</string>
<string name="menu_sort_last_used">Últimu usu</string>
<string name="menu_sort_most_used">Lo más usao</string>
<string name="menu_popup_edit">Editar</string>
<string name="menu_popup_change_image">Camudar imaxe</string>
<string name="menu_popup_remove">Desaniciar</string>
<string name="menu_popup_show_qr_code">Amosar el códigu QR</string>
<!-- Buttons -->
<string name="button_card_options">Más opciones</string>
<string name="button_card_options_format">Más opciones de %1$s</string>
<string name="button_card_copy">Copiar el pase</string>
<string name="button_card_copy_format">Copiar el pase de %1$s</string>
<string name="button_add">Amestar una cuenta</string>
<string name="button_close_menu">Zarrar el menú</string>
<!-- Toast messages -->
<string name="toast_auth_failed">Falló l\'autenticación, ¡volvi tentalo!</string>
<string name="toast_auth_failed_fatal">Falló l\'autenticación, ¡zarrando andOTP!</string>
<string name="toast_copied_to_clipboard">Copióse al cartafueyu</string>
<string name="toast_entry_exists">Esta entrada yá esiste</string>
<string name="toast_invalid_qr_code">El códigu QR nun ye válidu</string>
<string name="toast_encryption_key_empty">Nun se cargó la clave de cifráu</string>
<string name="toast_intent_creation_failed">El códigu propuestu nun ye válidu</string>
<string name="toast_intent_creation_succeeded">Amestóse\'l códigu propuestu</string>
<string name="toast_file_load_error">Nun pudo abrise\'l ficheru</string>
<string name="toast_qr_error">Nun pudo alcontrase/confirmase\'l códigu QR</string>
<string name="toast_qr_checksum_exception">Falló la verificación de la suma de comprobación mentanso se descifraba\'l códigu QR</string>
<string name="toast_qr_format_error">Fallu de formatu nel códigu QR</string>
<string name="toast_qr_unsuported">El códigu QR nun se sofita</string>
<string name="toast_qr_failed_to_generate">Fallu al xenerar el códigu QR</string>
<!-- Errors -->
<string name="error_invalid_secret">El secretu nun ye válidu</string>
<!-- Dialogs -->
<string name="dialog_title_auth">Autenticación</string>
<string name="dialog_title_manual_entry">Amestar a mano</string>
<string name="dialog_title_remove">Desaniciar</string>
<string name="dialog_title_rename">Renomáu</string>
<string name="dialog_title_counter">Contador</string>
<string name="dialog_title_used_tokens">Usu de pases</string>
<string name="dialog_title_keystore_error">Fallu del almacén de claves</string>
<string name="dialog_title_qr_code">Códigu QR</string>
<string name="dialog_title_enter_password">Introducción de contraseña</string>
<string name="dialog_label_enter_password">Introduz la contraseña</string>
<string name="dialog_label_confirm_password">Confirma la contraseña</string>
<string name="dialog_msg_auth">Introduz les credenciales del preséu p\'aniciar andOTP, por favor.</string>
<string name="dialog_msg_confirm_delete">¿De xuru que quies desaniciar la cuenta «%1$s»?</string>
<string name="dialog_msg_used_tokens">andOTP va saber cuándo uses los pases (col usu de la
carauterística «Tocar p\'amosar» o copiar al cartafueyu) pa ser a ordenalos por «Más
usu» o «Últimu usu».\n\nEsti mensaxe nun va amosase de nueves.</string>
<string name="dialog_msg_keystore_error">Falló la carga de la clave de cifráu del almacén de claves.
<b>Va perdese cualesquier entrada que s\'amieste.</b>\n\nPa ser entá a usar andOTP, pues
dir a <b>Axustes</b> y cambiar el <b>cifráu de labase de datos</b> o la <b>Contraseña / PIN</b>.</string>
<!-- Shortcuts -->
<string name="shortcut_name_scan_qr">Escaniar códigu QR</string>
<string name="shortcut_name_import_qr">Importar un códigu QR</string>
<string name="shortcut_name_enter_details">Amestar a mano</string>
</resources>

View file

@ -0,0 +1,228 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="settings_activity_title">Axustes</string>
<!-- Categories -->
<string name="settings_category_title_security">Seguranza</string>
<string name="settings_category_title_ui">Interfaz d\'usuariu</string>
<string name="settings_category_title_backup">Copies de seguranza</string>
<!-- Titles -->
<string name="settings_title_tap_to_reveal">Tocar pa descubrir</string>
<string name="settings_title_tap_to_reveal_timeout">Escosa del tiempu d\'espera del toque pa descubrir</string>
<string name="settings_title_auth">Autenticación</string>
<string name="settings_title_auth_password">Contraseña</string>
<string name="settings_title_auth_pin">PIN</string>
<string name="settings_title_encryption">Cifráu de la base de datos</string>
<string name="settings_title_panic">Botón de pánicu</string>
<string name="settings_title_relock_screen_off">Volver bloquiar al apagar la pantalla</string>
<string name="settings_title_relock_background">Volver a bloquiar al tar en segundu planu</string>
<string name="settings_title_auth_inactivity">Volver bloquiar na inactividá</string>
<string name="settings_title_auth_inactivity_delay">Retrasu pal bloquéu por inactividá</string>
<string name="settings_title_block_accessibility">Bloquiar tolos servicios d\'accesibilidá</string>
<string name="settings_title_block_autofill">Bloquiar el rellenu automáticu</string>
<string name="settings_title_lang">Llingua</string>
<string name="settings_title_theme">Estilu</string>
<string name="settings_title_card_layout">Diseñu de les tarxetes</string>
<string name="settings_title_label_size">Tamañu de la fonte de les etiquetes</string>
<string name="settings_title_label_scroll">Desplazar nes etiquetes</string>
<string name="settings_title_tap_single">Un toque</string>
<string name="settings_title_tap_double">Dos toques</string>
<string name="settings_title_thumbnail_size_ask">Tamañu de miniatures</string>
<string name="settings_title_split_group_size">Dixebra de los códigos</string>
<string name="settings_title_tag_functionality">Comportamientu de la esbilla d\'etiquetes</string>
<string name="settings_title_minimize_on_copy">Minimizar l\'aplicación dempués de compiar el códigu OTP</string>
<string name="settings_title_search_includes">Comportamientu de la gueta</string>
<string name="settings_title_label_highlight_token">Rescamplar los pases que caduquen</string>
<string name="settings_title_hide_global_timeout">Anubrir la barra d\'escosa de tiempu</string>
<string name="settings_title_show_individual_timeouts">Amosar les escoses de tiempu individuales</string>
<string name="settings_title_backup_append_date">Amestar la data al nome del ficheru</string>
<string name="settings_title_backup_ask">Pidir un nome de ficheru</string>
<string name="settings_title_backup_location">Allugamientu predetermináu de les copies</string>
<string name="settings_title_backup_password">Contraseña pa les copies de seguranza</string>
<string name="settings_title_auto_backup_password_enc">Facer copies de seguranza al amestar entraes</string>
<string name="settings_title_backup_broadcasts">Espardimientu de copies de seguranza</string>
<string name="settings_title_openpgp_provider">Fornidor OpenPGP</string>
<string name="settings_title_openpgp_key_encrypt">Clave de cifráu OpenPGP</string>
<string name="settings_title_openpgp_key_sign">Clave de cifráu OpenPGP (opcional)</string>
<string name="settings_title_openpgp_verify">Verificar les copies de seguranza cifraes</string>
<string name="settings_title_special_features">Activar les carauterístiques especiales</string>
<string name="settings_title_enable_screenshot">Activar captures de pantalla</string>
<string name="settings_title_enable_android_backup_service">Activar la sincronización d\'Android</string>
<string name="settings_title_clear_keystore">Llimpiar l\'almacén de claves</string>
<!-- Descriptions -->
<string name="settings_desc_tap_to_reveal">Anubre por defeutu los pases OTP riquiendo que se
descubran a mano</string>
<string name="settings_desc_tap_to_reveal_timeout">Esbilla\'l tiempu (en segundos) tres el que
van volver anubrise les entraes
revelaes</string>
<string name="settings_desc_panic">Decidi lo qu\'asocede cuando s\'activa\'l botón de pánicu</string>
<string name="settings_desc_relock_screen_off">Rique l\'autenticación dempués de que la
pantalla del preséu s\'apague</string>
<string name="settings_desc_relock_background">Rique l\'autenticación dempués de que l\'aplicación se
mandare al segundu planu (por exemplu, primiendo\'l
botón d\'Aniciu)</string>
<string name="settings_desc_auth_inactivity">Rique l\'autenticación dempués de que\'l preséu tea
inactivu</string>
<string name="settings_desc_auth_inactivity_delay">Esbilla\'l tiempu (en segundos) tres el
que va volver riquise l\'autenticación</string>
<string name="settings_desc_block_accessibility">Anubre los campos sensibles a los
servicios d\'accesibilidá. <b>¡NUN actives esto si uses los servicios
d\'accesibilidá!</b></string>
<string name="settings_desc_block_autofill">Bloquia que los servicios de rellenu automáticu
accedan a los campos de contraseña de
dientro de l\'aplicación</string>
<string name="settings_desc_block_autofill_android">Esta carauterística rique Android
8.0 (Oreo) o mayor</string>
<string name="settings_desc_label_scroll">Desplazar les etiquetes llargues en cuentes de truncales</string>
<string name="settings_desc_minimize_on_copy">L\'aplicación va minimizase cuando copies el códigu OTP nel cartafueyu</string>
<string name="settings_desc_search_includes">Especifica los valores que deberíen incluyise al guetar</string>
<string name="settings_desc_label_highlight_token">Rescampla los pases si caduquen en 8 segundos</string>
<string name="settings_desc_hide_global_timeout">Anubre la barra d\'escosa de tiempu global de lo cimero de la pantalla</string>
<string name="settings_desc_show_individual_timeouts">Amuesa la barra d\'escosa de tiempu en cada entrada.
Esto pue facer que l\'aplicación vaiga lenta, activa esta opción
namás si ye preciso.</string>
<string name="settings_desc_backup_append_date">Amiesta la data actual al nome suxeríu de la copia
de seguranza</string>
<string name="settings_desc_backup_ask">Pide\'l nome de ficheru cada vegada que se crea o
restaura una copia de seguranza</string>
<string name="settings_desc_backup_location">Escueyi un allugamientu predetermináu pa copies de seguranza</string>
<string name="settings_desc_backup_location_set">Escoyóse l\'allugamientu de les copies de seguranza</string>
<string name="settings_desc_backup_password">Afita la contraseña que s\'usa pa cifrar les
copies de seguranza</string>
<string name="settings_desc_auto_backup_password_enc">Crea una copia de seguranza cifrada cuando
s\'amiesten o editen entraes, si se cumplen les condiciones</string>
<string name="settings_desc_auto_backup_requirements">Afita un allugamientu y una contraseña
predeterminaos pa les copies de
seguranza p\'activar esta opción</string>
<string name="settings_desc_backup_broadcasts">Esbilla les tribes de copies de seguranza que
puen aicionase pente aplicaciones de
terceros col usu d\'Espardimientu</string>
<string name="settings_desc_openpgp_key_encrypt">La direición de corréu de la clave OpenPGP usada
pa cifrar les copies de seguranza</string>
<string name="settings_desc_openpgp_verify">Les copies de seguranza cifraes namás s\'importen
si tán roblaes con una clave válida</string>
<string name="settings_desc_special_features">Toca pa volver desactivar les carauterístiques especiales</string>
<string name="settings_desc_enable_screenshot">Permite la fechura de captures de pantalla de
la pantalla principal (desactívase por
defeutu por razones de seguranza)</string>
<string name="settings_desc_enable_android_backup_service">Permite qu\'andOTP use\'l serviciu
integráu de copies de seguranza d\'Android pa facer
copies de seguranza de claves y preferencies</string>
<string name="settings_desc_clear_keystore">Desanicia la clave de cifráu del almacén de claves</string>
<!-- Toasts -->
<string name="settings_toast_auth_device_not_secure">Esta carauterística rique una pantalla de
desbloquéu configurada (Axustes -&gt; Seguranza -&gt; Pantalla de bloquéu)</string>
<string name="settings_toast_password_empty">Nun se permite una contraseña balera,
afita l\'autenticación a Nenguna pa desactivala.</string>
<string name="settings_toast_encryption_changing">Tentando de camudar el cifráu de la base
de datos, espera</string>
<string name="settings_toast_encryption_change_success">¡El cifráu de la base de datos camudó
con ésitu!</string>
<string name="settings_toast_encryption_change_failed">Fallu al camudar el cifráu de la base
de datos, volviendo al estáu orixinal</string>
<string name="settings_toast_encryption_backup_failed">Fallu al crear una copia de
seguranza interna, ¡albortando!</string>
<string name="settings_toast_encryption_no_key">Fallu al consiguir la clave de cifráu, ¡albortando!</string>
<string name="settings_toast_encryption_auth_failed">¡Falló l\'autenticación!</string>
<string name="settings_toast_auth_upgrade_failed">Fallu al anovar dafurto la contraseña / PIN
al cifráu nuevu, volvi afitala manualmente n\'axustes.</string>
<string name="settings_dialog_title_warning">Alvertencia</string>
<string name="settings_dialog_title_error">Fallu</string>
<string name="settings_dialog_title_clear_keystore">¿Llimpiar l\'almacén de claves?</string>
<string name="settings_dialog_title_android_sync">Sincronización d\'Android</string>
<string name="settings_dialog_msg_encryption_change">Agora andOTP va tentar de camudar el cifráu
de la base de datos. En casu de fallu, una copia de seguranza va restaurase y
el cifráu nun va camudar.\n\n<b>Por embargu, siempres ye una bona idea tener una
copia en casu de qu\'asoceda daqué inesperao.</b></string>
<string name="settings_dialog_msg_auth_invalid_with_encryption">¡Namás pues usar una contraseña o un PIN
mentanto\'l cifráu de la base de datos tea afitáu a «Contraseña/PIN»!</string>
<string name="settings_dialog_msg_encryption_invalid_with_auth">¡Primero precises afitar
l\'autenticación a «Contraseña» o «PIN»!</string>
<string name="settings_dialog_msg_encryption_invalid_without_credentials">¡Primero precises afitar
una contraseña o un PIN enantes de camudar el
cifráu!</string>
<string name="settings_dialog_msg_clear_keystore_password">En dalgunos casos, llimpiar l\'almacén
de claves pue ayudar a iguar problemes. ¡Namás deberíes siguir si sabes lo que tas faciendo!\n\nDarréu
que\'l <b>cifráu de la base de datos</b> s\'afitó a <b>Contraseña/PIN</b>, nun deberíes
nengún datu (pero nun ta demás tener una copia de seguranza).\n\n<b>¿De xuru que quies
llimpiar l\'almacén de claves?</b></string>
<string name="settings_dialog_msg_clear_keystore_keystore">En dalgunos casos, llimpiar l\'almacén
de claves pue ayudar a iguar problemes. ¡Namás deberíes siguir si sabes lo que tas faciendo!\n\n<b>Alvertencia</b>:
Darréu que\'l <b>cifráu de la base de datos</b> s\'afitó a <b>Almacén de claves d\'Android</b>,
vas perder toles cuentes. ¡Asegúrate de que tienes una copia de seguranza!\n\n<b>¿De xuru que
quies llimpiar l\'almacén de claves?</b></string>
<string name="settings_dialog_msg_android_sync_disabled_encryption">La sincronización d\'Android nun pue usase col
cifráu del almacén de claves, <b>deberíes facer una
copia de seguranza manual!</b></string>
<!-- List entries -->
<string-array name="settings_entries_auth">
<item>Nenguna</item>
<item>Contraseña</item>
<item>PIN</item>
<item>Credenciales del preséu</item>
</string-array>
<string-array name="settings_entries_encryption">
<item>Almacén de claves d\'Android</item>
<item>Contraseña / PIN</item>
</string-array>
<string-array name="settings_entries_panic">
<item>Llimpiar toles cuentes</item>
<item>Reafitar los axustes de l\'aplicación</item>
</string-array>
<string-array name="settings_entries_card_layout">
<item>Compautu</item>
<item>Por defeutu</item>
<item>Completu</item>
</string-array>
<string-array name="settings_entries_tap">
<item>Nada</item>
<item>Amosar/anubrir</item>
<item>Copiar</item>
<item>Copiar y dir al segundu planu</item>
</string-array>
<string-array name="settings_entries_search_includes">
<item>Nomes</item>
<item>Emisor</item>
<item>Etiquetes</item>
</string-array>
<string-array name="settings_entries_auto_backup_password_enc">
<item>Non</item>
<item>Entraes nueves</item>
<item>Cualesquier edición</item>
</string-array>
<string-array name="settings_entries_theme">
<item>Claridá</item>
<item>Escuridá</item>
<item>Prietu</item>
</string-array>
<string-array name="settings_entries_thumbnail_size">
<item>Anúbrense</item>
<item>Nanu</item>
<item>Pequeñu</item>
<item>Por defeutu</item>
<item>Mediu</item>
<item>Grande</item>
</string-array>
<string-array name="settings_entries_split_group_size">
<item>Nun dixebrar</item>
<item>Tres dos caráuteres</item>
<item>Tres trés caráuteres</item>
</string-array>
<string-array name="settings_entries_tag_functionality">
<item>Amuésense toles entraes que concasen con <b>cualesquiera</b> d\'estes etiquetes esbillaes (o)</item>
<item>Namás s\'amuesen les entraes que concasen con <b>toles</b> etiquetes esbillaes (y)</item>
<item>Cambéu ente etiquetes (namás se permite una etiqueta esbillada al empar)</item>
</string-array>
<string-array name="settings_entries_backup_broadcasts">
<item>Copies de seguranza en testu planu</item>
<item>Copies de seguranza cifraes</item>
</string-array>
<!-- Special -->
<string name="settings_lang_sys_default">Lo predeterminao del sistema</string>
<!-- PasswordPreference -->
<string name="settings_hint_password">Introduz una contraseña nueva</string>
<string name="settings_hint_pin">Introduz un PIN nuevu</string>
<string name="settings_hint_password_confirm">Confirma la contraseña</string>
<string name="settings_hint_pin_confirm">Confirma\'l PIN</string>
<string name="settings_label_short_password">¡La contraseña precisa ser de polo menos %1$d de llargor!</string>
<string name="settings_label_short_pin">¡El PIN precisar ser de polo menos %1$d díxitos de llargor!</string>
</resources>

View file

@ -6,8 +6,8 @@
<string name="auth_hint_pin">ПИН код</string>
<!-- Messages -->
<string name="auth_msg_authenticate">Моля, удостоверете се, за да стартирате andOTP!</string>
<string name="auth_msg_confirm_encryption">Моля, удостоверете се, за да генерирате
нов ключ за криптиране!</string>
<string name="auth_msg_confirm_encryption">Please confirm authentication to generate your
encryption key!</string>
<!-- Buttons -->
<string name="auth_button_unlock">Отключване</string>
<!-- Toast messages -->

View file

@ -46,11 +46,6 @@
         това преди да опитате да направите резервно копие</string>
<string name="backup_receiver_custom_encryption_failed">Криптиране на база Парола/ПИН код, не
         се поддържа с резервно копие чрез външно приложение</string>
<string name="backup_new_format_dialog_title">Нов метод за криптиране</string>
<string name="backup_new_format_dialog_msg">От версия 0.6.3 на andOTP, <b>нов и подобрен
         метод за криптиране</b> се използва за защитени, с парола, резервни копия. Старите резервни копия
все още могат да бъдат импортиран, но е <b>силно препоръчително да създавате нови резервни копия с подобрен
         метод на криптиране</b>.\n\nТова съобщение няма да бъде показано отново.</string>
<!-- Notification channels -->
<string name="notification_channel_name_backup_failed">Автоматичното архивиране не бе успешно</string>
<string name="notification_channel_name_backup_success">Автоматичното архивиране е успешно</string>
@ -59,7 +54,9 @@
<string name="notification_channel_desc_backup_success">Тези известия се показват, когато
         автоматичното архивиране е успешно</string>
<!-- Toast messages -->
<string name="backup_toast_mkdir_failed">Неуспешно създаване на директория за резервни копия</string>
<string name="backup_toast_no_location">Please set a default backup location in the settings!</string>
<string name="backup_toast_location_access_failed">Failed to access backup location!</string>
<string name="backup_toast_file_creation_failed">Failed to create backup file!</string>
<string name="backup_toast_export_success">Експортирането във външно хранилище е успешно</string>
<string name="backup_toast_export_failed">Експортирането в външно хранилище е неуспешно</string>
<string name="backup_toast_import_success">Импортиране от външно хранилище е успешно</string>
@ -67,7 +64,6 @@
<string name="backup_toast_import_decryption_failed">Декриптирането на архива не бе успешно</string>
<string name="backup_toast_import_no_entries">Няма намерени записи в импортираните данни</string>
<string name="backup_toast_storage_not_accessible">В момента външното хранилище не е достъпно</string>
<string name="backup_toast_storage_permissions">Разрешението за съхранение не е предоставено</string>
<string name="backup_toast_openpgp_error">OpenPGP Грешка: %s</string>
<string name="backup_toast_openpgp_not_verified">Не е открит проверен подпис</string>
<string name="backup_toast_crypt_password_not_set">Паролата не е зададена, проверете в <b>Настройки</b></string>

View file

@ -45,6 +45,13 @@
<string name="menu_popup_change_image">Промяна на изображението</string>
<string name="menu_popup_remove">Премахване</string>
<string name="menu_popup_show_qr_code">Показване на QR кода</string>
<!-- Buttons -->
<string name="button_card_options">More options</string>
<string name="button_card_options_format">More options for %1$s</string>
<string name="button_card_copy">Copy token</string>
<string name="button_card_copy_format">Copy %1$s token</string>
<string name="button_add">Add new account</string>
<string name="button_close_menu">Close menu</string>
<!-- Toast messages -->
<string name="toast_auth_failed">Неуспешно удостоверяване. Моля, опитайте отново!</string>
<string name="toast_auth_failed_fatal">Неуспешно удостоверяване, затваряне на andOTP!</string>
@ -71,7 +78,6 @@
<string name="dialog_title_used_tokens">Използване на токените</string>
<string name="dialog_title_keystore_error">Грешка в Хранилището за ключове на Android</string>
<string name="dialog_title_qr_code">QR код</string>
<string name="dialog_title_android21_depreaction">Остаряло известие</string>
<string name="dialog_title_enter_password">Въведете парола</string>
<string name="dialog_label_enter_password">Въведете парола</string>
<string name="dialog_label_confirm_password">Потвърдете паролата</string>
@ -83,11 +89,6 @@
<string name="dialog_msg_keystore_error">Неуспешно зареждане на ключа за шифроване от Хранилище за ключове на Android.
         <b>Всички добавени записи ще се загубят.</b>\n\nЗа да продължите да използвате andOTP, можете да отидете
         в <b>Настройки</b> и да превключете <b>Криптиране на базата данни</b> на <b>Парола / ПИН код</b>.</string>
<string name="dialog_msg_android21_deprecation">Това ще бъде последната поддържана версия на andOTP за
         версия на Android под 5.1 (Lollipop). Увеличените усилия, необходими за поддържане на
         отделно приложение за съхранение, само за тези по-стари версии, както и за техния нисък пазар на
         споделянията, правят непрекъснатата поддръжка невъзможна за нашия малък екип. \n\nТова съобщение няма да бъде
         показани отново.</string>
<!-- Shortcuts -->
<string name="shortcut_name_scan_qr">Сканиране на QR кода</string>
<string name="shortcut_name_import_qr">Импортиране на QR код</string>

View file

@ -18,6 +18,7 @@
<string name="settings_title_auth_inactivity">Повторно заключване при бездействие</string>
<string name="settings_title_auth_inactivity_delay">Забавяне за повторно заключване при неактивност</string>
<string name="settings_title_block_accessibility">Блокиране на услугите за достъпност</string>
<string name="settings_title_block_autofill">Block autofill</string>
<string name="settings_title_lang">Език</string>
<string name="settings_title_theme">Тема</string>
<string name="settings_title_card_layout">Вид оформление</string>
@ -35,7 +36,7 @@
<string name="settings_title_show_individual_timeouts">Показване на индивидуални времена за изчакване</string>
<string name="settings_title_backup_append_date">Добавяне на датата към името на файла</string>
<string name="settings_title_backup_ask">Попитай за името на файла</string>
<string name="settings_title_backup_directory">Директория за резервни копия</string>
<string name="settings_title_backup_location">Default backup location</string>
<string name="settings_title_backup_password">Парола за резервни копия</string>
<string name="settings_title_auto_backup_password_enc">Автоматично архивиране на нови записи</string>
<string name="settings_title_backup_broadcasts">Резервная копия с помощта на външни приложения</string>
@ -63,6 +64,10 @@
         изисква повторно удостоверяване</string>
<string name="settings_desc_block_accessibility">Скриване на чувствителни полета от услугите
за достъпност. <b>НЕ активирайте това, ако използвате услугите за достъпност!</b></string>
<string name="settings_desc_block_autofill">Block autofill services from accessing password
fields inside the app</string>
<string name="settings_desc_block_autofill_android">This feature requires an Android version
above 8.0 (Oreo)</string>
<string name="settings_desc_label_scroll">Превъртане на дългите етикети, вместо да бъдат съкращавани</string>
<string name="settings_desc_minimize_on_copy">Приложението ще бъде минимизирано, когато копирате OTP токенът в клипборда</string>
<string name="settings_desc_search_includes">Посочете кои стойности трябва да бъдат включени при търсенето</string>
@ -75,10 +80,14 @@
<string name="settings_desc_backup_ask">Попитайте за името на файла всеки път, когато се създаде или възстановява
резервно копие
       </string>
<string name="settings_desc_backup_location">Choose a default backup location</string>
<string name="settings_desc_backup_location_set">Backup location has been chosen</string>
<string name="settings_desc_backup_password">Задайте паролата, която да се използва за криптиране на
         резервните копия</string>
<string name="settings_desc_auto_backup_password_enc">Създаване на ново криптирано резервно копие, когато новите
         записи се добавят или редактират, ако са изпълнени условията за настройките</string>
<string name="settings_desc_auto_backup_requirements">Set a default backup location and a
backup password to enable this option</string>
<string name="settings_desc_backup_broadcasts">Изберете какви типове резервни копия могат да бъдат запазени от
         приложения на трети страни за създаване на резервно копие</string>
<string name="settings_desc_openpgp_key_encrypt">Пощенски адрес на OpenPGP ключа, използван за криптиране на

View file

@ -11,7 +11,7 @@
<string name="about_label_source">Codi font</string>
<string name="about_label_version">Versió</string>
<string name="about_label_faq">FAQ</string>
<string name="about_label_faq_long">Frequently asked questions</string>
<string name="about_label_faq_long">Qüestions freqüents</string>
<!-- Authors -->
<string name="about_title_authors">Autors</string>
<string name="about_label_main_developer">Programador principal</string>
@ -19,22 +19,22 @@
<string name="about_label_original_author">Autor de l\'aplicació original</string>
<string name="about_label_original_app">Aplicació original</string>
<string name="about_label_website">Lloc web</string>
<string name="about_label_donate">Donar</string>
<string name="about_label_donate">Feu una donació</string>
<string name="about_label_contributors">Col·laboradors</string>
<string name="about_label_translators">Traductors</string>
<!-- Thumbnail disclaimer -->
<string name="about_title_thumbnail_disclaimer">Avís miniatura</string>
<string name="about_thumbnails_disclaimer_no1"><b>1.</b> totes les miniatures són marques registrades dels seus
<string name="about_title_thumbnail_disclaimer">Avís sobre les miniatures</string>
<string name="about_thumbnails_disclaimer_no1"><b>1.</b> Totes les miniatures són marques registrades dels seus
respectius propietaris.</string>
<string name="about_thumbnails_disclaimer_no2"><b>2.</b> l\'ús de les marques comercials no
indica aprovació del titular de la marca per andOTP, ni viceversa.</string>
<string name="about_thumbnails_disclaimer_no3"><b>3.</b> Miniatures només usades per
representar l\'empresa o producte al qual es refereixen.</string>
<string name="about_thumbnails_disclaimer_no4"><b>4. No utilitzeu miniatures per a qualsevol propòsit
excepte per representar aquella marca determinada o servei.</b></string>
<string name="about_thumbnails_disclaimer_no2"><b>2.</b> L\'ús de les marques comercials no
indica aprovació del titular de la marca per part d\'andOTP, ni viceversa.</string>
<string name="about_thumbnails_disclaimer_no3"><b>3.</b> Les miniatures només s\'haurien de fer servir per a
representar l\'empresa o producte al qual es fan referència.</string>
<string name="about_thumbnails_disclaimer_no4"><b>4. No utilitzeu les miniatures per a cap altre propòsit que no sigui
representar aquella marca determinada o servei.</b></string>
<!-- Support -->
<string name="about_title_support">Doneu suport al desenvolupament</string>
<string name="about_desc_support">Find out how you can support the development of andOTP</string>
<string name="about_desc_support">Vegeu com podeu donar suport al desenvolupament d\'andOTP</string>
<string name="about_title_special_features">Característiques especials</string>
<string name="about_dialog_special_features">Esteu segur que voleu habilitar les característiques
especials? La major part són algorismes OTP no estàndard que es van implementar

View file

@ -6,7 +6,7 @@
<string name="auth_hint_pin">PIN</string>
<!-- Messages -->
<string name="auth_msg_authenticate">Per favor, autentiqueu-vos per a iniciar andOTP!</string>
<string name="auth_msg_confirm_encryption">Per favor, confirmeu la vostra autenticació per a generar
<string name="auth_msg_confirm_encryption">Per favor, confirmeu l\'autenticació per a generar
la clau de xifratge nova!</string>
<!-- Buttons -->
<string name="auth_button_unlock">Desbloqueja</string>

View file

@ -20,15 +20,14 @@
<string name="backup_desc_import_crypt_old">Restaura el conte desde un ficher JSON protegit amb contrasenya
creat amb <b>una versió de andOTP prévia a 0.6.3</b></string>
<string name="backup_desc_import_openpgp">Restaura els comptes d\'un fitxer JSON xifrat amb OpenPGP</string>
<string name="backup_desc_crypt_setup">Failed to load the backup password from the <b>Settings</b>,
this either means no password was set or something went wrong. You will be asked to enter
the password manually when creating or importing a backup.
<string name="backup_desc_crypt_setup">No ha estat possible carregar la còpia de seguretat de la contrasenya de <b>Preferències</b>,
això pot ser perquè no hi ha cap contrasenya o perquè alguna cosa ha fallat. Haureu d\'escriure
la contrasenya manualment quan creeu o importeu una còpia de seguretat. </string>
<string name="backup_desc_openpgp_provider">Cal instal·lar un programa OpenPGP i habilitar-lo
a <b>Preferències</b> per a fer servir aquesta característica.
</string>
<string name="backup_desc_openpgp_provider">You need to install an OpenPGP provider and enable
it in the <b>Settings</b> to use this feature.
</string>
<string name="backup_desc_openpgp_keyid">You need to select an OpenPGP key in the <b>Settings</b>
before you can create encrypted backups.
<string name="backup_desc_openpgp_keyid">Cal triar una clau OpenPGP a <b>Preferències</b>
per a poder crear còpies xifrades.
</string>
<string name="backup_desc_replace">Si està activat les entrades antigues són substituïdes quan s\'importa una
còpia de seguretat i només hi queda la còpia. Si no, les entrades velles i les còpies de seguretat
@ -38,32 +37,29 @@
<string name="backup_dialog_msg_export_warning">Realment voleu exportar la base de dades com a
fitxer de text net JSON? Aquest fitxer contindrà les vostres claus secretes; per favor, manteniu-lo <b>ben protegit</b>!
</string>
<string name="backup_receiver_title_backup_failed">Backup failed</string>
<string name="backup_receiver_title_backup_success">Backup successful</string>
<string name="backup_receiver_plain_disabled">Plain-text backups are currently not allowed,
please go to the Settings to enable them</string>
<string name="backup_receiver_encrypted_disabled">Encrypted backups are currently not allowed,
please go to the Settings to enable them</string>
<string name="backup_receiver_title_backup_failed">La còpia de seguretat ha fallat</string>
<string name="backup_receiver_title_backup_success">S\'ha realitzat la còpia de seguretat</string>
<string name="backup_receiver_plain_disabled">Les còpies de seguretat en text pla no són permeses,
podeu activar-les a Preferències</string>
<string name="backup_receiver_encrypted_disabled">Les còpies de seguretat xifrades no són permeses,
podeu activar-les a Preferències</string>
<string name="backup_receiver_read_permission_failed">Read permission not granted, please do
this before attempting backup</string>
<string name="backup_receiver_write_permission_failed">Write permission not granted, please do
this before attempting backup</string>
<string name="backup_receiver_custom_encryption_failed">Password/PIN based encryption not
supported with broadcast backup</string>
<string name="backup_new_format_dialog_title">New encryption method</string>
<string name="backup_new_format_dialog_msg">Since version 0.6.3 of andOTP, a <b>new and improved
encryption method</b> is used for password-protected backups. The old backups can still be
imported, but it is <b>highly recommended to create new backups with the improved
encryption</b>.\n\nThis message will not be shown again.</string>
<!-- Notification channels -->
<string name="notification_channel_name_backup_failed">Automatic backup failed</string>
<string name="notification_channel_name_backup_success">Automatic backup successful</string>
<string name="notification_channel_desc_backup_failed">These notifications are shown when an
automatic backup has failed for some reason</string>
<string name="notification_channel_desc_backup_success">These notifications are shown when an
automatic backup was successful</string>
<string name="notification_channel_name_backup_failed">La còpia de seguretat automàtica ha fallat</string>
<string name="notification_channel_name_backup_success">La còpia de seguretat automàtica s\'ha realitzat</string>
<string name="notification_channel_desc_backup_failed">Aquestes notificacions es mostres quan la
còpia de seguretat automàtica falla</string>
<string name="notification_channel_desc_backup_success">Aquests notificacions es mostren quan la
còpia de seguretat reïx</string>
<!-- Toast messages -->
<string name="backup_toast_mkdir_failed">No ha pogut crear el directori de còpia de seguretat</string>
<string name="backup_toast_no_location">Per favor, configureu la localització per defecte de les còpies de seguretat!</string>
<string name="backup_toast_location_access_failed">No ha estat possible accedir a la localització de les còpies de seguretat!</string>
<string name="backup_toast_file_creation_failed">No ha estat possible crear el fitxer de còpia de seguretat!</string>
<string name="backup_toast_export_success">Exportació a l\'emmagatzematge extern correcta</string>
<string name="backup_toast_export_failed">L\'exportació a emmagatzematge extern ha fallat</string>
<string name="backup_toast_import_success">Importació des de l\'emmagatzematge extern correcta</string>
@ -71,9 +67,8 @@
<string name="backup_toast_import_decryption_failed">El desxifratge de la còpia ha fallat</string>
<string name="backup_toast_import_no_entries">No s\'han trobat cap entrada en les dades importades</string>
<string name="backup_toast_storage_not_accessible">L\'emmagatzematge extern no és accessible actualment</string>
<string name="backup_toast_storage_permissions">Permisos d\'emmagatzematge no concedits</string>
<string name="backup_toast_openpgp_error">Error OpenPGP: %s</string>
<string name="backup_toast_openpgp_not_verified">No s\'ha detectat cap signatura verificada</string>
<string name="backup_toast_crypt_password_not_set">Password not set, check the <b>Settings</b></string>
<string name="backup_toast_file_selection_failed">Can\'t open file selection dialog!</string>
<string name="backup_toast_crypt_password_not_set">No hi ha cap contrasenya establerta, comproveu les <b>Preferències</b></string>
<string name="backup_toast_file_selection_failed">No ha estat possible obrir el diàleg de seleccio de fitxers!</string>
</resources>

View file

@ -1,36 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="intro_slide1_title">Let\'s get started</string>
<string name="intro_slide1_desc">Welcome to <b>andOTP</b>, this wizard will guide you through
the initial setup. Please pay attention and read carefully otherwise you could lose data!
\n\nDon\'t worry, you can still change any of the options later in the <b>Settings</b>.</string>
<string name="intro_slide2_desc">To ensure the security of your accounts <b>andOTP</b> only
stores them in encrypted data files. Here you can choose which method of encryption will be
used.</string>
<string name="intro_slide2_desc_keystore">The KeyStore is a system component of Android for
securely storing cryptographic keys. The advantage of this method is that the keys are
stored separated from the data files and can be backed by hardware cryptography (if your
device supports it). However, as the keys are not stored with the apps data, <b>this method
prevents external backup solutions (like Titanium) from working</b>. If you choose this
method you will have to rely on the internal backup functions provided by <b>andOTP</b>.
\n\n<b>Warning</b>: The KeyStore is known to cause a lot of problems, please only use it if
you absolutely have to. If you don\'t mind entering a password / PIN every time you start
<b>andOTP</b> it is <b>highly recommended to use the password-based encryption instead</b>.</string>
<string name="intro_slide1_title">Comencem</string>
<string name="intro_slide1_desc">Benvinguda a <b>andOTP</b>! Aquest assistents us guiarà en el
procés de configuració inicial. Pareu atenció i llegiu atentament per tal d\'evitar la pèrdua de dades.
\n\nNo patiu, podreu canviar qualsevol opció a <b>Preferències</b>.</string>
<string name="intro_slide2_desc">Per tal de garantir la seguretat dels vostres comptes, <b>andOTP</b> fa servir
xifratge per a desar les dades. Aquí podeu triar el mètode de xifratge que
s\'hi farà servir.</string>
<string name="intro_slide2_desc_keystore">The KeyStore is a system component of Android used to
securely store cryptographic keys. The advantage of using the KeyStore is that the keys are
stored separately from <b>andOTP</b>\'s data, and can be backed by hardware-based encryption
(if your device supports it). However, as the keys are not stored with <b>andOTP</b>\'s data,
<b>this method prevents external backup solutions (like Titanium) from working</b>. If you
choose this method, you will have to rely on the internal backup functions provided by
<b>andOTP</b>.\n\n<b>Warning</b>: The KeyStore is known to cause many problems, so
please only use it if you absolutely have to. If you don\'t mind entering a password / PIN
every time you start <b>andOTP</b>, it is <b>highly recommended to use the password-based
encryption instead</b>.</string>
<string name="intro_slide2_desc_password">This method will encrypt your data with a key
generated from a password or PIN. The main advantage here is that this will work with
external backup solutions (like Titanium) and is much less failure-prone than the KeyStore.
However, you will have to enter your credentials every time you start <b>andOTP</b>.</string>
<string name="intro_slide3_desc_keystore">Here you can setup an authentication to lock
<b>andOTP</b>. Since you have chosen <b>Android KeyStore</b> as encryption method this is
optional.</string>
<string name="intro_slide3_desc_password">Here you can setup an authentication to lock
<b>andOTP</b>. Since you have chosen <b>Password / PIN</b> as encryption method you need to
set either a password or a PIN to proceed.</string>
generated from a password or PIN. The main advantage of using this method is that external
backup solutions (like Titanium) will work as expected, and it is much less failure-prone
than the KeyStore. However, you will have to enter your credentials every time you start
<b>andOTP</b>.</string>
<string name="intro_slide3_desc_keystore">Here you can setup an authentication method to lock
<b>andOTP</b>. Since you have chosen <b>Android KeyStore</b> as your encryption method, this
step is optional.</string>
<string name="intro_slide3_desc_password">Here you can setup an authentication method to lock
<b>andOTP</b>. Since you have chosen <b>Password / PIN</b> as your encryption method, a
password or a PIN must be set to proceed.</string>
<string name="intro_slide3_warn_no_password">Please set a password to continue!</string>
<string name="intro_slide3_warn_no_pin">Please set a PIN to continue!</string>
<string name="intro_slide3_warn_confirm_password">Please confirm your password to continue!</string>
<string name="intro_slide3_warn_confirm_pin">Please confirm your PIN to continue!</string>
<string name="intro_slide4_title">Finished</string>
<string name="intro_slide4_desc">Your settings have been saved, you are all set to use
<b>andOTP</b> now!</string>
<string name="intro_slide4_desc">Your settings have been saved, you are now all set to use
<b>andOTP</b>!</string>
</resources>

View file

@ -9,7 +9,7 @@
<string name="button_settings">Configuració</string>
<string name="button_all_tags">Totes les etiquetes</string>
<string name="button_no_tags">Sense etiquetes</string>
<string name="button_qr_from_image">QR code from image</string>
<string name="button_qr_from_image">codi QR de la imatge</string>
<!-- Custom formatting -->
<string name="format_custom_period">%d s</string>
<!-- Hints -->
@ -22,7 +22,7 @@
<string name="label_period">Període</string>
<string name="label_digits">Dígits</string>
<string name="label_counter">Comptador</string>
<string name="label_issuer">Issuer</string>
<string name="label_issuer">Emissor</string>
<string name="label_label">Etiqueta</string>
<string name="label_algorithm">Algorisme</string>
<string name="label_tags">Etiquetes</string>
@ -37,14 +37,21 @@
<string name="menu_main_settings">Configuració</string>
<string name="menu_main_sort">Ordena</string>
<string name="menu_sort_none">Sense ordenar</string>
<string name="menu_sort_issuer">Issuer</string>
<string name="menu_sort_issuer">Emissor</string>
<string name="menu_sort_label">Etiqueta</string>
<string name="menu_sort_last_used">Últimes utilitzades</string>
<string name="menu_sort_most_used">Most used</string>
<string name="menu_popup_edit">Edit</string>
<string name="menu_sort_most_used">Més utilitzades</string>
<string name="menu_popup_edit">Edita</string>
<string name="menu_popup_change_image">Canvia la imatge</string>
<string name="menu_popup_remove">Suprimeix</string>
<string name="menu_popup_show_qr_code">Show QR Code</string>
<string name="menu_popup_show_qr_code">Mostra el codi QR</string>
<!-- Buttons -->
<string name="button_card_options">Més opcions</string>
<string name="button_card_options_format">Més opcions per a %1$s</string>
<string name="button_card_copy">Copia el testimoni</string>
<string name="button_card_copy_format">Copia el testimoni de %1$s</string>
<string name="button_add">Afegeix un compte nou</string>
<string name="button_close_menu">Tanca el menú</string>
<!-- Toast messages -->
<string name="toast_auth_failed">Error d\'autenticació. Torneu-ho a intentar!</string>
<string name="toast_auth_failed_fatal">L\'autenticació ha fallat, andOTP es tancarà!</string>
@ -52,44 +59,38 @@
<string name="toast_entry_exists">Aquest element ja existeix</string>
<string name="toast_invalid_qr_code">Codi QR no vàlid</string>
<string name="toast_encryption_key_empty">No s\'ha carregat la clau de xifratge</string>
<string name="toast_intent_creation_failed">Invalid intent-provided code</string>
<string name="toast_intent_creation_succeeded">Intent-provided code added</string>
<string name="toast_file_load_error">Could not open the file</string>
<string name="toast_qr_error">Could not find/confirm QR code</string>
<string name="toast_qr_checksum_exception">Checksum verification failed while decoding QR code</string>
<string name="toast_qr_format_error">Format error in QR code</string>
<string name="toast_qr_unsuported">QR Code not supported</string>
<string name="toast_qr_failed_to_generate">Failed to generate QR Code</string>
<string name="toast_intent_creation_failed">El codi passat per l\'aplicació no és vàlid</string>
<string name="toast_intent_creation_succeeded">S\'ha afegit un codi proporcionat per una aplicació</string>
<string name="toast_file_load_error">No ha estat possible obrir el fitxer</string>
<string name="toast_qr_error">No ha estat possible trobar/confirmar el codi QR</string>
<string name="toast_qr_checksum_exception">La suma de verificació ha fallat mentre descodificava el QR</string>
<string name="toast_qr_format_error">Error de format en el codi QR</string>
<string name="toast_qr_unsuported">Codi QR no suportat</string>
<string name="toast_qr_failed_to_generate">La generació del codi QR ha fallat</string>
<!-- Errors -->
<string name="error_invalid_secret">Invalid secret</string>
<string name="error_invalid_secret">Clau invàlida</string>
<!-- Dialogs -->
<string name="dialog_title_auth">Autentica</string>
<string name="dialog_title_manual_entry">Introduïu-ne els detalls</string>
<string name="dialog_title_remove">Suprimeix</string>
<string name="dialog_title_rename">Canvia el nom</string>
<string name="dialog_title_counter">Comptador</string>
<string name="dialog_title_used_tokens">Tokens usage</string>
<string name="dialog_title_used_tokens">Ús de testimonis</string>
<string name="dialog_title_keystore_error">Error al magatzem de claus</string>
<string name="dialog_title_qr_code">QR Code</string>
<string name="dialog_title_android21_depreaction">Deprecation notice</string>
<string name="dialog_title_qr_code">Codi QR</string>
<string name="dialog_title_enter_password">Introduïu la contrasenya</string>
<string name="dialog_label_enter_password">Introduïu la contrasenya</string>
<string name="dialog_label_confirm_password">Confirmeu la contrasenya</string>
<string name="dialog_msg_auth">Per favor, introduïu les vostres credencials per a iniciar andOTP.</string>
<string name="dialog_msg_confirm_delete">Segur que voleu suprimir el compte \"%1$s\"?</string>
<string name="dialog_msg_used_tokens">andOTP will track when you use your tokens (using the \"Tap
to reveal\" feature or copying to clipboard) to be able to sort them by \"Most used\" or
\"Last used\".\n\nThis message will not be shown again.</string>
<string name="dialog_msg_used_tokens">andOTP registrarà quan feu servir els testimonis (quan feu servir
«Toqueu per a mostrar» o copieu al portaretalls) per tal d\'ordenar-los per nombre d\'usos o
últim ús.\n\nAquest missatge no tornarà a aparèixer.</string>
<string name="dialog_msg_keystore_error">No s\'ha pogut carregar la clau de xifratge del KeyStore.
<b>Qualsevol entrada que s\'hi hagin afegit es perdrà.</b>\n\nPer a continuar usant andOTP, podeu
anar a la <b>Configuració</b> i canviar el <b>xifratge de la base de dades</b> a <b>Contrasenyes / PIN</b>.</string>
<string name="dialog_msg_android21_deprecation">This will be the last version of andOTP to
support Android versions below 5.1 (Lollipop). The increased effort required to maintain a
separate storage implementation just for those older versions as well as their low market
shares make a continued support infeasible for our small team.\n\nThis message will not be
shown again.</string>
<!-- Shortcuts -->
<string name="shortcut_name_scan_qr">Escaneja un codi QR</string>
<string name="shortcut_name_import_qr">Import QR code</string>
<string name="shortcut_name_import_qr">Importa un codi QR</string>
<string name="shortcut_name_enter_details">Introduïu-ne els detalls</string>
</resources>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="settings_activity_title">Configuració</string>
<string name="settings_activity_title">Preferències</string>
<!-- Categories -->
<string name="settings_category_title_security">Seguretat</string>
<string name="settings_category_title_ui">Interfície d\'usuari</string>
@ -13,35 +13,36 @@
<string name="settings_title_auth_pin">PIN</string>
<string name="settings_title_encryption">Xifratge de la base de dades</string>
<string name="settings_title_panic">Botó del pànic</string>
<string name="settings_title_relock_screen_off">Re-lock on screen off</string>
<string name="settings_title_relock_background">Re-lock when going into the background</string>
<string name="settings_title_auth_inactivity">Re-lock on inactivity</string>
<string name="settings_title_auth_inactivity_delay">Delay for inactivity re-lock</string>
<string name="settings_title_block_accessibility">Block accessibility services</string>
<string name="settings_title_relock_screen_off">Torna a blocar quan s\'apaga la pantalla</string>
<string name="settings_title_relock_background">Torna a blocar quan l\'aplicació va a segon pla</string>
<string name="settings_title_auth_inactivity">Torna a blocar després d\'un període d\'inactivitat</string>
<string name="settings_title_auth_inactivity_delay">Temps d\'espera per al blocat per inactivitat</string>
<string name="settings_title_block_accessibility">Bloca els serveis d\'accessibilitat</string>
<string name="settings_title_block_autofill">Bloca l\'emplenament automàtic</string>
<string name="settings_title_lang">Idioma</string>
<string name="settings_title_theme">Tema</string>
<string name="settings_title_card_layout">Card layout</string>
<string name="settings_title_card_layout">Disposició de les targetes</string>
<string name="settings_title_label_size">Mida de la lletra de l\'etiqueta</string>
<string name="settings_title_label_scroll">Permet el desplaçament a les etiquetes</string>
<string name="settings_title_tap_single">Single-tap</string>
<string name="settings_title_tap_double">Double-tap</string>
<string name="settings_title_tap_single">Un toc</string>
<string name="settings_title_tap_double">Doble toc</string>
<string name="settings_title_thumbnail_size_ask">Mida de la miniatura</string>
<string name="settings_title_split_group_size">Separa el testimoni amb espais</string>
<string name="settings_title_tag_functionality">Tag selection behavior</string>
<string name="settings_title_minimize_on_copy">Minimize app after copying OTP</string>
<string name="settings_title_search_includes">Search behavior</string>
<string name="settings_title_label_highlight_token">Highlight expiring tokens</string>
<string name="settings_title_hide_global_timeout">Hide global timeout bar</string>
<string name="settings_title_show_individual_timeouts">Show individual timeouts</string>
<string name="settings_title_backup_append_date">Append date to filename</string>
<string name="settings_title_tag_functionality">Comportament de la selecció de les etiquetes</string>
<string name="settings_title_minimize_on_copy">Minimitza l\'aplicació després de copiar l\'OTP</string>
<string name="settings_title_search_includes">Comportament de la cerca</string>
<string name="settings_title_label_highlight_token">Destaca els testimonis que caduquen</string>
<string name="settings_title_hide_global_timeout">Amaga la barra global de temps d\'espera</string>
<string name="settings_title_show_individual_timeouts">Mostra els temps d\'espera individuals</string>
<string name="settings_title_backup_append_date">Afegeix la data al nom del fitxer</string>
<string name="settings_title_backup_ask">Demana el nom de fitxer</string>
<string name="settings_title_backup_directory">Directori de còpia de seguretat</string>
<string name="settings_title_backup_location">Localització per defecte per a les còpies de seguretat</string>
<string name="settings_title_backup_password">Contrasenya de la còpia de seguretat</string>
<string name="settings_title_auto_backup_password_enc">Automatically backup on new entries</string>
<string name="settings_title_auto_backup_password_enc">Fes una còpia de seguretat en crear una nova entrada</string>
<string name="settings_title_backup_broadcasts">Backup Broadcasts</string>
<string name="settings_title_openpgp_provider">OpenPGP provider</string>
<string name="settings_title_openpgp_key_encrypt">OpenPGP encryption key</string>
<string name="settings_title_openpgp_key_sign">OpenPGP signing key (optional)</string>
<string name="settings_title_openpgp_provider">Proveïdor dOpenPGP</string>
<string name="settings_title_openpgp_key_encrypt">Clau de xifrat d\'OpenPGP</string>
<string name="settings_title_openpgp_key_sign">Clau de signat d\'OpenPGP (opcional)</string>
<string name="settings_title_openpgp_verify">Verifica les còpies de seguretat xifrades</string>
<string name="settings_title_special_features">Habilita les característiques especials</string>
<string name="settings_title_enable_screenshot">Permet screenshots</string>
@ -53,41 +54,49 @@
<string name="settings_desc_tap_to_reveal_timeout">Indiqueu durant quant de temps (en segons)
es mostraran les entrades</string>
<string name="settings_desc_panic">Decidiu què fer quan es prem el botó del pànic</string>
<string name="settings_desc_relock_screen_off">Require authentication after the devices screen
has been turned off</string>
<string name="settings_desc_relock_background">Require authentication after the app was sent to
the background (e.g. by pressing the home button)</string>
<string name="settings_desc_auth_inactivity">Require authentication after the device has been
inactive</string>
<string name="settings_desc_auth_inactivity_delay">Select the time (in sec) after which to
require reauthentication</string>
<string name="settings_desc_block_accessibility">Hide sensitive fields from the accessibility
services. <b>DO NOT enable this if you rely on the accessibility services!</b></string>
<string name="settings_desc_relock_screen_off">Demana autenticació després que la pantalla
s\'hagi apagat</string>
<string name="settings_desc_relock_background">Demana autenticació després que l\'aplicació
se\'n vagi a segon pla (p. ex. prement el botó «inici»)</string>
<string name="settings_desc_auth_inactivity">Demana autenticació després que el dispositiu ha
estat inactiu</string>
<string name="settings_desc_auth_inactivity_delay">Indiqueu després quant de temps (en segons)
es demanarà reautenticació</string>
<string name="settings_desc_block_accessibility">Oculta els camps sensibles als serveis
d\'accessibilitat. <b>NO l\'activeu si us calen els serveis d\'accessibilitat</b></string>
<string name="settings_desc_block_autofill">Bloca l\'accés dels serveis d\'emplenament automàtic
als camps de contrasenya en l\'aplicació</string>
<string name="settings_desc_block_autofill_android">Aquesta característica exigeix una versió d\'Android
superior a la 8.0 (Oreo)</string>
<string name="settings_desc_label_scroll">Les etiquetes llargues es desplacen en comptes de truncar-les</string>
<string name="settings_desc_minimize_on_copy">App will be minimized when you copy the OTP to clipboard</string>
<string name="settings_desc_search_includes">Specify which values should be included when searching</string>
<string name="settings_desc_label_highlight_token">Highlights token in red if it\'s expiring in 8 seconds</string>
<string name="settings_desc_hide_global_timeout">Hide the global timeout bar shown at the top of the screen</string>
<string name="settings_desc_show_individual_timeouts">Show an individual timeout bar for every entry.
This can slow down the app, only enable if really necessary.</string>
<string name="settings_desc_backup_append_date">Append the current date and time to the suggested
backup filename</string>
<string name="settings_desc_minimize_on_copy">L\'aplicació es minimitzarà després d\'haver copiat l\'OTP al portaretalls</string>
<string name="settings_desc_search_includes">Especifiqueu quins valors haurien de ser inclosos en la cerca</string>
<string name="settings_desc_label_highlight_token">Destaca el testimoni en vermell si caduca en 8 segons</string>
<string name="settings_desc_hide_global_timeout">Amaga la barra global de temps d\'espera en la part superior de la pantalla</string>
<string name="settings_desc_show_individual_timeouts">Mostra una barra de temps d\'espera per a cada entrada.
Això pot alentir l\'aplicació, activeu-la només si realment us cal.</string>
<string name="settings_desc_backup_append_date">Afegeix la data i hora actuals al nom suggerit per
al fitxer de còpia de seguretat</string>
<string name="settings_desc_backup_ask">Demana el nom del fitxer cada vegada que es crea o restaura una còpia de seguretat</string>
<string name="settings_desc_backup_location">Tria una localització per defecte per a les còpies de seguretat</string>
<string name="settings_desc_backup_location_set">S\'ha triat la localització per a les còpies de seguretat</string>
<string name="settings_desc_backup_password">Contrasenya que s\'usarà per a xifrar les
còpies de seguretat</string>
<string name="settings_desc_auto_backup_password_enc">Creates a new encrypted backup when new
entries are added, or edited, if settings conditions are met</string>
<string name="settings_desc_auto_backup_password_enc">Crea una còpia de seguretat nova quan s\'afegeixin o
editin entrades, si s\'hi compleixen les condicions</string>
<string name="settings_desc_auto_backup_requirements">Trieu una localització per defecte per a les còpies de seguretat i
una contrasenya per a activar aquesta opció</string>
<string name="settings_desc_backup_broadcasts">Select which backup types can be triggered by
3rd-party apps using Broadcasts</string>
<string name="settings_desc_openpgp_key_encrypt">Mail address of the OpenPGP key used to encrypt
the backups</string>
<string name="settings_desc_openpgp_verify">Només s\'importaran còipes xifrades si s\'han
<string name="settings_desc_openpgp_key_encrypt">Adreça de correu de la clau OpenPGP usada per a
xifrar les còpies de seguretat</string>
<string name="settings_desc_openpgp_verify">Només s\'importaran còpies xifrades si s\'han
signat amb una clau vàlida</string>
<string name="settings_desc_special_features">Desmarqueu per a deshabilitar les característiques especials</string>
<string name="settings_desc_enable_screenshot">Permet fer captures de la pantalla principal
(desactivat per defecte per motius de seguretat)</string>
<string name="settings_desc_enable_android_backup_service">Enables andOTP to use Android\'s
built in backup service to backup keys and preferences</string>
<string name="settings_desc_enable_android_backup_service">Permet que andOTP faci servir el servei de còpies de seguretat
inclòs a Android per a desar les claus i les preferències</string>
<string name="settings_desc_clear_keystore">Esborra la clau d\'encriptació del magatzem de claus</string>
<!-- Toasts -->
<string name="settings_toast_auth_device_not_secure">Aquesta característica requereix un bloqueig de pantalla
@ -106,10 +115,10 @@
<string name="settings_toast_encryption_auth_failed">Ha fallat l\'autenticació!</string>
<string name="settings_toast_auth_upgrade_failed">Ha fallat l\'actualització automàtica de la contrasenya / PIN
per al nou xifratge; per favor, reinicialitzeu-la manualment en la configuració!</string>
<string name="settings_dialog_title_warning">Warning</string>
<string name="settings_dialog_title_warning">Alerta</string>
<string name="settings_dialog_title_error">Error</string>
<string name="settings_dialog_title_clear_keystore">Voleu neteja el magatzem de claus?</string>
<string name="settings_dialog_title_android_sync">Android sync</string>
<string name="settings_dialog_title_android_sync">Sistema de còpies de seguretat d\'Android</string>
<string name="settings_dialog_msg_encryption_change">andOTP will now try to change the database
encryption. In case of a failure an internal backup will be restored and the encryption
remains unchanged.\n\n<b>However, it\'s always a good idea to have a backup in case
@ -145,25 +154,25 @@
<item>Reinicialitza les opcions de l\'aplicació</item>
</string-array>
<string-array name="settings_entries_card_layout">
<item>Compact</item>
<item>Default</item>
<item>Full</item>
<item>Compacte</item>
<item>Per defecte</item>
<item>Complet</item>
</string-array>
<string-array name="settings_entries_tap">
<item>Nothing</item>
<item>Reveal/Hide</item>
<item>Copy</item>
<item>Copy and go to background</item>
<item>Res</item>
<item>Mostra/Oculta</item>
<item>Copia</item>
<item>Copia i passa a segon pla</item>
</string-array>
<string-array name="settings_entries_search_includes">
<item>Label</item>
<item>Issuer</item>
<item>Tags</item>
<item>Etiqueta</item>
<item>Emissor</item>
<item>Etiquetes</item>
</string-array>
<string-array name="settings_entries_auto_backup_password_enc">
<item>Off</item>
<item>New Entries</item>
<item>Any Edits</item>
<item>Entrada nova</item>
<item>Totes les edicions</item>
</string-array>
<string-array name="settings_entries_theme">
<item>Tema clar</item>
@ -172,11 +181,11 @@
</string-array>
<string-array name="settings_entries_thumbnail_size">
<item>Ocult</item>
<item>Tiny</item>
<item>Small</item>
<item>Default</item>
<item>Medium</item>
<item>Large</item>
<item>Molt petita</item>
<item>Petita</item>
<item>Per defecte</item>
<item>Mitjana</item>
<item>Grossa</item>
</string-array>
<string-array name="settings_entries_split_group_size">
<item>No dividir</item>
@ -184,13 +193,13 @@
<item>Després de tres caràcters</item>
</string-array>
<string-array name="settings_entries_tag_functionality">
<item>Show all entries matching <b>any</b> of the selected tags (or)</item>
<item>Only show entries matching <b>all</b> of the selected tags (and)</item>
<item>Switch between tags (only allow one tag to be selected at a time)</item>
<item>Mostra totes les entrades en què hi ha <b>alguna</b> de les etiquetes (OR)</item>
<item>Mostra totes les entrades en què apareixen <b>totes</b> les etiquetes (AND)</item>
<item>Commuta entre etiquetes (només permet de seleccionar una etiqueta cada vegada)</item>
</string-array>
<string-array name="settings_entries_backup_broadcasts">
<item>Plain-text backups</item>
<item>Encrypted backups</item>
<item>Còpies de seguretat en text pla</item>
<item>Còpies de seguretat xifrada</item>
</string-array>
<!-- Special -->
<string name="settings_lang_sys_default">Valor del sistema per defecte</string>

View file

@ -6,7 +6,7 @@
<string name="auth_hint_pin">PIN</string>
<!-- Messages -->
<string name="auth_msg_authenticate">Přihlašte se pro spuštění andOTP!</string>
<string name="auth_msg_confirm_encryption">Prosím potvrďte své přihlášení pro vygenerování nového šifrovacího klíče!</string>
<string name="auth_msg_confirm_encryption">Pro vygenerování šifrovacího klíče prosím potvrďte své přihlášení!</string>
<!-- Buttons -->
<string name="auth_button_unlock">Odemknout</string>
<!-- Toast messages -->

View file

@ -35,17 +35,15 @@ který byl vytvořen pomocí <b>verze andOTP nižší než 0.6.3</b></string>
<string name="backup_receiver_read_permission_failed">Nebylo uděleno oprávnění ke čtení, prosím udělte ho před pokusem o zálohování</string>
<string name="backup_receiver_write_permission_failed">Nebylo uděleno oprávnění k zápisu, prosím udělte ho před pokusem o zálohování</string>
<string name="backup_receiver_custom_encryption_failed">Šifrování heslem/PINem není podporováno v kombinaci s automatizovaným zálohováním</string>
<string name="backup_new_format_dialog_title">Nová metoda šifrování</string>
<string name="backup_new_format_dialog_msg">Od veze 0.6.3 se pro ochranu heslem používá <b>nová a vylepšená metoda šifrování</b>
Stále lze importovat staré zálohy, ale <b> velmi se doporučuje vytvořit novou zálohu s vylepšeným šifrováním</b>.
\n\nTato zpráva se již nezobrazí.</string>
<!-- Notification channels -->
<string name="notification_channel_name_backup_failed">Automatické zálohování selhalo</string>
<string name="notification_channel_name_backup_success">Automatické zálohování proběhlo úspěšně</string>
<string name="notification_channel_desc_backup_failed">Tato upozornění se zobrazí, když automatické zálohování z nějakého důvodu selže</string>
<string name="notification_channel_desc_backup_success">Tato upozornění se zobrazí, když automatické zálohování proběhne úspěšně</string>
<!-- Toast messages -->
<string name="backup_toast_mkdir_failed">Nepodařilo se vytvořit záložní adresář</string>
<string name="backup_toast_no_location">Prosím nastavte výchozí umístění zálohy v nastavení!</string>
<string name="backup_toast_location_access_failed">Nepodařilo se získat přístup k umístění zálohy!</string>
<string name="backup_toast_file_creation_failed">Nepodařilo se vytvořit soubor zálohy!</string>
<string name="backup_toast_export_success">Export na externí úložiště byl úspěšný</string>
<string name="backup_toast_export_failed">Export na externí úložiště selhal</string>
<string name="backup_toast_import_success">Import z externího úložiště byl úspěšný</string>
@ -53,7 +51,6 @@ Stále lze importovat staré zálohy, ale <b> velmi se doporučuje vytvořit nov
<string name="backup_toast_import_decryption_failed">Dešifrování zálohy se nezdařilo</string>
<string name="backup_toast_import_no_entries">V importovaných datech nebyly nalezeny žádné záznamy</string>
<string name="backup_toast_storage_not_accessible">Externí úložiště teď není dostupné</string>
<string name="backup_toast_storage_permissions">Oprávnění pro úložiště nebylo uděleno</string>
<string name="backup_toast_openpgp_error">Chyba OpenPGP: %s</string>
<string name="backup_toast_openpgp_not_verified">Nenalezen ověřený podpis</string>
<string name="backup_toast_crypt_password_not_set">Heslo není nastaveno, zkontrolujte <b>Nastavení</b></string>

View file

@ -41,10 +41,17 @@
<string name="menu_sort_label">Popis</string>
<string name="menu_sort_last_used">Naposledy použité</string>
<string name="menu_sort_most_used">Nejpoužívanější</string>
<string name="menu_popup_edit">Edit</string>
<string name="menu_popup_edit">Upravit</string>
<string name="menu_popup_change_image">Změnit obrázek</string>
<string name="menu_popup_remove">Smazat</string>
<string name="menu_popup_show_qr_code">Ukaž QR kód</string>
<!-- Buttons -->
<string name="button_card_options">Další volby</string>
<string name="button_card_options_format">Další volby pro %1$s</string>
<string name="button_card_copy">Kopírovat token</string>
<string name="button_card_copy_format">Kopírovat %1$s token</string>
<string name="button_add">Přidat nový účet</string>
<string name="button_close_menu">Zavřít nabídku</string>
<!-- Toast messages -->
<string name="toast_auth_failed">Chyba ověření, zkuste to prosím znovu!</string>
<string name="toast_auth_failed_fatal">Ověření se nezdařilo, zavírám andOTP!</string>
@ -68,25 +75,19 @@
<string name="dialog_title_remove">Smazat</string>
<string name="dialog_title_rename">Přejmenování</string>
<string name="dialog_title_counter">Počítadlo</string>
<string name="dialog_title_used_tokens">Tokens usage</string>
<string name="dialog_title_used_tokens">Využití tokenů</string>
<string name="dialog_title_keystore_error">Chyba úložiště klíčů</string>
<string name="dialog_title_qr_code">QR kód</string>
<string name="dialog_title_android21_depreaction">Oznámení o ukončení podpory</string>
<string name="dialog_title_enter_password">Zadejte heslo</string>
<string name="dialog_label_enter_password">Zadejte heslo</string>
<string name="dialog_label_confirm_password">Potvrďte heslo</string>
<string name="dialog_msg_auth">Prosím zadejte heslo zařízení ke spuštění andOTP.</string>
<string name="dialog_msg_confirm_delete">Jste si jistí, že chcete odebrat účet \"%1$s\"?</string>
<string name="dialog_msg_used_tokens">andOTP will track when you use your tokens (using the \"Tap
to reveal\" feature or copying to clipboard) to be able to sort them by \"Most used\" or
\"Last used\".\n\nThis message will not be shown again.</string>
<string name="dialog_msg_used_tokens">andOTP bude sledovat, když použijete své tokeny (pomocí funkce \"Klepněte
pro odhalení\" nebo je zkopírujete do schránky), abyste je mohli řadit podle \"Nejčastěji používaných\" nebo
\"Naposledy použito\".\n\nTato zpráva nebude znovu zobrazena.</string>
<string name="dialog_msg_keystore_error">Nepodařilo se načíst šifrovací klíč z KeyStore.
<b>Veškeré přidané položky budou ztraceny.</b> \n\nPro zajištění použitelnosti andOTP v <b>Nastavení</b> přepněte <b>Šifrování databáze</b> na <b>heslo / PIN</b>.</string>
<string name="dialog_msg_android21_deprecation">This will be the last version of andOTP to
support Android versions below 5.1 (Lollipop). The increased effort required to maintain a
separate storage implementation just for those older versions as well as their low market
shares make a continued support infeasible for our small team.\n\nThis message will not be
shown again.</string>
<!-- Shortcuts -->
<string name="shortcut_name_scan_qr">Načíst QR kód</string>
<string name="shortcut_name_import_qr">Importovat QR kód</string>

View file

@ -18,24 +18,25 @@
<string name="settings_title_auth_inactivity">Zamknout při nečinnosti</string>
<string name="settings_title_auth_inactivity_delay">Zpoždění zámku při neaktivitě</string>
<string name="settings_title_block_accessibility">Blokovat služby usnadnění přístupu</string>
<string name="settings_title_block_autofill">Blokovat automatické vyplňování</string>
<string name="settings_title_lang">Jazyk</string>
<string name="settings_title_theme">Vzhled</string>
<string name="settings_title_card_layout">Rozložení karet</string>
<string name="settings_title_label_size">Velikost písma popisku</string>
<string name="settings_title_label_scroll">Pohybující se popisky</string>
<string name="settings_title_tap_single">Single-tap</string>
<string name="settings_title_tap_double">Double-tap</string>
<string name="settings_title_tap_single">Jedno klepnutí</string>
<string name="settings_title_tap_double">Dvojí poklepání</string>
<string name="settings_title_thumbnail_size_ask">Velikost náhledu</string>
<string name="settings_title_split_group_size">Rozdělit token mezerami</string>
<string name="settings_title_tag_functionality">Chování výběru štítků</string>
<string name="settings_title_minimize_on_copy">Minimalizovat aplikaci po zkopírování OTP</string>
<string name="settings_title_search_includes">Způsob vyhledávání</string>
<string name="settings_title_label_highlight_token">Zvýraznit tokeny s končící platností</string>
<string name="settings_title_hide_global_timeout">Hide global timeout bar</string>
<string name="settings_title_show_individual_timeouts">Show individual timeouts</string>
<string name="settings_title_hide_global_timeout">Skrýt společnou časovou lištu</string>
<string name="settings_title_show_individual_timeouts">Zobrazit individuální časové limity</string>
<string name="settings_title_backup_append_date">Přidání data k názvu souboru</string>
<string name="settings_title_backup_ask">Zadejte název souboru</string>
<string name="settings_title_backup_directory">Adresář záloh</string>
<string name="settings_title_backup_location">Výchozí umístění zálohy</string>
<string name="settings_title_backup_password">Heslo pro zálohu</string>
<string name="settings_title_auto_backup_password_enc">Automaticky zálohovat při přidání nových položek</string>
<string name="settings_title_backup_broadcasts">Příkazy k zálohování</string>
@ -56,17 +57,24 @@
<string name="settings_desc_auth_inactivity">Vyžadovat přihlášení poté, co bylo zařízení neaktivní</string>
<string name="settings_desc_auth_inactivity_delay">Zvolte čas v sekundách, po kterém bude opět potřeba přihlášení</string>
<string name="settings_desc_block_accessibility">Skrýt pole s citlivými informacemi před službami pro usnadnění přístupu. <b>NEAKTIVUJTE pokud spoléháte na služby usnadnění přístupu!</b></string>
<string name="settings_desc_block_autofill">Blokovat službám automatického vyplňování přístup k polím sloužícím k zadání
hesla uvnitř aplikace</string>
<string name="settings_desc_block_autofill_android">Tato funkce vyžaduje vyšší verzi Android
než 8.0 (Oreo)</string>
<string name="settings_desc_label_scroll">Posouvat příliš dlouhé popisky namísto zkracování</string>
<string name="settings_desc_minimize_on_copy">Aplikace bude minimalizována, když zkopírujete OTP do schránky</string>
<string name="settings_desc_search_includes">Určete, které hodnoty by měly být zahrnuty při hledání</string>
<string name="settings_desc_label_highlight_token">Zvýraznit token červeně, pokud vyprší do 8 sekund</string>
<string name="settings_desc_hide_global_timeout">Hide the global timeout bar shown at the top of the screen</string>
<string name="settings_desc_show_individual_timeouts">Show an individual timeout bar for every entry.
This can slow down the app, only enable if really necessary.</string>
<string name="settings_desc_hide_global_timeout">Skrýt společnou časovou lištu v horní části obrazovky</string>
<string name="settings_desc_show_individual_timeouts">Zobrazit individuální časový limit pro každý záznam.
Může to zpomalit aplikaci, povolte, pouze pokud je to opravdu nutné.</string>
<string name="settings_desc_backup_append_date">Přidá aktuální datum a čas k navrhovanému názvu záložního souboru</string>
<string name="settings_desc_backup_ask">Dotazovat se na název souboru vždy při vytváření či obnovování zálohy</string>
<string name="settings_desc_backup_location">Zvolte výchozí umístění zálohy</string>
<string name="settings_desc_backup_location_set">Umístění zálohy bylo vybráno</string>
<string name="settings_desc_backup_password">Nastaví heslo používané k šifrování záloh</string>
<string name="settings_desc_auto_backup_password_enc">Vytvoří novou šifrovanou zálohu při vytvoření či úpravě položek, když jsou splněny podmínky z nastavení</string>
<string name="settings_desc_auto_backup_requirements">Pro povolení této volby nastavte umístění zálohy a heslo pro zálohu</string>
<string name="settings_desc_backup_broadcasts">Vyberte, které typy zálohování můžou být spuštěny pomocí příkazů od aplikací třetí strany</string>
<string name="settings_desc_openpgp_key_encrypt">E-mailová adresa OpenPGP klíče použitého k šifrování záloh</string>
<string name="settings_desc_openpgp_verify">Šifrované zálohy jsou importovány pouze, jsou-li podepsány platným klíčem</string>
@ -117,10 +125,10 @@ V případě chyby bude obnovena interní záloha a šifrování zůstane nezmě
<item>Plná</item>
</string-array>
<string-array name="settings_entries_tap">
<item>Nothing</item>
<item>Reveal/Hide</item>
<item>Copy</item>
<item>Copy and go to background</item>
<item>Nic</item>
<item>Zobrazit/skrýt</item>
<item>Kopírovat</item>
<item>Kopírovat a přejít na pozadí</item>
</string-array>
<string-array name="settings_entries_search_includes">
<item>Popisek</item>

View file

@ -6,7 +6,8 @@
<string name="auth_hint_pin">PIN</string>
<!-- Messages -->
<string name="auth_msg_authenticate">Bitte authentifizieren Sie sich, um andOTP zu starten!</string>
<string name="auth_msg_confirm_encryption">Bitte bestätigen Sie Ihre Authentifizierung um den neuen Verschlüsselungsschlüssel zu generieren!</string>
<string name="auth_msg_confirm_encryption">Bitte bestätigen Sie die Authentifizierung, um Ihren
Schlüssel zu generieren!</string>
<!-- Buttons -->
<string name="auth_button_unlock">Entsperren</string>
<!-- Toast messages -->

View file

@ -42,18 +42,15 @@
zum Sichern benötigt</string>
<string name="backup_receiver_custom_encryption_failed">Passwort/PIN Verschlüsselung ist nicht
unterstützt mit Broadcast Datensicherung</string>
<string name="backup_new_format_dialog_title">Neue Verschlüsselungsmethode</string>
<string name="backup_new_format_dialog_msg">Seit Version 0.6.3 von andOTP, wird eine <b>neue und verbesserte
Verschlüsselungsmethode</b> für passwortgeschützte Datensicherungen benutzt. Alte Datensicherungen
können weiterhin importiert werden, aber es wird <b>nachdrücklich empfohlen neue Datensicherungen mit
der verbesserten Verschlüsselung zu erstellen</b>.\n\nDiese Nachricht wird nicht erneut angezeigt.</string>
<!-- Notification channels -->
<string name="notification_channel_name_backup_failed">Automatische Sicherung fehlgeschlagen</string>
<string name="notification_channel_name_backup_success">Automatische Sicherung erfolgreich</string>
<string name="notification_channel_desc_backup_failed">Diese Mitteilungen werden angezeigt, wenn eine automatische Sicherung aus irgendeinem Grund fehlgeschlagen ist.</string>
<string name="notification_channel_desc_backup_success">Diese Mitteilungen werden angezeigt, wenn eine automatische Sicherung erfolgreich war.</string>
<!-- Toast messages -->
<string name="backup_toast_mkdir_failed">Erstellen des Backup-Verzeichnisses fehlgeschlagen</string>
<string name="backup_toast_no_location">Bitte legen Sie einen Standard-Sicherungsort in den Einstellungen fest!</string>
<string name="backup_toast_location_access_failed">Zugriff auf Sicherungsort fehlgeschlagen!</string>
<string name="backup_toast_file_creation_failed">Fehler beim Erstellen der Sicherungsdatei!</string>
<string name="backup_toast_export_success">Export auf externen Speicher erfolgreich</string>
<string name="backup_toast_export_failed">Export auf externen Speicher fehlgeschlagen</string>
<string name="backup_toast_import_success">Import vom externen Speicher erfolgreich</string>
@ -61,7 +58,6 @@
<string name="backup_toast_import_decryption_failed">Entschlüsselung des Backups ist fehlgeschlagen</string>
<string name="backup_toast_import_no_entries">In den importierten Daten wurden keine Einträge gefunden</string>
<string name="backup_toast_storage_not_accessible">Externer Speicher derzeit nicht zugreifbar</string>
<string name="backup_toast_storage_permissions">Speicherberechtigung nicht gewährt</string>
<string name="backup_toast_openpgp_error">OpenPGP-Fehler: %s</string>
<string name="backup_toast_openpgp_not_verified">Keine geprüfte Signatur erkannt</string>
<string name="backup_toast_crypt_password_not_set">Kein Passwort gesetzt, überprüfe die <b>Einstellungen</b></string>

View file

@ -45,6 +45,13 @@
<string name="menu_popup_change_image">Bild ändern</string>
<string name="menu_popup_remove">Entfernen</string>
<string name="menu_popup_show_qr_code">Zeige QR-Code</string>
<!-- Buttons -->
<string name="button_card_options">Weitere Optionen</string>
<string name="button_card_options_format">Weitere Optionen für %1$s</string>
<string name="button_card_copy">Token kopieren</string>
<string name="button_card_copy_format">%1$s Token kopieren</string>
<string name="button_add">Neues Konto hinzufügen</string>
<string name="button_close_menu">Menü schließen</string>
<!-- Toast messages -->
<string name="toast_auth_failed">Authentifizierung fehlgeschlagen, bitte erneut versuchen!</string>
<string name="toast_auth_failed_fatal">Authentifizierung fehlgeschlagen, andOTP wird geschlossen!</string>
@ -71,7 +78,6 @@
<string name="dialog_title_used_tokens">Verwendete Token</string>
<string name="dialog_title_keystore_error">KeyStore Fehler</string>
<string name="dialog_title_qr_code">QR-Code</string>
<string name="dialog_title_android21_depreaction">Hinweis</string>
<string name="dialog_title_enter_password">Passwort eingeben</string>
<string name="dialog_label_enter_password">Passwort eingeben</string>
<string name="dialog_label_confirm_password">Passwort bestätigen</string>
@ -81,11 +87,6 @@
um anzuzeigen\" verwenden oder die sie in die Zwischenablage kopieren), um sie nach \"meistbenutzt\" oder
\"zuletzt verwendet\" zu sortieren.\n\nDiese Nachricht wird nicht wieder angezeigt.</string>
<string name="dialog_msg_keystore_error">Fehler beim Laden des Verschlüsselungsschlüssels aus dem KeyStore. <b>Alle Einträge, die hinzugefügt werden, gehen verloren.</b>\n\nUm andOTP dennoch verwenden zu können, rufe die <b>Einstellungen</b> auf und setze die <b>Datenbank-Verschlüsselung</b> auf <b>Passwort / PIN</b>.</string>
<string name="dialog_msg_android21_deprecation">Dies wird die letzte Version von andOTP sein, die
Android-Versionen niedriger als 5.1 (Lollipop) unterstützt. Der erhöhte Aufwand zur Aufrechterhaltung einer separaten
Speicherimplementierung nur für diese älteren Versionen und deren geringer Marktanteil
machen eine fortgesetzte Unterstützung für unser kleines Team unmöglich.\n\nDiese Nachricht wird nicht erneut
angezeigt.</string>
<!-- Shortcuts -->
<string name="shortcut_name_scan_qr">QR-Code scannen</string>
<string name="shortcut_name_import_qr">QR-Code importieren</string>

View file

@ -18,6 +18,7 @@
<string name="settings_title_auth_inactivity">Bei Inaktivität sperren</string>
<string name="settings_title_auth_inactivity_delay">Zeit bis zur Inaktivitätssperre</string>
<string name="settings_title_block_accessibility">Eingabehilfen blockieren</string>
<string name="settings_title_block_autofill">Autofill verhindern</string>
<string name="settings_title_lang">Sprache</string>
<string name="settings_title_theme">Design</string>
<string name="settings_title_card_layout">Kartenlayout</string>
@ -35,7 +36,7 @@
<string name="settings_title_show_individual_timeouts">Individuelle Timeouts anzeigen</string>
<string name="settings_title_backup_append_date">Datum an den Dateinamen anhängen</string>
<string name="settings_title_backup_ask">Nach Dateinamen fragen</string>
<string name="settings_title_backup_directory">Sicherungsverzeichnis</string>
<string name="settings_title_backup_location">Standard-Sicherungsort</string>
<string name="settings_title_backup_password">Datensicherungs-Passwort</string>
<string name="settings_title_auto_backup_password_enc">Automatische Datensicherung bei neuen Einträgen</string>
<string name="settings_title_backup_broadcasts">Broadcasts-Sicherungen</string>
@ -61,6 +62,9 @@
<string name="settings_desc_auth_inactivity_delay">Zeit (in Sekunden) nach der erneute
Authentifizierung benötigt wird</string>
<string name="settings_desc_block_accessibility">Verstecke vertrauliche Einträge vor den Eingabehilfsdiensten. <b>NICHT aktivieren, wenn Eingabehilfe benötigt wird!</b></string>
<string name="settings_desc_block_autofill">Hindert Autofill-Dienste am Zugriff auf Passwortfelder in der App</string>
<string name="settings_desc_block_autofill_android">Dieses Feature erfordert eine Android-Version
höher als 8.0 (Oreo)</string>
<string name="settings_desc_label_scroll">Überlange Beschriftungen scrollen, statt diese abzuschneiden</string>
<string name="settings_desc_minimize_on_copy">App wird minimiert wenn der OTP Code kopiert wurde</string>
<string name="settings_desc_search_includes">Welche Werte sollen in der Suche enthalten sein?</string>
@ -70,11 +74,15 @@
Dies kann die App verlangsamen, nur aktivieren, wenn wirklich notwendig.</string>
<string name="settings_desc_backup_append_date">Aktuelles Datum und die aktuelle Uhrzeit an den vorgeschlagenen Sicherungsdateinamen anhängen</string>
<string name="settings_desc_backup_ask">Jedes Mal nach dem Dateinamen fragen, wenn eine Sicherung erstellt oder wiederhergestellt wird</string>
<string name="settings_desc_backup_location">Wählen Sie eine Standard-Sicherungsort</string>
<string name="settings_desc_backup_location_set">Sicherungsort wurde ausgewählt</string>
<string name="settings_desc_backup_password">Passwort festlegen, mit dem die Sicherungen verschlüsselt werden sollen</string>
<string name="settings_desc_auto_backup_password_enc">Erstellt eine neue verschlüsselte Datensicherung bei
Erstellung oder Bearbeitung von Einträgen, wenn Bedingungen erfüllt sind</string>
<string name="settings_desc_auto_backup_requirements">Legen Sie einen Standard-Sicherungsort fest und setzen sie ein
Sicherungspasswort, um diese Option zu aktivieren</string>
<string name="settings_desc_backup_broadcasts">Über Broadcasts auswählen, welche Sicherungstypen von Drittanbieteranwendungen ausgelöst werden können.</string>
<string name="settings_desc_openpgp_key_encrypt">EMail-Adresse, mit welcher der OpenPGP-Schlüssel verschlüsselt wurde</string>
<string name="settings_desc_openpgp_key_encrypt">E-Mail-Adresse, mit welcher der OpenPGP-Schlüssel verschlüsselt wurde</string>
<string name="settings_desc_openpgp_verify">Verschlüsselte Sicherungen werden nur importiert,
wenn sie mit einem gültigen Schlüssel signiert sind</string>
<string name="settings_desc_special_features">Haken entfernen, um die speziellen Funktionen wieder zu deaktivieren</string>

View file

@ -6,7 +6,8 @@
<string name="auth_hint_pin">PIN</string>
<!-- Messages -->
<string name="auth_msg_authenticate">Παρακαλώ ταυτοποιηθείτε για να ξεκινήσει ο andOTP!</string>
<string name="auth_msg_confirm_encryption">Παρακαλώ επιβεβαιώστε την ταυτοποίησή σας για να παραχθεί το καινούριο κλειδί κρυπτογράφησης!</string>
<string name="auth_msg_confirm_encryption">Παρακαλώ επιβεβαιώστε την επαλήθευση, για να δημιουργήσετε το δικό σας
κλειδί κρυπτογράφησης!</string>
<!-- Buttons -->
<string name="auth_button_unlock">Ξεκλείδωμα</string>
<!-- Toast messages -->

View file

@ -38,18 +38,15 @@
<string name="backup_receiver_read_permission_failed">Η άδεια για ανάγνωση δεν έχει δοθεί, παρακαλώ παραχωρήστε την πριν προσπαθήσετε να πάρετε αντίγραφο ασφαλείας</string>
<string name="backup_receiver_write_permission_failed">Η άδεια για εγγραφή δεν έχει δοθεί, παρακαλώ παραχωρήστε την πριν προσπαθήσετε να πάρετε αντίγραφο ασφαλείας</string>
<string name="backup_receiver_custom_encryption_failed">Η κρυπτογράφηση με κωδικό πρόσβασης ή PIN δεν υποστηρίζεται στα αντίγραφα ασφαλείας μέσω εκπομπής</string>
<string name="backup_new_format_dialog_title">Νέα μέθοδος κρυπτογράφησης</string>
<string name="backup_new_format_dialog_msg">Από την έκδοση 0.6.3 της εφαρμογής andOTP, μία <b> νέα και βελτιωμένη
μέθοδος κρυπτογράφησης</b> που χρησιμοποιείται για αντίγραφα ασφαλείας που προστατεύονται με κωδικό πρόσβασης. Τα παλιά αντίγραφα ασφαλείας μπορούν ακόμα να είναι
εισάγονται, αλλά <b>Συνιστάται ιδιαίτερα να δημιουργήσετε νέα αντίγραφα ασφαλείας με τη βελτιωμένη
μέθοδο κρυπτογράφησης</b>.\n\nΑυτό το μήνυμα δεν θα εμφανιστεί ξανά.</string>
<!-- Notification channels -->
<string name="notification_channel_name_backup_failed">Αποτυχία αυτόματης λήψης αντιγράφου ασφαλείας</string>
<string name="notification_channel_name_backup_success">Επιτυχής αυτόματη λήψη αντιγράφου ασφαλείας</string>
<string name="notification_channel_desc_backup_failed">Αυτές οι ειδοποιήσεις εμφανίζονται όταν μία αυτόματη λήψη αντιγράφου ασφαλείας απέτυχε για κάποιο λόγο</string>
<string name="notification_channel_desc_backup_success">Αυτές οι ειδοποιήσεις εμφανίζονται όταν μία αυτόματη λήψη αντιγράφου ασφαλείας ήταν επιτυχής</string>
<!-- Toast messages -->
<string name="backup_toast_mkdir_failed">Αποτυχία δημιουργίας φακέλου αντιγράφων ασφαλείας</string>
<string name="backup_toast_no_location">Καθορίστε μια προεπιλεγμένη θέση για δημιουργία αντιγράφων ασφαλείας στις ρυθμίσεις!</string>
<string name="backup_toast_location_access_failed">Αποτυχία πρόσβασης στην τοποθεσία αντιγράφων ασφαλείας!</string>
<string name="backup_toast_file_creation_failed">Αποτυχία δημιουργίας αντιγράφου ασφαλείας!</string>
<string name="backup_toast_export_success">Εξαγωγή σε εξωτερική αποθήκευση επιτυχής</string>
<string name="backup_toast_export_failed">Η εξαγωγή σε εξωτερική συσκευή αποθήκευσης απέτυχε</string>
<string name="backup_toast_import_success">Εισαγωγή από εξωτερική αποθήκευση επιτυχής</string>
@ -57,7 +54,6 @@
<string name="backup_toast_import_decryption_failed">Η αποκρυπτογράφηση του αντιγράφου ασφαλείας απέτυχε</string>
<string name="backup_toast_import_no_entries">Δεν βρέθηκαν εγγραφές στα δεδομένα που εισήχθηκαν</string>
<string name="backup_toast_storage_not_accessible">Η εξωτερική αποθήκευση δεν είναι διαθέσιμη αυτή τη στιγμή</string>
<string name="backup_toast_storage_permissions">Η άδεια για τον αποθηκευτικό χώρο δε χορηγήθηκε</string>
<string name="backup_toast_openpgp_error">Σφάλμα OpenPGP: %s</string>
<string name="backup_toast_openpgp_not_verified">Δεν ανιχνεύτηκε επαληθευμένη υπογραφή</string>
<string name="backup_toast_crypt_password_not_set">Ο κωδικός πρόσβασης δεν έχει οριστεί, ελέγξτε τις <b>ρυθμίσεις</b></string>

Some files were not shown because too many files have changed in this diff Show more