Compare commits
83 Commits
googleAndr
...
v2.23.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e5fd277198 | ||
|
|
93b089c646 | ||
|
|
5e37a9b89f | ||
|
|
27cc7b9008 | ||
|
|
0749bbd432 | ||
|
|
9b1e0537c9 | ||
|
|
3b2b45f08f | ||
|
|
60a5e60ae0 | ||
|
|
77513d5528 | ||
|
|
15fa483490 | ||
|
|
40ba47d60c | ||
|
|
986327d141 | ||
|
|
36f0dde3b2 | ||
|
|
f0a695a616 | ||
|
|
810b0f3c14 | ||
|
|
fcf08a8900 | ||
|
|
939bf6a788 | ||
|
|
935f899d0f | ||
|
|
6c8d79ef36 | ||
|
|
178707b482 | ||
|
|
0f2c9cb63d | ||
|
|
0869a00f0c | ||
|
|
b63b8c4ea7 | ||
|
|
76d77a2af4 | ||
|
|
dade0b7a54 | ||
|
|
68801d6958 | ||
|
|
5c3ec85043 | ||
|
|
6332e396cb | ||
|
|
7f022feb6a | ||
|
|
1fa8487474 | ||
|
|
0e040a73eb | ||
|
|
65acb885af | ||
|
|
ee28957cbd | ||
|
|
0e9f4d9f2b | ||
|
|
58974cf738 | ||
|
|
c56c931a70 | ||
|
|
c83e8b6682 | ||
|
|
449ab86b5a | ||
|
|
8f18bbe0ac | ||
|
|
992e61b88a | ||
|
|
47b92fb38c | ||
|
|
b9963bb967 | ||
|
|
d642d57b85 | ||
|
|
9e0e8f6d7f | ||
|
|
e486755e6a | ||
|
|
1bb803ef0a | ||
|
|
f729f9758b | ||
|
|
abe3bc7d87 | ||
|
|
454bb6a1aa | ||
|
|
2d4d4e2309 | ||
|
|
e7c4010e8d | ||
|
|
cc363e0c04 | ||
|
|
deacc4a69b | ||
|
|
ac6e6e0985 | ||
|
|
fd37a2708f | ||
|
|
85ea314dc9 | ||
|
|
7fd5fe6ee0 | ||
|
|
2c35ad3044 | ||
|
|
210e305bae | ||
|
|
b48de921fc | ||
|
|
ebc2bfcbbb | ||
|
|
b1ec67928f | ||
|
|
2beafe954b | ||
|
|
25b6c4d8cc | ||
|
|
a3f1b9c0b9 | ||
|
|
14d5545c88 | ||
|
|
0977b9d20a | ||
|
|
bad0990dfb | ||
|
|
98c34abd66 | ||
|
|
b4d1463453 | ||
|
|
659b86e31a | ||
|
|
d63e269172 | ||
|
|
77aa768c5c | ||
|
|
8c74d4c2d0 | ||
|
|
a6280108ec | ||
|
|
829630219f | ||
|
|
22a736d7fd | ||
|
|
4418492e7c | ||
|
|
c21e12bbf0 | ||
|
|
9af05be128 | ||
|
|
e036443233 | ||
|
|
7e605f284d | ||
|
|
e712b8e18d |
@@ -1,5 +1,11 @@
|
||||
# Changelog
|
||||
|
||||
## v2.23.0 - 120
|
||||
|
||||
- Complete redesign of main and loyalty card view screens
|
||||
- Material You design for the settings screen
|
||||
- Fix crash when using "Take a photo" with disabled camera app
|
||||
|
||||
## v2.22.1 - 119
|
||||
|
||||
- Use Material You colours on more devices (Google library update)
|
||||
|
||||
36
Gemfile.lock
@@ -3,21 +3,21 @@ GEM
|
||||
specs:
|
||||
CFPropertyList (3.0.6)
|
||||
rexml
|
||||
addressable (2.8.1)
|
||||
addressable (2.8.4)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
artifactory (3.0.15)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.2.0)
|
||||
aws-partitions (1.701.0)
|
||||
aws-sdk-core (3.170.0)
|
||||
aws-partitions (1.749.0)
|
||||
aws-sdk-core (3.171.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-partitions (~> 1, >= 1.651.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.62.0)
|
||||
aws-sdk-kms (1.63.0)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.119.0)
|
||||
aws-sdk-s3 (1.120.1)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.4)
|
||||
@@ -36,7 +36,7 @@ GEM
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
dotenv (2.8.1)
|
||||
emoji_regex (3.2.3)
|
||||
excon (0.98.0)
|
||||
excon (0.99.0)
|
||||
faraday (1.10.3)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
@@ -66,7 +66,7 @@ GEM
|
||||
faraday_middleware (1.2.0)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.2.6)
|
||||
fastlane (2.211.0)
|
||||
fastlane (2.212.2)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
@@ -106,9 +106,9 @@ GEM
|
||||
xcpretty (~> 0.3.0)
|
||||
xcpretty-travis-formatter (>= 0.0.3)
|
||||
gh_inspector (1.1.3)
|
||||
google-apis-androidpublisher_v3 (0.32.0)
|
||||
google-apis-core (>= 0.9.1, < 2.a)
|
||||
google-apis-core (0.10.0)
|
||||
google-apis-androidpublisher_v3 (0.39.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-core (0.11.0)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
httpclient (>= 2.8.1, < 3.a)
|
||||
@@ -117,10 +117,10 @@ GEM
|
||||
retriable (>= 2.0, < 4.a)
|
||||
rexml
|
||||
webrick
|
||||
google-apis-iamcredentials_v1 (0.16.0)
|
||||
google-apis-core (>= 0.9.1, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.12.0)
|
||||
google-apis-core (>= 0.9.1, < 2.a)
|
||||
google-apis-iamcredentials_v1 (0.17.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.13.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-storage_v1 (0.19.0)
|
||||
google-apis-core (>= 0.9.0, < 2.a)
|
||||
google-cloud-core (1.6.0)
|
||||
@@ -128,7 +128,7 @@ GEM
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.6.0)
|
||||
faraday (>= 0.17.3, < 3.0)
|
||||
google-cloud-errors (1.3.0)
|
||||
google-cloud-errors (1.3.1)
|
||||
google-cloud-storage (1.44.0)
|
||||
addressable (~> 2.8)
|
||||
digest-crc (~> 0.4)
|
||||
@@ -137,7 +137,7 @@ GEM
|
||||
google-cloud-core (~> 1.6)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
mini_mime (~> 1.0)
|
||||
googleauth (1.3.0)
|
||||
googleauth (1.5.2)
|
||||
faraday (>= 0.17.3, < 3.a)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
memoist (~> 0.16)
|
||||
@@ -150,7 +150,7 @@ GEM
|
||||
httpclient (2.8.3)
|
||||
jmespath (1.6.2)
|
||||
json (2.6.3)
|
||||
jwt (2.6.0)
|
||||
jwt (2.7.0)
|
||||
memoist (0.16.2)
|
||||
mini_magick (4.12.0)
|
||||
mini_mime (1.1.2)
|
||||
@@ -160,7 +160,7 @@ GEM
|
||||
naturally (2.2.1)
|
||||
optparse (0.1.1)
|
||||
os (1.1.4)
|
||||
plist (3.6.0)
|
||||
plist (3.7.0)
|
||||
public_suffix (5.0.1)
|
||||
rake (13.0.6)
|
||||
representable (3.2.0)
|
||||
|
||||
@@ -19,8 +19,8 @@ android {
|
||||
applicationId "me.hackerchick.catima"
|
||||
minSdk 21
|
||||
targetSdk 33
|
||||
versionCode 119
|
||||
versionName "2.22.1"
|
||||
versionCode 120
|
||||
versionName "2.23.0"
|
||||
|
||||
vectorDrawables.useSupportLibrary true
|
||||
multiDexEnabled true
|
||||
@@ -100,7 +100,7 @@ dependencies {
|
||||
// Third-party
|
||||
implementation 'com.journeyapps:zxing-android-embedded:4.3.0@aar'
|
||||
implementation 'com.google.zxing:core:3.5.1'
|
||||
implementation 'org.apache.commons:commons-csv:1.10.0'
|
||||
implementation 'org.apache.commons:commons-csv:1.9.0'
|
||||
implementation 'com.jaredrummler:colorpicker:1.1.0'
|
||||
implementation 'com.github.invissvenska:NumberPickerPreference:1.0.4'
|
||||
implementation 'net.lingala.zip4j:zip4j:2.11.5'
|
||||
@@ -111,7 +111,7 @@ dependencies {
|
||||
// Testing
|
||||
testImplementation 'androidx.test:core:1.5.0'
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
testImplementation 'org.robolectric:robolectric:4.10'
|
||||
testImplementation 'org.robolectric:robolectric:4.10.3'
|
||||
}
|
||||
|
||||
tasks.withType(SpotBugsTask) {
|
||||
|
||||
@@ -39,6 +39,13 @@ public class AboutActivity extends CatimaAppCompatActivity {
|
||||
binding.privacy.setTag("https://catima.app/privacy-policy/");
|
||||
binding.reportError.setTag("https://github.com/CatimaLoyalty/Android/issues");
|
||||
binding.rate.setTag("https://play.google.com/store/apps/details?id=me.hackerchick.catima");
|
||||
binding.donate.setTag("https://catima.app/contribute/#donating");
|
||||
|
||||
boolean installedFromGooglePlay = Utils.installedFromGooglePlay(this);
|
||||
// Hide Google Play rate button if not on Google Play
|
||||
binding.rate.setVisibility(installedFromGooglePlay ? View.VISIBLE : View.GONE);
|
||||
// Hide donate button on Google Play (Google Play doesn't allow donation links)
|
||||
binding.donate.setVisibility(installedFromGooglePlay ? View.GONE : View.VISIBLE);
|
||||
|
||||
bindClickListeners();
|
||||
}
|
||||
@@ -74,6 +81,7 @@ public class AboutActivity extends CatimaAppCompatActivity {
|
||||
binding.privacy.setOnClickListener(openExternalBrowser);
|
||||
binding.reportError.setOnClickListener(openExternalBrowser);
|
||||
binding.rate.setOnClickListener(openExternalBrowser);
|
||||
binding.donate.setOnClickListener(openExternalBrowser);
|
||||
|
||||
binding.credits.setOnClickListener(view -> showCredits());
|
||||
}
|
||||
@@ -86,6 +94,8 @@ public class AboutActivity extends CatimaAppCompatActivity {
|
||||
binding.privacy.setOnClickListener(null);
|
||||
binding.reportError.setOnClickListener(null);
|
||||
binding.rate.setOnClickListener(null);
|
||||
binding.donate.setOnClickListener(null);
|
||||
|
||||
binding.credits.setOnClickListener(null);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package protect.card_locker;
|
||||
|
||||
public interface BarcodeImageWriterResultCallback {
|
||||
void onBarcodeImageWriterResult(boolean success);
|
||||
}
|
||||
@@ -42,12 +42,12 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
|
||||
private final int imageHeight;
|
||||
private final int imageWidth;
|
||||
private final boolean showFallback;
|
||||
private final Runnable callback;
|
||||
private final BarcodeImageWriterResultCallback callback;
|
||||
|
||||
BarcodeImageWriterTask(
|
||||
Context context, ImageView imageView, String cardIdString,
|
||||
CatimaBarcode barcodeFormat, TextView textView,
|
||||
boolean showFallback, Runnable callback, boolean roundCornerPadding
|
||||
boolean showFallback, BarcodeImageWriterResultCallback callback, boolean roundCornerPadding
|
||||
) {
|
||||
mContext = context;
|
||||
|
||||
@@ -282,7 +282,7 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
|
||||
}
|
||||
|
||||
if (callback != null) {
|
||||
callback.run();
|
||||
callback.onBarcodeImageWriterResult(isSuccesful);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import protect.card_locker.databinding.GroupLayoutBinding;
|
||||
import protect.card_locker.preferences.Settings;
|
||||
|
||||
public class GroupCursorAdapter extends BaseCursorAdapter<GroupCursorAdapter.GroupListItemViewHolder> {
|
||||
Settings mSettings;
|
||||
public final Context mContext;
|
||||
private final GroupAdapterListener mListener;
|
||||
SQLiteDatabase mDatabase;
|
||||
@@ -25,7 +24,6 @@ public class GroupCursorAdapter extends BaseCursorAdapter<GroupCursorAdapter.Gro
|
||||
public GroupCursorAdapter(Context inputContext, Cursor inputCursor, GroupAdapterListener inputListener) {
|
||||
super(inputCursor, DBHelper.LoyaltyCardDbGroups.ORDER);
|
||||
setHasStableIds(true);
|
||||
mSettings = new Settings(inputContext);
|
||||
mContext = inputContext;
|
||||
mListener = inputListener;
|
||||
mDatabase = new DBHelper(inputContext).getReadableDatabase();
|
||||
@@ -63,8 +61,6 @@ public class GroupCursorAdapter extends BaseCursorAdapter<GroupCursorAdapter.Gro
|
||||
}
|
||||
|
||||
inputHolder.mCardCount.setText(cardCountText);
|
||||
inputHolder.mName.setTextSize(mSettings.getFontSizeMax(mSettings.getMediumFont()));
|
||||
inputHolder.mCardCount.setTextSize(mSettings.getFontSizeMax(mSettings.getSmallFont()));
|
||||
|
||||
applyClickEvents(inputHolder);
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ import protect.card_locker.preferences.Settings;
|
||||
|
||||
public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCursorAdapter.LoyaltyCardListItemViewHolder> {
|
||||
private int mCurrentSelectedIndex = -1;
|
||||
Settings mSettings;
|
||||
boolean mDarkModeEnabled;
|
||||
public final Context mContext;
|
||||
private final CardAdapterListener mListener;
|
||||
@@ -47,7 +46,6 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
public LoyaltyCardCursorAdapter(Context inputContext, Cursor inputCursor, CardAdapterListener inputListener) {
|
||||
super(inputCursor, DBHelper.LoyaltyCardDbIds.ID);
|
||||
setHasStableIds(true);
|
||||
mSettings = new Settings(inputContext);
|
||||
mContext = inputContext;
|
||||
mListener = inputListener;
|
||||
mSelectedItems = new SparseBooleanArray();
|
||||
@@ -107,7 +105,6 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
|
||||
LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(inputCursor);
|
||||
|
||||
inputHolder.setStoreField(loyaltyCard.store);
|
||||
if (mShowDetails && !loyaltyCard.note.isEmpty()) {
|
||||
inputHolder.setNoteField(loyaltyCard.note);
|
||||
} else {
|
||||
@@ -132,15 +129,8 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
inputHolder.setExtraField(inputHolder.mExpiryField, null, null);
|
||||
}
|
||||
|
||||
setHeaderHeight(inputHolder, mShowDetails);
|
||||
Bitmap cardIcon = Utils.retrieveCardImage(mContext, loyaltyCard.id, ImageLocationType.icon);
|
||||
if (cardIcon != null) {
|
||||
inputHolder.mCardIcon.setImageBitmap(cardIcon);
|
||||
inputHolder.mCardIcon.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
||||
} else {
|
||||
inputHolder.mCardIcon.setImageBitmap(Utils.generateIcon(mContext, loyaltyCard.store, loyaltyCard.headerColor).getLetterTile());
|
||||
inputHolder.mCardIcon.setScaleType(ImageView.ScaleType.FIT_CENTER);
|
||||
}
|
||||
inputHolder.mCardIcon.setContentDescription(loyaltyCard.store);
|
||||
Utils.setIconOrTextWithBackground(mContext, loyaltyCard, inputHolder.mCardIcon, inputHolder.mCardText);
|
||||
inputHolder.setIconBackgroundColor(loyaltyCard.headerColor != null ? loyaltyCard.headerColor : androidx.appcompat.R.attr.colorPrimary);
|
||||
|
||||
inputHolder.toggleCardStateIcon(loyaltyCard.starStatus != 0, loyaltyCard.archiveStatus != 0, itemSelected(inputCursor.getPosition()));
|
||||
@@ -153,19 +143,6 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
inputHolder.mRow.requestLayout();
|
||||
}
|
||||
|
||||
private void setHeaderHeight(LoyaltyCardListItemViewHolder inputHolder, boolean expanded) {
|
||||
int iconHeight;
|
||||
if (expanded) {
|
||||
iconHeight = ViewGroup.LayoutParams.MATCH_PARENT;
|
||||
} else {
|
||||
iconHeight = (int) mContext.getResources().getDimension(R.dimen.cardThumbnailSize);
|
||||
}
|
||||
|
||||
inputHolder.mIconLayout.getLayoutParams().height = expanded ? 0 : iconHeight;
|
||||
inputHolder.mCardIcon.getLayoutParams().height = iconHeight;
|
||||
inputHolder.mTickIcon.getLayoutParams().height = iconHeight;
|
||||
}
|
||||
|
||||
private void applyClickEvents(LoyaltyCardListItemViewHolder inputHolder, final int inputPosition) {
|
||||
inputHolder.mRow.setOnClickListener(inputView -> mListener.onRowClicked(inputPosition));
|
||||
|
||||
@@ -241,28 +218,25 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
|
||||
public class LoyaltyCardListItemViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
public TextView mStoreField, mNoteField, mBalanceField, mValidFromField, mExpiryField;
|
||||
public TextView mCardText, mNoteField, mBalanceField, mValidFromField, mExpiryField;
|
||||
public ImageView mCardIcon, mStarBackground, mStarBorder, mTickIcon, mArchivedBackground;
|
||||
public MaterialCardView mRow, mIconLayout;
|
||||
public MaterialCardView mRow;
|
||||
public ConstraintLayout mStar, mArchived;
|
||||
public View mDivider;
|
||||
|
||||
private int mIconBackgroundColor;
|
||||
|
||||
|
||||
|
||||
protected LoyaltyCardListItemViewHolder(LoyaltyCardLayoutBinding loyaltyCardLayoutBinding, CardAdapterListener inputListener) {
|
||||
super(loyaltyCardLayoutBinding.getRoot());
|
||||
View inputView = loyaltyCardLayoutBinding.getRoot();
|
||||
mRow = loyaltyCardLayoutBinding.row;
|
||||
mDivider = loyaltyCardLayoutBinding.infoDivider;
|
||||
mStoreField = loyaltyCardLayoutBinding.store;
|
||||
mNoteField = loyaltyCardLayoutBinding.note;
|
||||
mBalanceField = loyaltyCardLayoutBinding.balance;
|
||||
mValidFromField = loyaltyCardLayoutBinding.validFrom;
|
||||
mExpiryField = loyaltyCardLayoutBinding.expiry;
|
||||
mIconLayout = loyaltyCardLayoutBinding.iconLayout;
|
||||
mCardIcon = loyaltyCardLayoutBinding.thumbnail;
|
||||
mCardText = loyaltyCardLayoutBinding.thumbnailText;
|
||||
mStar = loyaltyCardLayoutBinding.star;
|
||||
mStarBackground = loyaltyCardLayoutBinding.starBackground;
|
||||
mStarBorder = loyaltyCardLayoutBinding.starBorder;
|
||||
@@ -285,20 +259,15 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
return;
|
||||
}
|
||||
|
||||
int size = mSettings.getFontSizeMax(mSettings.getSmallFont());
|
||||
|
||||
field.setVisibility(View.VISIBLE);
|
||||
field.setText(text);
|
||||
field.setTextSize(size);
|
||||
field.setTextColor(color != null ? color : MaterialColors.getColor(mContext, com.google.android.material.R.attr.colorSecondary, ContextCompat.getColor(mContext, mDarkModeEnabled ? R.color.md_theme_dark_secondary : R.color.md_theme_light_secondary)));
|
||||
|
||||
int drawableSize = dpToPx((size * 24) / 14, mContext);
|
||||
mDivider.setVisibility(View.VISIBLE);
|
||||
field.setVisibility(View.VISIBLE);
|
||||
Drawable icon = field.getCompoundDrawables()[0];
|
||||
if (icon != null) {
|
||||
icon.mutate();
|
||||
icon.setBounds(0, 0, drawableSize, drawableSize);
|
||||
field.setCompoundDrawablesRelative(icon, null, null, null);
|
||||
|
||||
if (color != null) {
|
||||
@@ -311,19 +280,12 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
field.requestLayout();
|
||||
}
|
||||
|
||||
public void setStoreField(String text) {
|
||||
mStoreField.setText(text);
|
||||
mStoreField.setTextSize(mSettings.getFontSizeMax(mSettings.getMediumFont()));
|
||||
mStoreField.requestLayout();
|
||||
}
|
||||
|
||||
public void setNoteField(String text) {
|
||||
if (text == null) {
|
||||
mNoteField.setVisibility(View.GONE);
|
||||
} else {
|
||||
mNoteField.setVisibility(View.VISIBLE);
|
||||
mNoteField.setText(text);
|
||||
mNoteField.setTextSize(mSettings.getFontSizeMax(mSettings.getSmallFont()));
|
||||
}
|
||||
mNoteField.requestLayout();
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ import protect.card_locker.async.TaskHandler;
|
||||
import protect.card_locker.databinding.LayoutChipChoiceBinding;
|
||||
import protect.card_locker.databinding.LoyaltyCardEditActivityBinding;
|
||||
|
||||
public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements BarcodeImageWriterResultCallback {
|
||||
private LoyaltyCardEditActivityBinding binding;
|
||||
private static final String TAG = "Catima";
|
||||
|
||||
@@ -169,8 +169,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
AlertDialog confirmExitDialog = null;
|
||||
|
||||
boolean validBalance = true;
|
||||
Runnable barcodeImageGenerationFinishedCallback;
|
||||
|
||||
HashMap<String, Currency> currencies = new HashMap<>();
|
||||
|
||||
LoyaltyCard tempLoyaltyCard;
|
||||
@@ -348,13 +346,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
|
||||
enterButton = binding.enterButton;
|
||||
|
||||
barcodeImageGenerationFinishedCallback = () -> {
|
||||
if (!(boolean) barcodeImage.getTag()) {
|
||||
barcodeImageLayout.setVisibility(View.GONE);
|
||||
Toast.makeText(LoyaltyCardEditActivity.this, getString(R.string.wrongValueForBarcodeType), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
};
|
||||
|
||||
storeFieldEdit.addTextChangedListener(new SimpleTextWatcher() {
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
@@ -1129,7 +1120,12 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
Uri photoURI = FileProvider.getUriForFile(LoyaltyCardEditActivity.this, BuildConfig.APPLICATION_ID, Utils.createTempFile(this, TEMP_CAMERA_IMAGE_NAME));
|
||||
mRequestedImage = type;
|
||||
|
||||
mPhotoTakerLauncher.launch(photoURI);
|
||||
try {
|
||||
mPhotoTakerLauncher.launch(photoURI);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(getApplicationContext(), R.string.cameraPermissionDeniedTitle, Toast.LENGTH_LONG).show();
|
||||
Log.e(TAG, "No activity found to handle intent", e);
|
||||
}
|
||||
}
|
||||
|
||||
private void selectImageFromGallery(int type) {
|
||||
@@ -1150,6 +1146,14 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBarcodeImageWriterResult(boolean success) {
|
||||
if (!success) {
|
||||
barcodeImageLayout.setVisibility(View.GONE);
|
||||
Toast.makeText(LoyaltyCardEditActivity.this, getString(R.string.wrongValueForBarcodeType), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
class EditCardIdAndBarcode implements View.OnClickListener {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
@@ -1547,13 +1551,13 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
barcodeImage.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
||||
|
||||
Log.d(TAG, "ImageView size now known");
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, barcodeImageGenerationFinishedCallback, true);
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, LoyaltyCardEditActivity.this, true);
|
||||
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Log.d(TAG, "ImageView size known known, creating barcode");
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, barcodeImageGenerationFinishedCallback, true);
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, this, true);
|
||||
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,8 +9,6 @@ import android.content.res.Configuration;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Outline;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
@@ -23,13 +21,10 @@ import android.text.style.ForegroundColorSpan;
|
||||
import android.text.util.Linkify;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.GestureDetector;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewOutlineProvider;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.view.Window;
|
||||
import android.view.WindowInsets;
|
||||
@@ -47,23 +42,17 @@ import androidx.annotation.StringRes;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.content.res.AppCompatResources;
|
||||
import androidx.appcompat.widget.AppCompatTextView;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.constraintlayout.widget.Guideline;
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
import androidx.core.content.FileProvider;
|
||||
import androidx.core.graphics.BlendModeColorFilterCompat;
|
||||
import androidx.core.graphics.BlendModeCompat;
|
||||
import androidx.core.graphics.ColorUtils;
|
||||
import androidx.core.graphics.drawable.DrawableCompat;
|
||||
import androidx.core.view.WindowInsetsControllerCompat;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
|
||||
import androidx.core.widget.TextViewCompat;
|
||||
|
||||
import com.google.android.material.appbar.AppBarLayout;
|
||||
import com.google.android.material.bottomappbar.BottomAppBar;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
|
||||
import java.io.File;
|
||||
@@ -82,31 +71,10 @@ import protect.card_locker.async.TaskHandler;
|
||||
import protect.card_locker.databinding.LoyaltyCardViewLayoutBinding;
|
||||
import protect.card_locker.preferences.Settings;
|
||||
|
||||
public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements GestureDetector.OnGestureListener {
|
||||
public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements BarcodeImageWriterResultCallback {
|
||||
private LoyaltyCardViewLayoutBinding binding;
|
||||
private static final String TAG = "Catima";
|
||||
|
||||
private GestureDetector mGestureDetector;
|
||||
|
||||
CoordinatorLayout coordinatorLayout;
|
||||
ConstraintLayout mainLayout;
|
||||
TextView cardIdFieldView;
|
||||
BottomAppBar bottomAppBar;
|
||||
ImageButton bottomAppBarInfoButton;
|
||||
ImageButton bottomAppBarPreviousButton;
|
||||
ImageButton bottomAppBarNextButton;
|
||||
ImageButton bottomAppBarUpdateBalanceButton;
|
||||
AppCompatTextView storeName;
|
||||
ImageButton maximizeButton;
|
||||
ImageView mainImage;
|
||||
LinearLayout dotIndicator;
|
||||
ImageButton minimizeButton;
|
||||
View collapsingToolbarLayout;
|
||||
AppBarLayout appBarLayout;
|
||||
ImageView iconImage;
|
||||
Toolbar portraitToolbar;
|
||||
Toolbar landscapeToolbar;
|
||||
|
||||
int loyaltyCardId;
|
||||
ArrayList<Integer> cardList;
|
||||
|
||||
@@ -121,56 +89,36 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
String barcodeIdString;
|
||||
CatimaBarcode format;
|
||||
|
||||
FloatingActionButton editButton;
|
||||
|
||||
Guideline centerGuideline;
|
||||
SeekBar barcodeScaler;
|
||||
|
||||
Bitmap frontImageBitmap;
|
||||
Bitmap backImageBitmap;
|
||||
|
||||
boolean starred;
|
||||
boolean backgroundNeedsDarkIcons;
|
||||
boolean isFullscreen = false;
|
||||
ImageView barcodeRenderTarget;
|
||||
int mainImageIndex = 0;
|
||||
List<ImageType> imageTypes;
|
||||
private ImageView[] dots;
|
||||
boolean isBarcodeSupported = true;
|
||||
|
||||
static final String STATE_IMAGEINDEX = "imageIndex";
|
||||
static final String STATE_FULLSCREEN = "isFullscreen";
|
||||
|
||||
private final int HEADER_FILTER_ALPHA = 127;
|
||||
|
||||
final private TaskHandler mTasks = new TaskHandler();
|
||||
Runnable barcodeImageGenerationFinishedCallback;
|
||||
|
||||
@Override
|
||||
public boolean onDown(MotionEvent e) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowPress(MotionEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onSingleTapUp(MotionEvent e) {
|
||||
if (imageTypes.size() > 1) {
|
||||
Toast.makeText(this, getString(R.string.swipeToSwitchImages), Toast.LENGTH_SHORT).show();
|
||||
public void onMainImageTap() {
|
||||
// If we're in fullscreen, leave fullscreen
|
||||
if (isFullscreen) {
|
||||
setFullscreen(false);
|
||||
return;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
// If the barcode is shown, switch to fullscreen layout
|
||||
if (imageTypes.get(mainImageIndex) == ImageType.BARCODE) {
|
||||
setFullscreen(true);
|
||||
return;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLongPress(MotionEvent e) {
|
||||
// If this is an image, open it in the gallery.
|
||||
openCurrentMainImageInGallery();
|
||||
}
|
||||
|
||||
@@ -212,46 +160,17 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
|
||||
Log.d(TAG, "On fling");
|
||||
public void onBarcodeImageWriterResult(boolean success) {
|
||||
if (!success) {
|
||||
imageTypes.remove(ImageType.BARCODE);
|
||||
|
||||
if (Math.abs(velocityY) > (0.75 * Math.abs(velocityX))) {
|
||||
// Vertical swipe
|
||||
// Swipe up
|
||||
if (velocityY < -150) {
|
||||
if (!isFullscreen) {
|
||||
setFullscreen(true);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
setStateBasedOnImageTypes();
|
||||
|
||||
// Swipe down
|
||||
if (velocityY > 150) {
|
||||
if (isFullscreen) {
|
||||
setFullscreen(false);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
} else if (Math.abs(velocityX) > (0.75 * Math.abs(velocityY))) {
|
||||
// Horizontal swipe
|
||||
// Swipe right
|
||||
if (velocityX < -150) {
|
||||
setMainImage(true, false);
|
||||
return false;
|
||||
}
|
||||
// Call correct drawMainImage
|
||||
setFullscreen(isFullscreen);
|
||||
|
||||
// Swipe left
|
||||
if (velocityX > 150) {
|
||||
setMainImage(false, false);
|
||||
return false;
|
||||
}
|
||||
Toast.makeText(LoyaltyCardViewActivity.this, getString(R.string.wrongValueForBarcodeType), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
if (imageTypes.size() > 1) {
|
||||
Toast.makeText(this, getString(R.string.swipeToSwitchImages), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
enum ImageType {
|
||||
@@ -268,40 +187,13 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
Log.d(TAG, "View activity: id=" + loyaltyCardId);
|
||||
}
|
||||
|
||||
private Drawable getDotIcon(boolean active, boolean darkMode) {
|
||||
Drawable unwrappedIcon = AppCompatResources.getDrawable(this, active ? R.drawable.active_dot : R.drawable.inactive_dot);
|
||||
assert unwrappedIcon != null;
|
||||
Drawable wrappedIcon = DrawableCompat.wrap(unwrappedIcon);
|
||||
if (darkMode) {
|
||||
DrawableCompat.setTint(wrappedIcon, Color.WHITE);
|
||||
} else {
|
||||
DrawableCompat.setTint(wrappedIcon, Color.BLACK);
|
||||
}
|
||||
|
||||
return wrappedIcon;
|
||||
}
|
||||
|
||||
private Drawable getIcon(int icon, boolean dark) {
|
||||
Drawable unwrappedIcon = AppCompatResources.getDrawable(this, icon);
|
||||
assert unwrappedIcon != null;
|
||||
Drawable wrappedIcon = DrawableCompat.wrap(unwrappedIcon);
|
||||
wrappedIcon.mutate();
|
||||
if (dark) {
|
||||
DrawableCompat.setTint(wrappedIcon, Color.BLACK);
|
||||
} else {
|
||||
DrawableCompat.setTintList(wrappedIcon, null);
|
||||
}
|
||||
|
||||
return wrappedIcon;
|
||||
}
|
||||
|
||||
private void setCenterGuideline(int zoomLevel) {
|
||||
private void setScalerGuideline(int zoomLevel) {
|
||||
float scale = zoomLevel / 100f;
|
||||
|
||||
if (format != null && format.isSquare()) {
|
||||
centerGuideline.setGuidelinePercent(0.75f * scale);
|
||||
binding.scalerGuideline.setGuidelinePercent(0.75f * scale);
|
||||
} else {
|
||||
centerGuideline.setGuidelinePercent(0.5f * scale);
|
||||
binding.scalerGuideline.setGuidelinePercent(0.5f * scale);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -329,6 +221,9 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
binding = LoyaltyCardViewLayoutBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
Toolbar toolbar = binding.toolbar;
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
settings = new Settings(this);
|
||||
|
||||
@@ -355,43 +250,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
database = new DBHelper(this).getWritableDatabase();
|
||||
importURIHelper = new ImportURIHelper(this);
|
||||
|
||||
coordinatorLayout = binding.coordinatorLayout;
|
||||
mainLayout = binding.mainLayout;
|
||||
cardIdFieldView = binding.cardIdView;
|
||||
storeName = binding.storeName;
|
||||
maximizeButton = binding.maximizeButton;
|
||||
mainImage = binding.mainImage;
|
||||
mainImage.setClipToOutline(true);
|
||||
dotIndicator = binding.dotIndicator;
|
||||
minimizeButton = binding.minimizeButton;
|
||||
collapsingToolbarLayout = binding.collapsingToolbarLayout;
|
||||
appBarLayout = binding.appBarLayout;
|
||||
bottomAppBar = binding.bottomAppBar;
|
||||
iconImage = binding.iconImage;
|
||||
portraitToolbar = binding.toolbar;
|
||||
landscapeToolbar = binding.toolbarLandscape;
|
||||
|
||||
bottomAppBarInfoButton = binding.buttonShowInfo;
|
||||
bottomAppBarPreviousButton = binding.buttonPrevious;
|
||||
bottomAppBarNextButton = binding.buttonNext;
|
||||
bottomAppBarUpdateBalanceButton = binding.buttonUpdateBalance;
|
||||
|
||||
barcodeImageGenerationFinishedCallback = () -> {
|
||||
if (!(boolean) mainImage.getTag()) {
|
||||
mainImage.setVisibility(View.GONE);
|
||||
imageTypes.remove(ImageType.BARCODE);
|
||||
|
||||
// Redraw UI
|
||||
setDotIndicator(Utils.isDarkModeEnabled(LoyaltyCardViewActivity.this));
|
||||
setFullscreen(isFullscreen);
|
||||
|
||||
Toast.makeText(LoyaltyCardViewActivity.this, getString(R.string.wrongValueForBarcodeType), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
};
|
||||
|
||||
centerGuideline = binding.centerGuideline;
|
||||
barcodeScaler = binding.barcodeScaler;
|
||||
barcodeScaler.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||
binding.barcodeScaler.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||
@Override
|
||||
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
||||
if (!fromUser) {
|
||||
@@ -399,14 +258,14 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
return;
|
||||
}
|
||||
Log.d(TAG, "Progress is " + progress);
|
||||
Log.d(TAG, "Max is " + barcodeScaler.getMax());
|
||||
float scale = (float) progress / (float) barcodeScaler.getMax();
|
||||
Log.d(TAG, "Max is " + binding.barcodeScaler.getMax());
|
||||
float scale = (float) progress / (float) binding.barcodeScaler.getMax();
|
||||
Log.d(TAG, "Scaling to " + scale);
|
||||
|
||||
loyaltyCard.zoomLevel = progress;
|
||||
DBHelper.updateLoyaltyCardZoomLevel(database, loyaltyCardId, loyaltyCard.zoomLevel);
|
||||
|
||||
setCenterGuideline(loyaltyCard.zoomLevel);
|
||||
setScalerGuideline(loyaltyCard.zoomLevel);
|
||||
|
||||
drawMainImage(mainImageIndex, true, isFullscreen);
|
||||
}
|
||||
@@ -424,12 +283,9 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
rotationEnabled = true;
|
||||
|
||||
// Allow making barcode fullscreen on tap
|
||||
maximizeButton.setOnClickListener(v -> setFullscreen(true));
|
||||
minimizeButton.setOnClickListener(v -> setFullscreen(false));
|
||||
binding.fullscreenButtonMinimize.setOnClickListener(v -> setFullscreen(false));
|
||||
|
||||
editButton = binding.fabEdit;
|
||||
editButton.setOnClickListener(v -> {
|
||||
binding.fabEdit.setOnClickListener(v -> {
|
||||
Intent intent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putInt("id", loyaltyCardId);
|
||||
@@ -438,35 +294,21 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
startActivity(intent);
|
||||
finish();
|
||||
});
|
||||
editButton.bringToFront();
|
||||
binding.fabEdit.bringToFront();
|
||||
|
||||
appBarLayout.setOutlineProvider(new ViewOutlineProvider() {
|
||||
@Override
|
||||
public void getOutline(View view, Outline outline) {
|
||||
ViewOutlineProvider.BACKGROUND.getOutline(view, outline);
|
||||
outline.setAlpha(0f);
|
||||
}
|
||||
binding.bottomAppBarInfoButton.setOnClickListener(view -> showInfoDialog());
|
||||
binding.bottomAppBarPreviousButton.setOnClickListener(view -> prevNextCard(false));
|
||||
binding.bottomAppBarNextButton.setOnClickListener(view -> prevNextCard(true));
|
||||
binding.bottomAppBarUpdateBalanceButton.setOnClickListener(view -> showBalanceUpdateDialog());
|
||||
|
||||
binding.mainImage.setOnClickListener(view -> onMainImageTap());
|
||||
// This long-press was originally only intended for when Talkback was used but sadly limiting
|
||||
// this doesn't seem to work well
|
||||
binding.mainImage.setOnLongClickListener(view -> {
|
||||
setMainImage(true, true);
|
||||
return true;
|
||||
});
|
||||
|
||||
bottomAppBarInfoButton.setOnClickListener(view -> showInfoDialog());
|
||||
bottomAppBarPreviousButton.setOnClickListener(view -> prevNextCard(false));
|
||||
bottomAppBarNextButton.setOnClickListener(view -> prevNextCard(true));
|
||||
bottomAppBarUpdateBalanceButton.setOnClickListener(view -> showBalanceUpdateDialog());
|
||||
|
||||
mGestureDetector = new GestureDetector(this, this);
|
||||
View.OnTouchListener gestureTouchListener = (v, event) -> mGestureDetector.onTouchEvent(event);
|
||||
mainImage.setOnTouchListener(gestureTouchListener);
|
||||
|
||||
appBarLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
|
||||
@Override
|
||||
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
||||
iconImage.setLayoutParams(new CoordinatorLayout.LayoutParams(
|
||||
CoordinatorLayout.LayoutParams.MATCH_PARENT, appBarLayout.getHeight())
|
||||
);
|
||||
iconImage.setClipBounds(new Rect(left, top, right, bottom));
|
||||
}
|
||||
});
|
||||
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
|
||||
binding.fullscreenImage.setOnClickListener(view -> onMainImageTap());
|
||||
}
|
||||
|
||||
private SpannableStringBuilder padSpannableString(SpannableStringBuilder spannableStringBuilder) {
|
||||
@@ -493,7 +335,6 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
dialogContentPadding,
|
||||
dialogTitlePadding
|
||||
);
|
||||
infoTitleView.setTextSize(settings.getFontSizeMax(settings.getMediumFont()));
|
||||
infoTitleView.setText(loyaltyCard.store);
|
||||
infoDialog.setCustomTitle(infoTitleView);
|
||||
infoDialog.setTitle(loyaltyCard.store);
|
||||
@@ -630,20 +471,20 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
private void setBottomAppBarButtonState() {
|
||||
if (!loyaltyCard.note.isEmpty() || !loyaltyCardGroups.isEmpty() || hasBalance(loyaltyCard) || loyaltyCard.validFrom != null || loyaltyCard.expiry != null) {
|
||||
bottomAppBarInfoButton.setVisibility(View.VISIBLE);
|
||||
binding.bottomAppBarInfoButton.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
bottomAppBarInfoButton.setVisibility(View.GONE);
|
||||
binding.bottomAppBarInfoButton.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
if (cardList == null || cardList.size() == 1) {
|
||||
bottomAppBarPreviousButton.setVisibility(View.GONE);
|
||||
bottomAppBarNextButton.setVisibility(View.GONE);
|
||||
binding.bottomAppBarPreviousButton.setVisibility(View.GONE);
|
||||
binding.bottomAppBarNextButton.setVisibility(View.GONE);
|
||||
} else {
|
||||
bottomAppBarPreviousButton.setVisibility(View.VISIBLE);
|
||||
bottomAppBarNextButton.setVisibility(View.VISIBLE);
|
||||
binding.bottomAppBarPreviousButton.setVisibility(View.VISIBLE);
|
||||
binding.bottomAppBarNextButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
bottomAppBarUpdateBalanceButton.setVisibility(hasBalance(loyaltyCard) ? View.VISIBLE : View.GONE);
|
||||
binding.bottomAppBarUpdateBalanceButton.setVisibility(hasBalance(loyaltyCard) ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
||||
private void prevNextCard(boolean next) {
|
||||
@@ -738,6 +579,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
return;
|
||||
}
|
||||
|
||||
setTitle(loyaltyCard.store);
|
||||
|
||||
loyaltyCardGroups = DBHelper.getLoyaltyCardGroups(database, loyaltyCardId);
|
||||
|
||||
setupOrientation();
|
||||
@@ -746,19 +589,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
cardIdString = loyaltyCard.cardId;
|
||||
barcodeIdString = loyaltyCard.barcodeId;
|
||||
|
||||
cardIdFieldView.setText(loyaltyCard.cardId);
|
||||
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(cardIdFieldView,
|
||||
settings.getFontSizeMin(settings.getLargeFont()), settings.getFontSizeMax(settings.getLargeFont()),
|
||||
1, TypedValue.COMPLEX_UNIT_SP);
|
||||
|
||||
storeName.setText(loyaltyCard.store);
|
||||
storeName.setTextSize(settings.getFontSizeMax(settings.getLargeFont()));
|
||||
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(
|
||||
storeName,
|
||||
settings.getFontSizeMin(settings.getLargeFont()),
|
||||
settings.getFontSizeMax(settings.getLargeFont()),
|
||||
1,
|
||||
TypedValue.COMPLEX_UNIT_DIP);
|
||||
binding.cardIdView.setText(loyaltyCard.cardId);
|
||||
|
||||
int backgroundHeaderColor;
|
||||
if (loyaltyCard.headerColor != null) {
|
||||
@@ -767,72 +598,29 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
backgroundHeaderColor = LetterBitmap.getDefaultColor(this, loyaltyCard.store);
|
||||
}
|
||||
|
||||
int textColor;
|
||||
if (Utils.needsDarkForeground(backgroundHeaderColor)) {
|
||||
textColor = Color.BLACK;
|
||||
} else {
|
||||
textColor = Color.WHITE;
|
||||
}
|
||||
storeName.setTextColor(textColor);
|
||||
landscapeToolbar.setTitleTextColor(textColor);
|
||||
|
||||
// Also apply colours to UI elements
|
||||
int darkenedColor = ColorUtils.blendARGB(backgroundHeaderColor, Color.BLACK, 0.1f);
|
||||
barcodeScaler.setProgressTintList(ColorStateList.valueOf(darkenedColor));
|
||||
barcodeScaler.setThumbTintList(ColorStateList.valueOf(darkenedColor));
|
||||
maximizeButton.setBackgroundColor(darkenedColor);
|
||||
minimizeButton.setBackgroundColor(darkenedColor);
|
||||
bottomAppBar.setBackgroundColor(darkenedColor);
|
||||
maximizeButton.setColorFilter(textColor);
|
||||
minimizeButton.setColorFilter(textColor);
|
||||
binding.barcodeScaler.setProgressTintList(ColorStateList.valueOf(darkenedColor));
|
||||
binding.barcodeScaler.setThumbTintList(ColorStateList.valueOf(darkenedColor));
|
||||
binding.bottomAppBar.setBackgroundColor(darkenedColor);
|
||||
int complementaryColor = Utils.getComplementaryColor(darkenedColor);
|
||||
editButton.setBackgroundTintList(ColorStateList.valueOf(complementaryColor));
|
||||
Drawable editButtonIcon = editButton.getDrawable();
|
||||
binding.fabEdit.setBackgroundTintList(ColorStateList.valueOf(complementaryColor));
|
||||
Drawable editButtonIcon = binding.fabEdit.getDrawable();
|
||||
editButtonIcon.mutate();
|
||||
editButtonIcon.setTint(Utils.needsDarkForeground(complementaryColor) ? Color.BLACK : Color.WHITE);
|
||||
editButton.setImageDrawable(editButtonIcon);
|
||||
binding.fabEdit.setImageDrawable(editButtonIcon);
|
||||
|
||||
Bitmap icon = Utils.retrieveCardImage(this, loyaltyCard.id, ImageLocationType.icon);
|
||||
if (icon != null) {
|
||||
int backgroundAlphaColor = Utils.needsDarkForeground(backgroundHeaderColor) ? Color.WHITE : Color.BLACK;
|
||||
Log.d("onResume", "setting icon image");
|
||||
iconImage.setImageBitmap(icon);
|
||||
int backgroundWithAlpha = Color.argb(HEADER_FILTER_ALPHA, Color.red(backgroundAlphaColor), Color.green(backgroundAlphaColor), Color.blue(backgroundAlphaColor));
|
||||
// for images that has alpha
|
||||
appBarLayout.setBackgroundColor(backgroundWithAlpha);
|
||||
} else {
|
||||
Bitmap plain = Bitmap.createBitmap(new int[]{backgroundHeaderColor}, 1, 1, Bitmap.Config.ARGB_8888);
|
||||
iconImage.setImageBitmap(plain);
|
||||
appBarLayout.setBackgroundColor(Color.TRANSPARENT);
|
||||
}
|
||||
Utils.setIconOrTextWithBackground(this, loyaltyCard, binding.iconImage, binding.iconText);
|
||||
|
||||
// If the background is very bright, we should use dark icons
|
||||
backgroundNeedsDarkIcons = Utils.needsDarkForeground(backgroundHeaderColor);
|
||||
ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
actionBar.setHomeAsUpIndicator(getIcon(R.drawable.home_arrow_back_white, backgroundNeedsDarkIcons));
|
||||
}
|
||||
|
||||
fixImageButtonColor(bottomAppBarInfoButton);
|
||||
fixImageButtonColor(bottomAppBarPreviousButton);
|
||||
fixImageButtonColor(bottomAppBarNextButton);
|
||||
fixImageButtonColor(bottomAppBarUpdateBalanceButton);
|
||||
fixBottomAppBarImageButtonColor(binding.bottomAppBarInfoButton);
|
||||
fixBottomAppBarImageButtonColor(binding.bottomAppBarPreviousButton);
|
||||
fixBottomAppBarImageButtonColor(binding.bottomAppBarNextButton);
|
||||
fixBottomAppBarImageButtonColor(binding.bottomAppBarUpdateBalanceButton);
|
||||
setBottomAppBarButtonState();
|
||||
|
||||
// Make notification area light if dark icons are needed
|
||||
if (Build.VERSION.SDK_INT >= 23) {
|
||||
View decorView = getWindow().getDecorView();
|
||||
WindowInsetsControllerCompat wic = new WindowInsetsControllerCompat(getWindow(), decorView);
|
||||
wic.setAppearanceLightStatusBars(backgroundNeedsDarkIcons);
|
||||
window.setStatusBarColor(Color.TRANSPARENT);
|
||||
} else {
|
||||
// Darken statusbar if icons won't be visible otherwise
|
||||
window.setStatusBarColor(backgroundNeedsDarkIcons ? ColorUtils.blendARGB(backgroundHeaderColor, Color.BLACK, 0.15f) : Color.TRANSPARENT);
|
||||
}
|
||||
|
||||
// Set shadow colour of store text so even same color on same color would be readable
|
||||
storeName.setShadowLayer(1, 1, 1, backgroundNeedsDarkIcons ? Color.BLACK : Color.WHITE);
|
||||
|
||||
if (format != null && !format.isSupported()) {
|
||||
isBarcodeSupported = false;
|
||||
|
||||
@@ -857,11 +645,29 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
imageTypes.add(ImageType.IMAGE_BACK);
|
||||
}
|
||||
|
||||
setDotIndicator(Utils.isDarkModeEnabled(this));
|
||||
setStateBasedOnImageTypes();
|
||||
|
||||
setFullscreen(isFullscreen);
|
||||
|
||||
DBHelper.updateLoyaltyCardLastUsed(database, loyaltyCard.id);
|
||||
|
||||
invalidateOptionsMenu();
|
||||
}
|
||||
|
||||
private void setStateBasedOnImageTypes() {
|
||||
// Decrease the card holder size to only fit the value if there is no barcode
|
||||
// This looks much cleaner
|
||||
ViewGroup.LayoutParams cardHolderLayoutParams = binding.cardHolder.getLayoutParams();
|
||||
if (imageTypes.isEmpty()) {
|
||||
cardHolderLayoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
} else {
|
||||
cardHolderLayoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
|
||||
}
|
||||
binding.cardHolder.setLayoutParams(cardHolderLayoutParams);
|
||||
|
||||
// Ensure buttons and accessibility are correct
|
||||
setMainImagePreviousNextButtons();
|
||||
setMainImageAccessibility();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@@ -870,7 +676,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
|
||||
}
|
||||
|
||||
private void fixImageButtonColor(ImageButton imageButton) {
|
||||
private void fixBottomAppBarImageButtonColor(ImageButton imageButton) {
|
||||
imageButton.setColorFilter(BlendModeColorFilterCompat.createBlendModeColorFilterCompat(backgroundNeedsDarkIcons ? Color.BLACK : Color.WHITE, BlendModeCompat.SRC_ATOP));
|
||||
}
|
||||
|
||||
@@ -887,18 +693,6 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.card_view_menu, menu);
|
||||
starred = loyaltyCard.starStatus != 0;
|
||||
|
||||
if (loyaltyCard.archiveStatus != 0) {
|
||||
menu.findItem(R.id.action_unarchive).setVisible(true);
|
||||
menu.findItem(R.id.action_archive).setVisible(false);
|
||||
} else {
|
||||
menu.findItem(R.id.action_unarchive).setVisible(false);
|
||||
menu.findItem(R.id.action_archive).setVisible(true);
|
||||
}
|
||||
|
||||
menu.findItem(R.id.action_overflow).setIcon(getIcon(R.drawable.ic_overflow_menu, backgroundNeedsDarkIcons));
|
||||
menu.findItem(R.id.action_share).setIcon(getIcon(R.drawable.ic_share_white, backgroundNeedsDarkIcons));
|
||||
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
@@ -907,13 +701,27 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
@Override
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
super.onPrepareOptionsMenu(menu);
|
||||
if (starred) {
|
||||
menu.findItem(R.id.action_star_unstar).setIcon(getIcon(R.drawable.ic_starred_white, backgroundNeedsDarkIcons));
|
||||
menu.findItem(R.id.action_star_unstar).setTitle(R.string.unstar);
|
||||
} else {
|
||||
menu.findItem(R.id.action_star_unstar).setIcon(getIcon(R.drawable.ic_unstarred_white, backgroundNeedsDarkIcons));
|
||||
menu.findItem(R.id.action_star_unstar).setTitle(R.string.star);
|
||||
|
||||
if (loyaltyCard != null) {
|
||||
// Update star status
|
||||
if (loyaltyCard.starStatus == 1) {
|
||||
menu.findItem(R.id.action_star_unstar).setIcon(R.drawable.ic_starred);
|
||||
menu.findItem(R.id.action_star_unstar).setTitle(R.string.unstar);
|
||||
} else {
|
||||
menu.findItem(R.id.action_star_unstar).setIcon(R.drawable.ic_unstarred);
|
||||
menu.findItem(R.id.action_star_unstar).setTitle(R.string.star);
|
||||
}
|
||||
|
||||
// Update archive/unarchive button
|
||||
if (loyaltyCard.archiveStatus != 0) {
|
||||
menu.findItem(R.id.action_unarchive).setVisible(true);
|
||||
menu.findItem(R.id.action_archive).setVisible(false);
|
||||
} else {
|
||||
menu.findItem(R.id.action_unarchive).setVisible(false);
|
||||
menu.findItem(R.id.action_archive).setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -942,11 +750,11 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
return true;
|
||||
} else if (id == R.id.action_star_unstar) {
|
||||
starred = !starred;
|
||||
DBHelper.updateLoyaltyCardStarStatus(database, loyaltyCardId, starred ? 1 : 0);
|
||||
DBHelper.updateLoyaltyCardStarStatus(database, loyaltyCardId, loyaltyCard.starStatus == 0 ? 1 : 0);
|
||||
|
||||
// Re-init loyaltyCard with new data from DB
|
||||
onResume();
|
||||
invalidateOptionsMenu();
|
||||
|
||||
return true;
|
||||
} else if (id == R.id.action_archive) {
|
||||
@@ -955,6 +763,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
// Re-init loyaltyCard with new data from DB
|
||||
onResume();
|
||||
invalidateOptionsMenu();
|
||||
|
||||
return true;
|
||||
} else if (id == R.id.action_unarchive) {
|
||||
@@ -963,6 +772,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
// Re-init loyaltyCard with new data from DB
|
||||
onResume();
|
||||
invalidateOptionsMenu();
|
||||
|
||||
return true;
|
||||
} else if (id == R.id.action_delete) {
|
||||
@@ -993,23 +803,10 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
int orientation = getResources().getConfiguration().orientation;
|
||||
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||
Log.d(TAG, "Detected landscape mode");
|
||||
setTitle(loyaltyCard.store);
|
||||
|
||||
collapsingToolbarLayout.setVisibility(View.GONE);
|
||||
portraitToolbar.setVisibility(View.GONE);
|
||||
landscapeToolbar.setVisibility(View.VISIBLE);
|
||||
|
||||
setSupportActionBar(landscapeToolbar);
|
||||
binding.iconContainer.setVisibility(View.GONE);
|
||||
} else {
|
||||
Log.d(TAG, "Detected portrait mode");
|
||||
|
||||
setTitle("");
|
||||
|
||||
collapsingToolbarLayout.setVisibility(View.VISIBLE);
|
||||
portraitToolbar.setVisibility(View.VISIBLE);
|
||||
landscapeToolbar.setVisibility(View.GONE);
|
||||
|
||||
setSupportActionBar(portraitToolbar);
|
||||
binding.iconContainer.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
enableToolbarBackButton();
|
||||
@@ -1017,15 +814,16 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
private void drawBarcode(boolean addPadding) {
|
||||
mTasks.flushTaskList(TaskHandler.TYPE.BARCODE, true, false, false);
|
||||
|
||||
if (format != null) {
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(
|
||||
getApplicationContext(),
|
||||
mainImage,
|
||||
barcodeRenderTarget,
|
||||
barcodeIdString != null ? barcodeIdString : cardIdString,
|
||||
format,
|
||||
null,
|
||||
false,
|
||||
barcodeImageGenerationFinishedCallback,
|
||||
this,
|
||||
addPadding);
|
||||
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
@@ -1033,11 +831,11 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
private void redrawBarcodeAfterResize(boolean addPadding) {
|
||||
if (format != null) {
|
||||
mainImage.getViewTreeObserver().addOnGlobalLayoutListener(
|
||||
barcodeRenderTarget.getViewTreeObserver().addOnGlobalLayoutListener(
|
||||
new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||
@Override
|
||||
public void onGlobalLayout() {
|
||||
mainImage.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
||||
barcodeRenderTarget.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
||||
|
||||
Log.d(TAG, "ImageView size now known");
|
||||
drawBarcode(addPadding);
|
||||
@@ -1048,25 +846,18 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
private void drawMainImage(int index, boolean waitForResize, boolean isFullscreen) {
|
||||
if (imageTypes.isEmpty()) {
|
||||
mainImage.setVisibility(View.GONE);
|
||||
barcodeRenderTarget.setVisibility(View.GONE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (dots != null) {
|
||||
boolean darkMode = Utils.isDarkModeEnabled(getApplicationContext());
|
||||
for (int i = 0; i < dots.length; i++) {
|
||||
dots[i].setImageDrawable(getDotIcon(i == index, darkMode));
|
||||
}
|
||||
}
|
||||
|
||||
ImageType wantedImageType = imageTypes.get(index);
|
||||
|
||||
if (wantedImageType == ImageType.BARCODE) {
|
||||
// Use border in non-fullscreen mode
|
||||
if (!isFullscreen) {
|
||||
mainImage.setBackground(AppCompatResources.getDrawable(this, R.drawable.round_outline));
|
||||
barcodeRenderTarget.setBackground(AppCompatResources.getDrawable(this, R.drawable.round_outline));
|
||||
} else {
|
||||
mainImage.setBackgroundColor(Color.WHITE);
|
||||
barcodeRenderTarget.setBackgroundColor(Color.WHITE);
|
||||
}
|
||||
|
||||
if (waitForResize) {
|
||||
@@ -1075,27 +866,27 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
drawBarcode(!isFullscreen);
|
||||
}
|
||||
|
||||
mainImage.setContentDescription(getString(R.string.barcodeImageDescriptionWithType, format.prettyName()));
|
||||
barcodeRenderTarget.setContentDescription(getString(R.string.barcodeImageDescriptionWithType, format.prettyName()));
|
||||
} else if (wantedImageType == ImageType.IMAGE_FRONT) {
|
||||
mainImage.setImageBitmap(frontImageBitmap);
|
||||
mainImage.setBackgroundColor(Color.TRANSPARENT);
|
||||
mainImage.setContentDescription(getString(R.string.frontImageDescription));
|
||||
barcodeRenderTarget.setImageBitmap(frontImageBitmap);
|
||||
barcodeRenderTarget.setBackgroundColor(Color.TRANSPARENT);
|
||||
barcodeRenderTarget.setContentDescription(getString(R.string.frontImageDescription));
|
||||
} else if (wantedImageType == ImageType.IMAGE_BACK) {
|
||||
mainImage.setImageBitmap(backImageBitmap);
|
||||
mainImage.setBackgroundColor(Color.TRANSPARENT);
|
||||
mainImage.setContentDescription(getString(R.string.backImageDescription));
|
||||
barcodeRenderTarget.setImageBitmap(backImageBitmap);
|
||||
barcodeRenderTarget.setBackgroundColor(Color.TRANSPARENT);
|
||||
barcodeRenderTarget.setContentDescription(getString(R.string.backImageDescription));
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown image type: " + wantedImageType);
|
||||
}
|
||||
|
||||
mainImage.setVisibility(View.VISIBLE);
|
||||
barcodeRenderTarget.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
private void setMainImage(boolean next, boolean overflow) {
|
||||
int newIndex = mainImageIndex + (next ? 1 : -1);
|
||||
|
||||
if (newIndex >= imageTypes.size() && overflow) {
|
||||
newIndex = 0;
|
||||
newIndex = 0;
|
||||
}
|
||||
|
||||
if (newIndex == -1 || newIndex >= imageTypes.size()) {
|
||||
@@ -1105,24 +896,85 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
mainImageIndex = newIndex;
|
||||
|
||||
drawMainImage(newIndex, false, isFullscreen);
|
||||
|
||||
setMainImagePreviousNextButtons();
|
||||
setMainImageAccessibility();
|
||||
}
|
||||
|
||||
private void setDotIndicator(boolean darkMode) {
|
||||
dotIndicator.removeAllViews();
|
||||
if (imageTypes.size() >= 2) {
|
||||
dots = new ImageView[imageTypes.size()];
|
||||
|
||||
for (int i = 0; i < imageTypes.size(); i++) {
|
||||
dots[i] = new ImageView(this);
|
||||
dots[i].setImageDrawable(getDotIcon(false, darkMode));
|
||||
|
||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||
params.setMargins(8, 0, 8, 0);
|
||||
|
||||
dotIndicator.addView(dots[i], params);
|
||||
private void setMainImageAccessibility() {
|
||||
// Single-click actions
|
||||
if (mainImageIndex == 0) {
|
||||
ViewCompat.replaceAccessibilityAction(
|
||||
binding.mainImage,
|
||||
AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK,
|
||||
getString(R.string.moveBarcodeToTopOfScreen),
|
||||
null
|
||||
);
|
||||
} else {
|
||||
int accessibilityClickAction;
|
||||
if (mainImageIndex == 1) {
|
||||
accessibilityClickAction = R.string.openFrontImageInGalleryApp;
|
||||
} else if (mainImageIndex == 2) {
|
||||
accessibilityClickAction = R.string.openBackImageInGalleryApp;
|
||||
} else {
|
||||
throw new IndexOutOfBoundsException("setMainImageAccessibility was out of range (action_click)");
|
||||
}
|
||||
|
||||
dotIndicator.setVisibility(View.VISIBLE);
|
||||
ViewCompat.replaceAccessibilityAction(
|
||||
binding.mainImage,
|
||||
AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK,
|
||||
getString(accessibilityClickAction),
|
||||
null
|
||||
);
|
||||
}
|
||||
|
||||
// Long-press actions
|
||||
int accessibilityLongPressAction;
|
||||
if (mainImageIndex == 0) {
|
||||
accessibilityLongPressAction = R.string.switchToFrontImage;
|
||||
} else if (mainImageIndex == 1) {
|
||||
accessibilityLongPressAction = R.string.switchToBackImage;
|
||||
} else if (mainImageIndex == 2) {
|
||||
accessibilityLongPressAction = R.string.switchToBarcode;
|
||||
} else {
|
||||
throw new IndexOutOfBoundsException("setMainImageAccessibility was out of range (action_long_click)");
|
||||
}
|
||||
|
||||
ViewCompat.replaceAccessibilityAction(
|
||||
binding.mainImage,
|
||||
AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_LONG_CLICK,
|
||||
getString(accessibilityLongPressAction),
|
||||
null
|
||||
);
|
||||
}
|
||||
|
||||
private void setMainImagePreviousNextButtons() {
|
||||
if (imageTypes.size() < 2) {
|
||||
binding.mainLeftButton.setVisibility(View.INVISIBLE);
|
||||
binding.mainRightButton.setVisibility(View.INVISIBLE);
|
||||
|
||||
binding.mainLeftButton.setOnClickListener(null);
|
||||
binding.mainRightButton.setOnClickListener(null);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Enable left button if we can go further left
|
||||
if (mainImageIndex > 0) {
|
||||
binding.mainLeftButton.setVisibility(View.VISIBLE);
|
||||
binding.mainLeftButton.setOnClickListener(view -> setMainImage(false, false));
|
||||
} else {
|
||||
binding.mainLeftButton.setVisibility(View.INVISIBLE);
|
||||
binding.mainLeftButton.setOnClickListener(null);
|
||||
}
|
||||
|
||||
// Enable right button if we can go further right
|
||||
if (mainImageIndex < (imageTypes.size() - 1)) {
|
||||
binding.mainRightButton.setVisibility(View.VISIBLE);
|
||||
binding.mainRightButton.setOnClickListener(view -> setMainImage(true, false));
|
||||
} else {
|
||||
binding.mainRightButton.setVisibility(View.INVISIBLE);
|
||||
binding.mainRightButton.setOnClickListener(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1133,37 +985,31 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
* by machines which offer no space to insert the complete device.
|
||||
*/
|
||||
private void setFullscreen(boolean enabled) {
|
||||
isFullscreen = enabled;
|
||||
ActionBar actionBar = getSupportActionBar();
|
||||
isFullscreen = enabled;
|
||||
|
||||
if (enabled && !imageTypes.isEmpty()) {
|
||||
Log.d(TAG, "Move into fullscreen");
|
||||
|
||||
barcodeRenderTarget = binding.fullscreenImage;
|
||||
|
||||
// Show only fullscreen view
|
||||
binding.container.setVisibility(View.GONE);
|
||||
binding.fullscreenLayout.setVisibility(View.VISIBLE);
|
||||
|
||||
drawMainImage(mainImageIndex, true, isFullscreen);
|
||||
|
||||
barcodeScaler.setProgress(loyaltyCard.zoomLevel);
|
||||
setCenterGuideline(loyaltyCard.zoomLevel);
|
||||
|
||||
// Hide maximize and show minimize button and scaler
|
||||
maximizeButton.setVisibility(View.GONE);
|
||||
minimizeButton.setVisibility(View.VISIBLE);
|
||||
barcodeScaler.setVisibility(View.VISIBLE);
|
||||
binding.barcodeScaler.setProgress(loyaltyCard.zoomLevel);
|
||||
setScalerGuideline(loyaltyCard.zoomLevel);
|
||||
|
||||
// Hide actionbar
|
||||
if (actionBar != null) {
|
||||
actionBar.hide();
|
||||
}
|
||||
|
||||
// Hide toolbars
|
||||
appBarLayout.setVisibility(View.INVISIBLE);
|
||||
iconImage.setVisibility(View.INVISIBLE);
|
||||
collapsingToolbarLayout.setVisibility(View.GONE);
|
||||
landscapeToolbar.setVisibility(View.GONE);
|
||||
|
||||
// Hide other UI elements
|
||||
cardIdFieldView.setVisibility(View.GONE);
|
||||
bottomAppBar.setVisibility(View.GONE);
|
||||
editButton.setVisibility(View.GONE);
|
||||
binding.bottomAppBar.setVisibility(View.GONE);
|
||||
binding.fabEdit.setVisibility(View.GONE);
|
||||
|
||||
// Set Android to fullscreen mode
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
@@ -1178,31 +1024,22 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
} else {
|
||||
Log.d(TAG, "Move out of fullscreen");
|
||||
|
||||
// Reset center guideline
|
||||
setCenterGuideline(100);
|
||||
barcodeRenderTarget = binding.mainImage;
|
||||
|
||||
// Show only regular view
|
||||
binding.container.setVisibility(View.VISIBLE);
|
||||
binding.fullscreenLayout.setVisibility(View.GONE);
|
||||
|
||||
drawMainImage(mainImageIndex, true, isFullscreen);
|
||||
|
||||
// Show maximize and hide minimize button and scaler
|
||||
maximizeButton.setVisibility(imageTypes.isEmpty() ? View.GONE : View.VISIBLE);
|
||||
|
||||
minimizeButton.setVisibility(View.GONE);
|
||||
barcodeScaler.setVisibility(View.GONE);
|
||||
|
||||
// Show actionbar
|
||||
if (actionBar != null) {
|
||||
actionBar.show();
|
||||
}
|
||||
|
||||
// Show appropriate toolbar
|
||||
appBarLayout.setVisibility(View.VISIBLE);
|
||||
setupOrientation();
|
||||
iconImage.setVisibility(View.VISIBLE);
|
||||
|
||||
// Show other UI elements
|
||||
cardIdFieldView.setVisibility(View.VISIBLE);
|
||||
editButton.setVisibility(View.VISIBLE);
|
||||
bottomAppBar.setVisibility(View.VISIBLE);
|
||||
binding.bottomAppBar.setVisibility(View.VISIBLE);
|
||||
binding.fabEdit.setVisibility(View.VISIBLE);
|
||||
|
||||
// Unset fullscreen mode
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
@@ -1216,7 +1053,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
}
|
||||
}
|
||||
|
||||
Log.d("setFullScreen", "Is full screen enabled? " + enabled + " Zoom Level = " + barcodeScaler.getProgress());
|
||||
Log.d("setFullScreen", "Is full screen enabled? " + enabled + " Zoom Level = " + binding.barcodeScaler.getProgress());
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
|
||||
@@ -50,7 +50,7 @@ import protect.card_locker.databinding.MainActivityBinding;
|
||||
import protect.card_locker.databinding.SortingOptionBinding;
|
||||
import protect.card_locker.preferences.SettingsActivity;
|
||||
|
||||
public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener, GestureDetector.OnGestureListener {
|
||||
public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener {
|
||||
private MainActivityBinding binding;
|
||||
private ArchiveActivityBinding archiveActivityBinding;
|
||||
private ContentMainBinding contentMainBinding;
|
||||
@@ -63,7 +63,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
private LoyaltyCardCursorAdapter mAdapter;
|
||||
private ActionMode mCurrentActionMode;
|
||||
private SearchView mSearchView;
|
||||
private GestureDetector mGestureDetector;
|
||||
private int mLoyaltyCardCount = 0;
|
||||
protected String mFilter = "";
|
||||
protected Object mGroup = null;
|
||||
@@ -282,19 +281,11 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
}
|
||||
});
|
||||
|
||||
mGestureDetector = new GestureDetector(this, this);
|
||||
|
||||
View.OnTouchListener gestureTouchListener = (v, event) -> mGestureDetector.onTouchEvent(event);
|
||||
|
||||
mHelpSection = contentMainBinding.helpSection;
|
||||
mNoMatchingCardsText = contentMainBinding.noMatchingCardsText;
|
||||
mNoGroupCardsText = contentMainBinding.noGroupCardsText;
|
||||
mCardList = contentMainBinding.list;
|
||||
|
||||
mNoMatchingCardsText.setOnTouchListener(gestureTouchListener);
|
||||
mCardList.setOnTouchListener(gestureTouchListener);
|
||||
mNoGroupCardsText.setOnTouchListener(gestureTouchListener);
|
||||
|
||||
mAdapter = new LoyaltyCardCursorAdapter(this, null, this);
|
||||
mCardList.setAdapter(mAdapter);
|
||||
registerForContextMenu(mCardList);
|
||||
@@ -768,83 +759,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
updateLoyaltyCardList(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onDown(MotionEvent e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowPress(MotionEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onSingleTapUp(MotionEvent e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLongPress(MotionEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean dispatchTouchEvent(MotionEvent ev) {
|
||||
mGestureDetector.onTouchEvent(ev);
|
||||
return super.dispatchTouchEvent(ev);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
|
||||
Log.d(TAG, "On fling");
|
||||
|
||||
// Don't swipe if we have too much vertical movement
|
||||
if (Math.abs(velocityY) > (0.75 * Math.abs(velocityX))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (groupsTabLayout.getTabCount() < 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Integer currentTab = groupsTabLayout.getSelectedTabPosition();
|
||||
Log.d("onFling", "Current Tab " + currentTab);
|
||||
// Swipe right
|
||||
if (velocityX < -150) {
|
||||
Log.d("onFling", "Right Swipe detected " + velocityX);
|
||||
Integer nextTab = currentTab + 1;
|
||||
|
||||
if (nextTab == groupsTabLayout.getTabCount()) {
|
||||
groupsTabLayout.selectTab(groupsTabLayout.getTabAt(0));
|
||||
} else {
|
||||
groupsTabLayout.selectTab(groupsTabLayout.getTabAt(nextTab));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Swipe left
|
||||
if (velocityX > 150) {
|
||||
Log.d("onFling", "Left Swipe detected " + velocityX);
|
||||
Integer nextTab = currentTab - 1;
|
||||
|
||||
if (nextTab < 0) {
|
||||
groupsTabLayout.selectTab(groupsTabLayout.getTabAt(groupsTabLayout.getTabCount() - 1));
|
||||
} else {
|
||||
groupsTabLayout.selectTab(groupsTabLayout.getTabAt(nextTab));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRowLongClicked(int inputPosition) {
|
||||
enableActionMode(inputPosition);
|
||||
|
||||
@@ -18,6 +18,9 @@ import android.provider.MediaStore;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.RawRes;
|
||||
@@ -599,4 +602,39 @@ public class Utils {
|
||||
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
public static void setIconOrTextWithBackground(Context context, LoyaltyCard loyaltyCard, ImageView backgroundOrIcon, TextView textWhenNoImage) {
|
||||
Bitmap icon = Utils.retrieveCardImage(context, loyaltyCard.id, ImageLocationType.icon);
|
||||
if (icon != null) {
|
||||
Log.d("onResume", "setting icon image");
|
||||
textWhenNoImage.setVisibility(View.GONE);
|
||||
|
||||
backgroundOrIcon.setImageBitmap(icon);
|
||||
backgroundOrIcon.setBackgroundColor(Color.TRANSPARENT);
|
||||
} else {
|
||||
textWhenNoImage.setVisibility(View.VISIBLE);
|
||||
|
||||
int headerColor = loyaltyCard.headerColor != null ? loyaltyCard.headerColor : LetterBitmap.getDefaultColor(context, loyaltyCard.store);
|
||||
|
||||
backgroundOrIcon.setImageBitmap(null);
|
||||
backgroundOrIcon.setBackgroundColor(headerColor);
|
||||
textWhenNoImage.setText(loyaltyCard.store);
|
||||
textWhenNoImage.setTextColor(Utils.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean installedFromGooglePlay(Context context) {
|
||||
try {
|
||||
String packageName = context.getPackageName();
|
||||
String installer;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
installer = context.getPackageManager().getInstallSourceInfo(packageName).getInstallingPackageName();
|
||||
} else {
|
||||
installer = context.getPackageManager().getInstallerPackageName(packageName);
|
||||
}
|
||||
return installer.equals("com.android.vending");
|
||||
} catch (Throwable ignored) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.StringReader;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
@@ -101,7 +100,7 @@ public class CatimaImporter implements Importer {
|
||||
}
|
||||
|
||||
parser.close();
|
||||
} catch (UncheckedIOException e) {
|
||||
} catch (IllegalArgumentException | IllegalStateException e) {
|
||||
throw new FormatException("Issue parsing CSV data", e);
|
||||
}
|
||||
}
|
||||
@@ -183,7 +182,7 @@ public class CatimaImporter implements Importer {
|
||||
throw new InterruptedException();
|
||||
}
|
||||
}
|
||||
} catch (UncheckedIOException e) {
|
||||
} catch (IllegalArgumentException | IllegalStateException e) {
|
||||
throw new FormatException("Issue parsing CSV data", e);
|
||||
} finally {
|
||||
groupParser.close();
|
||||
@@ -208,7 +207,7 @@ public class CatimaImporter implements Importer {
|
||||
throw new InterruptedException();
|
||||
}
|
||||
}
|
||||
} catch (UncheckedIOException e) {
|
||||
} catch (IllegalArgumentException | IllegalStateException e) {
|
||||
throw new FormatException("Issue parsing CSV data", e);
|
||||
} finally {
|
||||
cardParser.close();
|
||||
@@ -233,7 +232,7 @@ public class CatimaImporter implements Importer {
|
||||
throw new InterruptedException();
|
||||
}
|
||||
}
|
||||
} catch (UncheckedIOException e) {
|
||||
} catch (IllegalArgumentException | IllegalStateException e) {
|
||||
throw new FormatException("Issue parsing CSV data", e);
|
||||
} finally {
|
||||
cardGroupParser.close();
|
||||
|
||||
@@ -63,30 +63,6 @@ public class Settings {
|
||||
return AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
|
||||
}
|
||||
|
||||
public double getFontSizeScale() {
|
||||
return getInt(R.string.settings_key_max_font_size_scale, R.integer.settings_max_font_size_scale_pct) / 100.0;
|
||||
}
|
||||
|
||||
public int getSmallFont() {
|
||||
return 14;
|
||||
}
|
||||
|
||||
public int getMediumFont() {
|
||||
return 28;
|
||||
}
|
||||
|
||||
public int getLargeFont() {
|
||||
return 40;
|
||||
}
|
||||
|
||||
public int getFontSizeMin(int fontSize) {
|
||||
return (int) (Math.round(fontSize / 2.0) - 1);
|
||||
}
|
||||
|
||||
public int getFontSizeMax(int fontSize) {
|
||||
return (int) Math.round(fontSize * getFontSizeScale());
|
||||
}
|
||||
|
||||
public boolean useMaxBrightnessDisplayingBarcode() {
|
||||
return getBoolean(R.string.settings_key_display_barcode_max_brightness, true);
|
||||
}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="oval" android:useLevel="true"
|
||||
android:dither="true">
|
||||
|
||||
<size android:height="12dip" android:width="12dip"/>
|
||||
|
||||
<solid android:color="@android:color/white"/>
|
||||
</shape>
|
||||
24
app/src/main/res/drawable/dialog_bg_monet.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<layer-list xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape>
|
||||
<solid android:color="?attr/colorSurface" />
|
||||
<corners
|
||||
android:bottomLeftRadius="28dp"
|
||||
android:bottomRightRadius="28dp"
|
||||
android:topLeftRadius="28dp"
|
||||
android:topRightRadius="28dp" />
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
<shape>
|
||||
<solid android:color="@color/m3_popupmenu_overlay_color"
|
||||
tools:ignore="PrivateResource" />
|
||||
<corners
|
||||
android:bottomLeftRadius="28dp"
|
||||
android:bottomRightRadius="28dp"
|
||||
android:topLeftRadius="28dp"
|
||||
android:topRightRadius="28dp" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -1,4 +1,4 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
<vector android:height="24dp" android:tint="?attr/colorControlNormal"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M15.41,7.41L14,6l-6,6 6,6 1.41,-1.41L10.83,12z"/>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
<vector android:height="24dp" android:tint="?attr/colorControlNormal"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M10,6L8.59,7.41 13.17,12l-4.58,4.59L10,18l6,-6z"/>
|
||||
|
||||
10
app/src/main/res/drawable/ic_baseline_expand_more_24.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M16.59,8.59L12,13.17 7.41,8.59 6,10l6,6 6,-6z"/>
|
||||
</vector>
|
||||
5
app/src/main/res/drawable/ic_starred.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="?attr/colorControlNormal"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/>
|
||||
</vector>
|
||||
5
app/src/main/res/drawable/ic_unstarred.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="?attr/colorControlNormal"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M22,9.24l-7.19,-0.62L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21 12,17.27 18.18,21l-1.63,-7.03L22,9.24zM12,15.4l-3.76,2.27 1,-4.28 -3.32,-2.88 4.38,-0.38L12,6.1l1.71,4.04 4.38,0.38 -3.32,2.88 1,4.28L12,15.4z"/>
|
||||
</vector>
|
||||
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="oval" android:useLevel="true"
|
||||
android:dither="true">
|
||||
|
||||
<size android:height="8dip" android:width="8dip"/>
|
||||
|
||||
<solid android:color="@android:color/white"/>
|
||||
</shape>
|
||||
@@ -271,6 +271,36 @@
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/donate"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/donate_main"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:padding="2dp"
|
||||
android:text="@string/donate"
|
||||
android:textSize="18sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:importantForAccessibility="no"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:text="@string/arrow"
|
||||
android:textSize="20sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/rate"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -9,8 +9,7 @@
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="4dp">
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:id="@+id/icon_layout"
|
||||
@@ -19,12 +18,11 @@
|
||||
android:outlineProvider="none"
|
||||
app:cardCornerRadius="8dp"
|
||||
app:strokeWidth="0dp"
|
||||
app:layout_constraintBottom_toTopOf="@+id/store"
|
||||
app:layout_constraintBottom_toTopOf="@+id/note"
|
||||
app:layout_constraintDimensionRatio="85.6f:53.98f"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<ImageView
|
||||
android:importantForAccessibility="no"
|
||||
android:id="@+id/thumbnail"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
@@ -36,6 +34,20 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/thumbnail_text"
|
||||
android:importantForAccessibility="no"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:textStyle="bold"
|
||||
app:autoSizeTextType="uniform"
|
||||
app:autoSizeMinTextSize="12sp"
|
||||
app:autoSizeMaxTextSize="100sp"
|
||||
app:autoSizeStepGranularity="2sp"
|
||||
android:gravity="center"
|
||||
android:maxLines="1"
|
||||
android:layout_margin="20dp" />
|
||||
|
||||
<ImageView
|
||||
android:importantForAccessibility="no"
|
||||
android:id="@+id/selected_thumbnail"
|
||||
@@ -117,20 +129,6 @@
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/store"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginBottom="4dp"
|
||||
android:textAppearance="?attr/textAppearanceHeadline1"
|
||||
app:layout_constraintTop_toBottomOf="@+id/icon_layout"
|
||||
app:layout_constraintBottom_toTopOf="@+id/note"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
tools:text="Example store"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/note"
|
||||
android:layout_width="match_parent"
|
||||
@@ -142,7 +140,7 @@
|
||||
android:textColor="?android:attr/textColorSecondary"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"
|
||||
app:layout_constraintTop_toBottomOf="@+id/store"
|
||||
app:layout_constraintTop_toBottomOf="@+id/icon_layout"
|
||||
app:layout_constraintBottom_toTopOf="@+id/info_divider"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
|
||||
@@ -6,215 +6,196 @@
|
||||
android:id="@+id/coordinator_layout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:fitsSystemWindows="true">
|
||||
|
||||
android:fitsSystemWindows="false">
|
||||
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
android:id="@+id/app_bar_layout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@android:color/transparent"
|
||||
android:clipChildren="false"
|
||||
android:clipToPadding="false"
|
||||
android:fitsSystemWindows="true"
|
||||
android:weightSum="1.0">
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/toolbar_landscape"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="?actionBarSize"
|
||||
android:background="@android:color/transparent"
|
||||
android:fitsSystemWindows="false"
|
||||
android:paddingTop="0dp"
|
||||
android:visibility="gone"
|
||||
app:contentInsetStart="72.0dip"
|
||||
app:layout_collapseMode="pin" />
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
style="?attr/toolbarStyle" />
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
<com.google.android.material.appbar.CollapsingToolbarLayout
|
||||
android:id="@+id/collapsingToolbarLayout"
|
||||
android:layout_width="fill_parent"
|
||||
<LinearLayout
|
||||
android:id="@+id/container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="?attr/actionBarSize"
|
||||
android:layout_marginBottom="100dp"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginStart="0dp"
|
||||
android:layout_marginEnd="0dp">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/icon_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:clipChildren="false"
|
||||
android:clipToPadding="false"
|
||||
android:minHeight="56.0dip"
|
||||
app:contentScrim="?colorPrimary"
|
||||
app:expandedTitleGravity="top"
|
||||
app:expandedTitleMarginEnd="64dp"
|
||||
app:expandedTitleMarginStart="48dp">
|
||||
android:layout_marginBottom="20dp">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/storeName"
|
||||
<Space
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="0dp"/>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:id="@+id/icon_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
app:cardCornerRadius="8dp"
|
||||
android:layout_margin="10dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintDimensionRatio="85.6f:53.98f">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/icon_image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/icon_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:textStyle="bold"
|
||||
app:autoSizeTextType="uniform"
|
||||
app:autoSizeMinTextSize="12sp"
|
||||
app:autoSizeMaxTextSize="100sp"
|
||||
app:autoSizeStepGranularity="2sp"
|
||||
android:gravity="center"
|
||||
android:maxLines="1"
|
||||
android:layout_margin="20dp" />
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<Space
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="0dp"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="0dp"
|
||||
android:layout_marginEnd="0dp">
|
||||
|
||||
<!-- We don't use these buttons for Talkback -->
|
||||
<ImageButton
|
||||
android:importantForAccessibility="no"
|
||||
android:id="@+id/main_left_button"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="match_parent"
|
||||
app:srcCompat="@drawable/ic_baseline_chevron_left_24"
|
||||
android:background="@android:color/transparent"/>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/card_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:cardCornerRadius="8dp"
|
||||
android:layout_margin="10dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_margin="4dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/main_image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/card_id_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="@dimen/text_size_large"
|
||||
android:gravity="center"/>
|
||||
</LinearLayout>
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<!-- We don't use these buttons for Talkback -->
|
||||
<ImageButton
|
||||
android:importantForAccessibility="no"
|
||||
android:id="@+id/main_right_button"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="match_parent"
|
||||
app:srcCompat="@drawable/ic_baseline_chevron_right_24"
|
||||
android:background="@android:color/transparent"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/fullscreen_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ImageView
|
||||
android:importantForAccessibility="no"
|
||||
android:id="@+id/fullscreen_image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/scaler_guideline"/>
|
||||
|
||||
<androidx.constraintlayout.widget.Guideline
|
||||
android:id="@+id/scaler_guideline"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintGuide_percent="0.5"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toTopOf="@+id/fullscreen_button_minimize"
|
||||
android:layout_marginBottom="50dp"
|
||||
android:layout_marginStart="15.0dip"
|
||||
android:layout_marginEnd="15.0dip">
|
||||
|
||||
<TextView
|
||||
android:importantForAccessibility="no"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:text="@string/height"/>
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/barcode_scaler"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginTop="?actionBarSize"
|
||||
android:layout_marginBottom="?actionBarSize"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textAlignment="center"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="40sp"
|
||||
app:layout_collapseMode="parallax" />
|
||||
android:contentDescription="@string/setBarcodeHeight"
|
||||
android:max="100" />
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@id/toolbar"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="?actionBarSize"
|
||||
android:background="@android:color/transparent"
|
||||
app:contentInsetStart="72.0dip"
|
||||
app:layout_collapseMode="pin" />
|
||||
|
||||
</com.google.android.material.appbar.CollapsingToolbarLayout>
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/icon_image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_alignParentTop="true"
|
||||
android:fitsSystemWindows="true"
|
||||
android:scaleType="centerCrop"
|
||||
app:srcCompat="@drawable/ic_launcher_foreground"
|
||||
tools:ignore="ContentDescription" />
|
||||
|
||||
<FrameLayout
|
||||
android:clipChildren="false"
|
||||
android:clipToPadding="false"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/mainLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<androidx.constraintlayout.widget.Guideline
|
||||
android:id="@+id/centerGuideline"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintGuide_percent="0.5"/>
|
||||
|
||||
<androidx.constraintlayout.widget.Guideline
|
||||
android:id="@+id/scalerGuideline"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintGuide_percent="0.75"/>
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/maximizeButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginStart="15.0dip"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginEnd="15.0dip"
|
||||
android:background="?attr/colorPrimary"
|
||||
android:contentDescription="@string/moveBarcodeToTopOfScreen"
|
||||
android:padding="0dp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toTopOf="@+id/mainImage"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:srcCompat="@drawable/ic_baseline_arrow_drop_up_24"
|
||||
app:tint="?attr/colorOnPrimary"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/mainImage"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:orientation="horizontal"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
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_toBottomOf="@+id/maximizeButton"/>
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/minimizeButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginStart="15.0dip"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginEnd="15.0dip"
|
||||
android:background="?attr/colorPrimary"
|
||||
android:contentDescription="@string/moveBarcodeToCenterOfScreen"
|
||||
android:padding="0dp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/mainImage"
|
||||
app:srcCompat="@drawable/ic_baseline_arrow_drop_down_24"
|
||||
app:tint="?attr/colorOnPrimary"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/dotIndicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginStart="15.0dip"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginEnd="15.0dip"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/minimizeButton"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/barcodeScaler"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/inputPadding"
|
||||
android:layout_marginStart="15.0dip"
|
||||
android:layout_marginEnd="15.0dip"
|
||||
android:contentDescription="@string/set_scale"
|
||||
android:max="100"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/scalerGuideline" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/cardIdView"
|
||||
android:enabled="true"
|
||||
android:textIsSelectable="true"
|
||||
android:focusable="true"
|
||||
android:longClickable="true"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginLeft="10.0dip"
|
||||
android:layout_marginRight="10.0dip"
|
||||
android:paddingBottom="80dp"
|
||||
app:layout_constraintTop_toBottomOf="@+id/dotIndicator"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
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"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/drop_shadow_actionbar"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="5.0dip"
|
||||
android:layout_gravity="top"/>
|
||||
</FrameLayout>
|
||||
<ImageButton
|
||||
android:id="@+id/fullscreen_button_minimize"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_baseline_expand_more_24"
|
||||
android:tooltipText="@string/moveDown"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_marginBottom="50dp"
|
||||
android:background="@android:color/transparent"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<com.google.android.material.bottomappbar.BottomAppBar
|
||||
android:id="@+id/bottom_app_bar"
|
||||
@@ -230,7 +211,7 @@
|
||||
app:fabAlignmentMode="center">
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/button_previous"
|
||||
android:id="@+id/bottom_app_bar_previous_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="left"
|
||||
@@ -242,7 +223,7 @@
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/button_show_info"
|
||||
android:id="@+id/bottom_app_bar_info_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="start"
|
||||
@@ -254,7 +235,7 @@
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/button_next"
|
||||
android:id="@+id/bottom_app_bar_next_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="right"
|
||||
@@ -266,7 +247,7 @@
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/button_update_balance"
|
||||
android:id="@+id/bottom_app_bar_update_balance_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="end"
|
||||
|
||||
8
app/src/main/res/layout/preference_material_switch.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.google.android.material.materialswitch.MaterialSwitch xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/switchWidget"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:focusable="false" />
|
||||
@@ -4,13 +4,13 @@
|
||||
|
||||
<item
|
||||
android:id="@+id/action_share"
|
||||
android:icon="@drawable/ic_share_white"
|
||||
android:icon="@drawable/ic_share"
|
||||
android:title="@string/share"
|
||||
app:showAsAction="always"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_star_unstar"
|
||||
android:icon="@drawable/ic_unstarred_white"
|
||||
android:icon="@drawable/ic_unstarred"
|
||||
android:title="@string/star"
|
||||
app:showAsAction="always" />
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ Alexander Ivanov
|
||||
arshbeerSingh
|
||||
Denis Shilin
|
||||
Freddo espresso
|
||||
Projjal Moitra
|
||||
Silvério Santos
|
||||
Miha Frangež
|
||||
Arnis Jaundžeikars
|
||||
@@ -43,13 +44,13 @@ Katarzyna
|
||||
echo r"0xX4H" | rev
|
||||
Magnitudee
|
||||
Olivia (Zoe)
|
||||
Projjal Moitra
|
||||
betsythefc
|
||||
waffshappen
|
||||
(Cliff Heraldo)
|
||||
Robin
|
||||
Eric
|
||||
ati3
|
||||
(Cliff Heraldo)
|
||||
Balázs Meskó
|
||||
Evgeniy Khramov
|
||||
Jane Kong
|
||||
Jiri Grönroos
|
||||
@@ -80,7 +81,7 @@ francescbassas
|
||||
Jean-Luc Tibaux
|
||||
Jesse Davids
|
||||
Lukas Grassauer
|
||||
bittin
|
||||
Luna Jernberg
|
||||
Marnick L'Eau
|
||||
Michalis
|
||||
Michał
|
||||
@@ -103,10 +104,12 @@ ce i moa
|
||||
inesre
|
||||
lgasp
|
||||
phlostically
|
||||
pokeghost
|
||||
sal0max
|
||||
Ágata Leuck
|
||||
BmBKun
|
||||
Aditya Das
|
||||
asier123123131
|
||||
Kevin Sicong Jiang
|
||||
Tomer Ben-Rachel
|
||||
Tom Sawyer
|
||||
@@ -118,13 +121,13 @@ sNiXx
|
||||
Angela Enogieru
|
||||
AnimeshChatterjee1
|
||||
Ashish Yadav
|
||||
Asier
|
||||
Aya Elsaadany
|
||||
Biren
|
||||
Booc Sylvan
|
||||
Brage Nesteby Reitan
|
||||
Cap Amr Karam
|
||||
Carlo Maria Cuoghi Barbagli
|
||||
CherryMonster222
|
||||
Colgrave
|
||||
Csaba
|
||||
Mylou53
|
||||
danieluhrinyi
|
||||
@@ -132,6 +135,7 @@ Kasina Dheeraj
|
||||
Donno
|
||||
Flav
|
||||
Franciszek Stefan
|
||||
Gael Caraballo
|
||||
Grzegorz
|
||||
gneiss15
|
||||
Hamustra Scans
|
||||
@@ -139,7 +143,6 @@ HowITsDone
|
||||
Izzy
|
||||
Jacek
|
||||
Jacopo Gennaro Esposito
|
||||
Jasielprogramador
|
||||
Jean Mareilles
|
||||
Jean-Baptiste
|
||||
Kung-chih
|
||||
@@ -176,6 +179,7 @@ Samarth Asthan
|
||||
Shailendra Maurya
|
||||
Simone Dotto
|
||||
Subhashish Anand
|
||||
Subhradeep Bera
|
||||
SziaTomi
|
||||
Mehedi Hasan
|
||||
Titas Pažereckas
|
||||
@@ -191,6 +195,7 @@ diksha-2911
|
||||
gbonaspetti
|
||||
gittyboy-cell
|
||||
huang ivan
|
||||
liva
|
||||
lucafont2
|
||||
mtrmirez
|
||||
opsik
|
||||
|
||||
@@ -292,4 +292,9 @@
|
||||
<string name="updateBalanceHint">أدخل المبلغ</string>
|
||||
<string name="storageReadPermissionRequired">الصلاحيه للوصل للتخزين مطلوبة لهذا الاجراء</string>
|
||||
<string name="validFromDate">عربيه</string>
|
||||
<string name="cameraPermissionRequired">إذن للوصول إلى الكاميرا اللازمة لهذا الإجراء…</string>
|
||||
<string name="anyDate">أي تاريخ</string>
|
||||
<string name="chooseValidFromDate">اختر صالح من التاريخ</string>
|
||||
<string name="validFromSentence">صالح من:<xliff:g>%s</xliff:g></string>
|
||||
<string name="height">الطول:</string>
|
||||
</resources>
|
||||
@@ -268,4 +268,13 @@
|
||||
<string name="anyDate">Без значение от датата</string>
|
||||
<string name="validFromSentence">Валидна от: <xliff:g>%s</xliff:g></string>
|
||||
<string name="chooseValidFromDate">Определена дата</string>
|
||||
<string name="height">Височина:</string>
|
||||
<string name="switchToFrontImage">Показване на предната страна</string>
|
||||
<string name="switchToBackImage">Показване на задната страна</string>
|
||||
<string name="switchToBarcode">Показване на щрихкода</string>
|
||||
<string name="openImageInGallery">Отваряне на изображението в приложението галерия</string>
|
||||
<string name="openFrontImageInGalleryApp">Отваряне на изображението на предната страна в приложението галерия</string>
|
||||
<string name="openBackImageInGalleryApp">Отваряне на изображението на задната страна в приложението галерия</string>
|
||||
<string name="setBarcodeHeight">Задаване на височина на щрихкода</string>
|
||||
<string name="donate">Даряване</string>
|
||||
</resources>
|
||||
@@ -197,4 +197,75 @@
|
||||
<string name="app_loyalty_card_keychain">আনুগত্য কার্ড কীচেন</string>
|
||||
<string name="privacy_policy">ব্যক্তিগত তথ্যের গোপনীয়তা নীতি</string>
|
||||
<string name="accept">গ্রহণ</string>
|
||||
<string name="failedToRetrieveImageFile">ছবি ফাইল পুনরুদ্ধার করতে ব্যর্থ হয়েছে</string>
|
||||
<string name="on_github">GitHub -এ</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">আমদানি করতে লয়্যালটি কার্ড কীচেন থেকে আপনার <i>LoyaltyCardKeychain.csv</i> এক্সপোর্ট নির্বাচন করুন।
|
||||
\nলয়্যালটি কার্ড কীচেনের আমদানি/রপ্তানি মেনু থেকে প্রথমে সেখানে রপ্তানি টিপে এটি তৈরি করুন।</string>
|
||||
<string name="selectColor">রঙ নির্বাচন করুন</string>
|
||||
<string name="unarchived">কার্ড সংরক্ষণাগারমুক্ত করা হয়েছে</string>
|
||||
<string name="archiveList">সংরক্ষণাগার</string>
|
||||
<string name="report_error">ভুল প্রতিবেদন</string>
|
||||
<string name="failedLaunchingPhotoPicker">একটি সমর্থিত গ্যালারি অ্যাপ খুঁজে পাওয়া যায়নি</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> card (<xliff:g id="archivedCount">%2$d</xliff:g> archived)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> cards (<xliff:g id="archivedCount">%2$d</xliff:g> archived)</item>
|
||||
</plurals>
|
||||
<string name="nextCard">পরবর্তী</string>
|
||||
<plurals name="viewArchivedCardsWithCount">
|
||||
<item quantity="one">সংরক্ষণাগার দেখুন (<xliff:g>%1$d</xliff:g> কার্ড)</item>
|
||||
<item quantity="other">সংরক্ষণাগার দেখুন (<xliff:g>%1$d</xliff:g> কার্ডগুলি)</item>
|
||||
</plurals>
|
||||
<string name="failedToOpenUrl">প্রথমে একটি ওয়েব ব্রাউজার ইন্সটল করুন</string>
|
||||
<string name="newBalanceSentence">নতুন ব্যালেন্স: <xliff:g>%s</xliff:g></string>
|
||||
<string name="chooseValidFromDate">তারিখ থেকে বৈধ নির্বাচন করুন</string>
|
||||
<string name="validFromSentence">এর থেকে বৈধ: <xliff:g>%s</xliff:g></string>
|
||||
<string name="version_history">সংস্করণ ইতিহাস</string>
|
||||
<string name="credits">ক্রেডিট</string>
|
||||
<string name="help_translate_this_app">এই অ্যাপটি অনুবাদ করতে সাহায্য করুন</string>
|
||||
<string name="showMoreInfo">তথ্য দেখান</string>
|
||||
<string name="app_contributors">এর দ্বারা সম্ভব হয়েছে: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="hideMoreInfo">তথ্য লুকান</string>
|
||||
<string name="importCards">কার্ড আমদানি করুন</string>
|
||||
<string name="sort_by_balance">ব্যালান্স</string>
|
||||
<string name="importFidmeMessage">FidMe থেকে আমদানি করতে আপনার <i>fidme-export-request-xxxxxx.zip</i> রপ্তানি নির্বাচন করুন এবং পরে বারকোডের ধরন ম্যানুয়ালি নির্বাচন করুন।
|
||||
\nআপনার FidMe প্রোফাইল থেকে ডেটা সুরক্ষা নির্বাচন করে এবং তারপর প্রথমে আমার ডেটা বের করুন টিপে এটি তৈরি করুন।</string>
|
||||
<string name="importCatimaMessage">ক্যাটিমা থেকে আমদানি করতে আপনার <i>catima.zip</i> রপ্তানি নির্বাচন করুন।
|
||||
\nঅন্য Catima অ্যাপের আমদানি/রপ্তানি মেনু থেকে প্রথমে সেখানে রপ্তানি টিপে এটি তৈরি করুন।</string>
|
||||
<string name="importStocardMessage">আমদানি করতে Stocard থেকে আপনার <i>***.zip</i> এক্সপোর্ট নির্বাচন করুন।
|
||||
\nআপনার ডেটা রপ্তানির জন্য জিজ্ঞাসা করে support@stocardapp.com ই-মেইল করে এটি পান।</string>
|
||||
<string name="importVoucherVaultMessage">আমদানি করতে ভাউচার ভল্ট থেকে আপনার <i>vouchervault.json</i> এক্সপোর্ট নির্বাচন করুন।
|
||||
\nপ্রথমে ভাউচার ভল্টে এক্সপোর্ট টিপে এটি তৈরি করুন।</string>
|
||||
<string name="settings_oled_dark">অন্ধকার থিমের জন্য খাঁটি কালো পটভূমি</string>
|
||||
<string name="setIcon">আইকন সেট করুন</string>
|
||||
<string name="settings_grey_theme">ধূসর</string>
|
||||
<string name="updateBalance">ব্যালেন্স আপডেট করুন</string>
|
||||
<string name="barcodeLongPressMessage">গ্যালারি অ্যাপে শুধুমাত্র ছবি খোলা যাবে</string>
|
||||
<string name="translate_platform">Weblate-এ</string>
|
||||
<string name="on_google_play">Google Play-তে</string>
|
||||
<string name="action_show_details">বিস্তারিত দেখাও</string>
|
||||
<string name="action_hide_details">আড়াল বিস্তারিত</string>
|
||||
<string name="shortcutSelectCard">একটি কার্ড নির্বাচন করুন</string>
|
||||
<string name="options">অপশন</string>
|
||||
<string name="starred">তারকাচিহ্নিত</string>
|
||||
<string name="set_scale">স্কেল সেট করুন</string>
|
||||
<string name="duplicateCard">নকল</string>
|
||||
<string name="include_if_asking_support">আপনি যদি সমর্থনের জন্য অনুরোধ করতে চান তবে নিম্নলিখিত তথ্যগুলি অন্তর্ভুক্ত করুন:</string>
|
||||
<string name="importFidme">FidMe থেকে আমদানি করুন</string>
|
||||
<string name="validFromDate">বৈধ হবে</string>
|
||||
<string name="anyDate">যেকোনো তারিখ</string>
|
||||
<string name="previousCard">আগে</string>
|
||||
<string name="exportPassword">আপনার রপ্তানি রক্ষা করার জন্য একটি পাসওয়ার্ড সেট করুন (ঐচ্ছিক)</string>
|
||||
<string name="exportPasswordHint">পাসওয়ার্ড লিখুন</string>
|
||||
<string name="license">লাইসেন্স</string>
|
||||
<string name="source_repository">Source Repository</string>
|
||||
<string name="and_data_usage">এবং ডেটা ব্যবহার</string>
|
||||
<string name="rate_this_app">এই অ্যাপ্লিকেশন রেট করুন</string>
|
||||
<string name="archive">সংরক্ষণ করুন</string>
|
||||
<string name="unarchive">সংরক্ষণাগারমুক্ত করুন</string>
|
||||
<string name="archived">কার্ড সংরক্ষণাগারভুক্ত</string>
|
||||
<string name="noUnarchivedCardsMessage">আর্কাইভ করা কোনো কার্ড নেই</string>
|
||||
<string name="welcome">Catima-তে স্বাগতম</string>
|
||||
<string name="updateBalanceTitle">আপনি কত খরচ করেছেন\?</string>
|
||||
<string name="updateBalanceHint">পরিমান লিখুন</string>
|
||||
<string name="currentBalanceSentence">বর্তমান ব্যালেন্স: <xliff:g>%s</xliff:g></string>
|
||||
</resources>
|
||||
@@ -13,4 +13,5 @@
|
||||
<string name="deleteTitle">Elimina la targeta</string>
|
||||
<string name="welcome">Benvingut a Catima</string>
|
||||
<string name="noGiftCards">Cliqueu el botó + més per afegir una targeta, o importeu-ne des del ⋮ menú.</string>
|
||||
<string name="photos">Fotos</string>
|
||||
</resources>
|
||||
@@ -275,4 +275,13 @@
|
||||
<string name="anyDate">Jakékoliv datum</string>
|
||||
<string name="chooseValidFromDate">Vyberte datum počátku platnosti</string>
|
||||
<string name="validFromSentence">Platnost od: <xliff:g>%s</xliff:g></string>
|
||||
<string name="height">Výška:</string>
|
||||
<string name="switchToFrontImage">Přepnout na přední obrázek</string>
|
||||
<string name="switchToBackImage">Přepnout na zadní obrázek</string>
|
||||
<string name="switchToBarcode">Přepnout na čárový kód</string>
|
||||
<string name="openFrontImageInGalleryApp">Otevřít přední obrázek v galerii</string>
|
||||
<string name="openImageInGallery">Otevřít obrázek v galerii</string>
|
||||
<string name="openBackImageInGalleryApp">Otevřít zadní obrázek v galerii</string>
|
||||
<string name="setBarcodeHeight">Nastavit výšku čárového kódu</string>
|
||||
<string name="donate">Přispět</string>
|
||||
</resources>
|
||||
@@ -275,4 +275,13 @@
|
||||
<string name="validFromDate">Válido desde</string>
|
||||
<string name="chooseValidFromDate">Elija una fecha válida desde</string>
|
||||
<string name="validFromSentence">Válido desde: <xliff:g>%s</xliff:g></string>
|
||||
<string name="height">Altura:</string>
|
||||
<string name="switchToFrontImage">Cambiar a imagen frontal</string>
|
||||
<string name="openFrontImageInGalleryApp">Abrir imagen frontal en la aplicación de la galería</string>
|
||||
<string name="openBackImageInGalleryApp">Abrir imagen trasera en la aplicación de la galería</string>
|
||||
<string name="setBarcodeHeight">Ajustar la altura del código de barras</string>
|
||||
<string name="donate">Donar</string>
|
||||
<string name="switchToBarcode">Cambiar a código de barras</string>
|
||||
<string name="openImageInGallery">Abrir imagen en la aplicación de la galería</string>
|
||||
<string name="switchToBackImage">Cambiar a imagen trasera</string>
|
||||
</resources>
|
||||
@@ -275,4 +275,13 @@
|
||||
<string name="validFromSentence">Valide à partir de : <xliff:g>%s</xliff:g></string>
|
||||
<string name="anyDate">N’importe quelle date</string>
|
||||
<string name="chooseValidFromDate">Choisissez la date de début de validité</string>
|
||||
<string name="height">Hauteur :</string>
|
||||
<string name="switchToFrontImage">Passer à l\'image avant</string>
|
||||
<string name="switchToBackImage">Passer à l\'image arrière</string>
|
||||
<string name="switchToBarcode">Passer au code barre</string>
|
||||
<string name="openImageInGallery">Ouvrir l\'image dans l\'application galerie</string>
|
||||
<string name="openFrontImageInGalleryApp">Ouvrir l\'image avant dans l\'application galerie</string>
|
||||
<string name="openBackImageInGalleryApp">Ouvrir l\'image arrière dans l\'application galerie</string>
|
||||
<string name="setBarcodeHeight">Définir la hauteur du code-barres</string>
|
||||
<string name="donate">Faire un don</string>
|
||||
</resources>
|
||||
@@ -1,83 +1,287 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="unstar">Ukloni iz favorita</string>
|
||||
<string name="action_search">Pretraživanje</string>
|
||||
<string name="action_search">Pretraži</string>
|
||||
<string name="save">Spremi</string>
|
||||
<string name="edit">Uredi</string>
|
||||
<string name="delete">Ukloni</string>
|
||||
<string name="confirm">Potvrdi</string>
|
||||
<string name="deleteTitle">Ukloni kartu</string>
|
||||
<string name="deleteTitle">Izbriši karticu</string>
|
||||
<string name="deleteConfirmation">Izbrisati ovu karticu zauvijek\?</string>
|
||||
<string name="copy_to_clipboard">Kopiraj ID u međuspremnik</string>
|
||||
<string name="share">Podijeli</string>
|
||||
<string name="sendLabel">Pošalji…</string>
|
||||
<string name="share">Dijeli</string>
|
||||
<string name="sendLabel">Pošalji …</string>
|
||||
<string name="editCardTitle">Uredi karticu</string>
|
||||
<string name="addCardTitle">Dodaj Kartu</string>
|
||||
<string name="scanCardBarcode">Skeniranje crtičnog koda kartice</string>
|
||||
<string name="cardShortcut">Oznaka karte</string>
|
||||
<string name="noCardsMessage">Najprije dodajte karticu</string>
|
||||
<string name="card_ids_copied">Kopirani ID kartice</string>
|
||||
<string name="addCardTitle">Dodaj karticu</string>
|
||||
<string name="scanCardBarcode">Snimi crtični kod kartice</string>
|
||||
<string name="cardShortcut">Prečac kartice</string>
|
||||
<string name="noCardsMessage">Najprije dodaj karticu</string>
|
||||
<string name="card_ids_copied">ID oznake su kopirane</string>
|
||||
<string name="noBarcode">Nema crtičnog koda</string>
|
||||
<string name="star">Dodaj u favorite</string>
|
||||
<string name="action_add">Dodaj</string>
|
||||
<string name="storeName">Ime</string>
|
||||
<string name="note">Napomena</string>
|
||||
<string name="noMatchingGiftCards">Nema rezultata. Pokušajte promijeniti pretraživanje.</string>
|
||||
<string name="noMatchingGiftCards">Nema rezultata. Pokušaj promijeniti pretragu.</string>
|
||||
<string name="cardId">ID kartice</string>
|
||||
<string name="barcodeType">Vrsta crtičnog koda</string>
|
||||
<string name="barcodeNoBarcode">Na ovoj kartici nema crtičnog koda</string>
|
||||
<string name="cancel">Poništi</string>
|
||||
<string name="noGiftCards">Pritisnite gumb + plus da biste dodali karticu ili ga najprije uvezite iz izbornika ⋮.</string>
|
||||
<string name="noStoreError">Ime nije uneseno</string>
|
||||
<string name="noCardExistsError">Nije moguće pronaći karticu</string>
|
||||
<string name="failedParsingImportUriError">Nije moguće analizirati uvoz URI</string>
|
||||
<string name="importExport">Uvoz / Izvoz</string>
|
||||
<string name="barcodeNoBarcode">Ne postoji crtični kod</string>
|
||||
<string name="cancel">Odustani</string>
|
||||
<string name="noGiftCards">Pritisni gumb + plus za dodavanje kartice ili uvezi putem izbornika ⋮.</string>
|
||||
<string name="noStoreError">Ime nije zadano</string>
|
||||
<string name="noCardExistsError">Nije bilo moguće pronaći tu karticu</string>
|
||||
<string name="failedParsingImportUriError">Nije bilo moguće obraditi URI uvoza</string>
|
||||
<string name="importExport">Uvoz/Izvoz</string>
|
||||
<string name="exportName">Izvoz</string>
|
||||
<string name="importExportHelp">Sigurnosno kopiranje kartica omogućuje vam da ih premjestite na drugi uređaj.</string>
|
||||
<string name="importExportHelp">Spremanje sigurnosnih kopija tvojih podataka omogućuje premještanje podataka na jedan drugi uređaj.</string>
|
||||
<string name="importSuccessfulTitle">Uvezeno</string>
|
||||
<string name="importFailedTitle">Nije moguće uvesti</string>
|
||||
<string name="importFailed">Nije moguće uvesti karte</string>
|
||||
<string name="importFailedTitle">Neuspio uvoz</string>
|
||||
<string name="importFailed">Nije bilo moguće izvršiti uvoz</string>
|
||||
<string name="exportSuccessfulTitle">Izvezeno</string>
|
||||
<string name="about">Oh</string>
|
||||
<string name="importOptionApplicationButton">Koristite drugu aplikaciju</string>
|
||||
<string name="barcode">Barkod</string>
|
||||
<string name="exportOptionExplanation">Podaci će biti zabilježeni na odabranom mjestu.</string>
|
||||
<string name="exportFailedTitle">Izvoz nije uspio</string>
|
||||
<string name="exporting">Opskrba…</string>
|
||||
<string name="importOptionFilesystemExplanation">Odaberite određenu datoteku iz datotečnog sustava.</string>
|
||||
<string name="importOptionApplicationTitle">Koristite drugu aplikaciju</string>
|
||||
<string name="about">Informacije</string>
|
||||
<string name="importOptionApplicationButton">Koristi jednu drugu aplikaciju</string>
|
||||
<string name="barcode">Crtični kod</string>
|
||||
<string name="exportOptionExplanation">Podaci će se zapisati u željeno mjesto.</string>
|
||||
<string name="exportFailedTitle">Neuspio izvoz</string>
|
||||
<string name="exporting">Izvoz …</string>
|
||||
<string name="importOptionFilesystemExplanation">Odaberi određenu datoteku iz datotečnog sustava.</string>
|
||||
<string name="importOptionApplicationTitle">Koristi jednu drugu aplikaciju</string>
|
||||
<string name="settings">Postavke</string>
|
||||
<string name="settings_dark_theme">Tamno</string>
|
||||
<string name="exportFailed">Nije moguće izvesti karte</string>
|
||||
<string name="importing">Uvoz…</string>
|
||||
<string name="settings_dark_theme">Tamna</string>
|
||||
<string name="exportFailed">Nije bilo moguće izvršiti izvoz</string>
|
||||
<string name="importing">Uvoz …</string>
|
||||
<string name="importOptionFilesystemTitle">Uvoz iz datotečnog sustava</string>
|
||||
<string name="importOptionFilesystemButton">Iz datotečnog sustava</string>
|
||||
<string name="importOptionApplicationExplanation">Koristite bilo koju aplikaciju ili omiljeni upravitelj datoteka za otvaranje datoteke.</string>
|
||||
<string name="importOptionApplicationExplanation">Za otvaranje datoteke koristi bilo koju aplikaciju ili tvoj omiljeni upravljač datoteka.</string>
|
||||
<string name="settings_theme">Tema</string>
|
||||
<string name="settings_system_theme">Sustav</string>
|
||||
<string name="settings_light_theme">Svjetlo</string>
|
||||
<string name="settings_light_theme">Svijetla</string>
|
||||
<string name="settings_max_font_size_scale">Maksimalna veličina fonta</string>
|
||||
<string name="settings_display_barcode_max_brightness">Osvijetlite izgled crtičnog koda</string>
|
||||
<string name="moveDown">Pomicanje prema dolje</string>
|
||||
<string name="addManually">Ručno unesite ID kartice</string>
|
||||
<string name="thumbnailDescription">Sličica za karticu</string>
|
||||
<string name="settings_display_barcode_max_brightness">Osvijetli prikaz crtičnog koda</string>
|
||||
<string name="moveDown">Pomakni prema dolje</string>
|
||||
<string name="addManually">Ručno upiši ID</string>
|
||||
<string name="thumbnailDescription">Sličica</string>
|
||||
<string name="starImage">Omiljena zvijezda</string>
|
||||
<string name="settings_category_title_ui">Korisničko sučelje</string>
|
||||
<string name="exportSuccessful">Izvezeni podaci o karti</string>
|
||||
<string name="settings_keep_screen_on">Držite zaslon uključen</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Spriječiti zaključavanje zaslona</string>
|
||||
<string name="intent_import_card_from_url_share_text">Želim podijeliti razglednicu s vama</string>
|
||||
<string name="importSuccessful">Uvezeni podaci o karti</string>
|
||||
<string name="enter_group_name">Unesite naziv grupe</string>
|
||||
<string name="exportSuccessful">Podaci su izvezeni</string>
|
||||
<string name="settings_keep_screen_on">Ostavi ekran uključen</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Spriječi zaključavanje ekrana</string>
|
||||
<string name="intent_import_card_from_url_share_text">Želim dijeliti karticu s tobom</string>
|
||||
<string name="importSuccessful">Podaci su uvezeni</string>
|
||||
<string name="enter_group_name">Upiši ime grupe</string>
|
||||
<string name="groups">Grupe</string>
|
||||
<string name="noGroups">Pritisnite gumb + plus da biste najprije dodali grupe za klasifikaciju.</string>
|
||||
<string name="noGroupCards">Ova grupa ne sadrži nikakve kartice</string>
|
||||
<string name="addFromImage">Odaberite sliku iz galerije</string>
|
||||
<string name="deleteConfirmationGroup">Izbriši grupu\?</string>
|
||||
<string name="failedOpeningFileManager">Najprije instalirajte upravitelj datoteka.</string>
|
||||
<string name="moveUp">Pomicanje gore</string>
|
||||
<string name="leaveWithoutSaveTitle">Izlaz</string>
|
||||
<string name="card">Karta</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Otići bez očuvanja\?</string>
|
||||
<string name="noGiftCardsGroup">Izradite neke kartice, a zatim ih dodijelite grupi ovdje.</string>
|
||||
<string name="noGroups">Pritisni gumb + plus za dodavanje grupe za kategoriziranje.</string>
|
||||
<string name="noGroupCards">Ova je grupa prazna</string>
|
||||
<string name="addFromImage">Odaberi sliku iz galerije</string>
|
||||
<string name="deleteConfirmationGroup">Izbrisati grupu\?</string>
|
||||
<string name="failedOpeningFileManager">Najprije instaliraj upravljač datoteka.</string>
|
||||
<string name="moveUp">Pomakni prema gore</string>
|
||||
<string name="leaveWithoutSaveTitle">Zatvori aplikaciju</string>
|
||||
<string name="card">Kartica</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Zatvoriti aplikaciju bez spremanja\?</string>
|
||||
<string name="noGiftCardsGroup">Stvori neke kartice, a zatim ih ovdje dodijeli grupi.</string>
|
||||
<plurals name="groupCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> kartica</item>
|
||||
<item quantity="few"><xliff:g>%d</xliff:g> kartice</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> kartica</item>
|
||||
</plurals>
|
||||
<string name="importStocardMessage">Odaberi tvoju iz Stocard izvezenu <i>***.zip</i> datoteku koju želiš uvesti.
|
||||
\nPošalji e-mail na support@stocardapp.com s molbom za izvoz tvojih podataka.</string>
|
||||
<string name="translate_platform">na platformi Weblate</string>
|
||||
<string name="editGroup">Uređivanje grupe: <xliff:g>%s</xliff:g></string>
|
||||
<string name="editBarcode">Uredi crtični kod</string>
|
||||
<string name="expiryDate">Datum isteka</string>
|
||||
<string name="never">Nikada</string>
|
||||
<string name="accept">Prihvati</string>
|
||||
<string name="importCatima">Uvezi iz Catima</string>
|
||||
<string name="importFidme">Uvezi iz FidMe</string>
|
||||
<string name="importStocard">Uvezi iz Stocard</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Odaberi tvoju iz LoyaltyCardKeychain izvezenu <i>LoyaltyCardKeychain.csv</i> datoteku koju želiš uvesti.
|
||||
\nStvori je putem izbornika „Uvoz/Izvoz” u aplikaciji LoyaltyCardKeychain i tamo najprije pritisni „Izvoz”.</string>
|
||||
<string name="updateBarcodeQuestionText">Promijenio/la si ID. Želiš li također aktualizirati crtični kod da koristi istu vrijednost\?</string>
|
||||
<string name="action_hide_details">Sakrij detalje</string>
|
||||
<string name="importCards">Uvezi kartice</string>
|
||||
<string name="selectColor">Odaberi boju</string>
|
||||
<string name="setIcon">Postavi ikonu</string>
|
||||
<string name="settings_catima_theme">Catima</string>
|
||||
<string name="settings_green_theme">Zelena</string>
|
||||
<string name="settings_grey_theme">Siva</string>
|
||||
<string name="sort_by_expiry">Istek</string>
|
||||
<string name="barcodeImageDescriptionWithType">Slika vrste crtičnog koda <xliff:g>%s</xliff:g></string>
|
||||
<string name="noCardIdError">ID nije zadan</string>
|
||||
<string name="importLoyaltyCardKeychain">Uvezi iz Loyalty Card Keychain</string>
|
||||
<string name="frontImageDescription">Prednja slika</string>
|
||||
<string name="exportPasswordHint">Upiši lozinku</string>
|
||||
<string name="turn_flashlight_on">Uključi svjetiljku</string>
|
||||
<string name="failedGeneratingShareURL">Nije bilo moguće generirati URL za dijeljenje. Prijavi ovaj problem.</string>
|
||||
<string name="turn_flashlight_off">Isključi svjetiljku</string>
|
||||
<string name="settings_locale">Jezik</string>
|
||||
<string name="settings_magenta_theme">Magenta</string>
|
||||
<string name="settings_violet_theme">Ljubičasta</string>
|
||||
<string name="settings_sky_blue_theme">Nebesko plava</string>
|
||||
<string name="sort">Razvrstaj</string>
|
||||
<string name="hideMoreInfo">Sakrij informacije</string>
|
||||
<string name="updateBalance">Aktualiziraj saldo</string>
|
||||
<string name="swipeToSwitchImages">Klizni prstom za mijenjanje slika, pritisni dugo za otvaranje slike u aplikaciji galerije</string>
|
||||
<string name="sort_by_balance">Saldo</string>
|
||||
<string name="sort_by">Redoslijed</string>
|
||||
<string name="version_history">Kronologija verzija</string>
|
||||
<string name="credits">Zasluge</string>
|
||||
<string name="and_data_usage">i korištenje podataka</string>
|
||||
<string name="rate_this_app">Ocijeni ovu aplikaciju</string>
|
||||
<string name="report_error">Prijavi greške</string>
|
||||
<string name="include_if_asking_support">Ako želiš zatražiti podršku, uključi sljedeće informacije:</string>
|
||||
<string name="options">Opcije</string>
|
||||
<string name="starred">Označeno</string>
|
||||
<string name="set_scale">Postavi veličinu</string>
|
||||
<string name="duplicateCard">Dupliciraj</string>
|
||||
<string name="archive">Arhiviraj</string>
|
||||
<string name="archived">Kartica je arhivirana</string>
|
||||
<string name="unarchived">Kartica je dearhivirana</string>
|
||||
<string name="failedLaunchingPhotoPicker">Nije bilo moguće pronaći aplikaciju za galeriju</string>
|
||||
<string name="archiveList">Arhiva</string>
|
||||
<string name="cameraPermissionDeniedTitle">Nije bilo moguće pristupiti kameri</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">Za snimanje crtičnih kodova Catima treba pristup tvojoj kameri. Dodirni ovdje za mijenjanje postavki dozvola.</string>
|
||||
<string name="app_libraries">Libre biblioteke trećih strana: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="selectBarcodeTitle">Biranje crtičnog koda</string>
|
||||
<string name="copy_to_clipboard_toast">ID je kopiran u međuspremnik</string>
|
||||
<string name="enterBarcodeInstructions">Upiši ID i dolje odaberi vrstu crtičnog koda ili „Ne postoji crtični kod”.</string>
|
||||
<string name="settings_portrait_orientation">Okomito</string>
|
||||
<string name="settings_lock_on_opening_orientation">Zaključaj na položaj koji se koristi prilikom otvaranja kartice</string>
|
||||
<string name="group_edit">Uredi grupu</string>
|
||||
<string name="group_name_already_in_use">Ime grupe se već koristi</string>
|
||||
<string name="noBarcodeFound">Nijedan crtični kod nije pronađen</string>
|
||||
<string name="balance">Saldo</string>
|
||||
<string name="chooseImportType">Uvezi podatke iz</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<string name="parsingBalanceFailed">Čini se da <xliff:g>%s</xliff:g> nije ispravni saldo.</string>
|
||||
<string name="privacy_policy_popup_text">Obavijest o politici privatnosti (obavezna za neke trgovine aplikacija):
|
||||
\n
|
||||
\nPODACI SE UOPĆE NE PRIKUPLJAJU, što svatko može potvrditi budući da je naša aplikacija libre softver.</string>
|
||||
<string name="importCatimaMessage">Odaberi tvoju iz Catima izvezenu <i>catima.zip</i> datoteku koju želiš uvesti.
|
||||
\nStvori je putem izbornika „Uvoz/Izvoz” jedne druge Catima aplikacije i tamo najprije pritisni „Izvoz”.</string>
|
||||
<string name="height">Visina:</string>
|
||||
<string name="switchToFrontImage">Prebaci na prednju sliku</string>
|
||||
<string name="switchToBackImage">Prebaci na stražnju sliku</string>
|
||||
<string name="switchToBarcode">Prebaci na crtični kod</string>
|
||||
<string name="openImageInGallery">Otvori sliku u aplikaciji galerije</string>
|
||||
<string name="openFrontImageInGalleryApp">Otvori prednju sliku u aplikaciji galerije</string>
|
||||
<string name="openBackImageInGalleryApp">Otvori stražnju sliku u aplikaciji galerije</string>
|
||||
<string name="setBarcodeHeight">Postavi visinu crtičnog koda</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> odabrana</item>
|
||||
<item quantity="few"><xliff:g>%d</xliff:g> odabrane</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> odabrano</item>
|
||||
</plurals>
|
||||
<string name="validFromDate">Vrijedi od</string>
|
||||
<string name="chooseValidFromDate">Odaberi datum od kada kartica vrijedi</string>
|
||||
<string name="anyDate">Bilo koji datum</string>
|
||||
<string name="validFromSentence">Vrijedi od: <xliff:g>%s</xliff:g></string>
|
||||
<string name="photos">Slike</string>
|
||||
<string name="ok">U redu</string>
|
||||
<string name="app_copyright_old">Zasnovano na Loyalty Card Keychain
|
||||
\nautorsko pravo © 2016. – 2020. Branden Archer</string>
|
||||
<string name="settings_system_locale">Sustav</string>
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> bod</item>
|
||||
<item quantity="few"><xliff:g>%s</xliff:g> boda</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> bodova</item>
|
||||
</plurals>
|
||||
<string name="donate">Doniraj</string>
|
||||
<string name="storageReadPermissionRequired">Za ovu radnju je potrebna dozvola za čitanje spremljenih podataka …</string>
|
||||
<string name="cameraPermissionRequired">Za ovu radnju je potrebna dozvola za pristup kameri …</string>
|
||||
<string name="app_license">Copylefted libre softver, GPLv3+ licenca</string>
|
||||
<string name="settings_card_orientation">Položaj crtičnog koda</string>
|
||||
<string name="settings_follow_system_orientation">Slijedi sustav</string>
|
||||
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="importFidmeMessage">Odaberi tvoju iz FidMe izvezenu <i>idme-export-request-xxxxxx.zip</i> datoteku koju želiš uvesti i ručno odaberi vste crtičnog koda nakon toga.
|
||||
\nStvori je putem tvog FidMe profila i tamo najprije odaberi „Zaštita podataka” a zatim pritisni „Dekomprimiraj moje podatke”.</string>
|
||||
<string name="importVoucherVaultMessage">Odaberi tvoju iz Voucher Vault izvezenu <i>vouchervault.json</i> datoteku koju želiš uvesti.
|
||||
\nStvori je u aplikaciji Voucher Vault i tamo najprije pritisni „Izvoz”.</string>
|
||||
<string name="settings_pink_theme">Ružičasta</string>
|
||||
<string name="settings_blue_theme">Plava</string>
|
||||
<string name="failedToRetrieveImageFile">Neuspjelo dohvaćanje slikovne datoteke</string>
|
||||
<string name="license">Licenca</string>
|
||||
<string name="barcodeLongPressMessage">U aplikaciji galerije se mogu otvoriiti samo slike</string>
|
||||
<string name="source_repository">Izvorni repozitorij</string>
|
||||
<string name="on_github">na GitHubu</string>
|
||||
<string name="on_google_play">na stranici Google Play</string>
|
||||
<string name="unarchive">Dearhiviraj</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> kartica (<xliff:g id="archivedCount">%2$d</xliff:g> arhivirana)</item>
|
||||
<item quantity="few"><xliff:g>%1$d</xliff:g> kartice (<xliff:g id="archivedCount">%2$d</xliff:g> arhivirane)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> kartica (<xliff:g id="archivedCount">%2$d</xliff:g> arhivirano)</item>
|
||||
</plurals>
|
||||
<string name="help_translate_this_app">Pomogni prevoditi ovu aplikaciju</string>
|
||||
<string name="welcome">Pozdrav u Catima</string>
|
||||
<string name="currentBalanceSentence">Aktualni saldo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="newBalanceSentence">Novi saldo: <xliff:g>%s</xliff:g></string>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one">Izbriši <xliff:g>%d</xliff:g> karticu</item>
|
||||
<item quantity="few">Izbriši <xliff:g>%d</xliff:g> kartice</item>
|
||||
<item quantity="other">Izbriši <xliff:g>%d</xliff:g> kartica</item>
|
||||
</plurals>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">Izbrisati ovu <xliff:g>%d</xliff:g> karticu zauvijek\?</item>
|
||||
<item quantity="few">Izbrisati ove <xliff:g>%d</xliff:g> kartice zauvijek\?</item>
|
||||
<item quantity="other">Izbrisati ovih <xliff:g>%d</xliff:g> kartica zauvijek\?</item>
|
||||
</plurals>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019. – <xliff:g>%d.</xliff:g> Sylvia van Os</string>
|
||||
<string name="debug_version_fmt">Verzija: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Informacije revizije: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="app_resources">Libre resursi trećih strana: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="settings_landscape_orientation">Vodoravno</string>
|
||||
<string name="group_name_is_empty">Ime grupe ne smije biti prazno</string>
|
||||
<string name="group_updated">Grupa je aktualizirana</string>
|
||||
<string name="all">Sve</string>
|
||||
<string name="groupsList">Grupe: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentence">Isteče: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentenceExpired">Isteklo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="chooseExpiryDate">Odaberi datum isteka</string>
|
||||
<string name="moveBarcodeToTopOfScreen">Premjesti crtični kod na vrh ekrana</string>
|
||||
<string name="moveBarcodeToCenterOfScreen">Centriraj crtični kod na ekranu</string>
|
||||
<string name="errorReadingImage">Nije bilo moguće učitati sliku</string>
|
||||
<string name="currency">Valuta</string>
|
||||
<string name="points">Bodovi</string>
|
||||
<string name="privacy_policy">Politika privatnosti</string>
|
||||
<string name="importVoucherVault">Uvezi iz Voucher Vault</string>
|
||||
<string name="barcodeId">Vrijednost crtičnog koda</string>
|
||||
<string name="sameAsCardId">Ista kao ID</string>
|
||||
<string name="setBarcodeId">Postavi vrijednost crtičnog koda</string>
|
||||
<string name="unsupportedBarcodeType">Ova se vrsta crtičnog koda još ne može prikazati. Možda će se podržati u novijoj verziji aplikacije.</string>
|
||||
<string name="wrongValueForBarcodeType">Vrijednost nije valjana za odabranu vrstu crtičnog koda</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">ID oznke su kopirane u međuspremnik</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Želim dijeliti neke kartice s tobom</string>
|
||||
<string name="backImageDescription">Stražnja slika</string>
|
||||
<string name="setFrontImage">Postavi prednju sliku</string>
|
||||
<string name="setBackImage">Postavi stražnju sliku</string>
|
||||
<string name="removeImage">Ukloni sliku</string>
|
||||
<string name="takePhoto">Uslikaj fotografiju</string>
|
||||
<string name="updateBarcodeQuestionTitle">Aktualizirati vrijednost crtičnog koda\?</string>
|
||||
<string name="yes">Da</string>
|
||||
<string name="no">Ne</string>
|
||||
<string name="passwordRequired">Upiši lozinku</string>
|
||||
<string name="exportPassword">Postavi lozinku za zaštitu tvog izvoza (opcionalno)</string>
|
||||
<string name="settings_oled_dark">Potpuno crna pozadina za tamnu temu</string>
|
||||
<string name="settings_theme_color">Boja teme</string>
|
||||
<string name="settings_brown_theme">Smeđa</string>
|
||||
<string name="app_contributors">Omogućuje: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="showMoreInfo">Prikaži informacije</string>
|
||||
<string name="sort_by_name">Ime</string>
|
||||
<string name="sort_by_most_recently_used">Nedavno korišteno</string>
|
||||
<string name="reverse">… u obrnutom redoslijedu</string>
|
||||
<string name="action_show_details">Prikaži detalje</string>
|
||||
<string name="shortcutSelectCard">Odaberi karticu</string>
|
||||
<string name="noUnarchivedCardsMessage">Ne postoje nearhivirane kartice</string>
|
||||
<string name="previousCard">Prethodna</string>
|
||||
<string name="nextCard">Sljedeća</string>
|
||||
<string name="updateBalanceTitle">Koliko si potrošio/la\?</string>
|
||||
<string name="updateBalanceHint">Upiši iznos</string>
|
||||
<string name="about_title_fmt">Informaije o <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="failedToOpenUrl">Najprije instaliraj web preglednik</string>
|
||||
<plurals name="viewArchivedCardsWithCount">
|
||||
<item quantity="one">Pogledaj arhivu (<xliff:g>%1$d</xliff:g> kartica)</item>
|
||||
<item quantity="few">Pogledaj arhivu (<xliff:g>%1$d</xliff:g> kartice)</item>
|
||||
<item quantity="other">Pogledaj arhivu (<xliff:g>%1$d</xliff:g> kartica)</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -4,96 +4,96 @@
|
||||
<string name="action_add">Hozzáadás</string>
|
||||
<string name="action_search">Keresés</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> kiválasztott</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> kiválasztottak</item>
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> kiválasztva</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> kiválasztva</item>
|
||||
</plurals>
|
||||
<string name="noCardsMessage">Először adjon hozzá egy kártyát</string>
|
||||
<string name="noGiftCardsGroup">Hozzon létre kártyákat, és rendelje hozzá a megfelelő csoporthoz.</string>
|
||||
<string name="noMatchingGiftCards">Nincs eredmény. Próbálja módosítani a keresést.</string>
|
||||
<string name="noMatchingGiftCards">Nincs találaat. Próbálja módosítani a keresést.</string>
|
||||
<string name="storeName">Név</string>
|
||||
<string name="note">Feljegyzés</string>
|
||||
<string name="cardId">Kártya azonosító</string>
|
||||
<string name="barcodeType">Vonalkód típus</string>
|
||||
<string name="cardId">Kártyaazonosító</string>
|
||||
<string name="barcodeType">Vonalkód típusa</string>
|
||||
<string name="barcodeNoBarcode">Nincs vonalkód</string>
|
||||
<string name="noBarcode">Nincs vonalkód</string>
|
||||
<string name="star">Kedvencekhez adás</string>
|
||||
<string name="unstar">Kivétel a kedvencek közül</string>
|
||||
<string name="star">Hozzáadás a kedvencekhez</string>
|
||||
<string name="unstar">Eltávolítás a kedvencekből</string>
|
||||
<string name="cancel">Mégse</string>
|
||||
<string name="save">Mentés</string>
|
||||
<string name="edit">Szerkesztés</string>
|
||||
<string name="delete">Törlés</string>
|
||||
<string name="confirm">Jóváhagy</string>
|
||||
<string name="confirm">Jóváhagyás</string>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one">Törölje az <xliff:g>%d</xliff:g> kártyát</item>
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> kártya törlése</item>
|
||||
<item quantity="other">Törölje az <xliff:g>%d</xliff:g> kártyákat</item>
|
||||
</plurals>
|
||||
<string name="deleteConfirmation">Véglegesen törli a kártyát\?</string>
|
||||
<string name="ok">Rendben</string>
|
||||
<string name="copy_to_clipboard">Azonosító másolása a vágólapra</string>
|
||||
<string name="copy_to_clipboard">Azonosító vágólapra másolása</string>
|
||||
<string name="share">Megosztás</string>
|
||||
<string name="sendLabel">Küldés…</string>
|
||||
<string name="editCardTitle">Kártya szerkesztése</string>
|
||||
<string name="addCardTitle">Kártya hozzáadása</string>
|
||||
<string name="scanCardBarcode">Vonalkód szkennelése</string>
|
||||
<string name="scanCardBarcode">Vonalkód leolvasása</string>
|
||||
<string name="cardShortcut">Kártya parancsikon</string>
|
||||
<string name="noStoreError">Nincs név megadva</string>
|
||||
<string name="failedParsingImportUriError">Nem elemezhető az importált URI</string>
|
||||
<string name="importExport">Import/Export</string>
|
||||
<string name="exportName">Export</string>
|
||||
<string name="importExportHelp">Az adataid mentése lehetővé teszi, hogy egy másik eszközre feltöltsd.</string>
|
||||
<string name="failedParsingImportUriError">Az importálási URI nem értelmezhető</string>
|
||||
<string name="importExport">Importálás/exportálás</string>
|
||||
<string name="exportName">Exportálás</string>
|
||||
<string name="importExportHelp">Az adatok mentése lehetővé teszi, hogy egy másik eszközre helyezze át.</string>
|
||||
<string name="importSuccessfulTitle">Importálva</string>
|
||||
<string name="importFailedTitle">Importálás meghiúsult</string>
|
||||
<string name="importFailed">Importálás nem hajtható végre</string>
|
||||
<string name="importFailedTitle">Az importálás sikertelen</string>
|
||||
<string name="importFailed">Nem sikerült az importálás végrehajtása</string>
|
||||
<string name="exportSuccessfulTitle">Exportálva</string>
|
||||
<string name="exportFailedTitle">Exportálás meghiúsult</string>
|
||||
<string name="exportFailedTitle">Az exportálás sikertelen</string>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">Véglegesen törli a <xliff:g>%d</xliff:g> kártyát\?</item>
|
||||
<item quantity="other">Véglegesen törli a <xliff:g>%d</xliff:g> kártyákat\?</item>
|
||||
<item quantity="one">Véglegesen töröl <xliff:g>%d</xliff:g> kártyát\?</item>
|
||||
<item quantity="other">Véglegesen töröl <xliff:g>%d</xliff:g> kártyát\?</item>
|
||||
</plurals>
|
||||
<string name="deleteTitle">Kártya törlése</string>
|
||||
<string name="card_ids_copied">Azonosító(k) másolása</string>
|
||||
<string name="barcodeImageDescriptionWithType"><xliff:g>%s</xliff:g> vonalkód képe</string>
|
||||
<string name="card_ids_copied">Azonosító(k) másolva</string>
|
||||
<string name="barcodeImageDescriptionWithType">A(z) <xliff:g>%s</xliff:g> vonalkód képe</string>
|
||||
<string name="noCardIdError">Nincs azonosító megadva</string>
|
||||
<string name="noCardExistsError">Kártya nem található</string>
|
||||
<string name="importStocardMessage">Válassza ki a <i>***.zip</i> Stocard exportot.
|
||||
\nAdatinak exportját kérheti e-mailben a support@stocardapp.com címre írva.</string>
|
||||
<string name="importVoucherVault">Importálás Voucher Vault-ból</string>
|
||||
<string name="wrongValueForBarcodeType">Ez az érték meg megfelelő a vonalkód típushoz</string>
|
||||
<string name="noCardExistsError">A kártya nem található</string>
|
||||
<string name="importStocardMessage">Válassza ki az importálandó <i>***.zip</i> Stocard export fájlt.
|
||||
\nAz adatainak exportálását a support@stocardapp.com címre írt levélben kérheti.</string>
|
||||
<string name="importVoucherVault">Importálás a Voucher Vaultból</string>
|
||||
<string name="wrongValueForBarcodeType">Ez az érték meg megfelelő a kiválasztott vonalkódtípushoz</string>
|
||||
<string name="settings_green_theme">Zöld</string>
|
||||
<string name="setBackImage">Hátlapi kép beállítása</string>
|
||||
<string name="no">Nem</string>
|
||||
<string name="passwordRequired">Kérem írja be a kódot</string>
|
||||
<string name="passwordRequired">Adja meg a jelszót</string>
|
||||
<string name="settings_catima_theme">Catima</string>
|
||||
<string name="exportPasswordHint">Kód beírása</string>
|
||||
<string name="failedGeneratingShareURL">Nem lehetett megosztható címet generálni. Kérem jelentse ezt.</string>
|
||||
<string name="failedGeneratingShareURL">Nem lehetett megosztható webcímet előállítani. Kérjük, ezt jelentse.</string>
|
||||
<string name="settings_theme_color">Téma színe</string>
|
||||
<string name="settings_grey_theme">Szürke</string>
|
||||
<string name="sort">Rendez</string>
|
||||
<string name="on_google_play">Google Play-en</string>
|
||||
<string name="action_show_details">Részletek mutatása</string>
|
||||
<string name="sort">Rendezés</string>
|
||||
<string name="on_google_play">a Google Playen</string>
|
||||
<string name="action_show_details">Részletek megjelenítése</string>
|
||||
<string name="action_hide_details">Részletek elrejtése</string>
|
||||
<string name="and_data_usage">és adat használat</string>
|
||||
<string name="translate_platform">Weblate-en</string>
|
||||
<string name="and_data_usage">és adathasználat</string>
|
||||
<string name="translate_platform">a Weblate-en</string>
|
||||
<string name="sort_by_name">Név</string>
|
||||
<string name="sort_by_most_recently_used">Legutóbb használt</string>
|
||||
<string name="sort_by_expiry">Lejárat</string>
|
||||
<string name="rate_this_app">Értékelje az appot</string>
|
||||
<string name="exportFailed">Exportálás sikertelen</string>
|
||||
<string name="rate_this_app">Értékelje az alkalmazást</string>
|
||||
<string name="exportFailed">Nem sikerült az exportálás végrehajtása</string>
|
||||
<string name="importing">Importálás…</string>
|
||||
<string name="exporting">Exportálás…</string>
|
||||
<string name="exportOptionExplanation">Az adatokat a kiválasztott helyre fogjuk menteni.</string>
|
||||
<string name="exportOptionExplanation">Az adatok a kiválasztott helyre lesznek mentve.</string>
|
||||
<string name="importOptionFilesystemTitle">Importálás fájlrendszerből</string>
|
||||
<string name="importOptionFilesystemButton">A fájlrendszerből</string>
|
||||
<string name="importOptionApplicationTitle">Másik app használata</string>
|
||||
<string name="importOptionApplicationExplanation">Használjon egy tetszőleges appot, vagy kedvenc fájl menedzserét a fájl megnyitásához.</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Szerzői Jog © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<string name="app_license">Copyleft-elt gáttalan szoftver, GPLv3+ licenszelve</string>
|
||||
<string name="about_title_fmt"><xliff:g id="app_name">%s</xliff:g> névjegye</string>
|
||||
<string name="importOptionApplicationTitle">Másik alkalmazás használata</string>
|
||||
<string name="importOptionApplicationExplanation">A fájl megnyitásához használjon egy tetszőleges alkalmazást, vagy a kedvenc fájlkezelőjét.</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<string name="app_license">Copyleft licencű szabad szoftver, GPLv3+ alatt közzétéve</string>
|
||||
<string name="about_title_fmt">A <xliff:g id="app_name">%s</xliff:g> névjegye</string>
|
||||
<string name="debug_version_fmt">Verzió: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Revíziós információ: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="app_resources">Gáttalan külsős források: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="app_resources">Szabad külső erőforrások: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="selectBarcodeTitle">Vonalkód kiválasztása</string>
|
||||
<string name="enterBarcodeInstructions">Írja be az azonosítót, majd válasszon egy vonalkódot, vagy a \"Nincs vonalkód\" opciót.</string>
|
||||
<string name="enterBarcodeInstructions">Írja be az azonosítót, majd válasszon egy vonalkódot, vagy a „Nincs vonalkód” lehetőséget.</string>
|
||||
<string name="copy_to_clipboard_toast">Azonosító vágólapra másolva</string>
|
||||
<string name="starImage">Kedvencek csillag</string>
|
||||
<string name="settings">Beállítások</string>
|
||||
@@ -101,26 +101,26 @@
|
||||
<string name="settings_theme">Téma</string>
|
||||
<string name="settings_system_theme">Rendszer</string>
|
||||
<string name="settings_light_theme">Világos</string>
|
||||
<string name="settings_max_font_size_scale">Max. betű méret</string>
|
||||
<string name="settings_display_barcode_max_brightness">Fényes vonalkód nézet</string>
|
||||
<string name="settings_keep_screen_on">Képernyő bekapcsolva marad</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Képernyő zárólás megakadályozása</string>
|
||||
<string name="settings_max_font_size_scale">Legnagyobb betűméret</string>
|
||||
<string name="settings_display_barcode_max_brightness">Vonalkód nézet világosítása</string>
|
||||
<string name="settings_keep_screen_on">A képernyő bekapcsolva tartása</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Képernyőzárólás megakadályozása</string>
|
||||
<string name="intent_import_card_from_url_share_text">Meg akarok veled osztani egy kártyát</string>
|
||||
<string name="importSuccessful">Adat importálva</string>
|
||||
<string name="exportSuccessful">Adat exportálva</string>
|
||||
<string name="importSuccessful">Adatok importálva</string>
|
||||
<string name="exportSuccessful">Adatok exportálva</string>
|
||||
<string name="enter_group_name">Adja meg a csoport nevét</string>
|
||||
<string name="groups">Csoportok</string>
|
||||
<string name="group_edit">Csoport szerkesztése</string>
|
||||
<string name="group_name_is_empty">Csoport név nem lehet üres</string>
|
||||
<string name="failedOpeningFileManager">Telepítsen egy fájl menedzsert.</string>
|
||||
<string name="moveUp">Felfelé mozgatás</string>
|
||||
<string name="moveDown">Lefelé mozgatás</string>
|
||||
<string name="group_name_is_empty">A csoportnév nem lehet üres</string>
|
||||
<string name="failedOpeningFileManager">Előbb telepítsen egy fájlkezelőt.</string>
|
||||
<string name="moveUp">Mozgatás felfelé</string>
|
||||
<string name="moveDown">Mozgatás lefelé</string>
|
||||
<string name="leaveWithoutSaveTitle">Kilépés</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Kilépés mentés nélkül\?</string>
|
||||
<string name="addManually">Azonosító manuális beírása</string>
|
||||
<string name="addManually">Azonosító kézi beírása</string>
|
||||
<string name="addFromImage">Kép kiválasztása a galériából</string>
|
||||
<string name="editGroup">Csoportok szerkesztése: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentence">Érvényes: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentence">Lejárat: <xliff:g>%s</xliff:g></string>
|
||||
<string name="balanceSentence">Egyenleg: <xliff:g>%s</xliff:g></string>
|
||||
<string name="card">Kártya</string>
|
||||
<string name="barcode">Vonalkód</string>
|
||||
@@ -133,25 +133,25 @@
|
||||
<string name="noBarcodeFound">Nem található vonalkód</string>
|
||||
<string name="errorReadingImage">Nem lehet olvasni a képet</string>
|
||||
<string name="balance">Egyenleg</string>
|
||||
<string name="currency">Valuta</string>
|
||||
<string name="currency">Pénznem</string>
|
||||
<string name="points">Pontok</string>
|
||||
<string name="parsingBalanceFailed">A <xliff:g>%s</xliff:g> nem tűnik valós egyenlegnek.</string>
|
||||
<string name="app_loyalty_card_keychain">Hűségkártya kulcstartó</string>
|
||||
<string name="privacy_policy">Adatvédelmi Szabályzat</string>
|
||||
<string name="accept">Elfogad</string>
|
||||
<string name="importCatima">Importálás Catimából</string>
|
||||
<string name="importFidme">Importálás FidMe-ből</string>
|
||||
<string name="importLoyaltyCardKeychain">Importálás a Loyalty Card Keychain-ből</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Válassza ki a Loyalty Card Keychain-ból importálni kívánt <i>LoyaltyCardKeychain.csv</i> export fájlt.
|
||||
\nLétrehozhatja az Import/Export menüből ha a Loyalty Card Keychain-ben rányom az Exportra.</string>
|
||||
<string name="importStocard">Importálás Stocard-ból</string>
|
||||
<string name="importVoucherVaultMessage">Válassza ki a <i>vouchervault.json</i> Voucher Vault exportját.
|
||||
\nLétrehozhatja az Export-ra nyomva a Voucher Vault-ban.</string>
|
||||
<string name="barcodeId">Vonalkód érték</string>
|
||||
<string name="parsingBalanceFailed">A(z) <xliff:g>%s</xliff:g> nem tűnik valós egyenlegnek.</string>
|
||||
<string name="app_loyalty_card_keychain">Hűségkártya-kulcstartó</string>
|
||||
<string name="privacy_policy">Adatvédelmi irányelvek</string>
|
||||
<string name="accept">Elfogadás</string>
|
||||
<string name="importCatima">Importálás a Catimából</string>
|
||||
<string name="importFidme">Importálás a FidMeből</string>
|
||||
<string name="importLoyaltyCardKeychain">Importálás a Loyalty Card Keychainből</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Válassza ki a Loyalty Card Keychainből importálandó <i>LoyaltyCardKeychain.csv</i> export fájlt.
|
||||
\nEzt hozza létre a Loyalty Card Keychainben az Importálás/exportálás menüben, az Exportálás megnyomásával.</string>
|
||||
<string name="importStocard">Importálás a Stocardból</string>
|
||||
<string name="importVoucherVaultMessage">Válassza ki az importálandó <i>vouchervault.json</i> Voucher Vault export fájlt.
|
||||
\nEzt hozza létre a Voucher Vaultban az Exportálás megnyomásával.</string>
|
||||
<string name="barcodeId">Vonalkód értéke</string>
|
||||
<string name="sameAsCardId">Ugyanaz, mint az azonosító</string>
|
||||
<string name="setBarcodeId">Vonalkód érték beállítása</string>
|
||||
<string name="unsupportedBarcodeType">Ez a vonalkód típus még nem megjeleníthető. Feltehetően támogatva lesz egy későbbi verzióban.</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">Azonosítók a vágólapra másolva</string>
|
||||
<string name="setBarcodeId">Vonalkód értékének beállítása</string>
|
||||
<string name="unsupportedBarcodeType">Ez a vonalkódtípus még nem jeleníthető meg. Lehet, hogy támogatott lesz az alkalmazás egy későbbi verziójában.</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">Az azonosítók a vágólapra másolva</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Meg akarok veled osztani pár kártyát</string>
|
||||
<string name="frontImageDescription">Előlapi kép</string>
|
||||
<string name="backImageDescription">Hátlapi kép</string>
|
||||
@@ -159,10 +159,10 @@
|
||||
<string name="setFrontImage">Előlapi kép beállítása</string>
|
||||
<string name="removeImage">Kép eltávolítása</string>
|
||||
<string name="takePhoto">Fénykép készítése</string>
|
||||
<string name="updateBarcodeQuestionTitle">Vonalkód érték frissítése\?</string>
|
||||
<string name="updateBarcodeQuestionText">Megváltoztatta az azonosító. Meg akarja ennek megfelelően változtatni a vonalkód értéket is\?</string>
|
||||
<string name="updateBarcodeQuestionTitle">Vonalkódérték frissítése\?</string>
|
||||
<string name="updateBarcodeQuestionText">Megváltoztatta az azonosítót. Ennek megfelelően megváltoztatja a vonalkód értéket is\?</string>
|
||||
<string name="yes">Igen</string>
|
||||
<string name="exportPassword">Írjon be egy jelszót az export védelme érdekében (opcionális)</string>
|
||||
<string name="exportPassword">Állítson be egy jelszót az export védelme érdekében (nem kötelező)</string>
|
||||
<string name="turn_flashlight_on">Zseblámpa bekapcsolása</string>
|
||||
<string name="turn_flashlight_off">Zseblámpa kikapcsolása</string>
|
||||
<string name="settings_locale">Nyelv</string>
|
||||
@@ -170,102 +170,111 @@
|
||||
<string name="selectColor">Szín kiválasztása</string>
|
||||
<string name="setIcon">Ikon beállítása</string>
|
||||
<string name="settings_pink_theme">Rózsaszín</string>
|
||||
<string name="settings_magenta_theme">Magenta</string>
|
||||
<string name="settings_violet_theme">Ibolyaszínű</string>
|
||||
<string name="settings_magenta_theme">Bíbor</string>
|
||||
<string name="settings_violet_theme">Ibolya</string>
|
||||
<string name="settings_blue_theme">Kék</string>
|
||||
<string name="settings_sky_blue_theme">Égszínkék</string>
|
||||
<string name="settings_brown_theme">Barna</string>
|
||||
<string name="app_contributors">Lehetővé tette: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="showMoreInfo">Infó mutatása</string>
|
||||
<string name="hideMoreInfo">Infó elrejtése</string>
|
||||
<string name="swipeToSwitchImages">Csúsztassa ujját a képek váltásához, tartsa lenyomva a kép megnyitásához a Galéria alkalmazásban</string>
|
||||
<string name="app_contributors">Lehetővé tették: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="showMoreInfo">Információk megjelenítése</string>
|
||||
<string name="hideMoreInfo">Információk elrejtése</string>
|
||||
<string name="swipeToSwitchImages">Legyintsen a képek váltásához, tartsa lenyomva a kép megnyitásához a galéria alkalmazásban</string>
|
||||
<string name="sort_by_balance">Egyenleg</string>
|
||||
<string name="reverse">...fordított sorrendben</string>
|
||||
<string name="sort_by">Rendezés mint</string>
|
||||
<string name="version_history">Verzió történet</string>
|
||||
<string name="reverse">…fordított sorrendben</string>
|
||||
<string name="sort_by">Rendezés:</string>
|
||||
<string name="version_history">Verziótörténet</string>
|
||||
<string name="credits">Köszönet</string>
|
||||
<string name="help_translate_this_app">Segítsen lefordítani az appot</string>
|
||||
<string name="license">Licensz</string>
|
||||
<string name="source_repository">Forrás repó</string>
|
||||
<string name="on_github">GitBub-on</string>
|
||||
<string name="report_error">Hiba Jelentése</string>
|
||||
<string name="help_translate_this_app">Segítsen lefordítani az alkalmazást</string>
|
||||
<string name="license">Licenc</string>
|
||||
<string name="source_repository">Forráskódtároló</string>
|
||||
<string name="on_github">a GitHubon</string>
|
||||
<string name="report_error">Hiba jelentése</string>
|
||||
<string name="shortcutSelectCard">Válasszon egy kártyát</string>
|
||||
<string name="options">Beállítások</string>
|
||||
<string name="starred">Csillagozva</string>
|
||||
<string name="set_scale">Méret választása</string>
|
||||
<string name="set_scale">Méret beállítása</string>
|
||||
<plurals name="groupCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> kártya</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> kártyák</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> kártya</item>
|
||||
</plurals>
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> pont</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> pontok</item>
|
||||
</plurals>
|
||||
<string name="chooseImportType">Adat importálása innen</string>
|
||||
<string name="chooseImportType">Adatok importálása innen</string>
|
||||
<string name="thumbnailDescription">Előkép</string>
|
||||
<string name="importOptionFilesystemExplanation">Válassza ki a kívánt fájlt a fájlrendszerből.</string>
|
||||
<string name="importOptionApplicationButton">Másik app használata</string>
|
||||
<string name="importOptionApplicationButton">Másik alkalmazás használata</string>
|
||||
<string name="about">Névjegy</string>
|
||||
<string name="app_copyright_old">Készült a Loyalty Card Keychain alapján
|
||||
\nszerzői jog © 2016–2020 Branden Archer</string>
|
||||
<string name="app_libraries">Gáttalan külsős mappák: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
\nCopyright © 2016–2020 Branden Archer</string>
|
||||
<string name="app_libraries">Szabad külső programkönyvtárak: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="settings_dark_theme">Sötét</string>
|
||||
<string name="deleteConfirmationGroup">Csoport törlése\?</string>
|
||||
<string name="noGroups">Nyomja meg a + gombot a csoportok kategorizálásához.</string>
|
||||
<string name="group_name_already_in_use">Csoport név már létezik</string>
|
||||
<string name="all">Mind</string>
|
||||
<string name="group_name_already_in_use">A csoportnév már létezik</string>
|
||||
<string name="all">Összes</string>
|
||||
<string name="noGroupCards">Ez a csoport üres</string>
|
||||
<string name="group_updated">Csoport frissítve</string>
|
||||
<string name="expiryStateSentenceExpired">Lejárt: <xliff:g>%s</xliff:g></string>
|
||||
<string name="groupsList">Csoportok: <xliff:g>%s</xliff:g></string>
|
||||
<string name="importCatimaMessage">Válassza ki a <i>catima.zip</i>-jét az importáláshoz.
|
||||
\nLétrehozhatja az Import/Export menüből az Exportálást megnyomva egy másik Catima appban.</string>
|
||||
<string name="privacy_policy_popup_text">Adatvédelmi szabály értesítő (némely app bolt kéri):
|
||||
<string name="importCatimaMessage">Válassza ki az exportált <i>catima.zip</i> fájlt az importáláshoz.
|
||||
\nLétrehozhatja az Importálás/exportálás menüből az Exportálást megnyomva egy másik Catima alkalmazásban.</string>
|
||||
<string name="privacy_policy_popup_text">Adatvédelmi irányelvek nyilatkozata (némely alkalmazásbolt kéri):
|
||||
\n
|
||||
\nSEMMILYEN ADATGYŰJTÉS NINCS, amit bárki ellenőrizhet, lévén hogy az app gáttalan szoftver.</string>
|
||||
<string name="importFidmeMessage">Válassza ki a <i>fidme-export-request-xxxxxx.zip</i> nevű FidMe exportot, majd importálja be és válassza a manuális vonalkód opciót utána.
|
||||
\nEzt a FidMe-ben megtalálja a profiljában az Adat Védelem résznél ha rányom az Adataim Kivonata linkre.</string>
|
||||
<string name="settings_card_orientation">Vonalkód tájolás</string>
|
||||
\nSEMMILYEN ADAT NEM KERÜL GYŰJTÉSRE, amit bárki ellenőrizhet, hiszen az alkalmazás szabad szoftver.</string>
|
||||
<string name="importFidmeMessage">Válassza ki a FidMeből exportált <i>fidme-export-request-xxxxxx.zip</i> fájl majd importálja be, és utána válassza a kézi vonalkódbeírást.
|
||||
\nEzt hozza létre a FidMe-profiljában az Adatvédelem rész választásával, majd a Saját adatok kinyerése megnyomásával.</string>
|
||||
<string name="settings_card_orientation">Vonalkód tájolása</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> kártya (<xliff:g id="archivedCount">%2$d</xliff:g> archiválva)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> kártyák (<xliff:g id="archivedCount">%2$d</xliff:g> archiválva)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> kártya (<xliff:g id="archivedCount">%2$d</xliff:g> archiválva)</item>
|
||||
</plurals>
|
||||
<string name="noUnarchivedCardsMessage">Nincs archiválatlan kártya</string>
|
||||
<string name="failedToOpenUrl">Először telepíts egy webböngészőt</string>
|
||||
<string name="failedLaunchingPhotoPicker">Nem található támogatott képnézegető app</string>
|
||||
<string name="failedToOpenUrl">Először telepítsen egy webböngészőt</string>
|
||||
<string name="failedLaunchingPhotoPicker">Nem található támogatott galéria alkalmazás</string>
|
||||
<string name="previousCard">Előző</string>
|
||||
<string name="nextCard">Következő</string>
|
||||
<string name="settings_portrait_orientation">Álló</string>
|
||||
<string name="settings_follow_system_orientation">Rendszer követése</string>
|
||||
<string name="settings_lock_on_opening_orientation">A használt tájolás zárolása kártya használatakor</string>
|
||||
<string name="settings_lock_on_opening_orientation">A használt tájolás zárolása a kártya megnyitásakor</string>
|
||||
<string name="settings_landscape_orientation">Fekvő</string>
|
||||
<string name="settings_oled_dark">Tiszta fekete háttér sötét témánál</string>
|
||||
<string name="include_if_asking_support">Ha támogatást szeretnél igénybe venni, oszd meg az alábbi információkat:</string>
|
||||
<string name="archive">Archivál</string>
|
||||
<string name="settings_oled_dark">Teljesen fekete háttér a sötét témánál</string>
|
||||
<string name="include_if_asking_support">Ha támogatás akar kérni, ossza meg az alábbi információkat:</string>
|
||||
<string name="archive">Archiválás</string>
|
||||
<string name="unarchive">Archiválás megszüntetése</string>
|
||||
<string name="archived">Kártya archiválása</string>
|
||||
<string name="archiveList">Archivál</string>
|
||||
<string name="duplicateCard">Másolat</string>
|
||||
<string name="archived">Kártya archiválva</string>
|
||||
<string name="archiveList">Archívum</string>
|
||||
<string name="duplicateCard">Klónozás</string>
|
||||
<string name="currentBalanceSentence">Jelenlegi egyenleg: <xliff:g>%s</xliff:g></string>
|
||||
<string name="updateBalanceHint">Adja meg az összeget</string>
|
||||
<string name="importCards">Kártyák importálása</string>
|
||||
<string name="updateBalanceTitle">Mennyit költöttél\?</string>
|
||||
<string name="updateBalanceTitle">Mennyit költött\?</string>
|
||||
<string name="newBalanceSentence">Új egyenleg: <xliff:g>%s</xliff:g></string>
|
||||
<string name="cameraPermissionDeniedTitle">Nem sikerült hozzáférni a kamerához</string>
|
||||
<string name="failedToRetrieveImageFile">Nem sikerült lekérni a képfájlt</string>
|
||||
<string name="barcodeLongPressMessage">Csak képek nyithatók meg a galéria alkalmazásban</string>
|
||||
<string name="unarchived">Archiválatlan kártya</string>
|
||||
<string name="welcome">Üdvözöljük Catimában</string>
|
||||
<string name="unarchived">Kártya archiválása megszüntetve</string>
|
||||
<string name="welcome">Üdvözöljük a Catimában</string>
|
||||
<plurals name="viewArchivedCardsWithCount">
|
||||
<item quantity="one">Archívum megtekintése (<xliff:g>%1$d</xliff:g> kártya)</item>
|
||||
<item quantity="other">Archívum megtekintése (<xliff:g>%1$d</xliff:g> kártyák)</item>
|
||||
<item quantity="other">Archívum megtekintése (<xliff:g>%1$d</xliff:g> kártya)</item>
|
||||
</plurals>
|
||||
<string name="updateBalance">Egyenleg frissítése</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">A vonalkódok beolvasásához a Catimának hozzá kell férnie a kamerához. Koppintson ide az engedélybeállítások módosításához.</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">A vonalkódok leolvasásához a Catimának hozzá kell férnie a kamerához. Koppintson ide az engedélybeállítások módosításához.</string>
|
||||
<string name="validFromDate">Érvényesség kezdete</string>
|
||||
<string name="anyDate">Bármely dátum</string>
|
||||
<string name="chooseValidFromDate">Válassza ki az érvényesség kezdeti dátumot</string>
|
||||
<string name="chooseValidFromDate">Válassza ki az érvényesség kezdetét</string>
|
||||
<string name="validFromSentence">Érvényesség kezdete: <xliff:g>%s</xliff:g></string>
|
||||
<string name="storageReadPermissionRequired">A művelethez tároló olvasási engedély szükséges…</string>
|
||||
<string name="cameraPermissionRequired">A kamerához való hozzáférés engedélye szükséges ehhez a művelethez…</string>
|
||||
<string name="storageReadPermissionRequired">A művelethez tárolóolvasási engedély szükséges…</string>
|
||||
<string name="cameraPermissionRequired">A művelethez a kamera-hozzáférési engedély szükséges…</string>
|
||||
<string name="height">Magasság:</string>
|
||||
<string name="switchToFrontImage">Elölnézeti képre váltás</string>
|
||||
<string name="switchToBackImage">Hátulnézeti képre váltás</string>
|
||||
<string name="switchToBarcode">Vonalkódra váltás</string>
|
||||
<string name="donate">Adományozás</string>
|
||||
<string name="openImageInGallery">Kép megnyitása a galéria alkalmazásban</string>
|
||||
<string name="openBackImageInGalleryApp">Hátulnézeti kép megnyitása a galéria alkalmazásban</string>
|
||||
<string name="openFrontImageInGalleryApp">Elölnézeti kép megnyitása a galéria alkalmazásban</string>
|
||||
<string name="setBarcodeHeight">Vonalkód magasságának megadása</string>
|
||||
</resources>
|
||||
@@ -263,4 +263,13 @@
|
||||
\n<xliff:g>%s</xliff:g></string>
|
||||
<string name="anyDate">Kapan pun</string>
|
||||
<string name="chooseValidFromDate">Pilih valid dari tanggal</string>
|
||||
<string name="height">Tinggi:</string>
|
||||
<string name="switchToFrontImage">Ubah ke depan gambar</string>
|
||||
<string name="switchToBackImage">Ubah ke belakang gambar</string>
|
||||
<string name="switchToBarcode">Ubah ke kode batang</string>
|
||||
<string name="openImageInGallery">Buka gambar dari galeri app</string>
|
||||
<string name="openFrontImageInGalleryApp">Buka gambar didepan di galeri app</string>
|
||||
<string name="openBackImageInGalleryApp">Buka gambar dibelakang di galeri app</string>
|
||||
<string name="setBarcodeHeight">Atur tinggi kode batang</string>
|
||||
<string name="donate">Donasi</string>
|
||||
</resources>
|
||||
@@ -275,4 +275,13 @@
|
||||
<string name="chooseValidFromDate">Scegli la data di validità</string>
|
||||
<string name="validFromSentence">Valido da: <xliff:g>%s</xliff:g></string>
|
||||
<string name="anyDate">Qualsiasi data</string>
|
||||
<string name="height">Altezza:</string>
|
||||
<string name="switchToFrontImage">Passa all\'immagine frontale</string>
|
||||
<string name="switchToBackImage">Passa all\'immagine dietro</string>
|
||||
<string name="switchToBarcode">Passa al codice a barre</string>
|
||||
<string name="openFrontImageInGalleryApp">Apri l\'immagine frontale nell\'app Galleria</string>
|
||||
<string name="donate">Dona</string>
|
||||
<string name="openImageInGallery">Apri l\'immagine nell\'app Galleria</string>
|
||||
<string name="openBackImageInGalleryApp">Apri l\'immagine posteriore nell\'app Galleria</string>
|
||||
<string name="setBarcodeHeight">Imposta l\'altezza del codice a barre</string>
|
||||
</resources>
|
||||
@@ -271,4 +271,17 @@
|
||||
<string name="importCards">Importuoti korteles</string>
|
||||
<string name="storageReadPermissionRequired">Šio veiksmo atlikimui reikalinga prieiga prie saugyklos…</string>
|
||||
<string name="cameraPermissionRequired">Šio veiksmo atlikimui reikalinga prieiga prie kameros…</string>
|
||||
<string name="openBackImageInGalleryApp">Atidarykite galinį vaizdą galerijos programėlėje</string>
|
||||
<string name="setBarcodeHeight">Nustatyti brūkšninio kodo aukštį</string>
|
||||
<string name="validFromDate">Galioja nuo</string>
|
||||
<string name="anyDate">Bet kuri data</string>
|
||||
<string name="chooseValidFromDate">Pasirinkite datą, galiojančią nuo</string>
|
||||
<string name="validFromSentence">Galioja nuo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="switchToBackImage">Perjungti į galinį vaizdą</string>
|
||||
<string name="switchToBarcode">Perjungti į brūkšninį kodą</string>
|
||||
<string name="openImageInGallery">Atidarykite paveikslėlį galerijos programėlėje</string>
|
||||
<string name="height">Aukštis:</string>
|
||||
<string name="switchToFrontImage">Perjungti į priekinį vaizdą</string>
|
||||
<string name="openFrontImageInGalleryApp">Atidarykite priekinį vaizdą galerijos programėlėje</string>
|
||||
<string name="donate">Aukoti</string>
|
||||
</resources>
|
||||
@@ -2,7 +2,7 @@
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="action_search">Meklēt</string>
|
||||
<string name="action_add">Pievienot</string>
|
||||
<string name="noGiftCards">Noklikšķiniet uz pogas + plus, lai pievienotu karti, vai vispirms importējiet dažus no ⋮ izvēlnes.</string>
|
||||
<string name="noGiftCards">Noklikšķiniet uz pogas + plus, lai pievienotu karti, vai vispirms importējiet no ⋮ izvēlnes.</string>
|
||||
<string name="noMatchingGiftCards">Nav rezultātu. Mēģiniet mainīt meklējamo tekstu.</string>
|
||||
<string name="storeName">Nosaukums</string>
|
||||
<string name="note">Piezīme</string>
|
||||
@@ -256,4 +256,14 @@
|
||||
</plurals>
|
||||
<string name="failedToOpenUrl">Vispirms nepieciešams uzstādīt interneta pārlūku</string>
|
||||
<string name="welcome">Laipni lūgti Catima</string>
|
||||
</resources>
|
||||
<string name="cameraPermissionRequired">Ir nepieciešama pieeja kamerai lai veiktu šo darbību</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">Lai skanētu svītrkods, Catima ir nepieciešama pieeja jūsu kamerai. Nospied šeit lai nomainītu atļaujas iestatījumus.</string>
|
||||
<string name="cameraPermissionDeniedTitle">Nevar pievienieties kamerai</string>
|
||||
<string name="updateBalance">Atjaunināta bilance</string>
|
||||
<string name="updateBalanceTitle">Cik daudz Tu iztērēji\?</string>
|
||||
<string name="updateBalanceHint">Ievadi summu</string>
|
||||
<string name="currentBalanceSentence">Šābrīža bilance: <xliff:g>%s</xliff:g></string>
|
||||
<string name="newBalanceSentence">Jauna bilance: <xliff:g>%s</xliff:g></string>
|
||||
<string name="storageReadPermissionRequired">Atļauja lasīt noliktavu ir nepieciešama šai darbībai…</string>
|
||||
<string name="importCards">Importēt kartes</string>
|
||||
</resources>
|
||||
|
||||
@@ -27,10 +27,18 @@
|
||||
<item name="colorOnSurfaceInverse">@color/md_theme_dark_inverseOnSurface</item>
|
||||
<item name="colorSurfaceInverse">@color/md_theme_dark_inverseSurface</item>
|
||||
<item name="colorPrimaryInverse">@color/md_theme_dark_primaryInverse</item>
|
||||
<item name="materialAlertDialogTheme">@style/ThemeOverlay.App.MaterialAlertDialog.Monet</item>
|
||||
<item name="alertDialogTheme">@style/ThemeOverlay.App.MaterialAlertDialog.Monet</item>
|
||||
|
||||
<item name="windowActionModeOverlay">true</item>
|
||||
</style>
|
||||
|
||||
<style name="ThemeOverlay.App.MaterialAlertDialog.Monet" parent="ThemeOverlay.Material3.MaterialAlertDialog">
|
||||
<item name="alertDialogStyle">@style/MaterialAlertDialog.Material3</item>
|
||||
<item name="dialogCornerRadius">28dp</item>
|
||||
<item name="android:background">@drawable/dialog_bg_monet</item>
|
||||
</style>
|
||||
|
||||
<!-- note that this is not used directly, these are used to patch the active theme runtime with
|
||||
theme.applyStyle
|
||||
-->
|
||||
|
||||
@@ -268,4 +268,13 @@
|
||||
<string name="validFromDate">Geldig vanaf</string>
|
||||
<string name="validFromSentence">Geldig vanaf: <xliff:g>%s</xliff:g></string>
|
||||
<string name="chooseValidFromDate">Kies een geldige vanaf-datum</string>
|
||||
<string name="setBarcodeHeight">Barcodehoogte instellen</string>
|
||||
<string name="height">Hoogte:</string>
|
||||
<string name="switchToFrontImage">Voorzijde tonen</string>
|
||||
<string name="switchToBackImage">Achterzijde tonen</string>
|
||||
<string name="switchToBarcode">Barcode tonen</string>
|
||||
<string name="openImageInGallery">Afbeelding openen in galerij-app</string>
|
||||
<string name="openFrontImageInGalleryApp">Voorzijde openen in galerij-app</string>
|
||||
<string name="openBackImageInGalleryApp">Achterzijde openen in galerij-app</string>
|
||||
<string name="donate">Doneren</string>
|
||||
</resources>
|
||||
@@ -51,7 +51,7 @@
|
||||
<string name="settings">Paramètres</string>
|
||||
<string name="settings_category_title_ui">Interfàcia utilizaire</string>
|
||||
<string name="settings_theme">Tèma</string>
|
||||
<string name="noGiftCards">Clicatz lo boton + per apondre una carta o utilizatz lo menú ⋮ per n’importar una.</string>
|
||||
<string name="noGiftCards">Clicatz lo boton + per apondre una carta o n’importar una menú ⋮</string>
|
||||
<string name="noMatchingGiftCards">Cap de resultat. Ensajatz de modificar vòstra recèrca.</string>
|
||||
<string name="settings_light_theme">Clar</string>
|
||||
<string name="settings_dark_theme">Escur</string>
|
||||
@@ -66,4 +66,5 @@
|
||||
<string name="settings_max_font_size_scale">Talha max. de la poliça</string>
|
||||
<string name="settings_theme_color">Color del tèma</string>
|
||||
<string name="settings_locale">Lenga</string>
|
||||
<string name="noGiftCardsGroup">Creatz de cartas puèi ligatz-las al grop aicí.</string>
|
||||
</resources>
|
||||
@@ -282,4 +282,13 @@
|
||||
<string name="anyDate">Любая дата</string>
|
||||
<string name="chooseValidFromDate">Выбор даты действия</string>
|
||||
<string name="validFromSentence">Действует с: <xliff:g>%s</xliff:g></string>
|
||||
<string name="setBarcodeHeight">Указать высоту штрих-кода</string>
|
||||
<string name="height">Высота:</string>
|
||||
<string name="switchToBarcode">Переключить на штрих-код</string>
|
||||
<string name="switchToFrontImage">Переключить на лицевую сторону</string>
|
||||
<string name="switchToBackImage">Переключить на заднюю сторону</string>
|
||||
<string name="openImageInGallery">Открыть изображение в приложении галереи</string>
|
||||
<string name="openFrontImageInGalleryApp">Открыть лицевое изображение в приложении галереи</string>
|
||||
<string name="openBackImageInGalleryApp">Открыть заднее изображение в приложении галереи</string>
|
||||
<string name="donate">Пожертвовать</string>
|
||||
</resources>
|
||||
@@ -268,4 +268,13 @@
|
||||
<string name="anyDate">Herhangi bir tarih</string>
|
||||
<string name="validFromDate">Geçerlilik başlangıcı</string>
|
||||
<string name="validFromSentence"><xliff:g>%s</xliff:g> tarihinden itibaren geçerlidir</string>
|
||||
<string name="height">Yükseklik:</string>
|
||||
<string name="switchToBackImage">Arka resme geç</string>
|
||||
<string name="switchToBarcode">Barkoda geç</string>
|
||||
<string name="openImageInGallery">Resmi galeri uygulamasında aç</string>
|
||||
<string name="donate">Bağış yap</string>
|
||||
<string name="switchToFrontImage">Ön resme geç</string>
|
||||
<string name="setBarcodeHeight">Barkod yüksekliğini ayarla</string>
|
||||
<string name="openFrontImageInGalleryApp">Ön resmi galeri uygulamasında aç</string>
|
||||
<string name="openBackImageInGalleryApp">Arka resmi galeri uygulamasında aç</string>
|
||||
</resources>
|
||||
@@ -261,4 +261,13 @@
|
||||
<string name="chooseValidFromDate">选择有效日期</string>
|
||||
<string name="validFromSentence">有效期自: <xliff:g>%s</xliff:g></string>
|
||||
<string name="cameraPermissionRequired">此操作所需的访问相机的权限…</string>
|
||||
<string name="height">高度:</string>
|
||||
<string name="switchToFrontImage">选择正面图像</string>
|
||||
<string name="switchToBackImage">选择背面图像</string>
|
||||
<string name="switchToBarcode">选择条形码</string>
|
||||
<string name="openImageInGallery">使用图库软件打开图像</string>
|
||||
<string name="openFrontImageInGalleryApp">使用图库软件打开正面图像</string>
|
||||
<string name="openBackImageInGalleryApp">使用图库软件打开背面图像</string>
|
||||
<string name="setBarcodeHeight">设置条形码高度</string>
|
||||
<string name="donate">捐赠</string>
|
||||
</resources>
|
||||
@@ -313,4 +313,13 @@
|
||||
<string name="anyDate">Any date</string>
|
||||
<string name="chooseValidFromDate">Choose valid from date</string>
|
||||
<string name="validFromSentence">Valid from: <xliff:g>%s</xliff:g></string>
|
||||
<string name="height">Height:</string>
|
||||
<string name="switchToFrontImage">Switch to front image</string>
|
||||
<string name="switchToBackImage">Switch to back image</string>
|
||||
<string name="switchToBarcode">Switch to barcode</string>
|
||||
<string name="openImageInGallery">Open image in gallery app</string>
|
||||
<string name="openFrontImageInGalleryApp">Open front image in gallery app</string>
|
||||
<string name="openBackImageInGalleryApp">Open back image in gallery app</string>
|
||||
<string name="setBarcodeHeight">Set barcode height</string>
|
||||
<string name="donate">Donate</string>
|
||||
</resources>
|
||||
|
||||
@@ -27,8 +27,17 @@
|
||||
<item name="colorOnSurfaceInverse">@color/md_theme_light_inverseOnSurface</item>
|
||||
<item name="colorSurfaceInverse">@color/md_theme_light_inverseSurface</item>
|
||||
<item name="colorPrimaryInverse">@color/md_theme_light_primaryInverse</item>
|
||||
<item name="materialAlertDialogTheme">@style/ThemeOverlay.App.MaterialAlertDialog.Monet</item>
|
||||
<item name="alertDialogTheme">@style/ThemeOverlay.App.MaterialAlertDialog.Monet</item>
|
||||
|
||||
<item name="windowActionModeOverlay">true</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="ThemeOverlay.App.MaterialAlertDialog.Monet" parent="ThemeOverlay.Material3.MaterialAlertDialog">
|
||||
<item name="alertDialogStyle">@style/MaterialAlertDialog.Material3</item>
|
||||
<item name="dialogCornerRadius">28dp</item>
|
||||
<item name="android:background">@drawable/dialog_bg_monet</item>
|
||||
</style>
|
||||
|
||||
<style name="AppTheme.NoActionBar" parent="AppTheme">
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
app:singleLineTitle="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
android:widgetLayout="@layout/preference_material_switch"
|
||||
android:defaultValue="false"
|
||||
android:key="@string/settings_key_oled_dark"
|
||||
android:title="@string/settings_oled_dark"
|
||||
@@ -52,6 +53,7 @@
|
||||
app:singleLineTitle="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
android:widgetLayout="@layout/preference_material_switch"
|
||||
android:defaultValue="true"
|
||||
android:key="@string/settings_key_display_barcode_max_brightness"
|
||||
android:title="@string/settings_display_barcode_max_brightness"
|
||||
@@ -68,6 +70,7 @@
|
||||
app:singleLineTitle="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
android:widgetLayout="@layout/preference_material_switch"
|
||||
android:defaultValue="true"
|
||||
android:key="@string/settings_key_keep_screen_on"
|
||||
android:title="@string/settings_keep_screen_on"
|
||||
@@ -75,11 +78,14 @@
|
||||
app:singleLineTitle="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
android:widgetLayout="@layout/preference_material_switch"
|
||||
android:defaultValue="true"
|
||||
android:key="@string/settings_key_disable_lockscreen_while_viewing_card"
|
||||
android:title="@string/settings_disable_lockscreen_while_viewing_card"
|
||||
app:iconSpaceReserved="false"
|
||||
app:singleLineTitle="false" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
</PreferenceScreen>
|
||||
|
||||
|
||||
@@ -60,25 +60,13 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
return viewHolder.itemView;
|
||||
}
|
||||
|
||||
private void checkView(final View view, final String store, final String note, final String validFrom, final String expiry, final String balance, boolean checkFontSizes) {
|
||||
final TextView storeField = view.findViewById(R.id.store);
|
||||
private void checkView(final View view, final String store, final String note, final String validFrom, final String expiry, final String balance) {
|
||||
final TextView storeField = view.findViewById(R.id.thumbnail_text);
|
||||
final TextView noteField = view.findViewById(R.id.note);
|
||||
final TextView validFromField = view.findViewById(R.id.validFrom);
|
||||
final TextView expiryField = view.findViewById(R.id.expiry);
|
||||
final TextView balanceField = view.findViewById(R.id.balance);
|
||||
|
||||
if (checkFontSizes) {
|
||||
Settings preferences = new Settings(activity.getApplicationContext());
|
||||
int mediumFontSize = preferences.getFontSizeMax(preferences.getMediumFont());
|
||||
int smallFontSize = preferences.getFontSizeMax(preferences.getSmallFont());
|
||||
|
||||
assertEquals(mediumFontSize, (int) storeField.getTextSize());
|
||||
assertEquals(smallFontSize, (int) noteField.getTextSize());
|
||||
assertEquals(smallFontSize, (int) validFromField.getTextSize());
|
||||
assertEquals(smallFontSize, (int) expiryField.getTextSize());
|
||||
}
|
||||
|
||||
assertEquals(store, storeField.getText().toString());
|
||||
if (!note.isEmpty()) {
|
||||
assertEquals(View.VISIBLE, noteField.getVisibility());
|
||||
assertEquals(note, noteField.getText().toString());
|
||||
@@ -119,7 +107,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note, "", "", "", false);
|
||||
checkView(view, card.store, card.note, "", "", "");
|
||||
|
||||
cursor.close();
|
||||
}
|
||||
@@ -134,30 +122,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note, "", "", "", false);
|
||||
|
||||
cursor.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapterFontSizes() {
|
||||
Date date = new Date();
|
||||
String dateString = DateFormat.getDateInstance(DateFormat.LONG).format(date);
|
||||
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", date, date, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
|
||||
|
||||
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
cursor.moveToFirst();
|
||||
|
||||
setFontScale(50);
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note, dateString, dateString, "", true);
|
||||
|
||||
setFontScale(200);
|
||||
view = createView(cursor);
|
||||
checkView(view, card.store, card.note, dateString, dateString, "", true);
|
||||
checkView(view, card.store, card.note, "", "", "");
|
||||
|
||||
cursor.close();
|
||||
}
|
||||
@@ -223,7 +188,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note, "", "", "", false);
|
||||
checkView(view, card.store, card.note, "", "", "");
|
||||
|
||||
cursor.close();
|
||||
}
|
||||
@@ -238,7 +203,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note, "", "", "", false);
|
||||
checkView(view, card.store, card.note, "", "", "");
|
||||
|
||||
cursor.close();
|
||||
}
|
||||
@@ -253,7 +218,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note, "", "", "100 points", false);
|
||||
checkView(view, card.store, card.note, "", "", "100 points");
|
||||
|
||||
cursor.close();
|
||||
}
|
||||
@@ -268,7 +233,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note, "", "", "$10.00", false);
|
||||
checkView(view, card.store, card.note, "", "", "$10.00");
|
||||
|
||||
cursor.close();
|
||||
}
|
||||
|
||||
@@ -59,6 +59,7 @@ import java.util.Currency;
|
||||
import java.util.Date;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.core.widget.TextViewCompat;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
@@ -309,7 +310,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final String barcodeId, final String barcodeType,
|
||||
final Bitmap frontImage, final Bitmap backImage) {
|
||||
if (mode == ViewMode.VIEW_CARD) {
|
||||
checkFieldProperties(activity, R.id.cardIdView, View.VISIBLE, cardId, FieldTypeView.TextView);
|
||||
checkFieldProperties(activity, R.id.card_id_view, View.VISIBLE, cardId, FieldTypeView.TextView);
|
||||
} else {
|
||||
int editVisibility = View.VISIBLE;
|
||||
|
||||
@@ -621,7 +622,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void startWithLoyaltyCardViewModeCheckDisplay() throws IOException {
|
||||
public void startWithLoyaltyCardViewModeCheckDisplay() {
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(false);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
final Context context = activity.getApplicationContext();
|
||||
@@ -1131,40 +1132,6 @@ public class LoyaltyCardViewActivityTest {
|
||||
database.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void startCheckFontSizes() {
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(false);
|
||||
|
||||
Activity activity = (Activity) activityController.get();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
final int LARGE_FONT_SIZE = 40;
|
||||
|
||||
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity);
|
||||
settings.edit()
|
||||
.putInt(activity.getResources().getString(R.string.settings_key_max_font_size_scale), 100)
|
||||
.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);
|
||||
|
||||
TextViewCompat.getAutoSizeMaxTextSize(storeName);
|
||||
TextViewCompat.getAutoSizeMaxTextSize(storeName);
|
||||
assertEquals(LARGE_FONT_SIZE, TextViewCompat.getAutoSizeMaxTextSize(cardIdFieldView));
|
||||
|
||||
shadowOf(activity).clickMenuItem(android.R.id.home);
|
||||
assertEquals(true, activity.isFinishing());
|
||||
|
||||
database.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkPushStarIcon() {
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(false);
|
||||
@@ -1213,13 +1180,12 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
assertFalse(activity.isFinishing());
|
||||
|
||||
View collapsingToolbarLayout = activity.findViewById(R.id.collapsingToolbarLayout);
|
||||
BottomAppBar bottomAppBar = activity.findViewById(R.id.bottom_app_bar);
|
||||
ImageButton maximizeButton = activity.findViewById(R.id.maximizeButton);
|
||||
ImageButton minimizeButton = activity.findViewById(R.id.minimizeButton);
|
||||
LinearLayout dotIndicator = activity.findViewById(R.id.dotIndicator);
|
||||
ImageView mainImage = activity.findViewById(R.id.main_image);
|
||||
LinearLayout container = activity.findViewById(R.id.container);
|
||||
ConstraintLayout fullScreenLayout = activity.findViewById(R.id.fullscreen_layout);
|
||||
ImageButton minimizeButton = activity.findViewById(R.id.fullscreen_button_minimize);
|
||||
FloatingActionButton editButton = activity.findViewById(R.id.fabEdit);
|
||||
SeekBar barcodeScaler = activity.findViewById(R.id.barcodeScaler);
|
||||
|
||||
// Android should not be in fullscreen mode
|
||||
assertTrue(activity.getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.statusBars()));
|
||||
@@ -1227,16 +1193,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
assertEquals(WindowInsetsController.BEHAVIOR_DEFAULT, activity.getWindow().getInsetsController().getSystemBarsBehavior());
|
||||
|
||||
// Elements should be visible (except minimize button and scaler)
|
||||
assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility());
|
||||
assertEquals(View.VISIBLE, bottomAppBar.getVisibility());
|
||||
assertEquals(View.VISIBLE, maximizeButton.getVisibility());
|
||||
assertEquals(View.GONE, minimizeButton.getVisibility());
|
||||
assertEquals(View.VISIBLE, container.getVisibility());
|
||||
assertEquals(View.GONE, fullScreenLayout.getVisibility());
|
||||
assertEquals(View.VISIBLE, editButton.getVisibility());
|
||||
assertEquals(View.GONE, barcodeScaler.getVisibility());
|
||||
assertEquals(View.GONE, dotIndicator.getVisibility()); // We have no images, only a barcode
|
||||
|
||||
// Click maximize button to activate fullscreen
|
||||
maximizeButton.performClick();
|
||||
mainImage.performClick();
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Android should be in fullscreen mode
|
||||
@@ -1245,13 +1208,10 @@ public class LoyaltyCardViewActivityTest {
|
||||
assertEquals(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE, activity.getWindow().getInsetsController().getSystemBarsBehavior());
|
||||
|
||||
// Elements should not be visible (except minimize button and scaler)
|
||||
assertEquals(View.GONE, collapsingToolbarLayout.getVisibility());
|
||||
assertEquals(View.GONE, bottomAppBar.getVisibility());
|
||||
assertEquals(View.GONE, maximizeButton.getVisibility());
|
||||
assertEquals(View.VISIBLE, minimizeButton.getVisibility());
|
||||
assertEquals(View.GONE, container.getVisibility());
|
||||
assertEquals(View.VISIBLE, fullScreenLayout.getVisibility());
|
||||
assertEquals(View.GONE, editButton.getVisibility());
|
||||
assertEquals(View.VISIBLE, barcodeScaler.getVisibility());
|
||||
assertEquals(View.GONE, dotIndicator.getVisibility()); // We have no images, only a barcode
|
||||
|
||||
// Clicking minimize button should deactivate fullscreen mode
|
||||
minimizeButton.performClick();
|
||||
@@ -1261,29 +1221,23 @@ public class LoyaltyCardViewActivityTest {
|
||||
assertTrue(activity.getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.navigationBars()));
|
||||
assertEquals(WindowInsetsController.BEHAVIOR_DEFAULT, activity.getWindow().getInsetsController().getSystemBarsBehavior());
|
||||
|
||||
assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility());
|
||||
assertEquals(View.VISIBLE, bottomAppBar.getVisibility());
|
||||
assertEquals(View.VISIBLE, maximizeButton.getVisibility());
|
||||
assertEquals(View.GONE, minimizeButton.getVisibility());
|
||||
assertEquals(View.VISIBLE, container.getVisibility());
|
||||
assertEquals(View.GONE, fullScreenLayout.getVisibility());
|
||||
assertEquals(View.VISIBLE, editButton.getVisibility());
|
||||
assertEquals(View.GONE, barcodeScaler.getVisibility());
|
||||
assertEquals(View.GONE, dotIndicator.getVisibility()); // We have no images, only a barcode
|
||||
|
||||
// Another click back to fullscreen
|
||||
maximizeButton.performClick();
|
||||
mainImage.performClick();
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
assertFalse(activity.getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.statusBars()));
|
||||
assertFalse(activity.getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.navigationBars()));
|
||||
assertEquals(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE, activity.getWindow().getInsetsController().getSystemBarsBehavior());
|
||||
|
||||
assertEquals(View.GONE, collapsingToolbarLayout.getVisibility());
|
||||
assertEquals(View.GONE, bottomAppBar.getVisibility());
|
||||
assertEquals(View.GONE, maximizeButton.getVisibility());
|
||||
assertEquals(View.VISIBLE, minimizeButton.getVisibility());
|
||||
assertEquals(View.GONE, container.getVisibility());
|
||||
assertEquals(View.VISIBLE, fullScreenLayout.getVisibility());
|
||||
assertEquals(View.GONE, editButton.getVisibility());
|
||||
assertEquals(View.VISIBLE, barcodeScaler.getVisibility());
|
||||
assertEquals(View.GONE, dotIndicator.getVisibility()); // We have no images, only a barcode
|
||||
|
||||
// In full screen mode, back button should disable fullscreen
|
||||
activity.onBackPressed();
|
||||
@@ -1293,13 +1247,10 @@ public class LoyaltyCardViewActivityTest {
|
||||
assertTrue(activity.getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.navigationBars()));
|
||||
assertEquals(WindowInsetsController.BEHAVIOR_DEFAULT, activity.getWindow().getInsetsController().getSystemBarsBehavior());
|
||||
|
||||
assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility());
|
||||
assertEquals(View.VISIBLE, bottomAppBar.getVisibility());
|
||||
assertEquals(View.VISIBLE, maximizeButton.getVisibility());
|
||||
assertEquals(View.GONE, minimizeButton.getVisibility());
|
||||
assertEquals(View.VISIBLE, container.getVisibility());
|
||||
assertEquals(View.GONE, fullScreenLayout.getVisibility());
|
||||
assertEquals(View.VISIBLE, editButton.getVisibility());
|
||||
assertEquals(View.GONE, barcodeScaler.getVisibility());
|
||||
assertEquals(View.GONE, dotIndicator.getVisibility()); // We have no images, only a barcode
|
||||
|
||||
// Pressing back when not in full screen should finish activity
|
||||
activity.onBackPressed();
|
||||
@@ -1323,12 +1274,10 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
assertEquals(false, activity.isFinishing());
|
||||
|
||||
View collapsingToolbarLayout = activity.findViewById(R.id.collapsingToolbarLayout);
|
||||
BottomAppBar bottomAppBar = activity.findViewById(R.id.bottom_app_bar);
|
||||
ImageButton maximizeButton = activity.findViewById(R.id.maximizeButton);
|
||||
ImageButton minimizeButton = activity.findViewById(R.id.minimizeButton);
|
||||
ImageView mainImage = activity.findViewById(R.id.main_image);
|
||||
ConstraintLayout fullScreenLayout = activity.findViewById(R.id.fullscreen_layout);
|
||||
FloatingActionButton editButton = activity.findViewById(R.id.fabEdit);
|
||||
SeekBar barcodeScaler = activity.findViewById(R.id.barcodeScaler);
|
||||
|
||||
// Android should not be in fullscreen mode
|
||||
int uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility();
|
||||
@@ -1336,12 +1285,10 @@ public class LoyaltyCardViewActivityTest {
|
||||
assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions);
|
||||
|
||||
// Elements should be visible (except minimize/maximize buttons and barcode and scaler)
|
||||
assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility());
|
||||
assertEquals(View.VISIBLE, bottomAppBar.getVisibility());
|
||||
assertEquals(View.GONE, maximizeButton.getVisibility());
|
||||
assertEquals(View.GONE, minimizeButton.getVisibility());
|
||||
assertEquals(View.GONE, mainImage.getVisibility());
|
||||
assertEquals(View.GONE, fullScreenLayout.getVisibility());
|
||||
assertEquals(View.VISIBLE, editButton.getVisibility());
|
||||
assertEquals(View.GONE, barcodeScaler.getVisibility());
|
||||
|
||||
// Pressing back when not in full screen should finish activity
|
||||
activity.onBackPressed();
|
||||
|
||||
@@ -153,10 +153,10 @@ public class MainActivityTest {
|
||||
list.measure(0, 0);
|
||||
list.layout(0, 0, 100, 1000);
|
||||
|
||||
assertEquals("storeC", ((TextView) list.findViewHolderForAdapterPosition(0).itemView.findViewById(R.id.store)).getText());
|
||||
assertEquals("storeD", ((TextView) list.findViewHolderForAdapterPosition(1).itemView.findViewById(R.id.store)).getText());
|
||||
assertEquals("storeA", ((TextView) list.findViewHolderForAdapterPosition(2).itemView.findViewById(R.id.store)).getText());
|
||||
assertEquals("storeB", ((TextView) list.findViewHolderForAdapterPosition(3).itemView.findViewById(R.id.store)).getText());
|
||||
assertEquals("storeC", ((TextView) list.findViewHolderForAdapterPosition(0).itemView.findViewById(R.id.thumbnail_text)).getText());
|
||||
assertEquals("storeD", ((TextView) list.findViewHolderForAdapterPosition(1).itemView.findViewById(R.id.thumbnail_text)).getText());
|
||||
assertEquals("storeA", ((TextView) list.findViewHolderForAdapterPosition(2).itemView.findViewById(R.id.thumbnail_text)).getText());
|
||||
assertEquals("storeB", ((TextView) list.findViewHolderForAdapterPosition(3).itemView.findViewById(R.id.thumbnail_text)).getText());
|
||||
|
||||
database.close();
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
|
||||
plugins {
|
||||
id 'com.android.application' version '8.0.0' apply false
|
||||
id 'com.android.application' version '8.0.1' apply false
|
||||
id 'com.github.spotbugs' version "5.0.14" apply false
|
||||
}
|
||||
|
||||
|
||||
11
docs/RELEASE_STEPS.md
Normal file
@@ -0,0 +1,11 @@
|
||||
**This documentation is for maintainers. If you're an user, please ignore it.**
|
||||
|
||||
# When releasing, do the following:
|
||||
1. Press "Commit" and "Push" on Weblate to ensure all translations are up to date
|
||||
2. Merge Weblate pull request
|
||||
3. Update `CHANGELOG.md` with the new version name
|
||||
4. Update `app/build.gradle` with the new `versionCode` and `versionName`
|
||||
5. Build a new .apk: `KEYSTORE=/path/to/keystore KEYSTORE_ALIAS=catima ./build.sh`
|
||||
6. Upload the APK to Google Play Open Testing
|
||||
7. Push the version update: `git add CHANGELOG.md app/build.gradle && git commit -m "Release Catima <VERSION>" && git push`
|
||||
8. Create a new release on GitHub and attach the `app-release.apk` and `SHA256SUMS` files
|
||||
3
fastlane/metadata/android/cs-CZ/changelogs/120.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Kompletní přepracování hlavní obrazovky a obrazovek věrnostních karet
|
||||
- Motiv Material You pro obrazovku Nastavení
|
||||
- Oprava havárie při použití „Pořídit fotografii“ při zakázaném fotoaparátu
|
||||
3
fastlane/metadata/android/en-US/changelogs/120.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Complete redesign of main and loyalty card view screens
|
||||
- Material You design for the settings screen
|
||||
- Fix crash when using "Take a photo" with disabled camera app
|
||||
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 54 KiB |
1
fastlane/metadata/android/fr-FR/changelogs/119.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Utiliser les couleurs de Material You sur un plus grand nombre d'appareils (mise à jour de la bibliothèque de Google)
|
||||
3
fastlane/metadata/android/fr-FR/changelogs/120.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Refonte complète des écrans de visualisation de la carte principale et de la carte de fidélité
|
||||
- Design Material You pour l'écran des paramètres
|
||||
- Correction du crash lors de l'utilisation de "Prendre une photo" avec l'application de caméra désactivée
|
||||
@@ -1,2 +1,2 @@
|
||||
- Un clic long sur une carte affiche l'option de copier l'ID de la carte dans le presse-papiers. (pull #49 (https://github.com/brarcher/loyalty-card-locker/issues/49))
|
||||
- Le bouton Retour de la vue Entrée/Exportation fonctionne désormais, déplaçant alors l'utilisateur vers la vue principale
|
||||
- Le bouton Retour de la vue Import/Export fonctionne désormais, déplaçant alors l'utilisateur vers la vue principale
|
||||
|
||||
22
fastlane/metadata/android/hr/full_description.txt
Normal file
@@ -0,0 +1,22 @@
|
||||
Prestani tražiti plastične kartice tijekom plaćanju u trgovini ili webshopu.
|
||||
<b>Snimi crtični kod na svoj uređaj pomoću kamere, zaboravi kartice.</b>
|
||||
|
||||
Zaboravi novčanik ili ga koristi samo za dragocjenosti.
|
||||
|
||||
S ovim osnovnim alatom za svakodnevne potrebe (EDC) možeš zamijeniti beskorisnu plastiku s gotovinom.
|
||||
|
||||
- Izbjegni špijuniranja s vrlo malim brojem dozvola. Bez pristupa internetu i bez oglasa.
|
||||
- Dodaj kartice ili kodove s imenima i prilagodljivim bojama.
|
||||
- Ručni unos koda ako ne postoji crtični kod za spremanje ili ako se ne može koristiti.
|
||||
- Uvoz kartica i kodova iz datoteka, Catima, FidMe, Loyalty Card Keychain, Stocard i Vaucher Vault.
|
||||
- Spremi sigurnosnu kopiju svih tvojih kartica i prenesi ih na novi uređaj ako želiš.
|
||||
- Dijeli kupone, ekskluzivne ponude, promotivne kodove ili kartice i kodove pomoću bilo koje aplikacije.
|
||||
- Tamna tema i opcije pristupačnosti za slabovidne korisnike.
|
||||
- Stvoreno za svakoga od zajednice libre softvera.
|
||||
- Prevedeno na više od 20 jezika.
|
||||
- Besplatna aplikacija, podržana doprinosima zajednice.
|
||||
- Koristi, proučavaj, mijenjaj i dijeli kako želiš; <i>sa svima</i>.
|
||||
- Ne samo slobodan softver/softver otvorenog koda. <i>Copylefted</i> libre softver (GPLv3+) za upravljanje karticama.
|
||||
|
||||
Olakšaj si život i kupovinu te više nikada nemoj izgubiti papirnati račun, darovnu karticu za plaćanje u trgovini ili avionsku kartu.
|
||||
Ponesi sve svoje nagrade i bonuse sa sobom i uštedi.
|
||||
1
fastlane/metadata/android/hr/short_description.txt
Normal file
@@ -0,0 +1 @@
|
||||
Za tvoje crtične kodove, članstva, kartice vjernosti, kupone i ulaznice.
|
||||
1
fastlane/metadata/android/hr/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
Catima – Kartice vjernosti
|
||||
@@ -1,3 +1,3 @@
|
||||
- Az alapértelmezett import/export fájlnév megváltoztatása (pull #84 (https://github.com/brarcher/loyalty-card-locker/pull/84))
|
||||
- Megfelelő sor az import/export oldalon. (pull #87 (https://github.com/brarcher/loyalty-card-locker/pull/87))
|
||||
- Javítsa fel a kártya elrendezés nézetet. A szöveg könnyebben olvasható, és kiválasztható egy hosszú lenyomással. (pull #91 (https://github.com/brarcher/loyalty-card-locker/pull/91))
|
||||
- Az alapértelmezett importálási/exportálási fájlnév megváltoztatása (pull #84 (https://github.com/brarcher/loyalty-card-locker/pull/84))
|
||||
- Megfelelő szöveg az importálás/exportálás oldalon. (pull #87 (https://github.com/brarcher/loyalty-card-locker/pull/87))
|
||||
- A kártyás elrendezést használó nézet továbbfejlesztése. A szöveg könnyebben olvasható, és hosszú lenyomással kiválasztható. (pull #91 (https://github.com/brarcher/loyalty-card-locker/pull/91))
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
- Keresés elrejtése, az ikonok kihúzása és rendezése amíg nincs legalább egy kártya
|
||||
- Többféle téma fixálás
|
||||
- A keresés, a kibontás és a rendezés ikonjainak elrejtése, amíg nincs legalább egy kártya
|
||||
- Különböző témajavítások
|
||||
|
||||
3
fastlane/metadata/android/hu-HU/changelogs/101.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Javítás, hogy a vágó a téma színeit használja
|
||||
- Apró témázási problémák javítása
|
||||
- Teljesen fekete sötét téma az OLED képernyők számára
|
||||
2
fastlane/metadata/android/hu-HU/changelogs/102.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Különböző apró javítása
|
||||
- A norvég fordítás használata esetén történő összeomlás javítása
|
||||
2
fastlane/metadata/android/hu-HU/changelogs/103.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Javítás, hogy a kézileg kiválasztott nyelv mindenhol alkalmazva legyen
|
||||
- A régiót nem tartalmazó területi beállítása esetén a szerkesztő nézetben történő összeomlás javítása
|
||||
2
fastlane/metadata/android/hu-HU/changelogs/104.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Kártya részleteinek kibontási állapotának mentése
|
||||
- Apró felületi javítások
|
||||
2
fastlane/metadata/android/hu-HU/changelogs/105.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Az érvénytelen vonalkódok esetén megjelenő szürke blokkok megjelenésének javítása
|
||||
- Stocard importálási javítások
|
||||
1
fastlane/metadata/android/hu-HU/changelogs/106.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Javítás, hogy egyes karaktersorozatok ne egy karakterként jelenjenek meg
|
||||
1
fastlane/metadata/android/hu-HU/changelogs/107.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Stocard importálási javítások
|
||||
5
fastlane/metadata/android/hu-HU/changelogs/108.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
- Kártyaklónozási funkció hozzáadása
|
||||
- Az 1970 előtti lejárat kiválasztásának letiltása (egyébként sem működött)
|
||||
- Kártyák archiválásának támogatása
|
||||
- Törlés áthelyezése a szerkesztéstől a megtekintéshez
|
||||
- Forgatási zárolási ikon eltávolítása, felváltja az új forgatási zárolási beállítás
|
||||
1
fastlane/metadata/android/hu-HU/changelogs/109.txt
Normal file
@@ -0,0 +1 @@
|
||||
- A helytelen szövegszín javítása a „Nincs vonalkód” gombon
|
||||
@@ -1,5 +1,5 @@
|
||||
- Rubrikák kitöltése a szerkesztésnél. (pull #94)
|
||||
- Generált vonalkód hosszának korlátozása a memória hibák elkerülésére. (pull #103)
|
||||
- Ha egy kártya már létezik akkor a "Kártyába lépés" helyett "Kártya szerkesztése" gomb jelenik meg. (pull #104)
|
||||
- A színséma lágyabb az ikonnak megfelelően, és kártya nézet tisztítása. (pull #107)
|
||||
- A meglévő azonosító kitöltése a kártya szerkesztésnél. (pull #94)
|
||||
- Az előállított vonalkód hosszának korlátozása a memóriahibák elkerülése érdekében. (pull #103)
|
||||
- Ha egy kártya már létezik, akkor a „Kártya megadása” helyett „Kártya szerkesztése” lesz a gombfelirat. (pull #104)
|
||||
- A színséma lágyabb az ikonnak megfelelően, és kártyanézet tisztábban jelenik meg. (pull #107)
|
||||
- Varázsló megjelenítése az első indításnál. (pull #108)
|
||||
|
||||
7
fastlane/metadata/android/hu-HU/changelogs/111.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
- Arab nyelvi támogatás
|
||||
- Archivált kártyák számának megjelenítése a csoportáttekintőben
|
||||
- Egyenlegértelmezési hibák javítása (Az arab, vagy a más nyelvű, nem nyugati számokat használó kártyák nem voltak menthetők)
|
||||
- A főképernyőn nem helyesen voltak alkalmazva az egyéni témák
|
||||
- A kiválasztott kártyák megjelenésének finomítása
|
||||
- A jobbról balra írt kártyák esetén történő összeomlás javítása
|
||||
- A jobbról balra irányú elrendezés esetén hibás irányba mutató vissza nyíl javítása
|
||||
1
fastlane/metadata/android/hu-HU/changelogs/112.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Az egyéni fejléc beállítási lehetőségének láthatóbbá tétele
|
||||
3
fastlane/metadata/android/hu-HU/changelogs/113.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Előző és következő gombok hozzáadása a hűségkártya nézethez
|
||||
- Előtérszín javítása a szerkesztés gombon
|
||||
- A floppy lemezt használó mentés ikon lecserélése egy pipára
|
||||
3
fastlane/metadata/android/hu-HU/changelogs/114.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Monokróm ikon hozzáadása az Android 13-hoz
|
||||
- Az első indítási képernyő fejlesztése
|
||||
- Fidme importálási javítások
|
||||
4
fastlane/metadata/android/hu-HU/changelogs/115.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
- Kép megnyitása a galériában hosszú lenyomásra
|
||||
- Material stílus alkalmazása az a párbeszédablakokra
|
||||
- Kártyák létrehozásának támogatása a kép a Catimával történő megosztásával
|
||||
- Gyors költés gomb hozzáadása a kártya kéőernyőhöz
|
||||
2
fastlane/metadata/android/hu-HU/changelogs/116.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- A gyors költési párbeszédablak nem támogatta a , elválasztót
|
||||
- A fájlkezelőből történő képbetöltés támogatása
|
||||
2
fastlane/metadata/android/hu-HU/changelogs/117.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Felesleges engedélyek eltávolítása
|
||||
- Android 13 célzása
|
||||
2
fastlane/metadata/android/hu-HU/changelogs/118.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- A kártya érvényességének beállításának támogatása
|
||||
- A Stocard importálás javítása (a Stocard exportálási formátuma megváltozott)
|
||||
1
fastlane/metadata/android/hu-HU/changelogs/119.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Material You színek használata több eszközön (Google programkönyvtár-frissítés)
|
||||
3
fastlane/metadata/android/hu-HU/changelogs/120.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- A fő képernyő és a hűségkártya nézet teljes újratervezése
|
||||
- Material You dizájn a beállítási képernyőn
|
||||
- A tiltott kamera alkalmazás esetén, a „Fénykép készítése” lehetőségnél fellépő összeomlás javítása
|
||||
@@ -1,2 +1,2 @@
|
||||
- 0.11-ben lecsökkentve a memória használat, cserébe csökkent a megjelenített karaktere száma is. (pull #126)
|
||||
- Francia és német fordítások frissítése. (pull #122, pull #124, pull #125)
|
||||
- A v0.11-ben lecsökkent a vonalkódrajzolás memóriahasználata, de ez érintette a vonalkód méretét. Most már megtartja a méretet, miközben csökkenti a memóriahasználatot. (pull #126 (https://github.com/brarcher/loyalty-card-locker/pull/126))
|
||||
- A francia és német fordítások frissítése. (pull #122 (https://github.com/brarcher/loyalty-card-locker/pull/122), pull #124 (https://github.com/brarcher/loyalty-card-locker/pull/124), pull #125 (https://github.com/brarcher/loyalty-card-locker/pull/125))
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
- Képernyő forgatás zárolása opció kártya megjelenítésénél. Zárás esetén az alap orientációban fog megjelenni, és nem lesz további forgatás. (pull #128)
|
||||
- Ha egy kártya kiválasztásra kerül, de nem betölthető, akkor egy hibaüzenet jelenik meg. (pull #132)
|
||||
- Fixálva a varázslónál fellépő elrendezés azonosító hiba. (pull #128)
|
||||
- Képernyőforgatás zárolása menüelem a kártya megjelenítésénél. Zárolás esetén a „természetes” tájolásában fog megjelenni. (pull #128 (https://github.com/brarcher/loyalty-card-locker/pull/128))
|
||||
- Ha egy kiválasztott kártya nem tölthető be, akkor az alkalmazás hibaüzenetet jelenít meg. (pull #132 (https://github.com/brarcher/loyalty-card-locker/pull/132))
|
||||
- A varázslóban fellépő, hiányzó elrendezésazonosító hibájának javítása. (pull #128 (https://github.com/brarcher/loyalty-card-locker/pull/128))
|
||||
|
||||
2
fastlane/metadata/android/hu-HU/changelogs/15.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Alkalmazásindítók támogatása (Android 7.1+), ahol a legutóbb használt kártyák jelennek meg indítóként. (pull #145 (https://github.com/brarcher/loyalty-card-locker/pull/145))
|
||||
- Modul hozzáadása, amely úgy működik mint egy rögzített indító, hogy támogassa az Android 7.1-nél régebbi verziót futtató eszközöket. (pull #142 (https://github.com/brarcher/loyalty-card-locker/pull/142))
|
||||
3
fastlane/metadata/android/hu-HU/changelogs/2.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Olasz fordítás
|
||||
- Az összes 1D vonalkódtípus támogatása (Eredetileg csak a termékek 1D-s vonalkódja volt támogatott)
|
||||
- A szükséges kamera engedély hozzáadása, amely eredetileg hiányzott.
|
||||
@@ -1,22 +1,22 @@
|
||||
Ne kotorásszon többé hűségkártyáiért a pénztárnál vagy a webshop fizetésnél.
|
||||
Ne kotorásszon többé hűségkártyáiért a pénztárnál vagy egy webshopnál történő fizetésnél.
|
||||
<b>Szkennelje be a vonalkódokat a telefonja kamerájával, és felejtse el a kártyákat.</b>
|
||||
|
||||
Felejtse el teljesen a pénztárcáját, vagy csak a legfontosabb értékeket tartsa benne innentől.
|
||||
Felejtse el teljesen a pénztárcáját, vagy innentől csak a legfontosabb értékeket tartsa benne.
|
||||
|
||||
Ezzel a mindennapi kellékkel felszabadul a pénztárcájában a plasztik kártyák helye.
|
||||
Ezzel a mindennapi kellékkel felszabadul a pénztárcájában a plasztikkártyák helye.
|
||||
|
||||
- A minimális engedélyeknek köszönhetően csökkentheti a kémkedés esélyét. Nem igényel internetet, és nincsenek reklámok.
|
||||
- Adjon hozzá kártyákat, vagy sima kódokat, majd szabja személyre színezéssel.
|
||||
- Manuálisan is hozzáadhat kódot ha nincs a kártyán vonalkód, vagy nem olvasható be valamiért.
|
||||
- Importáljon kártyákat appokból: Catima, FidMe, Loyalty Card Keychain, Stocard és Voucher Vault.
|
||||
- Kézileg is hozzáadhat kódot, ha nincs a kártyán vonalkód, vagy valamiért nem olvasható be.
|
||||
- Importáljon kártyákat más appokból: Catima, FidMe, Loyalty Card Keychain, Stocard és Voucher Vault.
|
||||
- Készítsen biztonsági mentést kártyáiról, vagy hordozza át másik eszközre.
|
||||
- Osszon meg kuponokat, exkluzív ajánlatokat, promóciós kódokat, vagy kártyákat és kódokat bármely appal.
|
||||
- Sötét téma és kisegítő lehetőségek gyengén látó felhasználóinknak.
|
||||
- Mindenki számára elérhető a gáttalan szoftver közösség jóvoltából.
|
||||
- Több mint 20 kézzel fordított nyelven elérhető.
|
||||
- Grátisz, a közösség tagjai járulnak hozzá a fejlesztéshez.
|
||||
- Sötét téma és akadálymentesítés a gyengén látó felhasználóinknak.
|
||||
- Mindenki számára elérhető a szabad szoftveres közösség jóvoltából.
|
||||
- Több mint 20 nyelven honosított.
|
||||
- Ingyenes, a közösség tagjai járulnak hozzá a fejlesztéshez.
|
||||
- Használja, tanulmányozza, változtassa és ossza meg; <i>mindenkivel</i>.
|
||||
- Nem csak Ingyenes Szoftver / Nyílt Forráskódú. <i>Copyleft-elt</i> gáttalan szoftver (GPLv3+) kártya menedzser.
|
||||
- Nem csak szabad és nyílt forráskódú. <i>Copyleft</i> licencű, szabad (GPLv3+) kártyakezelő szoftver.
|
||||
|
||||
Egyszerűsítse le az életét és a vásárlást, ne hagyjon el több hűségkártyát vagy repjegyet.
|
||||
Vigye magával a hűségpontjait és bónuszait, és mentse el az útra.
|
||||
Egyszerűsítse le az életét és a vásárlást, ne hagyjon el több blokkot, hűségkártyát vagy repjegyet.
|
||||
Vigye magával a hűségpontjait és bónuszait, és mentse el azokat útközben.
|
||||
|
||||
@@ -1 +1 @@
|
||||
A vonalkódokhoz, tagkártyákhoz, hűség programokhoz, kuponokhoz és jegyekhez.
|
||||
A vonalkódokhoz, tagkártyákhoz, hűségprogramokhoz, kuponokhoz és jegyekhez.
|
||||
|
||||
@@ -1 +1 @@
|
||||
Catima — Hűségkártya Pénztárca
|
||||
Catima – Hűségkártyatárca
|
||||
|
||||