diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml
new file mode 100644
index 000000000..ab9d4a2a1
--- /dev/null
+++ b/.github/workflows/android.yml
@@ -0,0 +1,27 @@
+name: Android CI
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: set up JDK 1.8
+ uses: actions/setup-java@v1
+ with:
+ java-version: 1.8
+ - name: Build
+ run: ./gradlew assembleRelease
+ - name: Check lint
+ run: ./gradlew lintRelease
+ - name: Run unit tests
+ run: ./gradlew testReleaseUnitTest
+ - name: FindBugs
+ run: ./gradlew findbugs
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index ebb79ee47..000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-language: android
-sudo: true
-
-install:
-- echo y | android update sdk -u -a -t tools
-- echo y | android update sdk -u -a -t platform-tools
-- echo y | android update sdk -u -a -t build-tools-26.0.2
-- yes | sdkmanager "platforms;android-27"
-- echo y | android update sdk -u -a -t extra-google-m2repository
-- echo y | android update sdk -u -a -t extra-android-m2repository
-
-script: ./gradlew assembleRelease testReleaseUnitTest lintRelease findbugs
-
-after_failure:
-- cat app/build/reports/findbugs/findbugs.html
-- cat app/build/reports/tests/debug/index.html
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b6e361651..adffa64ee 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+## v0.28 (2020-03-09)
+
+Changes:
+- Fix barcode centering when exiting full screen ([#351](https://github.com/brarcher/loyalty-card-locker/pull/351))
+- Allow backup export location to be selected ([#352](https://github.com/brarcher/loyalty-card-locker/pull/352))
+- Update translations ([#357](https://github.com/brarcher/loyalty-card-locker/pull/357)) & ([#362](https://github.com/brarcher/loyalty-card-locker/pull/362))
+
## v0.27 (2020-01-26)
Changes:
diff --git a/app/build.gradle b/app/build.gradle
index 53930d650..cb7af7ce2 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -10,17 +10,20 @@ android {
compileSdkVersion 29
defaultConfig {
- applicationId "protect.card_locker"
+ applicationId "me.hackerchick.catima"
minSdkVersion 16
targetSdkVersion 29
- versionCode 38
- versionName "0.27"
+ versionCode 39
+ versionName "0.28"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
+ debug {
+ applicationIdSuffix ".debug"
+ }
}
lintOptions {
disable "GoogleAppIndexingWarning"
@@ -46,7 +49,7 @@ android {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
- compile 'androidx.appcompat:appcompat:1.2.0-alpha01'
+ compile 'androidx.appcompat:appcompat:1.2.0'
compile 'com.google.android.material:material:1.2.0-alpha03'
compile 'androidx.legacy:legacy-support-v4:1.0.0'
compile 'com.journeyapps:zxing-android-embedded:3.5.0@aar'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 034df728c..7fc81164a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -45,7 +45,7 @@
android:configChanges="orientation|screenSize"
android:windowSoftInputMode="stateHidden"
android:exported="true">
-
+
@@ -53,8 +53,11 @@
+
-
+
@@ -83,11 +86,6 @@
android:label="@string/importExport"
android:configChanges="orientation|screenSize"
android:theme="@style/AppTheme.NoActionBar"/>
-
{
- private static final String TAG = "LoyaltyCardLocker";
+ private static final String TAG = "Catima";
// When drawn in a smaller window 1D barcodes for some reason end up
// squished, whereas 2D barcodes look fine.
@@ -28,16 +29,18 @@ class BarcodeImageWriterTask extends AsyncTask
private static final int MAX_WIDTH_2D = 500;
private final WeakReference imageViewReference;
+ private final WeakReference textViewReference;
private final String cardId;
private final BarcodeFormat format;
private final int imageHeight;
private final int imageWidth;
BarcodeImageWriterTask(ImageView imageView, String cardIdString,
- BarcodeFormat barcodeFormat)
+ BarcodeFormat barcodeFormat, TextView textView)
{
// Use a WeakReference to ensure the ImageView can be garbage collected
imageViewReference = new WeakReference<>(imageView);
+ textViewReference = new WeakReference<>(textView);
cardId = cardIdString;
format = barcodeFormat;
@@ -58,6 +61,11 @@ class BarcodeImageWriterTask extends AsyncTask
}
}
+ BarcodeImageWriterTask(ImageView imageView, String cardIdString, BarcodeFormat barcodeFormat)
+ {
+ this(imageView, cardIdString, barcodeFormat, null);
+ }
+
private int getMaxWidth(BarcodeFormat format)
{
switch(format)
@@ -175,16 +183,25 @@ class BarcodeImageWriterTask extends AsyncTask
}
imageView.setImageBitmap(result);
+ TextView textView = textViewReference.get();
if(result != null)
{
Log.i(TAG, "Displaying barcode");
imageView.setVisibility(View.VISIBLE);
+
+ if (textView != null) {
+ textView.setVisibility(View.VISIBLE);
+ textView.setText(format.name());
+ }
}
else
{
Log.i(TAG, "Barcode generation failed, removing image from display");
imageView.setVisibility(View.GONE);
+ if (textView != null) {
+ textView.setVisibility(View.GONE);
+ }
}
}
}
diff --git a/app/src/main/java/protect/card_locker/BarcodeSelectorActivity.java b/app/src/main/java/protect/card_locker/BarcodeSelectorActivity.java
index 18becdcc6..9e1c29830 100644
--- a/app/src/main/java/protect/card_locker/BarcodeSelectorActivity.java
+++ b/app/src/main/java/protect/card_locker/BarcodeSelectorActivity.java
@@ -11,11 +11,13 @@ import androidx.appcompat.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
+import android.util.Pair;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.EditText;
import android.widget.ImageView;
+import android.widget.TextView;
import com.google.common.collect.ImmutableMap;
import com.google.zxing.BarcodeFormat;
@@ -34,7 +36,7 @@ import java.util.Map;
*/
public class BarcodeSelectorActivity extends AppCompatActivity
{
- private static final String TAG = "LoyaltyCardLocker";
+ private static final String TAG = "Catima";
// Result this activity will return
public static final String BARCODE_CONTENTS = "contents";
@@ -58,7 +60,7 @@ public class BarcodeSelectorActivity extends AppCompatActivity
BarcodeFormat.UPC_A.name()
));
- private Map barcodeViewMap;
+ private Map> barcodeViewMap;
private LinkedList barcodeGeneratorTasks = new LinkedList<>();
@Override
@@ -75,18 +77,18 @@ public class BarcodeSelectorActivity extends AppCompatActivity
actionBar.setDisplayHomeAsUpEnabled(true);
}
- barcodeViewMap = ImmutableMap.builder()
- .put(BarcodeFormat.AZTEC.name(), R.id.aztecBarcode)
- .put(BarcodeFormat.CODE_39.name(), R.id.code39Barcode)
- .put(BarcodeFormat.CODE_128.name(), R.id.code128Barcode)
- .put(BarcodeFormat.CODABAR.name(), R.id.codabarBarcode)
- .put(BarcodeFormat.DATA_MATRIX.name(), R.id.datamatrixBarcode)
- .put(BarcodeFormat.EAN_8.name(), R.id.ean8Barcode)
- .put(BarcodeFormat.EAN_13.name(), R.id.ean13Barcode)
- .put(BarcodeFormat.ITF.name(), R.id.itfBarcode)
- .put(BarcodeFormat.PDF_417.name(), R.id.pdf417Barcode)
- .put(BarcodeFormat.QR_CODE.name(), R.id.qrcodeBarcode)
- .put(BarcodeFormat.UPC_A.name(), R.id.upcaBarcode)
+ barcodeViewMap = ImmutableMap.>builder()
+ .put(BarcodeFormat.AZTEC.name(), new Pair<>(R.id.aztecBarcode, R.id.aztecBarcodeText))
+ .put(BarcodeFormat.CODE_39.name(), new Pair<>(R.id.code39Barcode, R.id.code39BarcodeText))
+ .put(BarcodeFormat.CODE_128.name(), new Pair<>(R.id.code128Barcode, R.id.code128BarcodeText))
+ .put(BarcodeFormat.CODABAR.name(), new Pair<>(R.id.codabarBarcode, R.id.codabarBarcodeText))
+ .put(BarcodeFormat.DATA_MATRIX.name(), new Pair<>(R.id.datamatrixBarcode, R.id.datamatrixBarcodeText))
+ .put(BarcodeFormat.EAN_8.name(), new Pair<>(R.id.ean8Barcode, R.id.ean8BarcodeText))
+ .put(BarcodeFormat.EAN_13.name(), new Pair<>(R.id.ean13Barcode, R.id.ean13BarcodeText))
+ .put(BarcodeFormat.ITF.name(), new Pair<>(R.id.itfBarcode, R.id.itfBarcodeText))
+ .put(BarcodeFormat.PDF_417.name(), new Pair<>(R.id.pdf417Barcode, R.id.pdf417BarcodeText))
+ .put(BarcodeFormat.QR_CODE.name(), new Pair<>(R.id.qrcodeBarcode, R.id.qrcodeBarcodeText))
+ .put(BarcodeFormat.UPC_A.name(), new Pair<>(R.id.upcaBarcode, R.id.upcaBarcodeText))
.build();
EditText cardId = findViewById(R.id.cardId);
@@ -113,8 +115,9 @@ public class BarcodeSelectorActivity extends AppCompatActivity
// Update barcodes
for(String key : barcodeViewMap.keySet())
{
- ImageView image = findViewById(barcodeViewMap.get(key));
- createBarcodeOption(image, key, s.toString());
+ ImageView image = findViewById(barcodeViewMap.get(key).first);
+ TextView text = findViewById(barcodeViewMap.get(key).second);
+ createBarcodeOption(image, key, s.toString(), text);
}
View noBarcodeButtonView = findViewById(R.id.noBarcode);
@@ -153,7 +156,7 @@ public class BarcodeSelectorActivity extends AppCompatActivity
});
}
- private void createBarcodeOption(final ImageView image, final String formatType, final String cardId)
+ private void createBarcodeOption(final ImageView image, final String formatType, final String cardId, final TextView text)
{
final BarcodeFormat format = BarcodeFormat.valueOf(formatType);
if(format == null)
@@ -198,7 +201,7 @@ public class BarcodeSelectorActivity extends AppCompatActivity
}
Log.d(TAG, "Generating barcode for type " + formatType);
- BarcodeImageWriterTask task = new BarcodeImageWriterTask(image, cardId, format);
+ BarcodeImageWriterTask task = new BarcodeImageWriterTask(image, cardId, format, text);
barcodeGeneratorTasks.add(task);
task.execute();
}
@@ -207,7 +210,7 @@ public class BarcodeSelectorActivity extends AppCompatActivity
else
{
Log.d(TAG, "Generating barcode for type " + formatType);
- BarcodeImageWriterTask task = new BarcodeImageWriterTask(image, cardId, format);
+ BarcodeImageWriterTask task = new BarcodeImageWriterTask(image, cardId, format, text);
barcodeGeneratorTasks.add(task);
task.execute();
}
diff --git a/app/src/main/java/protect/card_locker/CardShortcutConfigure.java b/app/src/main/java/protect/card_locker/CardShortcutConfigure.java
index 2917d703d..212f435a7 100644
--- a/app/src/main/java/protect/card_locker/CardShortcutConfigure.java
+++ b/app/src/main/java/protect/card_locker/CardShortcutConfigure.java
@@ -17,7 +17,7 @@ import android.widget.Toast;
*/
public class CardShortcutConfigure extends AppCompatActivity
{
- static final String TAG = "LoyaltyCardLocker";
+ static final String TAG = "Catima";
@Override
public void onCreate(Bundle bundle)
diff --git a/app/src/main/java/protect/card_locker/DBHelper.java b/app/src/main/java/protect/card_locker/DBHelper.java
index f84471342..1a9eae595 100644
--- a/app/src/main/java/protect/card_locker/DBHelper.java
+++ b/app/src/main/java/protect/card_locker/DBHelper.java
@@ -17,7 +17,7 @@ import java.nio.ByteBuffer;
public class DBHelper extends SQLiteOpenHelper
{
- public static final String DATABASE_NAME = "LoyaltyCards.db";
+ public static final String DATABASE_NAME = "Catima.db";
public static final int ORIGINAL_DATABASE_VERSION = 1;
public static final int DATABASE_VERSION = 4;
diff --git a/app/src/main/java/protect/card_locker/ImportExportActivity.java b/app/src/main/java/protect/card_locker/ImportExportActivity.java
index bbd4eba9a..73ea4d19e 100644
--- a/app/src/main/java/protect/card_locker/ImportExportActivity.java
+++ b/app/src/main/java/protect/card_locker/ImportExportActivity.java
@@ -10,15 +10,14 @@ import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
-import android.os.Environment;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
-import androidx.core.content.FileProvider;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
+
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
@@ -28,21 +27,21 @@ import android.widget.Toast;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.InputStream;
+import java.io.OutputStream;
import java.util.List;
public class ImportExportActivity extends AppCompatActivity
{
- private static final String TAG = "LoyaltyCardLocker";
+ private static final String TAG = "Catima";
private static final int PERMISSIONS_EXTERNAL_STORAGE = 1;
- private static final int CHOOSE_EXPORT_FILE = 2;
+ private static final int CHOOSE_EXPORT_LOCATION = 2;
+ private static final int CHOOSE_EXPORTED_FILE = 3;
private ImportExportTask importExporter;
- private final File sdcardDir = Environment.getExternalStorageDirectory();
- private final File exportFile = new File(sdcardDir, "LoyaltyCardKeychain.csv");
-
@Override
protected void onCreate(Bundle savedInstanceState)
{
@@ -70,6 +69,11 @@ public class ImportExportActivity extends AppCompatActivity
PERMISSIONS_EXTERNAL_STORAGE);
}
+ // Check that there is a file manager available
+ final Intent intentCreateDocumentAction = new Intent(Intent.ACTION_CREATE_DOCUMENT);
+ intentCreateDocumentAction.addCategory(Intent.CATEGORY_OPENABLE);
+ intentCreateDocumentAction.setType("text/csv");
+ intentCreateDocumentAction.putExtra(Intent.EXTRA_TITLE, "Catima.csv");
Button exportButton = findViewById(R.id.exportButton);
exportButton.setOnClickListener(new View.OnClickListener()
@@ -77,7 +81,7 @@ public class ImportExportActivity extends AppCompatActivity
@Override
public void onClick(View v)
{
- startExport();
+ chooseFileWithIntent(intentCreateDocumentAction, CHOOSE_EXPORT_LOCATION);
}
});
@@ -86,14 +90,13 @@ public class ImportExportActivity extends AppCompatActivity
intentGetContentAction.addCategory(Intent.CATEGORY_OPENABLE);
intentGetContentAction.setType("*/*");
-
Button importFilesystem = findViewById(R.id.importOptionFilesystemButton);
importFilesystem.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
- chooseFileWithIntent(intentGetContentAction);
+ chooseFileWithIntent(intentGetContentAction, CHOOSE_EXPORTED_FILE);
}
});
@@ -114,7 +117,7 @@ public class ImportExportActivity extends AppCompatActivity
@Override
public void onClick(View v)
{
- chooseFileWithIntent(intentPickAction);
+ chooseFileWithIntent(intentPickAction, CHOOSE_EXPORTED_FILE);
}
});
@@ -125,28 +128,6 @@ public class ImportExportActivity extends AppCompatActivity
findViewById(R.id.importOptionApplicationExplanation).setVisibility(View.GONE);
importApplication.setVisibility(View.GONE);
}
-
- // This option, to import from the fixed location, should always be present
-
- Button importButton = findViewById(R.id.importOptionFixedButton);
- importButton.setOnClickListener(new View.OnClickListener()
- {
- @Override
- public void onClick(View v)
- {
- Uri uri = Uri.fromFile(exportFile);
- try
- {
- FileInputStream stream = new FileInputStream(exportFile);
- startImport(stream, uri);
- }
- catch(FileNotFoundException e)
- {
- Log.e(TAG, "Could not import file " + exportFile.getAbsolutePath(), e);
- onImportComplete(false, uri);
- }
- }
- });
}
private void startImport(final InputStream target, final Uri targetUri)
@@ -165,19 +146,19 @@ public class ImportExportActivity extends AppCompatActivity
importExporter.execute();
}
- private void startExport()
+ private void startExport(final OutputStream target, final Uri targetUri)
{
ImportExportTask.TaskCompleteListener listener = new ImportExportTask.TaskCompleteListener()
{
@Override
public void onTaskComplete(boolean success)
{
- onExportComplete(success, exportFile);
+ onExportComplete(success, targetUri);
}
};
importExporter = new ImportExportTask(ImportExportActivity.this,
- DataFormat.CSV, exportFile, listener);
+ DataFormat.CSV, target, listener);
importExporter.execute();
}
@@ -245,13 +226,9 @@ public class ImportExportActivity extends AppCompatActivity
builder.setTitle(R.string.importFailedTitle);
}
- int messageId = success ? R.string.importedFrom : R.string.importFailed;
- final String template = getResources().getString(messageId);
+ int messageId = success ? R.string.importSuccessful : R.string.importFailed;
+ final String message = getResources().getString(messageId);
- // Get the filename of the file being imported
- String filename = path.toString();
-
- final String message = String.format(template, filename);
builder.setMessage(message);
builder.setNeutralButton(R.string.ok, new DialogInterface.OnClickListener()
{
@@ -265,7 +242,7 @@ public class ImportExportActivity extends AppCompatActivity
builder.create().show();
}
- private void onExportComplete(boolean success, final File path)
+ private void onExportComplete(boolean success, final Uri path)
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
@@ -278,10 +255,9 @@ public class ImportExportActivity extends AppCompatActivity
builder.setTitle(R.string.exportFailedTitle);
}
- int messageId = success ? R.string.exportedTo : R.string.exportFailed;
+ int messageId = success ? R.string.exportSuccessful : R.string.exportFailed;
+ final String message = getResources().getString(messageId);
- final String template = getResources().getString(messageId);
- final String message = String.format(template, path.getAbsolutePath());
builder.setMessage(message);
builder.setNeutralButton(R.string.ok, new DialogInterface.OnClickListener()
{
@@ -301,9 +277,8 @@ public class ImportExportActivity extends AppCompatActivity
@Override
public void onClick(DialogInterface dialog, int which)
{
- Uri outputUri = FileProvider.getUriForFile(ImportExportActivity.this, BuildConfig.APPLICATION_ID, path);
Intent sendIntent = new Intent(Intent.ACTION_SEND);
- sendIntent.putExtra(Intent.EXTRA_STREAM, outputUri);
+ sendIntent.putExtra(Intent.EXTRA_STREAM, path);
sendIntent.setType("text/csv");
// set flag to give temporary permission to external app to use the FileProvider
@@ -345,11 +320,11 @@ public class ImportExportActivity extends AppCompatActivity
return false;
}
- private void chooseFileWithIntent(Intent intent)
+ private void chooseFileWithIntent(Intent intent, int requestCode)
{
try
{
- startActivityForResult(intent, CHOOSE_EXPORT_FILE);
+ startActivityForResult(intent, requestCode);
}
catch (ActivityNotFoundException e)
{
@@ -362,7 +337,7 @@ public class ImportExportActivity extends AppCompatActivity
{
super.onActivityResult(requestCode, resultCode, data);
- if (resultCode != RESULT_OK || requestCode != CHOOSE_EXPORT_FILE)
+ if (resultCode != RESULT_OK || (requestCode != CHOOSE_EXPORT_LOCATION && requestCode != CHOOSE_EXPORTED_FILE))
{
Log.w(TAG, "Failed onActivityResult(), result=" + resultCode);
return;
@@ -377,24 +352,48 @@ public class ImportExportActivity extends AppCompatActivity
try
{
- InputStream reader;
-
- if(uri.getScheme() != null)
+ if (requestCode == CHOOSE_EXPORT_LOCATION)
{
- reader = getContentResolver().openInputStream(uri);
+ OutputStream writer;
+ if (uri.getScheme() != null)
+ {
+ writer = getContentResolver().openOutputStream(uri);
+ }
+ else
+ {
+ writer = new FileOutputStream(new File(uri.toString()));
+ }
+
+ Log.e(TAG, "Starting file export with: " + uri.toString());
+ startExport(writer, uri);
}
else
{
- reader = new FileInputStream(new File(uri.toString()));
- }
+ InputStream reader;
+ if(uri.getScheme() != null)
+ {
+ reader = getContentResolver().openInputStream(uri);
+ }
+ else
+ {
+ reader = new FileInputStream(new File(uri.toString()));
+ }
- Log.e(TAG, "Starting file import with: " + uri.toString());
- startImport(reader, uri);
+ Log.e(TAG, "Starting file export with: " + uri.toString());
+ startImport(reader, uri);
+ }
}
catch(FileNotFoundException e)
{
- Log.e(TAG, "Failed to import file: " + uri.toString(), e);
- onImportComplete(false, uri);
+ Log.e(TAG, "Failed to import/export file: " + uri.toString(), e);
+ if (requestCode == CHOOSE_EXPORT_LOCATION)
+ {
+ onExportComplete(false, uri);
+ }
+ else
+ {
+ onImportComplete(false, uri);
+ }
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/protect/card_locker/ImportExportTask.java b/app/src/main/java/protect/card_locker/ImportExportTask.java
index 839e7c36d..8537fbe99 100644
--- a/app/src/main/java/protect/card_locker/ImportExportTask.java
+++ b/app/src/main/java/protect/card_locker/ImportExportTask.java
@@ -4,27 +4,23 @@ import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
-import android.os.Environment;
import android.util.Log;
-import android.widget.Toast;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
class ImportExportTask extends AsyncTask
{
- private static final String TAG = "LoyaltyCardLocker";
+ private static final String TAG = "Catima";
private Activity activity;
private boolean doImport;
private DataFormat format;
- private File target;
+ private OutputStream outputStream;
private InputStream inputStream;
private TaskCompleteListener listener;
@@ -33,14 +29,14 @@ class ImportExportTask extends AsyncTask
/**
* Constructor which will setup a task for exporting to the given file
*/
- ImportExportTask(Activity activity, DataFormat format, File target,
+ ImportExportTask(Activity activity, DataFormat format, OutputStream output,
TaskCompleteListener listener)
{
super();
this.activity = activity;
this.doImport = false;
this.format = format;
- this.target = target;
+ this.outputStream = output;
this.listener = listener;
}
@@ -78,14 +74,13 @@ class ImportExportTask extends AsyncTask
return result;
}
- private boolean performExport(File exportFile, DBHelper db)
+ private boolean performExport(OutputStream stream, DBHelper db)
{
boolean result = false;
try
{
- FileOutputStream fileWriter = new FileOutputStream(exportFile);
- OutputStreamWriter writer = new OutputStreamWriter(fileWriter, Charset.forName("UTF-8"));
+ OutputStreamWriter writer = new OutputStreamWriter(stream, Charset.forName("UTF-8"));
result = MultiFormatExporter.exportData(db, writer, format);
writer.close();
}
@@ -94,7 +89,7 @@ class ImportExportTask extends AsyncTask
Log.e(TAG, "Unable to export file", e);
}
- Log.i(TAG, "Export of '" + exportFile.getAbsolutePath() + "' result: " + result);
+ Log.i(TAG, "Export result: " + result);
return result;
}
@@ -127,7 +122,7 @@ class ImportExportTask extends AsyncTask
}
else
{
- result = performExport(target, db);
+ result = performExport(outputStream, db);
}
return result;
diff --git a/app/src/main/java/protect/card_locker/ImportURIHelper.java b/app/src/main/java/protect/card_locker/ImportURIHelper.java
index f513a55ac..53ec4c081 100644
--- a/app/src/main/java/protect/card_locker/ImportURIHelper.java
+++ b/app/src/main/java/protect/card_locker/ImportURIHelper.java
@@ -24,17 +24,21 @@ public class ImportURIHelper {
private final Context context;
private final String host;
private final String path;
+ private final String oldHost;
+ private final String oldPath;
private final String shareText;
public ImportURIHelper(Context context) {
this.context = context;
host = context.getResources().getString(R.string.intent_import_card_from_url_host);
path = context.getResources().getString(R.string.intent_import_card_from_url_path_prefix);
+ oldHost = context.getResources().getString(R.string.intent_import_card_from_url_host_old);
+ oldPath = context.getResources().getString(R.string.intent_import_card_from_url_path_prefix_old);
shareText = context.getResources().getString(R.string.intent_import_card_from_url_share_text);
}
public boolean isImportUri(Uri uri) {
- return uri.getHost().equals(host) && uri.getPath().equals(path);
+ return (uri.getHost().equals(host) && uri.getPath().equals(path)) || (uri.getHost().equals(oldHost) && uri.getPath().equals(oldPath));
}
public LoyaltyCard parse(Uri uri) throws InvalidObjectException {
@@ -64,12 +68,19 @@ public class ImportURIHelper {
String iconData = uri.getQueryParameter(ICON);
Bitmap icon = null;
- if(!iconData.isEmpty())
+ if(iconData != null && !iconData.isEmpty())
{
byte[] iconBytes = Base64.decode(iconData, Base64.URL_SAFE);
icon = DBHelper.convertBitmapBlobToBitmap(iconBytes);
}
- ExtrasHelper extras = new ExtrasHelper().fromJSON(new JSONObject(uri.getQueryParameter(EXTRAS)));
+
+ String extrasData = uri.getQueryParameter(EXTRAS);
+ ExtrasHelper extras = new ExtrasHelper();
+ if(extrasData != null && !extrasData.isEmpty())
+ {
+ extras.fromJSON(new JSONObject(uri.getQueryParameter(EXTRAS)));
+ }
+
return new LoyaltyCard(-1, store, note, cardId, barcodeType, headerColor, headerTextColor, icon, extras);
} catch (NullPointerException | NumberFormatException | JSONException ex) {
throw new InvalidObjectException("Not a valid import URI");
diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java
index c72045a15..54edd74e3 100644
--- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java
+++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java
@@ -9,6 +9,8 @@ import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
+
+import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
@@ -39,7 +41,7 @@ import java.io.InvalidObjectException;
public class LoyaltyCardEditActivity extends AppCompatActivity
{
- private static final String TAG = "CardLocker";
+ private static final String TAG = "Catima";
protected static final String NO_BARCODE = "_NO_BARCODE_";
protected static final int SELECT_BARCODE_REQUEST = 1;
@@ -140,7 +142,7 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
cardIdFieldView = findViewById(R.id.cardIdView);
cardIdDivider = findViewById(R.id.cardIdDivider);
cardIdTableRow = findViewById(R.id.cardIdTableRow);
- barcodeTypeField = findViewById(R.id.barcodeType);
+ barcodeTypeField = findViewById(R.id.barcodeTypeView);
barcodeImage = findViewById(R.id.barcode);
barcodeImageLayout = findViewById(R.id.barcodeLayout);
barcodeCaptureLayout = findViewById(R.id.barcodeCaptureLayout);
@@ -199,7 +201,7 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
if(barcodeTypeField.getText().length() == 0)
{
- barcodeTypeField.setText(loyaltyCard.barcodeType);
+ barcodeTypeField.setText(loyaltyCard.barcodeType.isEmpty() ? LoyaltyCardEditActivity.NO_BARCODE : loyaltyCard.barcodeType);
}
if(headingColorValue == null)
@@ -248,6 +250,7 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
else
{
setTitle(R.string.addCardTitle);
+ hideBarcode();
}
if(headingColorValue == null)
@@ -270,9 +273,9 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
if(cardIdFieldView.getText().length() > 0 && barcodeTypeField.getText().length() > 0)
{
- if(barcodeTypeField.getText().equals(NO_BARCODE))
+ if(barcodeTypeField.getText().toString().equals(NO_BARCODE))
{
- barcodeImageLayout.setVisibility(View.GONE);
+ hideBarcode();
}
else
{
@@ -311,7 +314,7 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
new BarcodeImageWriterTask(barcodeImage, cardIdString, format).execute();
}
- barcodeImageLayout.setVisibility(View.VISIBLE);
+ showBarcode();
}
}
@@ -363,6 +366,18 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
cardIdTableRow.setVisibility(View.GONE);
enterButton.setText(R.string.enterCard);
}
+
+ FloatingActionButton saveButton = findViewById(R.id.fabSave);
+ saveButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ try {
+ doSave();
+ } catch (JSONException ex) {
+ Toast.makeText(getApplicationContext(), R.string.failedSavingCard, Toast.LENGTH_LONG).show();
+ }
+ }
+ });
}
class ColorSelectListener implements View.OnClickListener
@@ -504,17 +519,6 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
dialog.show();
return true;
-
- case R.id.action_save:
- try {
- doSave();
- }
- catch (JSONException ex)
- {
- Toast.makeText(this, R.string.failedSavingCard, Toast.LENGTH_LONG).show();
- return false;
- }
- return true;
}
return super.onOptionsItemSelected(item);
@@ -554,10 +558,21 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
TextView cardIdView = findViewById(R.id.cardIdView);
cardIdView.setText(contents);
- final TextView barcodeTypeField = findViewById(R.id.barcodeType);
// Set special NO_BARCODE value to prevent onResume from overwriting it
barcodeTypeField.setText(format.isEmpty() ? LoyaltyCardEditActivity.NO_BARCODE : format);
onResume();
}
}
+
+ private void showBarcode() {
+ barcodeImageLayout.setVisibility(View.VISIBLE);
+ findViewById(R.id.barcodeTypeDivider).setVisibility(View.VISIBLE);
+ findViewById(R.id.barcodeTypeTableRow).setVisibility(View.VISIBLE);
+ }
+
+ private void hideBarcode() {
+ barcodeImageLayout.setVisibility(View.GONE);
+ findViewById(R.id.barcodeTypeDivider).setVisibility(View.GONE);
+ findViewById(R.id.barcodeTypeTableRow).setVisibility(View.GONE);
+ }
}
diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java
index d64b5f2e7..4250b1fd4 100644
--- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java
+++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java
@@ -31,6 +31,7 @@ import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
+import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.zxing.BarcodeFormat;
import org.json.JSONException;
@@ -44,7 +45,7 @@ import protect.card_locker.preferences.Settings;
public class LoyaltyCardViewActivity extends AppCompatActivity
{
- private static final String TAG = "CardLocker";
+ private static final String TAG = "Catima";
private static final double LUMINANCE_MIDPOINT = 0.5;
TextView cardIdFieldView;
@@ -282,6 +283,20 @@ public class LoyaltyCardViewActivity extends AppCompatActivity
{
findViewById(R.id.barcode).setVisibility(View.GONE);
}
+
+ FloatingActionButton editButton = findViewById(R.id.fabEdit);
+ editButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
+ Bundle bundle = new Bundle();
+ bundle.putInt("id", loyaltyCardId);
+ bundle.putBoolean("update", true);
+ intent.putExtras(bundle);
+ startActivity(intent);
+ finish();
+ }
+ });
}
@Override
@@ -318,7 +333,6 @@ public class LoyaltyCardViewActivity extends AppCompatActivity
}
menu.findItem(R.id.action_share).setIcon(getIcon(R.drawable.ic_share_white, backgroundNeedsDarkIcons));
- menu.findItem(R.id.action_edit).setIcon(getIcon(R.drawable.ic_mode_edit_white_24dp, backgroundNeedsDarkIcons));
return super.onCreateOptionsMenu(menu);
}
@@ -338,16 +352,6 @@ public class LoyaltyCardViewActivity extends AppCompatActivity
importURIHelper.startShareIntent(loyaltyCard);
return true;
- case R.id.action_edit:
- Intent intent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
- Bundle bundle = new Bundle();
- bundle.putInt("id", loyaltyCardId);
- bundle.putBoolean("update", true);
- intent.putExtras(bundle);
- startActivity(intent);
- finish();
- return true;
-
case R.id.action_lock_unlock:
if(rotationEnabled)
{
@@ -455,6 +459,9 @@ public class LoyaltyCardViewActivity extends AppCompatActivity
// Move barcode to top
barcodeImage.setScaleType(ImageView.ScaleType.FIT_START);
+ // Prevent centering
+ barcodeImage.setAdjustViewBounds(false);
+
// Set current state
barcodeIsFullscreen = true;
}
@@ -479,6 +486,9 @@ public class LoyaltyCardViewActivity extends AppCompatActivity
// Turn barcode back to normal
barcodeImage.setLayoutParams(barcodeImageState);
+ // Fix barcode centering
+ barcodeImage.setAdjustViewBounds(true);
+
// Set current state
barcodeIsFullscreen = false;
}
diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java
index 60d702063..3e24abd87 100644
--- a/app/src/main/java/protect/card_locker/MainActivity.java
+++ b/app/src/main/java/protect/card_locker/MainActivity.java
@@ -28,17 +28,17 @@ import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
+import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.common.collect.ImmutableMap;
import java.util.Calendar;
import java.util.Map;
-import protect.card_locker.intro.IntroActivity;
import protect.card_locker.preferences.SettingsActivity;
public class MainActivity extends AppCompatActivity
{
- private static final String TAG = "LoyaltyCardLocker";
+ private static final String TAG = "Catima";
private static final int MAIN_REQUEST_CODE = 1;
private Menu menu;
@@ -53,12 +53,6 @@ public class MainActivity extends AppCompatActivity
setSupportActionBar(toolbar);
updateLoyaltyCardList("");
-
- SharedPreferences prefs = getSharedPreferences("protect.card_locker", MODE_PRIVATE);
- if (prefs.getBoolean("firstrun", true)) {
- startIntro();
- prefs.edit().putBoolean("firstrun", false).commit();
- }
}
@Override
@@ -75,6 +69,15 @@ public class MainActivity extends AppCompatActivity
}
updateLoyaltyCardList(filter);
+
+ FloatingActionButton addButton = findViewById(R.id.fabAdd);
+ addButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent i = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
+ startActivityForResult(i, MAIN_REQUEST_CODE);
+ }
+ });
}
@Override
@@ -261,13 +264,6 @@ public class MainActivity extends AppCompatActivity
{
int id = item.getItemId();
- if (id == R.id.action_add)
- {
- Intent i = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
- startActivityForResult(i, MAIN_REQUEST_CODE);
- return true;
- }
-
if(id == R.id.action_import_export)
{
Intent i = new Intent(getApplicationContext(), ImportExportActivity.class);
@@ -282,12 +278,6 @@ public class MainActivity extends AppCompatActivity
return true;
}
- if(id == R.id.action_intro)
- {
- startIntro();
- return true;
- }
-
if(id == R.id.action_about)
{
displayAboutDialog();
@@ -356,7 +346,6 @@ public class MainActivity extends AppCompatActivity
String html =
"" +
css +
- "
" +
"
" +
String.format(getString(R.string.app_revision_fmt),
"" +
- getString(R.string.app_revision_url) +
+ "GitHub" +
"") +
"
" +
String.format(getString(R.string.app_copyright_fmt), year) +
+ "
" +
+ getString(R.string.app_copyright_old) +
"
" +
getString(R.string.app_license) +
"
" +
@@ -393,10 +384,4 @@ public class MainActivity extends AppCompatActivity
})
.show();
}
-
- private void startIntro()
- {
- Intent intent = new Intent(this, IntroActivity.class);
- startActivityForResult(intent, MAIN_REQUEST_CODE);
- }
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/protect/card_locker/MultiFormatExporter.java b/app/src/main/java/protect/card_locker/MultiFormatExporter.java
index 68b01e761..5298e2ad7 100644
--- a/app/src/main/java/protect/card_locker/MultiFormatExporter.java
+++ b/app/src/main/java/protect/card_locker/MultiFormatExporter.java
@@ -7,7 +7,7 @@ import java.io.OutputStreamWriter;
public class MultiFormatExporter
{
- private static final String TAG = "LoyaltyCardLocker";
+ private static final String TAG = "Catima";
/**
* Attempts to export data to the output stream in the
diff --git a/app/src/main/java/protect/card_locker/MultiFormatImporter.java b/app/src/main/java/protect/card_locker/MultiFormatImporter.java
index 3d5593868..a4ab4c83c 100644
--- a/app/src/main/java/protect/card_locker/MultiFormatImporter.java
+++ b/app/src/main/java/protect/card_locker/MultiFormatImporter.java
@@ -7,7 +7,7 @@ import java.io.InputStreamReader;
public class MultiFormatImporter
{
- private static final String TAG = "LoyaltyCardLocker";
+ private static final String TAG = "Catima";
/**
* Attempts to import data from the input stream of the
diff --git a/app/src/main/java/protect/card_locker/intro/IntroActivity.java b/app/src/main/java/protect/card_locker/intro/IntroActivity.java
deleted file mode 100644
index 37a699ed8..000000000
--- a/app/src/main/java/protect/card_locker/intro/IntroActivity.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package protect.card_locker.intro;
-
-import android.os.Bundle;
-import androidx.fragment.app.Fragment;
-
-import com.github.paolorotolo.appintro.AppIntro;
-
-
-public class IntroActivity extends AppIntro
-{
- @Override
- public void init(Bundle savedInstanceState)
- {
- addSlide(new IntroSlide1());
- addSlide(new IntroSlide2());
- addSlide(new IntroSlide3());
- addSlide(new IntroSlide4());
- addSlide(new IntroSlide5());
- addSlide(new IntroSlide6());
- }
-
- @Override
- public void onSkipPressed(Fragment fragment) {
- finish();
- }
-
- @Override
- public void onDonePressed(Fragment fragment) {
- finish();
- }
-}
-
-
diff --git a/app/src/main/java/protect/card_locker/intro/IntroSlide1.java b/app/src/main/java/protect/card_locker/intro/IntroSlide1.java
deleted file mode 100644
index beecb43c3..000000000
--- a/app/src/main/java/protect/card_locker/intro/IntroSlide1.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package protect.card_locker.intro;
-
-import android.os.Bundle;
-import androidx.fragment.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import protect.card_locker.R;
-
-public class IntroSlide1 extends Fragment
-{
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
- {
- View v = inflater.inflate(R.layout.intro1_layout, container, false);
- return v;
- }
-}
diff --git a/app/src/main/java/protect/card_locker/intro/IntroSlide2.java b/app/src/main/java/protect/card_locker/intro/IntroSlide2.java
deleted file mode 100644
index a1e652c51..000000000
--- a/app/src/main/java/protect/card_locker/intro/IntroSlide2.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package protect.card_locker.intro;
-
-import android.os.Bundle;
-import androidx.fragment.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import protect.card_locker.R;
-
-public class IntroSlide2 extends Fragment
-{
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
- {
- View v = inflater.inflate(R.layout.intro2_layout, container, false);
- return v;
- }
-}
diff --git a/app/src/main/java/protect/card_locker/intro/IntroSlide3.java b/app/src/main/java/protect/card_locker/intro/IntroSlide3.java
deleted file mode 100644
index 5acc83e7b..000000000
--- a/app/src/main/java/protect/card_locker/intro/IntroSlide3.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package protect.card_locker.intro;
-
-import android.os.Bundle;
-import androidx.fragment.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import protect.card_locker.R;
-
-public class IntroSlide3 extends Fragment
-{
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
- {
- View v = inflater.inflate(R.layout.intro3_layout, container, false);
- return v;
- }
-}
diff --git a/app/src/main/java/protect/card_locker/intro/IntroSlide4.java b/app/src/main/java/protect/card_locker/intro/IntroSlide4.java
deleted file mode 100644
index 1a7ad6e69..000000000
--- a/app/src/main/java/protect/card_locker/intro/IntroSlide4.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package protect.card_locker.intro;
-
-import android.os.Bundle;
-import androidx.fragment.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import protect.card_locker.R;
-
-public class IntroSlide4 extends Fragment
-{
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
- {
- View v = inflater.inflate(R.layout.intro4_layout, container, false);
- return v;
- }
-}
diff --git a/app/src/main/java/protect/card_locker/intro/IntroSlide5.java b/app/src/main/java/protect/card_locker/intro/IntroSlide5.java
deleted file mode 100644
index ab3b5b757..000000000
--- a/app/src/main/java/protect/card_locker/intro/IntroSlide5.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package protect.card_locker.intro;
-
-import android.os.Bundle;
-import androidx.fragment.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import protect.card_locker.R;
-
-public class IntroSlide5 extends Fragment
-{
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
- {
- View v = inflater.inflate(R.layout.intro5_layout, container, false);
- return v;
- }
-}
diff --git a/app/src/main/java/protect/card_locker/intro/IntroSlide6.java b/app/src/main/java/protect/card_locker/intro/IntroSlide6.java
deleted file mode 100644
index 217967844..000000000
--- a/app/src/main/java/protect/card_locker/intro/IntroSlide6.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package protect.card_locker.intro;
-
-import android.os.Bundle;
-import androidx.fragment.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import protect.card_locker.R;
-
-public class IntroSlide6 extends Fragment
-{
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
- {
- View v = inflater.inflate(R.layout.intro6_layout, container, false);
- return v;
- }
-}
diff --git a/app/src/main/res/drawable-hdpi/app_icon_intro.png b/app/src/main/res/drawable-hdpi/app_icon_intro.png
deleted file mode 100755
index 11c0465c6..000000000
Binary files a/app/src/main/res/drawable-hdpi/app_icon_intro.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/intro2_image.png b/app/src/main/res/drawable-hdpi/intro2_image.png
deleted file mode 100644
index 6a718057d..000000000
Binary files a/app/src/main/res/drawable-hdpi/intro2_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/intro3_image.png b/app/src/main/res/drawable-hdpi/intro3_image.png
deleted file mode 100644
index 529e99c12..000000000
Binary files a/app/src/main/res/drawable-hdpi/intro3_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/intro4_image.png b/app/src/main/res/drawable-hdpi/intro4_image.png
deleted file mode 100644
index d81adbf47..000000000
Binary files a/app/src/main/res/drawable-hdpi/intro4_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/intro5_image.png b/app/src/main/res/drawable-hdpi/intro5_image.png
deleted file mode 100644
index b508ce888..000000000
Binary files a/app/src/main/res/drawable-hdpi/intro5_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/app_icon_intro.png b/app/src/main/res/drawable-mdpi/app_icon_intro.png
deleted file mode 100755
index 1336339d8..000000000
Binary files a/app/src/main/res/drawable-mdpi/app_icon_intro.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/intro2_image.png b/app/src/main/res/drawable-mdpi/intro2_image.png
deleted file mode 100644
index ec3dd8c9f..000000000
Binary files a/app/src/main/res/drawable-mdpi/intro2_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/intro3_image.png b/app/src/main/res/drawable-mdpi/intro3_image.png
deleted file mode 100644
index 69b1136ce..000000000
Binary files a/app/src/main/res/drawable-mdpi/intro3_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/intro4_image.png b/app/src/main/res/drawable-mdpi/intro4_image.png
deleted file mode 100644
index 48094b799..000000000
Binary files a/app/src/main/res/drawable-mdpi/intro4_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/intro5_image.png b/app/src/main/res/drawable-mdpi/intro5_image.png
deleted file mode 100644
index 561de1d24..000000000
Binary files a/app/src/main/res/drawable-mdpi/intro5_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/app_icon_intro.png b/app/src/main/res/drawable-xhdpi/app_icon_intro.png
deleted file mode 100755
index 21b1cbdcf..000000000
Binary files a/app/src/main/res/drawable-xhdpi/app_icon_intro.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/intro2_image.png b/app/src/main/res/drawable-xhdpi/intro2_image.png
deleted file mode 100644
index 3fc205679..000000000
Binary files a/app/src/main/res/drawable-xhdpi/intro2_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/intro3_image.png b/app/src/main/res/drawable-xhdpi/intro3_image.png
deleted file mode 100644
index 452ff2232..000000000
Binary files a/app/src/main/res/drawable-xhdpi/intro3_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/intro4_image.png b/app/src/main/res/drawable-xhdpi/intro4_image.png
deleted file mode 100644
index 0f6bb3c49..000000000
Binary files a/app/src/main/res/drawable-xhdpi/intro4_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/intro5_image.png b/app/src/main/res/drawable-xhdpi/intro5_image.png
deleted file mode 100644
index e5424a264..000000000
Binary files a/app/src/main/res/drawable-xhdpi/intro5_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/app_icon_intro.png b/app/src/main/res/drawable-xxhdpi/app_icon_intro.png
deleted file mode 100755
index 37d6ee852..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/app_icon_intro.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/intro2_image.png b/app/src/main/res/drawable-xxhdpi/intro2_image.png
deleted file mode 100644
index 4d007849b..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/intro2_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/intro3_image.png b/app/src/main/res/drawable-xxhdpi/intro3_image.png
deleted file mode 100644
index d96045d4c..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/intro3_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/intro4_image.png b/app/src/main/res/drawable-xxhdpi/intro4_image.png
deleted file mode 100644
index 52addc5b8..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/intro4_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/intro5_image.png b/app/src/main/res/drawable-xxhdpi/intro5_image.png
deleted file mode 100644
index 9907b40c9..000000000
Binary files a/app/src/main/res/drawable-xxhdpi/intro5_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/app_icon_intro.png b/app/src/main/res/drawable-xxxhdpi/app_icon_intro.png
deleted file mode 100755
index 9385319fb..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/app_icon_intro.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/intro2_image.png b/app/src/main/res/drawable-xxxhdpi/intro2_image.png
deleted file mode 100644
index 0380b6056..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/intro2_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/intro3_image.png b/app/src/main/res/drawable-xxxhdpi/intro3_image.png
deleted file mode 100644
index 1bfcde5e2..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/intro3_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/intro4_image.png b/app/src/main/res/drawable-xxxhdpi/intro4_image.png
deleted file mode 100644
index 3dbaed62d..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/intro4_image.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/intro5_image.png b/app/src/main/res/drawable-xxxhdpi/intro5_image.png
deleted file mode 100644
index 2a929fec2..000000000
Binary files a/app/src/main/res/drawable-xxxhdpi/intro5_image.png and /dev/null differ
diff --git a/app/src/main/res/layout/barcode_selector_activity.xml b/app/src/main/res/layout/barcode_selector_activity.xml
index 8edd3374f..4e164d389 100644
--- a/app/src/main/res/layout/barcode_selector_activity.xml
+++ b/app/src/main/res/layout/barcode_selector_activity.xml
@@ -70,137 +70,236 @@
android:layout_height="wrap_content"
android:text="@string/barcodeNoBarcode"
android:enabled="false" />
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/app/src/main/res/layout/import_export_activity.xml b/app/src/main/res/layout/import_export_activity.xml
index 464b3657e..5d4d7fdf5 100644
--- a/app/src/main/res/layout/import_export_activity.xml
+++ b/app/src/main/res/layout/import_export_activity.xml
@@ -99,7 +99,6 @@
android:layout_marginTop="8dp"
android:text="@string/importOptionFilesystemButton" />
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/intro1_layout.xml b/app/src/main/res/layout/intro1_layout.xml
deleted file mode 100644
index 9cfe98263..000000000
--- a/app/src/main/res/layout/intro1_layout.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/intro2_layout.xml b/app/src/main/res/layout/intro2_layout.xml
deleted file mode 100644
index 608be6857..000000000
--- a/app/src/main/res/layout/intro2_layout.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/intro3_layout.xml b/app/src/main/res/layout/intro3_layout.xml
deleted file mode 100644
index 5f327bc11..000000000
--- a/app/src/main/res/layout/intro3_layout.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/intro4_layout.xml b/app/src/main/res/layout/intro4_layout.xml
deleted file mode 100644
index 30b7ae061..000000000
--- a/app/src/main/res/layout/intro4_layout.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/intro5_layout.xml b/app/src/main/res/layout/intro5_layout.xml
deleted file mode 100644
index 29c29f9ed..000000000
--- a/app/src/main/res/layout/intro5_layout.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/intro6_layout.xml b/app/src/main/res/layout/intro6_layout.xml
deleted file mode 100644
index 973b15b59..000000000
--- a/app/src/main/res/layout/intro6_layout.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/loyalty_card_edit_activity.xml b/app/src/main/res/layout/loyalty_card_edit_activity.xml
index b523ae7d2..3093f189c 100644
--- a/app/src/main/res/layout/loyalty_card_edit_activity.xml
+++ b/app/src/main/res/layout/loyalty_card_edit_activity.xml
@@ -5,6 +5,15 @@
android:layout_height="match_parent"
android:fitsSystemWindows="true">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/card_update_menu.xml b/app/src/main/res/menu/card_update_menu.xml
index 9d9a207e8..f23773c64 100644
--- a/app/src/main/res/menu/card_update_menu.xml
+++ b/app/src/main/res/menu/card_update_menu.xml
@@ -1,16 +1,9 @@
\ No newline at end of file
diff --git a/app/src/main/res/menu/card_view_menu.xml b/app/src/main/res/menu/card_view_menu.xml
index 82e848fad..10b74050a 100644
--- a/app/src/main/res/menu/card_view_menu.xml
+++ b/app/src/main/res/menu/card_view_menu.xml
@@ -12,11 +12,6 @@
android:icon="@drawable/ic_share_white"
android:title="@string/share"
app:showAsAction="always"/>
-
-
-
-
- Loyalty Card Keychain
Přidat
ZAtím némáte žádné věrnostní karty. Klikněte na tlačítko "+" (plus) nahoře a začněte.\n\nLoyalty Card Locker umožňuje nosit své věrnostní karty v telefonu, takže jsou vždy na dosah.
Obchod
Poznámka
ID karty
- Typ čárového kódu
Zrušit
Uložit
Naskenovat kartu
@@ -23,7 +21,6 @@
Odeslat…
Editovat věrnostní kartu
Přidat věrnostní kartu
- Zobrazit věrnostní kartu
Oskenujte kód karty
Obrázek kódu karty
@@ -31,31 +28,23 @@
Nebylo zadáno ID karty
%1$s: %2$s
Import/Export
- Import
Export
Zálohování dat vám umožní přesunout vaše uložené karty na jiné zařízení.
- Importováno z: %1$s
- Exportováno do: %1$s
- Doubor chybí: %1$s
Import proběhl úspěšně
Import selhal
- Import selhal: %1$s
+ Import selhal
Export proběhl úspěšně
Export selhal
- Export selhal: %1$s
+ Export selhal
Importuji…
Exportuji…
Nelze importovat nebo exportovat karty bez přístupu k externímu uložišti
- Data jsou zapsána do kořenové složky externího uložiště.
Import ze souborového systému
Vyberte konkrétní soubor v uložišti.
Ze souborového systému
Použít externí aplikaci
K otevření souboru použije externí aplikaci jako Dropbox, Google Drive, nebo vámi preferovaný prohlížeč souborů.
Použít externí aplikaci
- Import z umístění exportu
- Import ze stejné složky souborového systému do níž se zapisuje při exportu.
- Použít složku exportu
O aplikaci
Copyright 2016-%d Branden Archer
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 9849360a0..ffb3b8d9b 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -1,7 +1,6 @@
- Loyalty Card Keychain
Suche
Neu
@@ -11,7 +10,6 @@
Geschäft
Notiz
Kartennummer
- Barcodeart
Abbrechen
Speichern
Karte scannen
@@ -27,11 +25,8 @@
Ok
Kopiere die Nummer in die Zwischenablage
Senden…
- Zum Home Screen hinzugefügt
-
Kundenkarte bearbeiten
Neue Kundenkarte
- Kundenkarte anzeigen
Barcode scannen
Shortcut zu einer Karte
Es ist noch keine Karte vorhanden, bitte zuerst eine hinzufügen
@@ -43,31 +38,23 @@
Karte konnte nicht gefunden werden
%1$s: %2$s
Import/Export
- Import
Exportieren
Gesicherte Daten ermöglichen das Verschieben der Kundenkarten auf ein anderes Gerät.
- Importiert von: %1$s
- Exportiert nach: %1$s
- Datei fehlt: %1$s
Import erfolgreich
Import fehlgeschlagen
- Import fehlgeschlagen: %1$s
+ Import fehlgeschlagen
Export erfolgreich
Export fehlgeschlagen
- Export fehlgeschlagen: %1$s
+ Export fehlgeschlagen
Importiere…
Exportiere…
Ohne die Berechtigung für den externen Speicher kann kein Import oder Export erfolgen.
- Die Datei wird ins Rootverzeichnis des externen Speichers geschrieben.
Importiere aus Dateisystem
Wähle eine Datei aus dem Speicher aus.
Aus Dateisystem
Externe App verwenden
Wählen Sie eine Datei aus einer App wie Dropbox, Google Drive, oder Ihrem bevorzugten Dateisystem aus.
Nutze eine externe App
- Importiere aus Export-Pfad
- Nutze den Export-Pfad, um Karten zu importieren (dies stellt zuvor gesicherte Daten wieder her).
- Export-Pfad verwenden
Über
Copyright 2016-%d Branden Archer
@@ -83,20 +70,6 @@
Vorschaubild für die Karte
- Starte Einführung
- Willkommen zu Loyalty Card Keychain\n
- Verwalten Sie Ihre Barcode-Kundenkarten auf Ihrem Smartphone!\n\n
- Karten hinzufügen\n
- Fügen Sie neue Karten hinzu indem Sie das "+" Symbol in der Liste berühren.\n\n
- Karten hinzufügen\n
- Um einen Barcode hinzuzufügen, verwenden Sie die Kamera oder geben Sie den Code manuell ein.\n\n
- Karte anzeigen\n
- Um eine Karte anzuzeigen, den entsprechenen Namen in der Hauptansicht anwählen.\n\n
- Backup\n
- Sie können selbstverständlich Backups anlegen. Um Karten zu exportieren oder importieren wählen Sie Import/Export im Menü auf dem Hauptbildschirm.\n\n
- Feedback\n
- Diese App enthält keine Werbung, und ist freie und quelloffene Software. Für Details berühren Sie Über im Menü auf der Hauptseite.\n\nHinterlassen Sie uns ein Feedback im App-Store (:
-
Anpassen
Textfarbe
Hintergrundfarbe
diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml
index 267d4ba70..06748a261 100644
--- a/app/src/main/res/values-el-rGR/strings.xml
+++ b/app/src/main/res/values-el-rGR/strings.xml
@@ -1,14 +1,12 @@
- Loyalty Card Keychain
Προσθήκη
Δεν έχετε κάρτες προς το παρόν. Πατήστε το κουμπί \"+\" (συν) στο πάνω μέρος για να ξεκινήσετε.\n\nΤο Loyalty Card Keychain σας δίνει τη δυνατότητα να έχετε τις κάρτες σας στο τηλέφωνο σας, έτσι ώστε να τις έχετε πάντα μαζί σας.
Κατάστημα
Σημείωση
Κωδικός Κάρτας
- Τύπος Barcode
Άκυρο
Αποθήκευση
Φωτογράφιση Κάρτας
@@ -24,11 +22,8 @@
OK
Αντιγραφή κωδικού στο πρόχειρο
Αποστολή…
- Προστέθηκε στην Αρχική Οθόνη
-
Επεξεργασία Κάρτας
Προσθήκη Κάρτας
- Εμφάνιση Κάρτας
Σαρώστε τον κωδικό της κάρτας
Συντόμευση Κάρτας
Δεν υπάρχουν κάρτες. προσθέστε μία πρώτα
@@ -40,31 +35,23 @@
Δεν ήταν δυνατό να εντοπιστεί κάρτα
%1$s: %2$s
Εισαγωγή/Εξαγωγή
- Εισαγωγή
Εξαγωγή
Τα εφεδρικά δεδομένα σας δίνουν την δυνατότητα να μεταφέρετε τις κάρτες σας σε μία άλλη συσκευή.
- Εισαγωγή από: %1$s
- Εξαγωγή σε: %1$s
- Το αρχείο λείπει: %1$s
Εισαγωγή επιτυχής
Εισαγωγή ανεπιτυχής
- Δεν εισήχθει: %1$s
+ Δεν εισήχθει
Εξαγωγή επιτυχής
Εξαγωγή ανεπιτυχής
- Δεν εξήχθη: %1$s
+ Δεν εξήχθη
Γίνεται εισαγωγή του…
Γίνεται εξαγωγή του…
Δεν είναι δυνατή η εισαγωγή ή εξαγωγή καρτών χωρίς την άδεια πρόσβασης στον εξωτερικό χώρο αποθήκευσης
- Τα δεδομένα αποθηκεύονται στον αρχικό φάκελο του εξωτερικού χώρου αποθήκευσης.
Εισαγωγή από το σύστημα αρχείων
Επιλέξτε ένα συγκεκριμένο αρχείο από το σύστημα αρχείων.
Από το σύστημα αρχείων
Χρήση εξωτερικής εφαρμογής
Κάντε χρήση μίας εξωτερικής εφαρμογής όπως είναι τα Dropbox, Google Drive ή ο αγαπημένος σας διαχειριστής αρχείων για να ανοίξετε ένα αρχείο.
Χρήση εξωτερικής εφαρμογής
- Εισαγωγή από τοποθεσία εξαγωγής
- Εισαγωγή από την ίδια τοποθεσία στο σύστημα αρχείων, στην οποία γίνεται αποθήκευση κατά την εξαγωγή.
- Χρήση τοποθεσίας εξαγωγής
Σχετικά
Copyright 2016-%d Branden Archer
@@ -80,20 +67,6 @@
Μικρογραφία κάρτας
- Έναρξη Επεξήγησης
- Καλώς ήλθατε στο Loyalty Card Keychain\n
- Διαχειριστείτε τις κάρτες σας που βασίζονται σε barcodes μέσα από το κινητό σας!\n\n
- Προσθήκη Καρτών\n
- Προσθέστε μία νέα κάρτα πατώντας το συν από την λίστα καρτών.\n\n
- Προσθήκη Καρτών\n
- Για να προσθέσετε το barcode, είτε φωτογραφίστε με την κάμερα είτε γράψτε το χειροκίνητα.\n\n
- Εμφάνιση Κάρτας\n
- Για να εμφανίσετε μία κάρτα, πατήστε πάνω στο όνομα του καταστήματος, στην κεντρική οθόνη της εφαρμογής\n\n
- Αντίγραφα Ασφαλείας\n
- Μπορείτε να δημιουργήσετε αντίγραφα ασφαλείας των καρτών. Για εξαγωγή ή εισαγωγή των δεδομένων των καρτών πατήστε Εισαγωγή/Εξαγωγή στο μενού στην κεντρική οθόνη της εφαρμογής.\n\n
- Σχόλια\n
- Αυτή η εφαρμογή είναι δωρεάν, χωρίς διαφημίσεις και open source. Δείτε λεπτομέρειες πατώντας το Σχετικά στο μενού στην κεντρική οθόνη της εφαρμογής.\n\nΠαρακαλώ αφήστε σχόλια στο app store! (:
-
Αλλαγή
Χρώμα Κειμένου Καταστήματος
Χρώμα Κεφαλίδας
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 5c42bcb1c..f2e8e8218 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -1,14 +1,12 @@
- Cartera para Tarjetas de Fidelización.
Añadir
Actualmente no tienes ninguna tarjeta guardada. Presiona el botón \"+\" para comenzar.\n\nEsta cartera te permite llevar tus tarjetas de fidelización en tu teléfono para que estén siempre a tu alcance.
Tienda
Nota
ID de la Tarjeta
- Tipo de Código de Barras
Cancelar
Guardar
Escanear Tarjeta
@@ -24,11 +22,8 @@
OK
Copiar ID al portapapeles
Enviar…
- Añadido a la Pantalla de Inicio
-
Editar Tarjeta de Fidelización
Añadir Tarjeta de Fidelización
- Ver Tarjeta de Fidelización
Escanear el Código de Barras de la Tarjeta
Atajo de Tarjeta
No hay ninguna tarjeta, añade una primero
@@ -40,31 +35,23 @@
No se ha podido encontrar la tarjeta de fidelización
%1$s: %2$s
Importar/Exportar
- Importar
Exportar
La copia de seguridad te permite transferir tus tarjetas a otro dispositivo.
- Importar desde: %1$s
- Exportar a: %1$s
- Archivo perdido: %1$s
Datos importados correctamente
Ha ocurrido un error al importar los datos
- Error al importar: %1$s
+ Error al importar
Datos exportados correctamente
Ha ocurrido un error al exportar los datos
- Error al exportar: %1$s
+ Error al exportar
Importando…
Exportando…
No se pueden importar o exportar tarjetas sin el permiso de almacenamiento
- Los datos son guardados en la carpeta base del almacenamiento externo.
Importar desde el sistema de archivos
Seleccionar un archivo del sistema de archivos
Desde el sistema de archivos
Usar una applicación externa
Use una aplicación externa como Dropbox, Google Drive o tu gestor de archivos favoritos para abrir un archivo.
Usar aplicación externa
- Importar desde el lugar donde los datos son exportados
- Importar desde el mismo lugar en el sistema de archivos donde los datos son exportados.
- Utilizar el lugar donde los datos son exportados
Acerca de
Copyright 2016-%d Branden Archer
@@ -80,20 +67,6 @@
Miniatura para la tarjeta
- Empezar Introducción
- Bienvenido a la Cartera para Tarjetas de Fidelización\n
- Gestiona las tarjetas de fidelización o tarjetas cliente con codigo de barras desde tu teléfono!\n\n
- Añadir Tarjetas\n
- Añade una nueva tarjeta presionando el signo + en la lista de tarjetas.\n\n
- Añadir Tarjetas\n
- Para añadir el código de barras, escanea la tarjeta con tu cámara o introduce el código manualmente.\n\n
- Mostrar Tarjeta\n
- Para mostrar una tarjeta, presiona en el nombre de la tienda desde la pantalla principal\n\n
- Copias de Seguridad\n
- Puedes hacer una copia de seguridad de tus tarjetas. Para exportar o importar los datos presiona Importar/Exportar en el menú de la pagina principal.\n\n
- Tu Opinión\n
- Esta aplicación es gratuita, libre de publicidad y de código libre. Para más detalles presiona en Acerca De en el menu principal.\n\nPor favor deja tu opinión en la tienda de applicaciones! (:
-
Cambiar
Color del Texto de la Tienda
Color Principal
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 2f459495b..054229544 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -1,14 +1,12 @@
- Loyalty Card Keychain
Ajouter
Aucune carte de fidélité enregistrée. Appuyez sur le bouton \"+\" (plus) pour commencer.\n\nLoyalty Card Locker vous permet d\'enregistrer vos cartes de fidélité sur votre téléphone pour toujours les avoir à portée de main.
Nom
Note
Numéro
- Type de code-barres
Annuler
Enregistrer
Mode capture
@@ -24,11 +22,8 @@
OK
Copier le numéro dans le presse-papier
Envoyer…
- Ajouter à l\'écran d\'accueil
-
Modifier la carte de fidélité
Ajouter une carte de fidélité
- Voir la carte de fidélité
Flasher le code-barres de la carte
Raccourci de carte
Il n\'y a aucune carte. Ajoutez en une d\'abord.
@@ -40,31 +35,23 @@
N\'a pas pu retrouver la carte de fidélité
%1$s: %2$s
Importer/Exporter
- Importer
Exporter
Exporter vos données vous permet de récupérer vos cartes sur un autre appareil.
- Importé depuis : %1$s
- Exporté vers : %1$s
- Fichier manquant : %1$s
Importé avec succès
Échec de l\'import
- Échec de l\'import : %1$s
+ Échec de l\'import
Exporté avec succès
Échec de l\'export
- Échec de l\'export : %1$s
+ Échec de l\'export
Import …
Export …
Impossible d\'importer ou d\'exporter les données sans l\'autorisation d\'accès au stockage externe
- Les données sont sauvegardées à la racine du stockage externe.
Importer depuis le système de fichiers.
Choisissez le fichier à importer.
Système de fichiers
Application externe
Utilisez une application externe comme Dropbox, Google Drive, ou votre gestionnaire de fichiers favori pour ouvrir un fichier.
Application externe
- Importer depuis le même emplacement que pour l\'export
- Importe les données depuis le même emplacement que celui défini pour l\'export.
- Utiliser l\'emplacement de l\'export
À propos
Copyright 2016-%d Branden Archer
@@ -80,20 +67,6 @@
Miniature pour la carte
- Présentation
- Bienvenue dans\nLoyalty Card Keychain\n
- Gérez vos cartes de fidélité\nsur votre téléphone !\n\n
- Ajouter une carte\n
- Ajoutez une nouvelle carte en appuyant sur le bouton \"+\" depuis la liste des cartes.\n\n
- Ajouter une carte\n
- Pour enregistrer le code-barres, utilisez l\'appareil-photo ou entrez-le manuellement.\n\n
- Afficher une carte\n
- Pour afficher une carte, appuyez sur le nom du magasin depuis l\'écran principal\n\n
- Sauvegarde\n
- Les cartes peuvent être sauvegardées. Appuyez sur \"Importer/Exporter\" depuis l\'écran principal pour restaurer ou sauvegarder les cartes.\n\n
- Commentaire\n
- Cette application est gratuite, sans pub, et son code est ouvert. Plus de détails en appuyant sur \"À propos\" depuis l\'écran principal.\n\nMerci de laisser un commentaire sur le Play Store (:
-
Modifier
Couleur du texte du magasin
Couleur du titre
diff --git a/app/src/main/res/values-he-rIL/strings.xml b/app/src/main/res/values-he-rIL/strings.xml
index d4ab5bac9..afe0b38a0 100644
--- a/app/src/main/res/values-he-rIL/strings.xml
+++ b/app/src/main/res/values-he-rIL/strings.xml
@@ -4,7 +4,6 @@
הוספה
מזהה כרטיס
- סוג ברקוד
ביטול
שמור
צלם כרטיס
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index d25bc273e..5c591698e 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -1,7 +1,6 @@
- Carte fedeltà
Cerca
Aggiungi
@@ -11,7 +10,6 @@
Negozio
Note
Codice
- Tipo codice a barre
Questa carta non ha un codice a barre
Annulla
@@ -30,11 +28,8 @@
Copia ID negli appunti
Condividi
Invia…
- Aggiunto al launcher
-
Modifica carta
Aggiungi carta
- Mostra carta
Scansiona codice carta
Scorciatoia per la carta
Non ci sono carte. Aggiungine prima una
@@ -45,34 +40,25 @@
Nessun codice carta inserito
Impossibile trovare la carta
Impossibile analizzare l\'URI
-
%1$s: %2$s
Importa/Esporta
- Importa
Esporta
Fare il backup dei dati ti permette di spostare le tue carte da un dispositivo ad un altro.
- Importato da: %1$s
- Esportato in: %1$s
- File mancante: %1$s
Importazione avvenuta con successo
Importazione fallita
- Impossibile importare: %1$s
+ Impossibile importare
Esportazione avvenuta con successo
Esportazione fallita
- Impossibile esportare: %1$s
+ Impossibile esportare
Importazione in corso…
Esportazione in corso…
Impossibile importare o esportare i dati senza il permesso per l\'uso della memoria esterna.
- I dati sono stati scritti nella cartella principale della memoria esterna.
Importa dal file system
Scegli un file dal file system.
Dal file system
Usa un\'applicazione esterna
Usa un\'applicazione esterna come Dropbox, Google Drive o il tuo file manager preferito per aprire il file.
Usa un\'applicazione esterna
- Importa da un altro posto
- Importa dallo stesso posto del file system dove si è esportato.
- Usa luogo dell\'esportazione
Informazioni
Copyright 2016-%d Branden Archer
@@ -90,20 +76,6 @@
Miniatura carta
- Introduzione
- Benvenuto in Carte Fedeltà\n
- Gestisci le tue carte direttamente dal telefono!\n\n
- Aggiungi carte\n
- Aggiungi una nuova carta premendo il + dall\'elenco delle carte.\n\n
- Aggiungi carte\n
- Per aggiungere il codice a barre, catturalo con la fotocamera o inseriscilo manualmente.\n\n
- Mostra carta\n
- Per mostrare una carta, premi sul nome del negozio dalla schermata principale\n\n
- Backup\n
- I dati delle tessere possono essere salvati. Per esportare o importare tessere premi Importa/Esporta nel menù nella schermata principale.\n\n
- Feedback\n
- Questa app è gratuita, priva di pubblicità e open source. Guarda i dettagli premendo su \"Informazioni\" nella schermata principale.\n\nPer favore, lascia un feedback nell\'app store! (:
-
Cambia
Colore titolo
Colore scheda
@@ -123,6 +95,5 @@
Dimensione testo delle note carta
Aumenta luminosità dello schermo quando apro un codice a barre
Blocca orientamento del codice a barre
- Importa carte fedeltà
Voglio condividere una carta fedeltà con te
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index 3b5d639b2..02e1333d3 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -1,14 +1,12 @@
- Loyalty Card Keychain
Pridėti
Šiuo metu neturite nė vienos įvestos lojalumo kortelės. Paspauskite "+" (pliuso) pliuso mygtuką, kad pradėtumėte.\n\nLoyalty Card Locker leidžia Jums visada nešiotis lojalumo kortelių informaciją savo telefone ar planšetėje, taip jos visada pasiekiamos.
Parduotuvė
Užrašas
Kortelės ID
- Brūkšninio kodo tipas
Atšaukti
Išsaugoti
Nufotografuoti kortelę
@@ -22,7 +20,6 @@
Nukopijuoti ID į iškarpinę
Redaguoti lojalumo kortelę
Pridėti lojalumo kortelę
- Paeržiūrėti lojalumo kortelę
Nuskanuokite kortelės brūkšninį kodą
Kortelės brūkšninio kodo paveikslėlis
@@ -30,13 +27,9 @@
Neįvestas kortelės ID
%1$s: %2$s
Importuoti/Exportuoti
- Importuoti
Exportuoti
- Importuota iš: %1$s
- Eksportuota į: %1$s
- Failas nerastas: %1$s
- Nepavyko importuoti: %1$s
- Nepavyko eksportuoti: %1$s
+ Nepavyko importuoti
+ Nepavyko eksportuoti
Importuoja…
Eksportuoja…
Negalima importuoti/eksportuoti kortelių be išorinės atminties leidimo
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 0b80d7ff2..7224b77bf 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -1,6 +1,5 @@
- Kundekortknippe
Legg til
Du har ingen kundekort for øyeblikket. Klikk på \"+\" (pluss)-knappen øverst for å komme igang.\n\nDa har du dem alltid hendig.
Butikk
@@ -25,7 +24,6 @@
Lagt til på hjemmeskjerm
Rediger kundekort
Legg til kundekort
- Vis kundekort
Skann kortets strekkode
Kort-snarvei
Legg til et kort først
@@ -35,18 +33,14 @@
Kunne ikke finne kundekort
%1$s: %2$s
Import/eksport
- Importer
Eksporter
Sikkerhetskopiering av data lar deg flytte kortene til en annen enhet.
- Importert fra: %1$s
- Exportert til: %1$s
- Fil mangler: %1$s
Importert
Kunne ikke importere
- Klarte ikke å importere: %1$s
+ Klarte ikke å importere
Eksportert
Kunne ikke eksportere
- Klarte ikke å eksportere: %1$s
+ Klarte ikke å eksportere
Importerer…
Exporterer…
Kan ikke importere eller eksportere kort uten tilgang til ekstern lagring
@@ -57,9 +51,6 @@
Brukt eksternt program
Bruk eksternt program som Nextcloud, eller din favorittfilbehandler til å åpne ei fil.
Bruk eksternt program
- Importer fra eksporteringsområde
- Importer fra området i filsystemet eksporter skrives til.
- Bruk eksporteringsplassering
Om
Kopirett 2016-%d Branden Archer
Lisensiert GPLv3+.
@@ -78,27 +69,6 @@
Skriv inn strekkodeverdien og velg så bildet som representerer strekkoden du ønsker å bruke.
Kort-ID kopiert til utklippstavle
Miniatyrbilde for kort
- Start intro
- Velkommen til Kundekortknippe\n
- Håndter strekkodekodekundekort på din enhet.\n\n
- Tillegg av kort\n
- Legg til et nytt kort ved å trykke på + i kortlisten.
-\n
-\n
- Tillegg av kort\n
- Legg til strekkoder med kamera eller skriv dem inn manuelt.
-\n
-\n
- Vis kort\n
- For å vise et kort, klikk på butikknavnet fra hovedskjermen\n\n
- Sikkerhetskopi\n
- Kortene kan sikkerhetskopieres. For å eksportere eller importere kortdata, trykk på \"Importer/eksporter\" i hovedsidemenyen.
-\n
-\n
- Tilbakemeldinger\n
- Dette programmet er reklamefri og gratis genenslig fri programvare. Se flere detaljer ved å trykke på \"Om\"-skjermen på hovedsiden.
-\n
-\nLevn en vurdering i programbutikken. (:
Endre
Skriftstørrelse for butikktekst
Overskriftsfarge
diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml
index 766606060..96cf9aace 100644
--- a/app/src/main/res/values-night/colors.xml
+++ b/app/src/main/res/values-night/colors.xml
@@ -2,9 +2,9 @@
- #3f51b5
- #757de8
- #002984
+ #B53F3F
+ #E87575
+ #840000
#ffc107
#fff350
#c79100
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index b4c3d4930..1b44466a8 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -1,7 +1,6 @@
- Klantenkaartkluis
Zoeken
Toevoegen
@@ -30,11 +29,9 @@
Kaartnummer kopiëren naar klembord
Delen
Versturen…
- Toegevoegd aan startscherm
-
+ Snelkoppeling is toegevoegd
Klantenkaart bewerken
Klantenkaart toevoegen
- Klantenkaart tonen
Scan de barcode van de kaart
Kaartsnelkoppeling
Je hebt nog geen kaarten toegevoegd.
@@ -45,34 +42,26 @@
Geen kaartnummer ingevoerd
De klantenkaart kan niet worden opgevraagd
Kan de import-uri niet verwerken
-
%1$s: %2$s
Importeren/Exporteren
- Importeren
Exporteren
Door de gegevens te back-uppen kun je je kaarten overzetten naar een ander apparaat.
- Geïmporteerd uit: %1$s
- Geëxporteerd naar: %1$s
- Bestand ontbreekt: %1$s
Importeren voltooid
Importeren mislukt
- Het importeren is mislukt: %1$s
+ Het importeren is mislukt
Exporteren voltooid
Exporteren mislukt
- Het exporteren is mislukt: %1$s
+ Het exporteren is mislukt
Bezig met importeren…...
Bezig met exporteren…...
Het importeren of exporteren van kaarten is niet mogelijk zonder de machtiging \'externe opslag\'.
- De gegevens worden weggeschreven naar de hoogste map op de externe opslag.
+ De gegevens worden weggeschreven op een locatie naar keuze.
Importeren uit bestandssysteem
Kies een specifiek bestand uit het bestandssysteem.
Uit bestandssysteem
Externe app gebruiken
Open een bestand middels een externe app, zoals Dropbox, Google Drive of je favoriete bestandsbeheerder.
Externe app gebruiken
- Importeren uit exportlocatie
- Importeer uit dezelfde locatie op het bestandssysteem waar tijdens het exporteren naar weggeschreven is.
- Exportlocatie gebruiken
Over
Copyright 2016-%d Branden Archer
@@ -90,20 +79,6 @@
Miniatuurvoorbeeld van kaart
- Rondleiding starten
- Welkom bij Klantenkaartkluis\n
- Beheer je op barcodes gebaseerde klantenkaarten op je telefoon!\n\n
- Kaarten toevoegen\n
- Voeg een kaart toe door in de lijst met kaarten op de plus-knop te drukken.\n\n
- Kaarten toevoegen\n
- De barcode kan worden toegevoegd door deze handmatig in te voeren of te scannen met de camera.\n\n
- Kaart tonen\n
- Toon een kaart door op het kaartoverzicht op de naam van de winkel te drukken.\n\n
- Back-uppen\n
- Je kunt je kaarten back-uppen: druk in het menu op het kaartoverzicht op Importeren/Exporteren.\n\n
- Feedback\n
- Deze app is gratis, reclamevrij en open source. Bekijk alle details door op \'Over\' te drukken in het menu op het kaartoverzicht.\n\nGeef feedback in de app-winkel! (:
-
Aanpassen
Tekstkleur van winkelnaam
Kopkleur
@@ -123,6 +98,5 @@
Lettergrootte van aantekeningen
Scherm helderder maken bij tonen van barcode
Barcode-oriëntatie vergrendelen
- Klantenkaart importeren
Ik wil een klantenkaart met je delen
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index d13acbb91..2655b944b 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -1,7 +1,6 @@
- Loyalty Card Keychain
Szukaj
Dodaj
@@ -11,7 +10,6 @@
Sklep
Notatka
Identyfikator karty
- Typ kodu kreskowego
Ta karta nie ma kodu kreskowego
Anuluj
@@ -30,11 +28,8 @@
Skopiuj identyfikator do schowka
Udostępnij
Wyślij…
- Dodano do ekranu głównego
-
Edytuj kartę lojalnościową
Dodaj kartę lojalnościową
- Pokaż kartę lojalnościową
Zeskanuj kod kreskowy karty lojalnościowej
Skrót karty
Nie ma kart, należy dodać pierwszą
@@ -45,34 +40,25 @@
Nie wprowadzono identyfikatora karty
Nie można wyszukać karty lojalnościowej
Nie można przeanalizować identyfikatora importu URI
-
%1$s: %2$s
Importuj/Eksportuj
- Importuj
Eksportuj
Zarchiwizowane dane umożliwiają przeniesienie kart na inne urządzenie.
- Zaimportowano z: %1$s
- Wyeksportowano do: %1$s
- Brak pliku: %1$s
Zaimportowano pomyślnie
Import nie powiódł się
- Nie udało się zaimportować: %1$s
+ Nie udało się zaimportować
Wyeksportowano pomyślnie
Eksport nie powiódł się
- Nie udało się wyeksportować: %1$s
+ Nie udało się wyeksportować
Importowanie…
Eksportowanie…
Nie można importować ani eksportować kart bez uprawnień do pamięci zewnętrznej
- Dane zapisywane są w głównym katalogu pamięci zewnętrznej.
Importuj z systemu plików
Wybierz określony plik z systemu plików.
Z systemu plików
Użyj zewnętrznej aplikacji
Użyj zewnętrznej aplikacji jak Dropbox, Google Drive, bądź ulubiony menedżer plików, aby otworzyć plik.
Użyj zewnętrznej aplikacji
- Importuj z lokalizacji eksportowania
- Importuj z tej samej lokalizacji w systemie plików, do którego zapisano przy eksporcie.
- Użyj lokalizacji eksportu
O aplikacji
© 2016 — %d Branden Archer.
@@ -90,20 +76,6 @@
Miniaturka karty
- Pokaż ekran powitalny
- Witaj w Loyalty Card Keychain\n
- Zarządzaj kartami sklepowymi/lojalnościowymi opartymi na kodzie kreskowym na swoim telefonie!\n\n
- Dodawanie kart\n
- Dodaj nową kartę, dotykając znaku plus z listy kart. \n\n
- Dodawanie kart\n
- Aby dodać kod kreskowy, wykonaj zdjęcie aparatem lub wpisz ręcznie. \n\n
- Pokaż kartę\n
- Aby wyświetlić kartę, na głównym ekranie kliknij nazwę sklepu \n\n
- Kopia zapasowa\n
- Karty można zarchiwizować. Aby wyeksportować lub zaimportować dane karty, dotknij opcji Importuj/eksportuj w menu na stronie głównej. \n\n
- Informacje zwrotne\n
- Ta aplikacja jest darmowa, bez reklam i z otwartym kodem źródłowym. Zobacz szczegóły, klikając Informacje w menu na stronie głównej. \n\n Proszę zostawić opinię o programie w sklepie z aplikacjami! (:
-
Zmień
Kolor tekstu nazwy sklepu
Kolor nagłówka
@@ -123,6 +95,5 @@
Rozmiar czcionki notatki karty
Rozjaśnij widok kodu kreskowego
Zablokuj autoobracanie kodów kreskowych
- Importuj kartę lojalnościową
Chcę udostępnić Ci kartę lojalnościową
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 2de672891..8bc98de4d 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -1,7 +1,6 @@
- Карты лояльности
Поиск
Добавить карту
@@ -11,7 +10,7 @@
Магазин
Примечание
Номер карты
- Тип штрих-кода
+ Тип штрихкода
Эта карта без штрихкода
Отменить
@@ -30,11 +29,9 @@
Скопировать номер карты в буфер обмена
Переслать
Отправить…
- Карта добавлена на главный экран.
-
+ Добавленный ярлык
Редактировать карту
Добавить карту
- Посмотреть карту
Отсканируйте штрих-код
Ярлык карты
Карт нет, добавьте одну для начала
@@ -45,34 +42,26 @@
Номер карты не указан
Карта не найдена
Не удалось разобрать импортируемый URI
-
%1$s: %2$s
Импорт/Экспорт
- Импорт
Экспорт
Сохранение карт позволяет перенести их на другое устройство.
- Импортировано из: %1$s
- Экспортировано в: %1$s
- Файл не найден: %1$s
Успешный импорт
Импорт не удался
- Не удалось импортировать: %1$s
+ Не удалось импортировать
Успешный экспорт
Экспорт не удался
- Не удалось экспортировать: %1$s
+ Не удалось экспортировать
Импорт…
Экспорт…
Импорт или экспорт невозможен без разрешения на доступ к хранилищу
- Данные сохраняются в корневой каталог хранилища.
+ Данные будут записаны в выбранное место.
Импорт из файловой системы
Выберете файл на файловой системе.
Выбрать файл
Использование другого приложения
Использовать другое приложение такое как Dropbox, Google Drive, или ваш любимый файловый менеджер чтобы открыть файл.
Использовать другое приложение
- Импорт из файла экспорта
- Импорт из того же файла, куда сохраняется экспорт.
- Использовать файл экспорта
О программе
Все права защищены 2016-%d Branden Archer
@@ -90,20 +79,6 @@
Логотип карты
- Введение
- Добро пожаловать в Карты лояльности\n
- Храните все карты лояльности/магазинов со штрих-кодом в телефоне!\n\n
- Добавление карт\n
- Добавьте новую карту, нажав на плюс на экране со списком карт.\n\n
- Добавление карт\n
- Для добавления штрих-кода отсканируйте карту камерой или введите номер вручную.\n\n
- Показ карты\n
- Для показа карты, нажмите на название магазина на главном экране.\n\n
- Резервное копирование\n
- Можно сделать резервную копию карт. Для этого нажмите Импорт/Экспорт в меню на главном экране.\n\n
- Отзыв\n
- Это бесплатное приложение, без рекламы и с открытым исходным кодом. Подробнее в разделе «О программе» в меню на главном экране.\n\nПожалуйста, оставьте отзыв в маркете приложений! (:
-
Изменить
Цвет текста
Цвет фона
@@ -123,6 +98,5 @@
Размер шрифта примечания
Максимальная яркость при показе карты
Портретная ориентация экрана при показе карты
- Импортировать карту
Я хочу поделиться картой с вами
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index 73cd286f3..c85c839ff 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -1,14 +1,12 @@
- Vernostné karty
Pridať
Zatiaľ nemáte žiadne vernostné karty. Kliknite na tlačidlo \"+\" (plus) vyššie a začnite.\n\nAplikácia Vernostné karty umožňuje nosiť svoje vernostné karty v telefóne, kde sú vždy na dosah.
Obchod
Poznámka
ID karty
- Typ čiarového kódu
Zrušiť
Uložiť
Zosnímať kartu
@@ -24,11 +22,8 @@
Áno
Kopírovať ID do schránky
Odoslať…
- Pridané na domovskú obrazovku
-
Upraviť kartu
Pridať kartu
- Zobraziť kartu
Zosnímajte čiarový kód na karte
Skratka
Nie sú uložené žiadne karty, vložte prvú
@@ -40,31 +35,23 @@
Nie je možné vyhľadať vernostnú kartu
%1$s: %2$s
Import/Export
- Import
Export
Zálohovanie dát Vám umožní presunúť Vaše uložené karty na iné zariadenie.
- Importované z: %1$s
- Exportované do: %1$s
- Chýbajúci súbor: %1$s
Import bol úspešný
Import zlyhal
- Zlyhal import: %1$s
+ Zlyhal import
Export bol úspešný
Export zlyhal
- Zlyhal export: %1$s
+ Zlyhal export
Importujem…
Exportujem…
Nie je možné importovať a exportovať karty bez prístupu k externému úložisku
- Dáta sú zapísané do koreňového adresára na externom úložisku.
Import zo súborového systému.
Vyberte súbor zo súborového systému.
Zo súborového systému
Použite externú aplikáciu
Na otvorenie súboru použite externú aplikáciu, ako Dropbox, Disk Google, alebo Vášho obľúbeného správcu súborov.
Použiť externú aplikáciu
- Importujte z exportovacieho umiestnenia.
- Importujte z rovnakého umiestnenia v súborovom systéme, na ktorý je zapisovaný export.
- Použite exportovacie umiestnenie
O aplikácii
Copyright 2016-%d Branden Archer
@@ -80,20 +67,6 @@
Náhľad karty
- Zobraz úvod
- Vitajte v aplikácii Vernostné karty\n
- Používajte Vaše vernostné karty s čiarovými kódmi na Vašom mobilnom zariadení!\n\n
- Pridávanie kariet\n
- Pridajte novú kartu stlačením \"+\" v zozname kariet.\n\n
- Pridávanie kariet\n
- Čiarový kód nasnímajte kamerou, alebo ho vypíšte ručne.\n\n
- Zobrazenie karty\n
- Pre zobrazenie vernostnej karty stlačte názov obchodu v zozname kariet.\n\n
- Záloha\n
- Vaše uložené karty môžu byť zálohované. Pre export a import kariet stlačte \"Import/Export\" v menu aplikácie.\n\n
- Spätná väzba\n
- Táto aplikácia je slobodná, neobsahuje reklamu a má otvorený zdrojový kód. Ďalšie informácie nájdete v položke menu O aplikácii na hlavnej stránke.\n\n Prosíme, zanechajte spätnú väzbu v obchode s aplikáciami. (:
-
Upraviť
Farba textu
Farba hlavičky
diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml
index efeb06d23..2de14b8b5 100644
--- a/app/src/main/res/values-sl/strings.xml
+++ b/app/src/main/res/values-sl/strings.xml
@@ -1,14 +1,12 @@
- Kartice zvestobe
Dodaj
Trenutno nimate shranjene nobene kartice zvestobe. Kliknite \"+\" (plus) na vrhu, da jih dodate.\n\n Aplikacija Kartice zvestobe Vam omogoča, da imate kartice zvestobe shranjene na Vašem telefonu in vedno v dosegu roke.
Shrani
Zabeležka
Št. kartice
- Vrsta črne kode
Prekliči
Shrani
Slikaj kartico
@@ -24,11 +22,8 @@
Vredu
Kopirajte številko kartice
Pošlji#8230;
- Dodajte na domači zaslon
-
Uredi kartico zvestobe
Dodaj kartico zvestobe
- Prikaži kartico zvestobe
Skeniraj črtno kodo
Bližnjica do kartice
Trenutno ni na voljo nobene kartice. Najprej jih je potrebno dodati.
@@ -40,31 +35,23 @@
Te kartice zvestobe ni bilo moč najti
%1$s:%2$s
Uvozi/izvozi
- Uvozi
Izvozi
Varnostna kopija omogoča varen prenos kartic na druge telefonske naprave.
- Uvoženo iz: %1$s
- Izvoženo v:%1$s
- Manjkajoča datoteka: %1$s
Uvoz je bil uspešen
Uvoz ni uspel
- Napaka pri uvozu: %1$s
+ Napaka pri uvozu
Izvoz je uspel
Izvoz ni uspel
- Napaka pri izvozu: %1$s
+ Napaka pri izvozu
Uvažanje…
Izvažanje…
Izvažanje in uvažanje je nemogoče brez omogočenega dostopa do zunanje shrambe
- Podati so bili zapisani v prvo mapo v zunanji shrambi
Uvozi iz datotečnega sistema
Izberite specifično datoteko iz datotečnega sistema
Iz datotečnega sistema
Uporabi zunanjo aplikacijo
Uporabi zunanjo aplikacijo, kot npr. Dropbox, Google Drive ali ostale upravljalnike datotek, za odpiranje datoteko.
Uporabi zunanjo aplikacijo
- Uvozi iz zunanje aplikacije
- Uvozi iz iste lokacije, ki je namenjena izvozu
- Uporabi lokacijo izvoza
Več o aplikaciji
Copyright 2016-%d Branden Archer
@@ -80,20 +67,6 @@
Ikona kartice
- Uvodnik
- Dobrodošli v aplikacijo Kartice zvestobe\n
- Urejajte vaše črtne kode oziroma kartice na Vašem telefonu!\n\n
- Dodajanje kartic\n
- Dodajte kartico s klikom na plus na seznamu kartic.\n\n
- Dodajanje kartic\n
- Če želite dodati črtno kodo jo ali slikajte s fotoaparatom ali jo vnesite ročno.\n\n
- Prikaži kartico\n
- Za prikaz kartice je potreben klik na ime trgovine na glavnem zaslonu\n\n
- Varnostna kopija\n
- Kartice lahko shranite s pomočjo varnostne kopije. Za uvoz ali izvoz kartic je potrebno klikniti Uvozi/Izvozi v meniju na glavni strani.\n\n
- Povratne informacije razvijalcem\n
- Aplikacija je brezplačna, brez oglasov in odprtokodna. Če želite izvedeti več podrobnosti, kliknite na Več o aplikaciji v meniju na glavni strani.\n\nProsim, napišite Vaše mnenje o aplikaciji v spletni trgovini (:
-
Spremeni
Barva besedila trgovine
Barva naslova
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 19c265c60..06b895547 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,9 +1,9 @@
- #3f51b5
- #757de8
- #002984
+ #B53F3F
+ #E87575
+ #840000
#ffc107
#fff350
#c79100
diff --git a/app/src/main/res/values/constants.xml b/app/src/main/res/values/constants.xml
index 7ab3b26e4..45c05623b 100644
--- a/app/src/main/res/values/constants.xml
+++ b/app/src/main/res/values/constants.xml
@@ -1,5 +1,5 @@
- https://github.com/brarcher/loyalty-card-locker/releases
- https://github.com/brarcher/loyalty-card-locker
+ https://github.com/TheLastProject/Catima/releases
+ https://github.com/TheLastProject/Catima
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index dcfaf5cc3..57cfc35a3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,17 +1,17 @@
- Loyalty Card Keychain
+ Catima
Search
Add
- You don\'t have any loyalty cards at the moment. Click the "+" (plus) button up top to get started.\n\nLoyalty Card Locker lets you carry your loyalty cards on your phone, so they are always within reach.
- No loyalty cards match the search filter. Please try some different terms.
+ You don\'t have any cards at the moment. Click the "+" (plus) button to get started.\n\nCatima lets you carry your cards on your phone, so they are always within reach.
+ No cards match the search filter. Please try some different terms.
Store
Note
Card ID
- Barcode Type
+ Barcode type
This card has no barcode
Cancel
@@ -25,17 +25,15 @@
Confirm
Block Rotation
Unblock Rotation
- Remove Loyalty Card
+ Remove Card
Please confirm that you want to delete this card.
OK
Copy ID to clipboard
Share
Send…
- Added to Home Screen
-
- Edit Loyalty Card
- Add Loyalty Card
- View Loyalty Card
+ Added shortcut
+ Edit Card
+ Add Card
Scan Card\'s Barcode
Card Shortcut
There are no cards, add one first
@@ -49,39 +47,30 @@
Could not show extra information: data not correctly formatted
Could not save card
Could not parse the import URI
-
%1$s: %2$s
- %1$s - %2$s
-
Import/Export
- Import
Export
Backed up data can allow you to move your cards to another device.
- Imported from: %1$s
- Exported to: %1$s
- File missing: %1$s
Import successful
Import failed
- Failed to import: %1$s
+ Failed to import
Export successful
Export failed
- Failed to export: %1$s
+ Failed to export
Importing…
Exporting…
Unable to import or export cards without the external storage permission
- Data is written to the top directory in external storage.
+ Data will be written to a location of your choice.
Import from filesystem
Choose a specific file from the filesystem.
From filesystem
- Use external application
+ Use external ap1plication
Use an external application like Dropbox, Google Drive, or your favorite file manager to open a file.
Use external application
- Import from export location
- Import from the same location on the filesystem that is written to on export.
- Use export location
About
- Copyright 2016-%d Branden Archer
+ Copyright 2019-%d Sylvia van Os.
+ Based on Loyalty Card Keychain, copyright 2016-2020 Branden Archer.
Licensed under the GPLv3.
About %s
Version: %s
@@ -96,20 +85,6 @@
Thumbnail for card
- Start Intro
- Welcome to Loyalty Card Keychain\n
- Manage your barcode-based store/loyalty cards on your phone!\n\n
- Adding Cards\n
- Add a new card by touching the plus from the card list.\n\n
- Adding Cards\n
- To add the barcode, either capture with the camera or type in manually.\n\n
- Show Card\n
- To display a card, click on the store name from the main screen\n\n
- Backup\n
- The cards can be backed-up. To export or import card data touch Import/Export in the menu on the main page.\n\n
- Feedback\n
- This app is free, ad-free, and open source. See details by touching About in the menu on the main page.\n\nPlease leave feedback in the app store! (:
-
Change
Store Text Color
Heading Color
@@ -141,8 +116,11 @@
Lock barcode orientation
pref_lock_barcode_orientation
- Import loyalty card
- I want to share a loyalty card with you
- brarcher.github.io
- /loyalty-card-locker/share
+ I want to share a card with you
+ thelastproject.github.io
+ /Catima/share
+ brarcher.github.io
+ /loyalty-card-locker/share
+ Successfully imported loyalty card data
+ Successfully exported loyalty card data
diff --git a/app/src/test/java/protect/card_locker/DatabaseTest.java b/app/src/test/java/protect/card_locker/DatabaseTest.java
index 263795b6e..902e58ec0 100644
--- a/app/src/test/java/protect/card_locker/DatabaseTest.java
+++ b/app/src/test/java/protect/card_locker/DatabaseTest.java
@@ -33,7 +33,7 @@ public class DatabaseTest
private static final Integer DEFAULT_HEADER_COLOR = Color.BLACK;
private static final Integer DEFAULT_HEADER_TEXT_COLOR = Color.WHITE;
- private static Bitmap DEFAULT_ICON = BitmapFactory.decodeResource(Resources.getSystem(), R.drawable.app_icon_intro);
+ private static Bitmap DEFAULT_ICON = BitmapFactory.decodeResource(Resources.getSystem(), R.mipmap.ic_launcher);
private static ExtrasHelper DEFAULT_EXTRAS;
@Before
diff --git a/app/src/test/java/protect/card_locker/ImportExportActivityTest.java b/app/src/test/java/protect/card_locker/ImportExportActivityTest.java
index 3da64ff7d..c6ceb034b 100644
--- a/app/src/test/java/protect/card_locker/ImportExportActivityTest.java
+++ b/app/src/test/java/protect/card_locker/ImportExportActivityTest.java
@@ -84,12 +84,6 @@ public class ImportExportActivityTest
checkVisibility(activity, View.GONE, R.id.dividerImportApplication,
R.id.importOptionApplicationTitle, R.id.importOptionApplicationExplanation,
R.id.importOptionApplicationButton);
-
- // Import from file system should always be present
-
- checkVisibility(activity, View.VISIBLE, R.id.dividerImportFixed,
- R.id.importOptionFixedTitle, R.id.importOptionFixedExplanation,
- R.id.importOptionFixedButton);
}
}
@@ -115,12 +109,6 @@ public class ImportExportActivityTest
checkVisibility(activity, View.GONE, R.id.dividerImportFilesystem,
R.id.importOptionFilesystemTitle, R.id.importOptionFilesystemExplanation,
R.id.importOptionFilesystemButton);
-
- // Import from file system should always be present
-
- checkVisibility(activity, View.VISIBLE, R.id.dividerImportFixed,
- R.id.importOptionFixedTitle, R.id.importOptionFixedExplanation,
- R.id.importOptionFixedButton);
}
}
@@ -139,9 +127,5 @@ public class ImportExportActivityTest
checkVisibility(activity, View.VISIBLE, R.id.dividerImportFilesystem,
R.id.importOptionFilesystemTitle, R.id.importOptionFilesystemExplanation,
R.id.importOptionFilesystemButton);
-
- checkVisibility(activity, View.VISIBLE, R.id.dividerImportFixed,
- R.id.importOptionFixedTitle, R.id.importOptionFixedExplanation,
- R.id.importOptionFixedButton);
}
}
diff --git a/app/src/test/java/protect/card_locker/ImportExportTest.java b/app/src/test/java/protect/card_locker/ImportExportTest.java
index a156ebac3..8f1e0bb97 100644
--- a/app/src/test/java/protect/card_locker/ImportExportTest.java
+++ b/app/src/test/java/protect/card_locker/ImportExportTest.java
@@ -3,6 +3,7 @@ package protect.card_locker;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
+import android.net.Uri;
import android.os.Environment;
import com.google.zxing.BarcodeFormat;
@@ -22,9 +23,11 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
+import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.Calendar;
@@ -252,7 +255,8 @@ public class ImportExportTest
TestTaskCompleteListener listener = new TestTaskCompleteListener();
// Export to the file
- ImportExportTask task = new ImportExportTask(activity, format, exportFile, listener);
+ FileOutputStream fileOutputStream = new FileOutputStream(exportFile);
+ ImportExportTask task = new ImportExportTask(activity, format, fileOutputStream, listener);
task.execute();
// Actually run the task to completion
diff --git a/app/src/test/java/protect/card_locker/ImportURITest.java b/app/src/test/java/protect/card_locker/ImportURITest.java
index 5ff314043..6e4e78298 100644
--- a/app/src/test/java/protect/card_locker/ImportURITest.java
+++ b/app/src/test/java/protect/card_locker/ImportURITest.java
@@ -42,7 +42,7 @@ public class ImportURITest {
public void ensureNoDataLoss() throws InvalidObjectException, JSONException
{
// Generate card
- Bitmap icon = BitmapFactory.decodeResource(Resources.getSystem(), R.drawable.app_icon_intro);
+ Bitmap icon = BitmapFactory.decodeResource(Resources.getSystem(), R.mipmap.ic_launcher);
assertNotNull(icon);
ExtrasHelper extrasHelper = new ExtrasHelper();
extrasHelper.addLanguageValue("en", "key", "value");
diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java
index a9f9f15f9..7e52b278f 100644
--- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java
+++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java
@@ -5,6 +5,7 @@ import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.robolectric.Shadows.shadowOf;
+import static protect.card_locker.LoyaltyCardEditActivity.NO_BARCODE;
import android.app.Activity;
import android.content.Intent;
@@ -111,7 +112,7 @@ public class LoyaltyCardViewActivityTest
final EditText storeField = activity.findViewById(R.id.storeNameEdit);
final EditText noteField = activity.findViewById(R.id.noteEdit);
final TextView cardIdField = activity.findViewById(R.id.cardIdView);
- final TextView barcodeTypeField = activity.findViewById(R.id.barcodeType);
+ final TextView barcodeTypeField = activity.findViewById(R.id.barcodeTypeView);
storeField.setText(store);
noteField.setText(note);
@@ -119,7 +120,7 @@ public class LoyaltyCardViewActivityTest
barcodeTypeField.setText(barcodeType);
assertEquals(false, activity.isFinishing());
- shadowOf(activity).clickMenuItem(R.id.action_save);
+ activity.findViewById(R.id.fabSave).performClick();
assertEquals(true, activity.isFinishing());
assertEquals(1, db.getLoyaltyCardCount());
@@ -130,7 +131,7 @@ public class LoyaltyCardViewActivityTest
assertEquals(cardId, card.cardId);
// The special "No barcode" string shouldn't actually be written to the loyalty card
- if(barcodeType.equals(LoyaltyCardEditActivity.NO_BARCODE))
+ if(barcodeType.equals(NO_BARCODE))
{
assertEquals("", card.barcodeType);
}
@@ -241,7 +242,7 @@ public class LoyaltyCardViewActivityTest
checkFieldProperties(activity, R.id.cardIdView, View.VISIBLE, cardId);
checkFieldProperties(activity, R.id.cardIdDivider, cardId.isEmpty() ? View.GONE : View.VISIBLE, null);
checkFieldProperties(activity, R.id.cardIdTableRow, cardId.isEmpty() ? View.GONE : View.VISIBLE, null);
- checkFieldProperties(activity, R.id.barcodeType, View.GONE, barcodeType);
+ checkFieldProperties(activity, R.id.barcodeTypeView, View.VISIBLE, barcodeType);
checkFieldProperties(activity, R.id.captureButton, captureVisibility, null);
checkFieldProperties(activity, R.id.barcode, View.VISIBLE, null);
}
@@ -258,6 +259,7 @@ public class LoyaltyCardViewActivityTest
Activity activity = (Activity)activityController.get();
checkAllFields(activity, ViewMode.ADD_CARD, "", "", "", "");
+ assertEquals(View.GONE, activity.findViewById(R.id.barcodeTypeTableRow).getVisibility());
}
@Test
@@ -277,15 +279,15 @@ public class LoyaltyCardViewActivityTest
final EditText noteField = activity.findViewById(R.id.noteEdit);
final TextView cardIdField = activity.findViewById(R.id.cardIdView);
- shadowOf(activity).clickMenuItem(R.id.action_save);
+ activity.findViewById(R.id.fabSave).performClick();
assertEquals(0, db.getLoyaltyCardCount());
storeField.setText("store");
- shadowOf(activity).clickMenuItem(R.id.action_save);
+ activity.findViewById(R.id.fabSave).performClick();
assertEquals(0, db.getLoyaltyCardCount());
noteField.setText("note");
- shadowOf(activity).clickMenuItem(R.id.action_save);
+ activity.findViewById(R.id.fabSave).performClick();
assertEquals(0, db.getLoyaltyCardCount());
}
@@ -487,12 +489,11 @@ public class LoyaltyCardViewActivityTest
final Menu menu = shadowOf(activity).getOptionsMenu();
assertTrue(menu != null);
- // The rotation, share, edit and info button should be present
- assertEquals(menu.size(), 4);
+ // The rotation,share and info button should be present
+ assertEquals(menu.size(), 3);
assertEquals("Block Rotation", menu.findItem(R.id.action_lock_unlock).getTitle().toString());
assertEquals("Share", menu.findItem(R.id.action_share).getTitle().toString());
- assertEquals("Edit", menu.findItem(R.id.action_edit).getTitle().toString());
assertEquals("More Info", menu.findItem(R.id.action_view_extras).getTitle().toString());
}
@@ -583,7 +584,7 @@ public class LoyaltyCardViewActivityTest
activityController.resume();
// Save and check the loyalty card
- saveLoyaltyCardWithArguments(activity, "store", "note", BARCODE_DATA, LoyaltyCardEditActivity.NO_BARCODE, false);
+ saveLoyaltyCardWithArguments(activity, "store", "note", BARCODE_DATA, NO_BARCODE, false);
}
@Test
@@ -606,10 +607,11 @@ public class LoyaltyCardViewActivityTest
selectBarcodeWithResult(activity, R.id.enterButton, BARCODE_DATA, "", true);
// Check if the barcode type is NO_BARCODE as expected
- checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", BARCODE_DATA, LoyaltyCardEditActivity.NO_BARCODE);
+ checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", BARCODE_DATA, NO_BARCODE);
+ assertEquals(View.GONE, activity.findViewById(R.id.barcodeTypeTableRow).getVisibility());
// Check if the special NO_BARCODE string doesn't get saved
- saveLoyaltyCardWithArguments(activity, "store", "note", BARCODE_DATA, LoyaltyCardEditActivity.NO_BARCODE, false);
+ saveLoyaltyCardWithArguments(activity, "store", "note", BARCODE_DATA, NO_BARCODE, false);
}
@Test
@@ -796,7 +798,28 @@ public class LoyaltyCardViewActivityTest
@Test
public void importCard()
{
- Uri importUri = Uri.parse("https://brarcher.github.io/loyalty-card-locker/share?store=Example%20Store¬e=&cardid=123456&barcodetype=AZTEC&headercolor=-416706&headertextcolor=-1&icon=&extras={}");
+ Uri importUri = Uri.parse("https://thelastproject.github.io/Catima/share?store=Example%20Store¬e=&cardid=123456&barcodetype=AZTEC&headercolor=-416706&headertextcolor=-1&icon=&extras={}");
+
+ Intent intent = new Intent();
+ intent.setData(importUri);
+
+ ActivityController activityController = Robolectric.buildActivity(LoyaltyCardEditActivity.class, intent).create();
+
+ activityController.start();
+ activityController.visible();
+ activityController.resume();
+
+ Activity activity = (Activity)activityController.get();
+
+ checkAllFields(activity, ViewMode.ADD_CARD, "Example Store", "", "123456", "AZTEC");
+ assertEquals(-416706, ((ColorDrawable) activity.findViewById(R.id.headingColorSample).getBackground()).getColor());
+ assertEquals(-1, ((ColorDrawable) activity.findViewById(R.id.headingStoreTextColorSample).getBackground()).getColor());
+ }
+
+ @Test
+ public void importCardOldURL()
+ {
+ Uri importUri = Uri.parse("https://thelastproject.github.io/Catima/share?store=Example%20Store¬e=&cardid=123456&barcodetype=AZTEC&headercolor=-416706&headertextcolor=-1");
Intent intent = new Intent();
intent.setData(importUri);
diff --git a/app/src/test/java/protect/card_locker/MainActivityTest.java b/app/src/test/java/protect/card_locker/MainActivityTest.java
index 5dca0759a..2e05a6034 100644
--- a/app/src/test/java/protect/card_locker/MainActivityTest.java
+++ b/app/src/test/java/protect/card_locker/MainActivityTest.java
@@ -37,14 +37,6 @@ public class MainActivityTest
{
private SharedPreferences prefs;
- @Before
- public void setUp()
- {
- // Assume that this is not the first launch
- prefs = RuntimeEnvironment.application.getSharedPreferences("protect.card_locker", Context.MODE_PRIVATE);
- prefs.edit().putBoolean("firstrun", false).commit();
- }
-
@Test
public void initiallyNoLoyaltyCards() throws Exception
{
@@ -70,12 +62,9 @@ public class MainActivityTest
assertTrue(menu != null);
// The settings, search and add button should be present
- assertEquals(menu.size(), 6);
-
+ assertEquals(menu.size(), 4);
assertEquals("Search", menu.findItem(R.id.action_search).getTitle().toString());
- assertEquals("Add", menu.findItem(R.id.action_add).getTitle().toString());
assertEquals("Import/Export", menu.findItem(R.id.action_import_export).getTitle().toString());
- assertEquals("Start Intro", menu.findItem(R.id.action_intro).getTitle().toString());
assertEquals("About", menu.findItem(R.id.action_about).getTitle().toString());
assertEquals("Settings", menu.findItem(R.id.action_settings).getTitle().toString());
}
@@ -85,7 +74,7 @@ public class MainActivityTest
{
final MainActivity activity = Robolectric.setupActivity(MainActivity.class);
- shadowOf(activity).clickMenuItem(R.id.action_add);
+ activity.findViewById(R.id.fabAdd).performClick();
Intent intent = shadowOf(activity).peekNextStartedActivityForResult().intent;
@@ -219,26 +208,4 @@ public class MainActivityTest
assertEquals(2, list.getCount());
}
-
- @Test
- public void testFirstRunStartsIntro()
- {
- prefs.edit().remove("firstrun").commit();
-
- ActivityController controller = Robolectric.buildActivity(MainActivity.class).create();
- Activity activity = (Activity)controller.get();
-
- assertTrue(activity.isFinishing() == false);
-
- Intent next = shadowOf(activity).getNextStartedActivity();
-
- ComponentName componentName = next.getComponent();
- String name = componentName.flattenToShortString();
- assertEquals("protect.card_locker/.intro.IntroActivity", name);
-
- Bundle extras = next.getExtras();
- assertNull(extras);
-
- assertEquals(false, prefs.getBoolean("firstrun", true));
- }
}
\ No newline at end of file
diff --git a/docs/README.md b/docs/README.md
index 3a0a96837..780373a07 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1,9 +1,9 @@
-# Loyalty Card Keychain
-[](https://travis-ci.org/brarcher/loyalty-card-locker)
+# Catima
+
-
-
-
+
+
+
Stores all of your store loyalty cards on your phone, removing the need to carry them around. Currently the following barcode types are supported:
@@ -20,18 +20,22 @@ Stores all of your store loyalty cards on your phone, removing the need to carry
- QR_CODE
- UPC_A
-If there is any interest in improving this project, kindly submit a pull request with
-proposed changes.
-
# Screenshots
-[
](https://github.com/brarcher/loyalty-card-locker/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-01.png)
-[
](https://github.com/brarcher/loyalty-card-locker/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-03.png)
-[
](https://github.com/brarcher/loyalty-card-locker/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-02.png)
+[
](https://github.com/TheLastProject/Catima/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-01.png)
+[
](https://github.com/TheLastProject/Catima/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-02.png)
+[
](https://github.com/TheLastProject/Catima/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-03.png)
+[
](https://github.com/TheLastProject/Catima/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-04.png)
+[
](https://github.com/TheLastProject/Catima/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-05.png)
+[
](https://github.com/TheLastProject/Catima/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-06.png)
+[
](https://github.com/TheLastProject/Catima/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-07.png)
+[
](https://github.com/TheLastProject/Catima/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-08.png)
+[
](https://github.com/TheLastProject/Catima/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-09.png)
+[
](https://github.com/TheLastProject/Catima/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-10.png)
-[
](https://github.com/brarcher/loyalty-card-locker/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-04.png)
-[
](https://github.com/brarcher/loyalty-card-locker/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-05.png)
-[
](https://github.com/brarcher/loyalty-card-locker/raw/master/metadata/en-US/images/phoneScreenshots/screenshot-06.png)
+# Migrating from other apps
+
+[See our migration guides](migrate).
# Building
@@ -50,9 +54,12 @@ Windows:
# Translating
-If you are interested in translating this application to another language, find the project listing on [Transifex](https://www.transifex.com/na-243/loyalty-card-locker).
+We are going to set up a translation platform soon, please check back later.
# Thanks
This application uses the following image:
- [Save](https://thenounproject.com/term/save/716011) by [Bernar Novalyi](https://thenounproject.com/bernar.novalyi)
+
+# Note from Developer
+This application is based on the great [Loyalty Card Keychain](https://github.com/brarcher/loyalty-card-locker) by [Branden Archer](https://github.com/brarcher). This fork was created due to the original developer having stopped development of this app.
diff --git a/docs/_config.yml b/docs/_config.yml
new file mode 100644
index 000000000..c4192631f
--- /dev/null
+++ b/docs/_config.yml
@@ -0,0 +1 @@
+theme: jekyll-theme-cayman
\ No newline at end of file
diff --git a/docs/migrate/index.md b/docs/migrate/index.md
new file mode 100644
index 000000000..025235cd6
--- /dev/null
+++ b/docs/migrate/index.md
@@ -0,0 +1,11 @@
+# Migrating from other apps
+
+We believe people shouldn't be locked into any specific app. That's why Catima will always allow you to export your data.
+
+We also try to support important your data from other applications whenever possible.
+
+Currently, importing is supported from the following apps:
+
+[Loyalty Card Keychain](protect_card_locker)
+
+Is the app you want to import from not listed? [Tell us about it](https://github.com/TheLastProject/Catima/issues) and we will look into supporting it.
diff --git a/docs/migrate/protect_card_locker/index.md b/docs/migrate/protect_card_locker/index.md
new file mode 100644
index 000000000..7409c809b
--- /dev/null
+++ b/docs/migrate/protect_card_locker/index.md
@@ -0,0 +1,35 @@
+# Migrating from Loyalty Card Keychain
+
+As Catima is based on Loyalty Card Keychain, importing your data from it is very simple.
+
+## 1. Open Loyalty Card Keychain
+
+
+## 2. Press the More Options button in the top right
+
+
+## 3. Press Import/Export
+
+
+## 4. Press Export
+
+
+## 5. Choose a save location, filename (default: LoyaltyCardKeychain.csv) and press Save
+
+
+## 6. Confirm the export was succesful
+
+
+## 7. Open Catima
+TODO: Logo
+
+## 8. Press the Import/Export button in the top right
+
+
+## 9. Press From Filesystem
+
+
+## 10. Choose the file you saved in step 5
+
+
+## That's it, you've succesfully imported your Loyalty Card Keychain database into Catima
diff --git a/docs/migrate/protect_card_locker/step_1.png b/docs/migrate/protect_card_locker/step_1.png
new file mode 100644
index 000000000..947819f97
Binary files /dev/null and b/docs/migrate/protect_card_locker/step_1.png differ
diff --git a/docs/migrate/protect_card_locker/step_10.png b/docs/migrate/protect_card_locker/step_10.png
new file mode 100644
index 000000000..28f458ef7
Binary files /dev/null and b/docs/migrate/protect_card_locker/step_10.png differ
diff --git a/docs/migrate/protect_card_locker/step_2.png b/docs/migrate/protect_card_locker/step_2.png
new file mode 100644
index 000000000..638c40052
Binary files /dev/null and b/docs/migrate/protect_card_locker/step_2.png differ
diff --git a/docs/migrate/protect_card_locker/step_3.png b/docs/migrate/protect_card_locker/step_3.png
new file mode 100644
index 000000000..b48ebad01
Binary files /dev/null and b/docs/migrate/protect_card_locker/step_3.png differ
diff --git a/docs/migrate/protect_card_locker/step_4.png b/docs/migrate/protect_card_locker/step_4.png
new file mode 100644
index 000000000..3030143b0
Binary files /dev/null and b/docs/migrate/protect_card_locker/step_4.png differ
diff --git a/docs/migrate/protect_card_locker/step_5.png b/docs/migrate/protect_card_locker/step_5.png
new file mode 100644
index 000000000..bd6bd0f1e
Binary files /dev/null and b/docs/migrate/protect_card_locker/step_5.png differ
diff --git a/docs/migrate/protect_card_locker/step_6.png b/docs/migrate/protect_card_locker/step_6.png
new file mode 100644
index 000000000..aa4b9616a
Binary files /dev/null and b/docs/migrate/protect_card_locker/step_6.png differ
diff --git a/docs/migrate/protect_card_locker/step_8.png b/docs/migrate/protect_card_locker/step_8.png
new file mode 100644
index 000000000..aff62a58c
Binary files /dev/null and b/docs/migrate/protect_card_locker/step_8.png differ
diff --git a/docs/migrate/protect_card_locker/step_9.png b/docs/migrate/protect_card_locker/step_9.png
new file mode 100644
index 000000000..9a1499e53
Binary files /dev/null and b/docs/migrate/protect_card_locker/step_9.png differ
diff --git a/privacy-policy.md b/docs/privacy-policy.md
similarity index 92%
rename from privacy-policy.md
rename to docs/privacy-policy.md
index 2cb74dfee..a3e9a95a9 100644
--- a/privacy-policy.md
+++ b/docs/privacy-policy.md
@@ -1,6 +1,6 @@
# PRIVACY POLICY FOR LOYALTY CARD KEYCHAIN
-This privacy policy governs your use of the software application Loyalty Card Keychain (“Application”) for mobile devices
+This privacy policy governs your use of the software application Catima (“Application”) for mobile devices
that was created by Protect. The Application is designed to store and display barcodes.
# What information does the Application obtain and how is it used?
@@ -48,8 +48,8 @@ not delete such emails.
# Children
This Application is not used to knowingly solicit data from or market to children under the age of 13. If a parent or
-guardian becomes aware that his or her child has provided us with information without their consent, he or she should
-contact us at protect.github@gmail.com. We will delete such information from our files within a reasonable time.
+guardian becomes aware that his or her child has provided us with information without their consent, they should
+contact us at sylvia+googleplay@hackerchick.me. We will delete such information from our files within a reasonable time.
# Security
@@ -67,4 +67,4 @@ checking this history of this file in GitHub.
# Contact us
If you have any questions regarding privacy while using the Application, or have questions about our practices,
-please contact us via email at protect.github@gmail.com.
+please contact us via email at sylvia+googleplay@hackerchick.me.
diff --git a/docs/share.md b/docs/share.md
index c4d1ed8c6..2b9fe3267 100644
--- a/docs/share.md
+++ b/docs/share.md
@@ -1,10 +1,10 @@
-# Shared Loyalty Card
+# Shared Card
-Someone wants to share a loyalty card with you. To import this loyalty card, you will first need to install the Loyalty Card Locker app. It is free, Open Source and contains no ads.
+Someone wants to share a card with you. To import this card, you will first need to install the Catima app. It is free, Open Source and contains no ads.
-
-
-
+
+
+
-After installing the app, just click the link you were given again and choose "Import loyalty card".
+After installing the app, just click the link you were given again and choose "Import into Catima".
diff --git a/metadata/en-US/images/phoneScreenshots/screenshot-01.png b/metadata/en-US/images/phoneScreenshots/screenshot-01.png
index f220261df..af7945455 100644
Binary files a/metadata/en-US/images/phoneScreenshots/screenshot-01.png and b/metadata/en-US/images/phoneScreenshots/screenshot-01.png differ
diff --git a/metadata/en-US/images/phoneScreenshots/screenshot-02.png b/metadata/en-US/images/phoneScreenshots/screenshot-02.png
index 58e2b76fa..e2f9c0c34 100644
Binary files a/metadata/en-US/images/phoneScreenshots/screenshot-02.png and b/metadata/en-US/images/phoneScreenshots/screenshot-02.png differ
diff --git a/metadata/en-US/images/phoneScreenshots/screenshot-03.png b/metadata/en-US/images/phoneScreenshots/screenshot-03.png
index 4deb500d8..91ce2d259 100644
Binary files a/metadata/en-US/images/phoneScreenshots/screenshot-03.png and b/metadata/en-US/images/phoneScreenshots/screenshot-03.png differ
diff --git a/metadata/en-US/images/phoneScreenshots/screenshot-04.png b/metadata/en-US/images/phoneScreenshots/screenshot-04.png
index 1e7974a73..0b504cb8d 100644
Binary files a/metadata/en-US/images/phoneScreenshots/screenshot-04.png and b/metadata/en-US/images/phoneScreenshots/screenshot-04.png differ
diff --git a/metadata/en-US/images/phoneScreenshots/screenshot-05.png b/metadata/en-US/images/phoneScreenshots/screenshot-05.png
index ca34851c8..1e5eafb98 100644
Binary files a/metadata/en-US/images/phoneScreenshots/screenshot-05.png and b/metadata/en-US/images/phoneScreenshots/screenshot-05.png differ
diff --git a/metadata/en-US/images/phoneScreenshots/screenshot-06.png b/metadata/en-US/images/phoneScreenshots/screenshot-06.png
index 89d9de94e..297055971 100644
Binary files a/metadata/en-US/images/phoneScreenshots/screenshot-06.png and b/metadata/en-US/images/phoneScreenshots/screenshot-06.png differ
diff --git a/metadata/en-US/images/phoneScreenshots/screenshot-07.png b/metadata/en-US/images/phoneScreenshots/screenshot-07.png
new file mode 100644
index 000000000..31f1c18f9
Binary files /dev/null and b/metadata/en-US/images/phoneScreenshots/screenshot-07.png differ
diff --git a/metadata/en-US/images/phoneScreenshots/screenshot-08.png b/metadata/en-US/images/phoneScreenshots/screenshot-08.png
new file mode 100644
index 000000000..8703bdf04
Binary files /dev/null and b/metadata/en-US/images/phoneScreenshots/screenshot-08.png differ
diff --git a/metadata/en-US/images/phoneScreenshots/screenshot-09.png b/metadata/en-US/images/phoneScreenshots/screenshot-09.png
new file mode 100644
index 000000000..0405f75b4
Binary files /dev/null and b/metadata/en-US/images/phoneScreenshots/screenshot-09.png differ
diff --git a/metadata/en-US/images/phoneScreenshots/screenshot-10.png b/metadata/en-US/images/phoneScreenshots/screenshot-10.png
new file mode 100644
index 000000000..0363e4c00
Binary files /dev/null and b/metadata/en-US/images/phoneScreenshots/screenshot-10.png differ