2121import android .widget .TextView ;
2222import android .widget .Toast ;
2323
24+ import org .joinmastodon .android .E ;
2425import org .joinmastodon .android .GlobalUserPreferences ;
2526import org .joinmastodon .android .R ;
2627import org .joinmastodon .android .api .requests .statuses .GetStatusSourceText ;
28+ import org .joinmastodon .android .api .requests .statuses .RevokeStatusQuote ;
2729import org .joinmastodon .android .api .requests .statuses .SetStatusConversationMuted ;
2830import org .joinmastodon .android .api .requests .statuses .SetStatusInteractionPolicies ;
2931import org .joinmastodon .android .api .requests .statuses .SetStatusPinned ;
3032import org .joinmastodon .android .api .session .AccountSessionManager ;
33+ import org .joinmastodon .android .events .StatusUpdatedEvent ;
3134import org .joinmastodon .android .fragments .AddAccountToListsFragment ;
3235import org .joinmastodon .android .fragments .ComposeFragment ;
3336import org .joinmastodon .android .fragments .NotificationsListFragment ;
3437import org .joinmastodon .android .fragments .ProfileFragment ;
3538import org .joinmastodon .android .fragments .report .ReportReasonChoiceFragment ;
3639import org .joinmastodon .android .model .Account ;
3740import org .joinmastodon .android .model .Attachment ;
41+ import org .joinmastodon .android .model .Quote ;
3842import org .joinmastodon .android .model .Relationship ;
3943import org .joinmastodon .android .model .Status ;
4044import org .joinmastodon .android .model .StatusPrivacy ;
45+ import org .joinmastodon .android .ui .M3AlertDialogBuilder ;
4146import org .joinmastodon .android .ui .OutlineProviders ;
4247import org .joinmastodon .android .ui .Snackbar ;
4348import org .joinmastodon .android .ui .sheets .ComposerVisibilitySheet ;
@@ -268,6 +273,29 @@ public void onError(ErrorResponse error){
268273 return false ;
269274 });
270275 sheet .show ();
276+ }else if (id ==R .id .remove_quote ){
277+ new M3AlertDialogBuilder (activity )
278+ .setTitle (R .string .remove_quote_confirm_title )
279+ .setMessage (R .string .remove_quote_confirm )
280+ .setPositiveButton (R .string .remove_quote_button , (dlg , which )->{
281+ new RevokeStatusQuote (item .status .quote .quotedStatus .id , item .status .id )
282+ .setCallback (new Callback <>(){
283+ @ Override
284+ public void onSuccess (Status result ){
285+ item .status .quote =result .quote ;
286+ E .post (new StatusUpdatedEvent (item .status ));
287+ }
288+
289+ @ Override
290+ public void onError (ErrorResponse error ){
291+ error .showToast (activity );
292+ }
293+ })
294+ .wrapProgress (activity , R .string .loading , true )
295+ .exec (item .accountID );
296+ })
297+ .setNegativeButton (R .string .cancel , null )
298+ .show ();
271299 }
272300 return true ;
273301 });
@@ -356,6 +384,7 @@ private void updateOptionsMenu(){
356384 MenuItem bookmark =menu .findItem (R .id .bookmark );
357385 MenuItem pin =menu .findItem (R .id .pin );
358386 MenuItem muteConversation =menu .findItem (R .id .mute_conversation );
387+ MenuItem removeQuote =menu .findItem (R .id .remove_quote );
359388 if (item .status !=null ){
360389 bookmark .setVisible (true );
361390 bookmark .setTitle (item .status .bookmarked ? R .string .remove_bookmark : R .string .add_bookmark );
@@ -366,21 +395,33 @@ private void updateOptionsMenu(){
366395 }else {
367396 bookmark .setVisible (false );
368397 pin .setVisible (false );
398+ removeQuote .setVisible (false );
369399 }
370400 if (isOwnPost ){
371401 mute .setVisible (false );
372402 block .setVisible (false );
373403 report .setVisible (false );
374404 follow .setVisible (false );
405+ removeQuote .setVisible (false );
375406 }else {
376407 mute .setVisible (true );
377408 block .setVisible (true );
378409 report .setVisible (true );
410+
411+ String truncatedName =account .displayName .length ()>20 ? (account .displayName .substring (0 , 15 )+"…" ) : account .displayName ;
412+
379413 follow .setVisible (relationship ==null || relationship .following || (!relationship .blocking && !relationship .blockedBy && !relationship .domainBlocking && !relationship .muting ));
380- mute .setTitle (item .context .getString (relationship !=null && relationship .muting ? R .string .unmute_user : R .string .mute_user , account .displayName ));
381- block .setTitle (item .context .getString (relationship !=null && relationship .blocking ? R .string .unblock_user : R .string .block_user , account .displayName ));
382- report .setTitle (item .context .getString (R .string .report_user , account .displayName ));
383- follow .setTitle (item .context .getString (relationship !=null && relationship .following ? R .string .unfollow_user : R .string .follow_user , account .displayName ));
414+ mute .setTitle (item .context .getString (relationship !=null && relationship .muting ? R .string .unmute_user : R .string .mute_user , truncatedName ));
415+ block .setTitle (item .context .getString (relationship !=null && relationship .blocking ? R .string .unblock_user : R .string .block_user , truncatedName ));
416+ report .setTitle (item .context .getString (R .string .report_user , truncatedName ));
417+ follow .setTitle (item .context .getString (relationship !=null && relationship .following ? R .string .unfollow_user : R .string .follow_user , truncatedName ));
418+
419+ if (item .status .quote !=null && item .status .quote .quotedStatus !=null && AccountSessionManager .getInstance ().isSelf (item .accountID , item .status .quote .quotedStatus .account )){
420+ removeQuote .setVisible (true );
421+ removeQuote .setTitle (item .context .getString (R .string .remove_quote , truncatedName ));
422+ }else {
423+ removeQuote .setVisible (false );
424+ }
384425 }
385426 if (item .status .muted !=null ){
386427 muteConversation .setVisible (isOwnPost || item .callbacks instanceof NotificationsListFragment );
0 commit comments