mirror of
				https://codeberg.org/tom79/Fedilab.git
				synced 2025-10-20 11:20:16 +03:00 
			
		
		
		
	Merge branch 'direct_messages_chat' into develop
This commit is contained in:
		
						commit
						dbc118064c
					
				
					 19 changed files with 102 additions and 128 deletions
				
			
		| 
						 | 
				
			
			@ -1219,7 +1219,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
 | 
			
		|||
                }
 | 
			
		||||
                if (!isFinishing()) {
 | 
			
		||||
                    headerMainBinding.accountName.setText(
 | 
			
		||||
                            currentAccount.mastodon_account.getSpanDisplayName(BaseMainActivity.this,
 | 
			
		||||
                            currentAccount.mastodon_account.getSpanDisplayNameEmoji(BaseMainActivity.this,
 | 
			
		||||
                                    new WeakReference<>(headerMainBinding.accountName)),
 | 
			
		||||
                            TextView.BufferType.SPANNABLE);
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,6 @@ public class DirectMessageActivity extends BaseActivity implements FragmentMasto
 | 
			
		|||
    public static boolean displayCW;
 | 
			
		||||
 | 
			
		||||
    FragmentMastodonDirectMessage currentFragment;
 | 
			
		||||
    private Status firstMessage;
 | 
			
		||||
    private String remote_instance;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
| 
						 | 
				
			
			@ -149,7 +148,6 @@ public class DirectMessageActivity extends BaseActivity implements FragmentMasto
 | 
			
		|||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void get(Status status) {
 | 
			
		||||
        firstMessage = status;
 | 
			
		||||
        invalidateOptionsMenu();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +154,7 @@ public class MediaActivity extends BaseTransparentActivity implements OnDownload
 | 
			
		|||
 | 
			
		||||
        binding.mediaDescription.setMovementMethod(new ScrollingMovementMethod());
 | 
			
		||||
        binding.mediaDescriptionTranslated.setMovementMethod(new ScrollingMovementMethod());
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        if (description != null && description.trim().length() > 0 && description.trim().compareTo("null") != 0) {
 | 
			
		||||
            binding.mediaDescription.setText(description);
 | 
			
		||||
            binding.translate.setOnClickListener(v -> {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -456,7 +456,7 @@ public class ProfileActivity extends BaseActivity {
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        binding.accountDn.setText(
 | 
			
		||||
                account.getSpanDisplayName(ProfileActivity.this,
 | 
			
		||||
                account.getSpanDisplayNameEmoji(ProfileActivity.this,
 | 
			
		||||
                        new WeakReference<>(binding.accountDn)),
 | 
			
		||||
                TextView.BufferType.SPANNABLE);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -310,7 +310,7 @@ public class AdminAccountActivity extends BaseActivity {
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
        binding.accountDn.setText(
 | 
			
		||||
                adminAccount.account.getSpanDisplayName(AdminAccountActivity.this,
 | 
			
		||||
                adminAccount.account.getSpanDisplayNameEmoji(AdminAccountActivity.this,
 | 
			
		||||
                        new WeakReference<>(binding.accountDn)),
 | 
			
		||||
                TextView.BufferType.SPANNABLE);
 | 
			
		||||
        binding.accountUn.setText(String.format("@%s", adminAccount.account.acct));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -328,7 +328,7 @@ public class AdminReportActivity extends BaseBarActivity {
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        binding.accountDn.setText(
 | 
			
		||||
                account.getSpanDisplayName(AdminReportActivity.this,
 | 
			
		||||
                account.getSpanDisplayNameEmoji(AdminReportActivity.this,
 | 
			
		||||
                        new WeakReference<>(binding.accountDn)),
 | 
			
		||||
                TextView.BufferType.SPANNABLE);
 | 
			
		||||
        binding.accountUn.setText(String.format("@%s", account.acct));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -89,14 +89,15 @@ public class Account implements Serializable {
 | 
			
		|||
    public Role role;
 | 
			
		||||
    public transient RelationShip relationShip;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public synchronized Spannable getSpanDisplayName(Context context, WeakReference<View> viewWeakReference) {
 | 
			
		||||
        if (display_name == null || display_name.isEmpty()) {
 | 
			
		||||
            display_name = username;
 | 
			
		||||
        }
 | 
			
		||||
        return SpannableHelper.convert(context, display_name, null, this, null, viewWeakReference);
 | 
			
		||||
        return SpannableHelper.convert(context, display_name, null, this, null, viewWeakReference, null, true, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public synchronized Spannable getSpanDisplayName(Activity activity, WeakReference<View> viewWeakReference) {
 | 
			
		||||
    public synchronized Spannable getSpanDisplayNameEmoji(Activity activity, WeakReference<View> viewWeakReference) {
 | 
			
		||||
        if (display_name == null || display_name.isEmpty()) {
 | 
			
		||||
            display_name = username;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -104,11 +105,11 @@ public class Account implements Serializable {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    public synchronized Spannable getSpanDisplayNameTitle(Context context, WeakReference<View> viewWeakReference, String title) {
 | 
			
		||||
        return SpannableHelper.convert(context, title, null, this, null, viewWeakReference);
 | 
			
		||||
        return SpannableHelper.convert(context, title, null, this, null, viewWeakReference, null, true, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public synchronized Spannable getSpanNote(Context context, WeakReference<View> viewWeakReference) {
 | 
			
		||||
        return SpannableHelper.convert(context, note, null, this, null, viewWeakReference);
 | 
			
		||||
        return SpannableHelper.convert(context, note, null, this, null, viewWeakReference, null, true, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,7 +56,7 @@ public class Announcement {
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
    public synchronized Spannable getSpanContent(Context context, WeakReference<View> viewWeakReference) {
 | 
			
		||||
        return SpannableHelper.convert(context, content, null, null, this, viewWeakReference);
 | 
			
		||||
        return SpannableHelper.convert(context, content, null, null, this, viewWeakReference, null, true, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@ public class Field implements Serializable {
 | 
			
		|||
        if (verified_at != null && value != null) {
 | 
			
		||||
            value_span = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.verified_text));
 | 
			
		||||
        }
 | 
			
		||||
        Spannable spannable = SpannableHelper.convert(context, value, null, account, null, viewWeakReference);
 | 
			
		||||
        Spannable spannable = SpannableHelper.convert(context, value, null, account, null, viewWeakReference, null, true, false);
 | 
			
		||||
        if (value_span != null && spannable != null) {
 | 
			
		||||
            spannable.setSpan(value_span, 0, spannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ public class Field implements Serializable {
 | 
			
		|||
 | 
			
		||||
    public synchronized Spannable getLabelSpan(Context context, Account account, WeakReference<View> viewWeakReference) {
 | 
			
		||||
 | 
			
		||||
        Spannable spannable = SpannableHelper.convert(context, name, null, account, null, viewWeakReference);
 | 
			
		||||
        Spannable spannable = SpannableHelper.convert(context, name, null, account, null, viewWeakReference, null, true, false);
 | 
			
		||||
        if (name_span != null && spannable != null) {
 | 
			
		||||
            spannable.setSpan(name_span, 0, spannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -133,6 +133,8 @@ public class Status implements Serializable, Cloneable {
 | 
			
		|||
    public transient boolean setCursorToEnd = false;
 | 
			
		||||
    public transient int cursorPosition = 0;
 | 
			
		||||
    public transient boolean submitted = false;
 | 
			
		||||
 | 
			
		||||
    public transient boolean underlined = false;
 | 
			
		||||
    public boolean spoilerChecked = false;
 | 
			
		||||
    public Filter filteredByApp;
 | 
			
		||||
    public transient Spannable contentSpan;
 | 
			
		||||
| 
						 | 
				
			
			@ -152,21 +154,21 @@ public class Status implements Serializable, Cloneable {
 | 
			
		|||
 | 
			
		||||
    public synchronized Spannable getSpanContent(Context context, WeakReference<View> viewWeakReference, Callback callback) {
 | 
			
		||||
        if (contentSpan == null) {
 | 
			
		||||
            contentSpan = SpannableHelper.convert(context, content, this, null, null, viewWeakReference, callback, true);
 | 
			
		||||
            contentSpan = SpannableHelper.convert(context, content, this, null, null, viewWeakReference, callback, true, true);
 | 
			
		||||
        }
 | 
			
		||||
        return contentSpan;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public synchronized Spannable getSpanSpoiler(Context context, WeakReference<View> viewWeakReference, Callback callback) {
 | 
			
		||||
        if (contentSpoilerSpan == null) {
 | 
			
		||||
            contentSpoilerSpan = SpannableHelper.convert(context, spoiler_text, this, null, null, viewWeakReference, callback, false);
 | 
			
		||||
            contentSpoilerSpan = SpannableHelper.convert(context, spoiler_text, this, null, null, viewWeakReference, callback, true, false);
 | 
			
		||||
        }
 | 
			
		||||
        return contentSpoilerSpan;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public synchronized Spannable getSpanTranslate(Context context, WeakReference<View> viewWeakReference, Callback callback) {
 | 
			
		||||
        if (contentTranslateSpan == null) {
 | 
			
		||||
            contentTranslateSpan = SpannableHelper.convert(context, translationContent, this, null, null, viewWeakReference, callback, true);
 | 
			
		||||
            contentTranslateSpan = SpannableHelper.convert(context, translationContent, this, null, null, viewWeakReference, callback, true, true);
 | 
			
		||||
        }
 | 
			
		||||
        return contentTranslateSpan;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2044,6 +2044,31 @@ public class Helper {
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isNumeric(String str) {
 | 
			
		||||
        try {
 | 
			
		||||
            Double.parseDouble(str);
 | 
			
		||||
            return true;
 | 
			
		||||
        } catch (NumberFormatException e) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static OkHttpClient myOkHttpClient(Context context) {
 | 
			
		||||
        return new OkHttpClient.Builder()
 | 
			
		||||
                .addInterceptor(chain -> {
 | 
			
		||||
                    Request originalRequest = chain.request();
 | 
			
		||||
                    Request requestWithUserAgent = originalRequest.newBuilder()
 | 
			
		||||
                            .header("User-Agent", context.getString(R.string.app_name) + "/" + BuildConfig.VERSION_NAME + "/" + BuildConfig.VERSION_CODE)
 | 
			
		||||
                            .build();
 | 
			
		||||
                    return chain.proceed(requestWithUserAgent);
 | 
			
		||||
                })
 | 
			
		||||
                .readTimeout(60, TimeUnit.SECONDS)
 | 
			
		||||
                .connectTimeout(60, TimeUnit.SECONDS)
 | 
			
		||||
                .callTimeout(60, TimeUnit.SECONDS)
 | 
			
		||||
                .proxy(Helper.getProxy(context))
 | 
			
		||||
                .build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //Enum that described actions to replace inside a toot content
 | 
			
		||||
    public enum PatternType {
 | 
			
		||||
        MENTION,
 | 
			
		||||
| 
						 | 
				
			
			@ -2074,29 +2099,4 @@ public class Helper {
 | 
			
		|||
    public interface OnFileCopied {
 | 
			
		||||
        void onFileCopied(File file);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isNumeric(String str) {
 | 
			
		||||
        try {
 | 
			
		||||
            Double.parseDouble(str);
 | 
			
		||||
            return true;
 | 
			
		||||
        } catch (NumberFormatException e) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static OkHttpClient myOkHttpClient(Context context) {
 | 
			
		||||
        return new OkHttpClient.Builder()
 | 
			
		||||
                .addInterceptor(chain -> {
 | 
			
		||||
                    Request originalRequest = chain.request();
 | 
			
		||||
                    Request requestWithUserAgent = originalRequest.newBuilder()
 | 
			
		||||
                            .header("User-Agent", context.getString(R.string.app_name) + "/" + BuildConfig.VERSION_NAME + "/" + BuildConfig.VERSION_CODE)
 | 
			
		||||
                            .build();
 | 
			
		||||
                    return chain.proceed(requestWithUserAgent);
 | 
			
		||||
                })
 | 
			
		||||
                .readTimeout(60, TimeUnit.SECONDS)
 | 
			
		||||
                .connectTimeout(60, TimeUnit.SECONDS)
 | 
			
		||||
                .callTimeout(60, TimeUnit.SECONDS)
 | 
			
		||||
                .proxy(Helper.getProxy(context))
 | 
			
		||||
                .build();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,9 +63,8 @@ import retrofit2.converter.gson.GsonConverterFactory;
 | 
			
		|||
 | 
			
		||||
public class NotificationsHelper {
 | 
			
		||||
 | 
			
		||||
    public static HashMap<String, List<String>> pushed_notifications = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
    private static final HashMap<String, ReentrantLock> lockMap = new HashMap<>();
 | 
			
		||||
    public static HashMap<String, List<String>> pushed_notifications = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
    private static ReentrantLock getLock(String slug) {
 | 
			
		||||
        synchronized (lockMap) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,7 +43,6 @@ import android.view.View;
 | 
			
		|||
import android.webkit.URLUtil;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.ColorInt;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.appcompat.app.AlertDialog;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
| 
						 | 
				
			
			@ -106,33 +105,6 @@ public class SpannableHelper {
 | 
			
		|||
    public static final String CLICKABLE_SPAN = "CLICKABLE_SPAN";
 | 
			
		||||
    private static int linkColor;
 | 
			
		||||
 | 
			
		||||
    public static Spannable convert(Context context, String text,
 | 
			
		||||
                                    Status status, Account account, Announcement announcement, WeakReference<View> viewWeakReference) {
 | 
			
		||||
        return convert(context, text, status, account, announcement, viewWeakReference, null, true, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static Spannable convert(Context context, String text,
 | 
			
		||||
                                    Status status, Account account, Announcement announcement,
 | 
			
		||||
                                    WeakReference<View> viewWeakReference, Status.Callback callback, boolean convertMarkdown) {
 | 
			
		||||
        return convert(context, text, status, account, announcement, viewWeakReference, callback, true, convertMarkdown);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public static boolean isRTL(String s) {
 | 
			
		||||
        for (int i = 0; i < s.length(); i++) {
 | 
			
		||||
            byte d = Character.getDirectionality(s.charAt(i));
 | 
			
		||||
            if (d == Character.DIRECTIONALITY_RIGHT_TO_LEFT ||
 | 
			
		||||
                    d == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC ||
 | 
			
		||||
                    d == Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING ||
 | 
			
		||||
                    d == Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE
 | 
			
		||||
            ) {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static Spannable convert(Context context, String text,
 | 
			
		||||
                                    Status status, Account account, Announcement announcement,
 | 
			
		||||
                                    WeakReference<View> viewWeakReference, Status.Callback callback, boolean convertHtml, boolean convertMarkdown) {
 | 
			
		||||
| 
						 | 
				
			
			@ -160,6 +132,10 @@ public class SpannableHelper {
 | 
			
		|||
        if (linkColor == 0) {
 | 
			
		||||
            linkColor = -1;
 | 
			
		||||
        }
 | 
			
		||||
        if (status != null && status.underlined) {
 | 
			
		||||
            linkColor = -1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        List<Mention> mentions = new ArrayList<>();
 | 
			
		||||
        if (status != null && status.mentions != null) {
 | 
			
		||||
            mentions.addAll(status.mentions);
 | 
			
		||||
| 
						 | 
				
			
			@ -333,7 +309,7 @@ public class SpannableHelper {
 | 
			
		|||
                    @Override
 | 
			
		||||
                    public void updateDrawState(@NonNull TextPaint ds) {
 | 
			
		||||
                        super.updateDrawState(ds);
 | 
			
		||||
                        ds.setUnderlineText(false);
 | 
			
		||||
                        ds.setUnderlineText(status != null && status.underlined);
 | 
			
		||||
                        if (linkColor != -1) {
 | 
			
		||||
                            ds.setColor(linkColor);
 | 
			
		||||
                        }
 | 
			
		||||
| 
						 | 
				
			
			@ -341,10 +317,10 @@ public class SpannableHelper {
 | 
			
		|||
 | 
			
		||||
                }, start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
 | 
			
		||||
            } else {
 | 
			
		||||
                makeLinks(context, content, url, start, end);
 | 
			
		||||
                makeLinks(context, status, content, url, start, end);
 | 
			
		||||
            }
 | 
			
		||||
            replaceQuoteSpans(context, content);
 | 
			
		||||
            emails(context, content);
 | 
			
		||||
            emails(context, content, status);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Pattern imgPattern = Pattern.compile("<img [^>]*src=\"([^\"]+)\"[^>]*>");
 | 
			
		||||
| 
						 | 
				
			
			@ -390,25 +366,8 @@ public class SpannableHelper {
 | 
			
		|||
        return trimSpannable(new SpannableStringBuilder(content));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public interface Prism4jTheme {
 | 
			
		||||
 | 
			
		||||
        @ColorInt
 | 
			
		||||
        int background();
 | 
			
		||||
 | 
			
		||||
        @ColorInt
 | 
			
		||||
        int textColor();
 | 
			
		||||
 | 
			
		||||
        void apply(
 | 
			
		||||
                @NonNull String language,
 | 
			
		||||
                @NonNull Prism4j.Syntax syntax,
 | 
			
		||||
                @NonNull SpannableStringBuilder builder,
 | 
			
		||||
                int start,
 | 
			
		||||
                int end
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    private static void makeLinks(Context context, SpannableStringBuilder content, String url, int start, int end) {
 | 
			
		||||
    private static void makeLinks(Context context, Status status, SpannableStringBuilder content, String url, int start, int end) {
 | 
			
		||||
        String newUrl = url;
 | 
			
		||||
        boolean validUrl = URLUtil.isValidUrl(url) && url.length() == (end - start);
 | 
			
		||||
        if (validUrl) {
 | 
			
		||||
| 
						 | 
				
			
			@ -640,7 +599,7 @@ public class SpannableHelper {
 | 
			
		|||
            @Override
 | 
			
		||||
            public void updateDrawState(@NonNull TextPaint ds) {
 | 
			
		||||
                super.updateDrawState(ds);
 | 
			
		||||
                ds.setUnderlineText(false);
 | 
			
		||||
                ds.setUnderlineText(status != null && status.underlined);
 | 
			
		||||
                if (linkColor != -1) {
 | 
			
		||||
                    ds.setColor(linkColor);
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -756,7 +715,7 @@ public class SpannableHelper {
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void emails(Context context, Spannable content) {
 | 
			
		||||
    private static void emails(Context context, Spannable content, Status status) {
 | 
			
		||||
        // --- For all patterns defined in Helper class ---
 | 
			
		||||
        Pattern pattern = Helper.emailPattern;
 | 
			
		||||
        Matcher matcher = pattern.matcher(content);
 | 
			
		||||
| 
						 | 
				
			
			@ -785,7 +744,7 @@ public class SpannableHelper {
 | 
			
		|||
                    @Override
 | 
			
		||||
                    public void updateDrawState(@NonNull TextPaint ds) {
 | 
			
		||||
                        super.updateDrawState(ds);
 | 
			
		||||
                        ds.setUnderlineText(false);
 | 
			
		||||
                        ds.setUnderlineText(status != null && status.underlined);
 | 
			
		||||
                        if (linkColor != -1) {
 | 
			
		||||
                            ds.setColor(linkColor);
 | 
			
		||||
                        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -159,14 +159,13 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
 | 
			
		|||
    private final String editMessageId;
 | 
			
		||||
    public ManageDrafts manageDrafts;
 | 
			
		||||
    public promptDraftListener promptDraftListener;
 | 
			
		||||
    public MediaDescriptionCallBack mediaDescriptionCallBack;
 | 
			
		||||
    private int statusCount;
 | 
			
		||||
    private Context context;
 | 
			
		||||
    private AlertDialog alertDialogEmoji;
 | 
			
		||||
    private List<Emoji> emojisList = new ArrayList<>();
 | 
			
		||||
    private boolean unlisted_changed = false;
 | 
			
		||||
 | 
			
		||||
    private RecyclerView mRecyclerView;
 | 
			
		||||
    public MediaDescriptionCallBack mediaDescriptionCallBack;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public ComposeAdapter(List<Status> statusList, int statusCount, BaseAccount account, Account mentionedAccount, String visibility, String editMessageId) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1251,10 +1250,6 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public interface MediaDescriptionCallBack {
 | 
			
		||||
        void click(ComposeViewHolder holder, Attachment attachment, int messagePosition, int mediaPosition);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Manage state of media and poll button
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -2052,7 +2047,6 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
 | 
			
		|||
        alertPollDiaslog.show();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Display the emoji picker in the current message
 | 
			
		||||
     *
 | 
			
		||||
| 
						 | 
				
			
			@ -2086,6 +2080,11 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
 | 
			
		|||
        alertDialogEmoji = builder.show();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public interface MediaDescriptionCallBack {
 | 
			
		||||
        void click(ComposeViewHolder holder, Attachment attachment, int messagePosition, int mediaPosition);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public interface promptDraftListener {
 | 
			
		||||
        void promptDraft();
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -234,6 +234,7 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter<RecyclerVie
 | 
			
		|||
        StatusChatViewHolder holder = (StatusChatViewHolder) viewHolder;
 | 
			
		||||
        Status status = statusList.get(position);
 | 
			
		||||
        SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
 | 
			
		||||
        status.underlined = true;
 | 
			
		||||
        holder.binding.messageContent.setText(
 | 
			
		||||
                status.getSpanContent(context,
 | 
			
		||||
                        new WeakReference<>(holder.binding.messageContent),
 | 
			
		||||
| 
						 | 
				
			
			@ -279,17 +280,19 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter<RecyclerVie
 | 
			
		|||
            holder.binding.mainContainer.setBackgroundResource(R.drawable.bubble_right_tail);
 | 
			
		||||
 | 
			
		||||
            layoutParams.setMargins((int) Helper.convertDpToPixel(50, context), (int) Helper.convertDpToPixel(12, context), 0, 0);
 | 
			
		||||
            holder.binding.date.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
            holder.binding.messageContent.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
            holder.binding.userName.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
            Helper.changeDrawableColor(context, holder.binding.visibility, ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
            holder.binding.date.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnPrimary));
 | 
			
		||||
            holder.binding.messageContent.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnPrimary));
 | 
			
		||||
            holder.binding.userName.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnPrimary));
 | 
			
		||||
            holder.binding.messageContent.setLinkTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnPrimary));
 | 
			
		||||
            Helper.changeDrawableColor(context, holder.binding.visibility, ThemeHelper.getAttColor(context, R.attr.colorOnPrimary));
 | 
			
		||||
        } else {
 | 
			
		||||
            holder.binding.mainContainer.setBackgroundResource(R.drawable.bubble_left_tail);
 | 
			
		||||
            layoutParams.setMargins(0, (int) Helper.convertDpToPixel(12, context), (int) Helper.convertDpToPixel(50, context), 0);
 | 
			
		||||
            holder.binding.date.setTextColor(ContextCompat.getColor(context, R.color.black));
 | 
			
		||||
            holder.binding.messageContent.setTextColor(ContextCompat.getColor(context, R.color.black));
 | 
			
		||||
            holder.binding.userName.setTextColor(ContextCompat.getColor(context, R.color.black));
 | 
			
		||||
            Helper.changeDrawableColor(context, holder.binding.visibility, R.color.black);
 | 
			
		||||
            holder.binding.date.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
            holder.binding.messageContent.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
            holder.binding.userName.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
            holder.binding.messageContent.setLinkTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
            Helper.changeDrawableColor(context, holder.binding.visibility, ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
        }
 | 
			
		||||
        holder.binding.mainContainer.setLayoutParams(layoutParams);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -333,9 +336,13 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter<RecyclerVie
 | 
			
		|||
 | 
			
		||||
        final float scale = sharedpreferences.getFloat(context.getString(R.string.SET_FONT_SCALE), 1.1f);
 | 
			
		||||
        if (status.poll != null && status.poll.options != null) {
 | 
			
		||||
 | 
			
		||||
            holder.binding.poll.pollInfo.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
            holder.binding.poll.refresh.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
            if (status.account.id.equals(MainActivity.currentUserID)) {
 | 
			
		||||
                holder.binding.poll.pollInfo.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnPrimary));
 | 
			
		||||
                holder.binding.poll.refresh.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnPrimary));
 | 
			
		||||
            } else {
 | 
			
		||||
                holder.binding.poll.pollInfo.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
                holder.binding.poll.refresh.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
            }
 | 
			
		||||
            StatusesVM statusesVM = new ViewModelProvider((ViewModelStoreOwner) context).get(StatusesVM.class);
 | 
			
		||||
            if (status.poll.voted || status.poll.expired) {
 | 
			
		||||
                holder.binding.poll.submitVote.setVisibility(View.GONE);
 | 
			
		||||
| 
						 | 
				
			
			@ -362,8 +369,13 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter<RecyclerVie
 | 
			
		|||
                            pollItem.getSpanTitle(context, status,
 | 
			
		||||
                                    new WeakReference<>(pollItemBinding.pollItemText)),
 | 
			
		||||
                            TextView.BufferType.SPANNABLE);
 | 
			
		||||
                    pollItemBinding.pollItemPercent.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
                    pollItemBinding.pollItemText.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
                    if (status.account.id.equals(MainActivity.currentUserID)) {
 | 
			
		||||
                        pollItemBinding.pollItemPercent.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnPrimary));
 | 
			
		||||
                        pollItemBinding.pollItemText.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnPrimary));
 | 
			
		||||
                    } else {
 | 
			
		||||
                        pollItemBinding.pollItemPercent.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
                        pollItemBinding.pollItemText.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
                    }
 | 
			
		||||
                    pollItemBinding.pollItemValue.setProgress((int) value);
 | 
			
		||||
                    if (pollItem.votes_count == greaterValue) {
 | 
			
		||||
                        pollItemBinding.pollItemPercent.setTypeface(null, Typeface.BOLD);
 | 
			
		||||
| 
						 | 
				
			
			@ -395,7 +407,12 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter<RecyclerVie
 | 
			
		|||
                                        new WeakReference<>(cb)),
 | 
			
		||||
                                TextView.BufferType.SPANNABLE);
 | 
			
		||||
                        holder.binding.poll.multipleChoice.addView(cb);
 | 
			
		||||
                        cb.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
                        if (status.account.id.equals(MainActivity.currentUserID)) {
 | 
			
		||||
                            cb.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnPrimary));
 | 
			
		||||
                        } else {
 | 
			
		||||
                            cb.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
                    holder.binding.poll.multipleChoice.setVisibility(View.VISIBLE);
 | 
			
		||||
                    holder.binding.poll.singleChoiceRadioGroup.setVisibility(View.GONE);
 | 
			
		||||
| 
						 | 
				
			
			@ -408,7 +425,12 @@ public class StatusDirectMessageAdapter extends RecyclerView.Adapter<RecyclerVie
 | 
			
		|||
                                pollOption.getSpanTitle(context, status,
 | 
			
		||||
                                        new WeakReference<>(rb)),
 | 
			
		||||
                                TextView.BufferType.SPANNABLE);
 | 
			
		||||
                        rb.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
 | 
			
		||||
                        if (status.account.id.equals(MainActivity.currentUserID)) {
 | 
			
		||||
                            rb.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnPrimary));
 | 
			
		||||
                        } else {
 | 
			
		||||
                            rb.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnSecondary));
 | 
			
		||||
                        }
 | 
			
		||||
                        holder.binding.poll.singleChoiceRadioGroup.addView(rb);
 | 
			
		||||
                    }
 | 
			
		||||
                    holder.binding.poll.singleChoiceRadioGroup.setVisibility(View.VISIBLE);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,7 +19,6 @@ import static app.fedilab.android.BaseMainActivity.currentInstance;
 | 
			
		|||
import static app.fedilab.android.BaseMainActivity.currentUserID;
 | 
			
		||||
 | 
			
		||||
import android.content.SharedPreferences;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AlertDialog;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,13 +6,13 @@
 | 
			
		|||
            android:pivotY="100%"
 | 
			
		||||
            android:toDegrees="0">
 | 
			
		||||
            <shape android:shape="rectangle">
 | 
			
		||||
                <solid android:color="@color/chat_other_background" />
 | 
			
		||||
                <solid android:color="?attr/colorSecondary" />
 | 
			
		||||
            </shape>
 | 
			
		||||
        </rotate>
 | 
			
		||||
    </item>
 | 
			
		||||
    <item android:left="5dp">
 | 
			
		||||
        <shape android:shape="rectangle">
 | 
			
		||||
            <solid android:color="@color/chat_other_background" />
 | 
			
		||||
            <solid android:color="?attr/colorSecondary" />
 | 
			
		||||
            <corners android:radius="5dp" />
 | 
			
		||||
        </shape>
 | 
			
		||||
    </item>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,13 +6,13 @@
 | 
			
		|||
            android:pivotY="100%"
 | 
			
		||||
            android:toDegrees="0">
 | 
			
		||||
            <shape android:shape="rectangle">
 | 
			
		||||
                <solid android:color="?attr/colorSecondary" />
 | 
			
		||||
                <solid android:color="?attr/colorPrimary" />
 | 
			
		||||
            </shape>
 | 
			
		||||
        </rotate>
 | 
			
		||||
    </item>
 | 
			
		||||
    <item android:right="6dp">
 | 
			
		||||
        <shape android:shape="rectangle">
 | 
			
		||||
            <solid android:color="?attr/colorSecondary" />
 | 
			
		||||
            <solid android:color="?attr/colorPrimary" />
 | 
			
		||||
            <corners android:radius="5dp" />
 | 
			
		||||
        </shape>
 | 
			
		||||
    </item>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,6 @@
 | 
			
		|||
    android:layout_height="wrap_content"
 | 
			
		||||
    android:layout_marginHorizontal="@dimen/fab_margin"
 | 
			
		||||
    android:layout_marginTop="12dp"
 | 
			
		||||
    android:background="@drawable/bubble_right_tail"
 | 
			
		||||
    android:padding="12dp">
 | 
			
		||||
 | 
			
		||||
    <androidx.appcompat.widget.AppCompatImageView
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +24,6 @@
 | 
			
		|||
        android:layout_marginEnd="6dp"
 | 
			
		||||
        android:layout_height="wrap_content"
 | 
			
		||||
        android:layout_marginStart="10dp"
 | 
			
		||||
        android:textColor="?attr/colorOnPrimary"
 | 
			
		||||
        app:layout_constraintEnd_toStartOf="@+id/visibility"
 | 
			
		||||
        app:layout_constraintStart_toEndOf="@+id/user_pp"
 | 
			
		||||
        app:layout_constraintTop_toTopOf="parent"
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +40,6 @@
 | 
			
		|||
        app:layout_constraintBottom_toTopOf="@+id/date"
 | 
			
		||||
        app:layout_constraintEnd_toEndOf="parent"
 | 
			
		||||
        app:layout_constraintTop_toTopOf="parent"
 | 
			
		||||
        app:tint="?attr/colorOnPrimary"
 | 
			
		||||
        tools:src="@drawable/ic_baseline_public_24"
 | 
			
		||||
        tools:visibility="visible" />
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -53,7 +50,6 @@
 | 
			
		|||
        android:layout_marginStart="10dp"
 | 
			
		||||
        android:layout_marginEnd="6dp"
 | 
			
		||||
        android:gravity="end"
 | 
			
		||||
        android:textColor="?attr/colorOnPrimary"
 | 
			
		||||
        app:layout_constraintBottom_toTopOf="@+id/message_content"
 | 
			
		||||
        app:layout_constraintEnd_toEndOf="parent"
 | 
			
		||||
        app:layout_constraintStart_toEndOf="@+id/user_pp"
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +62,6 @@
 | 
			
		|||
        android:layout_height="wrap_content"
 | 
			
		||||
        android:layout_marginEnd="6dp"
 | 
			
		||||
        android:layout_marginTop="6dp"
 | 
			
		||||
        android:textColor="?attr/colorOnPrimary"
 | 
			
		||||
        app:layout_constraintTop_toBottomOf="@+id/date"
 | 
			
		||||
        tools:text="@tools:sample/lorem/random" />
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue