simplify delivery-icon

This commit is contained in:
B. Petersen
2019-03-29 02:08:22 +01:00
parent 979d2c663d
commit e48d0f4029
7 changed files with 56 additions and 125 deletions
@@ -99,7 +99,7 @@ public class ConversationListItem extends RelativeLayout
this.subjectView = findViewById(R.id.subject);
this.fromView = findViewById(R.id.from_text);
this.dateView = findViewById(R.id.date);
this.deliveryStatusIndicator = findViewById(R.id.delivery_status);
this.deliveryStatusIndicator = new DeliveryStatusView(findViewById(R.id.delivery_indicator));
this.contactPhotoImage = findViewById(R.id.contact_photo_image);
this.archivedView = findViewById(R.id.archived);
this.unreadIndicator = findViewById(R.id.unread_indicator);
@@ -43,7 +43,7 @@ public class ConversationItemFooter extends LinearLayout {
dateView = findViewById(R.id.footer_date);
secureIndicatorView = findViewById(R.id.footer_secure_indicator);
deliveryStatusView = findViewById(R.id.footer_delivery_status);
deliveryStatusView = new DeliveryStatusView(findViewById(R.id.delivery_indicator));
if (attrs != null) {
TypedArray typedArray = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.ConversationItemFooter, 0, 0);
@@ -1,107 +1,76 @@
package org.thoughtcrime.securesms.components;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.FrameLayout;
import android.widget.ImageView;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.ResUtil;
public class DeliveryStatusView extends FrameLayout {
public class DeliveryStatusView {
private static final String TAG = DeliveryStatusView.class.getSimpleName();
private final ImageView deliveryIndicator;
private static RotateAnimation animation;
private boolean animated;
private static final RotateAnimation ROTATION_ANIMATION = new RotateAnimation(0, 360f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
static {
ROTATION_ANIMATION.setInterpolator(new LinearInterpolator());
ROTATION_ANIMATION.setDuration(1500);
ROTATION_ANIMATION.setRepeatCount(Animation.INFINITE);
public DeliveryStatusView(ImageView deliveryIndicator) {
this.deliveryIndicator = deliveryIndicator;
}
private final ImageView pendingIndicator;
private final ImageView sentIndicator;
private final ImageView readIndicator;
private final ImageView failedIndicator;
private void animate()
{
if(animation==null) {
animation = new RotateAnimation(0, 360f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
animation.setInterpolator(new LinearInterpolator());
animation.setDuration(1500);
animation.setRepeatCount(Animation.INFINITE);
}
public DeliveryStatusView(Context context) {
this(context, null);
deliveryIndicator.startAnimation(animation);
animated = true;
}
public DeliveryStatusView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public DeliveryStatusView(final Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
inflate(context, R.layout.delivery_status_view, this);
this.sentIndicator = findViewById(R.id.sent_indicator);
this.pendingIndicator = findViewById(R.id.pending_indicator);
this.readIndicator = findViewById(R.id.read_indicator);
this.failedIndicator = findViewById(R.id.failed_indicator);
if (attrs != null) {
TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.DeliveryStatusView, 0, 0);
int color = ResUtil.getColor(getContext(), R.attr.conversation_item_outgoing_text_secondary_color);
setTint(color);
typedArray.recycle();
private void clearAnimation()
{
if(animated) {
deliveryIndicator.clearAnimation();
animated = false;
}
}
public void setNone() {
this.setVisibility(View.GONE);
deliveryIndicator.setVisibility(View.GONE);
deliveryIndicator.clearAnimation();
}
public void setPending() {
this.setVisibility(View.VISIBLE);
pendingIndicator.setVisibility(View.VISIBLE);
pendingIndicator.startAnimation(ROTATION_ANIMATION);
sentIndicator.setVisibility(View.GONE);
readIndicator.setVisibility(View.GONE);
failedIndicator.setVisibility(View.GONE);
deliveryIndicator.setVisibility(View.VISIBLE);
deliveryIndicator.setImageResource(R.drawable.ic_delivery_status_sending);
animate();
}
public void setSent() {
this.setVisibility(View.VISIBLE);
pendingIndicator.setVisibility(View.GONE);
pendingIndicator.clearAnimation();
sentIndicator.setVisibility(View.VISIBLE);
readIndicator.setVisibility(View.GONE);
failedIndicator.setVisibility(View.GONE);
deliveryIndicator.setVisibility(View.VISIBLE);
deliveryIndicator.setImageResource(R.drawable.ic_delivery_status_sent);
clearAnimation();
}
public void setRead() {
this.setVisibility(View.VISIBLE);
pendingIndicator.setVisibility(View.GONE);
pendingIndicator.clearAnimation();
sentIndicator.setVisibility(View.GONE);
readIndicator.setVisibility(View.VISIBLE);
failedIndicator.setVisibility(View.GONE);
deliveryIndicator.setVisibility(View.VISIBLE);
deliveryIndicator.setImageResource(R.drawable.ic_delivery_status_read);
clearAnimation();
}
public void setFailed() {
this.setVisibility(View.VISIBLE);
pendingIndicator.setVisibility(View.GONE);
pendingIndicator.clearAnimation();
sentIndicator.setVisibility(View.GONE);
readIndicator.setVisibility(View.GONE);
failedIndicator.setVisibility(View.VISIBLE);
deliveryIndicator.setVisibility(View.VISIBLE);
deliveryIndicator.setImageResource(R.drawable.ic_delivery_status_failed);
clearAnimation();
}
public void setTint(int color) {
pendingIndicator.setColorFilter(color);
sentIndicator.setColorFilter(color);
readIndicator.setColorFilter(color);
failedIndicator.setColorFilter(color);
deliveryIndicator.setColorFilter(color);
}
}