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/10] 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/10] 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 3990992f68835e43989203784d01c116279a59a5 Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Sat, 18 Jan 2020 13:33:02 +0100 Subject: [PATCH 03/10] 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 04/10] 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 05/10] 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 06/10] 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 07/10] 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 08/10] 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 09/10] 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 10/10] 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