diff --git a/mastodon/build.gradle b/mastodon/build.gradle
index 068c66b8c..845841c65 100644
--- a/mastodon/build.gradle
+++ b/mastodon/build.gradle
@@ -9,8 +9,8 @@ android {
applicationId "org.joinmastodon.android.moshinda"
minSdk 23
targetSdk 33
- versionCode 81
- versionName "1.1.4+fork.81.moshinda"
+ versionCode 84
+ versionName "1.1.4+fork.84.moshinda"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
resConfigs "ar-rSA", "be-rBY", "bn-rBD", "bs-rBA", "ca-rES", "cs-rCZ", "de-rDE", "el-rGR", "es-rES", "eu-rES", "fi-rFI", "fil-rPH", "fr-rFR", "ga-rIE", "gd-rGB", "gl-rES", "hi-rIN", "hr-rHR", "hu-rHU", "hy-rAM", "in-rID", "is-rIS", "it-rIT", "iw-rIL", "ja-rJP", "kab", "ko-rKR", "nl-rNL", "oc-rFR", "pl-rPL", "pt-rBR", "pt-rPT", "ro-rRO", "ru-rRU", "si-rLK", "sl-rSI", "sv-rSE", "th-rTH", "tr-rTR", "uk-rUA", "vi-rVN", "zh-rCN", "zh-rTW"
}
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 aabc8fab3..06bddf577 100644
--- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java
+++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java
@@ -917,7 +917,18 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
}
private void onPublishClick(View v){
- publish();
+ if (!attachments.isEmpty()
+ && statusVisibility != StatusPrivacy.DIRECT
+ && !attachments.stream().allMatch(attachment -> attachment.description != null && !attachment.description.isBlank())) {
+ new M3AlertDialogBuilder(getActivity())
+ .setTitle(R.string.sk_no_image_desc_title)
+ .setMessage(R.string.sk_no_image_desc)
+ .setNegativeButton(R.string.cancel, null)
+ .setPositiveButton(R.string.publish, (dialog, i)-> publish())
+ .show();
+ } else {
+ publish();
+ }
}
private void publishErrorCallback(ErrorResponse error) {
@@ -1030,6 +1041,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
}
};
+
if(editingStatus!=null && !redraftStatus){
new EditStatus(req, editingStatus.id)
.setCallback(resCallback)
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 39eb25a25..9bfda95f8 100644
--- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java
+++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java
@@ -1,11 +1,16 @@
package org.joinmastodon.android.fragments;
+import static android.content.Context.CLIPBOARD_SERVICE;
+
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.app.Fragment;
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Outline;
@@ -14,10 +19,11 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.style.ImageSpan;
-import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -32,9 +38,11 @@ import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
+import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
+import android.widget.Toast;
import android.widget.Toolbar;
import org.joinmastodon.android.GlobalUserPreferences;
@@ -96,9 +104,9 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
private static final int COVER_RESULT=343;
private ImageView avatar;
- private TextView botIcon;
private CoverImageView cover;
private View avatarBorder;
+ private Button botIcon;
private TextView name, username, bio, followersCount, followersLabel, followingCount, followingLabel, postsCount, postsLabel;
private ProgressBarButton actionButton, notifyButton;
private ViewPager2 pager;
@@ -131,7 +139,6 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
private WindowInsets childInsets;
private PhotoViewer currentPhotoViewer;
private boolean editModeLoading;
- private String prefilledText;
public ProfileFragment(){
super(R.layout.loader_fragment_overlay_toolbar);
@@ -156,8 +163,11 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
if(!getArguments().getBoolean("noAutoLoad", false))
loadData();
}
+ }
- prefilledText = AccountSessionManager.getInstance().isSelf(accountID, account) ? null : '@'+account.acct+' ';
+ private String getPrefilledText() {
+ return account == null || AccountSessionManager.getInstance().isSelf(accountID, account)
+ ? null : '@'+account.acct+' ';
}
@Override
@@ -173,7 +183,6 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
avatar=content.findViewById(R.id.avatar);
cover=content.findViewById(R.id.cover);
avatarBorder=content.findViewById(R.id.avatar_border);
- botIcon=content.findViewById(R.id.bot_icon);
name=content.findViewById(R.id.name);
username=content.findViewById(R.id.username);
bio=content.findViewById(R.id.bio);
@@ -183,6 +192,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
followingCount=content.findViewById(R.id.following_count);
followingLabel=content.findViewById(R.id.following_label);
followingBtn=content.findViewById(R.id.following_btn);
+
postsCount=content.findViewById(R.id.posts_count);
postsLabel=content.findViewById(R.id.posts_label);
postsBtn=content.findViewById(R.id.posts_btn);
@@ -266,15 +276,13 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
}
});
- botIcon.setVisibility(account.bot ? View.VISIBLE : View.GONE);
-
actionButton.setOnClickListener(this::onActionButtonClick);
notifyButton.setOnClickListener(this::onNotifyButtonClick);
avatar.setOnClickListener(this::onAvatarClick);
cover.setOnClickListener(this::onCoverClick);
refreshLayout.setOnRefreshListener(this);
fab.setOnClickListener(this::onFabClick);
- fab.setOnLongClickListener(v->UiUtils.pickAccountForCompose(getActivity(), accountID, prefilledText));
+ fab.setOnLongClickListener(v->UiUtils.pickAccountForCompose(getActivity(), accountID, getPrefilledText()));
if(loaded){
bindHeaderView();
@@ -549,25 +557,28 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
if(relationship==null && !isOwnProfile)
return;
inflater.inflate(isOwnProfile ? R.menu.profile_own : R.menu.profile, menu);
-// UiUtils.enableOptionsMenuIcons(getActivity(), menu, R.id.bookmarks, R.id.followed_hashtags);
- menu.findItem(R.id.share).setTitle(getString(R.string.share_user, account.getDisplayUsername()));
+ UiUtils.enableOptionsMenuIcons(getActivity(), menu, R.id.bookmarks, R.id.followed_hashtags, R.id.favorites, R.id.scheduled, R.id.share, R.id.bot_icon);
+ menu.findItem(R.id.share).setTitle(getString(R.string.share_user, account.getShortUsername()));
if(isOwnProfile)
return;
+ MenuItem botIcon = menu.findItem(R.id.bot_icon);
+ botIcon.setVisible(account.bot);
+
MenuItem mute = menu.findItem(R.id.mute);
- mute.setTitle(getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getDisplayUsername()));
- mute.setIcon(relationship.muting ? R.drawable.ic_fluent_speaker_2_24_regular : R.drawable.ic_fluent_speaker_mute_24_regular);
+ mute.setTitle(getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getShortUsername()));
+ mute.setIcon(relationship.muting ? R.drawable.ic_fluent_speaker_0_24_regular : R.drawable.ic_fluent_speaker_off_24_regular);
UiUtils.insetPopupMenuIcon(getContext(), mute);
- menu.findItem(R.id.block).setTitle(getString(relationship.blocking ? R.string.unblock_user : R.string.block_user, account.getDisplayUsername()));
- menu.findItem(R.id.report).setTitle(getString(R.string.report_user, account.getDisplayUsername()));
+ menu.findItem(R.id.block).setTitle(getString(relationship.blocking ? R.string.unblock_user : R.string.block_user, account.getShortUsername()));
+ menu.findItem(R.id.report).setTitle(getString(R.string.report_user, account.getShortUsername()));
MenuItem manageUserLists=menu.findItem(R.id.manage_user_lists);
if(relationship.following) {
MenuItem hideBoosts = menu.findItem(R.id.hide_boosts);
- hideBoosts.setTitle(getString(relationship.showingReblogs ? R.string.hide_boosts_from_user : R.string.show_boosts_from_user, account.getDisplayUsername()));
+ hideBoosts.setTitle(getString(relationship.showingReblogs ? R.string.hide_boosts_from_user : R.string.show_boosts_from_user, account.getShortUsername()));
hideBoosts.setIcon(relationship.showingReblogs ? R.drawable.ic_fluent_arrow_repeat_all_off_24_regular : R.drawable.ic_fluent_arrow_repeat_all_24_regular);
UiUtils.insetPopupMenuIcon(getContext(), hideBoosts);
- manageUserLists.setTitle(getString(R.string.sk_lists_with_user, account.getDisplayUsername()));
+ manageUserLists.setTitle(getString(R.string.sk_lists_with_user, account.getShortUsername()));
manageUserLists.setVisible(true);
}else {
menu.findItem(R.id.hide_boosts).setVisible(false);
@@ -640,6 +651,8 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
Bundle args=new Bundle();
args.putString("account", accountID);
Nav.go(getActivity(), ScheduledStatusListFragment.class, args);
+ }else if(id==R.id.bot_icon){
+ Toast.makeText(getActivity(), R.string.sk_bot_account, Toast.LENGTH_LONG).show();
}
return true;
}
@@ -951,7 +964,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
private void onFabClick(View v){
Bundle args=new Bundle();
args.putString("account", accountID);
- if(prefilledText != null) args.putString("prefilledText", prefilledText);
+ if(getPrefilledText() != null) args.putString("prefilledText", getPrefilledText());
Nav.go(getActivity(), ComposeFragment.class, args);
}
diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/text/LinkSpan.java b/mastodon/src/main/java/org/joinmastodon/android/ui/text/LinkSpan.java
index 8379a6922..94679733f 100644
--- a/mastodon/src/main/java/org/joinmastodon/android/ui/text/LinkSpan.java
+++ b/mastodon/src/main/java/org/joinmastodon/android/ui/text/LinkSpan.java
@@ -32,7 +32,7 @@ public class LinkSpan extends CharacterStyle {
public void updateDrawState(TextPaint tp) {
tp.setColor(color=tp.linkColor);
}
-
+
public void onClick(Context context){
switch(getType()){
case URL -> UiUtils.openURL(context, accountID, link);
@@ -45,7 +45,6 @@ public class LinkSpan extends CharacterStyle {
UiUtils.copyText(view, getType() == Type.URL ? link : text);
}
-
public String getLink(){
return link;
}
diff --git a/mastodon/src/main/res/drawable/ic_fluent_bot.xml b/mastodon/src/main/res/drawable/ic_fluent_bot.xml
deleted file mode 100644
index fb75803ff..000000000
--- a/mastodon/src/main/res/drawable/ic_fluent_bot.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/mastodon/src/main/res/drawable/ic_fluent_bot_20_regular.xml b/mastodon/src/main/res/drawable/ic_fluent_bot_20_regular.xml
new file mode 100644
index 000000000..5464f5d35
--- /dev/null
+++ b/mastodon/src/main/res/drawable/ic_fluent_bot_20_regular.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/mastodon/src/main/res/drawable/ic_fluent_bot_24_regular.xml b/mastodon/src/main/res/drawable/ic_fluent_bot_24_regular.xml
new file mode 100644
index 000000000..540503341
--- /dev/null
+++ b/mastodon/src/main/res/drawable/ic_fluent_bot_24_regular.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/mastodon/src/main/res/layout/fragment_profile.xml b/mastodon/src/main/res/layout/fragment_profile.xml
index 3629edcf9..22636c12c 100644
--- a/mastodon/src/main/res/layout/fragment_profile.xml
+++ b/mastodon/src/main/res/layout/fragment_profile.xml
@@ -72,22 +72,6 @@
android:contentDescription="@string/profile_picture"
tools:src="#0f0" />
-
-
-
-