diff --git a/app/src/main/java/protect/card_locker/BarcodeImageWriterTask.java b/app/src/main/java/protect/card_locker/BarcodeImageWriterTask.java index 62f1e1826..f3f66c926 100644 --- a/app/src/main/java/protect/card_locker/BarcodeImageWriterTask.java +++ b/app/src/main/java/protect/card_locker/BarcodeImageWriterTask.java @@ -5,6 +5,7 @@ import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.PorterDuff; import android.util.Log; +import android.util.TypedValue; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -46,7 +47,7 @@ public class BarcodeImageWriterTask implements CompatCallable { BarcodeImageWriterTask( Context context, ImageView imageView, String cardIdString, CatimaBarcode barcodeFormat, TextView textView, - boolean showFallback, Runnable callback + boolean showFallback, Runnable callback, boolean roundCornerPadding ) { mContext = context; @@ -60,18 +61,27 @@ public class BarcodeImageWriterTask implements CompatCallable { cardId = cardIdString; format = barcodeFormat; + int padding = roundCornerPadding ? Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, context.getResources().getDisplayMetrics())) : 0; + final int MAX_WIDTH = getMaxWidth(format); + int tempImageHeight; + int tempImageWidth; + if (imageView.getWidth() < MAX_WIDTH) { - imageHeight = imageView.getHeight(); - imageWidth = imageView.getWidth(); + tempImageHeight = imageView.getHeight(); + tempImageWidth = imageView.getWidth(); } else { // Scale down the image to reduce the memory needed to produce it - imageWidth = MAX_WIDTH; + tempImageWidth = MAX_WIDTH; double ratio = (double) MAX_WIDTH / (double) imageView.getWidth(); - imageHeight = (int) (imageView.getHeight() * ratio); + tempImageHeight = (int) (imageView.getHeight() * ratio); } + // Ensure space for padding if wanted + imageWidth = tempImageWidth; + imageHeight = tempImageHeight - padding; + this.showFallback = showFallback; } diff --git a/app/src/main/java/protect/card_locker/BarcodeSelectorAdapter.java b/app/src/main/java/protect/card_locker/BarcodeSelectorAdapter.java index ff0e223a4..def91e389 100644 --- a/app/src/main/java/protect/card_locker/BarcodeSelectorAdapter.java +++ b/app/src/main/java/protect/card_locker/BarcodeSelectorAdapter.java @@ -76,6 +76,7 @@ public class BarcodeSelectorAdapter extends ArrayAdapter final CatimaBarcode format = CatimaBarcode.fromName(formatType); image.setImageBitmap(null); + image.setClipToOutline(true); if (image.getHeight() == 0) { // The size of the ImageView is not yet available as it has not @@ -89,13 +90,13 @@ public class BarcodeSelectorAdapter extends ArrayAdapter Log.d(TAG, "Generating barcode for type " + formatType); - BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null); + BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null, true); mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter); } }); } else { Log.d(TAG, "Generating barcode for type " + formatType); - BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null); + BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null, true); mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter); } } diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index 373d1a4d8..7cd6ed737 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -323,6 +323,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { barcodeIdField = findViewById(R.id.barcodeIdField); barcodeTypeField = findViewById(R.id.barcodeTypeField); barcodeImage = findViewById(R.id.barcode); + barcodeImage.setClipToOutline(true); barcodeImageLayout = findViewById(R.id.barcodeLayout); barcodeCaptureLayout = findViewById(R.id.barcodeCaptureLayout); cardImageFrontHolder = findViewById(R.id.frontImageHolder); @@ -1449,13 +1450,13 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { barcodeImage.getViewTreeObserver().removeOnGlobalLayoutListener(this); Log.d(TAG, "ImageView size now known"); - BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, barcodeImageGenerationFinishedCallback); + BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, barcodeImageGenerationFinishedCallback, true); mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter); } }); } else { Log.d(TAG, "ImageView size known known, creating barcode"); - BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, barcodeImageGenerationFinishedCallback); + BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, barcodeImageGenerationFinishedCallback, true); mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter); } } diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index fe36aadbf..caa53f928 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -278,6 +278,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements storeName = findViewById(R.id.storeName); maximizeButton = findViewById(R.id.maximizeButton); mainImage = findViewById(R.id.mainImage); + mainImage.setClipToOutline(true); dotIndicator = findViewById(R.id.dotIndicator); minimizeButton = findViewById(R.id.minimizeButton); collapsingToolbarLayout = findViewById(R.id.collapsingToolbarLayout); @@ -807,7 +808,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements } } - private void drawBarcode() { + private void drawBarcode(boolean addPadding) { mTasks.flushTaskList(TaskHandler.TYPE.BARCODE, true, false, false); if (format != null) { BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask( @@ -817,12 +818,13 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements format, null, false, - null); + null, + addPadding); mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter); } } - private void redrawBarcodeAfterResize() { + private void redrawBarcodeAfterResize(boolean addPadding) { if (format != null) { mainImage.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { @@ -831,7 +833,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements mainImage.getViewTreeObserver().removeOnGlobalLayoutListener(this); Log.d(TAG, "ImageView size now known"); - drawBarcode(); + drawBarcode(addPadding); } }); } @@ -852,17 +854,6 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements ImageType wantedImageType = imageTypes.get(index); - // Use padding in non-fullscreen mode - int px = Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics())); - ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) mainImage.getLayoutParams(); - layoutParams.topMargin = isFullscreen ? 0 : px; - if (!isFullscreen && wantedImageType == ImageType.BARCODE) { - mainImage.setPadding(0, px, 0, px); - } else { - mainImage.setPadding(0, 0, 0, 0); - } - mainImage.setLayoutParams(layoutParams); - if (wantedImageType == ImageType.BARCODE) { // Use border in non-fullscreen mode if (!isFullscreen) { @@ -872,9 +863,9 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements } if (waitForResize) { - redrawBarcodeAfterResize(); + redrawBarcodeAfterResize(!isFullscreen); } else { - drawBarcode(); + drawBarcode(!isFullscreen); } mainImage.setContentDescription(getString(R.string.barcodeImageDescriptionWithType, format.prettyName())); diff --git a/app/src/main/res/layout/barcode_layout.xml b/app/src/main/res/layout/barcode_layout.xml index 8ee0dd4ce..965c6a9cc 100644 --- a/app/src/main/res/layout/barcode_layout.xml +++ b/app/src/main/res/layout/barcode_layout.xml @@ -5,6 +5,7 @@ android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android"> @@ -189,7 +191,6 @@ android:layout_width="0dp" android:layout_height="@dimen/barcode_disp_height" android:layout_gravity="center_horizontal" - android:padding="10.0dp" android:id="@+id/barcode" android:layout_weight="1.0"/> 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 1db10765c..14ef54013 100644 --- a/app/src/main/res/layout/loyalty_card_view_layout.xml +++ b/app/src/main/res/layout/loyalty_card_view_layout.xml @@ -52,6 +52,7 @@ android:layout_marginStart="15.0dip" android:layout_marginEnd="15.0dip" android:layout_marginTop="10dp" + android:layout_marginBottom="10dp" android:padding="0dp" app:srcCompat="@drawable/ic_baseline_arrow_drop_up_24" android:contentDescription="@string/moveBarcodeToTopOfScreen" @@ -67,6 +68,7 @@ android:layout_width="match_parent" android:layout_height="0dp" android:orientation="horizontal" + android:layout_marginTop="0dp" android:layout_marginBottom="0dp" android:layout_marginStart="15.0dip" android:layout_marginEnd="15.0dip"