summaryrefslogtreecommitdiffstats
path: root/app/src/main/java/app/fedilab/android/mastodon/ui
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/app/fedilab/android/mastodon/ui')
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java79
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java3
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/drawer/NotificationAdapter.java3
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java197
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/admin/FragmentAdminAccount.java5
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/admin/FragmentAdminDomain.java6
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/admin/FragmentAdminReport.java6
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMediaProfile.java5
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/settings/FragmentTimelinesSettings.java12
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonAccount.java5
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonAnnouncement.java5
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonContext.java11
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonConversation.java3
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDirectMessage.java6
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonDomainBlock.java5
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonNotification.java12
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonSuggestion.java5
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonTag.java5
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonTimeline.java38
19 files changed, 251 insertions, 160 deletions
diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java
index 34ef0c3f3..97bd72f23 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java
@@ -59,6 +59,7 @@ import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.AppCompatEditText;
import androidx.appcompat.widget.LinearLayoutCompat;
+import androidx.appcompat.widget.SearchView;
import androidx.core.app.ActivityCompat;
import androidx.core.app.ActivityOptionsCompat;
import androidx.core.content.ContextCompat;
@@ -103,11 +104,13 @@ import app.fedilab.android.activities.MainActivity;
import app.fedilab.android.databinding.ComposeAttachmentItemBinding;
import app.fedilab.android.databinding.ComposePollBinding;
import app.fedilab.android.databinding.ComposePollItemBinding;
+import app.fedilab.android.databinding.CustomEmojiPickerBinding;
import app.fedilab.android.databinding.DrawerMediaListBinding;
import app.fedilab.android.databinding.DrawerStatusComposeBinding;
import app.fedilab.android.databinding.DrawerStatusSimpleBinding;
import app.fedilab.android.mastodon.activities.ComposeActivity;
import app.fedilab.android.mastodon.activities.MediaActivity;
+import app.fedilab.android.mastodon.activities.SearchResultTabActivity;
import app.fedilab.android.mastodon.client.entities.api.Account;
import app.fedilab.android.mastodon.client.entities.api.Attachment;
import app.fedilab.android.mastodon.client.entities.api.Emoji;
@@ -173,6 +176,8 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
private List<Emoji> emojisList = new ArrayList<>();
private boolean unlisted_changed = false;
private RecyclerView mRecyclerView;
+ private boolean proceedToSplit = false;
+ private boolean splitChoiceDone = false;
public ComposeAdapter(List<Status> statusList, int statusCount, BaseAccount account, Account mentionedAccount, String visibility, String editMessageId) {
@@ -530,7 +535,6 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
TextWatcher textw;
AccountsVM accountsVM = new ViewModelProvider((ViewModelStoreOwner) context).get(AccountsVM.class);
SearchVM searchVM = new ViewModelProvider((ViewModelStoreOwner) context).get(SearchVM.class);
- final boolean[] proceedToSplit = {false};
textw = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
@@ -545,7 +549,8 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
String defaultFormat = sharedpreferences.getString(context.getString(R.string.SET_THREAD_MESSAGE), context.getString(R.string.DEFAULT_THREAD_VALUE));
//User asked to be prompted for threading long messages
- if(defaultFormat.compareToIgnoreCase("ASK") == 0) {
+ if(defaultFormat.compareToIgnoreCase("ASK") == 0 && !splitChoiceDone) {
+ splitChoiceDone = true;
AlertDialog.Builder threadConfirm = new MaterialAlertDialogBuilder(context);
threadConfirm.setTitle(context.getString(R.string.thread_long_this_message));
threadConfirm.setMessage(context.getString(R.string.thread_long_message_message));
@@ -569,7 +574,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
});
threadConfirm.show();
} else if(defaultFormat.compareToIgnoreCase("ENABLE") == 0) { //User wants to automatically thread long messages
- proceedToSplit[0] = true;
+ proceedToSplit = true;
ArrayList<String> splitText = ComposeHelper.splitToots(s.toString(), max_car);
int statusListSize = statusList.size();
int i = 0;
@@ -589,7 +594,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
@Override
public void afterTextChanged(Editable s) {
String contentString = s.toString();
- if(proceedToSplit[0]) {
+ if(proceedToSplit) {
int max_car = MastodonHelper.getInstanceMaxChars(context);
ArrayList<String> splitText = ComposeHelper.splitToots(contentString, max_car);
contentString = splitText.get(0);
@@ -1381,7 +1386,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
}
holder.binding.statusContent.setText(
status.getSpanContent(context,
- new WeakReference<>(holder.binding.statusContent), () -> notifyItemChanged(position)),
+ new WeakReference<>(holder.binding.statusContent), () -> mRecyclerView.post(() -> notifyItemChanged(position))),
TextView.BufferType.SPANNABLE);
holder.binding.statusContent.setMovementMethod(LongClickLinkMovementMethod.getInstance());
MastodonHelper.loadPPMastodon(holder.binding.avatar, status.account);
@@ -1650,7 +1655,11 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
//Last compose drawer
buttonVisibility(holder);
-
+ if (emojis != null && emojis.size() > 0) {
+ holder.binding.buttonEmoji.setVisibility(View.VISIBLE);
+ } else {
+ holder.binding.buttonEmoji.setVisibility(View.GONE);
+ }
holder.binding.buttonEmoji.setOnClickListener(v -> {
try {
displayEmojiPicker(holder, account.instance);
@@ -2113,29 +2122,57 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
* @param holder - view for the message {@link ComposeViewHolder}
*/
private void displayEmojiPicker(ComposeViewHolder holder, String instance) throws DBException {
-
final AlertDialog.Builder builder = new MaterialAlertDialogBuilder(context);
- int paddingPixel = 15;
- float density = context.getResources().getDisplayMetrics().density;
- int paddingDp = (int) (paddingPixel * density);
builder.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
builder.setTitle(R.string.insert_emoji);
+ CustomEmojiPickerBinding customEmojiPickerBinding = CustomEmojiPickerBinding.inflate(LayoutInflater.from(context), new LinearLayout(context), false);
if (emojis != null && emojis.size() > 0) {
- GridView gridView = new GridView(context);
- gridView.setAdapter(new EmojiAdapter(emojis.get(instance)));
- gridView.setNumColumns(5);
- gridView.setOnItemClickListener((parent, view, position, id) -> {
+ customEmojiPickerBinding.gridview.setAdapter(new EmojiAdapter(emojis.get(instance)));
+ customEmojiPickerBinding.gridview.setOnItemClickListener((parent, view, position, id) -> {
holder.binding.content.getText().insert(holder.binding.content.getSelectionStart(), " :" + Objects.requireNonNull(emojis.get(instance)).get(position).shortcode + ": ");
alertDialogEmoji.dismiss();
});
- gridView.setPadding(paddingDp, paddingDp, paddingDp, paddingDp);
- builder.setView(gridView);
- } else {
- TextView textView = new TextView(context);
- textView.setText(context.getString(R.string.no_emoji));
- textView.setPadding(paddingDp, paddingDp, paddingDp, paddingDp);
- builder.setView(textView);
}
+ customEmojiPickerBinding.toolbarSearch.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
+ @Override
+ public boolean onQueryTextSubmit(String query) {
+ InputMethodManager imm = (InputMethodManager) context.getSystemService(INPUT_METHOD_SERVICE);
+ imm.hideSoftInputFromWindow(customEmojiPickerBinding.toolbarSearch.getWindowToken(), 0);
+ try {
+ new EmojiInstance(context).getEmojiListFiltered(instance, query.trim(), emojiList -> {
+ if (emojiList != null && emojiList.size() > 0) {
+ customEmojiPickerBinding.gridview.setAdapter(new EmojiAdapter(emojiList));
+ customEmojiPickerBinding.gridview.setOnItemClickListener((parent, view, position, id) -> {
+ holder.binding.content.getText().insert(holder.binding.content.getSelectionStart(), " :" + emojiList.get(position).shortcode + ": ");
+ alertDialogEmoji.dismiss();
+ });
+ }
+ });
+ } catch (DBException e) {
+ throw new RuntimeException(e);
+ }
+ return false;
+ }
+
+ @Override
+ public boolean onQueryTextChange(String newText) {
+ try {
+ new EmojiInstance(context).getEmojiListFiltered(instance, newText.trim(), emojiList -> {
+ if (emojiList != null && emojiList.size() > 0) {
+ customEmojiPickerBinding.gridview.setAdapter(new EmojiAdapter(emojiList));
+ customEmojiPickerBinding.gridview.setOnItemClickListener((parent, view, position, id) -> {
+ holder.binding.content.getText().insert(holder.binding.content.getSelectionStart(), " :" + emojiList.get(position).shortcode + ": ");
+ alertDialogEmoji.dismiss();
+ });
+ }
+ });
+ } catch (DBException e) {
+ throw new RuntimeException(e);
+ }
+ return false;
+ }
+ });
+ builder.setView(customEmojiPickerBinding.getRoot());
alertDialogEmoji = builder.show();
}
diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java
index 3192d2863..08a2b11aa 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ConversationAdapter.java
@@ -15,6 +15,8 @@ package app.fedilab.android.mastodon.ui.drawer;
* see <http://www.gnu.org/licenses>. */
+import static app.fedilab.android.BaseMainActivity.currentNightMode;
+
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
@@ -72,7 +74,6 @@ public class ConversationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
public static void applyColorConversation(Context context, ConversationHolder holder) {
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
- int currentNightMode = context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
boolean customLight = sharedpreferences.getBoolean(context.getString(R.string.SET_CUSTOMIZE_LIGHT_COLORS), false);
boolean customDark = sharedpreferences.getBoolean(context.getString(R.string.SET_CUSTOMIZE_DARK_COLORS), false);
int theme_icons_color = -1;
diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/NotificationAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/NotificationAdapter.java
index 7e0543474..d4f63e7e3 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/NotificationAdapter.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/NotificationAdapter.java
@@ -15,6 +15,7 @@ package app.fedilab.android.mastodon.ui.drawer;
* see <http://www.gnu.org/licenses>. */
+import static app.fedilab.android.BaseMainActivity.currentNightMode;
import static app.fedilab.android.mastodon.ui.drawer.StatusAdapter.statusManagement;
import android.app.Activity;
@@ -82,7 +83,6 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
public static void applyColorAccount(Context context, ViewHolderFollow holder) {
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
- int currentNightMode = context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
boolean customLight = sharedpreferences.getBoolean(context.getString(R.string.SET_CUSTOMIZE_LIGHT_COLORS), false);
boolean customDark = sharedpreferences.getBoolean(context.getString(R.string.SET_CUSTOMIZE_DARK_COLORS), false);
int theme_icons_color = -1;
@@ -343,7 +343,6 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
holderStatus.bindingNotification.status.typeOfNotification.setImageResource(R.drawable.ic_baseline_poll_24);
}
int theme_icons_color = -1;
- int currentNightMode = context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
boolean customLight = sharedpreferences.getBoolean(context.getString(R.string.SET_CUSTOMIZE_LIGHT_COLORS), false);
boolean customDark = sharedpreferences.getBoolean(context.getString(R.string.SET_CUSTOMIZE_DARK_COLORS), false);
if (currentNightMode == Configuration.UI_MODE_NIGHT_NO) { //LIGHT THEME
diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java
index a554defab..b417ff6bb 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java
@@ -17,6 +17,7 @@ package app.fedilab.android.mastodon.ui.drawer;
import static android.content.Context.INPUT_METHOD_SERVICE;
import static app.fedilab.android.BaseMainActivity.currentAccount;
+import static app.fedilab.android.BaseMainActivity.currentNightMode;
import static app.fedilab.android.BaseMainActivity.currentUserID;
import static app.fedilab.android.BaseMainActivity.emojis;
import static app.fedilab.android.BaseMainActivity.regex_home;
@@ -57,7 +58,6 @@ import android.os.Looper;
import android.text.Html;
import android.text.SpannableString;
import android.text.TextUtils;
-import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -303,51 +303,35 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
boolean remote) {
if (statusReturned == null) {
switch (typeOfAction) {
- case BOOKMARK_ACTION:
- statusToDeal.bookmarked = true;
- break;
- case REBLOG_ACTION:
+ case BOOKMARK_ACTION -> statusToDeal.bookmarked = true;
+ case REBLOG_ACTION -> {
statusToDeal.reblogged = true;
statusToDeal.reblogs_count++;
- break;
- case FAVOURITE_ACTION:
+ }
+ case FAVOURITE_ACTION -> {
statusToDeal.favourited = true;
statusToDeal.favourites_count++;
- break;
- case UNBOOKMARK_ACTION:
- statusToDeal.bookmarked = false;
- break;
- case UNREBLOG_ACTION:
+ }
+ case UNBOOKMARK_ACTION -> statusToDeal.bookmarked = false;
+ case UNREBLOG_ACTION -> {
statusToDeal.reblogged = false;
statusToDeal.reblogs_count--;
- break;
- case UNFAVOURITE_ACTION:
+ }
+ case UNFAVOURITE_ACTION -> {
statusToDeal.favourited = false;
statusToDeal.favourites_count--;
- break;
+ }
}
} else {
- boolean isOK = true;
- switch (typeOfAction) {
- case BOOKMARK_ACTION:
- isOK = statusReturned.bookmarked;
- break;
- case REBLOG_ACTION:
- isOK = statusReturned.reblogged;
- break;
- case FAVOURITE_ACTION:
- isOK = statusReturned.favourited;
- break;
- case UNBOOKMARK_ACTION:
- isOK = !statusReturned.bookmarked;
- break;
- case UNREBLOG_ACTION:
- isOK = !statusReturned.reblogged;
- break;
- case UNFAVOURITE_ACTION:
- isOK = !statusReturned.favourited;
- break;
- }
+ boolean isOK = switch (typeOfAction) {
+ case BOOKMARK_ACTION -> statusReturned.bookmarked;
+ case REBLOG_ACTION -> statusReturned.reblogged;
+ case FAVOURITE_ACTION -> statusReturned.favourited;
+ case UNBOOKMARK_ACTION -> !statusReturned.bookmarked;
+ case UNREBLOG_ACTION -> !statusReturned.reblogged;
+ case UNFAVOURITE_ACTION -> !statusReturned.favourited;
+ default -> true;
+ };
if (!isOK) {
Toasty.error(context, context.getString(R.string.toast_error), Toasty.LENGTH_SHORT).show();
return;
@@ -367,18 +351,10 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
}
} else {
switch (typeOfAction) {
- case REBLOG_ACTION:
- statusToDeal.reblogs_count++;
- break;
- case FAVOURITE_ACTION:
- statusToDeal.favourites_count++;
- break;
- case UNREBLOG_ACTION:
- statusToDeal.reblogs_count--;
- break;
- case UNFAVOURITE_ACTION:
- statusToDeal.favourites_count--;
- break;
+ case REBLOG_ACTION -> statusToDeal.reblogs_count++;
+ case FAVOURITE_ACTION -> statusToDeal.favourites_count++;
+ case UNREBLOG_ACTION -> statusToDeal.reblogs_count--;
+ case UNFAVOURITE_ACTION -> statusToDeal.favourites_count--;
}
}
}
@@ -451,6 +427,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
boolean displayReactions = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_REACTIONS) + MainActivity.currentUserID + MainActivity.currentInstance, true);
boolean compactButtons = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_COMPACT_ACTION_BUTTON), false);
boolean originalDateForBoost = sharedpreferences.getBoolean(context.getString(R.string.SET_BOOST_ORIGINAL_DATE), true);
+ boolean relativeDate = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_RELATIVE_DATE), true);
boolean hideSingleMediaWithCard = sharedpreferences.getBoolean(context.getString(R.string.SET_HIDE_SINGLE_MEDIA_WITH_CARD), false);
boolean autofetch = sharedpreferences.getBoolean(context.getString(R.string.SET_AUTO_FETCH_MISSING_MESSAGES), false);
boolean warnNoMedia = sharedpreferences.getBoolean(context.getString(R.string.SET_MANDATORY_ALT_TEXT_FOR_BOOSTS), true);
@@ -769,12 +746,8 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
holder.binding.statusContentMaths.removeAllViews();
MathJaxConfig mathJaxConfig = new MathJaxConfig();
switch (context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) {
- case Configuration.UI_MODE_NIGHT_YES:
- mathJaxConfig.setTextColor("white");
- break;
- case Configuration.UI_MODE_NIGHT_NO:
- mathJaxConfig.setTextColor("black");
- break;
+ case Configuration.UI_MODE_NIGHT_YES -> mathJaxConfig.setTextColor("white");
+ case Configuration.UI_MODE_NIGHT_NO -> mathJaxConfig.setTextColor("black");
}
mathJaxConfig.setAutomaticLinebreaks(true);
@@ -1020,9 +993,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
if (needToWarnForMissingDescription) {
AlertDialog.Builder alt_bld = new MaterialAlertDialogBuilder(context);
alt_bld.setMessage(context.getString(R.string.reblog_missing_description));
- alt_bld.setPositiveButton(R.string.yes, (dialog, id) -> {
- CrossActionHelper.doCrossAction(context, CrossActionHelper.TypeOfCrossAction.REBLOG_ACTION, null, statusToDeal);
- });
+ alt_bld.setPositiveButton(R.string.yes, (dialog, id) -> CrossActionHelper.doCrossAction(context, CrossActionHelper.TypeOfCrossAction.REBLOG_ACTION, null, statusToDeal));
alt_bld.setNegativeButton(R.string.cancel, (dialog, id) -> dialog.dismiss());
AlertDialog alert = alt_bld.create();
alert.show();
@@ -1245,21 +1216,21 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
holder.binding.visibility.setContentDescription(context.getString(R.string.v_public));
holder.binding.visibilitySmall.setContentDescription(context.getString(R.string.v_public));
switch (status.visibility) {
- case "unlisted":
+ case "unlisted" -> {
holder.binding.visibility.setContentDescription(context.getString(R.string.v_unlisted));
holder.binding.visibilitySmall.setContentDescription(context.getString(R.string.v_unlisted));
ressource = R.drawable.ic_baseline_lock_open_24;
- break;
- case "private":
+ }
+ case "private" -> {
ressource = R.drawable.ic_baseline_lock_24;
holder.binding.visibility.setContentDescription(context.getString(R.string.v_private));
holder.binding.visibilitySmall.setContentDescription(context.getString(R.string.v_private));
- break;
- case "direct":
+ }
+ case "direct" -> {
ressource = R.drawable.ic_baseline_mail_24;
holder.binding.visibility.setContentDescription(context.getString(R.string.v_direct));
holder.binding.visibilitySmall.setContentDescription(context.getString(R.string.v_direct));
- break;
+ }
}
if (statusToDeal.local_only) {
@@ -1309,46 +1280,58 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
holder.binding.editTime.setVisibility(View.GONE);
holder.binding.visibilitySmall.setImageResource(ressource);
if (displayCounters && canBeFederated) {
- holder.binding.replyCount.setText(String.valueOf(statusToDeal.replies_count));
- holder.binding.statusInfo.setVisibility(View.VISIBLE);
- holder.binding.dateShort.setVisibility(View.GONE);
- holder.binding.visibilitySmall.setVisibility(View.GONE);
- holder.binding.reblogsCount.setText(String.valueOf(statusToDeal.reblogs_count));
- holder.binding.favoritesCount.setText(String.valueOf(statusToDeal.favourites_count));
- if (originalDateForBoost || status.reblog == null) {
- holder.binding.time.setText(Helper.dateDiff(context, statusToDeal.created_at));
+ if (statusToDeal.replies_count > 0 && !(context instanceof ContextActivity)) {
+ holder.binding.replyCount.setVisibility(View.VISIBLE);
+ holder.binding.replyCount.setText(String.valueOf(statusToDeal.replies_count));
} else {
- holder.binding.time.setText(Helper.dateDiff(context, status.created_at));
+ holder.binding.replyCount.setVisibility(View.GONE);
}
- if (statusToDeal.edited_at != null) {
- Drawable img = ContextCompat.getDrawable(context, R.drawable.ic_baseline_mode_edit_message_24);
- img.setBounds(0, 0, (int) (Helper.convertDpToPixel(16, context) * scale + 0.5f), (int) (Helper.convertDpToPixel(16, context) * scale + 0.5f));
- holder.binding.time.setCompoundDrawables(null, null, img, null);
+ if(statusToDeal.reblogs_count > 0) {
+ holder.binding.boostCount.setText(String.valueOf(statusToDeal.reblogs_count));
+ holder.binding.boostCount.setVisibility(View.VISIBLE);
} else {
- holder.binding.time.setCompoundDrawables(null, null, null, null);
+ holder.binding.boostCount.setVisibility(View.GONE);
+ }
+ if(statusToDeal.favourites_count > 0) {
+ holder.binding.favoriteCount.setText(String.valueOf(statusToDeal.favourites_count));
+ holder.binding.favoriteCount.setVisibility(View.VISIBLE);
+ } else {
+ holder.binding.favoriteCount.setVisibility(View.GONE);
}
- Helper.absoluteDateTimeReveal(context, holder.binding.time, statusToDeal.created_at, statusToDeal.edited_at);
- holder.binding.visibility.setImageResource(ressource);
- holder.binding.time.setVisibility(View.VISIBLE);
} else {
- holder.binding.statusInfo.setVisibility(View.GONE);
- holder.binding.dateShort.setVisibility(View.VISIBLE);
- holder.binding.visibilitySmall.setVisibility(View.VISIBLE);
- if (statusToDeal.edited_at != null) {
- Drawable img = ContextCompat.getDrawable(context, R.drawable.ic_baseline_mode_edit_message_24);
- img.setBounds(0, 0, (int) (Helper.convertDpToPixel(16, context) * scale + 0.5f), (int) (Helper.convertDpToPixel(16, context) * scale + 0.5f));
- holder.binding.dateShort.setCompoundDrawables(null, null, img, null);
+ holder.binding.boostCount.setVisibility(View.GONE);
+ holder.binding.favoriteCount.setVisibility(View.GONE);
+ if (statusToDeal.replies_count > 0 && !(context instanceof ContextActivity)) {
+ holder.binding.replyCount.setVisibility(View.VISIBLE);
} else {
- holder.binding.dateShort.setCompoundDrawables(null, null, null, null);
+ holder.binding.replyCount.setVisibility(View.GONE);
}
+ }
+ holder.binding.statusInfo.setVisibility(View.GONE);
+ holder.binding.dateShort.setVisibility(View.VISIBLE);
+ holder.binding.visibilitySmall.setVisibility(View.VISIBLE);
+ if (statusToDeal.edited_at != null) {
+ Drawable img = ContextCompat.getDrawable(context, R.drawable.ic_baseline_mode_edit_message_24);
+ img.setBounds(0, 0, (int) (Helper.convertDpToPixel(16, context) * scale + 0.5f), (int) (Helper.convertDpToPixel(16, context) * scale + 0.5f));
+ holder.binding.dateShort.setCompoundDrawables(null, null, img, null);
+ } else {
+ holder.binding.dateShort.setCompoundDrawables(null, null, null, null);
+ }
+ if(relativeDate) {
if (originalDateForBoost || status.reblog == null) {
holder.binding.dateShort.setText(Helper.dateDiff(context, statusToDeal.created_at));
} else {
holder.binding.dateShort.setText(Helper.dateDiff(context, status.created_at));
}
- holder.binding.time.setVisibility(View.GONE);
- Helper.absoluteDateTimeReveal(context, holder.binding.dateShort, statusToDeal.created_at, statusToDeal.edited_at);
+ } else {
+ if (originalDateForBoost || status.reblog == null) {
+ holder.binding.dateShort.setText(Helper.mediumDateToString(statusToDeal.created_at));
+ } else {
+ holder.binding.dateShort.setText(Helper.mediumDateToString(status.created_at));
+ }
}
+ holder.binding.time.setVisibility(View.GONE);
+ Helper.absoluteDateTimeReveal(context, holder.binding.dateShort, statusToDeal.created_at, statusToDeal.edited_at);
}
//---- SPOILER TEXT -----
@@ -1401,20 +1384,16 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
}
//--- BOOST VISIBILITY ---
switch (statusToDeal.visibility) {
- case "public":
- case "unlisted":
- holder.binding.actionButtonBoost.setVisibility(View.VISIBLE);
- break;
- case "private":
+ case "public", "unlisted" ->
+ holder.binding.actionButtonBoost.setVisibility(View.VISIBLE);
+ case "private" -> {
if (status.account.id.compareTo(BaseMainActivity.currentUserID) == 0) {
holder.binding.actionButtonBoost.setVisibility(View.VISIBLE);
} else {
holder.binding.actionButtonBoost.setVisibility(View.GONE);
}
- break;
- case "direct":
- holder.binding.actionButtonBoost.setVisibility(View.GONE);
- break;
+ }
+ case "direct" -> holder.binding.actionButtonBoost.setVisibility(View.GONE);
}
//--- MAIN CONTENT ---
@@ -1802,6 +1781,12 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
// --- POLL ---
if (statusToDeal.poll != null && statusToDeal.poll.options != null) {
+ int normalize;
+ if(statusToDeal.poll.multiple && statusToDeal.poll.voters_count > 1) {
+ normalize = statusToDeal.poll.voters_count;
+ } else {
+ normalize = statusToDeal.poll.votes_count;
+ }
if (statusToDeal.poll.voted || statusToDeal.poll.expired) {
holder.binding.poll.submitVote.setVisibility(View.GONE);
holder.binding.poll.rated.setVisibility(View.VISIBLE);
@@ -1820,7 +1805,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
}
for (Poll.PollItem pollItem : statusToDeal.poll.options) {
@NonNull LayoutPollItemBinding pollItemBinding = LayoutPollItemBinding.inflate(inflater, holder.binding.poll.rated, true);
- double value = Math.round((pollItem.votes_count * 100) / (double) statusToDeal.poll.voters_count);
+ double value = Math.round((pollItem.votes_count * 100) / (double) normalize);
pollItemBinding.pollItemPercent.setText(String.format("%s %%", (int) value));
pollItemBinding.pollItemText.setText(
pollItem.getSpanTitle(context, statusToDeal,
@@ -1973,7 +1958,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
}
}));
holder.binding.poll.pollContainer.setVisibility(View.VISIBLE);
- String pollInfo = context.getResources().getQuantityString(R.plurals.number_of_voters, statusToDeal.poll.voters_count, statusToDeal.poll.voters_count);
+ String pollInfo = context.getResources().getQuantityString(R.plurals.number_of_voters, normalize, normalize);
if (statusToDeal.poll.expired) {
pollInfo += " - " + context.getString(R.string.poll_finish_at, MastodonHelper.dateToStringPoll(statusToDeal.poll.expires_at));
} else {
@@ -2335,6 +2320,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
if (accounts.size() > 1) {
List<app.fedilab.android.mastodon.client.entities.api.Account> accountList = new ArrayList<>();
for (BaseAccount account : accounts) {
+ account.mastodon_account.acct += "@" + account.instance;
accountList.add(account.mastodon_account);
}
Handler mainHandler = new Handler(Looper.getMainLooper());
@@ -2408,11 +2394,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
});
popup.show();
});
- if (statusToDeal.replies_count > 0 && !(context instanceof ContextActivity)) {
- holder.binding.replyCount.setVisibility(View.VISIBLE);
- } else {
- holder.binding.replyCount.setVisibility(View.GONE);
- }
+
holder.binding.actionButtonReply.setOnLongClickListener(v -> {
CrossActionHelper.doCrossAction(context, CrossActionHelper.TypeOfCrossAction.REPLY_ACTION, null, statusToDeal);