aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/ui
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2019-02-20 22:38:51 +0100
committerChristian Schneppe <christian@pix-art.de>2019-02-20 22:38:51 +0100
commit8b681105d19743b7417d3837f616b022de268330 (patch)
treea6af0653629f501cda7c1547473b18caaf28667c /src/main/java/de/pixart/messenger/ui
parent1c14932e8449e40e4cb12427cae7e51791f68595 (diff)
improve RichPreview
Diffstat (limited to 'src/main/java/de/pixart/messenger/ui')
-rw-r--r--src/main/java/de/pixart/messenger/ui/ConversationFragment.java86
-rw-r--r--src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java33
-rw-r--r--src/main/java/de/pixart/messenger/ui/widget/RichLinkView.java60
3 files changed, 56 insertions, 123 deletions
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<Message> 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<Message> messages) {
@@ -671,7 +674,6 @@ public class MessageAdapter extends ArrayAdapter<Message> 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<Message> 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<Message> 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<Message> 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<Message> 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<String> 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);
}
}