From 5b5bfedcfdf69a1c693d53b95ba2b60b4fbeaaf2 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Sat, 11 May 2019 00:16:53 +0200 Subject: [PATCH] add a different animation for 'prepare' --- src/com/b44t/messenger/DcMsg.java | 4 ++ .../securesms/ConversationListItem.java | 2 + .../components/ConversationItemFooter.java | 1 + .../components/DeliveryStatusView.java | 40 ++++++++++++++----- 4 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/com/b44t/messenger/DcMsg.java b/src/com/b44t/messenger/DcMsg.java index 68186b78e..77741c3d1 100644 --- a/src/com/b44t/messenger/DcMsg.java +++ b/src/com/b44t/messenger/DcMsg.java @@ -20,6 +20,7 @@ public class DcMsg { public final static int DC_STATE_IN_FRESH = 10; public final static int DC_STATE_IN_NOTICED = 13; public final static int DC_STATE_IN_SEEN = 16; + public final static int DC_STATE_OUT_PREPARING = 18; public final static int DC_STATE_OUT_PENDING = 20; public final static int DC_STATE_OUT_ERROR = 24; public final static int DC_STATE_OUT_DELIVERED = 26; @@ -127,6 +128,9 @@ public class DcMsg { public boolean isFailed() { return getState() == DC_STATE_OUT_ERROR; } + public boolean isPreparing() { + return getState() == DC_STATE_OUT_PREPARING; + } public long getExpiresIn() { return -1; // never. } diff --git a/src/org/thoughtcrime/securesms/ConversationListItem.java b/src/org/thoughtcrime/securesms/ConversationListItem.java index 5e04a4f3b..6e5eaecbe 100644 --- a/src/org/thoughtcrime/securesms/ConversationListItem.java +++ b/src/org/thoughtcrime/securesms/ConversationListItem.java @@ -305,6 +305,8 @@ public class ConversationListItem extends RelativeLayout deliveryStatusIndicator.setRead(); } else if (state == DcMsg.DC_STATE_OUT_DELIVERED) { deliveryStatusIndicator.setSent(); + } else if (state == DcMsg.DC_STATE_OUT_PREPARING) { + deliveryStatusIndicator.setPreparing(); } else if (state == DcMsg.DC_STATE_OUT_PENDING) { deliveryStatusIndicator.setPending(); } else { diff --git a/src/org/thoughtcrime/securesms/components/ConversationItemFooter.java b/src/org/thoughtcrime/securesms/components/ConversationItemFooter.java index dae529c62..ff7eb81c8 100644 --- a/src/org/thoughtcrime/securesms/components/ConversationItemFooter.java +++ b/src/org/thoughtcrime/securesms/components/ConversationItemFooter.java @@ -88,6 +88,7 @@ public class ConversationItemFooter extends LinearLayout { else if (messageRecord.isRemoteRead()) deliveryStatusView.setRead(); else if (messageRecord.isDelivered()) deliveryStatusView.setSent(); else if (messageRecord.isFailed()) deliveryStatusView.setFailed(); + else if (messageRecord.isPreparing()) deliveryStatusView.setPreparing(); else deliveryStatusView.setPending(); } } diff --git a/src/org/thoughtcrime/securesms/components/DeliveryStatusView.java b/src/org/thoughtcrime/securesms/components/DeliveryStatusView.java index abd9b62c8..484cc5b5a 100644 --- a/src/org/thoughtcrime/securesms/components/DeliveryStatusView.java +++ b/src/org/thoughtcrime/securesms/components/DeliveryStatusView.java @@ -11,25 +11,41 @@ import org.thoughtcrime.securesms.R; public class DeliveryStatusView { private final ImageView deliveryIndicator; - private static RotateAnimation animation; + private static RotateAnimation prepareAnimation; + private static RotateAnimation sendingAnimation; private boolean animated; public DeliveryStatusView(ImageView deliveryIndicator) { this.deliveryIndicator = deliveryIndicator; } - private void animate() + private void animatePrepare() { - if(animation==null) { - animation = new RotateAnimation(0, 360f, + if(prepareAnimation ==null) { + prepareAnimation = new RotateAnimation(360f, 0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); - animation.setInterpolator(new LinearInterpolator()); - animation.setDuration(1500); - animation.setRepeatCount(Animation.INFINITE); + prepareAnimation.setInterpolator(new LinearInterpolator()); + prepareAnimation.setDuration(2500); + prepareAnimation.setRepeatCount(Animation.INFINITE); } - deliveryIndicator.startAnimation(animation); + deliveryIndicator.startAnimation(prepareAnimation); + animated = true; + } + + private void animateSending() + { + if(sendingAnimation ==null) { + sendingAnimation = new RotateAnimation(0, 360f, + Animation.RELATIVE_TO_SELF, 0.5f, + Animation.RELATIVE_TO_SELF, 0.5f); + sendingAnimation.setInterpolator(new LinearInterpolator()); + sendingAnimation.setDuration(1500); + sendingAnimation.setRepeatCount(Animation.INFINITE); + } + + deliveryIndicator.startAnimation(sendingAnimation); animated = true; } @@ -46,10 +62,16 @@ public class DeliveryStatusView { deliveryIndicator.clearAnimation(); } + public void setPreparing() { + deliveryIndicator.setVisibility(View.VISIBLE); + deliveryIndicator.setImageResource(R.drawable.ic_delivery_status_sending); + animatePrepare(); + } + public void setPending() { deliveryIndicator.setVisibility(View.VISIBLE); deliveryIndicator.setImageResource(R.drawable.ic_delivery_status_sending); - animate(); + animateSending(); } public void setSent() {