@@ -51,7 +51,6 @@ public class MessageDetailsRecipient extends RelativeLayout
5151{
5252 private final static String TAG = MessageDetailsRecipient .class .getSimpleName ();
5353
54- private Context context ;
5554 private Recipient recipient ;
5655 private TextView fromView ;
5756 private TextView errorDescription ;
@@ -63,12 +62,10 @@ public class MessageDetailsRecipient extends RelativeLayout
6362
6463 public MessageDetailsRecipient (Context context ) {
6564 super (context );
66- this .context = context ;
6765 }
6866
6967 public MessageDetailsRecipient (Context context , AttributeSet attrs ) {
7068 super (context , attrs );
71- this .context = context ;
7269 }
7370
7471 @ Override
@@ -87,54 +84,50 @@ public void set(final MasterSecret masterSecret, final MessageRecord record, fin
8784
8885 setContactPhoto (recipient );
8986
90- int conflictVisibility = View .GONE ;
91- int resendVisibility = View .GONE ;
92- int errorVisibility = View .GONE ;
87+ boolean hasNetworkFailures = populateNetworkFailures (masterSecret , record );
88+ boolean hasConflicts = !hasNetworkFailures && populateConflicts (masterSecret , record );
89+
90+ resendButton .setVisibility (hasNetworkFailures || hasConflicts ? View .VISIBLE : View .GONE );
91+ conflictButton .setVisibility (hasConflicts ? View .VISIBLE : View .GONE );
92+ errorDescription .setVisibility (hasNetworkFailures ? View .VISIBLE : View .GONE );
93+ }
94+
95+ private boolean populateNetworkFailures (final MasterSecret masterSecret , final MessageRecord record ) {
96+ boolean applicableFailures = false ;
9397 if (record .hasNetworkFailures ()) {
9498 for (final NetworkFailure failure : record .getNetworkFailures ()) {
9599 if (failure .getRecipientId () == recipient .getRecipientId ()) {
96- resendVisibility = View .VISIBLE ;
97- errorVisibility = View .VISIBLE ;
98- errorDescription .setText ("Failed to send" );
100+ applicableFailures = true ;
101+ errorDescription .setText (R .string .MessageDetailsRecipient_failed_to_send );
99102 resendButton .setOnClickListener (new OnClickListener () {
100103 @ Override
101104 public void onClick (View v ) {
102- new AsyncTask <Void , Void , Void >() {
103- @ Override
104- protected Void doInBackground (Void ... params ) {
105- MmsDatabase mmsDatabase = DatabaseFactory .getMmsDatabase (getContext ());
106- mmsDatabase .removeFailure (record .getId (), failure );
107-
108- if (record .getRecipients ().isGroupRecipient ()) {
109- MessageSender .resendGroupMessage (getContext (), masterSecret , record , failure .getRecipientId ());
110- } else {
111- MessageSender .resend (getContext (), masterSecret , record );
112- }
113- return null ;
114- }
115- }.execute ();
105+ new ResendAsyncTask (masterSecret , record , failure ).execute ();
116106 }
117107 });
118108 }
119109 }
120- } else if (record .isIdentityMismatchFailure ()) {
110+ }
111+ return applicableFailures ;
112+ }
113+
114+ private boolean populateConflicts (final MasterSecret masterSecret , final MessageRecord record ) {
115+ boolean applicableFailures = false ;
116+ if (record .isIdentityMismatchFailure ()) {
121117 for (final IdentityKeyMismatch mismatch : record .getIdentityKeyMismatches ()) {
122118 if (mismatch .getRecipientId () == recipient .getRecipientId ()) {
123- conflictVisibility = View .VISIBLE ;
124- errorVisibility = View .VISIBLE ;
125- errorDescription .setText ("New identity" );
119+ applicableFailures = true ;
120+ errorDescription .setText (R .string .MessageDetailsRecipient_new_identity );
126121 conflictButton .setOnClickListener (new OnClickListener () {
127122 @ Override
128123 public void onClick (View v ) {
129- new ConfirmIdentityDialog (context , masterSecret , record , mismatch ).show ();
124+ new ConfirmIdentityDialog (getContext () , masterSecret , record , mismatch ).show ();
130125 }
131126 });
132127 }
133128 }
134129 }
135- resendButton .setVisibility (resendVisibility );
136- conflictButton .setVisibility (conflictVisibility );
137- errorDescription .setVisibility (errorVisibility );
130+ return applicableFailures ;
138131 }
139132
140133 public void unbind () {
@@ -150,7 +143,7 @@ private CharSequence formatFrom(Recipient from) {
150143 final String fromString ;
151144 final boolean isUnnamedGroup = from .isGroupRecipient () && TextUtils .isEmpty (from .getName ());
152145 if (isUnnamedGroup ) {
153- fromString = context .getString (R .string .ConversationActivity_unnamed_group );
146+ fromString = getContext () .getString (R .string .ConversationActivity_unnamed_group );
154147 } else {
155148 fromString = from .toShortString ();
156149 }
@@ -176,4 +169,30 @@ public void run() {
176169 }
177170 });
178171 }
172+
173+ private class ResendAsyncTask extends AsyncTask <Void ,Void ,Void > {
174+ private final MasterSecret masterSecret ;
175+ private final MessageRecord record ;
176+ private final NetworkFailure failure ;
177+
178+ public ResendAsyncTask (MasterSecret masterSecret , MessageRecord record , NetworkFailure failure ) {
179+ this .masterSecret = masterSecret ;
180+ this .record = record ;
181+ this .failure = failure ;
182+ }
183+
184+ @ Override
185+ protected Void doInBackground (Void ... params ) {
186+ MmsDatabase mmsDatabase = DatabaseFactory .getMmsDatabase (getContext ());
187+ mmsDatabase .removeFailure (record .getId (), failure );
188+
189+ if (record .getRecipients ().isGroupRecipient ()) {
190+ MessageSender .resendGroupMessage (getContext (), masterSecret , record , failure .getRecipientId ());
191+ } else {
192+ MessageSender .resend (getContext (), masterSecret , record );
193+ }
194+ return null ;
195+ }
196+ }
197+
179198}
0 commit comments