diff --git a/res/layout/conversation_item_footer.xml b/res/layout/conversation_item_footer.xml
index d18978252..e22bd7f1c 100644
--- a/res/layout/conversation_item_footer.xml
+++ b/res/layout/conversation_item_footer.xml
@@ -28,10 +28,12 @@
android:textColor="?conversation_item_outgoing_text_secondary_color"
tools:text="30 mins"/>
-
+
diff --git a/res/layout/conversation_list_item_view.xml b/res/layout/conversation_list_item_view.xml
index 7fc1754af..bad497d70 100644
--- a/res/layout/conversation_list_item_view.xml
+++ b/res/layout/conversation_list_item_view.xml
@@ -101,7 +101,7 @@
@@ -117,12 +117,14 @@
android:textColor="?attr/conversation_list_item_date_color"
android:background="@drawable/archived_indicator_background" />
-
+
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index a4cf1cc42..396cd0225 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -170,10 +170,6 @@
-
-
-
-
diff --git a/src/org/thoughtcrime/securesms/ConversationListItem.java b/src/org/thoughtcrime/securesms/ConversationListItem.java
index c628a523e..24c34e19b 100644
--- a/src/org/thoughtcrime/securesms/ConversationListItem.java
+++ b/src/org/thoughtcrime/securesms/ConversationListItem.java
@@ -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);
diff --git a/src/org/thoughtcrime/securesms/components/ConversationItemFooter.java b/src/org/thoughtcrime/securesms/components/ConversationItemFooter.java
index 8f34469e8..6ef754203 100644
--- a/src/org/thoughtcrime/securesms/components/ConversationItemFooter.java
+++ b/src/org/thoughtcrime/securesms/components/ConversationItemFooter.java
@@ -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);
diff --git a/src/org/thoughtcrime/securesms/components/DeliveryStatusView.java b/src/org/thoughtcrime/securesms/components/DeliveryStatusView.java
index 1121a40c4..abd9b62c8 100644
--- a/src/org/thoughtcrime/securesms/components/DeliveryStatusView.java
+++ b/src/org/thoughtcrime/securesms/components/DeliveryStatusView.java
@@ -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);
}
}