Fix clipping issues with archive icon.

Fixes #8344
This commit is contained in:
Alan Evans 2020-06-24 16:51:02 -03:00 committed by Greyson Parrelli
parent 98cf16479d
commit be2ec36e1f

View File

@ -22,12 +22,11 @@ import android.app.Activity;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Paint; import android.graphics.drawable.Drawable;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
@ -54,6 +53,7 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.view.ActionMode; import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.appcompat.widget.TooltipCompat; import androidx.appcompat.widget.TooltipCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.lifecycle.DefaultLifecycleObserver; import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ProcessLifecycleOwner; import androidx.lifecycle.ProcessLifecycleOwner;
@ -129,6 +129,7 @@ import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import static android.app.Activity.RESULT_OK; import static android.app.Activity.RESULT_OK;
@ -170,6 +171,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode
private StickyHeaderDecoration searchAdapterDecoration; private StickyHeaderDecoration searchAdapterDecoration;
private ViewGroup megaphoneContainer; private ViewGroup megaphoneContainer;
private SnapToTopDataObserver snapToTopDataObserver; private SnapToTopDataObserver snapToTopDataObserver;
private Drawable archiveDrawable;
public static ConversationListFragment newInstance() { public static ConversationListFragment newInstance() {
return new ConversationListFragment(); return new ConversationListFragment();
@ -988,7 +990,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode
} }
@Override @Override
public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, public void onChildDraw(@NonNull Canvas canvas, @NonNull RecyclerView recyclerView,
@NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder viewHolder,
float dX, float dY, int actionState, float dX, float dY, int actionState,
boolean isCurrentlyActive) boolean isCurrentlyActive)
@ -996,28 +998,32 @@ public class ConversationListFragment extends MainFragment implements ActionMode
if (viewHolder.itemView instanceof ConversationListItemInboxZero) return; if (viewHolder.itemView instanceof ConversationListItemInboxZero) return;
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
View itemView = viewHolder.itemView; View itemView = viewHolder.itemView;
Paint p = new Paint();
float alpha = 1.0f - Math.abs(dX) / (float) viewHolder.itemView.getWidth(); float alpha = 1.0f - Math.abs(dX) / (float) viewHolder.itemView.getWidth();
if (dX > 0) { if (dX > 0) {
Bitmap icon = BitmapFactory.decodeResource(getResources(), getArchiveIconRes()); Resources resources = getResources();
if (alpha > 0) p.setColor(getResources().getColor(R.color.green_500)); if (archiveDrawable == null) {
else p.setColor(Color.WHITE); archiveDrawable = ResourcesCompat.getDrawable(resources, getArchiveIconRes(), requireActivity().getTheme());
Objects.requireNonNull(archiveDrawable).setBounds(0, 0, archiveDrawable.getIntrinsicWidth(), archiveDrawable.getIntrinsicHeight());
}
c.drawRect((float) itemView.getLeft(), (float) itemView.getTop(), dX, canvas.save();
(float) itemView.getBottom(), p); canvas.clipRect(itemView.getLeft(), itemView.getTop(), dX, itemView.getBottom());
c.drawBitmap(icon, canvas.drawColor(alpha > 0 ? resources.getColor(R.color.green_500) : Color.WHITE);
(float) itemView.getLeft() + getResources().getDimension(R.dimen.conversation_list_fragment_archive_padding),
(float) itemView.getTop() + ((float) itemView.getBottom() - (float) itemView.getTop() - icon.getHeight())/2, canvas.translate(itemView.getLeft() + resources.getDimension(R.dimen.conversation_list_fragment_archive_padding),
p); itemView.getTop() + (itemView.getBottom() - itemView.getTop() - archiveDrawable.getIntrinsicHeight()) / 2f);
archiveDrawable.draw(canvas);
canvas.restore();
} }
viewHolder.itemView.setAlpha(alpha); viewHolder.itemView.setAlpha(alpha);
viewHolder.itemView.setTranslationX(dX); viewHolder.itemView.setTranslationX(dX);
} else { } else {
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); super.onChildDraw(canvas, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
} }
} }
} }