summaryrefslogtreecommitdiffstats
path: root/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java')
-rw-r--r--app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java163
1 files changed, 77 insertions, 86 deletions
diff --git a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java
index 4c7da76a2..ee73cde5c 100644
--- a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java
+++ b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java
@@ -51,8 +51,6 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
-import android.webkit.WebView;
-import android.webkit.WebViewClient;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
@@ -78,6 +76,7 @@ import androidx.appcompat.widget.PopupMenu;
import androidx.appcompat.widget.SwitchCompat;
import androidx.appcompat.widget.TooltipCompat;
import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.core.app.ActivityOptionsCompat;
import androidx.core.content.ContextCompat;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -182,7 +181,6 @@ import app.fedilab.android.sqlite.StatusStoredDAO;
import app.fedilab.android.sqlite.TempMuteDAO;
import app.fedilab.android.sqlite.TimelineCacheDAO;
import app.fedilab.android.sqlite.TimelinesDAO;
-import app.fedilab.android.webview.CustomWebview;
import es.dmoral.toasty.Toasty;
import jp.wasabeef.glide.transformations.BlurTransformation;
@@ -191,13 +189,15 @@ import static android.content.Context.MODE_PRIVATE;
import static app.fedilab.android.activities.BaseMainActivity.mPageReferenceMap;
import static app.fedilab.android.activities.BaseMainActivity.mutedAccount;
import static app.fedilab.android.activities.BaseMainActivity.social;
+import static app.fedilab.android.asynctasks.RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE_FILTERED;
+import static app.fedilab.android.helper.Helper.makeEmojis;
/**
* Created by Thomas on 24/04/2017.
* Adapter for Status
*/
-public class StatusListAdapter extends RecyclerView.Adapter implements OnPostActionInterface, OnRetrieveFeedsInterface, OnRetrieveImageInterface, OnRetrieveEmojiInterface, OnRetrieveRepliesInterface, OnRetrieveCardInterface, OnPollInterface, OnRefreshCachedStatusInterface, OnRetrieveSearcAccountshInterface, OnRetrieveSearchInterface, OnPostStatusActionInterface, OnRetrieveRelationshipQuickReplyInterface, OnSyncBookmarksInterface {
+public class StatusListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements OnPostActionInterface, OnRetrieveFeedsInterface, OnRetrieveImageInterface, OnRetrieveEmojiInterface, OnRetrieveRepliesInterface, OnRetrieveCardInterface, OnPollInterface, OnRefreshCachedStatusInterface, OnRetrieveSearcAccountshInterface, OnRetrieveSearchInterface, OnPostStatusActionInterface, OnRetrieveRelationshipQuickReplyInterface, OnSyncBookmarksInterface {
public static final int DISPLAYED_STATUS = 1;
public static final int COMPACT_STATUS = 3;
@@ -755,8 +755,10 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
TextView poll_item_percent = item.findViewById(R.id.poll_item_percent);
TextView poll_item_text = item.findViewById(R.id.poll_item_text);
ProgressBar poll_item_value = item.findViewById(R.id.poll_item_value);
- poll_item_percent.setText(String.format("%s %%", String.valueOf((int) value)));
- poll_item_text.setText(pollOption.getTitle(), TextView.BufferType.SPANNABLE);
+ poll_item_percent.setText(String.format("%s %%", (int) value));
+ poll_item_text.setText(pollOption.getTitleSpan(), TextView.BufferType.SPANNABLE);
+ poll_item_text.setText(pollOption.getTitle());
+ makeEmojis(context, poll_item_text, pollOption.getTitleSpan(), poll.getEmojis());
poll_item_value.setProgress((int) value);
holder.rated.addView(item);
if (pollOption.getVotes_count() == greaterValue) {
@@ -780,11 +782,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
(holder.multiple_choice).removeAllViews();
for (PollOptions pollOption : poll.getOptionsList()) {
CheckBox cb = new CheckBox(context);
- if (pollOption.getTitleSpan() != null) {
- cb.setText(pollOption.getTitleSpan(), TextView.BufferType.SPANNABLE);
- } else {
- cb.setText(pollOption.getTitle());
- }
+ cb.setText(pollOption.getTitle());
+ makeEmojis(context, cb, pollOption.getTitleSpan(), poll.getEmojis());
holder.multiple_choice.addView(cb);
}
@@ -795,11 +794,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
(holder.radio_group).removeAllViews();
for (PollOptions pollOption : poll.getOptionsList()) {
RadioButton rb = new RadioButton(context);
- if (pollOption.getTitleSpan() != null) {
- rb.setText(pollOption.getTitleSpan(), TextView.BufferType.SPANNABLE);
- } else {
- rb.setText(pollOption.getTitle());
- }
+ rb.setText(pollOption.getTitle());
+ makeEmojis(context, rb, pollOption.getTitleSpan(), poll.getEmojis());
holder.radio_group.addView(rb);
}
holder.single_choice.setVisibility(View.VISIBLE);
@@ -983,15 +979,10 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
holder.status_spoiler.setTextSize(TypedValue.COMPLEX_UNIT_SP, (float) (14 * textSizePercent) / 100);
- switch (translator) {
- case Helper.TRANS_NONE:
- holder.yandex_translate.setVisibility(View.GONE);
- break;
- case Helper.TRANS_YANDEX:
- holder.yandex_translate.setVisibility(View.VISIBLE);
- break;
- default:
- holder.yandex_translate.setVisibility(View.GONE);
+ if (translator == Helper.TRANS_YANDEX) {
+ holder.yandex_translate.setVisibility(View.VISIBLE);
+ } else {
+ holder.yandex_translate.setVisibility(View.GONE);
}
//Manages theme for icon colors
@@ -1229,7 +1220,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
TooltipCompat.setTooltipText(holder.custom_feature_translate, context.getString(R.string.translate));
holder.custom_feature_translate.setOnClickListener(view -> {
- translateToot(status);
+ translateToot(status, holder.status_content_translated);
status.setCustomFeaturesDisplayed(false);
notifyStatusChanged(status);
});
@@ -1324,11 +1315,10 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
assert img != null;
img.setBounds(0, 0, (int) (20 * iconSizePercent / 100 * scale + 0.5f), (int) (15 * iconSizePercent / 100 * scale + 0.5f));
holder.status_account_displayname.setCompoundDrawables(img, null, null, null);
- holder.status_toot_date.setCompoundDrawables(imgConversation, null, null, null);
} else {
holder.status_account_displayname.setCompoundDrawables(null, null, null, null);
- holder.status_toot_date.setCompoundDrawables(imgConversation, null, null, null);
}
+ holder.status_toot_date.setCompoundDrawables(imgConversation, null, null, null);
if (expand_media && status.isSensitive() || (status.getReblog() != null && status.getReblog().isSensitive())) {
Helper.changeDrawableColor(context, holder.hide_preview, R.color.red_1);
Helper.changeDrawableColor(context, holder.hide_preview_h, R.color.red_1);
@@ -1408,7 +1398,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
}
});
holder.status_content.setOnClickListener(v -> {
- if (type != RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE && type != RetrieveFeedsAsyncTask.Type.NEWS) {
+ if (type != RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE && type != REMOTE_INSTANCE_FILTERED && type != RetrieveFeedsAsyncTask.Type.NEWS) {
Intent intent = new Intent(context, ShowConversationActivity.class);
Bundle b = new Bundle();
if (social == UpdateAccountInfoAsyncTask.SOCIAL.GNU || social == UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA)
@@ -1561,6 +1551,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
holder.status_content.setText(status.getContentSpan(), TextView.BufferType.SPANNABLE);
holder.status_spoiler.setText(status.getContentSpanCW(), TextView.BufferType.SPANNABLE);
}
+ makeEmojis(context, holder.status_content, status.getContentSpan(), status.getReblog() != null ? status.getReblog().getEmojis() : status.getEmojis());
holder.status_content.setMovementMethod(LongClickLinkMovementMethod.getInstance());
@@ -1613,10 +1604,12 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
context.startActivity(intent);
});
- if (status.getReblog().getAccount().getDisplay_name().length() > 0)
+ if (status.getReblog().getAccount().getDisplay_name().length() > 0) {
holder.status_account_displayname_owner.setText(displayNameSpan, TextView.BufferType.SPANNABLE);
- else
+ makeEmojis(context, holder.status_account_displayname_owner, status.getReblog().getAccount().getDisplayNameSpan(), status.getReblog().getAccount().getEmojis());
+ } else
holder.status_account_displayname_owner.setText(status.getReblog().getAccount().getAcct().replace("@", ""));
+
holder.status_account_displayname_owner.setVisibility(View.VISIBLE);
if (holder.status_boosted_date != null) {
holder.status_boosted_date.setText(Helper.dateDiff(context, status.getCreated_at()));
@@ -1624,10 +1617,12 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
} else {
accountForUrl = status.getAccount();
holder.status_account_displayname.setVisibility(View.GONE);
- if (displayNameSpan == null || displayNameSpan.toString().trim().length() == 0)
+ if (displayNameSpan == null || displayNameSpan.toString().trim().length() == 0) {
holder.status_account_displayname_owner.setText(status.getAccount().getUsername().replace("@", ""), TextView.BufferType.SPANNABLE);
- else
+ } else {
holder.status_account_displayname_owner.setText(displayNameSpan, TextView.BufferType.SPANNABLE);
+ makeEmojis(context, holder.status_account_displayname_owner, displayNameSpan, status.getAccount().getEmojis());
+ }
}
//-------- END -> Displays name & emoji in toot header
@@ -1704,6 +1699,9 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
holder.fetch_more.setVisibility(View.GONE);
}
+ if (type == RetrieveFeedsAsyncTask.Type.CONTEXT) {
+ holder.fetch_more.setVisibility(View.GONE);
+ }
if (status.getMentions() != null)
holder.status_mention_spoiler.setText(Helper.makeMentionsClick(context, status.getMentions()), TextView.BufferType.SPANNABLE);
@@ -2144,33 +2142,17 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
if (status.getReblog() == null) {
if (status.getWebviewURL() != null) {
- String url = status.getWebviewURL().replaceAll("&amp;", "&");
- try {
- holder.status_cardview_webview.loadUrl(url);
- } catch (Exception e) {
- e.printStackTrace();
- }
- holder.status_cardview_webview.setVisibility(View.VISIBLE);
holder.status_cardview_video.setVisibility(View.VISIBLE);
holder.webview_preview.setVisibility(View.GONE);
} else {
- holder.status_cardview_webview.setVisibility(View.GONE);
holder.status_cardview_video.setVisibility(View.GONE);
holder.webview_preview.setVisibility(View.VISIBLE);
}
} else {
if (status.getReblog().getWebviewURL() != null) {
- String url = status.getReblog().getWebviewURL().replaceAll("&amp;", "&");
- try {
- holder.status_cardview_webview.loadUrl(url);
- } catch (Exception e) {
- e.printStackTrace();
- }
- holder.status_cardview_webview.setVisibility(View.VISIBLE);
holder.status_cardview_video.setVisibility(View.VISIBLE);
holder.webview_preview.setVisibility(View.GONE);
} else {
- holder.status_cardview_webview.setVisibility(View.GONE);
holder.status_cardview_video.setVisibility(View.GONE);
holder.webview_preview.setVisibility(View.VISIBLE);
}
@@ -2302,17 +2284,14 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
Helper.openBrowser(context, url);
});
} else if (card.getType().toLowerCase().equals("video") && (display_video_preview || (type == RetrieveFeedsAsyncTask.Type.CONTEXT && viewHolder.getAdapterPosition() == conversationPosition))) {
+
Glide.with(holder.status_cardview_image.getContext())
.load(card.getImage())
.apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10)))
.into(holder.webview_preview_card);
holder.status_cardview.setVisibility(View.GONE);
holder.status_cardview_video.setVisibility(View.VISIBLE);
- String user_agent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, Helper.USER_AGENT);
- if (user_agent != null) {
- holder.status_cardview_webview.getSettings().setUserAgentString(user_agent);
- }
- holder.status_cardview_webview.getSettings().setJavaScriptEnabled(true);
+
String html = card.getHtml();
String src = card.getUrl();
if (html != null) {
@@ -2321,12 +2300,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
src = matcher.group(1);
}
final String finalSrc = src;
- holder.status_cardview_webview.setWebViewClient(new WebViewClient() {
- @Override
- public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
- holder.status_cardview_video.setVisibility(View.GONE);
- }
- });
+
holder.webview_preview.setOnClickListener(v -> {
String url = finalSrc;
if (url != null) {
@@ -2344,12 +2318,27 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
}
}
}
- if (status.getReblog() == null) {
- status.setWebviewURL(url);
+ Intent intent = new Intent(context, SlideMediaActivity.class);
+ Bundle b = new Bundle();
+ Attachment attachment = new Attachment();
+ attachment.setType("web");
+ attachment.setUrl(url);
+ attachment.setPreview_url(card.getImage());
+ ArrayList<Attachment> attachmentArrayList = new ArrayList<>();
+ attachmentArrayList.add(attachment);
+ intent.putParcelableArrayListExtra("mediaArray", attachmentArrayList);
+ b.putInt("bgcolor", context.getResources().getColor(R.color.cyanea_primary_dark));
+ b.putInt("position", 1);
+ intent.putExtras(b);
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
+ ActivityOptionsCompat options = ActivityOptionsCompat
+ .makeSceneTransitionAnimation((Activity) context, holder.webview_preview, attachment.getUrl());
+ // start the new activity
+ context.startActivity(intent, options.toBundle());
} else {
- status.getReblog().setWebviewURL(url);
+ // start the new activity
+ context.startActivity(intent);
}
- notifyStatusChanged(status);
});
} else {
holder.status_cardview.setVisibility(View.GONE);
@@ -2471,12 +2460,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
break;
}
}
- int tootVisibility;
- if (ownerTootVisibility >= initialTootVisibility) {
- tootVisibility = initialTootVisibility;
- } else {
- tootVisibility = ownerTootVisibility;
- }
+ int tootVisibility = Math.min(ownerTootVisibility, initialTootVisibility);
switch (tootVisibility) {
case 4:
@@ -2670,6 +2654,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
CrossActions.doCrossAction(context, type, status, null, API.StatusAction.REBLOG, statusListAdapter, StatusListAdapter.this, false);
return true;
});
+
if (!status.getVisibility().equals("direct"))
holder.status_reply.setOnLongClickListener(view -> {
CrossActions.doCrossReply(context, status, type, false);
@@ -2888,7 +2873,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
if (translator == Helper.TRANS_NONE)
Toasty.info(context, R.string.toast_error_translations_disabled, Toast.LENGTH_SHORT).show();
else
- translateToot(status);
+ translateToot(status, holder.status_content_translated);
return true;
case R.id.action_report:
builderInner = new AlertDialog.Builder(context, style);
@@ -3333,7 +3318,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
.asBitmap()
.load(!attachment.getType().toLowerCase().equals("audio") ? url : R.drawable.ic_audio_wave)
.thumbnail(0.1f)
- .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10)))
+ //.dontTransform()
+ .apply(new RequestOptions().transform(new RoundedCorners(10)))
.into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
@@ -3352,6 +3338,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
.asBitmap()
.load(!attachment.getType().toLowerCase().equals("audio") ? url : R.drawable.ic_audio_wave)
.thumbnail(0.1f)
+ // .dontTransform()
.apply(new RequestOptions().transform(new BlurTransformation(50, 3), new RoundedCorners(10)))
.into(new CustomTarget<Bitmap>() {
@Override
@@ -3372,18 +3359,20 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
if (!blur) {
Glide.with(imageView.getContext())
.load(!attachment.getType().toLowerCase().equals("audio") ? url : R.drawable.ic_audio_wave)
+ .dontTransform()
.thumbnail(0.1f)
// .override(640, 480)
.apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10)))
- // .transition(DrawableTransitionOptions.withCrossFade())
+ .transition(DrawableTransitionOptions.withCrossFade())
.into(imageView);
} else {
Glide.with(imageView.getContext())
.load(!attachment.getType().toLowerCase().equals("audio") ? url : R.drawable.ic_audio_wave)
.thumbnail(0.1f)
+ .dontTransform()
// .override(640, 480)
- .apply(new RequestOptions().transform(new BlurTransformation(50, 3), new RoundedCorners(10)))
- // .transition(DrawableTransitionOptions.withCrossFade())
+ .apply(new RequestOptions().transform(new CenterCrop(), new BlurTransformation(50, 3), new RoundedCorners(10)))
+ .transition(DrawableTransitionOptions.withCrossFade())
.into(imageView);
}
}
@@ -3408,7 +3397,16 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
b.putInt("bgcolor", context.getResources().getColor(R.color.cyanea_primary_dark));
b.putInt("position", finalPosition);
intent.putExtras(b);
- context.startActivity(intent);
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
+ ActivityOptionsCompat options = ActivityOptionsCompat
+ .makeSceneTransitionAnimation((Activity) context, imageView, attachment.getUrl());
+ // start the new activity
+ context.startActivity(intent, options.toBundle());
+ } else {
+ // start the new activity
+ context.startActivity(intent);
+ }
+
}
} else {
status.setAttachmentShown(true);
@@ -3882,11 +3880,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
@Override
public void onRetrieveImage(Status status, boolean fromTranslation) {
if (status != null) {
- if (!fromTranslation) {
- status.setImageFound(true);
- } else {
- status.setImageFound(true);
- }
+ status.setImageFound(true);
notifyStatusChanged(status);
}
}
@@ -3908,7 +3902,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
}
- private void translateToot(Status status) {
+ private void translateToot(Status status, TextView view) {
//Manages translations
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
int trans = sharedpreferences.getInt(Helper.SET_TRANSLATOR, Helper.TRANS_YANDEX);
@@ -3950,7 +3944,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
status.setTranslationShown(true);
status.setContentTranslated(translate.getTranslatedContent());
Status.transformTranslation(context, status);
- Status.makeEmojisTranslation(context, StatusListAdapter.this, status);
+ makeEmojis(context, view, status.getContentSpan(), status.getReblog() != null ? status.getReblog().getEmojis() : status.getEmojis());
notifyStatusChanged(status);
} else {
Toasty.error(context, context.getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show();
@@ -4078,7 +4072,6 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
ImageView status_cardview_image;
TextView status_cardview_title, status_cardview_content, status_cardview_url;
FrameLayout status_cardview_video;
- CustomWebview status_cardview_webview;
ImageView hide_preview, hide_preview_h;
TextView status_toot_app;
RelativeLayout webview_preview;
@@ -4192,8 +4185,6 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
status_cardview_content = itemView.findViewById(R.id.status_cardview_content);
status_cardview_url = itemView.findViewById(R.id.status_cardview_url);
status_cardview_video = itemView.findViewById(R.id.status_cardview_video);
- status_cardview_webview = Helper.initializeWebview((Activity) context, R.id.status_cardview_webview, itemView);
- status_cardview_webview.getSettings().setJavaScriptEnabled(true);
hide_preview = itemView.findViewById(R.id.hide_preview);
hide_preview_h = itemView.findViewById(R.id.hide_preview_h);
status_toot_app = itemView.findViewById(R.id.status_toot_app);