From 8b681105d19743b7417d3837f616b022de268330 Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Wed, 20 Feb 2019 22:38:51 +0100 Subject: improve RichPreview --- .../pixart/messenger/ui/ConversationFragment.java | 86 ---------------------- .../messenger/ui/adapter/MessageAdapter.java | 33 +++++++-- .../pixart/messenger/ui/widget/RichLinkView.java | 60 +++++++-------- 3 files changed, 56 insertions(+), 123 deletions(-) (limited to 'src/main/java/de/pixart/messenger/ui') diff --git a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java index 12b1a5059..975e4f768 100644 --- a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java +++ b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java @@ -173,8 +173,6 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke public Uri mPendingEditorContent = null; public FragmentConversationBinding binding; protected MessageAdapter messageListAdapter; - protected Message lastHistoryMessage = null; - SimpleDateFormat sdf = new SimpleDateFormat("EEEE, dd. MMM yyyy", Locale.getDefault()); private String lastMessageUuid = null; private Conversation conversation; private Toast messageLoaderToast; @@ -682,21 +680,6 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke return -1; } - private ScrollState getScrollPosition(int pos, View view) { - final ListView listView = this.binding.messagesView; - if (listView.getCount() == 0 || listView.getLastVisiblePosition() == listView.getCount() - 1) { - return null; - } else { - //final int pos = listView.getFirstVisiblePosition(); - //final View view = listView.getChildAt(0); - if (view == null) { - return null; - } else { - return new ScrollState(pos, view.getTop()); - } - } - } - private ScrollState getScrollPosition() { final ListView listView = this.binding == null ? null : this.binding.messagesView; if (listView == null || listView.getCount() == 0 || listView.getLastVisiblePosition() == listView.getCount() - 1) { @@ -2958,75 +2941,6 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke return true; } - public Message searchHistory(String query) { - return searchHistory(query, null); - } - - public Message searchHistory(String query, Boolean ascendingSearch) { - return searchHistory(query, lastHistoryMessage, ascendingSearch); - } - - /** - * Search through history from message basis either ascending or descending - * - * @param query search term - * @param basis message to start from. If null, start from last recent message - * @param ascendingSearch do we want to ascend or descend in our search? - * If this is null, ascend to first match and return. - * @return match or null - */ - public Message searchHistory(String query, Message basis, Boolean ascendingSearch) { - int entryIndex; - Message message; - lastHistoryMessage = basis; - if (messageList.size() == 0) { - return null; - } - if (basis == null) { - entryIndex = messageList.size() - 1; - } else { - int in = getIndexOf(basis.getUuid(), messageList); - entryIndex = (in != -1 ? in : messageList.size() - 1); - } - - int firstMatchIndex = entryIndex; - boolean entryIndexWasMatch = true; - do { - message = messageList.get(firstMatchIndex); - if (message.getType() == Message.TYPE_TEXT && messageContainsQuery(message, query)) { - lastHistoryMessage = message; - break; - } - entryIndexWasMatch = false; - firstMatchIndex = (messageList.size() + firstMatchIndex - 1) % messageList.size(); - } while (entryIndex != firstMatchIndex); - - if (!entryIndexWasMatch && entryIndex == firstMatchIndex) { - //No matches - return null; - } - - if (ascendingSearch != null) { - int direction = ascendingSearch ? -1 : 1; - int nextMatchIndex = firstMatchIndex; - do { - nextMatchIndex = (messageList.size() + nextMatchIndex + direction) % messageList.size(); - message = messageList.get(nextMatchIndex); - if (message.getType() == Message.TYPE_TEXT && messageContainsQuery(message, query)) { - lastHistoryMessage = message; - break; - } - } while (nextMatchIndex != entryIndex); - } - - if (lastHistoryMessage != null) { - int pos = getIndexOf(lastHistoryMessage.getUuid(), messageList); - setScrollPosition(getScrollPosition(pos, getView()), null); - this.binding.messagesView.setSelection(pos); - } - return lastHistoryMessage; - } - private boolean messageContainsQuery(Message m, String q) { return m != null && m.getMergedBody().toString().toLowerCase().contains(q.toLowerCase()); } diff --git a/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java b/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java index 8a2ca0b4d..8b93793c3 100644 --- a/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java +++ b/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java @@ -75,12 +75,13 @@ import de.pixart.messenger.utils.CryptoHelper; import de.pixart.messenger.utils.EmojiWrapper; import de.pixart.messenger.utils.Emoticons; import de.pixart.messenger.utils.GeoHelper; +import de.pixart.messenger.utils.RichPreview; import de.pixart.messenger.utils.StylingHelper; import de.pixart.messenger.utils.UIHelper; import de.pixart.messenger.xmpp.mam.MamReference; -import io.github.ponnamkarthik.richlinkpreview.ViewListener; import pl.droidsonroids.gif.GifImageView; +import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; import static de.pixart.messenger.ui.SettingsActivity.PLAY_GIF_INSIDE; import static de.pixart.messenger.ui.SettingsActivity.SHOW_LINKS_INSIDE; @@ -104,6 +105,8 @@ public class MessageAdapter extends ArrayAdapter implements CopyTextVie private OnContactPictureClicked mOnContactPictureClickedListener; private OnContactPictureLongClicked mOnContactPictureLongClickedListener; private boolean mIndicateReceived = false; + private boolean mPlayGifInside = false; + private boolean mShowLinksInside = false; private OnQuoteListener onQuoteListener; public MessageAdapter(XmppActivity activity, List messages) { @@ -671,7 +674,6 @@ public class MessageAdapter extends ArrayAdapter implements CopyTextVie viewHolder.audioPlayer.setVisibility(View.GONE); viewHolder.image.setVisibility(View.GONE); viewHolder.gifImage.setVisibility(View.GONE); - boolean showLinksInside = activity.getPreferences().getBoolean(SHOW_LINKS_INSIDE, activity.getResources().getBoolean(R.bool.show_links_inside)); viewHolder.messageBody.setVisibility(View.VISIBLE); Editable body = new SpannableStringBuilder(message.getBody()); if (darkBackground) { @@ -685,10 +687,22 @@ public class MessageAdapter extends ArrayAdapter implements CopyTextVie viewHolder.messageBody.setTextIsSelectable(true); viewHolder.messageBody.setMovementMethod(ClickableMovementMethod.getInstance()); listSelectionManager.onUpdate(viewHolder.messageBody, message); - boolean dataSaverDisabled = activity.xmppConnectionService.isDataSaverDisabled(); - if (showLinksInside && dataSaverDisabled) { - viewHolder.richlinkview.setVisibility(View.VISIBLE); - viewHolder.richlinkview.setLink(body.toString(), new ViewListener() { + final boolean dataSaverDisabled = activity.xmppConnectionService.isDataSaverDisabled(); + viewHolder.richlinkview.setVisibility(View.VISIBLE); + if (mShowLinksInside) { + double target = metrics.density * 200; + int scaledH; + if (Math.max(100, 100) * metrics.density <= target) { + scaledH = (int) (100 * metrics.density); + } else if (Math.max(100, 100) <= target) { + scaledH = 100; + } else { + scaledH = (int) (100 / ((double) 100 / target)); + } + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(WRAP_CONTENT, scaledH); + layoutParams.setMargins(0, (int) (metrics.density * 4), 0, (int) (metrics.density * 4)); + viewHolder.richlinkview.setLayoutParams(layoutParams); + viewHolder.richlinkview.setLink(body.toString(), message.getUuid(), dataSaverDisabled, new RichPreview.ViewListener() { @Override public void onSuccess(boolean status) { @@ -696,6 +710,8 @@ public class MessageAdapter extends ArrayAdapter implements CopyTextVie @Override public void onError(Exception e) { + e.printStackTrace(); + viewHolder.richlinkview.setVisibility(View.GONE); } }); } else { @@ -765,8 +781,7 @@ public class MessageAdapter extends ArrayAdapter implements CopyTextVie return; } String mime = file.getMimeType(); - boolean playGifInside = activity.getPreferences().getBoolean(PLAY_GIF_INSIDE, activity.getResources().getBoolean(R.bool.play_gif_inside)); - if (mime != null && mime.equals("image/gif") && playGifInside) { + if (mime != null && mime.equals("image/gif") && mPlayGifInside) { Log.d(Config.LOGTAG, "Gif Image file"); viewHolder.image.setVisibility(View.GONE); viewHolder.gifImage.setVisibility(View.VISIBLE); @@ -1151,6 +1166,8 @@ public class MessageAdapter extends ArrayAdapter implements CopyTextVie public void updatePreferences() { SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(activity); this.mIndicateReceived = p.getBoolean("indicate_received", activity.getResources().getBoolean(R.bool.indicate_received)); + this.mPlayGifInside = p.getBoolean(PLAY_GIF_INSIDE, activity.getResources().getBoolean(R.bool.play_gif_inside)); + this.mShowLinksInside = p.getBoolean(SHOW_LINKS_INSIDE, activity.getResources().getBoolean(R.bool.show_links_inside)); } public void setHighlightedTerm(List terms) { diff --git a/src/main/java/de/pixart/messenger/ui/widget/RichLinkView.java b/src/main/java/de/pixart/messenger/ui/widget/RichLinkView.java index 5a78e76b0..dbe6a4629 100644 --- a/src/main/java/de/pixart/messenger/ui/widget/RichLinkView.java +++ b/src/main/java/de/pixart/messenger/ui/widget/RichLinkView.java @@ -6,6 +6,7 @@ import android.net.Uri; import android.os.Build; import android.support.annotation.RequiresApi; import android.util.AttributeSet; +import android.util.DisplayMetrics; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; @@ -15,12 +16,9 @@ import android.widget.TextView; import com.squareup.picasso.Picasso; import de.pixart.messenger.R; -import de.pixart.messenger.services.XmppConnectionService; +import de.pixart.messenger.utils.MetaData; import de.pixart.messenger.utils.RichPreview; -import io.github.ponnamkarthik.richlinkpreview.MetaData; -import io.github.ponnamkarthik.richlinkpreview.ResponseListener; -import io.github.ponnamkarthik.richlinkpreview.RichLinkListener; -import io.github.ponnamkarthik.richlinkpreview.ViewListener; + /** * Created by ponna on 16-01-2018. @@ -36,15 +34,12 @@ public class RichLinkView extends RelativeLayout { ImageView imageView; TextView textViewTitle; TextView textViewDesp; - TextView textViewUrl; private String main_url; private boolean isDefaultClick = true; - private RichLinkListener richLinkListener; - - private XmppConnectionService mXmppConnectionService; + private RichPreview.RichLinkListener richLinkListener; public RichLinkView(Context context) { super(context); @@ -73,7 +68,7 @@ public class RichLinkView extends RelativeLayout { } - public void initView() { + public void initView(final boolean dataSaverDisabled) { if (findLinearLayoutChild() != null) { this.view = findLinearLayoutChild(); } else { @@ -84,36 +79,43 @@ public class RichLinkView extends RelativeLayout { imageView = findViewById(R.id.rich_link_image); textViewTitle = findViewById(R.id.rich_link_title); textViewDesp = findViewById(R.id.rich_link_desp); - textViewUrl = findViewById(R.id.rich_link_url); - + imageView.setAdjustViewBounds(true); if (!meta.getImageurl().equals("") || !meta.getImageurl().isEmpty() && !meta.getTitle().isEmpty() || !meta.getTitle().equals("") && !meta.getUrl().isEmpty() || !meta.getUrl().equals("") && !meta.getDescription().isEmpty() || !meta.getDescription().equals("")) { linearLayout.setVisibility(VISIBLE); } else { - linearLayout.setVisibility(GONE); + linearLayout.setVisibility(VISIBLE); } - if (meta.getImageurl().equals("") || meta.getImageurl().isEmpty()) { - imageView.setVisibility(GONE); + if (!meta.getImageurl().equals("") && !meta.getImageurl().isEmpty()) { + if (!dataSaverDisabled) { + Picasso.get() + .load(R.drawable.ic_web_grey600_48) + .into(imageView); + } else { + imageView.setVisibility(VISIBLE); + Picasso.get() + .load(meta.getImageurl()) + .resize(80, 80) + .onlyScaleDown() + .centerInside() + .placeholder(R.drawable.ic_web_grey600_48) + .into(imageView); + } } else { imageView.setVisibility(VISIBLE); Picasso.get() - .load(meta.getImageurl()) + .load(R.drawable.ic_web_grey600_48) .into(imageView); } if (meta.getTitle().isEmpty() || meta.getTitle().equals("")) { - textViewTitle.setVisibility(GONE); + textViewTitle.setVisibility(VISIBLE); + textViewTitle.setText(meta.getUrl()); } else { textViewTitle.setVisibility(VISIBLE); textViewTitle.setText(meta.getTitle()); } - if (meta.getUrl().isEmpty() || meta.getUrl().equals("")) { - textViewUrl.setVisibility(GONE); - } else { - textViewUrl.setVisibility(GONE); - textViewUrl.setText(meta.getUrl()); - } if (meta.getDescription().isEmpty() || meta.getDescription().equals("")) { textViewDesp.setVisibility(GONE); } else { @@ -143,7 +145,7 @@ public class RichLinkView extends RelativeLayout { isDefaultClick = isDefault; } - public void setClickListener(RichLinkListener richLinkListener1) { + public void setClickListener(RichPreview.RichLinkListener richLinkListener1) { richLinkListener = richLinkListener1; } @@ -156,23 +158,23 @@ public class RichLinkView extends RelativeLayout { public void setLinkFromMeta(MetaData metaData) { meta = metaData; - initView(); + initView(true); } public MetaData getMetaData() { return meta; } - public void setLink(String url, final ViewListener viewListener) { + public void setLink(final String url, final String filename, final boolean dataSaverDisabled, final RichPreview.ViewListener viewListener) { main_url = url; - RichPreview richPreview = new RichPreview(new ResponseListener() { + RichPreview richPreview = new RichPreview(new RichPreview.ResponseListener() { @Override public void onData(MetaData metaData) { meta = metaData; if (!meta.getTitle().isEmpty() || !meta.getTitle().equals("")) { viewListener.onSuccess(true); } - initView(); + initView(dataSaverDisabled); } @Override @@ -180,6 +182,6 @@ public class RichLinkView extends RelativeLayout { viewListener.onError(e); } }); - richPreview.getPreview(url); + richPreview.getPreview(url, filename, context); } } -- cgit v1.2.3