Compare commits

..

1 Commits

Author SHA1 Message Date
TheLastProject
f0579f0331 Update feature graphic 2024-12-14 11:48:08 +00:00
89 changed files with 244 additions and 497 deletions

View File

@@ -30,45 +30,39 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
flavor: [Foss, Gplay]
api-level: [ 21, 34 ]
steps:
- uses: actions/checkout@v4.2.2
- name: Fail on bad translations
run: if grep -ri "<xliff" app/src/main/res/values*/strings.xml; then echo "Invalidly escaped translations found"; exit 1; fi
- uses: gradle/actions/wrapper-validation@v4
- name: set up OpenJDK 17
run: |
sudo apt-get update
sudo apt-get install -y openjdk-17-jdk-headless
sudo update-alternatives --auto java
- name: Build
run: ./gradlew assemble${{ matrix.flavor }}Release
- name: Check lint
run: ./gradlew lint${{ matrix.flavor }}Release
- name: Run unit tests
run: timeout 5m ./gradlew test${{ matrix.flavor }}ReleaseUnitTest || { ./gradlew --stop && timeout 5m ./gradlew test${{ matrix.flavor }}ReleaseUnitTest; }
- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: Run instrumented tests (API 21)
uses: ReactiveCircus/android-emulator-runner@v2
with:
api-level: 21
arch: x86_64
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
- name: Run instrumented tests (API 34)
uses: ReactiveCircus/android-emulator-runner@v2
with:
api-level: 34
arch: x86_64
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
- name: SpotBugs
run: ./gradlew spotbugs${{ matrix.flavor }}Release
- name: Archive test results
if: always()
uses: actions/upload-artifact@v4.6.0
with:
name: test-results-flavor${{ matrix.flavor }}
path: app/build/reports
- uses: actions/checkout@v4.2.2
- name: Fail on bad translations
run: if grep -ri "<xliff" app/src/main/res/values*/strings.xml; then echo "Invalidly escaped translations found"; exit 1; fi
- uses: gradle/actions/wrapper-validation@v4
- name: set up OpenJDK 17
run: |
sudo apt-get update
sudo apt-get install -y openjdk-17-jdk-headless
sudo update-alternatives --auto java
- name: Build
run: ./gradlew assembleRelease
- name: Check lint
run: ./gradlew lintRelease
- name: Run unit tests
run: timeout 5m ./gradlew testReleaseUnitTest || { ./gradlew --stop && timeout 5m ./gradlew testReleaseUnitTest; }
- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: Run instrumented tests
uses: ReactiveCircus/android-emulator-runner@v2
with:
api-level: ${{ matrix.api-level }}
arch: x86_64
script: ./gradlew connectedCheck
- name: SpotBugs
run: ./gradlew spotbugsRelease
- name: Archive test results
if: always()
uses: actions/upload-artifact@v4.4.3
with:
name: test-results-api${{ matrix.api-level }}
path: app/build/reports

View File

@@ -35,7 +35,7 @@ jobs:
- name: Run converter script
run: python .scripts/changelog_to_fastlane.py
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.6
uses: peter-evans/create-pull-request@v7.0.5
with:
title: "Update Fastlane changelogs"
commit-message: "Update Fastlane changelogs"

View File

@@ -33,7 +33,7 @@ jobs:
file_in_repo: app/src/main/res/raw/contributors.txt
min_commit_count: 5
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.6
uses: peter-evans/create-pull-request@v7.0.5
with:
title: "Update contributors"
commit-message: "Update contributors"

View File

@@ -39,7 +39,7 @@ jobs:
- name: Generate featureGraphic.png for each language
run: .scripts/generate_feature_graphic/generate_feature_graphic.sh
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.6
uses: peter-evans/create-pull-request@v7.0.5
with:
title: "Update feature graphic"
commit-message: "Update feature graphic"

View File

@@ -26,7 +26,7 @@ jobs:
id: gradle-update
- uses: gradle/actions/wrapper-validation@v4
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.6
uses: peter-evans/create-pull-request@v7.0.5
with:
title: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"
commit-message: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"

View File

@@ -31,7 +31,7 @@ jobs:
- name: Update locales
run: .scripts/locales.py
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.6
uses: peter-evans/create-pull-request@v7.0.5
with:
title: "Update locales"
commit-message: "Update locales"

3
.gitignore vendored
View File

@@ -25,6 +25,3 @@
/.bundle/
/vendor/bundle
/lib/bundler/man/
# Catima-specific
SHA256SUMS

View File

@@ -37,12 +37,12 @@ for lang in "$script_location/../../fastlane/metadata/android/"*; do
# We specifically need the Serif version because of the 200 weight
case "$(basename "$lang")" in
bg|el-GR|ru-RU|uk) sed -i "s/Lexend Deca/Noto Serif/" featureGraphic.svg ;;
hi-IN) sed -i -e "s/Yesteryear/Noto Sans Devanagari/" -e "s/Lexend Deca/Noto Serif Devanagari/" featureGraphic.svg ;;
hi-IN) sed -i -e "s/Yesteryear/Noto Serif Devanagari/" -e "s/Lexend Deca/Noto Serif Devanagari/" featureGraphic.svg ;;
ja-JP) sed -i "s/Lexend Deca/Noto Serif CJK JP/" featureGraphic.svg ;;
kn-IN) sed -i -e 's/font-size="150"/font-size="100"/' -e "s/Yesteryear/Noto Serif Kannada/" featureGraphic.svg ;;
ko) sed -i "s/Lexend Deca/Noto Serif CJK KR/" featureGraphic.svg ;;
zh-CN) sed -i "s/Lexend Deca/Noto Serif CJK SC/" featureGraphic.svg ;;
zh-TW) sed -i -e "s/Yesteryear/Noto Sans CJK TC/" -e "s/Lexend Deca/Noto Serif CJK TC/" featureGraphic.svg ;;
zh-TW) sed -i "s/Lexend Deca/Noto Serif CJK TC/" featureGraphic.svg ;;
*) ;;
esac
fi

