From 6cbbeb1dbf0d0093b7936ca38d13537a2c196f03 Mon Sep 17 00:00:00 2001 From: IlyaZar Date: Sat, 4 Jul 2026 20:43:46 +0200 Subject: [PATCH 1/4] feat keep card image zoom in catima --- app/src/main/AndroidManifest.xml | 3 + .../cardview/LoyaltyCardImageActivity.kt | 207 ++++++++++++++++++ .../cardview/LoyaltyCardViewActivity.java | 49 ++--- app/src/main/res/values/strings.xml | 5 +- 4 files changed, 226 insertions(+), 38 deletions(-) create mode 100644 app/src/main/java/protect/card_locker/cardview/LoyaltyCardImageActivity.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ed2c6f41ff..8c04a77ab1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -101,6 +101,9 @@ android:name=".cardview.LoyaltyCardViewActivity" android:exported="true" android:theme="@style/AppTheme.NoActionBar" /> + R.string.thumbnailDescription + ImageLocationType.front -> R.string.frontImageDescription + ImageLocationType.back -> R.string.backImageDescription + } + } + + companion object { + const val BUNDLE_ID = "id" + const val BUNDLE_IMAGE_LOCATION_TYPE = "imageLocationType" + + @JvmStatic + fun createIntent( + context: Context, + loyaltyCardId: Int, + imageLocationType: ImageLocationType + ): Intent { + return Intent(context, LoyaltyCardImageActivity::class.java) + .putExtra(BUNDLE_ID, loyaltyCardId) + .putExtra(BUNDLE_IMAGE_LOCATION_TYPE, imageLocationType.name) + } + } +} + +@Composable +fun LoyaltyCardImageScreen( + bitmap: Bitmap, + contentDescription: String, + onBack: () -> Unit, +) { + var scale by remember { mutableStateOf(1F) } + var offset by remember { mutableStateOf(Offset.Zero) } + var size by remember { mutableStateOf(IntSize.Zero) } + val zoomState = rememberTransformableState { _, zoomChange, panChange, _ -> + val nextScale = (scale * zoomChange).coerceIn(1F, MAX_IMAGE_SCALE) + scale = nextScale + offset = if (nextScale == 1F) { + Offset.Zero + } else { + (offset + panChange).clampTo(size, nextScale) + } + } + + Box( + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.background) + .testTag("card_image_zoom") + ) { + Image( + bitmap = bitmap.asImageBitmap(), + contentDescription = contentDescription, + contentScale = ContentScale.Fit, + modifier = Modifier + .fillMaxSize() + .onSizeChanged { size = it } + .pointerInput(bitmap) { + detectTapGestures( + onDoubleTap = { + scale = 1F + offset = Offset.Zero + } + ) + } + .transformable(zoomState) + .graphicsLayer { + scaleX = scale + scaleY = scale + translationX = offset.x + translationY = offset.y + } + .testTag("card_image") + ) + + IconButton( + onClick = onBack, + modifier = Modifier + .align(Alignment.TopStart) + .statusBarsPadding() + .padding(8.dp) + .testTag("card_image_back") + ) { + Icon( + imageVector = Icons.AutoMirrored.Filled.ArrowBack, + contentDescription = stringResource(R.string.back) + ) + } + } +} + +private fun Offset.clampTo(size: IntSize, scale: Float): Offset { + if (size.width == 0 || size.height == 0) { + return this + } + + val maxX = size.width * (scale - 1F) / 2F + val maxY = size.height * (scale - 1F) / 2F + return Offset( + x = x.coerceIn(-maxX, maxX), + y = y.coerceIn(-maxY, maxY) + ) +} + +private const val MAX_IMAGE_SCALE = 5F diff --git a/app/src/main/java/protect/card_locker/cardview/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/cardview/LoyaltyCardViewActivity.java index 077b5029ab..8b09312826 100644 --- a/app/src/main/java/protect/card_locker/cardview/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/cardview/LoyaltyCardViewActivity.java @@ -1,6 +1,5 @@ package protect.card_locker.cardview; -import android.content.ActivityNotFoundException; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Intent; @@ -34,7 +33,6 @@ import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; -import androidx.core.content.FileProvider; import androidx.core.graphics.BlendModeColorFilterCompat; import androidx.core.graphics.BlendModeCompat; import androidx.core.graphics.ColorUtils; @@ -44,7 +42,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.snackbar.Snackbar; -import java.io.File; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.nio.charset.Charset; @@ -136,46 +133,28 @@ public void onMainImageTap() { return; } - // If this is an image, open it in the gallery. - openImageInGallery(imageType); + openImage(imageType); } - private void openImageInGallery(LoyaltyCardImageType imageType) { - File file = null; - + private void openImage(LoyaltyCardImageType imageType) { switch (imageType) { case NONE: + case BARCODE: return; case ICON: - file = Utils.retrieveCardImageAsFile(this, loyaltyCardId, ImageLocationType.icon); - break; + startImageActivity(ImageLocationType.icon); + return; case IMAGE_FRONT: - file = Utils.retrieveCardImageAsFile(this, loyaltyCardId, ImageLocationType.front); - break; + startImageActivity(ImageLocationType.front); + return; case IMAGE_BACK: - file = Utils.retrieveCardImageAsFile(this, loyaltyCardId, ImageLocationType.back); - break; - case BARCODE: - Toast.makeText(this, R.string.barcodeLongPressMessage, Toast.LENGTH_SHORT).show(); + startImageActivity(ImageLocationType.back); return; } + } - // Do nothing if there is no file - if (file == null) { - Toast.makeText(this, R.string.failedToRetrieveImageFile, Toast.LENGTH_SHORT).show(); - return; - } - - try { - Intent intent = new Intent(Intent.ACTION_VIEW) - .setDataAndType(FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID, file), "image/*") - .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - startActivity(intent); - } catch (ActivityNotFoundException e) { - // Display a toast message if an image viewer is not installed on device - Toast.makeText(this, R.string.failedLaunchingPhotoPicker, Toast.LENGTH_SHORT).show(); - e.printStackTrace(); - } + private void startImageActivity(ImageLocationType imageLocationType) { + startActivity(LoyaltyCardImageActivity.createIntent(this, loyaltyCardId, imageLocationType)); } @Override @@ -291,7 +270,7 @@ protected void onCreate(Bundle savedInstanceState) { binding.iconContainer.setOnClickListener(view -> { if (loyaltyCard.getImageThumbnail(this) != null) { - openImageInGallery(LoyaltyCardImageType.ICON); + openImage(LoyaltyCardImageType.ICON); } else { Toast.makeText(LoyaltyCardViewActivity.this, R.string.icon_header_click_text, Toast.LENGTH_LONG).show(); } @@ -887,9 +866,9 @@ private void updateMainImageAccessibility() { int accessibilityClickAction; LoyaltyCardImageType currentImageType = cardNavigator.getCurrent(); if (currentImageType == LoyaltyCardImageType.IMAGE_FRONT) { - accessibilityClickAction = R.string.openFrontImageInGalleryApp; + accessibilityClickAction = R.string.zoomFrontImage; } else if (currentImageType == LoyaltyCardImageType.IMAGE_BACK) { - accessibilityClickAction = R.string.openBackImageInGalleryApp; + accessibilityClickAction = R.string.zoomBackImage; } else { accessibilityClickAction = R.string.moveBarcodeToTopOfScreen; } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3cbdea0793..d30b33ac59 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -219,7 +219,6 @@ Show info Update balance Failed to retrieve image file - Only images can be opened in the gallery app Name Most recently used Valid from @@ -271,8 +270,8 @@ Switch to front image Switch to back image Switch to barcode - Open front image in image viewer app - Open back image in image viewer app + Zoom front image + Zoom back image Set barcode height Donate Long press to edit thumbnail From 89c97c42715c24589b518f3edabb9d8abf4a111a Mon Sep 17 00:00:00 2001 From: IlyaZar Date: Sat, 4 Jul 2026 20:43:51 +0200 Subject: [PATCH 2/4] test prove image taps open the viewer --- .../LoyaltyCardViewActivityTest.java | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index d43d788938..aec142a9c7 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -77,6 +77,7 @@ import java.util.Date; import java.util.List; +import protect.card_locker.cardview.LoyaltyCardImageActivity; import protect.card_locker.cardview.LoyaltyCardViewActivity; @RunWith(RobolectricTestRunner.class) @@ -1374,6 +1375,92 @@ public void checkBarcodeFullscreenWorkflow() { database.close(); } + @Test + public void checkImageViewerWorkflow() throws IOException { + final Context context = ApplicationProvider.getApplicationContext(); + SQLiteDatabase database = getWritableEmptyDatabase(context); + + int cardId = (int) DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0); + Bitmap frontBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.circle); + Bitmap backBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_done); + Utils.saveCardImage(context, frontBitmap, cardId, ImageLocationType.front); + Utils.saveCardImage(context, backBitmap, cardId, ImageLocationType.back); + + try { + ActivityController activityController = createActivityWithLoyaltyCard(false, cardId); + AppCompatActivity activity = (AppCompatActivity) activityController.get(); + + activityController.start(); + activityController.visible(); + activityController.resume(); + + ImageView mainImage = activity.findViewById(R.id.main_image); + ImageButton nextButton = activity.findViewById(R.id.main_right_button); + + assertEquals(context.getString(R.string.frontImageDescription), mainImage.getContentDescription()); + + mainImage.performClick(); + shadowOf(getMainLooper()).idle(); + assertStartedImageActivity(activity, cardId, ImageLocationType.front); + + nextButton.performClick(); + shadowOf(getMainLooper()).idle(); + assertEquals(context.getString(R.string.backImageDescription), mainImage.getContentDescription()); + + mainImage.performClick(); + shadowOf(getMainLooper()).idle(); + assertStartedImageActivity(activity, cardId, ImageLocationType.back); + } finally { + Utils.saveCardImage(context, null, cardId, ImageLocationType.front); + Utils.saveCardImage(context, null, cardId, ImageLocationType.back); + database.close(); + } + } + + @Test + public void checkThumbnailImageViewerWorkflow() throws IOException { + final Context context = ApplicationProvider.getApplicationContext(); + SQLiteDatabase database = getWritableEmptyDatabase(context); + + int cardId = (int) DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0); + Bitmap thumbnailBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.circle); + Utils.saveCardImage(context, thumbnailBitmap, cardId, ImageLocationType.icon); + + try { + ActivityController activityController = createActivityWithLoyaltyCard(false, cardId); + AppCompatActivity activity = (AppCompatActivity) activityController.get(); + + activityController.start(); + activityController.visible(); + activityController.resume(); + + LinearLayout iconContainer = activity.findViewById(R.id.icon_container); + + iconContainer.performClick(); + shadowOf(getMainLooper()).idle(); + assertStartedImageActivity(activity, cardId, ImageLocationType.icon); + } finally { + Utils.saveCardImage(context, null, cardId, ImageLocationType.icon); + database.close(); + } + } + + private void assertStartedImageActivity( + AppCompatActivity activity, + int cardId, + ImageLocationType imageLocationType + ) { + Intent intent = shadowOf(activity).getNextStartedActivity(); + + assertNotNull(intent); + assertEquals(LoyaltyCardImageActivity.class.getName(), intent.getComponent().getClassName()); + assertEquals(cardId, intent.getIntExtra(LoyaltyCardImageActivity.BUNDLE_ID, 0)); + assertEquals( + imageLocationType.name(), + intent.getStringExtra(LoyaltyCardImageActivity.BUNDLE_IMAGE_LOCATION_TYPE) + ); + } + @Test public void checkNoBarcodeFullscreenWorkflow() { final Context context = ApplicationProvider.getApplicationContext(); From 27bcb6c243412341d8079f9024b029527156b670 Mon Sep 17 00:00:00 2001 From: IlyaZar Date: Sat, 4 Jul 2026 20:43:55 +0200 Subject: [PATCH 3/4] refactor drop old gallery strings --- app/src/main/res/values-ar/strings.xml | 3 --- app/src/main/res/values-be/strings.xml | 3 --- app/src/main/res/values-bg/strings.xml | 3 --- app/src/main/res/values-bn-rIN/strings.xml | 3 --- app/src/main/res/values-bs/strings.xml | 3 --- app/src/main/res/values-ca/strings.xml | 3 --- app/src/main/res/values-cs/strings.xml | 3 --- app/src/main/res/values-de/strings.xml | 3 --- app/src/main/res/values-el-rGR/strings.xml | 3 --- app/src/main/res/values-eo/strings.xml | 3 --- app/src/main/res/values-es-rAR/strings.xml | 3 --- app/src/main/res/values-es/strings.xml | 3 --- app/src/main/res/values-et/strings.xml | 3 --- app/src/main/res/values-fa/strings.xml | 3 --- app/src/main/res/values-fi/strings.xml | 3 --- app/src/main/res/values-fr/strings.xml | 3 --- app/src/main/res/values-gl/strings.xml | 3 --- app/src/main/res/values-hi/strings.xml | 3 --- app/src/main/res/values-hr/strings.xml | 3 --- app/src/main/res/values-hu/strings.xml | 3 --- app/src/main/res/values-in-rID/strings.xml | 3 --- app/src/main/res/values-it/strings.xml | 3 --- app/src/main/res/values-ja/strings.xml | 3 --- app/src/main/res/values-kn/strings.xml | 1 - app/src/main/res/values-ko/strings.xml | 3 --- app/src/main/res/values-lt/strings.xml | 3 --- app/src/main/res/values-lv/strings.xml | 3 --- app/src/main/res/values-nb-rNO/strings.xml | 3 --- app/src/main/res/values-nl/strings.xml | 3 --- app/src/main/res/values-peo/strings.xml | 3 --- app/src/main/res/values-pl/strings.xml | 3 --- app/src/main/res/values-pt-rBR/strings.xml | 3 --- app/src/main/res/values-pt-rPT/strings.xml | 3 --- app/src/main/res/values-pt/strings.xml | 3 --- app/src/main/res/values-ro-rRO/strings.xml | 3 --- app/src/main/res/values-ru/strings.xml | 3 --- app/src/main/res/values-sk/strings.xml | 3 --- app/src/main/res/values-sl/strings.xml | 3 --- app/src/main/res/values-sr/strings.xml | 3 --- app/src/main/res/values-sv/strings.xml | 3 --- app/src/main/res/values-ta/strings.xml | 3 --- app/src/main/res/values-tr/strings.xml | 3 --- app/src/main/res/values-uk/strings.xml | 3 --- app/src/main/res/values-vi/strings.xml | 3 --- app/src/main/res/values-zh-rCN/strings.xml | 3 --- app/src/main/res/values-zh-rTW/strings.xml | 3 --- 46 files changed, 136 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 38812ff294..029bbb53f4 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -220,7 +220,6 @@ السابق التالي فشل في استخراج ملف الصورة - يمكن فتح صور فقط في تطبيق معرض الصور ثبت متصفح ويب أولاً مرحبًا بك في كاتيما كم أنفقت أو استلمت؟ @@ -243,7 +242,6 @@ اقرأ بطاقات كاتيما حقوق النشر © 2019–%d Sylvia van Os والمساهمون حقوق النشر © Sylvia van Os والمساهمون - افتح الصورة الأمامية في تطبيق المعرض إظهار الاسم أسفل الصورة المصغرة إظهار الصلاحية مشاهدة حية @@ -259,7 +257,6 @@ التبديل إلى الصورة الأمامية سيظل يتعين على التطبيقات طلب الإذن لمنحها حق الوصول ضبط ارتفاع الباركود - فتح الصورة الخلفية في تطبيق المعرض السماح للتطبيقات الأخرى بالوصول إلى بياناتي تبرّع عرض البطاقات المؤرشفة diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index b780f05327..c6d6b6cf5d 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -163,7 +163,6 @@ Паказаць інфармацыю Абнавіць баланс Не ўдалося атрымаць файл відарысу - У галерэі можна адкрываць толькі відарысы Назва Частата выкарыстання Дзейнічае ад @@ -203,7 +202,6 @@ Дзейнічае з: %s Вышыня Пераключыцца на пярэдні відарыс - Адкрыць задні відарыс у галерэі Задаць вышыню штрыхкода Ахвяраваць Доўгі націск для рэдагавання мініяцюры @@ -288,7 +286,6 @@ Паведаміць пра памылку Не атрымалася знайсці праграму для галерэі, якая падтрымліваецца Гэты файл не падтрымліваецца - Адкрыць пярэдні відарыс у галерэі Поле не павінна быць пустым Рэкамендуецца сканаванне Не атрымалася прачытаць файл diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 597a57544f..a48877bad7 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -198,7 +198,6 @@ Следваща Първо инсталирайте уеб браузър Добре дошли при Катима - В приложението галерия могат да бъдат отваряни само изображения Не е възможно извличане на изображение За да сканирате щрихкодове с Catima е необходим достъп до камерата. За да промените разрешението докоснете тук. Колко е похарчено или получено? @@ -218,8 +217,6 @@ Показване на предната страна Показване на задната страна Показване на щрихкода - Отваряне на изображението на предната страна в приложение за преглед за изображения - Отваряне на изображението на задната страна в приложение за преглед за изображения Задаване на височина на щрихкода Даряване Задръжте, за да промените миниатюрата diff --git a/app/src/main/res/values-bn-rIN/strings.xml b/app/src/main/res/values-bn-rIN/strings.xml index 07701a49ec..019e3d1969 100644 --- a/app/src/main/res/values-bn-rIN/strings.xml +++ b/app/src/main/res/values-bn-rIN/strings.xml @@ -193,7 +193,6 @@ অন্ধকার থিমের জন্য খাঁটি কালো পটভূমি আইকন সেট করুন ব্যালেন্স আপডেট করুন - গ্যালারি অ্যাপে শুধুমাত্র ছবি খোলা যাবে Weblate-এ Google Play-তে একটি কার্ড নির্বাচন করুন @@ -225,8 +224,6 @@ পিছনের ছবিটিতে সুইচ করুন সামনের ছবিটিতে সুইচ করুন বারকোডে সুইচ করুন - সামনের ছবিটি গ্যালারি অ্যাপে খুলুন - পিছনের ছবিটি গ্যালারি অ্যাপে খুলুন বারকোডের উচ্চতা সেট করুন দীর্ঘক্ষন টাচ করে থাম্বনেইল এডিট করবেন ব্যালান্স দেখান diff --git a/app/src/main/res/values-bs/strings.xml b/app/src/main/res/values-bs/strings.xml index 98904c0be0..10734d7467 100644 --- a/app/src/main/res/values-bs/strings.xml +++ b/app/src/main/res/values-bs/strings.xml @@ -174,7 +174,6 @@ Odaberite svoj izvoz iz Privjeska za ključeve s karticom vjernosti za uvoz.\nKreirajte ga iz menija Uvoz/Izvoz u Privjesku za ključeve s karticom vjernosti pritiskom na Izvoz. Odaberite izvoz iz Voucher Vaulta za uvoz. \nKreirajte ga pritiskom na Izvoz u Voucher Vaultu. Prebaci na barkod - Otvorite prednju sliku u aplikaciji za pregled slika Prebaci na sliku iz pozadine Prebaci na prednju sliku Visina @@ -213,7 +212,6 @@ Zasluge Historija verzija Vrijedi od - U aplikaciji galerija mogu se otvoriti samo slike Neuspjevam preuzimanje slikovne datoteke Ažuriraj stanje Prikaži informacije @@ -241,7 +239,6 @@ Naziv grupe ne smije biti prazan Grupa ažurirana Izbrisati grupu? - Otvori sliku pozadi u aplikaciji za pregled slika Postavi visinu barkoda Donirajte Dugo pritisnite za uređivanje sličice diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 27af5d8c65..2c1f84c15f 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -72,7 +72,6 @@ No Ordenar Ha fallat l\'obtenció del fitxer d\'imatge - Les imatges només es poden obrir desde la app galeria Privacitat Eliminar %d targeta @@ -167,7 +166,6 @@ Afegeix primer una targeta No s\'ha pogut trobar aquesta targeta No s\'ha pogut analitzar l\'URI d\'importació - Obrir la imatge frontal a l\'app de galeria Utilitza els botons de volum per canviar la targeta que es mostra Ha canviat el valor ID. Vol actualitzar també el codi de barres per uter utilitzar el mateix valor? Preferides @@ -183,7 +181,6 @@ al Github Si vol demanar suport tècnic, inclogui la següent informació: Nou balanç: %s - Obrir la imatge posterior a l\'app de la galeria Perdoni, alguna cosa ha anat malament, siusplau torni-ho a provar... 6 Utilitzar la imatge posterior diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index bd5d821a28..1efab1439f 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -203,7 +203,6 @@ Následující Nejprve nainstalujte webový prohlížeč Vítejte v Catima - V aplikaci pro galerii mohou být otevírány pouze obrázky Nepodařilo se získat soubor obrázku Nepodařilo se získat přístup k fotoaparátu Importovat karty @@ -223,8 +222,6 @@ Přepnout na přední obrázek Přepnout na zadní obrázek Přepnout na čárový kód - Otevřít přední obrázek v aplikaci prohlížeče obrázků - Otevřít zadní obrázek v aplikaci prohlížeče obrázků Nastavit výšku čárového kódu Přispět Dlouhým stisknutím miniaturu upravíte diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 4b98c99359..263151695e 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -197,7 +197,6 @@ Nächste Bitte installiere zuerst einen Webbrowser Willkommen bei Catima - In der Galerie können nur Bilder geöffnet werden Bilddatei konnte nicht abgerufen werden Wie viel hast du ausgegeben oder erhalten? Kein Zugriff auf die Kamera @@ -215,8 +214,6 @@ Beliebiges Datum Zum Bearbeiten des Vorschaubildes lang drücken Zum Barcode wechseln - Vorderseite in Bildbetrachter öffnen - Rückseite in Bildbetrachter öffnen Höhe Zur Vorderseite wechseln Zur Rückseite wechseln diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 8a533b55e9..01bd549165 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -200,7 +200,6 @@ Προηγούμενη Επόμενη Ενημέρωση υπολοίπου - Μόνο εικόνες μπορούν να ανοιχτούν στην εφαρμογή φωτογραφιών Για να σκανάρετε γραμμωτούς κώδικες, θα χρειαστεί πρόσβαση στην κάμερα από το Catima. Πατήστε εδώ για να δώσετε πρόσβαση. Εισαγωγή καρτών Εισάγετε ποσό @@ -219,11 +218,9 @@ Μετάβαση σε γραμμωτό κώδικα Ισχύει από: %s Διαβάστε τις κάρτες Catima - Ανοίξτε την οπίσθια εικόνα στη συλλογή εικόνων Διάβασε τις Κάρτες σου Catima και όλες τους τις λεπτομέρειες, συμπεριλαμβανομένων των σημειώσεων και των εικόνων Δωρεά Πατήστε παρατεταμένα για επεξεργασία του εικονιδίου - Ανοίξτε την εμπρόσθια εικόνα στη συλλογή εικόνων Δικαίωμα ανάγνωσης του χώρου αποθήκευσης απαραίτητο για αυτήν την ενέργεια… Ισχύει από Οποιαδήποτε ημερομηνία diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 427b3d9012..3b0c7dbca2 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -165,7 +165,6 @@ Importi datumojn de Importi el Catima Ĝisdatigi saldon - Nur bildoj povas esti malfermitaj en la galeria apo Nomo Plej laste uzitaj Dato de eksvalidiĝo @@ -180,8 +179,6 @@ Nova saldo: %s Iam ajn Ŝanĝi al antaŭa bildo - Malfermi la antaŭan bildon en galeria apo - Malfermi la malantaŭan bildon en galeria apo Montri nomon sub la bildeto Montri noton Kartoj diff --git a/app/src/main/res/values-es-rAR/strings.xml b/app/src/main/res/values-es-rAR/strings.xml index 709d0d04ca..58a59ce8e4 100644 --- a/app/src/main/res/values-es-rAR/strings.xml +++ b/app/src/main/res/values-es-rAR/strings.xml @@ -182,7 +182,6 @@ Seleccionar color Ordenar Hecho posible por: %s - Solo se puede abrir imágenes en la aplicación de galería Si No Ingresa la contraseña @@ -236,8 +235,6 @@ Cambiar a imagen frontal Cambiar a imagen trasera Cambiar a código de barras - Abrir imagen frontal en aplicación para ver imágenes - Abrir imagen trasera en galería de fotos Definir altura de código de barras Mostrar nombre de la imagen bajo su miniatura Mostrar saldo diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index d1eb90611e..bcdca1e584 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -205,7 +205,6 @@ Estrellado No se pudo recuperar el archivo de imagen - Solo se pueden abrir imágenes en la aplicación de galería ¿Cuánto has gastado o recibido? Saldo actual: %s Para escanear códigos de barras, Catima necesitará acceso a su cámara. Toque aquí para cambiar los ajustes de su permiso. @@ -222,8 +221,6 @@ Válido desde: %s Alto Cambiar a imagen frontal - Abrir imagen frontal en la aplicación de la galería - Abrir imagen trasera en la aplicación de visor de imagen Ajustar la altura del código de barras Donar Cambiar a código de barras diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 6d39ba3f1b..8ddec40f12 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -118,7 +118,6 @@ Kas uuendame triipkoodi väärtust? Jah Ei - Galeriirakenduses saad avada vaid pilte Viimati kasutatud Aegumine …tagurpidi järjekorras @@ -230,8 +229,6 @@ Vaata esikülje pilti Vaata tagakülje pilti Vaata triipkoodi - Ava esikülje pilt pildivalijas - Ava tagakülje pilt pildivalijas Määra triipkoodi kõrgus Toeta rahaliselt Pisipildi muutmiseks vajuta pikalt diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 2a882c4c32..b350a51940 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -213,7 +213,6 @@ پیشین چراغ‌قوه را خاموش کنید به‌روزرسانی موجودی - تنها عکس می‌تواند در گالری برنامه باز شود نام به‌تازگی استفاده‌شده انقضا @@ -221,7 +220,6 @@ اگر می‌خواهید پشتیبانی درخواست کنید، اطلاعات زیر را پر کنید: برچیدن بایگانی به عکس پشتِ‌سر جابه‌جا کنید - عکس پشتِ‌سر را در برنامه‌ی نمایشگر تصویر باز کنید ارتفاع بارگد را بگمارید کمک مالی کنید برای ویرایش قاب پیش‌نمایه فشار داده و نگه‌دارید @@ -265,7 +263,6 @@ نخست یک مرورگر وب نصب کنید چقدر خرج یا دریافت کردید؟ به بارکد جابه‌جا کنید - عکس روبه‌رو را در برنامه‌ی گالری باز کنید یک کارت به روشی متفاوت بیافزایید عکس بگیرید ۷ diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index a427e759c0..46e275d847 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -200,7 +200,6 @@ Tervetuloa Catimaan Kuinka paljon kulutit tai tienasit? Syötä summa - Vain kuvia on mahdollista avata galleriasovelluksessa Arkistoi Tuo kortteja Kuvatiedoston noutaminen epäonnistui @@ -223,14 +222,12 @@ Korkeus Vaihda etukuvaan Vaihda viivakoodiin - Avaa etukuva kuvankatselusovelluksessa Välttämätön, jotta jotkin skannerit toimivat Poistaa näytön aikakatkaisun korttia katsellessa Poistaa näyttölukituksen käytöstä korttia katsellessa Salli muiden sovellusten käyttää omaa dataa Vähentää akun käyttöä OLED-näytöillä Vaihda takakuvaan - Avaa takakuva kuvankatselusovelluksessa Aseta viivakoodin korkeus Pitkä painallus pikkukuvan muokkaamiseksi Näytä nimi pikkukuvan alapuolella diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index e4e8ee3eae..089e5252ae 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -203,7 +203,6 @@ Précédent Installez d\'abord un navigateur web Bienvenue dans Catima - Seules les images peuvent être ouvertes dans l’application galerie Impossible de récupérer le fichier image Solde actuel : %s Entrez le montant @@ -223,8 +222,6 @@ Passer à l\'image avant Passer à l\'image arrière Passer au code barre - Ouvrir l\'image du recto dans l\'application de visualisation des images - Ouvrir l\'image du verso dans l\'application de visualisation des images Définir la hauteur du code-barres Faire un don Appuyez longuement pour modifier la vignette diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 2c69a46e3d..6dde453c0d 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -150,7 +150,6 @@ Ver info Actualizar saldo Fallou a obtención do ficheiro de imaxe - Só imaxes que se abren na app de galería Nome Usadas recentemente Caducidade @@ -194,8 +193,6 @@ Altura Cambiar á imaxe frontal Cambiar á imaxe posterior - Abrir imaxe frontal no visor de imaxes - Abrir imaxe posterior no visor de imaxes Establecer altura do código de barras Pulsación longa para editar a miniatura Mostrar nome debaixo da miniatura diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 376456c5ce..55fad50387 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -212,7 +212,6 @@ वर्जन तिहास पुरालेख/संग्रहित (Archive) कार्ड संग्रहीत (Archived) - गैलरी ऐप में केवल छवियां ही खोली जा सकती हैं अनुज्ञप्ति (लाइसेंस) स्रोत रिपोजिटरी यदि आप सहायता का अनुरोध करना चाहते हैं, तो निम्नलिखित जानकारी शामिल करें: @@ -245,8 +244,6 @@ सामने वाली छवि पर स्विच करें पिछली छवि पर स्विच करें बारकोड पर स्विच करें - इमेज दर्शक सामने वाली इमेज खोलें - पिछली इमेज खोलें बारकोड ऊंचाई सेट करें छोटी छवि (थंबनेल) संपादित करने के लिए देर तक दबाएँ अपने कार्ड पर आईडी नंबर या टेक्स्ट दर्ज करें diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index a7217bd56b..fe4a8cd2be 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -128,8 +128,6 @@ Prebaci na prednju sliku Prebaci na stražnju sliku Prebaci na crtični kod - Otvori prednju sliku u aplikaciji prikazivača slika - Otvori stražnju sliku u aplikaciji prikazivača slika Postavi visinu crtičnog koda %d odabrana @@ -159,7 +157,6 @@ Odaberi tvoj izvoz iz Voucher Vault za uvoz. \nStvori ga u aplikaciji Voucher Vault pritiskom na „Izvoz”. Neuspjelo dohvaćanje slikovne datoteke Licenca - U aplikaciji galerije se mogu otvoriiti samo slike Izvorni repozitorij na GitHubu na stranici Google Play diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index fe394dcfa9..0af5cbe50e 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -202,7 +202,6 @@ Új egyenleg: %s Nem sikerült hozzáférni a kamerához Nem sikerült lekérni a képfájlt - Csak képek nyithatók meg a galéria alkalmazásban Kártya archiválása megszüntetve Üdvözöljük a Catimában Egyenleg frissítése @@ -218,8 +217,6 @@ Hátulnézeti képre váltás Vonalkódra váltás Adományozás - Hátulnézeti kép megnyitása a galéria alkalmazásban - Elölnézeti kép megnyitása a galéria alkalmazásban Vonalkód magasságának megadása Hosszan nyomja meg a miniatűr szerkesztéséhez Megjegyzés megjelenítése diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 7c726f0751..7ef4baa741 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -189,7 +189,6 @@ Arsip Kartu diarsipkan Gagal mengambil file gambar - Hanya gambar yang dapat dibuka di aplikasi galeri Ekstrak Kartu tidak diarsipkan Opsi @@ -212,8 +211,6 @@ Ubah ke depan gambar Ubah ke belakang gambar Ubah ke kode batang - Buka gambar depan di aplikasi penampil gambar - Buka gambar di aplikasi penampil gambar Atur tinggi kode batang Donasi Tunjukkan validitas diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index dfcb8c30e3..4d0797672f 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -204,7 +204,6 @@ Benvenuti su Catima Installa prima un browser web Impossibile ottenere il file dell\'immagine - Si possono aprire solo immagini dell\'app della galleria Impossibile accedere alla fotocamera Per poter scansionare i codici a barre, Catima ha bisogno di accedere alla tua fotocamera. Premi qui per poter cambiare le impostazioni dei permessi. Aggiorna bilancio @@ -223,9 +222,7 @@ Passa all\'immagine frontale Passa all\'immagine dietro Passa al codice a barre - Apri immagine frontale nell\'app per la visualizzazione di immagini Dona - Apri l\'immagine retro nell\'app per la visualizzazione di immagini Imposta l\'altezza del codice a barre Premi a lungo per modificare l\'immagine Mostra nota diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 09e35fe474..d0cdfd8b72 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -233,7 +233,6 @@ 情報を確認 残高を更新 画像ファイルを取得できませんでした - ギャラリーアプリは画像のみ開けます 有効期限 スター付き サポートを依頼する場合、以下の情報を含めて下さい: @@ -250,8 +249,6 @@ 前面画像へ切り替え 背面画像へ切り替え バーコードへ切り替え - 前面画像を画像ビューワーアプリで開く - 背面画像を画像ビューワーアプリで開く バーコードの高さを設定 サムネイルを長押しして編集 カードの概要 diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml index 8af180da9c..06b4351e69 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -37,7 +37,6 @@ ದಾನ ಮಾಡಿ ಹೆಚ್ಚಿನ ಆಯ್ಕೆಗಳು ಬೇರೆ ರೀತಿಯಲ್ಲಿ ಕಾರ್ಡ್ ಸೇರಿಸಿ - ಗ್ಯಾಲರಿ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಚಿತ್ರಗಳನ್ನು ಮಾತ್ರ ತೆರೆಯಬಹುದು ಎಲ್ಲವೂ ದಿನಾಂಕದಿಂದ ಮಾನ್ಯವಾಗಿ ಆಯ್ಕೆಮಾಡಿ ಅಳಿಸಿ diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 1f903dedd3..f3d9a49b54 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -91,7 +91,6 @@ 정보 보기 잔액 업데이트 이미지 파일을 검색하지 못했습니다 - 갤러리 앱에서는 이미지만 열 수 있습니다 이름 ... 역순으로 정렬 기준 @@ -138,8 +137,6 @@ 그룹 업데이트됨 바코드를 화면 상단으로 이동 - 갤러리 앱에서 전면 이미지 열기 - 갤러리 앱에서 다시 이미지 열기 바코드 높이 설정 전면 이미지 설정 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 0c2c7704fa..96ac8f7b43 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -191,7 +191,6 @@ Atnaujinti balansą Nepavyko gauti vaizdo failo - Galerijos programėlėje galima atidaryti tik vaizdus Weblate svetainėje Pasirinkti kortelę Parinktys @@ -220,7 +219,6 @@ Importuoti korteles Šio veiksmo atlikimui reikalinga prieiga prie saugyklos… Šio veiksmo atlikimui reikalinga prieiga prie kameros… - Atidarykite galinį vaizdą galerijos programėlėje Nustatyti brūkšninio kodo aukštį Galioja nuo Bet kuri data @@ -230,7 +228,6 @@ Perjungti į brūkšninį kodą Aukštis Perjungti į priekinį vaizdą - Atidarykite priekinį vaizdą galerijos programėlėje Aukoti Išjungti ekrano užmigdymą kol peržiūrite kortelę Įveskite ID numerį arba tekstą ant jūsų kortelės ir paspauskite brūkšninį kodą, kuris atrodo kaip ant jūsų kortelės. diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 7f6622dbe4..17039f5453 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -80,7 +80,6 @@ Nekad Izvēlēties beigu datumu Neizdevās iegūt attēla datni - Galerijas lietotnē var atvērt tikai attēlus Derīgums ...apgrieztā secībā Pateicības @@ -215,7 +214,6 @@ Ilgi piespiest, lai labotu sīktēlu Jebkurš datums Augstums - Atvērt aizmugures attēlu attēlu skatītāja lietotnē Ziedot Lauks nedrīkst būt tukšs Kartes identifikators nedrīkst būt tukšs @@ -224,7 +222,6 @@ Šķiet, ka ierīcei nav kameras. Ja tā tomēr ir, jāmēģina pārsāknēt ierīci. Pretējā gadījumā jāizmanto zemāk esošā poga \"Vairāk iespēju\", lai pievienot svītrkodu citā veidā. Ļaut citām lietotnēm piekļūt maniem datiem Lietotnēm joprojām būs jāpieprasa atļauja, lai nodrošinātu piekļuvi - Atvērt priekšpuses attēlu attēlu skatītāja lietotnē Rādīt piezīmi Rādīt atlikumu Privātums diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 943e2d67b1..1497a5aacf 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -203,7 +203,6 @@ Installer en nettleser først Velkommen til Catima Kunne ikke hente bildefil - Kun bilder kan åpnes i galleriprogrammet Fikk ikke tilgang til kameraet Catima trenger kameratilgang for å skanne strekkoder. Trykk her for å endre tilgangsinnstillingene. Importer kort @@ -227,8 +226,6 @@ Vis saldo Vis notat Vis gyldighet - Åpne frontbilde i galleriprogrammet - Åpne baksidebilde i galleriprogram Sett strekkodehøyde Doner Les Catima-kort diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 2cde02cba8..18b59cabd8 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -199,7 +199,6 @@ Welkom bij Catima Installeer een webbrowser De afbeelding kan niet worden opgehaald - Alleen afbeeldingen kunnen worden geopend in de galerij-app Geen cameratoegang Hoeveel heb je uitgegeven of ontvangen? Catima heeft toegang tot je camera nodig om barcodes te kunnen scannen. Druk hier om toegang te verlenen. @@ -219,8 +218,6 @@ Voorzijde tonen Achterzijde tonen Barcode tonen - Voorzijde openen in afbeeldingsweergave-app - Achterzijde openen in afbeeldingsweergave-app Doneren Houd lang ingedrukt om miniatuur te bewerken Saldo tonen diff --git a/app/src/main/res/values-peo/strings.xml b/app/src/main/res/values-peo/strings.xml index 659a171476..fee5cdd073 100644 --- a/app/src/main/res/values-peo/strings.xml +++ b/app/src/main/res/values-peo/strings.xml @@ -179,7 +179,6 @@ دیدن اطلاعات به‌روزرسانی موجودی فایل تصویر بازیابی نشد - فقط عکس میتونه تو گالری برنامه باز بشه اسم جدیدا استفاده شده معتبر از @@ -228,8 +227,6 @@ تغییر به عکس جلو تغییر به عکس عقب به بارکد تغییر بده - عکس جلویی رو تو image viewer app باز کن - باز کردن عکس تو image viewer app تنظیم ارتفاع بارکد کمک مالی کن برای ویرایش عکس کوچیک، فشار طولانی بده diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index ba65790eeb..4df2709d2f 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -209,7 +209,6 @@ %1$d kart (%2$d zarchwizowanych) Nie udało się pobrać pliku obrazu - W galerii możesz otworzyć tylko obrazy Najpierw zainstaluj przeglądarkę Witaj w Catima Bieżące saldo: %s @@ -230,10 +229,8 @@ Przełącz na obraz z przodu Przełącz na obraz z tyłu Przełącz na kod kreskowy - Otwórz obraz z przodu w galerii Ustaw wysokość kodu kreskowego Darowizna - Otwórz obraz z powrotem w galerii Przytrzymaj, aby edytować miniaturę Pokaż nazwę pod miniaturką zdjęcia Pokaż balans diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 89e2a2ef1b..3b615a1add 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -129,7 +129,6 @@ Mostrar informações Atualizar saldo Falha ao recuperar o arquivo de imagem - Apenas imagens podem ser abertas na galeria Usado mais recentemente ...em ordem inversa Ordenar por @@ -152,8 +151,6 @@ Mudar para código de barras Mudar para imagem frontal Mudar para imagem traseira - Abrir imagem frontal no visualizador de imagens - Abrir imagem traseira no visualizador de imagens Definir altura do código de barras Doar Pressione e segure para editar a miniatura diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 3dca31eee3..5b4076d988 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -205,7 +205,6 @@ Instale primeiro um navegador de Internet Bem-vindo ao Catima Falha ao recuperar o ficheiro de imagem - Só podem ser abertas imagens na aplicação da galeria Para digitalizar códigos de barras, o Catima tem de aceder à câmara. Clique aqui para mudar as configurações de permissão. Não foi possível aceder à câmara Importar cartões @@ -224,8 +223,6 @@ Altura Mudar para a imagem de trás Mudar para o código de barras - Abrir imagem frontal na app visualizadora de imagens - Abrir imagem traseira na app visualizadora de imagens Definir altura do código de barras Doar Mostrar validade diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 89b23faa4d..710c579e5c 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -194,7 +194,6 @@ Mostrar informações Atualizar saldo Falha ao recuperar o arquivo de imagem - Apenas imagens podem ser abertas na galeria Nome Usado mais recentemente Válido a partir de @@ -244,8 +243,6 @@ Mudar para imagem frontal Mudar para imagem traseira Mudar para código de barras - Abrir imagem frontal no visualizador de imagens - Abrir imagem traseira no visualizador de imagens Definir altura do código de barras Doar Pressione e segure para editar a miniatura diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 5f31dab267..d2cb953da2 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -99,7 +99,6 @@ Introduceți o parolă Despre %s Imagine %s cod de bare - Deschideți imaginea frontală în aplicația galerie Afișați numele sub imaginea miniaturii Ștergeți imaginea Ajutați la traducerea aplicației @@ -122,7 +121,6 @@ Înălțime Expiră: %s Setați miniatura - Doar imagini pot fi deschise în aplicația galerie General Introduceți numărul de identificare sau textul de pe cardul dumneavoastră iar apoi selectați codul de bare ce arată ca și cel de pe cardul dumneavoastră. Sold: %s @@ -193,7 +191,6 @@ Selectați o culoare Setați înălțimea codului de bare Politica de confidențialitate - Deschideți imaginea din spate în aplicația galerie Sistem Actualizați balanța Cele mai recent utilizate diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 93776f2d9e..32637041dd 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -211,7 +211,6 @@ Добро пожаловать в Catima Сначала необходимо установить браузер Невозможно получить файл изображения - В приложении галереи можно открывать только изображения Для сканирования штрих-кодов Catima требуется доступ к камере устройства. Нажмите здесь, чтобы изменить настройки разрешений. Обновить баланс Новый баланс: %s @@ -231,8 +230,6 @@ Переключить на штрих-код Переключить на лицевую сторону Переключить на заднюю сторону - Открыть лицевое изображение в приложении просмотра изображений - Открыть заднее изображение в приложении просмотра изображений Пожертвовать Долгое нажатие для редактирования Показывать примечание diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index e6e11a417b..6900a9035d 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -210,7 +210,6 @@ %1$d karty (%2$d archivované) %1$d kariet (%2$d archivovaných) - V aplikácii galéria je možné otvoriť iba obrázky Nepodarilo sa získať prístup k fotoaparátu Pre túto akciu je potrebné oprávnenie na čítanie úložiska… Vyberte svoj export zo služby FidMe pre import a potom vyberte typy čiarových kódov ručne.\nVytvorte ho z profilu FidMe tak, že vyberiete položku Ochrana údajov a potom stlačíte tlačidlo Extrahovať moje údaje. @@ -226,8 +225,6 @@ Ponechať obrazovku aktívnu počas prezerania karty Pre zaistenie čitateľnosti pre niektoré skenery Aplikácie budú musieť stále žiadať o povolenie, aby im bol udelený prístup - Otvorenie zadného obrázka v prehliadači obrázkov - Otvorenie predného obrázka v prehliadači obrázkov Nastavenie výšky čiarového kódu Ukážte zostatok Zobraziť názov pod miniatúrou obrázka diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index e3484f624c..9f6de56b34 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -211,7 +211,6 @@ Čisto črno ozadje za temno temo Izberi barvo Omogočeno od: %s - V aplikaciji za gledanje slik lahko odpremo samo slike %1$d kartica (%2$d arhivirana) %1$d kartici (%2$d arhivirani) @@ -287,8 +286,6 @@ Preklopi na prednjo sliko Preklopi na zadnjo sliko Preklopi na črtno kodo - Odpri sprednjo sliko v aplikaciji za slike - Odpri zadnjo sliko v aplikaciji za slike Nastavi višino črtne kode Uporabi prednjo sliko Uporabi zadnjo sliko diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index c86fcc47d9..ab1da0b3c3 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -169,7 +169,6 @@ Visina Prebaci na prednju fotografiju Prebaci na bar-kod - Otvori prednju fotografiju u prikazivaču fotografija Postavi visinu bar-koda Doniraj Dugi pritisak za izmenu naslovne fotografije @@ -239,7 +238,6 @@ Promenio si broj kartice. Da li želiš da ažuriraš i bar-kod da bude iste vrednosti? Ne Saradnici: %s - Samo fotografije mogu da se otvore u galerija aplikaciji na Weblate-u %1$d kartica (%2$d arhivirana) @@ -249,7 +247,6 @@ Ako želiš da zatražiš podršku, ubaci sledeće informacije: Novo stanje: %s Prebaci na zadnju fotografiju - Otvori zadnju fotografiju u prikazivaču fotografija Pregled kartica Dodaj karticu bez bar-koda Unesite broj ili tekst sa kartice diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index ddb95419f1..b99facac12 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -209,11 +209,9 @@ Behörighet att komma åt kameran krävs för denna åtgärd… Uppdatera balans Misslyckades att hämta bildfil - Endast bilder kan öppnas i galleriappen Hur mycket spenderade du eller fick du? Ange summa Ny balans: %s - Öppna bilden på framsidan i bildvisningsappen Visa namnet nedanför bildens miniatyr Visa giltighet Visa på internet @@ -233,7 +231,6 @@ Byt till bilden på framsidan Appar måste fortfarande begära åtkomst för att få tillgång Ställ in streckkodens höjd - Öppna bilden på baksidan i bildvisningsappen Kopieringsskydd © 2019–%d Sylvia van Os och medverkande Tillåt andra appar att komma åt min data Läsa Catima-kort diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index f02c740c33..01f1da87ee 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -166,7 +166,6 @@ இருப்பு புதுப்பிக்கவும் படக் கோப்பை மீட்டெடுப்பதில் தோல்வி வரிசைப்படுத்தவும் - கேலரி பயன்பாட்டில் படங்களை மட்டுமே திறக்க முடியும் பதிப்பு வரலாறு வரவு கூகிள் பிளேயில் @@ -201,8 +200,6 @@ முன் படத்திற்கு மாறவும் பின் படத்திற்கு மாறவும் பார்கோடு மாறவும் - இமேச் வியூவர் ஆப்சில் முன் படத்தைத் திறக்கவும் - இமேச் வியூவர் ஆப்சில் மீண்டும் படத்தைத் திறக்கவும் பார்கோடு உயரத்தை அமைக்கவும் நன்கொடை சிறுபடத்தைத் திருத்த நீண்ட அழுத்தவும் diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 0fb6b39d23..2318b48534 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -199,7 +199,6 @@ Önce bir web tarayıcısı kurun Catima\'ya Hoş Geldiniz Resim dosyası alınamadı - Galeri uygulamasında yalnızca resimler açılabilir Barkodları taramak için Catima\'nın kameranıza erişmesi gerekecektir. İzin ayarlarınızı değiştirmek için buraya dokunun. Geçerli bakiye: %s Miktarı girin @@ -220,8 +219,6 @@ Bağış yap Ön resme geç Barkod yüksekliğini ayarla - Ön resmi resim görüntüleyici uygulamasında aç - Arka resmi resim görüntüleyici uygulamasında aç Küçük resmi düzenlemek için uzun basın Küçük resmin altında adı göster Notu göster diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 80df41fa70..638e6204d1 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -211,7 +211,6 @@ Спочатку встановіть браузер Ласкаво просимо до Catima Збій доступу до файлу зображення - Галерея може відкривати лише зображення Імпорт карток Скільки ви витратили або отримали? Введіть суму @@ -229,8 +228,6 @@ Перемкнутися на лицьову сторону Перемкнутися на зворотню сторону Перемкнутися на штрих-код - Відкрити зображення спереду в програмі для перегляду зображень - Відкрити зображення ззаду у програмі для перегляду зображень Встановити висоту штрих-коду Висота Пожертвувати diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 7985fe4230..c037267033 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -234,14 +234,11 @@ Đánh giá ứng dụng Ghi nhận Catima - Mở hình ảnh mặt trước trong ứng dụng thư viện ảnh và sử dụng dữ liệu Hiển thị tính hợp lệ - Chỉ có thể mở hình ảnh trong ứng dụng thư viện Kho lưu trữ nguồn Chuyển sang hình ảnh phía sau Chuyển sang hình ảnh phía trước - Mở hình ảnh mặt sau trong ứng dụng thư viện ảnh Không thể truy xuất tệp hình ảnh Được thực hiện bởi: %s Phần mềm miễn phí có bản quyền theo giấy phép GPLv3+ diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 8d9ddc07ec..9bb2df1176 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -200,7 +200,6 @@ 当前余额:%s 无法检索图像文件 新余额:%s - 只能在图库应用程序中打开图像 此操作所需的读取存储空间的权限…… 有效期自 任何日期 @@ -211,8 +210,6 @@ 选择正面图像 选择背面图像 选择条形码 - 使用图片查看软件打开正面图像 - 使用图片查看软件打开背面图像 设置条形码高度 捐赠 长按可编辑缩略图 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 81b531ce3f..dcbb625ce7 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -179,7 +179,6 @@ 選項 如果您想請求協助,請附上以下訊息: 無法擷取圖片檔案 - 圖庫應用程式僅可開啟圖片 重複 封存 解除封存 @@ -208,7 +207,6 @@ 餘額:%s 新的餘額:%s 選擇條碼 - 在圖片檢視應用程式中開啟正面圖片 顯示備註 顯示餘額 顯示有效性 @@ -217,7 +215,6 @@ 捐款 長按以編輯縮圖 - 在圖片檢視應用程式中開啟背面圖片 在縮圖下方顯示名稱 設定條碼高度 著作權所有© Sylvia van Os與其他貢獻者 From a8368b62f65643cfb4cab051c4105eae8476f394 Mon Sep 17 00:00:00 2001 From: IlyaZar Date: Mon, 6 Jul 2026 12:28:56 +0200 Subject: [PATCH 4/4] refactor: align image viewer ui package - keep new compose ui with existing compose code --- .../cardview/LoyaltyCardImageActivity.kt | 115 +---------------- .../compose/LoyaltyCardImageActivity.kt | 117 ++++++++++++++++++ 2 files changed, 119 insertions(+), 113 deletions(-) create mode 100644 app/src/main/java/protect/card_locker/compose/LoyaltyCardImageActivity.kt diff --git a/app/src/main/java/protect/card_locker/cardview/LoyaltyCardImageActivity.kt b/app/src/main/java/protect/card_locker/cardview/LoyaltyCardImageActivity.kt index f922d08fd1..2478d6096d 100644 --- a/app/src/main/java/protect/card_locker/cardview/LoyaltyCardImageActivity.kt +++ b/app/src/main/java/protect/card_locker/cardview/LoyaltyCardImageActivity.kt @@ -7,41 +7,11 @@ import android.os.Bundle import android.view.WindowManager import android.widget.Toast import androidx.activity.compose.setContent -import androidx.compose.foundation.Image -import androidx.compose.foundation.background -import androidx.compose.foundation.gestures.detectTapGestures -import androidx.compose.foundation.gestures.rememberTransformableState -import androidx.compose.foundation.gestures.transformable -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.statusBarsPadding -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.graphics.asImageBitmap -import androidx.compose.ui.graphics.graphicsLayer -import androidx.compose.ui.input.pointer.pointerInput -import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.layout.onSizeChanged -import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.IntSize -import androidx.compose.ui.unit.dp import protect.card_locker.CatimaComponentActivity import protect.card_locker.ImageLocationType import protect.card_locker.R import protect.card_locker.Utils +import protect.card_locker.compose.LoyaltyCardImageScreen import protect.card_locker.compose.theme.CatimaTheme import protect.card_locker.preferences.Settings @@ -70,7 +40,7 @@ class LoyaltyCardImageActivity : CatimaComponentActivity() { CatimaTheme { LoyaltyCardImageScreen( bitmap = bitmap, - contentDescription = stringResource(imageLocationType.descriptionRes()), + contentDescriptionRes = imageLocationType.descriptionRes(), onBack = { onBackPressedDispatcher.onBackPressed() } ) } @@ -124,84 +94,3 @@ class LoyaltyCardImageActivity : CatimaComponentActivity() { } } } - -@Composable -fun LoyaltyCardImageScreen( - bitmap: Bitmap, - contentDescription: String, - onBack: () -> Unit, -) { - var scale by remember { mutableStateOf(1F) } - var offset by remember { mutableStateOf(Offset.Zero) } - var size by remember { mutableStateOf(IntSize.Zero) } - val zoomState = rememberTransformableState { _, zoomChange, panChange, _ -> - val nextScale = (scale * zoomChange).coerceIn(1F, MAX_IMAGE_SCALE) - scale = nextScale - offset = if (nextScale == 1F) { - Offset.Zero - } else { - (offset + panChange).clampTo(size, nextScale) - } - } - - Box( - modifier = Modifier - .fillMaxSize() - .background(MaterialTheme.colorScheme.background) - .testTag("card_image_zoom") - ) { - Image( - bitmap = bitmap.asImageBitmap(), - contentDescription = contentDescription, - contentScale = ContentScale.Fit, - modifier = Modifier - .fillMaxSize() - .onSizeChanged { size = it } - .pointerInput(bitmap) { - detectTapGestures( - onDoubleTap = { - scale = 1F - offset = Offset.Zero - } - ) - } - .transformable(zoomState) - .graphicsLayer { - scaleX = scale - scaleY = scale - translationX = offset.x - translationY = offset.y - } - .testTag("card_image") - ) - - IconButton( - onClick = onBack, - modifier = Modifier - .align(Alignment.TopStart) - .statusBarsPadding() - .padding(8.dp) - .testTag("card_image_back") - ) { - Icon( - imageVector = Icons.AutoMirrored.Filled.ArrowBack, - contentDescription = stringResource(R.string.back) - ) - } - } -} - -private fun Offset.clampTo(size: IntSize, scale: Float): Offset { - if (size.width == 0 || size.height == 0) { - return this - } - - val maxX = size.width * (scale - 1F) / 2F - val maxY = size.height * (scale - 1F) / 2F - return Offset( - x = x.coerceIn(-maxX, maxX), - y = y.coerceIn(-maxY, maxY) - ) -} - -private const val MAX_IMAGE_SCALE = 5F diff --git a/app/src/main/java/protect/card_locker/compose/LoyaltyCardImageActivity.kt b/app/src/main/java/protect/card_locker/compose/LoyaltyCardImageActivity.kt new file mode 100644 index 0000000000..ea7080bb03 --- /dev/null +++ b/app/src/main/java/protect/card_locker/compose/LoyaltyCardImageActivity.kt @@ -0,0 +1,117 @@ +package protect.card_locker.compose + +import android.graphics.Bitmap +import androidx.annotation.StringRes +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.detectTapGestures +import androidx.compose.foundation.gestures.rememberTransformableState +import androidx.compose.foundation.gestures.transformable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.asImageBitmap +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.layout.onSizeChanged +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.IntSize +import androidx.compose.ui.unit.dp +import protect.card_locker.R + +@Composable +fun LoyaltyCardImageScreen( + bitmap: Bitmap, + @StringRes contentDescriptionRes: Int, + onBack: () -> Unit, +) { + var scale by remember { mutableStateOf(1F) } + var offset by remember { mutableStateOf(Offset.Zero) } + var size by remember { mutableStateOf(IntSize.Zero) } + val zoomState = rememberTransformableState { _, zoomChange, panChange, _ -> + val nextScale = (scale * zoomChange).coerceIn(1F, MAX_IMAGE_SCALE) + scale = nextScale + offset = if (nextScale == 1F) { + Offset.Zero + } else { + (offset + panChange).clampTo(size, nextScale) + } + } + + Box( + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.background) + .testTag("card_image_zoom") + ) { + Image( + bitmap = bitmap.asImageBitmap(), + contentDescription = stringResource(contentDescriptionRes), + contentScale = ContentScale.Fit, + modifier = Modifier + .fillMaxSize() + .onSizeChanged { size = it } + .pointerInput(bitmap) { + detectTapGestures( + onDoubleTap = { + scale = 1F + offset = Offset.Zero + } + ) + } + .transformable(zoomState) + .graphicsLayer { + scaleX = scale + scaleY = scale + translationX = offset.x + translationY = offset.y + } + .testTag("card_image") + ) + + IconButton( + onClick = onBack, + modifier = Modifier + .align(Alignment.TopStart) + .statusBarsPadding() + .padding(8.dp) + .testTag("card_image_back") + ) { + Icon( + imageVector = Icons.AutoMirrored.Filled.ArrowBack, + contentDescription = stringResource(R.string.back) + ) + } + } +} + +private fun Offset.clampTo(size: IntSize, scale: Float): Offset { + if (size.width == 0 || size.height == 0) { + return this + } + + val maxX = size.width * (scale - 1F) / 2F + val maxY = size.height * (scale - 1F) / 2F + return Offset( + x = x.coerceIn(-maxX, maxX), + y = y.coerceIn(-maxY, maxY) + ) +} + +private const val MAX_IMAGE_SCALE = 5F