From 80fb7e2cb3cf9844389efe461c39ed847861fdf1 Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Tue, 10 Dec 2019 20:34:07 +0100 Subject: [PATCH 01/16] Add 10dp white padding around all QR codes --- app/src/main/res/layout/loyalty_card_view_layout.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/layout/loyalty_card_view_layout.xml b/app/src/main/res/layout/loyalty_card_view_layout.xml index 097a1a898..a1f84458f 100644 --- a/app/src/main/res/layout/loyalty_card_view_layout.xml +++ b/app/src/main/res/layout/loyalty_card_view_layout.xml @@ -35,6 +35,8 @@ android:layout_marginBottom="10.0dip" android:layout_marginStart="15.0dip" android:layout_marginEnd="15.0dip" + android:padding="10.0dp" + android:background="#ffffff" app:layout_constraintBottom_toTopOf="@+id/centerGuideline" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" From 0d7d1658d6dde1c7fb634abba01c473176ecb5b3 Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Thu, 12 Dec 2019 19:42:17 +0100 Subject: [PATCH 02/16] Also add padding to edit activity --- app/src/main/res/layout/loyalty_card_edit_activity.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/layout/loyalty_card_edit_activity.xml b/app/src/main/res/layout/loyalty_card_edit_activity.xml index 4ce3df789..e24172b8d 100644 --- a/app/src/main/res/layout/loyalty_card_edit_activity.xml +++ b/app/src/main/res/layout/loyalty_card_edit_activity.xml @@ -355,6 +355,8 @@ android:layout_width="0dp" android:layout_height="@dimen/barcode_disp_height" android:layout_gravity="center_horizontal" + android:padding="10.0dp" + android:background="#ffffff" android:id="@+id/barcode" android:contentDescription="@string/barcodeImageDescription" android:layout_weight="1.0"/> From 0c23f25aca4557a818c9a28e433e68c263ca62d9 Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Sun, 5 Jan 2020 19:35:51 -0800 Subject: [PATCH 03/16] Update translations These were pulled from the Transifex project: transifex.com/na-243/loyalty-card-locker --- app/src/main/res/values-cs/strings.xml | 4 -- app/src/main/res/values-de/strings.xml | 7 +- app/src/main/res/values-el-rGR/strings.xml | 5 -- app/src/main/res/values-es/strings.xml | 5 -- app/src/main/res/values-fr/strings.xml | 5 -- app/src/main/res/values-he-rIL/strings.xml | 1 - app/src/main/res/values-it/strings.xml | 46 ++++++++++--- app/src/main/res/values-lt/strings.xml | 4 -- app/src/main/res/values-nl/strings.xml | 79 ++++++++++++---------- app/src/main/res/values-pl/strings.xml | 19 ++++-- app/src/main/res/values-ru/strings.xml | 13 +++- app/src/main/res/values-sk/strings.xml | 5 -- app/src/main/res/values-sl/strings.xml | 5 -- 13 files changed, 113 insertions(+), 85 deletions(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index ce263baae..9fca056bb 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -5,12 +5,10 @@ Přidat ZAtím némáte žádné věrnostní karty. Klikněte na tlačítko "+" (plus) nahoře a začněte.\n\nLoyalty Card Locker umožňuje nosit své věrnostní karty v telefonu, takže jsou vždy na dosah. - Obchod Poznámka ID karty Typ čárového kódu - Zrušit Uložit Naskenovat kartu @@ -67,8 +65,6 @@ Revizní informace: %s %s používá tyto knihovny třetích stran: %s Vyberte čárový kód - Zadejte hodnotu čárového kódu a potm vyberte kód, který představuje čárový kód, který je na kartě. - ID karty zkopírováno do schránky diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 7000a8620..9849360a0 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -2,15 +2,16 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> Loyalty Card Keychain + Suche Neu Sie haben noch keine Kundenkarte angelegt. Über den \"+\"-Button oben rechts können welche angelegt werden.\n\nDiese App ermöglicht es, Kundenkarten immer mit zu führen. + Es passen keine Kundenkarten zum Suchfilter. Bitte probiere verschiedene Begriffe aus. Geschäft Notiz Kartennummer Barcodeart - Abbrechen Speichern Karte scannen @@ -40,7 +41,6 @@ Kein Geschäft angegeben Keine Kartennummer angegeben Karte konnte nicht gefunden werden - %1$s: %2$s Import/Export Import @@ -79,8 +79,6 @@ %s verwendet folgenden Dritt-Ressourcen: %s Barcode auswählen - Fügen Sie die Kundennummer ein, anschließend wählen Sie die korrekte Barcodeart aus. - Nummer in die Zwischenablage kopiert Vorschaubild für die Karte @@ -113,4 +111,5 @@ Schriftgröße der Kartennummer Schriftgröße der Notiz Helligkeit bei Barcode Ansicht erhöhen + Barcodeausrichtung sperren diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 1b182d896..267d4ba70 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -5,12 +5,10 @@ Προσθήκη Δεν έχετε κάρτες προς το παρόν. Πατήστε το κουμπί \"+\" (συν) στο πάνω μέρος για να ξεκινήσετε.\n\nΤο Loyalty Card Keychain σας δίνει τη δυνατότητα να έχετε τις κάρτες σας στο τηλέφωνο σας, έτσι ώστε να τις έχετε πάντα μαζί σας. - Κατάστημα Σημείωση Κωδικός Κάρτας Τύπος Barcode - Άκυρο Αποθήκευση Φωτογράφιση Κάρτας @@ -40,7 +38,6 @@ Δεν δώσατε κατάστημα Δεν δώσατε κωδικό κάρτας Δεν ήταν δυνατό να εντοπιστεί κάρτα - %1$s: %2$s Εισαγωγή/Εξαγωγή Εισαγωγή @@ -79,8 +76,6 @@ Το %s χρησιμοποιεί τους παρακάτω πόρους τρίτων: %s Επιλέξτε Barcode - Δώστε την τιμή του barcode και μετά επιλέξτε την εικόνα που αναπαριστά το barcode που θέλετε να χρησιμοποιείσετε - Ο κωδικός της κάρτας αντιγράφτηκε στο πρόχειρο Μικρογραφία κάρτας diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index c7108c300..5c42bcb1c 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -5,12 +5,10 @@ Añadir Actualmente no tienes ninguna tarjeta guardada. Presiona el botón \"+\" para comenzar.\n\nEsta cartera te permite llevar tus tarjetas de fidelización en tu teléfono para que estén siempre a tu alcance. - Tienda Nota ID de la Tarjeta Tipo de Código de Barras - Cancelar Guardar Escanear Tarjeta @@ -40,7 +38,6 @@ Establecimiento no especificado ID de la Tarjeta no especificado No se ha podido encontrar la tarjeta de fidelización - %1$s: %2$s Importar/Exportar Importar @@ -79,8 +76,6 @@ %s utiliza los siguientes recursos de terceros: %s Selecciona el Código de Barras - Introduce el valor del código de barras y después presiona en una imagen para seleccionar el tipo de código de barras. - ID de la Tarjeta copiado al portapapeles Miniatura para la tarjeta diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index dbb9112be..2f459495b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -5,12 +5,10 @@ Ajouter Aucune carte de fidélité enregistrée. Appuyez sur le bouton \"+\" (plus) pour commencer.\n\nLoyalty Card Locker vous permet d\'enregistrer vos cartes de fidélité sur votre téléphone pour toujours les avoir à portée de main. - Nom Note Numéro Type de code-barres - Annuler Enregistrer Mode capture @@ -40,7 +38,6 @@ Aucun nom n\'a été saisi Aucun numéro n\'a été saisi N\'a pas pu retrouver la carte de fidélité - %1$s: %2$s Importer/Exporter Importer @@ -79,8 +76,6 @@ %s utilise les ressources-tierces suivantes : %s Choisissez le code-barre - Saisissez les chiffres du code-barres et sélectionnez l\'image qui le représente - Numéro de carte copié dans le presse-papier Miniature pour la carte diff --git a/app/src/main/res/values-he-rIL/strings.xml b/app/src/main/res/values-he-rIL/strings.xml index a4aa03a41..d4ab5bac9 100644 --- a/app/src/main/res/values-he-rIL/strings.xml +++ b/app/src/main/res/values-he-rIL/strings.xml @@ -5,7 +5,6 @@ מזהה כרטיס סוג ברקוד - ביטול שמור צלם כרטיס diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 7e17852d7..d25bc273e 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -2,14 +2,17 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> Carte fedeltà + Cerca Aggiungi - Non hai ancora alcuna tessera fedeltà al momento. Premi sul bottone "+" (più) in alto per incominciare.\n\nL\'app ti permette di portare con te le tue tessere fedeltà, così da averle sempre a disposizione. + Non hai ancora alcuna carta fedeltà. Premi sul bottone +(più) in alto per incominciare.\n\nL\'app ti permette di portare con te le tue carte fedeltà, così da averle sempre a disposizione. + Nessuna carta fedeltà corrisponde al filtro. Riprovare con altri valori Negozio Note Codice Tipo codice a barre + Questa carta non ha un codice a barre Annulla Salva @@ -25,6 +28,7 @@ Conferma che vuoi eliminare questa carta. Ok Copia ID negli appunti + Condividi Invia… Aggiunto al launcher @@ -39,11 +43,14 @@ Nessun negozio inserito Nessun codice carta inserito + Impossibile trovare la carta + Impossibile analizzare l\'URI + %1$s: %2$s Importa/Esporta Importa Esporta - Fare il backup dei dati ti permette di spostare le tue tessere da un dispositivo ad un altro. + Fare il backup dei dati ti permette di spostare le tue carte da un dispositivo ad un altro. Importato da: %1$s Esportato in: %1$s File mancante: %1$s @@ -72,18 +79,20 @@ Pubblicato sotto licenza GPLv3. Informazioni su %s Versione: %s - Informazione sulla revisione: %s + Informazione sulla versione: %s %s usa le seguenti librerie di terze parti: %s %s usa le seguenti risorse di terze parti: %s Seleziona codice a barre - Digita il valore del codice a barre, quindi seleziona l\'immagine che rappresenta il codice a barre che vuoi usare. + Immettere l\'ID della carta, quindi selezionare l\'immagine che rappresenta il codice a barre desiderato oppure selezionare “Questa carta non ha un codice a barre” per non valorizzare il dato. ID della carta copiato negli appunti - Incomincia introduzione - Benvenuto in Carte fedeltà\n - Gestisci le tue tessere direttamente dal telefono!\n\n + Miniatura carta + + Introduzione + Benvenuto in Carte Fedeltà\n + Gestisci le tue carte direttamente dal telefono!\n\n Aggiungi carte\n Aggiungi una nuova carta premendo il + dall\'elenco delle carte.\n\n Aggiungi carte\n @@ -93,6 +102,27 @@ Backup\n I dati delle tessere possono essere salvati. Per esportare o importare tessere premi Importa/Esporta nel menù nella schermata principale.\n\n Feedback\n - Questa app è gratuita, priva di pubblicità e open source. Guarda i dettagli premendo su Informazioni nella schermata principale.\n\nPer favore, lascia un feedback nell\'app store! (: + Questa app è gratuita, priva di pubblicità e open source. Guarda i dettagli premendo su \"Informazioni\" nella schermata principale.\n\nPer favore, lascia un feedback nell\'app store! (: + Cambia + Colore titolo + Colore scheda + Colore di sfondo del titolo carta + Colore del titolo carta + + Impostazioni + Interfaccia utente + Tema + Tema del sistema + Tema chiaro + Tema scuro + Dimensione testo del titolo carta (in lista carte) + Dimensione testo delle note carta (in lista carte) + Dimensione testo del titolo carta + Dimensione testo dell\'ID carta + Dimensione testo delle note carta + Aumenta luminosità dello schermo quando apro un codice a barre + Blocca orientamento del codice a barre + Importa carte fedeltà + Voglio condividere una carta fedeltà con te diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index b0a48c6e5..3b5d639b2 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -5,12 +5,10 @@ Pridėti Šiuo metu neturite nė vienos įvestos lojalumo kortelės. Paspauskite "+" (pliuso) pliuso mygtuką, kad pradėtumėte.\n\nLoyalty Card Locker leidžia Jums visada nešiotis lojalumo kortelių informaciją savo telefone ar planšetėje, taip jos visada pasiekiamos. - Parduotuvė Užrašas Kortelės ID Brūkšninio kodo tipas - Atšaukti Išsaugoti Nufotografuoti kortelę @@ -50,8 +48,6 @@ Revizijos informacija: %s %s naudoja šias trečiosios šalies bibliotekas: %s Pasirinkite brūkšninį kodą - Enter the barcode value then select the image which represents the barcode you want to use - Kortelės ID nukopijuota į iškarpinę diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 11e70255f..b4c3d4930 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -2,44 +2,49 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> Klantenkaartkluis + Zoeken Toevoegen - Er zijn nog geen klantenkaarten aanwezig. Klik op de knop \"+\" (plus) om te beginnen.\n\nKlantenkaartenkluis beheert klantenkaarten op een smartphone of tablet, zodat ze altijd binnen handbereik zijn. + Je hebt nog geen klantenkaarten toegevoegd. Druk op de knop \'+\' (plus) om te beginnen.\n\nMet Klantenkaartkluis beheer je je klantenkaarten op je smartphone of tablet zodat ze altijd binnen handbereik zijn. + Er zijn geen kaarten die overeenkomen met je zoekopdracht. Probeer het opnieuw. Winkel - Opmerking - Kaart-ID - Barcodetype + Aantekening + Kaartnummer + Soort barcode + Deze kaart heeft geen barcode Annuleren Opslaan Scan een kaart - Voer een kaart in + Voer een kaartnummer in Kaart bewerken Bewerken Verwijderen Bevestigen - Draaien blokkeren - Draaien deblokkeren + Draaien niet toestaan + Draaien toestaan Kaart verwijderen Bevestig dat je deze kaart wilt verwijderen. Oké - ID kopiëren naar klembord + Kaartnummer kopiëren naar klembord + Delen Versturen… - Toegevoegd aan beginscherm + Toegevoegd aan startscherm Klantenkaart bewerken Klantenkaart toevoegen - Klantenkaart bekijken - Klantenkaart-barcode scannen + Klantenkaart tonen + Scan de barcode van de kaart Kaartsnelkoppeling - Er zijn geen kaarten; voeg er één toe. + Je hebt nog geen kaarten toegevoegd. - Afbeelding van klantenkaart-barcode + Afbeelding van barcode - Geen winkel ingevoerd - Geen kaart-ID ingevoerd - De klantenkaart kan niet worden opgevraagd. + Geen winkelnaam ingevoerd + Geen kaartnummer ingevoerd + De klantenkaart kan niet worden opgevraagd + Kan de import-uri niet verwerken %1$s: %2$s Importeren/Exporteren @@ -58,7 +63,7 @@ Bezig met importeren…... Bezig met exporteren…... Het importeren of exporteren van kaarten is niet mogelijk zonder de machtiging \'externe opslag\'. - De gegevens zijn weggeschreven naar de hoogste map op de externe opslag. + De gegevens worden weggeschreven naar de hoogste map op de externe opslag. Importeren uit bestandssysteem Kies een specifiek bestand uit het bestandssysteem. Uit bestandssysteem @@ -75,31 +80,31 @@ Over %s Versie: %s Versie-informatie: %s - %s gebruikt de volgende bibliotheken van derde partijen: %s - %s gebruikt de volgende bronnen van derde partijen: %s + %s gebruikt de volgende bibliotheken van externe partijen: %s + %s gebruikt de volgende bronnen van externe partijen: %s - Barcode selecteren - Voer de waarde van de barcode in en kies daarna de afbeelding van de barcode die je wilt gebruiken. + Barcode toevoegen + Voer de barcode in en kies daarna de afbeelding van de barcode die je wilt gebruiken., of druk op “Deze kaart heeft geen barcode” om geen barcode te gebruiken. - Kaart-ID is gekopieerd naar het klembord + Kaartnummer is gekopieerd naar het klembord - Voorbeeldminiatuur voor kaart + Miniatuurvoorbeeld van kaart Rondleiding starten Welkom bij Klantenkaartkluis\n Beheer je op barcodes gebaseerde klantenkaarten op je telefoon!\n\n Kaarten toevoegen\n - Voeg een nieuwe kaart toe door in de kaartenlijst op de plus-knop te drukken.\n\n + Voeg een kaart toe door in de lijst met kaarten op de plus-knop te drukken.\n\n Kaarten toevoegen\n De barcode kan worden toegevoegd door deze handmatig in te voeren of te scannen met de camera.\n\n Kaart tonen\n - Als je een kaart wilt tonen, druk dan op het beginscherm op de naam van de winkel.\n\n + Toon een kaart door op het kaartoverzicht op de naam van de winkel te drukken.\n\n Back-uppen\n - De kaarten kunnen worden geback-upt. Als je kaarten wilt exporteren of importeren, druk dan in het menu op het hoofdscherm op Importeren/Exporteren.\n\n + Je kunt je kaarten back-uppen: druk in het menu op het kaartoverzicht op Importeren/Exporteren.\n\n Feedback\n - Deze app is gratis, advertentievrij en open source. Bekijk de details hiervan door op Over te drukken in het menu op het hoofdscherm.\n\nGeef feedback in de app-winkel! (: + Deze app is gratis, reclamevrij en open source. Bekijk alle details door op \'Over\' te drukken in het menu op het kaartoverzicht.\n\nGeef feedback in de app-winkel! (: - Wijzigen + Aanpassen Tekstkleur van winkelnaam Kopkleur Achtergrondkleur van winkeltekst @@ -107,11 +112,17 @@ Instellingen Uiterlijk en bediening - Kaarttitel lijstlettertypegrootte - Kaartnotitie lijstlettertypegrootte - Kaarttitel-lettertypegrootte - Kaart-ID lettertypegrootte - Kaartnotitie lettertypegrootte - Barcodeweergave lichter maken + Thema + Systeemthema + Licht + Donker + Lettergrootte van kaartnamen op de lijst + Lettergrootte van aantekeningen op de lijst + Lettergrootte van kaartnamen + Lettergrootte van kaartnummer + Lettergrootte van aantekeningen + Scherm helderder maken bij tonen van barcode Barcode-oriëntatie vergrendelen + Klantenkaart importeren + Ik wil een klantenkaart met je delen diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index e7407b63b..d13acbb91 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -2,14 +2,17 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> Loyalty Card Keychain + Szukaj Dodaj W tej chwili nie masz żadnych kart lojalnościowych. Kliknij przycisk \"+\" (plus) u góry, aby rozpocząć. \n\nLoyalty Locker Card pozwala nosić karty lojalnościowe w telefonie, dzięki czemu są zawsze w zasięgu ręki. + Żadne karty lojalnościowe nie pasują do filtra wyszukiwania. Spróbuj użyć innych warunków. Sklep Notatka Identyfikator karty Typ kodu kreskowego + Ta karta nie ma kodu kreskowego Anuluj Zapisz @@ -25,6 +28,7 @@ Potwierdź, że chcesz usunąć tę kartę. OK Skopiuj identyfikator do schowka + Udostępnij Wyślij… Dodano do ekranu głównego @@ -40,6 +44,7 @@ Nie wprowadzono nazwy sklepu Nie wprowadzono identyfikatora karty Nie można wyszukać karty lojalnościowej + Nie można przeanalizować identyfikatora importu URI %1$s: %2$s Importuj/Eksportuj @@ -79,20 +84,20 @@ %s wykorzystuje następujące zasoby osób trzecich: %s Wybierz kod kreskowy - Wprowadź wartość kodu kreskowego, a następnie wybierz obraz, który reprezentuje kod kreskowy, który chcesz użyć + Wprowadź identyfikator karty, a następnie wybierz obraz reprezentujący kod kreskowy, którego chcesz użyć, lub wybierz “Ta karta nie ma kodu kreskowego”, aby nie używać kodu kreskowego. Skopiowano identyfikator karty do schowka Miniaturka karty Pokaż ekran powitalny - Witamy w Loyalty Card Keychain\n + Witaj w Loyalty Card Keychain\n Zarządzaj kartami sklepowymi/lojalnościowymi opartymi na kodzie kreskowym na swoim telefonie!\n\n Dodawanie kart\n Dodaj nową kartę, dotykając znaku plus z listy kart. \n\n - Dodawanie kart \n + Dodawanie kart\n Aby dodać kod kreskowy, wykonaj zdjęcie aparatem lub wpisz ręcznie. \n\n - Pokaż kartę \n + Pokaż kartę\n Aby wyświetlić kartę, na głównym ekranie kliknij nazwę sklepu \n\n Kopia zapasowa\n Karty można zarchiwizować. Aby wyeksportować lub zaimportować dane karty, dotknij opcji Importuj/eksportuj w menu na stronie głównej. \n\n @@ -107,6 +112,10 @@ Ustawienia Interfejs użytkownika + Motyw + Systemowy + Jasny + Ciemny Rozmiar czcionki listy tytułów kart Rozmiar czcionki listy kart Rozmiar czcionki tytułu karty @@ -114,4 +123,6 @@ Rozmiar czcionki notatki karty Rozjaśnij widok kodu kreskowego Zablokuj autoobracanie kodów kreskowych + Importuj kartę lojalnościową + Chcę udostępnić Ci kartę lojalnościową diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index c53f54da3..2de672891 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -2,14 +2,17 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> Карты лояльности + Поиск Добавить карту Пока нет ни одной карты. Нажмите на кнопку «+» (плюс) сверху для добавления.\n\n«Карты лояльности» позволяют хранить карты скидок в телефоне, так что они всегда будут под рукой. + Карт не найдено, попробуйте поискать по-другому. Магазин Примечание Номер карты Тип штрих-кода + Эта карта без штрихкода Отменить Сохранить @@ -25,6 +28,7 @@ Пожалуйста подтвердите удаление карты. ОК Скопировать номер карты в буфер обмена + Переслать Отправить… Карта добавлена на главный экран. @@ -40,6 +44,7 @@ Название магазина не указано Номер карты не указан Карта не найдена + Не удалось разобрать импортируемый URI %1$s: %2$s Импорт/Экспорт @@ -79,7 +84,7 @@ %s использует следующие сторонние ресурсы: %s Выбор штрих-кода - Введите значение и выберете вид штрих-кода + Введите ID карты и выберите тип штрих-кода. Номер карты скопирован в буфер обмена @@ -107,6 +112,10 @@ Настройки Внешний вид + Тема + Системная тема + Светлая тема + Тёмная тема Размер шрифта названия карты для списка Размер шрифта примечания для списка Размер шрифта названия карты @@ -114,4 +123,6 @@ Размер шрифта примечания Максимальная яркость при показе карты Портретная ориентация экрана при показе карты + Импортировать карту + Я хочу поделиться картой с вами diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 6935b8232..73cd286f3 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -5,12 +5,10 @@ Pridať Zatiaľ nemáte žiadne vernostné karty. Kliknite na tlačidlo \"+\" (plus) vyššie a začnite.\n\nAplikácia Vernostné karty umožňuje nosiť svoje vernostné karty v telefóne, kde sú vždy na dosah. - Obchod Poznámka ID karty Typ čiarového kódu - Zrušiť Uložiť Zosnímať kartu @@ -40,7 +38,6 @@ Nebol zadaný obchod Nebolo zadané ID karty Nie je možné vyhľadať vernostnú kartu - %1$s: %2$s Import/Export Import @@ -79,8 +76,6 @@ %s používa tieto knižnice tretích strán: %s Vyberte čiarový kód - Zadajte čiarový kód a vyberte obrázok reprezentujúci čiarový kód, ktorý chcete použiť - ID karty skopírované do schránky Náhľad karty diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 96f51ed59..efeb06d23 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -5,12 +5,10 @@ Dodaj Trenutno nimate shranjene nobene kartice zvestobe. Kliknite \"+\" (plus) na vrhu, da jih dodate.\n\n Aplikacija Kartice zvestobe Vam omogoča, da imate kartice zvestobe shranjene na Vašem telefonu in vedno v dosegu roke. - Shrani Zabeležka Št. kartice Vrsta črne kode - Prekliči Shrani Slikaj kartico @@ -40,7 +38,6 @@ Ime trgovine ni bilo vnešeno Številka kartice ni bila vnešena Te kartice zvestobe ni bilo moč najti - %1$s:%2$s Uvozi/izvozi Uvozi @@ -79,8 +76,6 @@ %suporablja sledeče zunanje vire: %s Izberite črtno kodo - Vnesite vrednost črtne kode in izberite črtno kodo, ki jo želite uporabljati - Številka kartice je bila kopirana v odložišče Ikona kartice From c76580d6be73e662e688524b2aa2c6237703c612 Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Sun, 5 Jan 2020 19:46:17 -0800 Subject: [PATCH 04/16] Update app version to 0.26 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ce36923f0..6e8ce7502 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,8 +13,8 @@ android { applicationId "protect.card_locker" minSdkVersion 16 targetSdkVersion 29 - versionCode 35 - versionName "0.25.4" + versionCode 36 + versionName "0.26" } buildTypes { release { From ab4c360c37289c2bd99f9aacb4280c48c9378036 Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Sun, 5 Jan 2020 20:05:45 -0800 Subject: [PATCH 05/16] Update CHANGELOG for v0.26 --- CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 667594ba7..df20f5200 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ +## v0.26 (2020-01-05) + +Changes: +- Add ability to search for a card ([#320](https://github.com/brarcher/loyalty-card-locker/pull/320)) +- Add ability to share and receive loyalty cards ([#321](https://github.com/brarcher/loyalty-card-locker/pull/321)) +- Dark mode support ([#322](https://github.com/brarcher/loyalty-card-locker/pull/322)) +- Loyalty cards can now be barcodeless (e.g. not have a barcode) ([#324](https://github.com/brarcher/loyalty-card-locker/pull/324)) +- Notes can span multiple lines ([#326](https://github.com/brarcher/loyalty-card-locker/pull/326)) +- Improvements with the sizing of notes ([#319](https://github.com/brarcher/loyalty-card-locker/pull/319)) +- Improve notification and app icon visibility ([#330](https://github.com/brarcher/loyalty-card-locker/pull/330)) +- Update target SDK to Android 10 +- Improve the following translations: + * German + * Italian + * Dutch + * Polish + * Russian + ## v0.25.4 (2019-10-04) Changes From aad98ba55bae58e5e330616ac33181616f4ec87b Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Thu, 9 Jan 2020 20:16:54 +0100 Subject: [PATCH 06/16] Fix NPE when sharing cards without header values --- .../protect/card_locker/ImportURIHelper.java | 26 ++++++++++++++++--- .../protect/card_locker/ImportURITest.java | 25 ++++++++++++++++++ 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/protect/card_locker/ImportURIHelper.java b/app/src/main/java/protect/card_locker/ImportURIHelper.java index d3133bcb3..5aeeb0cec 100644 --- a/app/src/main/java/protect/card_locker/ImportURIHelper.java +++ b/app/src/main/java/protect/card_locker/ImportURIHelper.java @@ -35,12 +35,24 @@ public class ImportURIHelper { } try { + // These values are allowed to be null + Integer headerColor = null; + Integer headerTextColor = null; + String store = uri.getQueryParameter(STORE); String note = uri.getQueryParameter(NOTE); String cardId = uri.getQueryParameter(CARD_ID); String barcodeType = uri.getQueryParameter(BARCODE_TYPE); - Integer headerColor = Integer.parseInt(uri.getQueryParameter(HEADER_COLOR)); - Integer headerTextColor = Integer.parseInt(uri.getQueryParameter(HEADER_TEXT_COLOR)); + String unparsedHeaderColor = uri.getQueryParameter(HEADER_COLOR); + if(unparsedHeaderColor != null) + { + headerColor = Integer.parseInt(unparsedHeaderColor); + } + String unparsedHeaderTextColor = uri.getQueryParameter(HEADER_TEXT_COLOR); + if(unparsedHeaderTextColor != null) + { + headerTextColor = Integer.parseInt(unparsedHeaderTextColor); + } return new LoyaltyCard(-1, store, note, cardId, barcodeType, headerColor, headerTextColor); } catch (NullPointerException | NumberFormatException ex) { throw new InvalidObjectException("Not a valid import URI"); @@ -57,8 +69,14 @@ public class ImportURIHelper { uriBuilder.appendQueryParameter(NOTE, loyaltyCard.note); uriBuilder.appendQueryParameter(CARD_ID, loyaltyCard.cardId); uriBuilder.appendQueryParameter(BARCODE_TYPE, loyaltyCard.barcodeType); - uriBuilder.appendQueryParameter(HEADER_COLOR, loyaltyCard.headerColor.toString()); - uriBuilder.appendQueryParameter(HEADER_TEXT_COLOR, loyaltyCard.headerTextColor.toString()); + if(loyaltyCard.headerColor != null) + { + uriBuilder.appendQueryParameter(HEADER_COLOR, loyaltyCard.headerColor.toString()); + } + if(loyaltyCard.headerTextColor != null) + { + uriBuilder.appendQueryParameter(HEADER_TEXT_COLOR, loyaltyCard.headerTextColor.toString()); + } return uriBuilder.build(); } diff --git a/app/src/test/java/protect/card_locker/ImportURITest.java b/app/src/test/java/protect/card_locker/ImportURITest.java index 015c43395..d6f6a3438 100644 --- a/app/src/test/java/protect/card_locker/ImportURITest.java +++ b/app/src/test/java/protect/card_locker/ImportURITest.java @@ -12,6 +12,7 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import java.io.InvalidObjectException; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static protect.card_locker.DBHelper.LoyaltyCardDbIds; @@ -53,6 +54,30 @@ public class ImportURITest { assertEquals(card.store, parsedCard.store); } + @Test + public void ensureNoCrashOnMissingHeaderFields() throws InvalidObjectException + { + // Generate card + db.insertLoyaltyCard("store", "note", BarcodeFormat.UPC_A.toString(), LoyaltyCardDbIds.BARCODE_TYPE, null, null); + + // Get card + LoyaltyCard card = db.getLoyaltyCard(1); + + // Card to URI + Uri cardUri = importURIHelper.toUri(card); + + // Parse URI + LoyaltyCard parsedCard = importURIHelper.parse(cardUri); + + // Compare everything + assertEquals(card.barcodeType, parsedCard.barcodeType); + assertEquals(card.cardId, parsedCard.cardId); + assertEquals(card.note, parsedCard.note); + assertEquals(card.store, parsedCard.store); + assertNull(parsedCard.headerColor); + assertNull(parsedCard.headerTextColor); + } + @Test public void failToParseInvalidUri() { From bf48e394e986ac4579f7e7e310e70bb326c7e29f Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Thu, 9 Jan 2020 19:34:50 -0800 Subject: [PATCH 07/16] Update app for v0.26.1 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6e8ce7502..650f3a706 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,8 +13,8 @@ android { applicationId "protect.card_locker" minSdkVersion 16 targetSdkVersion 29 - versionCode 36 - versionName "0.26" + versionCode 37 + versionName "0.26.1" } buildTypes { release { From 1a35150677b42a2207a5de9857c830b43e04ca18 Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Thu, 9 Jan 2020 19:35:13 -0800 Subject: [PATCH 08/16] Update CHANGELOG for v0.26.1 --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index df20f5200..9f0ec9b4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## v0.26.1 (2020-01-09) + +Changes: +- Fix issue with sharing cards without background color ([#343](https://github.com/brarcher/loyalty-card-locker/pull/343)) + ## v0.26 (2020-01-05) Changes: From 3990992f68835e43989203784d01c116279a59a5 Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Sat, 18 Jan 2020 13:33:02 +0100 Subject: [PATCH 09/16] Fix swapped import buttons --- .../card_locker/ImportExportActivity.java | 52 +++++++++---------- .../card_locker/ImportExportActivityTest.java | 4 +- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/protect/card_locker/ImportExportActivity.java b/app/src/main/java/protect/card_locker/ImportExportActivity.java index bd8fac2d3..bbd4eba9a 100644 --- a/app/src/main/java/protect/card_locker/ImportExportActivity.java +++ b/app/src/main/java/protect/card_locker/ImportExportActivity.java @@ -81,36 +81,14 @@ public class ImportExportActivity extends AppCompatActivity } }); - - // Check that there is an activity that can bring up a file chooser - final Intent intentPickAction = new Intent(Intent.ACTION_PICK); - - Button importFilesystem = findViewById(R.id.importOptionFilesystemButton); - importFilesystem.setOnClickListener(new View.OnClickListener() - { - @Override - public void onClick(View v) - { - chooseFileWithIntent(intentPickAction); - } - }); - - if(isCallable(getApplicationContext(), intentPickAction) == false) - { - findViewById(R.id.dividerImportFilesystem).setVisibility(View.GONE); - findViewById(R.id.importOptionFilesystemTitle).setVisibility(View.GONE); - findViewById(R.id.importOptionFilesystemExplanation).setVisibility(View.GONE); - importFilesystem.setVisibility(View.GONE); - } - - - // Check that there is an application that can find content + // Check that there is a file manager available final Intent intentGetContentAction = new Intent(Intent.ACTION_GET_CONTENT); intentGetContentAction.addCategory(Intent.CATEGORY_OPENABLE); intentGetContentAction.setType("*/*"); - Button importApplication = findViewById(R.id.importOptionApplicationButton); - importApplication.setOnClickListener(new View.OnClickListener() + + Button importFilesystem = findViewById(R.id.importOptionFilesystemButton); + importFilesystem.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) @@ -120,6 +98,27 @@ public class ImportExportActivity extends AppCompatActivity }); if(isCallable(getApplicationContext(), intentGetContentAction) == false) + { + findViewById(R.id.dividerImportFilesystem).setVisibility(View.GONE); + findViewById(R.id.importOptionFilesystemTitle).setVisibility(View.GONE); + findViewById(R.id.importOptionFilesystemExplanation).setVisibility(View.GONE); + importFilesystem.setVisibility(View.GONE); + } + + // Check that there is an app that data can be imported from + final Intent intentPickAction = new Intent(Intent.ACTION_PICK); + + Button importApplication = findViewById(R.id.importOptionApplicationButton); + importApplication.setOnClickListener(new View.OnClickListener() + { + @Override + public void onClick(View v) + { + chooseFileWithIntent(intentPickAction); + } + }); + + if(isCallable(getApplicationContext(), intentPickAction) == false) { findViewById(R.id.dividerImportApplication).setVisibility(View.GONE); findViewById(R.id.importOptionApplicationTitle).setVisibility(View.GONE); @@ -127,7 +126,6 @@ public class ImportExportActivity extends AppCompatActivity importApplication.setVisibility(View.GONE); } - // This option, to import from the fixed location, should always be present Button importButton = findViewById(R.id.importOptionFixedButton); diff --git a/app/src/test/java/protect/card_locker/ImportExportActivityTest.java b/app/src/test/java/protect/card_locker/ImportExportActivityTest.java index 8da091476..3da64ff7d 100644 --- a/app/src/test/java/protect/card_locker/ImportExportActivityTest.java +++ b/app/src/test/java/protect/card_locker/ImportExportActivityTest.java @@ -71,7 +71,7 @@ public class ImportExportActivityTest if(isInstalled) { - registerIntentHandler(Intent.ACTION_PICK); + registerIntentHandler(Intent.ACTION_GET_CONTENT); } Activity activity = Robolectric.setupActivity(ImportExportActivity.class); @@ -102,7 +102,7 @@ public class ImportExportActivityTest if(isInstalled) { - registerIntentHandler(Intent.ACTION_GET_CONTENT); + registerIntentHandler(Intent.ACTION_PICK); } Activity activity = Robolectric.setupActivity(ImportExportActivity.class); From f8943af4024744b641ae9cd98d3337876c64ad0a Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Sun, 19 Jan 2020 16:45:17 +0100 Subject: [PATCH 10/16] Tap barcode to align to top --- .../card_locker/LoyaltyCardViewActivity.java | 101 +++++++++++++++++- 1 file changed, 99 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index 50712e423..30e3af167 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -7,6 +7,8 @@ import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; + +import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.graphics.ColorUtils; import androidx.core.graphics.drawable.DrawableCompat; import androidx.core.widget.TextViewCompat; @@ -19,6 +21,7 @@ import android.util.TypedValue; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.Window; import android.view.WindowManager; @@ -49,7 +52,12 @@ public class LoyaltyCardViewActivity extends AppCompatActivity ImportURIHelper importURIHelper; Settings settings; + String cardIdString; + BarcodeFormat format; + boolean backgroundNeedsDarkIcons; + boolean barcodeIsFullscreen = false; + ViewGroup.LayoutParams barcodeImageState; private void extractIntentFields(Intent intent) { @@ -104,6 +112,21 @@ public class LoyaltyCardViewActivity extends AppCompatActivity collapsingToolbarLayout = findViewById(R.id.collapsingToolbarLayout); rotationEnabled = true; + + // Allow making barcode fullscreen on tap + barcodeImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if(barcodeIsFullscreen) + { + setBarcodeFullscreen(false); + } + else + { + setBarcodeFullscreen(true); + } + } + }); } @Override @@ -143,8 +166,8 @@ public class LoyaltyCardViewActivity extends AppCompatActivity } String formatString = loyaltyCard.barcodeType; - final BarcodeFormat format = !formatString.isEmpty() ? BarcodeFormat.valueOf(formatString) : null; - final String cardIdString = loyaltyCard.cardId; + format = !formatString.isEmpty() ? BarcodeFormat.valueOf(formatString) : null; + cardIdString = loyaltyCard.cardId; cardIdFieldView.setText(loyaltyCard.cardId); TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(cardIdFieldView, @@ -244,6 +267,18 @@ public class LoyaltyCardViewActivity extends AppCompatActivity } } + @Override + public void onBackPressed() { + if (barcodeIsFullscreen) + { + setBarcodeFullscreen(false); + return; + } + + super.onBackPressed(); + return; + } + @Override public boolean onCreateOptionsMenu(Menu menu) { @@ -321,4 +356,66 @@ public class LoyaltyCardViewActivity extends AppCompatActivity setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); } } + + private void setBarcodeFullscreen(boolean enabled) + { + ActionBar actionBar = getSupportActionBar(); + if(enabled && !barcodeIsFullscreen) + { + // Save previous barcodeImage state + barcodeImageState = barcodeImage.getLayoutParams(); + + // Hide actionbar + if(actionBar != null) + { + actionBar.hide(); + } + + // Hide collapsingToolbar + collapsingToolbarLayout.setVisibility(View.GONE); + + // Set Android to fullscreen mode + getWindow().getDecorView().setSystemUiVisibility( + getWindow().getDecorView().getSystemUiVisibility() + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + | View.SYSTEM_UI_FLAG_FULLSCREEN + ); + + // Make barcode take all space + barcodeImage.setLayoutParams(new ConstraintLayout.LayoutParams( + ConstraintLayout.LayoutParams.MATCH_PARENT, + ConstraintLayout.LayoutParams.MATCH_PARENT + )); + + // Move barcode to top + barcodeImage.setScaleType(ImageView.ScaleType.FIT_START); + + // Set current state + barcodeIsFullscreen = true; + } + else if(!enabled && barcodeIsFullscreen) + { + // Show actionbar + if(actionBar != null) + { + actionBar.show(); + } + + // Show collapsingToolbar + collapsingToolbarLayout.setVisibility(View.VISIBLE); + + // Unset fullscreen mode + getWindow().getDecorView().setSystemUiVisibility( + getWindow().getDecorView().getSystemUiVisibility() + & ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + & ~View.SYSTEM_UI_FLAG_FULLSCREEN + ); + + // Turn barcode back to normal + barcodeImage.setLayoutParams(barcodeImageState); + + // Set current state + barcodeIsFullscreen = false; + } + } } From 2c12c312e3b28f31bc680e937d4adb97ccb99cc4 Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Sun, 19 Jan 2020 17:46:50 +0100 Subject: [PATCH 11/16] Add unit tests --- .../LoyaltyCardViewActivityTest.java | 66 ++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index e139de488..4c45e3cca 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -1,6 +1,7 @@ package protect.card_locker; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.robolectric.Shadows.shadowOf; @@ -22,6 +23,7 @@ import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; +import android.widget.ImageView; import android.widget.TextView; import androidx.core.widget.TextViewCompat; import com.google.zxing.BarcodeFormat; @@ -35,7 +37,6 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.android.controller.ActivityController; import org.robolectric.annotation.Config; -import org.robolectric.shadows.ShadowPackageManager; import org.robolectric.shadows.ShadowActivity; import org.robolectric.shadows.ShadowLog; @@ -686,6 +687,69 @@ public class LoyaltyCardViewActivityTest } } + @Test + public void checkBarcodeFullscreenWorkflow() + { + ActivityController activityController = createActivityWithLoyaltyCard(false); + + Activity activity = (Activity)activityController.get(); + DBHelper db = new DBHelper(activity); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE); + + activityController.start(); + activityController.visible(); + activityController.resume(); + + assertEquals(false, activity.isFinishing()); + + ImageView barcodeImage = activity.findViewById(R.id.barcode); + View collapsingToolbarLayout = activity.findViewById(R.id.collapsingToolbarLayout); + + // Android should not be in fullscreen mode + int uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); + assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions); + assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); + + // Elements should be visible + assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility()); + + // Click barcode to toggle fullscreen + barcodeImage.performClick(); + + // Android should be in fullscreen mode + uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); + assertEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions); + assertEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); + + // Elements should not be visible + assertEquals(View.GONE, collapsingToolbarLayout.getVisibility()); + + // Clicking barcode again should deactivate fullscreen mode + barcodeImage.performClick(); + uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); + assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions); + assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); + assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility()); + + // Another click back to fullscreen + barcodeImage.performClick(); + uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); + assertEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions); + assertEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); + assertEquals(View.GONE, collapsingToolbarLayout.getVisibility()); + + // In full screen mode, back button should disable fullscreen + activity.onBackPressed(); + uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); + assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions); + assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); + assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility()); + + // Pressing back when not in full screen should finish activity + activity.onBackPressed(); + assertEquals(true, activity.isFinishing()); + } + @Test public void importCard() { From 4a7e8b6ebab870e079be0ab644f9688ac9a8a5bc Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Sun, 19 Jan 2020 19:07:06 +0100 Subject: [PATCH 12/16] Reset state on paused to prevent layout glitches --- .../card_locker/LoyaltyCardViewActivity.java | 6 ++++++ .../card_locker/LoyaltyCardViewActivityTest.java | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index 30e3af167..edeaf63b9 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -145,6 +145,12 @@ public class LoyaltyCardViewActivity extends AppCompatActivity Log.i(TAG, "To view card: " + loyaltyCardId); + if(barcodeIsFullscreen) + { + // Properly reset state to prevent any issues + recreate(); + } + // The brightness value is on a scale from [0, ..., 1], where // '1' is the brightest. We attempt to maximize the brightness // to help barcode readers scan the barcode. diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index 4c45e3cca..230870f34 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -738,6 +738,21 @@ public class LoyaltyCardViewActivityTest assertEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); assertEquals(View.GONE, collapsingToolbarLayout.getVisibility()); + // Resuming the activity should revert the state to normal view + activityController.pause(); + activityController.resume(); + uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); + assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions); + assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); + assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility()); + + // Clicking the barcode should still work to fullscreen again + barcodeImage.performClick(); + uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); + assertEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions); + assertEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); + assertEquals(View.GONE, collapsingToolbarLayout.getVisibility()); + // In full screen mode, back button should disable fullscreen activity.onBackPressed(); uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); From 3600065ef8fde538dd994b8ab26b50dbc21c2006 Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Sun, 19 Jan 2020 19:55:08 +0100 Subject: [PATCH 13/16] Robolectric crashes if activity recreates --- .../card_locker/LoyaltyCardViewActivityTest.java | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index 230870f34..4c45e3cca 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -738,21 +738,6 @@ public class LoyaltyCardViewActivityTest assertEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); assertEquals(View.GONE, collapsingToolbarLayout.getVisibility()); - // Resuming the activity should revert the state to normal view - activityController.pause(); - activityController.resume(); - uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); - assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions); - assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); - assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility()); - - // Clicking the barcode should still work to fullscreen again - barcodeImage.performClick(); - uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); - assertEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions); - assertEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); - assertEquals(View.GONE, collapsingToolbarLayout.getVisibility()); - // In full screen mode, back button should disable fullscreen activity.onBackPressed(); uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); From fd6c66a86a730335158468c27b24319d6c578daa Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Tue, 21 Jan 2020 20:06:58 +0100 Subject: [PATCH 14/16] Improve documentation --- .../card_locker/LoyaltyCardViewActivity.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index edeaf63b9..f91014d68 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -119,11 +119,11 @@ public class LoyaltyCardViewActivity extends AppCompatActivity public void onClick(View view) { if(barcodeIsFullscreen) { - setBarcodeFullscreen(false); + setFullscreen(false); } else { - setBarcodeFullscreen(true); + setFullscreen(true); } } }); @@ -147,7 +147,10 @@ public class LoyaltyCardViewActivity extends AppCompatActivity if(barcodeIsFullscreen) { - // Properly reset state to prevent any issues + // Completely reset state + // + // This prevents the barcode from taking up the entire screen + // on resume and thus being stretched out of proportion. recreate(); } @@ -277,7 +280,7 @@ public class LoyaltyCardViewActivity extends AppCompatActivity public void onBackPressed() { if (barcodeIsFullscreen) { - setBarcodeFullscreen(false); + setFullscreen(false); return; } @@ -363,10 +366,16 @@ public class LoyaltyCardViewActivity extends AppCompatActivity } } - private void setBarcodeFullscreen(boolean enabled) + /** + * When enabled, hides the status bar and moves the barcode to the top of the screen. + * + * The purpose of this function is to make sure the barcode can be scanned from the phone + * by machines which offer no space to insert the complete device. + */ + private void setFullscreen(boolean enable) { ActionBar actionBar = getSupportActionBar(); - if(enabled && !barcodeIsFullscreen) + if(enable && !barcodeIsFullscreen) { // Save previous barcodeImage state barcodeImageState = barcodeImage.getLayoutParams(); @@ -399,7 +408,7 @@ public class LoyaltyCardViewActivity extends AppCompatActivity // Set current state barcodeIsFullscreen = true; } - else if(!enabled && barcodeIsFullscreen) + else if(!enable && barcodeIsFullscreen) { // Show actionbar if(actionBar != null) From 8fa868e99b31c49ae59c17a3eb88648df124f57b Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Sun, 26 Jan 2020 22:26:40 -0800 Subject: [PATCH 15/16] Update for v0.27 --- CHANGELOG.md | 7 +++++++ app/build.gradle | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f0ec9b4a..b6e361651 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## v0.27 (2020-01-26) + +Changes: +- Tapping on a barcode now moves it to the top of the screen ([#348](https://github.com/brarcher/loyalty-card-locker/pull/348)) +- Add white space around barcodes to improve scanning in dark mode ([#328](https://github.com/brarcher/loyalty-card-locker/issues/328)) +- Fix swapped import buttons. ([#346](https://github.com/brarcher/loyalty-card-locker/pull/346)) + ## v0.26.1 (2020-01-09) Changes: diff --git a/app/build.gradle b/app/build.gradle index 650f3a706..1037c32dd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,8 +13,8 @@ android { applicationId "protect.card_locker" minSdkVersion 16 targetSdkVersion 29 - versionCode 37 - versionName "0.26.1" + versionCode 38 + versionName "0.27" } buildTypes { release { From b776f90b87ed3a64060b8d7d9d3dfffa5676a731 Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Sat, 1 Feb 2020 16:11:29 -0800 Subject: [PATCH 16/16] Update translations from Weblate --- app/src/main/res/values-nb-rNO/strings.xml | 84 ++++++++++------------ 1 file changed, 37 insertions(+), 47 deletions(-) diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 0e2bf7147..0b80d7ff2 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -1,19 +1,15 @@ - - + + Kundekortknippe Legg til - Du har ingen kundekort for øyeblikket. Klikk på \"+\" (pluss)-knappen øverst for å komme igang.\n\nDa har du dem alltid hendig. - Butikk Merknad Kort-ID Strekkodetype - Avbryt Lagre - Fang opp kort + Les inn kort Skriv inn kort Rediger kort Rediger @@ -25,25 +21,19 @@ Bekreft at du ønsker å slette dette kortet. OK Kopier ID til utklippstavle - Send… + Send… Lagt til på hjemmeskjerm - Rediger kundekort Legg til kundekort Vis kundekort Skann kortets strekkode Kort-snarvei Legg til et kort først - Bilde av kortets strekkode - Ingen butikk angitt Ingen kort-ID innskrevet Kunne ikke finne kundekort - %1$s: %2$s - %1$s - %2$s - Import/eksport Importer Eksporter @@ -57,9 +47,9 @@ Eksportert Kunne ikke eksportere Klarte ikke å eksportere: %1$s - Importerer… - Exporterer… - Kunne ikke importere eller eksportere kort uten tilgang til ekstern lagring. + Importerer… + Exporterer… + Kan ikke importere eller eksportere kort uten tilgang til ekstern lagring Data skrives til rotmappen i eksternt lagringsområde. Importer fra filsystem Velg spesifikk fil fra filsystemet. @@ -70,57 +60,57 @@ Importer fra eksporteringsområde Importer fra området i filsystemet eksporter skrives til. Bruk eksporteringsplassering - - About - Copyright 2016-%d Branden Archer + Om + Kopirett 2016-%d Branden Archer Lisensiert GPLv3+. - Om %s - Versjon: %s - Slippinformasjon: %s - %s brukfer følgende tredjepartsbibliotek: %s - %s bruker følgende tredjepartsressurser: %s - + Om %s + + Versjon: %s + + Utgivelsesinfo: %s + + %s brukfer følgende tredjepartsbibliotek: %s + + + %s bruker følgende tredjepartsressurser: %s + Velg strekkode Skriv inn strekkodeverdien og velg så bildet som representerer strekkoden du ønsker å bruke. - Kort-ID kopiert til utklippstavle - Miniatyrbilde for kort - Start intro Velkommen til Kundekortknippe\n Håndter strekkodekodekundekort på din enhet.\n\n Tillegg av kort\n - Legg til et nytt kort ved å trykke på pluss-tegnet i kortlisten.\n\n + Legg til et nytt kort ved å trykke på + i kortlisten. +\n +\n Tillegg av kort\n - For å legge til en strekkode, ta bilde av den med kamera, eller skriv den inn manuelt.\n\n + Legg til strekkoder med kamera eller skriv dem inn manuelt. +\n +\n Vis kort\n For å vise et kort, klikk på butikknavnet fra hovedskjermen\n\n Sikkerhetskopi\n - Kortene kan sikkerhetskopieres. For å eksportere eller importere kortdata, trykk på \"Importer/eksporter\" i menyen på hovedsiden.\n\n + Kortene kan sikkerhetskopieres. For å eksportere eller importere kortdata, trykk på \"Importer/eksporter\" i hovedsidemenyen. +\n +\n Tilbakemeldinger\n - Dette programmet er reklamefri og gratis fri programvare. Se flere detaljer ved å trykke på \"Om\"-skjermen på hovedsiden.\n\nLevn en vurdering i programbutikken. (: - + Dette programmet er reklamefri og gratis genenslig fri programvare. Se flere detaljer ved å trykke på \"Om\"-skjermen på hovedsiden. +\n +\nLevn en vurdering i programbutikken. (: Endre - Butikktekstfarge + Skriftstørrelse for butikktekst Overskriftsfarge Farge for butikktekstbakgrunn Butikktekstfarge - Innstillinger Brukergrensesnitt Korttittelskriftstørrelse - pref_card_title_list_font_size_sp - Kortmerknadsskriftstørrelse - pref_card_note_list_font_size_sp - Korttittelskriftstørrelse - pref_card_title_font_size_sp - Kort-ID-skriftstørrelse - pref_card_id_font_size_sp - Kortmerknadsskriftstørrelse - pref_card_note_font_size_sp + Skriftstørrelse for kortmerknadsliste + Skriftstørrelse for korttittel + Skriftstørrelse for kort-ID + Skriftstørrelse for kortmerknad Lysere strekkodevisning - pref_display_card_max_brightness Lås strekkodesideretning - pref_lock_barcode_orientation