View File

@@ -1,15 +1,5 @@
# Changelog
## v2.34.3 - 145 (2025-01-15)
- Target Android 15
- Fix keyboard covering save button in edit screen
- Fix some pkpass files not being detected as pkpass (application/vnd-com.apple.pkpass mime type support)
## v2.34.2 - 144 (2024-12-26)
- Improve archive/starred icon display
## v2.34.1 - 143 (2024-12-12)
- Fix crash when opening invalid pkpass files

View File

@@ -1,128 +0,0 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
catima.g9ex3@hackerchick.me.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

View File

@@ -16,14 +16,14 @@ spotbugs {
android {
namespace = "protect.card_locker"
compileSdk = 35
compileSdk = 34
defaultConfig {
applicationId = "me.hackerchick.catima"
minSdk = 21
targetSdk = 35
versionCode = 145
versionName = "2.34.3"
targetSdk = 34
versionCode = 143
versionName = "2.34.1"
vectorDrawables.useSupportLibrary = true
multiDexEnabled = true
@@ -31,9 +31,6 @@ android {
resourceConfigurations += listOf("ar", "bg", "bn", "bn-rIN", "bs", "cs", "da", "de", "el-rGR", "en", "eo", "es", "es-rAR", "et", "fi", "fr", "gl", "he-rIL", "hi", "hr", "hu", "in-rID", "is", "it", "ja", "ko", "lt", "lv", "nb-rNO", "nl", "oc", "pl", "pt-rBR", "pt-rPT", "ro-rRO", "ru", "sk", "sl", "sr", "sv", "ta", "tr", "uk", "vi", "zh-rCN", "zh-rTW")
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
buildConfigField("boolean", "showDonate", "true")
buildConfigField("boolean", "showRateOnGooglePlay", "false")
}
buildTypes {
@@ -54,21 +51,6 @@ android {
viewBinding = true
}
flavorDimensions.add("type")
productFlavors {
create("foss") {
dimension = "type"
isDefault = true
}
create("gplay") {
dimension = "type"
// Google doesn't allow donation links
buildConfigField("boolean", "showDonate", "false")
buildConfigField("boolean", "showRateOnGooglePlay", "true")
}
}
bundle {
language {
enableSplit = false
@@ -112,13 +94,13 @@ dependencies {
// AndroidX
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("androidx.constraintlayout:constraintlayout:2.2.0")
implementation("androidx.core:core-ktx:1.15.0")
implementation("androidx.core:core-ktx:1.13.1")
implementation("androidx.core:core-splashscreen:1.0.1")
implementation("androidx.exifinterface:exifinterface:1.3.7")
implementation("androidx.palette:palette:1.0.0")
implementation("androidx.preference:preference:1.2.1")
implementation("com.google.android.material:material:1.12.0")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.3")
// Third-party
implementation("com.journeyapps:zxing-android-embedded:4.3.0@aar")

View File

@@ -49,8 +49,6 @@
<data android:mimeType="image/*" />
<data android:mimeType="application/pdf" />
<data android:mimeType="application/vnd.apple.pkpass" />
<data android:mimeType="application/vnd-com.apple.pkpass" />
<data android:mimeType="application/vnd.espass-espass" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
@@ -60,8 +58,6 @@
<data android:mimeType="image/*" />
<data android:mimeType="application/pdf" />
<data android:mimeType="application/vnd.apple.pkpass" />
<data android:mimeType="application/vnd-com.apple.pkpass" />
<data android:mimeType="application/vnd.espass-espass" />
</intent-filter>
</activity>
<activity
@@ -79,12 +75,13 @@
<activity
android:name=".LoyaltyCardViewActivity"
android:exported="true"
android:theme="@style/AppTheme.NoActionBar" />
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="stateHidden" />
<activity
android:name=".LoyaltyCardEditActivity"
android:exported="true"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="adjustResize">
android:windowSoftInputMode="stateHidden">
<intent-filter
android:autoVerify="true"
android:label="@string/app_name">
@@ -122,7 +119,8 @@
<activity
android:name=".BarcodeSelectorActivity"
android:label="@string/selectBarcodeTitle"
android:theme="@style/AppTheme.NoActionBar" />
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="stateHidden" />
<activity
android:name=".preferences.SettingsActivity"
android:label="@string/settings"

View File

@@ -45,10 +45,11 @@ public class AboutActivity extends CatimaAppCompatActivity {
binding.rate.setTag("https://play.google.com/store/apps/details?id=me.hackerchick.catima");
binding.donate.setTag("https://catima.app/donate");
boolean installedFromGooglePlay = Utils.installedFromGooglePlay(this);
// Hide Google Play rate button if not on Google Play
binding.rate.setVisibility(BuildConfig.showRateOnGooglePlay ? View.VISIBLE : View.GONE);
binding.rate.setVisibility(installedFromGooglePlay ? View.VISIBLE : View.GONE);
// Hide donate button on Google Play (Google Play doesn't allow donation links)
binding.donate.setVisibility(BuildConfig.showDonate ? View.VISIBLE : View.GONE);
binding.donate.setVisibility(installedFromGooglePlay ? View.GONE : View.VISIBLE);
bindClickListeners();
}

View File

@@ -124,9 +124,9 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
}
inputHolder.mCardIcon.setContentDescription(loyaltyCard.store);
Utils.setIconOrTextWithBackground(mContext, loyaltyCard, icon, inputHolder.mCardIcon, inputHolder.mCardText, new Settings(mContext).getPreferredColumnCount());
inputHolder.mIconBackgroundColor = Utils.setIconOrTextWithBackground(mContext, loyaltyCard, icon, inputHolder.mCardIcon, inputHolder.mCardText, new Settings(mContext).getPreferredColumnCount());
inputHolder.toggleCardStateIcon(loyaltyCard.starStatus != 0, loyaltyCard.archiveStatus != 0);
inputHolder.toggleCardStateIcon(loyaltyCard.starStatus != 0, loyaltyCard.archiveStatus != 0, itemSelected(inputCursor.getPosition()));
inputHolder.itemView.setActivated(mSelectedItems.get(inputCursor.getPosition(), false));
applyIconAnimation(inputHolder, inputCursor.getPosition());
@@ -212,11 +212,13 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
public class LoyaltyCardListItemViewHolder extends RecyclerView.ViewHolder {
public TextView mCardText, mStoreField, mNoteField, mBalanceField, mValidFromField, mExpiryField;
public ImageView mCardIcon, mTickIcon;
public ImageView mCardIcon, mStarBackground, mStarBorder, mTickIcon, mArchivedBackground;
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();
@@ -230,7 +232,10 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
mCardIcon = loyaltyCardLayoutBinding.thumbnail;
mCardText = loyaltyCardLayoutBinding.thumbnailText;
mStar = loyaltyCardLayoutBinding.star;
mStarBackground = loyaltyCardLayoutBinding.starBackground;
mStarBorder = loyaltyCardLayoutBinding.starBorder;
mArchived = loyaltyCardLayoutBinding.archivedIcon;
mArchivedBackground = loyaltyCardLayoutBinding.archiveBackground;
mTickIcon = loyaltyCardLayoutBinding.selectedThumbnail;
inputView.setOnLongClickListener(view -> {
inputListener.onRowClicked(getAdapterPosition());
@@ -292,7 +297,31 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
mNoteField.requestLayout();
}
public void toggleCardStateIcon(boolean enableStar, boolean enableArchive) {
public void toggleCardStateIcon(boolean enableStar, boolean enableArchive, boolean colorByTheme) {
/* the below code does not work in android 5! hence the change of drawable instead
boolean needDarkForeground = Utils.needsDarkForeground(mIconBackgroundColor);
Drawable borderDrawable = mStarBorder.getDrawable().mutate();
Drawable backgroundDrawable = mStarBackground.getDrawable().mutate();
DrawableCompat.setTint(borderDrawable, needsDarkForeground ? Color.BLACK : Color.WHITE);
DrawableCompat.setTint(backgroundDrawable, needsDarkForeground ? Color.BLACK : Color.WHITE);
mStarBorder.setImageDrawable(borderDrawable);
mStarBackground.setImageDrawable(backgroundDrawable);
*/
boolean dark = Utils.needsDarkForeground(mIconBackgroundColor);
if (colorByTheme) {
dark = !mDarkModeEnabled;
}
if (dark) {
mStarBorder.setImageResource(R.drawable.ic_unstarred_white);
mStarBackground.setImageResource(R.drawable.ic_starred_black);
mArchivedBackground.setImageResource(R.drawable.ic_baseline_archive_24_black);
} else {
mStarBorder.setImageResource(R.drawable.ic_unstarred_black);
mStarBackground.setImageResource(R.drawable.ic_starred_white);
mArchivedBackground.setImageResource(R.drawable.ic_baseline_archive_24);
}
if (enableStar) {
mStar.setVisibility(View.VISIBLE);
} else{
@@ -304,6 +333,11 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
} else{
mArchived.setVisibility(View.GONE);
}
mStarBorder.invalidate();
mStarBackground.invalidate();
mArchivedBackground.invalidate();
}
}
}

View File

@@ -500,12 +500,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
parseResultList = Utils.retrieveBarcodesFromImage(this, data);
} else if (receivedType.equals("application/pdf")) {
parseResultList = Utils.retrieveBarcodesFromPdf(this, data);
} else if (Arrays.asList("application/vnd.apple.pkpass", "application/vnd-com.apple.pkpass").contains(receivedType)) {
parseResultList = Utils.retrieveBarcodesFromPkPass(this, data);
} else if (receivedType.equals("application/vnd.espass-espass")) {
// FIXME: espass is not pkpass
// However, several users stated in https://github.com/CatimaLoyalty/Android/issues/2197 that the formats are extremely similar to the point they could rename an .espass file to .pkpass and have it imported
// So it makes sense to "unofficially" treat it as a PKPASS for now, even though not completely correct
} else if (receivedType.equals("application/vnd.apple.pkpass")) {
parseResultList = Utils.retrieveBarcodesFromPkPass(this, data);
} else {
Log.e(TAG, "Wrong mime-type");

View File

@@ -1032,6 +1032,21 @@ public class Utils {
return headerColor;
}
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;
}
}
public static int getHeaderColor(Context context, LoyaltyCard loyaltyCard) {
return loyaltyCard.headerColor != null ? loyaltyCard.headerColor : LetterBitmap.getDefaultColor(context, loyaltyCard.store);
}

View File

@@ -2,10 +2,9 @@
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
android:viewportHeight="24"
android:tint="@android:color/white">
<path
android:fillColor="#D3D3D3"
android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"
android:strokeWidth="0.25"
android:strokeColor="#777777"/>
android:fillColor="@android:color/white"
android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"/>
</vector>

View 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="@android:color/black">
<path
android:fillColor="@android:color/black"
android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"/>
</vector>

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
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>

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
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>

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
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>

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
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>

View File

@@ -1,11 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#D3D3D3"
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"
android:strokeWidth="0.25"
android:strokeColor="#777777"/>
</vector>

View File

@@ -15,7 +15,8 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/textView"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_baseline_archive_24" />
<TextView
android:id="@+id/textView"

View File

@@ -4,8 +4,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fitsSystemWindows="true">
android:layout_height="fill_parent">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="fill_parent"

View File

@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"

View File

@@ -72,15 +72,29 @@
android:layout_width="@dimen/cardThumbnailSize"
android:layout_height="@dimen/cardThumbnailSize"
android:layout_gravity="end"
android:alpha="0.8"
android:alpha="0.5"
android:contentDescription="@string/starred"
android:elevation="4dp"
android:rotationX="2"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/loyalty_card_icon_starred"
tools:ignore="ImageContrastCheck"/>
app:srcCompat="@drawable/ic_starred_white"
tools:ignore="ImageContrastCheck" />
<ImageView
android:importantForAccessibility="no"
android:id="@+id/star_border"
android:layout_width="@dimen/cardThumbnailSize"
android:layout_height="@dimen/cardThumbnailSize"
android:layout_gravity="end"
android:alpha="0.5"
android:contentDescription="@string/starImage"
android:elevation="4dp"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_unstarred_black"
tools:ignore="ImageContrastCheck" />
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -96,18 +110,18 @@
<ImageView
android:id="@+id/archive_background"
android:layout_width="@dimen/cardThumbnailSize"
android:layout_height="@dimen/cardThumbnailSize"
android:layout_width="41dp"
android:layout_height="44dp"
android:layout_gravity="end"
android:alpha="0.8"
android:alpha="0.5"
android:contentDescription="@string/archived"
android:elevation="4dp"
android:rotationX="2"
android:visibility="visible"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/loyalty_card_icon_archived"
tools:ignore="ImageContrastCheck" />
app:srcCompat="@drawable/ic_baseline_archive_24"
tools:ignore="ImageContrastCheck,MissingConstraints"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="-1dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -8,8 +8,7 @@
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
@@ -26,8 +25,7 @@
android:layout_marginBottom="100dp"
android:orientation="vertical"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:fitsSystemWindows="true">
android:layout_marginEnd="0dp">
<LinearLayout
android:id="@+id/icon_container"
@@ -149,8 +147,7 @@
android:id="@+id/fullscreen_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:fitsSystemWindows="false">
android:orientation="vertical">
<ImageView
android:importantForAccessibility="no"
@@ -209,13 +206,13 @@
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="?attr/colorPrimary"
app:fabAlignmentMode="center"
app:fabCradleVerticalOffset="2dp"
android:fitsSystemWindows="true">
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetRight="0dp"
app:contentInsetEnd="0dp"
app:fabAlignmentMode="center">
<LinearLayout
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layoutDirection="ltr">

View File

@@ -5,7 +5,6 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".ScanActivity">
<com.google.android.material.appbar.AppBarLayout

View File

@@ -21,58 +21,52 @@ laralem
Joel A
Taco
pfaffenrodt
Максим Горпиніч
Aayush Gupta
B o d o
Scrambled777
Priit Jõerüüt
Giovanni Donisi
HudobniVolk
Giovanni Donisi
Nyatsuki
Priit Jõerüüt
B o d o
Jiri Grönroos
ikanakova
Максим Горпиніч
Samantaz Fox
Balázs Meskó
Milo Ivir
Arno-github
Ankit Tiwari
Cliff Heraldo
Sergio Paredes
Ankit Tiwari
Arno-github
Milo Ivir
Balázs Meskó
Jose Delvani
mdvhimself
Milan Šalka
josé m
huuhaa
ikanakova
Skrripy
Edgars Andersons
Kachelkaiser
Projjal Moitra
Quentin PAGÈS
ngocanhtve
Silvério Santos
huuhaa
waffshappen
Marnick L'Eau
Robin
Silvério Santos
ngocanhtve
Quentin PAGÈS
Projjal Moitra
Kachelkaiser
Ziad OUALHADJ
Denis Shilin
Robin Liu
Renko
Denis Shilin
しいたけ
Alexander Ivanov
Miha Frangež
Viet Nguyen Hoang
தமிழ் நேரம்
stavpup
josé m
ehrt74
Virginie
Vasilis
Tim Trek
Peter Dave Hello
Michael Gangolf
rudy3
Kim Seohyun
Govind S Nair
Freddo espresso
Augustin LAVILLE
arshbeerSingh
MisterCosta96
arshbeerSingh
Freddo espresso
Govind S Nair
Kim Seohyun
Tim Trek
rudy3
Michael Gangolf

View File

@@ -14,5 +14,4 @@
<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>
<string name="app_name">Catima</string>
</resources>

View File

@@ -305,7 +305,4 @@
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_7">7</string>
<string name="addFromPkpass">Valitse Passbook-tiedosto (.pkpass)</string>
<string name="unsupportedFile">Tämä tiedosto ei ole tuettu</string>
<string name="generic_error_please_retry">Pahoittelut, jokin meni pieleen. Yritä uudelleen...</string>
</resources>

View File

@@ -311,7 +311,4 @@
<string name="settings_automatic_column_count">Automatique</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="addFromPkpass">Sélectionner un fichier Cartes / Passbook (.pkpass)</string>
<string name="unsupportedFile">Ce fichier n\'est pas supporté</string>
<string name="generic_error_please_retry">Désolé, un problème est survenu, veuillez réessayer...</string>
</resources>

View File

@@ -298,14 +298,4 @@
<string name="settings_column_count_landscape">Oszlopok fekvő módban</string>
<string name="settings_automatic_column_count">Automatikus</string>
<string name="settings_column_count_portrait">Oszlopok álló módban</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_1">1</string>
<string name="addFromPkpass">Válassz egy Passbook fájlt (.pkpass)</string>
<string name="unsupportedFile">Ez a fájl nem támogatott</string>
<string name="generic_error_please_retry">Sajnálom, valami rosszul ment, próbálkozz újra...</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_7">7</string>
</resources>

View File

@@ -299,7 +299,4 @@
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="addFromPkpass">Pilih file Buku Tabungan (.pkpass)</string>
<string name="unsupportedFile">File ini tidak didukung</string>
<string name="generic_error_please_retry">Maaf, terjadi kesalahan, silakan coba lagi...</string>
</resources>

View File

@@ -36,7 +36,7 @@
<string name="failedParsingImportUriError">Nevarēja apstrādāt ievietošanas URI</string>
<string name="importExport">Ievietot/izgūt</string>
<string name="exportName">Izgūt</string>
<string name="importExportHelp">Datu rezerves kopijas izveidošana ļauj tos pārnest uz citu ierīci.</string>
<string name="importExportHelp">Dublējot Jūsu datus, tos var pārnest uz citu ierīci.</string>
<string name="importSuccessfulTitle">Ievietots</string>
<string name="importFailedTitle">Ievietošana neizdevās</string>
<string name="importFailed">Nevarēja veikt ievietošanu</string>

View File

@@ -305,7 +305,4 @@
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_7">7</string>
<string name="addFromPkpass">Velg en Passbook-fil (.pkpass)</string>
<string name="unsupportedFile">Denne filen støttes ikke</string>
<string name="generic_error_please_retry">Beklager, men noe gikk galt. Prøv igjen…</string>
</resources>

View File

@@ -294,7 +294,7 @@
<string name="spend">Потрачено</string>
<string name="receive">Получено</string>
<string name="amountParsingFailed">Недопустимая сумма</string>
<string name="addFromPdfFile">Выбрать файл PDF</string>
<string name="addFromPdfFile">Выбрать PDF-файл</string>
<string name="errorReadingFile">Невозможно прочитать файл</string>
<string name="pageWithNumber">Страница <xliff:g>%d</xliff:g></string>
<string name="failedLaunchingFileManager">Не найден поддерживаемый файловый менеджер</string>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="settings_display_barcode_max_brightness">Gör skärmen ljusare</string>
<string name="settings_display_barcode_max_brightness">Gör streckkodsvyn ljusare</string>
<string name="settings_keep_screen_on">Håll skärmen påslagen</string>
<string name="importFidmeMessage">Välj den exporterade <i>fidme-export-request-xxxxxx.zip</i> från FidMe som du vill importera och välj streckkodstyper manuellt efteråt.
\nSkapa den från din FidMe-profil först genom att välja \"Data Protection\" och sen trycka på \"Extract my data\".</string>

View File

@@ -3,10 +3,6 @@
<string name="app_name">கேடிமா</string>
<string name="action_search">தேடல்</string>
<string name="action_add">கூட்டு</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> தேர்ந்தெடுக்கப்பட்டது</item>
<item quantity="other"><xliff:g>%d</xliff:g> தேர்ந்தெடுக்கப்பட்டன</item>
</plurals>
<string name="noGiftCards">ஒரு அட்டையைச் சேர்க்க + பிளச் பொத்தானைக் சொடுக்கு செய்க அல்லது ⋮ மெனுவிலிருந்து இறக்குமதி செய்யுங்கள்.</string>
<string name="noGiftCardsGroup">சில அட்டைகளை உருவாக்கி, பின்னர் அவற்றை இங்கே குழுவிற்கு ஒதுக்குங்கள்.</string>
<string name="storeName">பெயர்</string>
@@ -265,41 +261,4 @@
<string name="useBackImage">பின் படத்தைப் பயன்படுத்தவும்</string>
<string name="addFromPkpass">பாச் புக் கோப்பைத் தேர்ந்தெடுக்கவும் (.pkpass)</string>
<string name="useFrontImage">முன் படத்தைப் பயன்படுத்தவும்</string>
<plurals name="deleteCardsTitle">
<item quantity="one"><xliff:g>%d</xliff:g> அட்டை நீக்கு</item>
<item quantity="other"><xliff:g>%d</xliff:g> அட்டைகளை நீக்கு</item>
</plurals>
<plurals name="deleteCardsConfirmation">
<item quantity="one">இந்த <xliff:g>%d</xliff:g> அட்டையை நிரந்தரமாக நீக்கவா?</item>
<item quantity="other">இந்த <xliff:g>%d</xliff:g> அட்டைகளை நிரந்தரமாக நீக்கவா?</item>
</plurals>
<string name="editGroup">திருத்துதல் குழு: <xliff:g>%s</xliff:g></string>
<string name="debug_version_fmt">பதிப்பு: <xliff:g id="version">%s</xliff:g></string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> அட்டை</item>
<item quantity="other"><xliff:g>%d</xliff:g> அட்டைகள்</item>
</plurals>
<string name="expiryStateSentenceExpired">காலாவதியானது: <xliff:g>%s</xliff:g></string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> புள்ளி</item>
<item quantity="other"><xliff:g>%s</xliff:g> புள்ளிகள்</item>
</plurals>
<string name="importLoyaltyCardKeychainMessage">இறக்குமதி செய்ய உங்கள் <i>LoyaltyCardKeychain.csv</i> விசுவாச அட்டை சாவிக்கொத்திலிருந்து ஏற்றுமதி செய். \nமுதலில் அங்கு ஏற்றுமதியை அழுத்துவதன் மூலம் விசுவாச அட்டை சாவிக்கொத்தில் இறக்குமதி/ஏற்றுமதி பட்டியலிலிருந்து அதை உருவாக்கு.</string>
<string name="validFromSentence">இதிலிருந்து செல்லுபடியாகும்: <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">புதிய இருப்பு: <xliff:g>%s</xliff:g></string>
<string name="pageWithNumber">பக்கம் <xliff:g>%d</xliff:g></string>
<string name="currentBalanceSentence">தற்போதைய இருப்பு: <xliff:g>%s</xliff:g></string>
<string name="app_contributors">வழங்கியவர்: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="about_title_fmt">படம் <xliff:g>%s</xliff:g> பட்டைகுறியீடு</string>
<string name="barcodeImageDescriptionWithType">படம் <xliff:g>%s</xliff:g> பட்டை குறியீடு</string>
<string name="app_libraries">விடுதலை மூன்றாம் தரப்பு நூலகங்கள்: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="expiryStateSentence">காலாவதியாகிறது: <xliff:g>%s</xliff:g></string>
<string name="balanceSentence">இருப்பு: <xliff:g>%s</xliff:g></string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> அட்டை (<xliff:g id="archivedCount">%2$d</xliff:g> காப்பகப்படுத்தப்பட்டது)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> அட்டைகள் (<xliff:g id="archivedCount">%2$d</xliff:g> காப்பகப்படுத்தப்பட்டது)</item>
</plurals>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">பதிப்புரிமை © 2019<xliff:g>%d</xliff:g> சில்வியா வான் ஓஎச் மற்றும் பங்களிப்பாளர்கள்</string>
<string name="app_resources">விடுதலை மூன்றாம் தரப்பு வளங்கள்: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="groupsList">குழுக்கள்: <xliff:g>%s</xliff:g></string>
</resources>
</resources>

View File

@@ -285,7 +285,7 @@
<string name="enter_card_id">Введіть ID або текст на вашій картці</string>
<string name="addWithoutBarcode">Додати картку без штрих-коду</string>
<string name="field_must_not_be_empty">Поле вводу не повинно бути порожнім</string>
<string name="app_name">Катіма</string>
<string name="app_name">Catima</string>
<string name="settings_follow_sensor_orientation">Завжди обертати (ігнорувати системні налаштування)</string>
<string name="add_manually_warning_message">У деяких магазинах значення штрихкоду відрізняється від номера, записаного на картці. Через це введення штрихкоду вручну може не завжди спрацювати. Наполегливо рекомендуємо відсканувати штрихкод за допомогою камери. Ви все ще хочете продовжити?</string>
<string name="continue_">Продовжити</string>

View File

@@ -298,7 +298,4 @@
<string name="settings_category_title_cards_overview">卡片概覽</string>
<string name="settings_column_count_portrait">縱向模式下的列數</string>
<string name="settings_column_count_landscape">横向模式下的列數</string>
<string name="addFromPkpass">選擇 Passbook 檔案 (.pkpass)</string>
<string name="unsupportedFile">不支援此檔案</string>
<string name="generic_error_please_retry">抱歉,似乎出了點錯誤,請您再試一次...</string>
</resources>

View File

@@ -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.8.0" apply false
id("com.android.application") version "8.7.3" apply false
id("com.github.spotbugs") version "5.1.4" apply false
id("org.jetbrains.kotlin.android") version "2.1.0" apply false
}

View File

@@ -3,7 +3,7 @@ set -euo pipefail
IFS=$'\n\t'
### build.sh
### Builds Catima the same way rbtlog/IzzyOnDroid does for reproducible builds
### Builds Catima the same way F-Droid does for reproducible builds
if [ -z "${ANDROID_SDK_ROOT:-}" ]; then
echo "ANDROID_SDK_ROOT is not set, setting to $HOME/Android/Sdk";
@@ -25,11 +25,7 @@ echo "Starting build"
./gradlew clean assembleRelease
echo "Build finished (unsigned)"
flavourDirs=$(find app/build/outputs/apk/ -mindepth 1 -maxdepth 1 -type d)
for flavourDir in $flavourDirs; do
flavourName="$(basename "$flavourDir")"
echo "Your $flavourName flavour is at $flavourDir/release/app-$flavourName-release-unsigned.apk"
done
echo "Your build is at app/build/outputs/apk/release/app-release-unsigned.apk"
if [ -z "${KEYSTORE:-}" ]; then
echo "KEYSTORE not set, skipping signing..."
@@ -40,26 +36,16 @@ else
fi
apksigner_version="$(ls -1 "$HOME/Android/Sdk/build-tools/" | tail -n 1)"
cp app/build/outputs/apk/release/app-release-unsigned.apk app/build/outputs/apk/release/app-release.apk
"$HOME/Android/Sdk/build-tools/$apksigner_version/apksigner" sign -v --ks "$KEYSTORE" --ks-key-alias "$KEYSTORE_ALIAS" app/build/outputs/apk/release/app-release.apk
for flavourDir in $flavourDirs; do
flavourName="$(basename "$flavourDir")"
echo "Signing $flavourName flavour..."
cp "$flavourDir/release/app-$flavourName-release-unsigned.apk" "$flavourDir/release/app-$flavourName-release.apk"
"$HOME/Android/Sdk/build-tools/$apksigner_version/apksigner" sign -v --ks "$KEYSTORE" --ks-key-alias "$KEYSTORE_ALIAS" "$flavourDir/release/app-$flavourName-release.apk"
echo "Build finished (signed)"
echo "Your $flavourName flavour is at $flavourDir/release/app-$flavourName-release.apk"
done
shasumPath="$(pwd)/SHA256SUMS"
echo "" > "$shasumPath"
for flavourDir in $flavourDirs; do
pushd "$flavourDir/release/"
sha256sum -- *.apk >> "$shasumPath"
popd
done
echo "SHA256SUMS generated"
echo "Your SHA256SUMS are at SHA256SUMS"
echo "Build finished (signed)"
echo "Your build is at app/build/outputs/apk/release/app-release.apk"
fi
pushd app/build/outputs/apk/release/
sha256sum -- *.apk > SHA256SUMS
popd
echo "SHA256SUMS generated"
echo "Your SHA256SUMS is at app/build/outputs/apk/release/SHA256SUMS"

View File

@@ -6,8 +6,8 @@
3. Update `CHANGELOG.md` with the new version name and the release date
4. Update `app/build.gradle.kts` with the new `versionCode` and `versionName`
5. Create a commit for the new release: `git add CHANGELOG.md app/build.gradle.kts && git commit -m "Release Catima <VERSION>"`
6. Build the new .apks: `KEYSTORE=/path/to/keystore KEYSTORE_ALIAS=catima ./build.sh`
7. Upload `app/build/outputs/apk/gplay/release/app-gplay-release.apk` to Google Play Open Testing
6. Build a new .apk: `KEYSTORE=/path/to/keystore KEYSTORE_ALIAS=catima ./build.sh`
7. Upload the APK to Google Play Open Testing
8. Push the version update commit: `git push`
9. Create a new release on GitHub and attach the `app/build/outputs/apk/foss/release/app-foss-release.apk` and `SHA256SUMS` files
9. Create a new release on GitHub and attach the `app-release.apk` and `SHA256SUMS` files
10. After the release has been approved on Google Play Production, update the metadata there: `bundle exec fastlane supply --version_code <VERSION_CODE>`

View File

@@ -1 +0,0 @@
- Zlepšení zobrazení ikon archivu/hvězdiček

View File

@@ -1 +0,0 @@
- Cíl Android 15

View File

@@ -1 +0,0 @@
- Verbesserte Anzeige der Symbole Archiv/Favoriten

View File

@@ -1,3 +0,0 @@
- Ziel Android 15
- Die Tastatur verdeckt jetzt nicht mehr den "Speichern"-Button im Bearbeitungsbildschirm
- Einige pkpass-Dateien wurden nicht als pkpass erkannt (Unterstützung des Mime-Typs application/vnd-com.apple.pkpass)

View File

@@ -1,7 +1,7 @@
Schluss mit der Suche nach Kundenkarten aus Plastik beim Bezahlen im Geschäft oder Webshop.
<b>Speichere Barcodes mit der Kamera auf dein Gerät und vergiss deine Karten.</b>
<b>Speichere Barcodes mit der Kamera auf dein Gerät und vergesse deine Karten.</b>
Lass deine Geldbörse daheim oder schaffe zumindest Platz für die wichtigen Wertsachen.
Lass deine Geldbörse daheim, oder schaffe wenigstens viel Platz für die wichtigen Wertsachen.
Mit diesem unverzichtbaren Programm schaffst du Platz für Bargeld statt für nutzloses Plastik.
@@ -11,12 +11,12 @@ Mit diesem unverzichtbaren Programm schaffst du Platz für Bargeld statt für nu
- Importiere Karten und Codes aus Dateien, von Catima, FidMe, Loyalty Card Keychain, Stocard oder Voucher Vault.
- Erstelle ein Backup aller deiner Karten und übertrage diese auf ein neues Gerät.
- Teile Gutscheine, exklusive Angebote, Werbeaktionscodes oder Karten und sonstige Codes mit allen Apps.
- Dunkles Design und Barrierefreiheit für Nutzer mit Sehbehinderung.
- Dunkles Design und Barrierefreiheit für sehbehinderte Nutzer.
- Von der Freien-Software-Gemeinschaft für alle Menschen gemacht.
- Lokalisierte, menschliche Übersetzungen für mehr als 40 Sprachen.
- Kostenlos, unterstützt durch Gemeinschaftsbeiträge.
- Verwende, prüfe, ändere und teile die App, wie du willst; <i>mit allen</i>.
- Nicht nur freie und quelloffene Software. Eine freie, <i>Copylefted</i> Software-Kartenverwaltung (GPLv3+).
Vereinfache dein Leben und deine Einkäufe verliere nie wieder einen Beleg, eine Gutscheinkarte oder ein Flugticket.
Nimm deine Prämien und Boni mit und spare unterwegs.
Vereinfache dein Leben und deine Einkäufe, und verliere nie wieder einen Beleg, eine Gutscheinkarte oder ein Flugticket.
Habe deine Prämien und Boni immer bei dir, und spare unterwegs.

View File

@@ -1 +0,0 @@
- Improve archive/starred icon display

View File

@@ -1,3 +0,0 @@
- Target Android 15
- Fix keyboard covering save button in edit screen
- Fix some pkpass files not being detected as pkpass (application/vnd-com.apple.pkpass mime type support)

View File

@@ -1,3 +0,0 @@
- Lisasime võimaluse liikuda kaartide vahel helivaljuse nuppudega
- Parandasime Stocardi impordi vead
- Parandasime "Import on katkestatud" vea peale õnnestunud importi

View File

@@ -1,3 +0,0 @@
- Lisasime Passbooki failide (.pkpass) toe
- Parandasime läbipaistvate pdf-failide importimise
- Parandasime läbipaistvate pisipiltide kuvamist

View File

@@ -1 +0,0 @@
- Parandasime rakenduse kokkujooksmise vigase pkpass-faili avamisel

View File

@@ -1 +0,0 @@
- Parandasime arhiveeritud/lemmik ikoonide kuvamise

View File

@@ -1,3 +0,0 @@
- Alusplatvorm on nüüd Android 15
- Parandasime olukorra, kus klahvistik kattis muutmisvaates salvestusnupu
- Parandasime olukorra, kus mõned pkpass failid jäid tuvastamata (application/vnd-com.apple.pkpass mime-tüüpi tugi)

View File

@@ -1 +0,0 @@
- Parandasime erinevad TalkBacki vead

View File

@@ -1 +0,0 @@
- Võtsime kasutusele Material You kujunduskeele

View File

@@ -1 +0,0 @@
- Corriger le retour à la ligne sur la fenêtre d'ajout

View File

@@ -1,4 +1,2 @@
- Modifie la colonne par défaut sur les écrans larges à 4
- Modifier la colonne par défaut sur les écrans larges à 4
- Permet de surcharger le nombre de colonnes pour le portrait et le paysage dans les paramètres
- Conserve le filtre de recherche de l'écran principal lors de la rotation de l'écran ou de l'ouverture d'une carte
- Limite la longueur maximale de l'affichage des notes sur l'écran principal

View File

@@ -1,3 +1 @@
- Ajoute le support des fichiers Cartes / Passbook (.pkpass)
- Corrige l'import des fiches PDF transparents
- Améliorer l'affichage des miniatures transparentes

View File

@@ -1 +0,0 @@
- Correction d'un crash lors de l'ouverture de fichiers pkpass invalides

View File

@@ -1 +0,0 @@
- Améliorer l'affichage des icônes d'archive/étoile

View File

@@ -1 +0,0 @@
- mellora da aparencia da icona arquivar/estrela

View File

@@ -1,3 +0,0 @@
- versión obxectivo Android 15
- solución a teclado que tapa o botón gardar na pantalla de edición
- solución a que non detectaba algúns ficheiros .pkpass como tales (compatibilidade co tipo mime application/vnd-com.apple.pkpass)

View File

@@ -1,4 +0,0 @@
- mellora na xestión dos grupos
- pódense recortar as imaxes
- solución da perda de datos da imaxe ao gardar despois de rotar na edición
- pódese poñer unha imaxe persoal como icona da tarxeta

View File

@@ -1,2 +0,0 @@
- nova disposición da pantalla principal
- arranxo do tamaño da parte inferior cando se entraba e saía de pantalla completa

View File

@@ -1,2 +0,0 @@
- Engadir Catima a Quick Access Device Controls (https://developer.android.com/guide/topics/ui/device-control)
- Arranxo de algúns grupos que non se mostran correctamente na pantalla de xestión dos grupos

View File

@@ -1,3 +0,0 @@
- arranxo da borrosidade nas iconas de letras na pantalla principal
- arranxo da desaparición puntual de iconas despois da selección
- arranxo das iconas na barra de estado non visibles en Android 5

View File

@@ -1 +0,0 @@
- solución ao problema na tarxeta compartir

View File

@@ -1,2 +0,0 @@
- engadida compatibilidade con CODE 93
- arranxos menores e melloras

View File

@@ -1,4 +0,0 @@
- solución a crear múltiples entradas a premer varias veces o botón gardar
- menor tamaño da cabeceira das tarxetas en ocultar detalles para que se vexan aínda máis tarxetas
- reorganización da pantalla de edición
- mellora do contraste da icona da estrela na pantalla principal

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -1,3 +0,0 @@
- Iespēja pārslēgties starp kartēm ar skaļuma pogām
- Salabota Stocard ievietošana
- Novērsta ziņojuma "Ievietošana atcelta" parādīšanās pēc sekmīgas ievietošanas

View File

@@ -1 +0,0 @@
- Novērsta avārija, kad tika atvērtas nederīgas pkpass datnes

View File

@@ -1 +0,0 @@
- Uzlabota arhivēšanas/izlasē ikonas attēlošana

View File

@@ -1,3 +0,0 @@
- Android 15 atbalsts
- Labošanas ekrānā novērsta saglabāšanas pogas aizsegšana ar tastatūru
- Novērsta atsevišķu pkpass datņu neatpazīšana kā pkpass (application/vnd-com.apple.pkpass MIME veida atbalsts)

View File

@@ -1 +1 @@
Svītrkodiem, biedru kartēm, lojalitātes programmām, kuponiem un biļetēm.
Jūsu svītrkodiem, biedru kartēm, lojalitātes programmām, kuponiem un biļetēm.

View File

@@ -1 +0,0 @@
- Улучшено отображение значка архивированных/избранных карт

View File

@@ -1,3 +0,0 @@
- Ориентация на Android 15
- Исправлено перекрывание клавиатурой кнопки сохранения на экране редактирования
- Исправлено нераспознавание некоторых файлов pkpass (поддержка mime-типа application/vnd-com.apple.pkpass)

View File

@@ -1 +0,0 @@
— Покращено відображення піктограм архіву/зірочки

View File

@@ -1,3 +0,0 @@
- Цільова версія Android 15
— Виправлено клавіатуру, яка закриває кнопку збереження на екрані редагування
— Виправлено деякі файли pkpass, які не виявлялися як pkpass (підтримка типу mime у додатку/vnd-com.apple.pkpass)

View File

@@ -1 +0,0 @@
- Sửa lỗi văng khi mở tệp tin pkpass không hợp lệ

View File

@@ -1 +0,0 @@
- 改进存档/收藏图标显示

View File

@@ -1,3 +0,0 @@
- 以 Android 15API 级别35为目标平台
- 修复编辑屏中键盘遮住保存按钮的问题
- 修复一些 pkpass 文件未被检测未pkpass 的问题 application/vnd-com.apple.pkpass mime 类型支持)

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -1,7 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=7a00d51fb93147819aab76024feece20b6b84e420694101f276be952e08bef03
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
distributionSha256Sum=f397b287023acdba1e9f6fc5ea72d22dd63669d59ed4a289a29b1a76eee151c6
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME

3
gradlew vendored
View File

@@ -86,7 +86,8 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum