Compare commits
91 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
59bde6916c | ||
|
|
eb6364b932 | ||
|
|
ae7ac21785 | ||
|
|
2dd02f42f5 | ||
|
|
3b8e38001c | ||
|
|
fbb0ab27ec | ||
|
|
ceea5182d1 | ||
|
|
34c07800dd | ||
|
|
8c7a3273e8 | ||
|
|
49cd9a28c7 | ||
|
|
392024f84f | ||
|
|
165f963f7d | ||
|
|
aca44c5830 | ||
|
|
e2ed5b515a | ||
|
|
ba6705b96e | ||
|
|
9f407e5eb0 | ||
|
|
c00da00be5 | ||
|
|
c2ea640a71 | ||
|
|
ba5259f0f6 | ||
|
|
b1abfdff2e | ||
|
|
39219531b4 | ||
|
|
048edf186e | ||
|
|
ee6d415d26 | ||
|
|
5143e3fe45 | ||
|
|
306ee053c1 | ||
|
|
40871690d5 | ||
|
|
0bbbabce97 | ||
|
|
f59c485472 | ||
|
|
d8543f456c | ||
|
|
fcf88a1ace | ||
|
|
a2e99c2b9d | ||
|
|
607dff03d4 | ||
|
|
73b6c99d9e | ||
|
|
036748ee56 | ||
|
|
5cae97482f | ||
|
|
f67d27167e | ||
|
|
0832c7fc97 | ||
|
|
f5e1a2d732 | ||
|
|
7b799df98a | ||
|
|
968c3e71a1 | ||
|
|
29d8da99cd | ||
|
|
79213aa3ec | ||
|
|
50fdfe92fa | ||
|
|
4eab1121b0 | ||
|
|
d3bcd3e273 | ||
|
|
9d1c9c3309 | ||
|
|
61e039c456 | ||
|
|
0e2d725591 | ||
|
|
759d42cfcf | ||
|
|
2312788a57 | ||
|
|
0820be3986 | ||
|
|
8a11953276 | ||
|
|
182b3ff3c0 | ||
|
|
79dad1b0a6 | ||
|
|
04466edb01 | ||
|
|
af3ce5a0ff | ||
|
|
3291185812 | ||
|
|
c9df3bd1d2 | ||
|
|
057c7923a8 | ||
|
|
4195d73c53 | ||
|
|
ed08f0577a | ||
|
|
a1257a1692 | ||
|
|
a51815a172 | ||
|
|
8eee8f6a0f | ||
|
|
1817c184ae | ||
|
|
773d759ef5 | ||
|
|
cbc51cfb73 | ||
|
|
46c3d190d8 | ||
|
|
9951999ca4 | ||
|
|
4843a1093d | ||
|
|
a4bde722a6 | ||
|
|
ff5e5d5833 | ||
|
|
685eaec8b5 | ||
|
|
a3556cc66d | ||
|
|
13543ea9f6 | ||
|
|
d7bf31c308 | ||
|
|
a77a968619 | ||
|
|
70c6ee17cd | ||
|
|
c233f82dc1 | ||
|
|
be0c2507f2 | ||
|
|
abfcf9d6cd | ||
|
|
4d565b3b2f | ||
|
|
27511a4ccd | ||
|
|
12440346fa | ||
|
|
870e4d0c4a | ||
|
|
6e526de087 | ||
|
|
891636b51f | ||
|
|
017d97d08c | ||
|
|
63165ca1a5 | ||
|
|
48f40a51d1 | ||
|
|
3940ba5756 |
10
.tx/config
Normal file
@@ -0,0 +1,10 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
[loyalty-card-locker.stringsxml]
|
||||
file_filter = app/src/main/res/values-<lang>/strings.xml
|
||||
minimum_perc = 0
|
||||
source_file = app/src/main/res/values/strings.xml
|
||||
source_lang = en
|
||||
type = ANDROID
|
||||
|
||||
66
CHANGELOG.md
@@ -1,3 +1,69 @@
|
||||
## v0.24 (2018-07-31)
|
||||
|
||||
Changes:
|
||||
- Add a setting to control screen brightness when displaying a barcode (https://github.com/brarcher/loyalty-card-locker/pull/259)
|
||||
- Add Greek translations (https://github.com/brarcher/loyalty-card-locker/pull/252)
|
||||
- Add Slovenian translations (https://github.com/brarcher/loyalty-card-locker/pull/260)
|
||||
- Update translations (https://github.com/brarcher/loyalty-card-locker/pull/260, https://github.com/brarcher/loyalty-card-locker/pull/254)
|
||||
|
||||
## v0.23.4 (2018-05-12)
|
||||
|
||||
Changes:
|
||||
- Fix Spanish translations (https://github.com/brarcher/loyalty-card-locker/pull/244)
|
||||
- Update translations (https://github.com/brarcher/loyalty-card-locker/pull/244)
|
||||
|
||||
## v0.23.3 (2018-05-05)
|
||||
|
||||
Changes:
|
||||
- Added translations
|
||||
* Polish (https://github.com/brarcher/loyalty-card-locker/pull/232)
|
||||
* Spanish (https://github.com/brarcher/loyalty-card-locker/pull/232)
|
||||
* Slovak (https://github.com/brarcher/loyalty-card-locker/pull/232)
|
||||
- Updated translations (https://github.com/brarcher/loyalty-card-locker/pull/239)
|
||||
|
||||
## v0.23.2 (2018-03-11)
|
||||
|
||||
Changes:
|
||||
- Reduce min SDK from 17 to 15. (https://github.com/brarcher/loyalty-card-locker/pull/226)
|
||||
- Remove usage of legacy apache library, used only in unit tests but no longer needed. (https://github.com/brarcher/loyalty-card-locker/pull/225)
|
||||
|
||||
## v0.23.1 (2018-03-07)
|
||||
|
||||
Changes:
|
||||
- Prevent crash when rendering a barcode exhausts the application's memory. (https://github.com/brarcher/loyalty-card-locker/pull/219)
|
||||
|
||||
## v0.23 (2018-02-28)
|
||||
|
||||
Changes:
|
||||
- Reduce space in header when viewing a card. (https://github.com/brarcher/loyalty-card-locker/pull/213)
|
||||
- Disable beep when scanning a barcode. (https://github.com/brarcher/loyalty-card-locker/pull/216)
|
||||
|
||||
## v0.22 (2018-02-19)
|
||||
|
||||
Changes:
|
||||
- Update translations. (https://github.com/brarcher/loyalty-card-locker/pull/208)
|
||||
- Barcode rendering updates: (https://github.com/brarcher/loyalty-card-locker/pull/209)
|
||||
* Reload card view activity when screen is rotated, so barcode image is correct size.
|
||||
* Render 1D barcodes in a larger space, allowing them to better fill the screen.
|
||||
|
||||
## v0.21 (2018-02-17)
|
||||
|
||||
Changes
|
||||
- Add quiet space at the start/end of barcodes. (https://github.com/brarcher/loyalty-card-locker/pull/200)
|
||||
- Add options to configure the colors used for the store name font and background. (https://github.com/brarcher/loyalty-card-locker/pull/203)
|
||||
- Add options to adjust font sizes on the card listing page and single card page. (https://github.com/brarcher/loyalty-card-locker/pull/204)
|
||||
|
||||
## v0.20 (2018-02-10)
|
||||
|
||||
Changes:
|
||||
- Changes to Card view to display the note, allow the card ID to take multiple lines, and show the store name. (https://github.com/brarcher/loyalty-card-locker/pull/197)
|
||||
|
||||
## v0.19 (2018-02-01)
|
||||
|
||||
Changes:
|
||||
- Improved layout for card list. (https://github.com/brarcher/loyalty-card-locker/pull/188)
|
||||
- Improved layout when viewing a card. (https://github.com/brarcher/loyalty-card-locker/pull/190)
|
||||
|
||||
## v0.18.1 (2018-01-24)
|
||||
|
||||
Changes:
|
||||
|
||||
@@ -11,10 +11,10 @@ android {
|
||||
|
||||
defaultConfig {
|
||||
applicationId "protect.card_locker"
|
||||
minSdkVersion 17
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 27
|
||||
versionCode 21
|
||||
versionName "0.19"
|
||||
versionCode 30
|
||||
versionName "0.24"
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
@@ -27,6 +27,7 @@ android {
|
||||
disable "ButtonStyle"
|
||||
disable "AlwaysShowAction"
|
||||
disable "MissingTranslation"
|
||||
disable "MissingPrefix"
|
||||
}
|
||||
|
||||
// Starting with Android Studio 3 Robolectric is unable to find resources.
|
||||
@@ -36,20 +37,21 @@ android {
|
||||
includeAndroidResources = true
|
||||
}
|
||||
}
|
||||
|
||||
// This is for Robolectric support for SDK 23
|
||||
useLibrary 'org.apache.http.legacy'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile fileTree(dir: 'libs', include: ['*.jar'])
|
||||
compile 'com.android.support:appcompat-v7:27.0.2'
|
||||
compile 'com.android.support:design:27.0.2'
|
||||
compile 'com.android.support:support-v4:27.0.2'
|
||||
compile 'com.journeyapps:zxing-android-embedded:3.5.0@aar'
|
||||
compile 'com.google.zxing:core:3.3.0'
|
||||
compile 'org.apache.commons:commons-csv:1.5'
|
||||
compile 'com.android.support.constraint:constraint-layout:1.0.2'
|
||||
compile 'com.jaredrummler:colorpicker:1.0.2'
|
||||
compile group: 'com.google.guava', name: 'guava', version: '20.0'
|
||||
compile 'com.github.apl-devs:appintro:v4.2.0'
|
||||
compile "com.vanniktech:vntnumberpickerpreference:1.0.0"
|
||||
testCompile 'junit:junit:4.12'
|
||||
testCompile "org.robolectric:robolectric:3.3.2"
|
||||
}
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
android:name=".LoyaltyCardViewActivity"
|
||||
android:theme="@style/AppTheme.NoActionBar"
|
||||
android:label=""
|
||||
android:configChanges="orientation|screenSize"
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:exported="true"/>
|
||||
<activity
|
||||
@@ -51,6 +50,10 @@
|
||||
android:theme="@style/AppTheme.NoActionBar"
|
||||
android:configChanges="orientation|screenSize"
|
||||
android:windowSoftInputMode="stateHidden"/>
|
||||
<activity
|
||||
android:name=".preferences.SettingsActivity"
|
||||
android:label="@string/settings"
|
||||
android:configChanges="orientation|screenSize"/>
|
||||
<activity
|
||||
android:name=".ImportExportActivity"
|
||||
android:label="@string/importExport"
|
||||
|
||||
@@ -21,7 +21,11 @@ import java.lang.ref.WeakReference;
|
||||
class BarcodeImageWriterTask extends AsyncTask<Void, Void, Bitmap>
|
||||
{
|
||||
private static final String TAG = "LoyaltyCardLocker";
|
||||
private static final int MAX_WIDTH = 500;
|
||||
|
||||
// When drawn in a smaller window 1D barcodes for some reason end up
|
||||
// squished, whereas 2D barcodes look fine.
|
||||
private static final int MAX_WIDTH_1D = 1500;
|
||||
private static final int MAX_WIDTH_2D = 500;
|
||||
|
||||
private final WeakReference<ImageView> imageViewReference;
|
||||
private final String cardId;
|
||||
@@ -38,6 +42,8 @@ class BarcodeImageWriterTask extends AsyncTask<Void, Void, Bitmap>
|
||||
cardId = cardIdString;
|
||||
format = barcodeFormat;
|
||||
|
||||
final int MAX_WIDTH = getMaxWidth(format);
|
||||
|
||||
if(imageView.getWidth() < MAX_WIDTH)
|
||||
{
|
||||
imageHeight = imageView.getHeight();
|
||||
@@ -52,6 +58,36 @@ class BarcodeImageWriterTask extends AsyncTask<Void, Void, Bitmap>
|
||||
}
|
||||
}
|
||||
|
||||
private int getMaxWidth(BarcodeFormat format)
|
||||
{
|
||||
switch(format)
|
||||
{
|
||||
// 2D barcodes
|
||||
case AZTEC:
|
||||
case DATA_MATRIX:
|
||||
case MAXICODE:
|
||||
case PDF_417:
|
||||
case QR_CODE:
|
||||
return MAX_WIDTH_2D;
|
||||
|
||||
// 1D barcodes:
|
||||
case CODABAR:
|
||||
case CODE_39:
|
||||
case CODE_93:
|
||||
case CODE_128:
|
||||
case EAN_8:
|
||||
case EAN_13:
|
||||
case ITF:
|
||||
case UPC_A:
|
||||
case UPC_E:
|
||||
case RSS_14:
|
||||
case RSS_EXPANDED:
|
||||
case UPC_EAN_EXTENSION:
|
||||
default:
|
||||
return MAX_WIDTH_1D;
|
||||
}
|
||||
}
|
||||
|
||||
public Bitmap doInBackground(Void... params)
|
||||
{
|
||||
MultiFormatWriter writer = new MultiFormatWriter();
|
||||
@@ -113,6 +149,12 @@ class BarcodeImageWriterTask extends AsyncTask<Void, Void, Bitmap>
|
||||
{
|
||||
Log.e(TAG, "Failed to generate barcode of type " + format + ": " + cardId, e);
|
||||
}
|
||||
catch(OutOfMemoryError e)
|
||||
{
|
||||
Log.w(TAG, "Insufficient memory to render barcode, "
|
||||
+ imageWidth + "x" + imageHeight + ", " + format.name()
|
||||
+ ", length=" + cardId.length(), e);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,8 @@ public class CsvDatabaseExporter implements DatabaseExporter
|
||||
DBHelper.LoyaltyCardDbIds.STORE,
|
||||
DBHelper.LoyaltyCardDbIds.NOTE,
|
||||
DBHelper.LoyaltyCardDbIds.CARD_ID,
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_COLOR,
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR,
|
||||
DBHelper.LoyaltyCardDbIds.BARCODE_TYPE);
|
||||
|
||||
Cursor cursor = db.getLoyaltyCardCursor();
|
||||
@@ -35,6 +37,8 @@ public class CsvDatabaseExporter implements DatabaseExporter
|
||||
card.store,
|
||||
card.note,
|
||||
card.cardId,
|
||||
card.headerColor,
|
||||
card.headerTextColor,
|
||||
card.barcodeType);
|
||||
|
||||
if(Thread.currentThread().isInterrupted())
|
||||
|
||||
@@ -83,7 +83,7 @@ public class CsvDatabaseImporter implements DatabaseImporter
|
||||
* "key" as the key. If no such key exists, or the data is not a valid
|
||||
* int, a FormatException is thrown.
|
||||
*/
|
||||
private int extractInt(String key, CSVRecord record)
|
||||
private Integer extractInt(String key, CSVRecord record, boolean nullIsOk)
|
||||
throws FormatException
|
||||
{
|
||||
if(record.isMapped(key) == false)
|
||||
@@ -91,6 +91,12 @@ public class CsvDatabaseImporter implements DatabaseImporter
|
||||
throw new FormatException("Field not used but expected: " + key);
|
||||
}
|
||||
|
||||
String value = record.get(key);
|
||||
if(value.isEmpty() && nullIsOk)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return Integer.parseInt(record.get(key));
|
||||
@@ -108,7 +114,7 @@ public class CsvDatabaseImporter implements DatabaseImporter
|
||||
private void importLoyaltyCard(SQLiteDatabase database, DBHelper helper, CSVRecord record)
|
||||
throws IOException, FormatException
|
||||
{
|
||||
int id = extractInt(DBHelper.LoyaltyCardDbIds.ID, record);
|
||||
int id = extractInt(DBHelper.LoyaltyCardDbIds.ID, record, false);
|
||||
|
||||
String store = extractString(DBHelper.LoyaltyCardDbIds.STORE, record, "");
|
||||
if(store.isEmpty())
|
||||
@@ -130,6 +136,16 @@ public class CsvDatabaseImporter implements DatabaseImporter
|
||||
throw new FormatException("No barcode type listed, but is required");
|
||||
}
|
||||
|
||||
helper.insertLoyaltyCard(database, id, store, note, cardId, barcodeType);
|
||||
Integer headerColor = null;
|
||||
Integer headerTextColor = null;
|
||||
|
||||
if(record.isMapped(DBHelper.LoyaltyCardDbIds.HEADER_COLOR) &&
|
||||
record.isMapped(DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR))
|
||||
{
|
||||
headerColor = extractInt(DBHelper.LoyaltyCardDbIds.HEADER_COLOR, record, true);
|
||||
headerTextColor = extractInt(DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR, record, true);
|
||||
}
|
||||
|
||||
helper.insertLoyaltyCard(database, id, store, note, cardId, barcodeType, headerColor, headerTextColor);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
{
|
||||
public static final String DATABASE_NAME = "LoyaltyCards.db";
|
||||
public static final int ORIGINAL_DATABASE_VERSION = 1;
|
||||
public static final int DATABASE_VERSION = 2;
|
||||
public static final int DATABASE_VERSION = 3;
|
||||
|
||||
static class LoyaltyCardDbIds
|
||||
{
|
||||
@@ -19,6 +19,8 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
public static final String ID = "_id";
|
||||
public static final String STORE = "store";
|
||||
public static final String NOTE = "note";
|
||||
public static final String HEADER_COLOR = "headercolor";
|
||||
public static final String HEADER_TEXT_COLOR = "headertextcolor";
|
||||
public static final String CARD_ID = "cardid";
|
||||
public static final String BARCODE_TYPE = "barcodetype";
|
||||
}
|
||||
@@ -36,6 +38,8 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
LoyaltyCardDbIds.ID + " INTEGER primary key autoincrement," +
|
||||
LoyaltyCardDbIds.STORE + " TEXT not null," +
|
||||
LoyaltyCardDbIds.NOTE + " TEXT not null," +
|
||||
LoyaltyCardDbIds.HEADER_COLOR + " INTEGER," +
|
||||
LoyaltyCardDbIds.HEADER_TEXT_COLOR + " INTEGER," +
|
||||
LoyaltyCardDbIds.CARD_ID + " TEXT not null," +
|
||||
LoyaltyCardDbIds.BARCODE_TYPE + " TEXT not null)");
|
||||
}
|
||||
@@ -49,10 +53,20 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
|
||||
+ " ADD COLUMN " + LoyaltyCardDbIds.NOTE + " TEXT not null default ''");
|
||||
}
|
||||
|
||||
// Upgrade from version 2 to version 3
|
||||
if(oldVersion < 3 && newVersion >= 3)
|
||||
{
|
||||
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
|
||||
+ " ADD COLUMN " + LoyaltyCardDbIds.HEADER_COLOR + " INTEGER");
|
||||
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
|
||||
+ " ADD COLUMN " + LoyaltyCardDbIds.HEADER_TEXT_COLOR + " INTEGER");
|
||||
}
|
||||
}
|
||||
|
||||
public long insertLoyaltyCard(final String store, final String note, final String cardId,
|
||||
final String barcodeType)
|
||||
final String barcodeType, final Integer headerColor,
|
||||
final Integer headerTextColor)
|
||||
{
|
||||
SQLiteDatabase db = getWritableDatabase();
|
||||
ContentValues contentValues = new ContentValues();
|
||||
@@ -60,13 +74,16 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
contentValues.put(LoyaltyCardDbIds.NOTE, note);
|
||||
contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType);
|
||||
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
|
||||
contentValues.put(LoyaltyCardDbIds.HEADER_TEXT_COLOR, headerTextColor);
|
||||
final long newId = db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
|
||||
return newId;
|
||||
}
|
||||
|
||||
public boolean insertLoyaltyCard(final SQLiteDatabase db, final int id,
|
||||
final String store, final String note, final String cardId,
|
||||
final String barcodeType)
|
||||
final String barcodeType, final Integer headerColor,
|
||||
final Integer headerTextColor)
|
||||
{
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(LoyaltyCardDbIds.ID, id);
|
||||
@@ -74,13 +91,16 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
contentValues.put(LoyaltyCardDbIds.NOTE, note);
|
||||
contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType);
|
||||
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
|
||||
contentValues.put(LoyaltyCardDbIds.HEADER_TEXT_COLOR, headerTextColor);
|
||||
final long newId = db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
|
||||
return (newId != -1);
|
||||
}
|
||||
|
||||
|
||||
public boolean updateLoyaltyCard(final int id, final String store, final String note,
|
||||
final String cardId, final String barcodeType)
|
||||
final String cardId, final String barcodeType,
|
||||
final Integer headerColor, final Integer headerTextColor)
|
||||
{
|
||||
SQLiteDatabase db = getWritableDatabase();
|
||||
ContentValues contentValues = new ContentValues();
|
||||
@@ -88,6 +108,8 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
contentValues.put(LoyaltyCardDbIds.NOTE, note);
|
||||
contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType);
|
||||
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
|
||||
contentValues.put(LoyaltyCardDbIds.HEADER_TEXT_COLOR, headerTextColor);
|
||||
int rowsUpdated = db.update(LoyaltyCardDbIds.TABLE, contentValues,
|
||||
LoyaltyCardDbIds.ID + "=?",
|
||||
new String[]{Integer.toString(id)});
|
||||
|
||||
@@ -4,7 +4,6 @@ import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
@@ -44,20 +43,35 @@ class LetterBitmap
|
||||
* @param tileLetterFontSize The font size used to display the letter
|
||||
* @param width The desired width of the tile
|
||||
* @param height The desired height of the tile
|
||||
* @param backgroundColor (optional) color to use for background.
|
||||
* @param textColor (optional) color to use for text.
|
||||
*/
|
||||
public LetterBitmap(Context context, String displayName, String key, int tileLetterFontSize, int width, int height)
|
||||
public LetterBitmap(Context context, String displayName, String key, int tileLetterFontSize,
|
||||
int width, int height, Integer backgroundColor, Integer textColor)
|
||||
{
|
||||
final Resources res = context.getResources();
|
||||
|
||||
TextPaint paint = new TextPaint();
|
||||
paint.setTypeface(Typeface.create("sans-serif-light", Typeface.BOLD));
|
||||
paint.setColor(Color.WHITE);
|
||||
|
||||
if(textColor != null)
|
||||
{
|
||||
paint.setColor(textColor);
|
||||
}
|
||||
else
|
||||
{
|
||||
paint.setColor(Color.WHITE);
|
||||
}
|
||||
|
||||
paint.setTextAlign(Paint.Align.CENTER);
|
||||
paint.setAntiAlias(true);
|
||||
|
||||
TypedArray colors = res.obtainTypedArray(R.array.letter_tile_colors);
|
||||
mColor = pickColor(key, colors);
|
||||
colors.recycle();
|
||||
if(backgroundColor == null)
|
||||
{
|
||||
mColor = getDefaultColor(context, key);
|
||||
}
|
||||
else
|
||||
{
|
||||
mColor = backgroundColor;
|
||||
}
|
||||
|
||||
mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
||||
String firstChar = displayName.substring(0, 1);
|
||||
@@ -101,11 +115,26 @@ class LetterBitmap
|
||||
* @return A new or previously chosen color for <code>key</code> used as the
|
||||
* tile background color
|
||||
*/
|
||||
private int pickColor(String key, TypedArray colors)
|
||||
private static int pickColor(String key, TypedArray colors)
|
||||
{
|
||||
// String.hashCode() is not supposed to change across java versions, so
|
||||
// this should guarantee the same key always maps to the same color
|
||||
final int color = Math.abs(key.hashCode()) % NUM_OF_TILE_COLORS;
|
||||
return colors.getColor(color, Color.BLACK);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine the color which the letter tile will use if no default
|
||||
* color is provided.
|
||||
*/
|
||||
public static int getDefaultColor(Context context, String key)
|
||||
{
|
||||
final Resources res = context.getResources();
|
||||
|
||||
TypedArray colors = res.obtainTypedArray(R.array.letter_tile_colors);
|
||||
int color = pickColor(key, colors);
|
||||
colors.recycle();
|
||||
|
||||
return color;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package protect.card_locker;
|
||||
|
||||
import android.database.Cursor;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
public class LoyaltyCard
|
||||
{
|
||||
@@ -10,13 +11,22 @@ public class LoyaltyCard
|
||||
public final String cardId;
|
||||
public final String barcodeType;
|
||||
|
||||
public LoyaltyCard(final int id, final String store, final String note, final String cardId, final String barcodeType)
|
||||
@Nullable
|
||||
public final Integer headerColor;
|
||||
|
||||
@Nullable
|
||||
public final Integer headerTextColor;
|
||||
|
||||
public LoyaltyCard(final int id, final String store, final String note, final String cardId,
|
||||
final String barcodeType, final Integer headerColor, final Integer headerTextColor)
|
||||
{
|
||||
this.id = id;
|
||||
this.store = store;
|
||||
this.note = note;
|
||||
this.cardId = cardId;
|
||||
this.barcodeType = barcodeType;
|
||||
this.headerColor = headerColor;
|
||||
this.headerTextColor = headerTextColor;
|
||||
}
|
||||
|
||||
public static LoyaltyCard toLoyaltyCard(Cursor cursor)
|
||||
@@ -27,6 +37,22 @@ public class LoyaltyCard
|
||||
String cardId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID));
|
||||
String barcodeType = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE));
|
||||
|
||||
return new LoyaltyCard(id, store, note, cardId, barcodeType);
|
||||
int headerColorColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR);
|
||||
int headerTextColorColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR);
|
||||
|
||||
Integer headerColor = null;
|
||||
Integer headerTextColor = null;
|
||||
|
||||
if(cursor.isNull(headerColorColumn) == false)
|
||||
{
|
||||
headerColor = cursor.getInt(headerColorColumn);
|
||||
}
|
||||
|
||||
if(cursor.isNull(headerTextColorColumn) == false)
|
||||
{
|
||||
headerTextColor = cursor.getInt(headerTextColorColumn);
|
||||
}
|
||||
|
||||
return new LoyaltyCard(id, store, note, cardId, barcodeType, headerColor, headerTextColor);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,11 +9,16 @@ import android.widget.CursorAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import protect.card_locker.preferences.Settings;
|
||||
|
||||
class LoyaltyCardCursorAdapter extends CursorAdapter
|
||||
{
|
||||
Settings settings;
|
||||
|
||||
public LoyaltyCardCursorAdapter(Context context, Cursor cursor)
|
||||
{
|
||||
super(context, cursor, 0);
|
||||
settings = new Settings(context);
|
||||
}
|
||||
|
||||
// The newView method is used to inflate a new view and return it,
|
||||
@@ -40,10 +45,13 @@ class LoyaltyCardCursorAdapter extends CursorAdapter
|
||||
// Populate fields with extracted properties
|
||||
storeField.setText(loyaltyCard.store);
|
||||
|
||||
storeField.setTextSize(settings.getCardTitleListFontSize());
|
||||
|
||||
if(loyaltyCard.note.isEmpty() == false)
|
||||
{
|
||||
noteField.setVisibility(View.VISIBLE);
|
||||
noteField.setText(loyaltyCard.note);
|
||||
noteField.setTextSize(settings.getCardNoteListFontSize());
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -52,7 +60,11 @@ class LoyaltyCardCursorAdapter extends CursorAdapter
|
||||
|
||||
int tileLetterFontSize = context.getResources().getDimensionPixelSize(R.dimen.tileLetterFontSize);
|
||||
int pixelSize = context.getResources().getDimensionPixelSize(R.dimen.cardThumbnailSize);
|
||||
LetterBitmap letterBitmap = new LetterBitmap(context, loyaltyCard.store, loyaltyCard.store, tileLetterFontSize, pixelSize, pixelSize);
|
||||
|
||||
Integer letterBackgroundColor = loyaltyCard.headerColor;
|
||||
Integer letterTextColor = loyaltyCard.headerTextColor;
|
||||
LetterBitmap letterBitmap = new LetterBitmap(context, loyaltyCard.store, loyaltyCard.store,
|
||||
tileLetterFontSize, pixelSize, pixelSize, letterBackgroundColor, letterTextColor);
|
||||
thumbnail.setImageBitmap(letterBitmap.getLetterTile());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@ package protect.card_locker;
|
||||
import android.app.Activity;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Color;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.design.widget.Snackbar;
|
||||
@@ -24,6 +26,8 @@ import android.widget.Toast;
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
import com.google.zxing.integration.android.IntentIntegrator;
|
||||
import com.google.zxing.integration.android.IntentResult;
|
||||
import com.jaredrummler.android.colorpicker.ColorPickerDialog;
|
||||
import com.jaredrummler.android.colorpicker.ColorPickerDialogListener;
|
||||
|
||||
public class LoyaltyCardEditActivity extends AppCompatActivity
|
||||
{
|
||||
@@ -32,9 +36,11 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
|
||||
private static final int SELECT_BARCODE_REQUEST = 1;
|
||||
|
||||
EditText storeFieldEdit;
|
||||
TextView storeFieldView;
|
||||
EditText noteFieldEdit;
|
||||
TextView noteFieldView;
|
||||
ImageView headingColorSample;
|
||||
Button headingColorSelectButton;
|
||||
ImageView headingStoreTextColorSample;
|
||||
Button headingStoreTextColorSelectButton;
|
||||
TextView cardIdFieldView;
|
||||
View cardIdDivider;
|
||||
View cardIdTableRow;
|
||||
@@ -48,6 +54,8 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
|
||||
|
||||
int loyaltyCardId;
|
||||
boolean updateLoyaltyCard;
|
||||
Integer headingColorValue = null;
|
||||
Integer headingStoreTextColorValue = null;
|
||||
|
||||
DBHelper db;
|
||||
|
||||
@@ -80,9 +88,11 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
|
||||
db = new DBHelper(this);
|
||||
|
||||
storeFieldEdit = findViewById(R.id.storeNameEdit);
|
||||
storeFieldView = findViewById(R.id.storeNameView);
|
||||
noteFieldEdit = findViewById(R.id.noteEdit);
|
||||
noteFieldView = findViewById(R.id.noteView);
|
||||
headingColorSample = findViewById(R.id.headingColorSample);
|
||||
headingColorSelectButton = findViewById(R.id.headingColorSelectButton);
|
||||
headingStoreTextColorSample = findViewById(R.id.headingStoreTextColorSample);
|
||||
headingStoreTextColorSelectButton = findViewById(R.id.headingStoreTextColorSelectButton);
|
||||
cardIdFieldView = findViewById(R.id.cardIdView);
|
||||
cardIdDivider = findViewById(R.id.cardIdDivider);
|
||||
cardIdTableRow = findViewById(R.id.cardIdTableRow);
|
||||
@@ -129,13 +139,11 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
|
||||
if(storeFieldEdit.getText().length() == 0)
|
||||
{
|
||||
storeFieldEdit.setText(loyaltyCard.store);
|
||||
storeFieldView.setText(loyaltyCard.store);
|
||||
}
|
||||
|
||||
if(noteFieldEdit.getText().length() == 0)
|
||||
{
|
||||
noteFieldEdit.setText(loyaltyCard.note);
|
||||
noteFieldView.setText(loyaltyCard.note);
|
||||
}
|
||||
|
||||
if(cardIdFieldView.getText().length() == 0)
|
||||
@@ -148,31 +156,53 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
|
||||
barcodeTypeField.setText(loyaltyCard.barcodeType);
|
||||
}
|
||||
|
||||
if(updateLoyaltyCard)
|
||||
if(headingColorValue == null)
|
||||
{
|
||||
setTitle(R.string.editCardTitle);
|
||||
|
||||
storeFieldView.setVisibility(View.GONE);
|
||||
noteFieldView.setVisibility(View.GONE);
|
||||
headingColorValue = loyaltyCard.headerColor;
|
||||
if(headingColorValue == null)
|
||||
{
|
||||
headingColorValue = LetterBitmap.getDefaultColor(this, loyaltyCard.store);
|
||||
}
|
||||
headingColorSample.setBackgroundColor(headingColorValue);
|
||||
}
|
||||
else
|
||||
|
||||
if(headingStoreTextColorValue == null)
|
||||
{
|
||||
barcodeCaptureLayout.setVisibility(View.GONE);
|
||||
captureButton.setVisibility(View.GONE);
|
||||
setTitle(R.string.viewCardTitle);
|
||||
|
||||
storeFieldEdit.setVisibility(View.GONE);
|
||||
noteFieldEdit.setVisibility(View.GONE);
|
||||
headingStoreTextColorValue = loyaltyCard.headerTextColor;
|
||||
if(headingStoreTextColorValue == null)
|
||||
{
|
||||
headingStoreTextColorValue = Color.WHITE;
|
||||
}
|
||||
headingStoreTextColorSample.setBackgroundColor(headingStoreTextColorValue);
|
||||
}
|
||||
|
||||
setTitle(R.string.editCardTitle);
|
||||
}
|
||||
else
|
||||
{
|
||||
setTitle(R.string.addCardTitle);
|
||||
|
||||
storeFieldView.setVisibility(View.GONE);
|
||||
noteFieldView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
if(headingColorValue == null)
|
||||
{
|
||||
// Select a random color to start out with.
|
||||
TypedArray colors = getResources().obtainTypedArray(R.array.letter_tile_colors);
|
||||
final int color = (int)(Math.random() * colors.length());
|
||||
headingColorValue = colors.getColor(color, Color.BLACK);
|
||||
colors.recycle();
|
||||
|
||||
headingColorSample.setBackgroundColor(headingColorValue);
|
||||
}
|
||||
|
||||
if(headingStoreTextColorValue == null)
|
||||
{
|
||||
headingStoreTextColorValue = Color.WHITE;
|
||||
headingStoreTextColorSample.setBackgroundColor(headingStoreTextColorValue);
|
||||
}
|
||||
|
||||
headingColorSelectButton.setOnClickListener(new ColorSelectListener(headingColorValue, true));
|
||||
headingStoreTextColorSelectButton.setOnClickListener(new ColorSelectListener(headingStoreTextColorValue, false));
|
||||
|
||||
if(cardIdFieldView.getText().length() > 0 && barcodeTypeField.getText().length() > 0)
|
||||
{
|
||||
String formatString = barcodeTypeField.getText().toString();
|
||||
@@ -223,6 +253,7 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
|
||||
|
||||
String prompt = getResources().getString(R.string.scanCardBarcode);
|
||||
integrator.setPrompt(prompt);
|
||||
integrator.setBeepEnabled(false);
|
||||
integrator.initiateScan();
|
||||
}
|
||||
};
|
||||
@@ -262,6 +293,48 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
|
||||
}
|
||||
}
|
||||
|
||||
class ColorSelectListener implements View.OnClickListener
|
||||
{
|
||||
final int defaultColor;
|
||||
final boolean isBackgroundColor;
|
||||
|
||||
ColorSelectListener(int defaultColor, boolean isBackgroundColor)
|
||||
{
|
||||
this.defaultColor = defaultColor;
|
||||
this.isBackgroundColor = isBackgroundColor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
ColorPickerDialog dialog = ColorPickerDialog.newBuilder().setColor(defaultColor).create();
|
||||
dialog.setColorPickerDialogListener(new ColorPickerDialogListener()
|
||||
{
|
||||
@Override
|
||||
public void onColorSelected(int dialogId, int color)
|
||||
{
|
||||
if(isBackgroundColor)
|
||||
{
|
||||
headingColorSample.setBackgroundColor(color);
|
||||
headingColorValue = color;
|
||||
}
|
||||
else
|
||||
{
|
||||
headingStoreTextColorSample.setBackgroundColor(color);
|
||||
headingStoreTextColorValue = color;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDialogDismissed(int dialogId)
|
||||
{
|
||||
// Nothing to do, no change made
|
||||
}
|
||||
});
|
||||
dialog.show(getFragmentManager(), "color-picker-dialog");
|
||||
}
|
||||
}
|
||||
|
||||
private void doSave()
|
||||
{
|
||||
String store = storeFieldEdit.getText().toString();
|
||||
@@ -283,12 +356,12 @@ public class LoyaltyCardEditActivity extends AppCompatActivity
|
||||
|
||||
if(updateLoyaltyCard)
|
||||
{
|
||||
db.updateLoyaltyCard(loyaltyCardId, store, note, cardId, barcodeType);
|
||||
db.updateLoyaltyCard(loyaltyCardId, store, note, cardId, barcodeType, headingColorValue, headingStoreTextColorValue);
|
||||
Log.i(TAG, "Updated " + loyaltyCardId + " to " + cardId);
|
||||
}
|
||||
else
|
||||
{
|
||||
loyaltyCardId = (int)db.insertLoyaltyCard(store, note, cardId, barcodeType);
|
||||
loyaltyCardId = (int)db.insertLoyaltyCard(store, note, cardId, barcodeType, headingColorValue, headingStoreTextColorValue);
|
||||
}
|
||||
|
||||
finish();
|
||||
|
||||
@@ -1,44 +1,46 @@
|
||||
package protect.card_locker;
|
||||
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.graphics.Color;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.design.widget.Snackbar;
|
||||
import android.support.v4.widget.TextViewCompat;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
import protect.card_locker.preferences.Settings;
|
||||
|
||||
|
||||
public class LoyaltyCardViewActivity extends AppCompatActivity
|
||||
{
|
||||
private static final String TAG = "CardLocker";
|
||||
|
||||
TextView cardIdFieldView;
|
||||
TextView noteView;
|
||||
View noteViewDivider;
|
||||
TextView storeName;
|
||||
ImageView barcodeImage;
|
||||
ImageView storeLogo;
|
||||
View collapsingToolbarLayout;
|
||||
int loyaltyCardId;
|
||||
boolean rotationEnabled;
|
||||
DBHelper db;
|
||||
Settings settings;
|
||||
|
||||
private void extractIntentFields(Intent intent)
|
||||
{
|
||||
@@ -52,6 +54,8 @@ public class LoyaltyCardViewActivity extends AppCompatActivity
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
settings = new Settings(this);
|
||||
|
||||
extractIntentFields(getIntent());
|
||||
|
||||
setContentView(R.layout.loyalty_card_view_layout);
|
||||
@@ -67,8 +71,10 @@ public class LoyaltyCardViewActivity extends AppCompatActivity
|
||||
db = new DBHelper(this);
|
||||
|
||||
cardIdFieldView = findViewById(R.id.cardIdView);
|
||||
noteView = findViewById(R.id.noteView);
|
||||
noteViewDivider = findViewById(R.id.noteViewDivider);
|
||||
storeName = findViewById(R.id.storeName);
|
||||
barcodeImage = findViewById(R.id.barcode);
|
||||
storeLogo = findViewById(R.id.storeLogo);
|
||||
collapsingToolbarLayout = findViewById(R.id.collapsingToolbarLayout);
|
||||
}
|
||||
|
||||
@@ -90,7 +96,7 @@ public class LoyaltyCardViewActivity extends AppCompatActivity
|
||||
// '1' is the brightest. We attempt to maximize the brightness
|
||||
// to help barcode readers scan the barcode.
|
||||
Window window = getWindow();
|
||||
if(window != null)
|
||||
if(window != null && settings.useMaxBrightnessDisplayingBarcode())
|
||||
{
|
||||
WindowManager.LayoutParams attributes = window.getAttributes();
|
||||
attributes.screenBrightness = 1F;
|
||||
@@ -111,12 +117,48 @@ public class LoyaltyCardViewActivity extends AppCompatActivity
|
||||
final String cardIdString = loyaltyCard.cardId;
|
||||
|
||||
cardIdFieldView.setText(loyaltyCard.cardId);
|
||||
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(cardIdFieldView,
|
||||
getResources().getInteger(R.integer.settings_card_id_min_font_size_sp)-1, settings.getCardIdFontSize(),
|
||||
1, TypedValue.COMPLEX_UNIT_SP);
|
||||
|
||||
int cardViewLetterFontSize = getResources().getDimensionPixelSize(R.dimen.cardViewLetterFontSize);
|
||||
int pixelSize = getResources().getDimensionPixelSize(R.dimen.cardThumbnailSizeLarge);
|
||||
LetterBitmap letterBitmap = new LetterBitmap(this, loyaltyCard.store, loyaltyCard.store, cardViewLetterFontSize, pixelSize, pixelSize);
|
||||
storeLogo.setImageBitmap(letterBitmap.getLetterTile());
|
||||
collapsingToolbarLayout.setBackgroundColor(letterBitmap.getBackgroundColor());
|
||||
if(loyaltyCard.note.length() > 0)
|
||||
{
|
||||
noteView.setText(loyaltyCard.note);
|
||||
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(noteView,
|
||||
getResources().getInteger(R.integer.settings_card_note_min_font_size_sp)-1,
|
||||
settings.getCardNoteFontSize(), 1, TypedValue.COMPLEX_UNIT_SP);
|
||||
}
|
||||
else
|
||||
{
|
||||
noteView.setVisibility(View.GONE);
|
||||
noteViewDivider.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
storeName.setText(loyaltyCard.store);
|
||||
storeName.setTextSize(settings.getCardTitleFontSize());
|
||||
|
||||
int textColor;
|
||||
if(loyaltyCard.headerTextColor != null)
|
||||
{
|
||||
textColor = loyaltyCard.headerTextColor;
|
||||
}
|
||||
else
|
||||
{
|
||||
textColor = Color.WHITE;
|
||||
}
|
||||
storeName.setTextColor(textColor);
|
||||
|
||||
int backgroundHeaderColor;
|
||||
if(loyaltyCard.headerColor != null)
|
||||
{
|
||||
backgroundHeaderColor = loyaltyCard.headerColor;
|
||||
}
|
||||
else
|
||||
{
|
||||
backgroundHeaderColor = LetterBitmap.getDefaultColor(this, loyaltyCard.store);
|
||||
}
|
||||
|
||||
collapsingToolbarLayout.setBackgroundColor(backgroundHeaderColor);
|
||||
|
||||
if(barcodeImage.getHeight() == 0)
|
||||
{
|
||||
|
||||
@@ -30,6 +30,7 @@ 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
|
||||
{
|
||||
@@ -164,6 +165,13 @@ public class MainActivity extends AppCompatActivity
|
||||
return true;
|
||||
}
|
||||
|
||||
if(id == R.id.action_settings)
|
||||
{
|
||||
Intent i = new Intent(getApplicationContext(), SettingsActivity.class);
|
||||
startActivity(i);
|
||||
return true;
|
||||
}
|
||||
|
||||
if(id == R.id.action_intro)
|
||||
{
|
||||
startIntro();
|
||||
@@ -181,14 +189,15 @@ public class MainActivity extends AppCompatActivity
|
||||
|
||||
private void displayAboutDialog()
|
||||
{
|
||||
final Map<String, String> USED_LIBRARIES = ImmutableMap.of
|
||||
(
|
||||
"Commons CSV", "https://commons.apache.org/proper/commons-csv/",
|
||||
"Guava", "https://github.com/google/guava",
|
||||
"ZXing", "https://github.com/zxing/zxing",
|
||||
"ZXing Android Embedded", "https://github.com/journeyapps/zxing-android-embedded",
|
||||
"AppIntro", "https://github.com/apl-devs/AppIntro"
|
||||
);
|
||||
final Map<String, String> USED_LIBRARIES = new ImmutableMap.Builder<String, String>()
|
||||
.put("Commons CSV", "https://commons.apache.org/proper/commons-csv/")
|
||||
.put("Guava", "https://github.com/google/guava")
|
||||
.put("ZXing", "https://github.com/zxing/zxing")
|
||||
.put("ZXing Android Embedded", "https://github.com/journeyapps/zxing-android-embedded")
|
||||
.put("AppIntro", "https://github.com/apl-devs/AppIntro")
|
||||
.put("Color Picker", "https://github.com/jaredrummler/ColorPicker")
|
||||
.put("VNTNumberPickerPreference", "https://github.com/vanniktech/VNTNumberPickerPreference")
|
||||
.build();
|
||||
|
||||
final Map<String, String> USED_ASSETS = ImmutableMap.of
|
||||
(
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
package protect.card_locker.preferences;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.IntegerRes;
|
||||
import android.support.annotation.StringRes;
|
||||
|
||||
import protect.card_locker.R;
|
||||
|
||||
public class Settings
|
||||
{
|
||||
private Context context;
|
||||
private SharedPreferences settings;
|
||||
|
||||
public Settings(Context context)
|
||||
{
|
||||
this.context = context;
|
||||
this.settings = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
}
|
||||
|
||||
private String getResString(@StringRes int resId)
|
||||
{
|
||||
return context.getString(resId);
|
||||
}
|
||||
|
||||
private int getResInt(@IntegerRes int resId)
|
||||
{
|
||||
return context.getResources().getInteger(resId);
|
||||
}
|
||||
|
||||
private int getInt(@StringRes int keyId, @IntegerRes int defaultId)
|
||||
{
|
||||
return settings.getInt(getResString(keyId), getResInt(defaultId));
|
||||
}
|
||||
|
||||
private boolean getBoolean(@StringRes int keyId, boolean defaultValue)
|
||||
{
|
||||
return settings.getBoolean(getResString(keyId), defaultValue);
|
||||
}
|
||||
|
||||
public int getCardTitleListFontSize()
|
||||
{
|
||||
return getInt(R.string.settings_key_card_title_list_font_size, R.integer.settings_card_title_list_font_size_sp);
|
||||
}
|
||||
|
||||
public int getCardNoteListFontSize()
|
||||
{
|
||||
return getInt(R.string.settings_key_card_note_list_font_size, R.integer.settings_card_note_list_font_size_sp);
|
||||
}
|
||||
|
||||
public int getCardTitleFontSize()
|
||||
{
|
||||
return getInt(R.string.settings_key_card_title_font_size, R.integer.settings_card_title_font_size_sp);
|
||||
}
|
||||
|
||||
public int getCardIdFontSize()
|
||||
{
|
||||
return getInt(R.string.settings_key_card_id_font_size, R.integer.settings_card_id_font_size_sp);
|
||||
}
|
||||
|
||||
public int getCardNoteFontSize()
|
||||
{
|
||||
return getInt(R.string.settings_key_card_note_font_size, R.integer.settings_card_note_font_size_sp);
|
||||
}
|
||||
|
||||
public boolean useMaxBrightnessDisplayingBarcode()
|
||||
{
|
||||
return getBoolean(R.string.settings_key_display_barcode_max_brightness, true);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package protect.card_locker.preferences;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import protect.card_locker.R;
|
||||
|
||||
public class SettingsActivity extends AppCompatActivity
|
||||
{
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
ActionBar actionBar = getSupportActionBar();
|
||||
if(actionBar != null)
|
||||
{
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
|
||||
// Display the fragment as the main content.
|
||||
getFragmentManager().beginTransaction()
|
||||
.replace(android.R.id.content, new SettingsFragment())
|
||||
.commit();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item)
|
||||
{
|
||||
int id = item.getItemId();
|
||||
|
||||
if(id == android.R.id.home)
|
||||
{
|
||||
finish();
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
public static class SettingsFragment extends PreferenceFragment
|
||||
{
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
// Load the preferences from an XML resource
|
||||
addPreferencesFromResource(R.xml.preferences);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 46 KiB |
@@ -61,7 +61,8 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:textSize="@dimen/inputSize"
|
||||
android:padding="@dimen/inputPadding"
|
||||
android:layout_alignParentStart="true"/>
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentLeft="true"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/storeNameEdit"
|
||||
@@ -70,16 +71,10 @@
|
||||
android:layout_width="match_parent"
|
||||
android:padding="@dimen/inputPadding"
|
||||
android:textSize="@dimen/inputSize"
|
||||
android:layout_toEndOf="@id/storeNameField"/>
|
||||
android:layout_toEndOf="@id/storeNameField"
|
||||
android:layout_toRightOf="@id/storeNameField"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/storeNameView"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:padding="@dimen/inputPadding"
|
||||
android:textSize="@dimen/inputSize"
|
||||
android:textIsSelectable="true"
|
||||
android:layout_toEndOf="@id/storeNameField"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<View
|
||||
@@ -118,7 +113,9 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:textSize="@dimen/inputSize"
|
||||
android:padding="@dimen/inputPadding"
|
||||
android:layout_alignParentStart="true"/>
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/noteEdit"
|
||||
@@ -127,17 +124,154 @@
|
||||
android:layout_width="match_parent"
|
||||
android:padding="@dimen/inputPadding"
|
||||
android:textSize="@dimen/inputSize"
|
||||
android:layout_toEndOf="@id/noteField"/>
|
||||
android:layout_toEndOf="@id/noteField"
|
||||
android:layout_toRightOf="@id/noteField"
|
||||
/>
|
||||
</RelativeLayout>
|
||||
|
||||
<View
|
||||
android:gravity="end"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="@dimen/inputBorderThickness"
|
||||
android:background="@color/inputBorder" />
|
||||
</TableRow>
|
||||
|
||||
<!-- Store Header Background Color -->
|
||||
<View
|
||||
android:layout_height="@dimen/inputBorderThickness"
|
||||
android:layout_width="match_parent"
|
||||
android:background="@color/inputBorder" />
|
||||
<TableRow
|
||||
android:background="@color/inputBackground"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<View
|
||||
android:gravity="start"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="@dimen/inputBorderThickness"
|
||||
android:background="@color/inputBorder" />
|
||||
|
||||
<android.support.constraint.ConstraintLayout
|
||||
android:layout_weight="1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingRight="@dimen/inputPadding"
|
||||
android:paddingEnd="@dimen/inputPadding">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/noteView"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:padding="@dimen/inputPadding"
|
||||
android:id="@+id/headingField"
|
||||
android:text="@string/storeTextBackgroundColorTitle"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:textSize="@dimen/inputSize"
|
||||
android:textIsSelectable="true"
|
||||
android:layout_toEndOf="@id/noteField"/>
|
||||
</RelativeLayout>
|
||||
android:padding="@dimen/inputPadding"
|
||||
app:layout_constraintStart_toStartOf="parent"/>
|
||||
|
||||
<android.support.constraint.ConstraintLayout
|
||||
android:id="@+id/headingColorSampleBorder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_margin="@dimen/colorSamplePadding"
|
||||
app:layout_constraintStart_toEndOf="@id/headingField"
|
||||
app:layout_constraintEnd_toStartOf="@+id/headingColorSelectButton"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:background="@android:color/black">
|
||||
<ImageView
|
||||
android:id="@+id/headingColorSample"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_margin="1dp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:background="@android:color/white"
|
||||
android:contentDescription="@string/storeNameBackgroundColorDescription"/>
|
||||
</android.support.constraint.ConstraintLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/headingColorSelectButton"
|
||||
android:text="@string/change"
|
||||
android:padding="@dimen/inputPadding"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_toEndOf="@id/headingColorSampleBorder"
|
||||
android:layout_toRightOf="@id/headingColorSampleBorder"
|
||||
app:layout_constraintEnd_toEndOf="parent"/>
|
||||
</android.support.constraint.ConstraintLayout>
|
||||
|
||||
<View
|
||||
android:gravity="end"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="@dimen/inputBorderThickness"
|
||||
android:background="@color/inputBorder" />
|
||||
</TableRow>
|
||||
|
||||
<!-- Store Text Color -->
|
||||
<View
|
||||
android:layout_height="@dimen/inputBorderThickness"
|
||||
android:layout_width="match_parent"
|
||||
android:background="@color/inputBorder" />
|
||||
<TableRow
|
||||
android:background="@color/inputBackground"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<View
|
||||
android:gravity="start"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="@dimen/inputBorderThickness"
|
||||
android:background="@color/inputBorder" />
|
||||
|
||||
<android.support.constraint.ConstraintLayout
|
||||
android:layout_weight="1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingRight="@dimen/inputPadding"
|
||||
android:paddingEnd="@dimen/inputPadding">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/storeTextField"
|
||||
android:text="@string/storeTextColorTitle"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:textSize="@dimen/inputSize"
|
||||
android:padding="@dimen/inputPadding"
|
||||
app:layout_constraintStart_toStartOf="parent"/>
|
||||
|
||||
<android.support.constraint.ConstraintLayout
|
||||
android:id="@+id/headingStoreTextColorSampleBorder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_margin="@dimen/colorSamplePadding"
|
||||
app:layout_constraintStart_toEndOf="@id/storeTextField"
|
||||
app:layout_constraintEnd_toStartOf="@+id/headingStoreTextColorSelectButton"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:background="@android:color/black">
|
||||
<ImageView
|
||||
android:id="@+id/headingStoreTextColorSample"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_margin="1dp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:background="@android:color/white"
|
||||
android:contentDescription="@string/storeNameColorDescription"/>
|
||||
</android.support.constraint.ConstraintLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/headingStoreTextColorSelectButton"
|
||||
android:text="@string/change"
|
||||
android:padding="@dimen/inputPadding"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_toEndOf="@id/headingStoreTextColorSampleBorder"
|
||||
android:layout_toRightOf="@id/headingStoreTextColorSampleBorder"
|
||||
app:layout_constraintEnd_toEndOf="parent"/>
|
||||
</android.support.constraint.ConstraintLayout>
|
||||
|
||||
<View
|
||||
android:gravity="end"
|
||||
@@ -178,7 +312,9 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:textSize="@dimen/inputSize"
|
||||
android:padding="@dimen/inputPadding"
|
||||
android:layout_alignParentStart="true"/>
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/cardIdView"
|
||||
@@ -187,7 +323,9 @@
|
||||
android:padding="@dimen/inputPadding"
|
||||
android:textSize="@dimen/inputSize"
|
||||
android:textIsSelectable="true"
|
||||
android:layout_toEndOf="@id/cardIdField"/>
|
||||
android:layout_toEndOf="@id/cardIdField"
|
||||
android:layout_toRightOf="@id/cardIdField"
|
||||
/>
|
||||
</RelativeLayout>
|
||||
|
||||
<View
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
android:layout_width="@dimen/cardThumbnailSize"
|
||||
android:layout_height="@dimen/cardThumbnailSize"
|
||||
android:layout_marginEnd="@dimen/activity_margin"
|
||||
android:layout_marginRight="@dimen/activity_margin"
|
||||
android:src="@mipmap/ic_launcher"
|
||||
android:contentDescription="@string/thumbnailDescription"/>
|
||||
|
||||
|
||||
@@ -15,35 +15,77 @@
|
||||
android:layout_height="fill_parent"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
||||
<LinearLayout
|
||||
<android.support.constraint.ConstraintLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<android.support.constraint.Guideline
|
||||
android:id="@+id/centerGuideline"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintGuide_percent="0.5"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/barcode"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="0.0px"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginTop="20.0dip"
|
||||
android:layout_marginBottom="10.0dip"
|
||||
android:layout_weight="0.1"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginStart="15.0dip"
|
||||
android:layout_marginEnd="15.0dip"
|
||||
app:layout_constraintBottom_toTopOf="@+id/centerGuideline"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:contentDescription="@string/barcodeImageDescription"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/cardIdView"
|
||||
android:textSize="42.0sp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0px"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginLeft="10.0dip"
|
||||
android:layout_marginRight="10.0dip"
|
||||
android:maxLines="1"
|
||||
android:layout_weight="0.1"
|
||||
app:layout_constraintTop_toBottomOf="@id/centerGuideline"
|
||||
app:layout_constraintBottom_toTopOf="@+id/noteViewDivider"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:textAlignment="center"
|
||||
app:autoSizeTextType="uniform"
|
||||
app:autoSizeMinTextSize="@dimen/singleCardCardIdTextSizeMin"
|
||||
app:autoSizeMaxTextSize="@dimen/singleCardCardIdTextSizeMax"
|
||||
android:ellipsize="end"
|
||||
android:text="1234567890"/>
|
||||
android:textIsSelectable="true"/>
|
||||
|
||||
</LinearLayout>
|
||||
<View
|
||||
android:id="@id/noteViewDivider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="@android:color/black"
|
||||
app:layout_constraintTop_toBottomOf="@id/cardIdView"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/noteView"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@id/noteView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="10.0dip"
|
||||
android:ellipsize="end"
|
||||
android:layout_gravity="bottom"
|
||||
app:layout_constraintTop_toBottomOf="@id/noteViewDivider"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:autoSizeTextType="uniform"
|
||||
app:autoSizeMinTextSize="@dimen/singleCardNoteTextSizeMin"
|
||||
app:autoSizeMaxTextSize="@dimen/singleCardNoteTextSizeMax"
|
||||
android:textIsSelectable="true"/>
|
||||
|
||||
</android.support.constraint.ConstraintLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/drop_shadow_actionbar"
|
||||
@@ -58,7 +100,7 @@
|
||||
android:clipChildren="false"
|
||||
android:clipToPadding="false"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="224.0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:weightSum="1.0"
|
||||
android:fitsSystemWindows="true">
|
||||
<android.support.design.widget.CollapsingToolbarLayout
|
||||
@@ -73,11 +115,18 @@
|
||||
app:expandedTitleMarginEnd="64dp"
|
||||
app:contentScrim="?colorPrimary"
|
||||
app:expandedTitleGravity="top">
|
||||
<ImageView
|
||||
android:id="@+id/storeLogo"
|
||||
<TextView
|
||||
android:id="@+id/storeName"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="40sp"
|
||||
android:textAlignment="center"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginTop="?actionBarSize"
|
||||
android:layout_marginBottom="?actionBarSize"
|
||||
app:layout_collapseMode="parallax"
|
||||
android:fitsSystemWindows="true"/>
|
||||
<android.support.v7.widget.Toolbar
|
||||
|
||||
@@ -12,6 +12,10 @@
|
||||
android:icon="@drawable/ic_import_export_white_24dp"
|
||||
android:title="@string/importExport"
|
||||
app:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@+id/action_settings"
|
||||
android:title="@string/settings"
|
||||
app:showAsAction="never"/>
|
||||
<item
|
||||
android:id="@+id/action_intro"
|
||||
android:title="@string/startIntro"
|
||||
|
||||
@@ -71,4 +71,4 @@
|
||||
|
||||
<string name="copy_to_clipboard_toast">ID karty zkopírováno do schránky</string>
|
||||
|
||||
</resources>
|
||||
</resources>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Loyalty Card Keychain</string>
|
||||
<string name="action_add">Neu</string>
|
||||
|
||||
<string name="noGiftCards">Sie haben noch keine Kundenkarte angelegt. Über den "+" Button oben rechts, können welche angelegt werden.\n\nDiese App ermöglicht es, Kundenkarten immer mit zu führen.</string>
|
||||
<string name="noGiftCards">Sie haben noch keine Kundenkarte angelegt. Über den \"+\"-Button oben rechts können welche angelegt werden.\n\nDiese App ermöglicht es, Kundenkarten immer mit zu führen.</string>
|
||||
|
||||
<string name="storeName">Geschäft</string>
|
||||
<string name="note">Notiz</string>
|
||||
@@ -13,24 +13,34 @@
|
||||
|
||||
<string name="cancel">Abbrechen</string>
|
||||
<string name="save">Speichern</string>
|
||||
<string name="capture">Karte erfassen</string>
|
||||
<string name="enterCard">Karte einfügen</string>
|
||||
<string name="capture">Karte scannen</string>
|
||||
<string name="enterCard">Manuell eingeben</string>
|
||||
<string name="editCard">Karte bearbeiten</string>
|
||||
<string name="edit">Bearbeiten</string>
|
||||
<string name="delete">Löschen</string>
|
||||
<string name="confirm">Bestätigen</string>
|
||||
<string name="lockScreen">Rotation blockieren</string>
|
||||
<string name="unlockScreen">Rotation zulassen</string>
|
||||
<string name="deleteTitle">Karte entfernen</string>
|
||||
<string name="deleteConfirmation">Bitte bestätigen Sie, dass diese Karte gelöscht werden soll.</string>
|
||||
<string name="ok">Ok</string>
|
||||
<string name="copy_to_clipboard">Kopiere die Nummer in die Zwischenablage</string>
|
||||
<string name="sendLabel">Senden…</string>
|
||||
<string name="addedShortcut">Zum Home Screen hinzugefügt</string>
|
||||
|
||||
<string name="editCardTitle">Kundenkarte bearbeiten</string>
|
||||
<string name="addCardTitle">Neue Kundenkarte</string>
|
||||
<string name="viewCardTitle">Kundenkarte anzeigen</string>
|
||||
<string name="scanCardBarcode">Barcode scannen</string>
|
||||
<string name="cardShortcut">Shortcut zu einer Karte</string>
|
||||
<string name="noCardsMessage">Es ist noch keine Karte vorhanden, bitte zuerst eine hinzufügen</string>
|
||||
|
||||
<string name="barcodeImageDescription">Bild des Barcodes</string>
|
||||
|
||||
<string name="noStoreError">Kein Geschäft angegeben</string>
|
||||
<string name="noCardIdError">Keine Kartennummer angegeben</string>
|
||||
<string name="noCardExistsError">Karte konnte nicht gefunden werden</string>
|
||||
|
||||
<string name="cardIdFormat">%1$s: %2$s</string>
|
||||
<string name="importExport">Import/Export</string>
|
||||
<string name="importName">Import</string>
|
||||
@@ -49,22 +59,22 @@
|
||||
<string name="exporting">Exportiere…</string>
|
||||
<string name="noExternalStoragePermissionError">Ohne die Berechtigung für den externen Speicher kann kein Import oder Export erfolgen.</string>
|
||||
<string name="exportOptionExplanation">Die Datei wird ins Rootverzeichnis des externen Speichers geschrieben.</string>
|
||||
<string name="importOptionFilesystemTitle">Importiere vom Dateisystem</string>
|
||||
<string name="importOptionFilesystemExplanation">Wähle eine Datei im Speicher aus.</string>
|
||||
<string name="importOptionFilesystemButton">Vom Dateisystem</string>
|
||||
<string name="importOptionApplicationTitle">Nutze eine externe App</string>
|
||||
<string name="importOptionFilesystemTitle">Importiere aus Dateisystem</string>
|
||||
<string name="importOptionFilesystemExplanation">Wähle eine Datei aus dem Speicher aus.</string>
|
||||
<string name="importOptionFilesystemButton">Aus Dateisystem</string>
|
||||
<string name="importOptionApplicationTitle">Externe App verwenden</string>
|
||||
<string name="importOptionApplicationExplanation">Wählen Sie eine Datei aus einer App wie Dropbox, Google Drive, oder Ihrem bevorzugten Dateisystem aus.</string>
|
||||
<string name="importOptionApplicationButton">Nutze eine externe App</string>
|
||||
<string name="importOptionFixedTitle">Importiere vom Export-Pfad</string>
|
||||
<string name="importOptionFixedExplanation">Importiere vom Export-Pfad.</string>
|
||||
<string name="importOptionFixedButton">Verwende den Export-Pfad.</string>
|
||||
<string name="importOptionFixedTitle">Importiere aus Export-Pfad</string>
|
||||
<string name="importOptionFixedExplanation">Nutze den Export-Pfad, um Karten zu importieren (dies stellt zuvor gesicherte Daten wieder her).</string>
|
||||
<string name="importOptionFixedButton">Export-Pfad verwenden</string>
|
||||
|
||||
<string name="about">Über</string>
|
||||
<string name="app_copyright_fmt">Copyright 2016-<xliff:g>%d</xliff:g> Branden Archer</string>
|
||||
<string name="app_license">Lizensiert unter der GPLv3.</string>
|
||||
<string name="about_title_fmt">Über <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Version: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Versions Information: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Informationen zu dieser Version: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="app_libraries"><xliff:g id="app_name">%s</xliff:g> benutzt die folgenden Fremdbibliotheken: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_resources"><xliff:g id="app_name">%s</xliff:g> verwendet folgenden Dritt-Ressourcen: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
|
||||
@@ -73,6 +83,8 @@
|
||||
|
||||
<string name="copy_to_clipboard_toast">Nummer in die Zwischenablage kopiert</string>
|
||||
|
||||
<string name="thumbnailDescription">Vorschaubild für die Karte</string>
|
||||
|
||||
<string name="startIntro">Starte Einführung</string>
|
||||
<string name="intro1Title">Willkommen zu Loyalty Card Keychain\n</string>
|
||||
<string name="intro1Description">Verwalten Sie Ihre Barcode-Kundenkarten auf Ihrem Smartphone!\n\n</string>
|
||||
@@ -86,4 +98,8 @@
|
||||
<string name="intro5Description">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</string>
|
||||
<string name="intro6Title">Feedback\n</string>
|
||||
<string name="intro6Description">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 (:</string>
|
||||
</resources>
|
||||
|
||||
<string name="change">Anpassen</string>
|
||||
<string name="settings">Einstellungen</string>
|
||||
<string name="settings_category_title_ui">Benutzeroberfläche</string>
|
||||
</resources>
|
||||
|
||||
115
app/src/main/res/values-el-rGR/strings.xml
Normal file
@@ -0,0 +1,115 @@
|
||||
<resources
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
|
||||
<string name="app_name">Loyalty Card Keychain</string>
|
||||
<string name="action_add">Προσθήκη</string>
|
||||
|
||||
<string name="noGiftCards">Δεν έχετε κάρτες προς το παρόν. Πατήστε το κουμπί \"+\" (συν) στο πάνω μέρος για να ξεκινήσετε.\n\nΤο Loyalty Card Keychain σας δίνει τη δυνατότητα να έχετε τις κάρτες σας στο τηλέφωνο σας, έτσι ώστε να τις έχετε πάντα μαζί σας.</string>
|
||||
|
||||
<string name="storeName">Κατάστημα</string>
|
||||
<string name="note">Σημείωση</string>
|
||||
<string name="cardId">Κωδικός Κάρτας</string>
|
||||
<string name="barcodeType">Τύπος Barcode</string>
|
||||
|
||||
<string name="cancel">Άκυρο</string>
|
||||
<string name="save">Αποθήκευση</string>
|
||||
<string name="capture">Φωτογράφιση Κάρτας</string>
|
||||
<string name="enterCard">Εισάγετε Κάρτα</string>
|
||||
<string name="editCard">Επεξεργασία Κάρτας</string>
|
||||
<string name="edit">Επεξεργασία</string>
|
||||
<string name="delete">Διαγραφή</string>
|
||||
<string name="confirm">Επιβεβαίωση</string>
|
||||
<string name="lockScreen">Αποκλεισμός Περιστροφής</string>
|
||||
<string name="unlockScreen">Περιστροφή</string>
|
||||
<string name="deleteTitle">Αφαίρεση Κάρτας</string>
|
||||
<string name="deleteConfirmation">Παρακαλώ επιβεβαιώστε ότι θέλετε να διαγράψετε αυτή την κάρτα.</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="copy_to_clipboard">Αντιγραφή κωδικού στο πρόχειρο</string>
|
||||
<string name="sendLabel">Αποστολή…</string>
|
||||
<string name="addedShortcut">Προστέθηκε στην Αρχική Οθόνη</string>
|
||||
|
||||
<string name="editCardTitle">Επεξεργασία Κάρτας</string>
|
||||
<string name="addCardTitle">Προσθήκη Κάρτας</string>
|
||||
<string name="viewCardTitle">Εμφάνιση Κάρτας</string>
|
||||
<string name="scanCardBarcode">Σαρώστε τον κωδικό της κάρτας</string>
|
||||
<string name="cardShortcut">Συντόμευση Κάρτας</string>
|
||||
<string name="noCardsMessage">Δεν υπάρχουν κάρτες. προσθέστε μία πρώτα</string>
|
||||
|
||||
<string name="barcodeImageDescription">Εικόνα του barcode της κάρτας</string>
|
||||
|
||||
<string name="noStoreError">Δεν δώσατε κατάστημα</string>
|
||||
<string name="noCardIdError">Δεν δώσατε κωδικό κάρτας</string>
|
||||
<string name="noCardExistsError">Δεν ήταν δυνατό να εντοπιστεί κάρτα</string>
|
||||
|
||||
<string name="cardIdFormat">%1$s: %2$s</string>
|
||||
<string name="importExport">Εισαγωγή/Εξαγωγή</string>
|
||||
<string name="importName">Εισαγωγή</string>
|
||||
<string name="exportName">Εξαγωγή</string>
|
||||
<string name="importExportHelp">Τα εφεδρικά δεδομένα σας δίνουν την δυνατότητα να μεταφέρετε τις κάρτες σας σε μία άλλη συσκευή.</string>
|
||||
<string name="importedFrom">Εισαγωγή από: %1$s</string>
|
||||
<string name="exportedTo">Εξαγωγή σε: %1$s</string>
|
||||
<string name="fileMissing">Το αρχείο λείπει: %1$s</string>
|
||||
<string name="importSuccessfulTitle">Εισαγωγή επιτυχής</string>
|
||||
<string name="importFailedTitle">Εισαγωγή ανεπιτυχής</string>
|
||||
<string name="importFailed">Δεν εισήχθει: %1$s</string>
|
||||
<string name="exportSuccessfulTitle">Εξαγωγή επιτυχής</string>
|
||||
<string name="exportFailedTitle">Εξαγωγή ανεπιτυχής</string>
|
||||
<string name="exportFailed">Δεν εξήχθη: %1$s</string>
|
||||
<string name="importing">Γίνεται εισαγωγή του…</string>
|
||||
<string name="exporting">Γίνεται εξαγωγή του…</string>
|
||||
<string name="noExternalStoragePermissionError">Δεν είναι δυνατή η εισαγωγή ή εξαγωγή καρτών χωρίς την άδεια πρόσβασης στον εξωτερικό χώρο αποθήκευσης</string>
|
||||
<string name="exportOptionExplanation">Τα δεδομένα αποθηκεύονται στον αρχικό φάκελο του εξωτερικού χώρου αποθήκευσης.</string>
|
||||
<string name="importOptionFilesystemTitle">Εισαγωγή από το σύστημα αρχείων</string>
|
||||
<string name="importOptionFilesystemExplanation">Επιλέξτε ένα συγκεκριμένο αρχείο από το σύστημα αρχείων.</string>
|
||||
<string name="importOptionFilesystemButton">Από το σύστημα αρχείων</string>
|
||||
<string name="importOptionApplicationTitle">Χρήση εξωτερικής εφαρμογής</string>
|
||||
<string name="importOptionApplicationExplanation">Κάντε χρήση μίας εξωτερικής εφαρμογής όπως είναι τα Dropbox, Google Drive ή ο αγαπημένος σας διαχειριστής αρχείων για να ανοίξετε ένα αρχείο.</string>
|
||||
<string name="importOptionApplicationButton">Χρήση εξωτερικής εφαρμογής</string>
|
||||
<string name="importOptionFixedTitle">Εισαγωγή από τοποθεσία εξαγωγής</string>
|
||||
<string name="importOptionFixedExplanation">Εισαγωγή από την ίδια τοποθεσία στο σύστημα αρχείων, στην οποία γίνεται αποθήκευση κατά την εξαγωγή.</string>
|
||||
<string name="importOptionFixedButton">Χρήση τοποθεσίας εξαγωγής</string>
|
||||
|
||||
<string name="about">Σχετικά</string>
|
||||
<string name="app_copyright_fmt">Copyright 2016-<xliff:g>%d</xliff:g> Branden Archer</string>
|
||||
<string name="app_license">Άδεια χρήσης υπό το GPLv3.</string>
|
||||
<string name="about_title_fmt">Σχετικά με <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Έκδοση: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Πληροφορίες Αναθεώρησης: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="app_libraries">Το <xliff:g id="app_name">%s</xliff:g> χρησιμοποιεί τις ακόλουθες βιβλιοθήκες τρίτων: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_resources">Το <xliff:g id="app_name">%s</xliff:g> χρησιμοποιεί τους παρακάτω πόρους τρίτων: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
|
||||
<string name="selectBarcodeTitle">Επιλέξτε Barcode</string>
|
||||
<string name="enterBarcodeInstructions">Δώστε την τιμή του barcode και μετά επιλέξτε την εικόνα που αναπαριστά το barcode που θέλετε να χρησιμοποιείσετε</string>
|
||||
|
||||
<string name="copy_to_clipboard_toast">Ο κωδικός της κάρτας αντιγράφτηκε στο πρόχειρο</string>
|
||||
|
||||
<string name="thumbnailDescription">Μικρογραφία κάρτας</string>
|
||||
|
||||
<string name="startIntro">Έναρξη Επεξήγησης</string>
|
||||
<string name="intro1Title">Καλώς ήλθατε στο Loyalty Card Keychain\n</string>
|
||||
<string name="intro1Description">Διαχειριστείτε τις κάρτες σας που βασίζονται σε barcodes μέσα από το κινητό σας!\n\n</string>
|
||||
<string name="intro2Title">Προσθήκη Καρτών\n</string>
|
||||
<string name="intro2Description">Προσθέστε μία νέα κάρτα πατώντας το συν από την λίστα καρτών.\n\n</string>
|
||||
<string name="intro3Title">Προσθήκη Καρτών\n</string>
|
||||
<string name="intro3Description">Για να προσθέσετε το barcode, είτε φωτογραφίστε με την κάμερα είτε γράψτε το χειροκίνητα.\n\n</string>
|
||||
<string name="intro4Title">Εμφάνιση Κάρτας\n</string>
|
||||
<string name="intro4Description">Για να εμφανίσετε μία κάρτα, πατήστε πάνω στο όνομα του καταστήματος, στην κεντρική οθόνη της εφαρμογής\n\n</string>
|
||||
<string name="intro5Title">Αντίγραφα Ασφαλείας\n</string>
|
||||
<string name="intro5Description">Μπορείτε να δημιουργήσετε αντίγραφα ασφαλείας των καρτών. Για εξαγωγή ή εισαγωγή των δεδομένων των καρτών πατήστε Εισαγωγή/Εξαγωγή στο μενού στην κεντρική οθόνη της εφαρμογής.\n\n</string>
|
||||
<string name="intro6Title">Σχόλια\n</string>
|
||||
<string name="intro6Description">Αυτή η εφαρμογή είναι δωρεάν, χωρίς διαφημίσεις και open source. Δείτε λεπτομέρειες πατώντας το Σχετικά στο μενού στην κεντρική οθόνη της εφαρμογής.\n\nΠαρακαλώ αφήστε σχόλια στο app store! (:</string>
|
||||
|
||||
<string name="change">Αλλαγή</string>
|
||||
<string name="storeTextColorTitle">Χρώμα Κειμένου Καταστήματος</string>
|
||||
<string name="storeTextBackgroundColorTitle">Χρώμα Κεφαλίδας</string>
|
||||
<string name="storeNameBackgroundColorDescription">Χρώμα για το υπόβαθρο του καταστήματος</string>
|
||||
<string name="storeNameColorDescription">Χρώμα για το κείμενο του καταστήματος</string>
|
||||
|
||||
<string name="settings">Ρυθμίσεις</string>
|
||||
<string name="settings_category_title_ui">Διεπαφή χρήστη</string>
|
||||
<string name="settings_card_title_list_font_size">Μέγεθος κειμένου λίστας καρτών</string>
|
||||
<string name="settings_card_note_list_font_size">Μέγεθος κειμένου λίστας σημειώσεων καρτών</string>
|
||||
<string name="settings_card_title_font_size">Μέγεθος κειμένου τίτλου κάρτας</string>
|
||||
<string name="settings_card_id_font_size">Μέγεθος κειμένου κωδικού κάρτας</string>
|
||||
<string name="settings_card_note_font_size">Μέγεθος κειμένου σημείωσης κάρτας</string>
|
||||
</resources>
|
||||
4
app/src/main/res/values-es-rAR/strings.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<resources
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
|
||||
</resources>
|
||||
115
app/src/main/res/values-es/strings.xml
Normal file
@@ -0,0 +1,115 @@
|
||||
<resources
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
|
||||
<string name="app_name">Cartera para Tarjetas de Fidelización.</string>
|
||||
<string name="action_add">Añadir</string>
|
||||
|
||||
<string name="noGiftCards">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.</string>
|
||||
|
||||
<string name="storeName">Tienda</string>
|
||||
<string name="note">Nota</string>
|
||||
<string name="cardId">ID de la Tarjeta</string>
|
||||
<string name="barcodeType">Tipo de Código de Barras</string>
|
||||
|
||||
<string name="cancel">Cancelar</string>
|
||||
<string name="save">Guardar</string>
|
||||
<string name="capture">Escanear Tarjeta</string>
|
||||
<string name="enterCard">Introducir Tarjeta</string>
|
||||
<string name="editCard">Editar Tarjeta</string>
|
||||
<string name="edit">Editar</string>
|
||||
<string name="delete">Eliminar</string>
|
||||
<string name="confirm">Confirmar</string>
|
||||
<string name="lockScreen">Bloquear Rotación de Pantalla</string>
|
||||
<string name="unlockScreen">Rotación de Pantalla Automática</string>
|
||||
<string name="deleteTitle">Eliminar Tarjeta de Fidelización</string>
|
||||
<string name="deleteConfirmation">Por favor, confirma si quieres eliminar esta tarjeta.</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="copy_to_clipboard">Copiar ID al portapapeles</string>
|
||||
<string name="sendLabel">Enviar…</string>
|
||||
<string name="addedShortcut">Añadido a la Pantalla de Inicio</string>
|
||||
|
||||
<string name="editCardTitle">Editar Tarjeta de Fidelización</string>
|
||||
<string name="addCardTitle">Añadir Tarjeta de Fidelización</string>
|
||||
<string name="viewCardTitle">Ver Tarjeta de Fidelización</string>
|
||||
<string name="scanCardBarcode">Escanear el Código de Barras de la Tarjeta</string>
|
||||
<string name="cardShortcut">Atajo de Tarjeta</string>
|
||||
<string name="noCardsMessage">No hay ninguna tarjeta, añade una primero</string>
|
||||
|
||||
<string name="barcodeImageDescription">Imagen del código de barras de la tarjeta</string>
|
||||
|
||||
<string name="noStoreError">Establecimiento no especificado</string>
|
||||
<string name="noCardIdError">ID de la Tarjeta no especificado</string>
|
||||
<string name="noCardExistsError">No se ha podido encontrar la tarjeta de fidelización</string>
|
||||
|
||||
<string name="cardIdFormat">%1$s: %2$s</string>
|
||||
<string name="importExport">Importar/Exportar</string>
|
||||
<string name="importName">Importar</string>
|
||||
<string name="exportName">Exportar</string>
|
||||
<string name="importExportHelp">La copia de seguridad te permite transferir tus tarjetas a otro dispositivo.</string>
|
||||
<string name="importedFrom">Importar desde: %1$s</string>
|
||||
<string name="exportedTo">Exportar a: %1$s</string>
|
||||
<string name="fileMissing">Archivo perdido: %1$s</string>
|
||||
<string name="importSuccessfulTitle">Datos importados correctamente</string>
|
||||
<string name="importFailedTitle">Ha ocurrido un error al importar los datos</string>
|
||||
<string name="importFailed">Error al importar: %1$s</string>
|
||||
<string name="exportSuccessfulTitle">Datos exportados correctamente</string>
|
||||
<string name="exportFailedTitle">Ha ocurrido un error al exportar los datos</string>
|
||||
<string name="exportFailed">Error al exportar: %1$s</string>
|
||||
<string name="importing">Importando…</string>
|
||||
<string name="exporting">Exportando…</string>
|
||||
<string name="noExternalStoragePermissionError">No se pueden importar o exportar tarjetas sin el permiso de almacenamiento</string>
|
||||
<string name="exportOptionExplanation">Los datos son guardados en la carpeta base del almacenamiento externo.</string>
|
||||
<string name="importOptionFilesystemTitle">Importar desde el sistema de archivos</string>
|
||||
<string name="importOptionFilesystemExplanation">Seleccionar un archivo del sistema de archivos</string>
|
||||
<string name="importOptionFilesystemButton">Desde el sistema de archivos</string>
|
||||
<string name="importOptionApplicationTitle">Usar una applicación externa</string>
|
||||
<string name="importOptionApplicationExplanation">Use una aplicación externa como Dropbox, Google Drive o tu gestor de archivos favoritos para abrir un archivo.</string>
|
||||
<string name="importOptionApplicationButton">Usar aplicación externa</string>
|
||||
<string name="importOptionFixedTitle">Importar desde el lugar donde los datos son exportados</string>
|
||||
<string name="importOptionFixedExplanation">Importar desde el mismo lugar en el sistema de archivos donde los datos son exportados.</string>
|
||||
<string name="importOptionFixedButton">Utilizar el lugar donde los datos son exportados</string>
|
||||
|
||||
<string name="about">Acerca de</string>
|
||||
<string name="app_copyright_fmt">Copyright 2016-<xliff:g>%d</xliff:g> Branden Archer</string>
|
||||
<string name="app_license">Licencia GPLv3</string>
|
||||
<string name="about_title_fmt">Acerca de <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Versión: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Información sobre la Revisión: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="app_libraries"><xliff:g id="app_name">%s</xliff:g> utiliza las siguientes librerías de terceros: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_resources"><xliff:g id="app_name">%s</xliff:g> utiliza los siguientes recursos de terceros: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
|
||||
<string name="selectBarcodeTitle">Selecciona el Código de Barras</string>
|
||||
<string name="enterBarcodeInstructions">Introduce el valor del código de barras y después presiona en una imagen para seleccionar el tipo de código de barras.</string>
|
||||
|
||||
<string name="copy_to_clipboard_toast">ID de la Tarjeta copiado al portapapeles</string>
|
||||
|
||||
<string name="thumbnailDescription">Miniatura para la tarjeta</string>
|
||||
|
||||
<string name="startIntro">Empezar Introducción</string>
|
||||
<string name="intro1Title">Bienvenido a la Cartera para Tarjetas de Fidelización\n</string>
|
||||
<string name="intro1Description">Gestiona las tarjetas de fidelización o tarjetas cliente con codigo de barras desde tu teléfono!\n\n</string>
|
||||
<string name="intro2Title">Añadir Tarjetas\n</string>
|
||||
<string name="intro2Description">Añade una nueva tarjeta presionando el signo + en la lista de tarjetas.\n\n</string>
|
||||
<string name="intro3Title">Añadir Tarjetas\n</string>
|
||||
<string name="intro3Description">Para añadir el código de barras, escanea la tarjeta con tu cámara o introduce el código manualmente.\n\n</string>
|
||||
<string name="intro4Title">Mostrar Tarjeta\n</string>
|
||||
<string name="intro4Description">Para mostrar una tarjeta, presiona en el nombre de la tienda desde la pantalla principal\n\n</string>
|
||||
<string name="intro5Title">Copias de Seguridad\n</string>
|
||||
<string name="intro5Description">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</string>
|
||||
<string name="intro6Title">Tu Opinión\n</string>
|
||||
<string name="intro6Description">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! (:</string>
|
||||
|
||||
<string name="change">Cambiar</string>
|
||||
<string name="storeTextColorTitle">Color del Texto de la Tienda</string>
|
||||
<string name="storeTextBackgroundColorTitle">Color Principal</string>
|
||||
<string name="storeNameBackgroundColorDescription">Color de fondo para el texto de la tienda</string>
|
||||
<string name="storeNameColorDescription">Color del texto de la tienda</string>
|
||||
|
||||
<string name="settings">Configuración</string>
|
||||
<string name="settings_category_title_ui">Interfaz de Usuario</string>
|
||||
<string name="settings_card_title_list_font_size">Tamaño de la letra para el título (lista)</string>
|
||||
<string name="settings_card_note_list_font_size">Tamaño de la letra para notas (lista)</string>
|
||||
<string name="settings_card_title_font_size">Tamaño de la letra para el título</string>
|
||||
<string name="settings_card_id_font_size">Tamaño de la letra para el ID de la tarjeta</string>
|
||||
<string name="settings_card_note_font_size">Tamaño de la letra para notas</string>
|
||||
</resources>
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Loyalty Card Keychain</string>
|
||||
<string name="action_add">Ajouter</string>
|
||||
|
||||
<string name="noGiftCards">Pas de carte de fidélité enregistrée. Cliquez 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.</string>
|
||||
<string name="noGiftCards">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.</string>
|
||||
|
||||
<string name="storeName">Nom</string>
|
||||
<string name="note">Note</string>
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
<string name="cancel">Annuler</string>
|
||||
<string name="save">Enregistrer</string>
|
||||
<string name="capture">Flasher</string>
|
||||
<string name="capture">Mode capture</string>
|
||||
<string name="enterCard">Mode manuel</string>
|
||||
<string name="editCard">Modifier</string>
|
||||
<string name="edit">Modifier</string>
|
||||
@@ -83,17 +83,23 @@
|
||||
|
||||
<string name="copy_to_clipboard_toast">Numéro de carte copié dans le presse-papier</string>
|
||||
|
||||
<string name="thumbnailDescription">Miniature pour la carte</string>
|
||||
|
||||
<string name="startIntro">Présentation</string>
|
||||
<string name="intro1Title">Bienvenue dans\nLoyalty Card Keychain\n</string>
|
||||
<string name="intro1Description">Gérez vos cartes de fidélité\nsur votre téléphone !\n\n</string>
|
||||
<string name="intro2Title">Ajouter une carte\n</string>
|
||||
<string name="intro2Description">Touchez le signe \'+\' en haut de l\'écran pour ajouter une carte.\n\n</string>
|
||||
<string name="intro2Description">Ajoutez une nouvelle carte en appuyant sur le bouton \"+\" depuis la liste des cartes.\n\n</string>
|
||||
<string name="intro3Title">Ajouter une carte\n</string>
|
||||
<string name="intro3Description">Pour enregistrer le code-barres, utilisez l\'appareil-photo ou entrez-le manuellement.\n\n</string>
|
||||
<string name="intro4Title">Afficher une carte\n</string>
|
||||
<string name="intro4Description">Pour afficher une carte, touchez le nom du magasin sur l\'écran principal\n\n</string>
|
||||
<string name="intro4Description">Pour afficher une carte, appuyez sur le nom du magasin depuis l\'écran principal\n\n</string>
|
||||
<string name="intro5Title">Sauvegarde\n</string>
|
||||
<string name="intro5Description">Les cartes peuvent être sauvegardées. Touchez \'Importer/Exporter\' sur l\'écran principal pour restaurer ou sauvegarder les cartes.\n\n</string>
|
||||
<string name="intro6Title">Votre avis\n</string>
|
||||
<string name="intro6Description">Cette application est gratuite, sans publicité, et son code est ouvert. Découvrez-en plus en touchant \'à propos\' sur l\'écran principal.\n\nLaissez un commentaire sur votre magasin d\'applications (:</string>
|
||||
</resources>
|
||||
<string name="intro5Description">Les cartes peuvent être sauvegardées. Appuyez sur \"Importer/Exporter\" depuis l\'écran principal pour restaurer ou sauvegarder les cartes.\n\n</string>
|
||||
<string name="intro6Title">Commentaire\n</string>
|
||||
<string name="intro6Description">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 (:</string>
|
||||
|
||||
<string name="change">Modifier</string>
|
||||
<string name="settings">Paramètres</string>
|
||||
<string name="settings_category_title_ui">Interface</string>
|
||||
</resources>
|
||||
|
||||
@@ -11,4 +11,4 @@
|
||||
<string name="capture">צלם כרטיס</string>
|
||||
<string name="enterCard">הכנס כרטיס</string>
|
||||
<string name="editCard">עריכת כרטיס</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
||||
@@ -94,4 +94,5 @@
|
||||
<string name="intro5Description">I dati delle tessere possono essere salvati. Per esportare o importare tessere premi Importa/Esporta nel menù nella schermata principale.\n\n</string>
|
||||
<string name="intro6Title">Feedback\n</string>
|
||||
<string name="intro6Description">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! (:</string>
|
||||
</resources>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -54,4 +54,4 @@
|
||||
|
||||
<string name="copy_to_clipboard_toast">Kortelės ID nukopijuota į iškarpinę</string>
|
||||
|
||||
</resources>
|
||||
</resources>
|
||||
|
||||
@@ -1,99 +1,116 @@
|
||||
<resources
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
|
||||
<string name="app_name">Klantenkaartenkluis</string>
|
||||
<string name="action_add">Voeg toe</string>
|
||||
<string name="app_name">Klantenkaartkluis</string>
|
||||
<string name="action_add">Toevoegen</string>
|
||||
|
||||
<string name="noGiftCards">Er zijn momenteel geen klantenkaarten toegevoegd. Klik de knop met "+" (plus) om te beginnen.\n\nKlantenkaartenkluis beheert klantenkaarten op een smartphone of tablet, zodat ze altijd binnen handbereik zijn.</string>
|
||||
<string name="noGiftCards">Er zijn momenteel geen klantenkaarten toegevoegd. Klik op de knop \"+\" (plus) om te beginnen.\n\nKlantenkaartenkluis beheert klantenkaarten op een smartphone of tablet, zodat ze altijd binnen handbereik zijn.</string>
|
||||
|
||||
<string name="storeName">Winkel</string>
|
||||
<string name="note">Notitie</string>
|
||||
<string name="cardId">Kaart-ID</string>
|
||||
<string name="barcodeType">Barcodetype</string>
|
||||
|
||||
<string name="cancel">Annuleer</string>
|
||||
<string name="save">Sla op</string>
|
||||
<string name="capture">Scan kaart</string>
|
||||
<string name="enterCard">Voer kaart in</string>
|
||||
<string name="editCard">Bewerk kaart</string>
|
||||
<string name="edit">Bewerk</string>
|
||||
<string name="delete">Verwijder</string>
|
||||
<string name="confirm">Bevestig</string>
|
||||
<string name="lockScreen">Blokkeer rotatie</string>
|
||||
<string name="unlockScreen">Deblokkeer rotatie</string>
|
||||
<string name="deleteTitle">Verwijder kaart</string>
|
||||
<string name="deleteConfirmation">Bevestig deze kaart te verwijderen.</string>
|
||||
<string name="cancel">Annuleren</string>
|
||||
<string name="save">Opslaan</string>
|
||||
<string name="capture">Scan een kaart</string>
|
||||
<string name="enterCard">Voer een kaart in</string>
|
||||
<string name="editCard">Kaart bewerken</string>
|
||||
<string name="edit">Bewerken</string>
|
||||
<string name="delete">Verwijderen</string>
|
||||
<string name="confirm">Bevestigen</string>
|
||||
<string name="lockScreen">Draaien blokkeren</string>
|
||||
<string name="unlockScreen">Draaien deblokkeren</string>
|
||||
<string name="deleteTitle">Kaart verwijderen</string>
|
||||
<string name="deleteConfirmation">Bevestig dat je deze kaart wilt verwijderen.</string>
|
||||
<string name="ok">Oké</string>
|
||||
<string name="copy_to_clipboard">Kopieer het ID naar het klembord</string>
|
||||
<string name="sendLabel">Verzend…</string>
|
||||
<string name="addedShortcut">Toegevoegd aan hoofdscherm</string>
|
||||
<string name="copy_to_clipboard">ID kopiëren naar klembord</string>
|
||||
<string name="sendLabel">Versturen…</string>
|
||||
<string name="addedShortcut">Toegevoegd aan beginscherm</string>
|
||||
|
||||
<string name="editCardTitle">Bewerk klantenkaart</string>
|
||||
<string name="addCardTitle">Voeg klantenkaart toe</string>
|
||||
<string name="viewCardTitle">Bekijk klantenkaart</string>
|
||||
<string name="scanCardBarcode">Scan barcode klantenkaart</string>
|
||||
<string name="editCardTitle">Klantenkaart bewerken</string>
|
||||
<string name="addCardTitle">Klantenkaart toevoegen</string>
|
||||
<string name="viewCardTitle">Klantenkaart bekijken</string>
|
||||
<string name="scanCardBarcode">Klantenkaart-barcode scannen</string>
|
||||
<string name="cardShortcut">Kaartsnelkoppeling</string>
|
||||
<string name="noCardsMessage">Er zijn geen kaarten, voeg er eerst een toe</string>
|
||||
<string name="noCardsMessage">Er zijn geen kaarten; voeg er één toe.</string>
|
||||
|
||||
<string name="barcodeImageDescription">Afbeelding barcode klantenkaart</string>
|
||||
<string name="barcodeImageDescription">Afbeelding van klantenkaart-barcode</string>
|
||||
|
||||
<string name="noStoreError">Geen winkel toegevoegd</string>
|
||||
<string name="noCardIdError">Geen kaart-ID toegevoegd</string>
|
||||
<string name="noCardExistsError">Kon klantenkaart niet vinden</string>
|
||||
<string name="noStoreError">Geen winkel ingevoerd</string>
|
||||
<string name="noCardIdError">Geen kaart-ID ingevoerd</string>
|
||||
<string name="noCardExistsError">De klantenkaart kan niet worden opgevraagd.</string>
|
||||
|
||||
<string name="cardIdFormat">%1$s: %2$s</string>
|
||||
<string name="importExport">Importeer/Exporteer</string>
|
||||
<string name="importName">Importeer</string>
|
||||
<string name="exportName">Exporteer</string>
|
||||
<string name="importExportHelp">Data die is geback-upt maakt het mogelijk om je klantenkaarten naar een ander apparaat te verplaatsen.</string>
|
||||
<string name="importedFrom">Geïmporteerd van: %1$s</string>
|
||||
<string name="importExport">Importeren/Exporteren</string>
|
||||
<string name="importName">Importeren</string>
|
||||
<string name="exportName">Exporteren</string>
|
||||
<string name="importExportHelp">Geback-upte gegevens maken het mogelijk om je kaarten over te zetten naar een ander apparaat.</string>
|
||||
<string name="importedFrom">Geïmporteerd uit: %1$s</string>
|
||||
<string name="exportedTo">Geëxporteerd naar: %1$s</string>
|
||||
<string name="fileMissing">Bestand niet gevonden: %1$s</string>
|
||||
<string name="importSuccessfulTitle">Importeren succesvol</string>
|
||||
<string name="importFailedTitle">Importeren mislukte</string>
|
||||
<string name="importFailed">Importeren mislukte: %1$s</string>
|
||||
<string name="exportSuccessfulTitle">Exporteren succesvol</string>
|
||||
<string name="fileMissing">Bestand ontbreekt: %1$s</string>
|
||||
<string name="importSuccessfulTitle">Importeren voltooid</string>
|
||||
<string name="importFailedTitle">Importeren mislukt</string>
|
||||
<string name="importFailed">Het importeren is mislukt: %1$s</string>
|
||||
<string name="exportSuccessfulTitle">Exporteren voltooid</string>
|
||||
<string name="exportFailedTitle">Exporteren mislukt</string>
|
||||
<string name="exportFailed">Exporteren mislukte: %1$s</string>
|
||||
<string name="importing">Importerende…</string>
|
||||
<string name="exporting">Exporterende…</string>
|
||||
<string name="noExternalStoragePermissionError">Niet mogelijk te importeren of exporteren zonder rechten op externe opslag</string>
|
||||
<string name="exportOptionExplanation">Data is weggeschreven naar de hoogste map in externe opslag.</string>
|
||||
<string name="importOptionFilesystemTitle">Importeer van filesysteem</string>
|
||||
<string name="importOptionFilesystemExplanation">Kies een specifiek bestand van het filesysteem.</string>
|
||||
<string name="importOptionFilesystemButton">Van filesysteem</string>
|
||||
<string name="importOptionApplicationTitle">Gebruik externe applicatie</string>
|
||||
<string name="importOptionApplicationExplanation">Gebruik een externe applicatie zoals Dropbox, Google Drive of je favoriete bestandsbeheer om een bestand te openen.</string>
|
||||
<string name="importOptionApplicationButton">Gebruik externe applicatie</string>
|
||||
<string name="importOptionFixedTitle">Importeer van exporteerlocatie</string>
|
||||
<string name="importOptionFixedExplanation">Importeer van zelfde locatie op het filesysteem waar tijdens exporteren naar geschreven is.</string>
|
||||
<string name="importOptionFixedButton">gebruik exporteerlocaite</string>
|
||||
<string name="exportFailed">Het exporteren is mislukt: %1$s</string>
|
||||
<string name="importing">Bezig met importeren…...</string>
|
||||
<string name="exporting">Bezig met exporteren…...</string>
|
||||
<string name="noExternalStoragePermissionError">Het importeren of exporteren van kaarten is niet mogelijk zonder de machtiging \'externe opslag\'.</string>
|
||||
<string name="exportOptionExplanation">De gegevens zijn weggeschreven naar de hoogste map op de externe opslag.</string>
|
||||
<string name="importOptionFilesystemTitle">Importeren uit bestandssysteem</string>
|
||||
<string name="importOptionFilesystemExplanation">Kies een specifiek bestand uit het bestandssysteem.</string>
|
||||
<string name="importOptionFilesystemButton">Uit bestandssysteem</string>
|
||||
<string name="importOptionApplicationTitle">Externe app gebruiken</string>
|
||||
<string name="importOptionApplicationExplanation">Open een bestand middels een externe app, zoals Dropbox, Google Drive of je favoriete bestandsbeheerder.</string>
|
||||
<string name="importOptionApplicationButton">Externe app gebruiken</string>
|
||||
<string name="importOptionFixedTitle">Importeren uit exportlocatie</string>
|
||||
<string name="importOptionFixedExplanation">Importeer uit dezelfde locatie op het bestandssysteem waar tijdens het exporteren naar weggeschreven is.</string>
|
||||
<string name="importOptionFixedButton">Exportlocatie gebruiken</string>
|
||||
|
||||
<string name="about">Over</string>
|
||||
<string name="app_copyright_fmt">Auteursrecht 2016-<xliff:g>%d</xliff:g> Branden Archer</string>
|
||||
<string name="app_license">Gelicenseerd met GPLv3.</string>
|
||||
<string name="app_copyright_fmt">Copyright 2016-<xliff:g>%d</xliff:g> Branden Archer</string>
|
||||
<string name="app_license">Uitgebracht onder de GPLv3-licentie.</string>
|
||||
<string name="about_title_fmt">Over <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Versie: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Revisieïnformatie: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="app_libraries"><xliff:g id="app_name">%s</xliff:g> gebruikt de volgende bibliotheken van derden: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_resources"><xliff:g id="app_name">%s</xliff:g> gebruikt de volgende bronnen van derden: <xliff:g id="app_resources_list\">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Versie-informatie: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="app_libraries"><xliff:g id="app_name">%s</xliff:g> gebruikt de volgende bibliotheken van derde partijen: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_resources"><xliff:g id="app_name">%s</xliff:g> gebruikt de volgende bronnen van derde partijen: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
|
||||
<string name="selectBarcodeTitle">Selecteer barcode</string>
|
||||
<string name="enterBarcodeInstructions">Voer de waarde van de barcode in en kies daarna de afbeelding die de barcode die je wil gebruiken representeert</string>
|
||||
<string name="selectBarcodeTitle">Barcode selecteren</string>
|
||||
<string name="enterBarcodeInstructions">Voer de waarde van de barcode in en kies daarna de afbeelding van de barcode die je wilt gebruiken.</string>
|
||||
|
||||
<string name="copy_to_clipboard_toast">Het ID is naar het klembord gekopieerd</string>
|
||||
<string name="copy_to_clipboard_toast">Kaart-ID is gekopieerd naar het klembord</string>
|
||||
|
||||
<string name="startIntro">Start inleiding</string>
|
||||
<string name="intro1Title">Welkom bij Loyalty Card Keychain\n</string>
|
||||
<string name="intro1Description">Beheer je barcodegebaseerde klantenkaarten op je telefoon!\n\n</string>
|
||||
<string name="intro2Title">Kaarten toevoegen\n</string>
|
||||
<string name="intro2Description">Voeg een nieuwe kaart toe door in de lijst met kaarten de plus aan te raken.\n\n</string>
|
||||
<string name="intro3Title">Kaarten toevoegen\n</string>
|
||||
<string name="intro3Description">Om een barcode toe te voegen, scan deze met je camera of voer ze handmatig in.\n\n</string>
|
||||
<string name="intro4Title">Toon kaart\n</string>
|
||||
<string name="intro4Description">Om een kaart te tonen, klik in het hoofdscherm op de naam van de winkel\n\n</string>
|
||||
<string name="intro5Title">Backup\n</string>
|
||||
<string name="intro5Description">De kaarten kunnen worden geback-upt. Om te kaarten te exporteren of importeren, raak in het menu in het hoofdscherm Importeer/Exporteer aan.\n\n</string>
|
||||
<string name="intro6Title">Terugkoppeling\n</string>
|
||||
<string name="intro6Description">Deze app is gratis, vrije van advertenties en opensource. Zie details door Over aan te raken in het menu op het hoofdscher,.\n\nBeschrijft je ervaring in de app store! (:</string>
|
||||
<string name="thumbnailDescription">Voorbeeldminiatuur voor kaart</string>
|
||||
|
||||
<string name="startIntro">Rondleiding starten</string>
|
||||
<string name="intro1Title">Welkom bij Klantenkaartkluis\n</string>
|
||||
<string name="intro1Description">Beheer je op barcodes gebaseerde klantenkaarten op je telefoon!\n\n</string>
|
||||
<string name="intro2Title">Kaarten toevoegen\n</string>
|
||||
<string name="intro2Description">Voeg een nieuwe kaart toe door in de kaartenlijst op de plus-knop te drukken.\n\n</string>
|
||||
<string name="intro3Title">Kaarten toevoegen\n</string>
|
||||
<string name="intro3Description">De barcode kan worden toegevoegd door deze handmatig in te voeren of te scannen met de camera.\n\n</string>
|
||||
<string name="intro4Title">Kaart tonen\n</string>
|
||||
<string name="intro4Description">Als je een kaart wilt tonen, druk dan op het beginscherm op de naam van de winkel.\n\n</string>
|
||||
<string name="intro5Title">Back-uppen\n</string>
|
||||
<string name="intro5Description">De kaarten kunnen worden geback-upt. Als je kaarten wilt exporteren of importeren, druk dan in het menu op het hoofdscherm op Importeren/Exporteren.\n\n</string>
|
||||
<string name="intro6Title">Feedback\n</string>
|
||||
<string name="intro6Description">Deze app is gratis, advertentievrij en open source. Bekijk de details hiervan door op Over te drukken in het menu op het hoofdscherm.\n\nGeef feedback in de app-winkel! (:</string>
|
||||
|
||||
<string name="change">Wijzigen</string>
|
||||
<string name="storeTextColorTitle">Tekstkleur van winkelnaam</string>
|
||||
<string name="storeTextBackgroundColorTitle">Kopkleur</string>
|
||||
<string name="storeNameBackgroundColorDescription">Achtergrondkleur van winkeltekst</string>
|
||||
<string name="storeNameColorDescription">Kleur van winkeltekst</string>
|
||||
|
||||
<string name="settings">Instellingen</string>
|
||||
<string name="settings_category_title_ui">Uiterlijk en bediening</string>
|
||||
<string name="settings_card_title_list_font_size">Kaarttitel lijstlettertypegrootte</string>
|
||||
<string name="settings_card_note_list_font_size">Kaartnotitie lijstlettertypegrootte</string>
|
||||
<string name="settings_card_title_font_size">Kaarttitel-lettertypegrootte</string>
|
||||
<string name="settings_card_id_font_size">Kaart-ID lettertypegrootte</string>
|
||||
<string name="settings_card_note_font_size">Kaartnotitie lettertypegrootte</string>
|
||||
<string name="settings_display_barcode_max_brightness">Barcodeweergave lichter maken</string>
|
||||
</resources>
|
||||
|
||||
81
app/src/main/res/values-pl/strings.xml
Normal file
@@ -0,0 +1,81 @@
|
||||
<resources
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
|
||||
<string name="app_name">Loyalty Card Keychain</string>
|
||||
<string name="action_add">Dodaj</string>
|
||||
|
||||
<string name="storeName">Sklep</string>
|
||||
<string name="note">Notatka</string>
|
||||
<string name="cardId">Identyfikator karty</string>
|
||||
<string name="barcodeType">Typ kodu kreskowego</string>
|
||||
|
||||
<string name="cancel">Anuluj</string>
|
||||
<string name="save">Zapisz</string>
|
||||
<string name="capture">Zeskanuj kod</string>
|
||||
<string name="enterCard">Wprowadź ręcznie</string>
|
||||
<string name="editCard">Edytuj kartę</string>
|
||||
<string name="edit">Edytuj</string>
|
||||
<string name="delete">Usuń</string>
|
||||
<string name="confirm">Potwierdź</string>
|
||||
<string name="lockScreen">Zablokuj autoobracanie ekranu</string>
|
||||
<string name="unlockScreen">Odblokuj autoobracanie ekranu</string>
|
||||
<string name="deleteTitle">Usuń kartę lojalnościową</string>
|
||||
<string name="deleteConfirmation">Potwierdź, że chcesz usunąć tę kartę.</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="copy_to_clipboard">Skopiuj identyfikator do schowka</string>
|
||||
<string name="sendLabel">Wyślij…</string>
|
||||
<string name="addedShortcut">Dodano do ekranu głównego</string>
|
||||
|
||||
<string name="editCardTitle">Edytuj kartę lojalnościową</string>
|
||||
<string name="addCardTitle">Dodaj kartę lojalnościową</string>
|
||||
<string name="viewCardTitle">Pokaż kartę lojalnościową</string>
|
||||
<string name="scanCardBarcode">Zeskanuj kod kreskowy karty lojalnościowej</string>
|
||||
<string name="noCardIdError">Nie wprowadzono identyfikatora karty</string>
|
||||
<string name="cardIdFormat">%1$s: %2$s</string>
|
||||
<string name="importExport">Importuj/Eksportuj</string>
|
||||
<string name="importName">Importuj</string>
|
||||
<string name="exportName">Eksportuj</string>
|
||||
<string name="importExportHelp">Zarchiwizowane dane umożliwiają przeniesienie kart na inne urządzenie.</string>
|
||||
<string name="importedFrom">Zaimportowano z: %1$s</string>
|
||||
<string name="exportedTo">Wyeksportowano do: %1$s</string>
|
||||
<string name="fileMissing">Brak pliku: %1$s</string>
|
||||
<string name="importSuccessfulTitle">Zaimportowano pomyślnie</string>
|
||||
<string name="importFailedTitle">Import nie powiódł się</string>
|
||||
<string name="importFailed">Nie udało się zaimportować: %1$s</string>
|
||||
<string name="exportSuccessfulTitle">Wyeksportowano pomyślnie</string>
|
||||
<string name="exportFailedTitle">Eksport nie powiódł się</string>
|
||||
<string name="exportFailed">Nie udało się wyeksportować: %1$s</string>
|
||||
<string name="importing">Importowanie…</string>
|
||||
<string name="exporting">Eksportowanie…</string>
|
||||
<string name="exportOptionExplanation">Dane zapisywane są w głównym katalogu pamięci zewnętrznej.</string>
|
||||
<string name="importOptionFilesystemTitle">Importuj z systemu plików</string>
|
||||
<string name="importOptionFilesystemExplanation">Wybierz określony plik z systemu plików.</string>
|
||||
<string name="importOptionFilesystemButton">Z systemu plików</string>
|
||||
<string name="importOptionApplicationTitle">Użyj zewnętrznej aplikacji</string>
|
||||
<string name="importOptionApplicationExplanation">Użyj zewnętrznej aplikacji jak Dropbox, Google Drive, bądź ulubiony menedżer plików, aby otworzyć plik.</string>
|
||||
<string name="importOptionApplicationButton">Użyj zewnętrznej aplikacji</string>
|
||||
<string name="about">O aplikacji</string>
|
||||
<string name="app_copyright_fmt">© 2016 — <xliff:g>%d</xliff:g> Branden Archer.</string>
|
||||
<string name="app_license">Licencjonowane na podstawie GNU General Public License, wersji 3.0.</string>
|
||||
<string name="about_title_fmt">O <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Wersja: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_libraries"><xliff:g id="app_name">%s</xliff:g> wykorzystuje następujące biblioteki osób trzecich: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_resources"><xliff:g id="app_name">%s</xliff:g> wykorzystuje następujące zasoby osób trzecich: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
|
||||
<string name="selectBarcodeTitle">Wybierz kod kreskowy</string>
|
||||
<string name="copy_to_clipboard_toast">Skopiowano identyfikator karty do schowka</string>
|
||||
|
||||
<string name="thumbnailDescription">Miniaturka karty</string>
|
||||
|
||||
<string name="startIntro">Pokaż ekran powitalny</string>
|
||||
<string name="intro1Title">Witamy w Loyalty Card Keychain\n</string>
|
||||
<string name="intro5Title">Kopia zapasowa\n</string>
|
||||
<string name="intro6Title">Informacje zwrotne\n</string>
|
||||
<string name="change">Zmień</string>
|
||||
<string name="storeTextBackgroundColorTitle">Kolor nagłówka</string>
|
||||
<string name="settings">Ustawienia</string>
|
||||
<string name="settings_category_title_ui">Interfejs użytkownika</string>
|
||||
<string name="settings_card_title_font_size">Rozmiar czcionki tytułu karty</string>
|
||||
<string name="settings_card_id_font_size">Rozmiar czcionki identyfikatora karty</string>
|
||||
<string name="settings_card_note_font_size">Rozmiar czcionki notatki karty</string>
|
||||
</resources>
|
||||
53
app/src/main/res/values-ru/strings.xml
Normal file
@@ -0,0 +1,53 @@
|
||||
<resources
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
|
||||
<string name="app_name">Карты лояльности</string>
|
||||
<string name="action_add">Добавить карту</string>
|
||||
|
||||
<string name="noGiftCards">На данный момент у Вас нет ни одной карты лояльности. Нажмите на кнопку «+» (плюс) вверху, чтобы добавить первую карту.\n\n «Брелок карт лояльности» позволит Вам хранить скидочные карты в Вашем телефоне, чтобы они всегда были под рукой.</string>
|
||||
|
||||
<string name="storeName">Организация</string>
|
||||
<string name="note">Заметка</string>
|
||||
<string name="cardId">ID карты</string>
|
||||
<string name="barcodeType">Тип штрих-кода</string>
|
||||
|
||||
<string name="cancel">Отмена</string>
|
||||
<string name="save">Сохранить</string>
|
||||
<string name="capture">Просканировать карту</string>
|
||||
<string name="enterCard">Ввести вручную</string>
|
||||
<string name="editCard">Редактор карты</string>
|
||||
<string name="edit">Редактировать карту</string>
|
||||
<string name="delete">Удалить карту</string>
|
||||
<string name="confirm">Подтвердить</string>
|
||||
<string name="lockScreen">Зафиксировать поворот экрана</string>
|
||||
<string name="unlockScreen">Автоповорот экрана</string>
|
||||
<string name="deleteTitle">Удалить карту лояльности</string>
|
||||
<string name="deleteConfirmation">Вы действительно хотите удалить эту карту?</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="copy_to_clipboard">Скопировать идентификатор в буфер обмена</string>
|
||||
<string name="sendLabel">Отправить…</string>
|
||||
<string name="addedShortcut">Карта добавлена на главный экран.</string>
|
||||
|
||||
<string name="editCardTitle">Редактировать карточку лояльности</string>
|
||||
<string name="addCardTitle">Добавить карту</string>
|
||||
<string name="about">О программе</string>
|
||||
<string name="app_license">Программа лицензирована согласно GPLv3.</string>
|
||||
<string name="about_title_fmt">О программе <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="copy_to_clipboard_toast">Идентифицатор карты скопирован в буфер обмена.</string>
|
||||
|
||||
<string name="thumbnailDescription">Логорип карты</string>
|
||||
|
||||
<string name="startIntro">Введение</string>
|
||||
<string name="intro1Title">Добро пожаловать в программу «Брелок карт лояльности»\n</string>
|
||||
<string name="intro2Title">Добавление карт\n</string>
|
||||
<string name="intro2Description">Добавьте новую карту, коснувшись кнопки плюса на главной странице.\n\n</string>
|
||||
<string name="intro3Title">Добавление карт\n</string>
|
||||
<string name="intro4Title">Показать карточку\n</string>
|
||||
<string name="intro4Description">Чтобы перейти к просмотру карты, нажмите на название организации на главной странице.\n\n</string>
|
||||
<string name="intro5Title">Резервное копирование\n</string>
|
||||
<string name="intro5Description">Вы можете сохранить карты во внешнее хранилище. Чтобы экспортировать или импортировать данные карты, нажмите «Импорт/Экспорт» в меню на главной странице.\n\n</string>
|
||||
<string name="intro6Title">Обратная связь\n</string>
|
||||
<string name="intro6Description">Это бесплатное приложение, не обремененное рекламой и с открытым исходным кодом. Подробнее см. в разделе «О программе» в меню на главной странице.\n\nПожалуйста, оставьте отзыв в магазине приложений! (:</string>
|
||||
|
||||
<string name="settings">Настройки</string>
|
||||
</resources>
|
||||
63
app/src/main/res/values-sk/strings.xml
Normal file
@@ -0,0 +1,63 @@
|
||||
<resources
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
|
||||
<string name="action_add">Pridať</string>
|
||||
|
||||
<string name="note">Poznámka</string>
|
||||
<string name="barcodeType">Typ čiarového kódu</string>
|
||||
|
||||
<string name="cancel">Zrušiť</string>
|
||||
<string name="save">Uložiť</string>
|
||||
<string name="edit">Upraviť</string>
|
||||
<string name="delete">Vymazať</string>
|
||||
<string name="confirm">Potvrdiť</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="copy_to_clipboard">Kopírovať ID do schránky</string>
|
||||
<string name="addedShortcut">Pridané na domovskú obrazovku</string>
|
||||
|
||||
<string name="cardIdFormat">%1$s: %2$s</string>
|
||||
<string name="importExport">Import/Export</string>
|
||||
<string name="importName">Import</string>
|
||||
<string name="exportName">Export</string>
|
||||
<string name="importedFrom">Importované z: %1$s</string>
|
||||
<string name="exportedTo">Exportované do: %1$s</string>
|
||||
<string name="fileMissing">Chýbajúci súbor: %1$s</string>
|
||||
<string name="importSuccessfulTitle">Import bol úspešný</string>
|
||||
<string name="importFailedTitle">Import zlyhal</string>
|
||||
<string name="importFailed">Zlyhal import: %1$s</string>
|
||||
<string name="exportSuccessfulTitle">Export bol úspešný</string>
|
||||
<string name="exportFailedTitle">Export zlyhal</string>
|
||||
<string name="exportFailed">Zlyhal export: %1$s</string>
|
||||
<string name="importing">Importujem…</string>
|
||||
<string name="exporting">Exportujem…</string>
|
||||
<string name="exportOptionExplanation">Dáta sú zapísané do koreňového adresára na externom úložisku.</string>
|
||||
<string name="importOptionFilesystemTitle">Import zo súborového systému.</string>
|
||||
<string name="importOptionFilesystemExplanation">Vyberte súbor zo súborového systému.</string>
|
||||
<string name="importOptionFilesystemButton">Zo súborového systému</string>
|
||||
<string name="importOptionApplicationTitle">Použite externú aplikáciu</string>
|
||||
<string name="importOptionApplicationExplanation">Na otvorenie súboru použite externú aplikáciu, ako Dropbox, Disk Google, alebo Vášho obľúbeného správcu súborov.</string>
|
||||
<string name="importOptionApplicationButton">Použiť externú aplikáciu</string>
|
||||
<string name="importOptionFixedTitle">Importujte z exportovacieho umiestnenia.</string>
|
||||
<string name="importOptionFixedExplanation">Importujte z rovnakého umiestnenia v súborovom systéme, na ktorý je zapisovaný export.</string>
|
||||
<string name="importOptionFixedButton">Použite exportovacie umiestnenie</string>
|
||||
|
||||
<string name="about">O aplikácii</string>
|
||||
<string name="app_copyright_fmt">Copyright 2016-<xliff:g>%d</xliff:g> Branden Archer</string>
|
||||
<string name="app_license">Licencované GPLv3.</string>
|
||||
<string name="about_title_fmt">O <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Verzia: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_libraries"><xliff:g id="app_name">%s</xliff:g> používa nasledujúce knižnice tretej strany: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="selectBarcodeTitle">Vyberte čiarový kód</string>
|
||||
<string name="enterBarcodeInstructions">Zadajte čiarový kód a vyberte obrázok reprezentujúci čiarový kód, ktorý chcete použiť</string>
|
||||
|
||||
<string name="startIntro">Spusti úvod</string>
|
||||
<string name="intro1Title">Vitajte v aplikácii Loyalty Card Keychain\n</string>
|
||||
<string name="intro3Description">Čiarový kód nasnímajte kamerou, alebo ho vypíšte ručne.\n\n</string>
|
||||
<string name="intro5Title">Záloha\n</string>
|
||||
<string name="intro6Title">Spätná väzba\n</string>
|
||||
<string name="intro6Description">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. (:</string>
|
||||
|
||||
<string name="storeTextBackgroundColorTitle">Farba hlavičky</string>
|
||||
<string name="settings">Nastavenia</string>
|
||||
<string name="settings_category_title_ui">Používateľské prostredie</string>
|
||||
</resources>
|
||||
4
app/src/main/res/values-sl-rSI/strings.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<resources
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
|
||||
</resources>
|
||||
115
app/src/main/res/values-sl/strings.xml
Normal file
@@ -0,0 +1,115 @@
|
||||
<resources
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
|
||||
<string name="app_name">Kartice zvestobe</string>
|
||||
<string name="action_add">Dodaj</string>
|
||||
|
||||
<string name="noGiftCards">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.</string>
|
||||
|
||||
<string name="storeName">Shrani</string>
|
||||
<string name="note">Zabeležka</string>
|
||||
<string name="cardId">Št. kartice</string>
|
||||
<string name="barcodeType">Vrsta črne kode</string>
|
||||
|
||||
<string name="cancel">Prekliči</string>
|
||||
<string name="save">Shrani</string>
|
||||
<string name="capture">Slikaj kartico</string>
|
||||
<string name="enterCard">Vnesi kartico</string>
|
||||
<string name="editCard">Uredi kartico</string>
|
||||
<string name="edit">Uredi</string>
|
||||
<string name="delete">Izbriši</string>
|
||||
<string name="confirm">Potrdi</string>
|
||||
<string name="lockScreen">Onemogoči obračanje zaslona</string>
|
||||
<string name="unlockScreen">Omogoči obračanje zaslona</string>
|
||||
<string name="deleteTitle">Odstrani kartico zvestobe</string>
|
||||
<string name="deleteConfirmation">Prosim potrdite, če želite izbrisati to kartico.</string>
|
||||
<string name="ok">Vredu</string>
|
||||
<string name="copy_to_clipboard">Kopirajte številko kartice</string>
|
||||
<string name="sendLabel">Pošlji#8230;</string>
|
||||
<string name="addedShortcut">Dodajte na domači zaslon</string>
|
||||
|
||||
<string name="editCardTitle">Uredi kartico zvestobe</string>
|
||||
<string name="addCardTitle">Dodaj kartico zvestobe</string>
|
||||
<string name="viewCardTitle">Prikaži kartico zvestobe</string>
|
||||
<string name="scanCardBarcode">Skeniraj črtno kodo</string>
|
||||
<string name="cardShortcut">Bližnjica do kartice</string>
|
||||
<string name="noCardsMessage">Trenutno ni na voljo nobene kartice. Najprej jih je potrebno dodati.</string>
|
||||
|
||||
<string name="barcodeImageDescription">Slika črtne kode na kartici</string>
|
||||
|
||||
<string name="noStoreError">Ime trgovine ni bilo vnešeno</string>
|
||||
<string name="noCardIdError">Številka kartice ni bila vnešena</string>
|
||||
<string name="noCardExistsError">Te kartice zvestobe ni bilo moč najti</string>
|
||||
|
||||
<string name="cardIdFormat">%1$s:%2$s</string>
|
||||
<string name="importExport">Uvozi/izvozi</string>
|
||||
<string name="importName">Uvozi</string>
|
||||
<string name="exportName">Izvozi</string>
|
||||
<string name="importExportHelp">Varnostna kopija omogoča varen prenos kartic na druge telefonske naprave.</string>
|
||||
<string name="importedFrom">Uvoženo iz: %1$s</string>
|
||||
<string name="exportedTo">Izvoženo v:%1$s</string>
|
||||
<string name="fileMissing">Manjkajoča datoteka: %1$s</string>
|
||||
<string name="importSuccessfulTitle">Uvoz je bil uspešen</string>
|
||||
<string name="importFailedTitle">Uvoz ni uspel</string>
|
||||
<string name="importFailed">Napaka pri uvozu: %1$s</string>
|
||||
<string name="exportSuccessfulTitle">Izvoz je uspel</string>
|
||||
<string name="exportFailedTitle">Izvoz ni uspel</string>
|
||||
<string name="exportFailed">Napaka pri izvozu: %1$s</string>
|
||||
<string name="importing">Uvažanje…</string>
|
||||
<string name="exporting">Izvažanje…</string>
|
||||
<string name="noExternalStoragePermissionError">Izvažanje in uvažanje je nemogoče brez omogočenega dostopa do zunanje shrambe</string>
|
||||
<string name="exportOptionExplanation">Podati so bili zapisani v prvo mapo v zunanji shrambi</string>
|
||||
<string name="importOptionFilesystemTitle">Uvozi iz datotečnega sistema</string>
|
||||
<string name="importOptionFilesystemExplanation">Izberite specifično datoteko iz datotečnega sistema</string>
|
||||
<string name="importOptionFilesystemButton">Iz datotečnega sistema</string>
|
||||
<string name="importOptionApplicationTitle">Uporabi zunanjo aplikacijo</string>
|
||||
<string name="importOptionApplicationExplanation">Uporabi zunanjo aplikacijo, kot npr. Dropbox, Google Drive ali ostale upravljalnike datotek, za odpiranje datoteko.</string>
|
||||
<string name="importOptionApplicationButton">Uporabi zunanjo aplikacijo</string>
|
||||
<string name="importOptionFixedTitle">Uvozi iz zunanje aplikacije</string>
|
||||
<string name="importOptionFixedExplanation">Uvozi iz iste lokacije, ki je namenjena izvozu</string>
|
||||
<string name="importOptionFixedButton">Uporabi lokacijo izvoza</string>
|
||||
|
||||
<string name="about">Več o aplikaciji</string>
|
||||
<string name="app_copyright_fmt">Copyright 2016-<xliff:g>%d</xliff:g> Branden Archer</string>
|
||||
<string name="app_license">Licencirano s skladu z GPLv3.</string>
|
||||
<string name="about_title_fmt">Več o <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Verzija: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Informacije o popravkih: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="app_libraries"><xliff:g id="app_name">%s</xliff:g> uporablja sledeče zunanje knjižnice: <xliff:g id="app_libraries_list">%s</xliff:g> </string>
|
||||
<string name="app_resources"><xliff:g id="app_name">%s</xliff:g>uporablja sledeče zunanje vire: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
|
||||
<string name="selectBarcodeTitle">Izberite črtno kodo</string>
|
||||
<string name="enterBarcodeInstructions">Vnesite vrednost črtne kode in izberite črtno kodo, ki jo želite uporabljati</string>
|
||||
|
||||
<string name="copy_to_clipboard_toast">Številka kartice je bila kopirana v odložišče</string>
|
||||
|
||||
<string name="thumbnailDescription">Ikona kartice</string>
|
||||
|
||||
<string name="startIntro">Uvodnik</string>
|
||||
<string name="intro1Title">Dobrodošli v aplikacijo Kartice zvestobe\n</string>
|
||||
<string name="intro1Description">Urejajte vaše črtne kode oziroma kartice na Vašem telefonu!\n\n</string>
|
||||
<string name="intro2Title">Dodajanje kartic\n</string>
|
||||
<string name="intro2Description">Dodajte kartico s klikom na plus na seznamu kartic.\n\n</string>
|
||||
<string name="intro3Title">Dodajanje kartic\n</string>
|
||||
<string name="intro3Description">Če želite dodati črtno kodo jo ali slikajte s fotoaparatom ali jo vnesite ročno.\n\n</string>
|
||||
<string name="intro4Title">Prikaži kartico\n</string>
|
||||
<string name="intro4Description">Za prikaz kartice je potreben klik na ime trgovine na glavnem zaslonu\n\n</string>
|
||||
<string name="intro5Title">Varnostna kopija\n</string>
|
||||
<string name="intro5Description">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</string>
|
||||
<string name="intro6Title">Povratne informacije razvijalcem\n</string>
|
||||
<string name="intro6Description">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 (:</string>
|
||||
|
||||
<string name="change">Spremeni</string>
|
||||
<string name="storeTextColorTitle">Barva besedila trgovine</string>
|
||||
<string name="storeTextBackgroundColorTitle">Barva naslova</string>
|
||||
<string name="storeNameBackgroundColorDescription">Barva ozadja za imenom trgovine</string>
|
||||
<string name="storeNameColorDescription">Barva trgovine</string>
|
||||
|
||||
<string name="settings">Nastavitve</string>
|
||||
<string name="settings_category_title_ui">Uporabniški vmesnik</string>
|
||||
<string name="settings_card_title_list_font_size">Velikost pisave seznama naslovov kartic</string>
|
||||
<string name="settings_card_note_list_font_size">Velikost pisave seznama zabeležk </string>
|
||||
<string name="settings_card_title_font_size">Velikost pisave imen kartic</string>
|
||||
<string name="settings_card_id_font_size">Velikost pisave številke kartice</string>
|
||||
<string name="settings_card_note_font_size">Velikost pisave zabeležke</string>
|
||||
</resources>
|
||||
4
app/src/main/res/values-uk/strings.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<resources
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
|
||||
</resources>
|
||||
@@ -14,9 +14,15 @@
|
||||
<dimen name="storeNameTextSize">28sp</dimen>
|
||||
<dimen name="noteTextSize">14sp</dimen>
|
||||
|
||||
<dimen name="singleCardCardIdTextSizeMin">15sp</dimen>
|
||||
<dimen name="singleCardCardIdTextSizeMax">50sp</dimen>
|
||||
<dimen name="singleCardNoteTextSizeMin">25sp</dimen>
|
||||
<dimen name="singleCardNoteTextSizeMax">50sp</dimen>
|
||||
|
||||
<dimen name="inputBorderThickness">2dip</dimen>
|
||||
<dimen name="inputBorderDividerThickness">4dip</dimen>
|
||||
<dimen name="inputPadding">20dip</dimen>
|
||||
<dimen name="colorSamplePadding">10dip</dimen>
|
||||
<dimen name="inputSize">18sp</dimen>
|
||||
|
||||
<dimen name="cardThumbnailSize">46dp</dimen>
|
||||
|
||||
@@ -10,4 +10,23 @@
|
||||
<item>#2093cd</item>
|
||||
<item>#ad62a7</item>
|
||||
</array>
|
||||
|
||||
<!-- Default values -->
|
||||
<integer name="settings_card_title_list_font_size_sp">28</integer>
|
||||
<integer name="settings_card_note_list_font_size_sp">14</integer>
|
||||
<integer name="settings_card_title_font_size_sp">40</integer>
|
||||
<integer name="settings_card_id_font_size_sp">50</integer>
|
||||
<integer name="settings_card_note_font_size_sp">50</integer>
|
||||
|
||||
<!-- Constraints -->
|
||||
<integer name="settings_card_title_list_max_font_size_sp">40</integer>
|
||||
<integer name="settings_card_title_list_min_font_size_sp">16</integer>
|
||||
<integer name="settings_card_note_list_max_font_size_sp">25</integer>
|
||||
<integer name="settings_card_note_list_min_font_size_sp">10</integer>
|
||||
<integer name="settings_card_title_max_font_size_sp">50</integer>
|
||||
<integer name="settings_card_title_min_font_size_sp">16</integer>
|
||||
<integer name="settings_card_id_max_font_size_sp">50</integer>
|
||||
<integer name="settings_card_id_min_font_size_sp">16</integer>
|
||||
<integer name="settings_card_note_max_font_size_sp">50</integer>
|
||||
<integer name="settings_card_note_min_font_size_sp">26</integer>
|
||||
</resources>
|
||||
@@ -100,4 +100,25 @@
|
||||
<string name="intro5Description">The cards can be backed-up. To export or import card data touch Import/Export in the menu on the main page.\n\n</string>
|
||||
<string name="intro6Title">Feedback\n</string>
|
||||
<string name="intro6Description">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! (:</string>
|
||||
|
||||
<string name="change">Change</string>
|
||||
<string name="storeTextColorTitle">Store Text Color</string>
|
||||
<string name="storeTextBackgroundColorTitle">Heading Color</string>
|
||||
<string name="storeNameBackgroundColorDescription">Color for store text background</string>
|
||||
<string name="storeNameColorDescription">Color for store text</string>
|
||||
|
||||
<string name="settings">Settings</string>
|
||||
<string name="settings_category_title_ui">User interface</string>
|
||||
<string name="settings_card_title_list_font_size">Card title list font size</string>
|
||||
<string name="settings_key_card_title_list_font_size" translatable="false">pref_card_title_list_font_size_sp</string>
|
||||
<string name="settings_card_note_list_font_size">Card note list font size</string>
|
||||
<string name="settings_key_card_note_list_font_size" translatable="false">pref_card_note_list_font_size_sp</string>
|
||||
<string name="settings_card_title_font_size">Card title font size</string>
|
||||
<string name="settings_key_card_title_font_size" translatable="false">pref_card_title_font_size_sp</string>
|
||||
<string name="settings_card_id_font_size">Card ID font size</string>
|
||||
<string name="settings_key_card_id_font_size" translatable="false">pref_card_id_font_size_sp</string>
|
||||
<string name="settings_card_note_font_size">Card note font size</string>
|
||||
<string name="settings_key_card_note_font_size" translatable="false">pref_card_note_font_size_sp</string>
|
||||
<string name="settings_display_barcode_max_brightness">Brighten barcode view</string>
|
||||
<string name="settings_key_display_barcode_max_brightness" translatable="false">pref_display_card_max_brightness</string>
|
||||
</resources>
|
||||
|
||||
50
app/src/main/res/xml/preferences.xml
Normal file
@@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<PreferenceCategory
|
||||
android:title="@string/settings_category_title_ui">
|
||||
|
||||
<com.vanniktech.vntnumberpickerpreference.VNTNumberPickerPreference
|
||||
android:key="@string/settings_key_card_title_list_font_size"
|
||||
android:title="@string/settings_card_title_list_font_size"
|
||||
android:defaultValue="@integer/settings_card_title_list_font_size_sp"
|
||||
app:vnt_maxValue="@integer/settings_card_title_list_max_font_size_sp"
|
||||
app:vnt_minValue="@integer/settings_card_title_list_min_font_size_sp" />
|
||||
|
||||
<com.vanniktech.vntnumberpickerpreference.VNTNumberPickerPreference
|
||||
android:key="@string/settings_key_card_note_list_font_size"
|
||||
android:title="@string/settings_card_note_list_font_size"
|
||||
android:defaultValue="@integer/settings_card_note_list_font_size_sp"
|
||||
app:vnt_maxValue="@integer/settings_card_note_list_max_font_size_sp"
|
||||
app:vnt_minValue="@integer/settings_card_note_list_min_font_size_sp" />
|
||||
|
||||
<com.vanniktech.vntnumberpickerpreference.VNTNumberPickerPreference
|
||||
android:key="@string/settings_key_card_title_font_size"
|
||||
android:title="@string/settings_card_title_font_size"
|
||||
android:defaultValue="@integer/settings_card_title_font_size_sp"
|
||||
app:vnt_maxValue="@integer/settings_card_title_max_font_size_sp"
|
||||
app:vnt_minValue="@integer/settings_card_title_min_font_size_sp"/>
|
||||
|
||||
<com.vanniktech.vntnumberpickerpreference.VNTNumberPickerPreference
|
||||
android:key="@string/settings_key_card_id_font_size"
|
||||
android:title="@string/settings_card_id_font_size"
|
||||
android:defaultValue="@integer/settings_card_id_font_size_sp"
|
||||
app:vnt_maxValue="@integer/settings_card_id_max_font_size_sp"
|
||||
app:vnt_minValue="@integer/settings_card_id_min_font_size_sp" />
|
||||
|
||||
<com.vanniktech.vntnumberpickerpreference.VNTNumberPickerPreference
|
||||
android:key="@string/settings_key_card_note_font_size"
|
||||
android:title="@string/settings_card_note_font_size"
|
||||
android:defaultValue="@integer/settings_card_note_font_size_sp"
|
||||
app:vnt_maxValue="@integer/settings_card_note_max_font_size_sp"
|
||||
app:vnt_minValue="@integer/settings_card_note_min_font_size_sp" />
|
||||
<CheckBoxPreference
|
||||
android:defaultValue="true"
|
||||
android:key="@string/settings_key_display_barcode_max_brightness"
|
||||
android:title="@string/settings_display_barcode_max_brightness"/>
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
@@ -4,6 +4,7 @@ import android.app.Activity;
|
||||
import android.content.ContentValues;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.graphics.Color;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
@@ -25,6 +26,9 @@ public class DatabaseTest
|
||||
{
|
||||
private DBHelper db;
|
||||
|
||||
private static final Integer DEFAULT_HEADER_COLOR = Color.BLACK;
|
||||
private static final Integer DEFAULT_HEADER_TEXT_COLOR = Color.WHITE;
|
||||
|
||||
@Before
|
||||
public void setUp()
|
||||
{
|
||||
@@ -36,7 +40,7 @@ public class DatabaseTest
|
||||
public void addRemoveOneGiftCard()
|
||||
{
|
||||
assertEquals(0, db.getLoyaltyCardCount());
|
||||
long id = db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString());
|
||||
long id = db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, db.getLoyaltyCardCount());
|
||||
@@ -57,12 +61,12 @@ public class DatabaseTest
|
||||
@Test
|
||||
public void updateGiftCard()
|
||||
{
|
||||
long id = db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString());
|
||||
long id = db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, db.getLoyaltyCardCount());
|
||||
|
||||
result = db.updateLoyaltyCard(1, "store1", "note1", "cardId1", BarcodeFormat.AZTEC.toString());
|
||||
result = db.updateLoyaltyCard(1, "store1", "note1", "cardId1", BarcodeFormat.AZTEC.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR);
|
||||
assertTrue(result);
|
||||
assertEquals(1, db.getLoyaltyCardCount());
|
||||
|
||||
@@ -80,7 +84,7 @@ public class DatabaseTest
|
||||
assertEquals(0, db.getLoyaltyCardCount());
|
||||
|
||||
boolean result = db.updateLoyaltyCard(1, "store1", "note1", "cardId1",
|
||||
BarcodeFormat.UPC_A.toString());
|
||||
BarcodeFormat.UPC_A.toString(), DEFAULT_HEADER_COLOR, DEFAULT_HEADER_TEXT_COLOR);
|
||||
assertEquals(false, result);
|
||||
assertEquals(0, db.getLoyaltyCardCount());
|
||||
}
|
||||
@@ -88,7 +92,7 @@ public class DatabaseTest
|
||||
@Test
|
||||
public void emptyGiftCardValues()
|
||||
{
|
||||
long id = db.insertLoyaltyCard("", "", "", "");
|
||||
long id = db.insertLoyaltyCard("", "", "", "", null, null);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, db.getLoyaltyCardCount());
|
||||
@@ -111,7 +115,7 @@ public class DatabaseTest
|
||||
for(int index = CARDS_TO_ADD-1; index >= 0; index--)
|
||||
{
|
||||
long id = db.insertLoyaltyCard("store" + index, "note" + index, "cardId" + index,
|
||||
BarcodeFormat.UPC_A.toString());
|
||||
BarcodeFormat.UPC_A.toString(), index, index*2);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
@@ -130,7 +134,10 @@ public class DatabaseTest
|
||||
assertEquals("store"+index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STORE)));
|
||||
assertEquals("note"+index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.NOTE)));
|
||||
assertEquals("cardId"+index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID)));
|
||||
assertEquals("cardId"+index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID)));
|
||||
assertEquals(BarcodeFormat.UPC_A.toString(), cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE)));
|
||||
assertEquals(index, cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR)));
|
||||
assertEquals(index*2, cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR)));
|
||||
|
||||
cursor.moveToNext();
|
||||
}
|
||||
@@ -184,6 +191,8 @@ public class DatabaseTest
|
||||
assertEquals("cardId", card.cardId);
|
||||
assertEquals(BarcodeFormat.UPC_A.toString(), card.barcodeType);
|
||||
assertEquals("", card.note);
|
||||
assertEquals(null, card.headerColor);
|
||||
assertEquals(null, card.headerTextColor);
|
||||
|
||||
database.close();
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import android.os.Environment;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
import org.apache.tools.ant.filters.StringInputStream;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -22,10 +23,12 @@ import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Calendar;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@@ -65,7 +68,7 @@ public class ImportExportTest
|
||||
{
|
||||
String storeName = String.format("store, \"%4d", index);
|
||||
String note = String.format("note, \"%4d", index);
|
||||
long id = db.insertLoyaltyCard(storeName, note, BARCODE_DATA, BARCODE_TYPE);
|
||||
long id = db.insertLoyaltyCard(storeName, note, BARCODE_DATA, BARCODE_TYPE, index, index*2);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
@@ -94,6 +97,8 @@ public class ImportExportTest
|
||||
assertEquals(expectedNote, card.note);
|
||||
assertEquals(BARCODE_DATA, card.cardId);
|
||||
assertEquals(BARCODE_TYPE, card.barcodeType);
|
||||
assertEquals(Integer.valueOf(index), card.headerColor);
|
||||
assertEquals(Integer.valueOf(index*2), card.headerTextColor);
|
||||
|
||||
index++;
|
||||
}
|
||||
@@ -276,4 +281,86 @@ public class ImportExportTest
|
||||
clearDatabase();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void importWithoutColors() throws IOException
|
||||
{
|
||||
String csvText = "";
|
||||
csvText += DBHelper.LoyaltyCardDbIds.ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STORE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.NOTE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.CARD_ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.BARCODE_TYPE + "\n";
|
||||
csvText += "1,store,note,12345,type";
|
||||
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8));
|
||||
InputStreamReader inStream = new InputStreamReader(inputStream);
|
||||
|
||||
// Import the CSV data
|
||||
boolean result = MultiFormatImporter.importData(db, inStream, DataFormat.CSV);
|
||||
assertTrue(result);
|
||||
assertEquals(1, db.getLoyaltyCardCount());
|
||||
|
||||
LoyaltyCard card = db.getLoyaltyCard(1);
|
||||
|
||||
assertEquals("store", card.store);
|
||||
assertEquals("note", card.note);
|
||||
assertEquals("12345", card.cardId);
|
||||
assertEquals("type", card.barcodeType);
|
||||
assertNull(card.headerColor);
|
||||
assertNull(card.headerTextColor);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void importWithoutNullColors() throws IOException
|
||||
{
|
||||
String csvText = "";
|
||||
csvText += DBHelper.LoyaltyCardDbIds.ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STORE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.NOTE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.CARD_ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.BARCODE_TYPE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR + "\n";
|
||||
csvText += "1,store,note,12345,type,,";
|
||||
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8));
|
||||
InputStreamReader inStream = new InputStreamReader(inputStream);
|
||||
|
||||
// Import the CSV data
|
||||
boolean result = MultiFormatImporter.importData(db, inStream, DataFormat.CSV);
|
||||
assertTrue(result);
|
||||
assertEquals(1, db.getLoyaltyCardCount());
|
||||
|
||||
LoyaltyCard card = db.getLoyaltyCard(1);
|
||||
|
||||
assertEquals("store", card.store);
|
||||
assertEquals("note", card.note);
|
||||
assertEquals("12345", card.cardId);
|
||||
assertEquals("type", card.barcodeType);
|
||||
assertNull(card.headerColor);
|
||||
assertNull(card.headerTextColor);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void importWithoutInvalidColors() throws IOException
|
||||
{
|
||||
String csvText = "";
|
||||
csvText += DBHelper.LoyaltyCardDbIds.ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.STORE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.NOTE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.CARD_ID + "," +
|
||||
DBHelper.LoyaltyCardDbIds.BARCODE_TYPE + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_COLOR + "," +
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_TEXT_COLOR + "\n";
|
||||
csvText += "1,store,note,12345,type,not a number,invalid";
|
||||
|
||||
ByteArrayInputStream inputStream = new ByteArrayInputStream(csvText.getBytes(StandardCharsets.UTF_8));
|
||||
InputStreamReader inStream = new InputStreamReader(inputStream);
|
||||
|
||||
// Import the CSV data
|
||||
boolean result = MultiFormatImporter.importData(db, inStream, DataFormat.CSV);
|
||||
assertEquals(false, result);
|
||||
assertEquals(0, db.getLoyaltyCardCount());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
package protect.card_locker;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.SharedPreferences;
|
||||
import android.database.Cursor;
|
||||
import android.graphics.Color;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
@@ -22,12 +25,22 @@ public class LoyaltyCardCursorAdapterTest
|
||||
{
|
||||
private Activity activity;
|
||||
private DBHelper db;
|
||||
private SharedPreferences settings;
|
||||
|
||||
@Before
|
||||
public void setUp()
|
||||
{
|
||||
activity = Robolectric.setupActivity(MainActivity.class);
|
||||
db = new DBHelper(activity);
|
||||
settings = PreferenceManager.getDefaultSharedPreferences(activity);
|
||||
}
|
||||
|
||||
private void setFontSizes(int storeFontSize, int noteFontSize)
|
||||
{
|
||||
settings.edit()
|
||||
.putInt(activity.getResources().getString(R.string.settings_key_card_title_list_font_size), storeFontSize)
|
||||
.putInt(activity.getResources().getString(R.string.settings_key_card_note_list_font_size), noteFontSize)
|
||||
.apply();
|
||||
}
|
||||
|
||||
private View createView(Cursor cursor)
|
||||
@@ -40,12 +53,21 @@ public class LoyaltyCardCursorAdapterTest
|
||||
return view;
|
||||
}
|
||||
|
||||
private void checkView(final View view, final String store, final String note)
|
||||
private void checkView(final View view, final String store, final String note, boolean checkFontSizes)
|
||||
{
|
||||
final TextView storeField = view.findViewById(R.id.store);
|
||||
assertEquals(store, storeField.getText().toString());
|
||||
|
||||
final TextView noteField = view.findViewById(R.id.note);
|
||||
|
||||
if(checkFontSizes)
|
||||
{
|
||||
int storeFontSize = settings.getInt(activity.getResources().getString(R.string.settings_key_card_title_list_font_size), 0);
|
||||
int noteFontSize = settings.getInt(activity.getResources().getString(R.string.settings_key_card_note_list_font_size), 0);
|
||||
|
||||
assertEquals(storeFontSize, (int)storeField.getTextSize());
|
||||
assertEquals(noteFontSize, (int)noteField.getTextSize());
|
||||
}
|
||||
|
||||
assertEquals(store, storeField.getText().toString());
|
||||
if(note.isEmpty() == false)
|
||||
{
|
||||
assertEquals(View.VISIBLE, noteField.getVisibility());
|
||||
@@ -61,7 +83,7 @@ public class LoyaltyCardCursorAdapterTest
|
||||
@Test
|
||||
public void TestCursorAdapterEmptyNote()
|
||||
{
|
||||
db.insertLoyaltyCard("store", "", "cardId", BarcodeFormat.UPC_A.toString());
|
||||
db.insertLoyaltyCard("store", "", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE);
|
||||
LoyaltyCard card = db.getLoyaltyCard(1);
|
||||
|
||||
Cursor cursor = db.getLoyaltyCardCursor();
|
||||
@@ -69,13 +91,13 @@ public class LoyaltyCardCursorAdapterTest
|
||||
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note);
|
||||
checkView(view, card.store, card.note, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapterWithNote()
|
||||
{
|
||||
db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString());
|
||||
db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE);
|
||||
LoyaltyCard card = db.getLoyaltyCard(1);
|
||||
|
||||
Cursor cursor = db.getLoyaltyCardCursor();
|
||||
@@ -83,6 +105,24 @@ public class LoyaltyCardCursorAdapterTest
|
||||
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note);
|
||||
checkView(view, card.store, card.note, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapterFontSizes()
|
||||
{
|
||||
db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE);
|
||||
LoyaltyCard card = db.getLoyaltyCard(1);
|
||||
|
||||
Cursor cursor = db.getLoyaltyCardCursor();
|
||||
cursor.moveToFirst();
|
||||
|
||||
setFontSizes(1, 2);
|
||||
View view = createView(cursor);
|
||||
checkView(view, card.store, card.note, true);
|
||||
|
||||
setFontSizes(30, 31);
|
||||
view = createView(cursor);
|
||||
checkView(view, card.store, card.note, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,10 +2,14 @@ package protect.card_locker;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.v4.widget.TextViewCompat;
|
||||
import android.view.Menu;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
@@ -29,7 +33,6 @@ import org.robolectric.android.controller.ActivityController;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static junit.framework.Assert.assertNull;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
@@ -123,6 +126,8 @@ public class LoyaltyCardViewActivityTest
|
||||
assertEquals(note, card.note);
|
||||
assertEquals(cardId, card.cardId);
|
||||
assertEquals(barcodeType, card.barcodeType);
|
||||
assertNotNull(card.headerColor);
|
||||
assertNotNull(card.headerTextColor);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -185,13 +190,10 @@ public class LoyaltyCardViewActivityTest
|
||||
{
|
||||
int captureVisibility = (mode == ViewMode.UPDATE_CARD || mode == ViewMode.ADD_CARD) ? View.VISIBLE : View.GONE;
|
||||
|
||||
int viewVisibility = View.GONE;
|
||||
int editVisibility = View.VISIBLE;
|
||||
|
||||
checkFieldProperties(activity, R.id.storeNameEdit, editVisibility, store);
|
||||
checkFieldProperties(activity, R.id.storeNameView, viewVisibility, store);
|
||||
checkFieldProperties(activity, R.id.noteEdit, editVisibility, note);
|
||||
checkFieldProperties(activity, R.id.noteView, viewVisibility, note);
|
||||
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);
|
||||
@@ -357,7 +359,7 @@ public class LoyaltyCardViewActivityTest
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = new DBHelper(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE);
|
||||
db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -373,7 +375,7 @@ public class LoyaltyCardViewActivityTest
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = new DBHelper(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE);
|
||||
db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -389,7 +391,7 @@ public class LoyaltyCardViewActivityTest
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = new DBHelper(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", EAN_BARCODE_DATA, EAN_BARCODE_TYPE);
|
||||
db.insertLoyaltyCard("store", "note", EAN_BARCODE_DATA, EAN_BARCODE_TYPE, Color.BLACK, Color.WHITE);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -410,7 +412,7 @@ public class LoyaltyCardViewActivityTest
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = new DBHelper(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", EAN_BARCODE_DATA, EAN_BARCODE_TYPE);
|
||||
db.insertLoyaltyCard("store", "note", EAN_BARCODE_DATA, EAN_BARCODE_TYPE, Color.BLACK, Color.WHITE);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -436,7 +438,7 @@ public class LoyaltyCardViewActivityTest
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = new DBHelper(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE);
|
||||
db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -479,7 +481,7 @@ public class LoyaltyCardViewActivityTest
|
||||
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = new DBHelper(activity);
|
||||
db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE);
|
||||
db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -489,4 +491,79 @@ public class LoyaltyCardViewActivityTest
|
||||
shadowOf(activity).clickMenuItem(android.R.id.home);
|
||||
assertEquals(true, activity.isFinishing());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void startWithoutColors()
|
||||
{
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(false);
|
||||
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = new DBHelper(activity);
|
||||
db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, null, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
assertEquals(false, activity.isFinishing());
|
||||
shadowOf(activity).clickMenuItem(android.R.id.home);
|
||||
assertEquals(true, activity.isFinishing());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void startLoyaltyCardWithoutColorsSave() throws IOException
|
||||
{
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true);
|
||||
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = new DBHelper(activity);
|
||||
db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, null, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
// Save and check the gift card
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", BARCODE_DATA, BARCODE_TYPE, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void startCheckFontSizes()
|
||||
{
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(false);
|
||||
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = new DBHelper(activity);
|
||||
db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE);
|
||||
|
||||
final int STORE_FONT_SIZE = 50;
|
||||
final int CARD_FONT_SIZE = 40;
|
||||
final int NOTE_FONT_SIZE = 30;
|
||||
|
||||
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity);
|
||||
settings.edit()
|
||||
.putInt(activity.getResources().getString(R.string.settings_key_card_title_font_size), STORE_FONT_SIZE)
|
||||
.putInt(activity.getResources().getString(R.string.settings_key_card_id_font_size), CARD_FONT_SIZE)
|
||||
.putInt(activity.getResources().getString(R.string.settings_key_card_note_font_size), NOTE_FONT_SIZE)
|
||||
.apply();
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
assertEquals(false, activity.isFinishing());
|
||||
|
||||
TextView storeName = activity.findViewById(R.id.storeName);
|
||||
TextView cardIdFieldView = activity.findViewById(R.id.cardIdView);
|
||||
TextView noteView = activity.findViewById(R.id.noteView);
|
||||
|
||||
TextViewCompat.getAutoSizeMaxTextSize(storeName);
|
||||
TextViewCompat.getAutoSizeMaxTextSize(storeName);
|
||||
assertEquals(STORE_FONT_SIZE, (int)storeName.getTextSize());
|
||||
assertEquals(CARD_FONT_SIZE, TextViewCompat.getAutoSizeMaxTextSize(cardIdFieldView));
|
||||
assertEquals(NOTE_FONT_SIZE, TextViewCompat.getAutoSizeMaxTextSize(noteView));
|
||||
|
||||
shadowOf(activity).clickMenuItem(android.R.id.home);
|
||||
assertEquals(true, activity.isFinishing());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.database.Cursor;
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.view.Menu;
|
||||
import android.view.View;
|
||||
@@ -65,12 +66,13 @@ public class MainActivityTest
|
||||
assertTrue(menu != null);
|
||||
|
||||
// The settings and add button should be present
|
||||
assertEquals(menu.size(), 4);
|
||||
assertEquals(menu.size(), 5);
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -101,7 +103,7 @@ public class MainActivityTest
|
||||
assertEquals(0, list.getCount());
|
||||
|
||||
DBHelper db = new DBHelper(mainActivity);
|
||||
db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString());
|
||||
db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE);
|
||||
|
||||
assertEquals(View.VISIBLE, helpText.getVisibility());
|
||||
assertEquals(View.GONE, list.getVisibility());
|
||||
|
||||
BIN
metadata/en-US/images/featureGraphic.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 62 KiB |
@@ -1,23 +1,28 @@
|
||||
# PRIVACY POLICY MODEL FOR MOBILE APPLICATIONS
|
||||
# PRIVACY POLICY FOR LOYALTY CARD KEYCHAIN
|
||||
|
||||
This privacy policy governs your use of the software application Loyalty Keychain (“Application”) for mobile devices
|
||||
that was created by Protect. The Application is Basic description of the app (features, functionality and
|
||||
content).
|
||||
This privacy policy governs your use of the software application Loyalty Card Keychain (“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?
|
||||
|
||||
The Application allows information on real estate properties to be added and maintained
|
||||
by the user, which may includes images of the properties. This data is only stored on the mobile
|
||||
device, and is not transmitted of off the device.
|
||||
The Application allows a user to create store entries with a barcode. When a store is later selected the
|
||||
corresponding barcode is displayed. This user data remains on the device and is not transmitted off of the
|
||||
device.
|
||||
|
||||
If a crash occurs, a dialog may appear with crash details and a suggestion to transmit the details
|
||||
to the developer. A user has the option to not send the crash details; a user must 'opt-in' to
|
||||
sending such details.
|
||||
|
||||
# User Provided Information
|
||||
|
||||
The Application does not have a registration option. The only information which is obtained
|
||||
is any information provided by the App Store that the application was downloaded from.
|
||||
is (1) crash details which a user intentionally send to the developer via the app, and
|
||||
(2) any information provided by the App Store that the application was downloaded from.
|
||||
|
||||
# Automatically Collected Information
|
||||
|
||||
No information is collected from the Application and transmitted off of the mobile device, either automatically or manually.
|
||||
No information is automatically collected from the Application and transmitted off of the mobile device,
|
||||
either automatically or manually.
|
||||
|
||||
# Does the Application collect precise real time location information of the device?
|
||||
|
||||
@@ -25,29 +30,33 @@ No.
|
||||
|
||||
# Do third parties see and/or have access to information obtained by the Application?
|
||||
|
||||
No, as no data is transmitted off of the mobile device by the Application.
|
||||
Any crash data which is intentionally submitted by a user to the developer is stored on an email server
|
||||
which is not owned by the developer. Crash details may be uploaded to a third-party development tool
|
||||
such as GitHub. In such a case the email address of the user is not uploaded, unless specifically requested
|
||||
by the user. Besides this, no other data is transmitted off of the mobile device by the Application.
|
||||
|
||||
# What are my opt-out rights?
|
||||
|
||||
There is no opt-out rights, as there is nothing to opt-out from. No data is transmitted off of the mobile device
|
||||
by the Application, either manually or automatically.
|
||||
The only data collection is that of crash details, and submitting these to the developer is only opt-in. To
|
||||
opt-out, a user would have to not submit crash details via the app.
|
||||
|
||||
# Data Retention Policy, Managing Your Information
|
||||
|
||||
No data is captured from users by the Application, so there is no information to manage. The only data
|
||||
which is known is the data provided by the App Store the Application was downloaded from.
|
||||
Crash details submitted by a user are stored on a third-party email service, and the retention policy is to
|
||||
not delete such emails.
|
||||
|
||||
# Children
|
||||
|
||||
Ths Application is not used to knowingly solicit data from or market to children under the age of 13. If a parent or
|
||||
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.
|
||||
|
||||
# Security
|
||||
|
||||
We are concerned about safeguarding the confidentiality of your information. Note that no information is captured
|
||||
by the Application and transmitted off of the mobile device. The only data breach possible is that with the user's
|
||||
own mobile device.
|
||||
We are concerned about safeguarding the confidentiality of your information. The only information which could
|
||||
be sent to the developer is crash details, and these are opt-in. If a user is presented with the option to
|
||||
submit details on a crash, all the information which would be submitted is presented to the user. The only
|
||||
personally identifiable information is the email address of the user which is used to send the crash details.
|
||||
|
||||
# Changes
|
||||
|
||||
|
||||