578: preserve shortcut icon shape by padding, getting round corners back on card lists r=TheLastProject a=Kethen

adding padding to icons referencing https://developer.android.com/reference/android/graphics/drawable/AdaptiveIconDrawable.html
![image](https://user-images.githubusercontent.com/22017945/140962982-88becacc-677d-4593-8b7e-15fcc2f9df7e.png)
![image](https://user-images.githubusercontent.com/22017945/140889147-a40ea4ed-5fb1-47b8-9ec1-59bab7d6577f.png)



Co-authored-by: Katharine <kwchuiaa@connect.ust.hk>
This commit is contained in:
bors[bot]
2021-11-10 18:31:16 +00:00
committed by GitHub
4 changed files with 41 additions and 2 deletions

View File

@@ -5,6 +5,7 @@ import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Outline;
import android.graphics.drawable.Drawable;
import android.util.SparseBooleanArray;
import android.util.TypedValue;
@@ -12,6 +13,7 @@ import android.view.HapticFeedbackConstants;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewOutlineProvider;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
@@ -73,6 +75,15 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
// Invisible until we want to show something more
inputHolder.mDivider.setVisibility(View.GONE);
// remove outline shadow
inputHolder.mThumbnailContainer.setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
ViewOutlineProvider.BACKGROUND.getOutline(view, outline);
outline.setAlpha(0f);
}
});
int size = mSettings.getFontSizeMax(mSettings.getSmallFont());
if (mDarkModeEnabled) {
@@ -279,11 +290,13 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
public MaterialCardView mRow;
public View mDivider;
public RelativeLayout mThumbnailFrontContainer, mThumbnailBackContainer;
public MaterialCardView mThumbnailContainer;
public LoyaltyCardListItemViewHolder(View inputView, CardAdapterListener inputListener) {
super(inputView);
mRow = inputView.findViewById(R.id.row);
mDivider = inputView.findViewById(R.id.info_divider);
mThumbnailContainer = inputView.findViewById(R.id.thumbnail_container);
mThumbnailFrontContainer = inputView.findViewById(R.id.thumbnail_front);
mThumbnailBackContainer = inputView.findViewById(R.id.thumbnail_back);
mInformationContainer = inputView.findViewById(R.id.information_container);

View File

@@ -1284,6 +1284,8 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
db.setLoyaltyCardGroups(loyaltyCardId, selectedGroups);
ShortcutHelper.updateShortcuts(this, db.getLoyaltyCard(loyaltyCardId));
finish();
}

View File

@@ -3,8 +3,11 @@ package protect.card_locker;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
@@ -12,8 +15,11 @@ import java.util.List;
import androidx.core.content.pm.ShortcutInfoCompat;
import androidx.core.content.pm.ShortcutManagerCompat;
import androidx.core.graphics.ColorUtils;
import androidx.core.graphics.drawable.IconCompat;
import org.jetbrains.annotations.NotNull;
class ShortcutHelper {
// Android documentation says that no more than 5 shortcuts
// are supported. However, that may be too many, as not all
@@ -22,6 +28,14 @@ class ShortcutHelper {
// chance of being shown.
private static final int MAX_SHORTCUTS = 3;
// https://developer.android.com/reference/android/graphics/drawable/AdaptiveIconDrawable.html
private static final int ADAPTIVE_BITMAP_SCALE = 1;
private static final int ADAPTIVE_BITMAP_SIZE = 108 * ADAPTIVE_BITMAP_SCALE;
private static final int ADAPTIVE_BITMAP_VISIBLE_SIZE = 72 * ADAPTIVE_BITMAP_SCALE;
private static final int ADAPTIVE_BITMAP_IMAGE_SIZE = ADAPTIVE_BITMAP_VISIBLE_SIZE + 5 * ADAPTIVE_BITMAP_SCALE;
private static final int PADDING_COLOR = Color.argb(255, 255, 255, 255);
private static final int PADDING_COLOR_OVERLAY = Color.argb(127, 0, 0, 0);
/**
* Add a card to the app shortcuts, and maintain a list of the most
* recently used cards. If there is already a shortcut for the card,
@@ -106,6 +120,15 @@ class ShortcutHelper {
ShortcutManagerCompat.setDynamicShortcuts(context, list);
}
static @NotNull Bitmap createAdaptiveBitmap(@NotNull Bitmap in, int paddingColor){
Bitmap ret = Bitmap.createBitmap(ADAPTIVE_BITMAP_SIZE, ADAPTIVE_BITMAP_SIZE, Bitmap.Config.ARGB_8888);
Canvas output = new Canvas(ret);
output.drawColor(ColorUtils.compositeColors(PADDING_COLOR_OVERLAY, paddingColor));
Bitmap resized = Utils.resizeBitmap(in, ADAPTIVE_BITMAP_IMAGE_SIZE);
output.drawBitmap(resized, (ADAPTIVE_BITMAP_SIZE - resized.getWidth()) / 2f, (ADAPTIVE_BITMAP_SIZE - resized.getHeight()) / 2f, null);
return ret;
}
static ShortcutInfoCompat.Builder createShortcutBuilder(Context context, LoyaltyCard loyaltyCard) {
Intent intent = new Intent(context, LoyaltyCardViewActivity.class);
intent.setAction(Intent.ACTION_MAIN);
@@ -120,6 +143,8 @@ class ShortcutHelper {
Bitmap iconBitmap = Utils.retrieveCardImage(context, loyaltyCard.id, ImageLocationType.icon);
if (iconBitmap == null) {
iconBitmap = Utils.generateIcon(context, loyaltyCard, true).getLetterTile();
}else{
iconBitmap = createAdaptiveBitmap(iconBitmap, loyaltyCard.headerColor == null ? PADDING_COLOR : loyaltyCard.headerColor);
}
IconCompat icon = IconCompat.createWithAdaptiveBitmap(iconBitmap);

View File

@@ -32,8 +32,7 @@
app:cardCornerRadius="4dp"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
app:cardBackgroundColor="@android:color/transparent"
android:outlineProvider="none">
app:cardBackgroundColor="@android:color/transparent">
<RelativeLayout
android:id="@+id/thumbnail_front"