mirror of
https://github.com/ArcaneChat/android.git
synced 2026-07-03 14:05:24 +02:00
simplify delivery-icon
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user