From b93b1847c3bb37ae47c5f3148ee01c7918b25972 Mon Sep 17 00:00:00 2001 From: sk Date: Wed, 7 Jun 2023 21:12:30 +0200 Subject: [PATCH] increase pixelfed compatibility --- .../android/fragments/ComposeFragment.java | 32 +++++++++++++++---- .../android/fragments/HasAccountID.java | 4 +++ .../android/fragments/ProfileFragment.java | 4 ++- .../joinmastodon/android/model/Account.java | 1 - .../joinmastodon/android/model/Instance.java | 4 +++ 5 files changed, 37 insertions(+), 8 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java index cc6f334b6..7fce1101b 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -149,7 +149,7 @@ import me.grishka.appkit.imageloader.ViewImageLoader; import me.grishka.appkit.imageloader.requests.UrlImageLoaderRequest; import me.grishka.appkit.utils.V; -public class ComposeFragment extends MastodonToolbarFragment implements OnBackPressedListener, ComposeEditText.SelectionListener{ +public class ComposeFragment extends MastodonToolbarFragment implements OnBackPressedListener, ComposeEditText.SelectionListener, HasAccountID { private static final int MEDIA_RESULT=717; private static final int IMAGE_DESCRIPTION_RESULT=363; @@ -355,6 +355,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr } else { mediaBtn.setOnClickListener(v -> openFilePicker(false)); } + if (isInstancePixelfed()) pollBtn.setVisibility(View.GONE); pollBtn.setOnClickListener(v->togglePoll()); emojiBtn.setOnClickListener(v->emojiKeyboard.toggleKeyboardPopup(mainEditText)); spoilerBtn.setOnClickListener(v->toggleSpoiler()); @@ -847,12 +848,18 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr updateScheduledAt(scheduledAt != null ? scheduledAt : scheduledStatus != null ? scheduledStatus.scheduledAt : null); buildLanguageSelector(languageButton); - if (editingStatus != null && scheduledStatus == null) { + if (isInstancePixelfed() || (editingStatus != null && scheduledStatus == null)) { // editing an already published post draftsBtn.setVisibility(View.GONE); + spoilerBtn.setVisibility(View.GONE); } } + @Override + public String getAccountID() { + return accountID; + } + private void navigateToUnsentPosts() { Bundle args=new Bundle(); args.putString("account", accountID); @@ -1009,7 +1016,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr if(att.state!=AttachmentUploadState.DONE) nonDoneAttachmentCount++; } - publishButton.setEnabled((trimmedCharCount>0 || !attachments.isEmpty()) && charCount<=charLimit && nonDoneAttachmentCount==0 && (pollOptions.isEmpty() || nonEmptyPollOptionsCount>1)); + publishButton.setEnabled((!isInstancePixelfed() || attachments.size() > 0) && (trimmedCharCount>0 || !attachments.isEmpty()) && charCount<=charLimit && nonDoneAttachmentCount==0 && (pollOptions.isEmpty() || nonEmptyPollOptionsCount>1)); sendError.setVisibility(View.GONE); } @@ -1151,7 +1158,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr sendProgress.setVisibility(View.VISIBLE); sendError.setVisibility(View.GONE); - Callback resCallback=new Callback<>(){ + Callback resCallback = new Callback<>(){ @Override public void onSuccess(Status result){ maybeDeleteScheduledPost(() -> { @@ -1164,7 +1171,17 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr E.post(new StatusCountersUpdatedEvent(replyTo)); } }else{ - E.post(new StatusUpdatedEvent(result)); + // pixelfed doesn't return the edited status :/ + Status editedStatus = result == null ? editingStatus : result; + if (result == null) { + editedStatus.text = req.status; + editedStatus.spoilerText = req.spoilerText; + editedStatus.sensitive = req.sensitive; + editedStatus.language = req.language; + // user will have to reload to see html + editedStatus.content = req.status; + } + E.post(new StatusUpdatedEvent(editedStatus)); } if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O || !isStateSaved()) { Nav.finish(ComposeFragment.this); @@ -1899,9 +1916,12 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr visibilityPopup=new PopupMenu(getActivity(), v); visibilityPopup.inflate(R.menu.compose_visibility); Menu m=visibilityPopup.getMenu(); + if (isInstancePixelfed()) { + m.findItem(R.id.vis_private).setVisible(false); + } MenuItem localOnlyItem = visibilityPopup.getMenu().findItem(R.id.local_only); boolean prefsSaysSupported = GlobalUserPreferences.accountsWithLocalOnlySupport.contains(accountID); - if (instance.isAkkoma()) { + if (isInstanceAkkoma()) { m.findItem(R.id.vis_local).setVisible(true); } else if (localOnly || prefsSaysSupported) { localOnlyItem.setVisible(true); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/HasAccountID.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/HasAccountID.java index 67a3bbfac..5e7f01fed 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HasAccountID.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HasAccountID.java @@ -17,6 +17,10 @@ public interface HasAccountID { return getInstance().map(Instance::isAkkoma).orElse(false); } + default boolean isInstancePixelfed() { + return getInstance().map(Instance::isPixelfed).orElse(false); + } + default Optional getInstance() { return getSession().getInstance(); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java index c637429e3..e40588491 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -654,8 +654,10 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList )); } menu.findItem(R.id.share).setTitle(getString(R.string.share_user, account.getShortUsername())); - if(isOwnProfile) + if(isOwnProfile) { + if (isInstancePixelfed()) menu.findItem(R.id.scheduled).setVisible(false); return; + } MenuItem mute = menu.findItem(R.id.mute); mute.setTitle(getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getShortUsername())); diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Account.java b/mastodon/src/main/java/org/joinmastodon/android/model/Account.java index 1fdfe08cc..99be28f88 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Account.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Account.java @@ -65,7 +65,6 @@ public class Account extends BaseModel implements Searchable{ /** * An image banner that is shown above the profile and in profile cards. */ - @RequiredField public String header; /** * A static version of the header. Equal to header if its value is a static image; different if header is an animated GIF. diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java b/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java index 12707952f..e5b6f8719 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java @@ -148,6 +148,10 @@ public class Instance extends BaseModel{ return pleroma != null; } + public boolean isPixelfed() { + return version.contains("compatible; Pixelfed"); + } + public boolean hasFeature(Feature feature) { Optional> pleromaFeatures = Optional.ofNullable(pleroma) .map(p -> p.metadata)