This commit is contained in:
nuclearfog 2022-12-29 10:36:24 +01:00
parent 713766c032
commit 590f0654dc
No known key found for this signature in database
GPG Key ID: 03488A185C476379
7 changed files with 34 additions and 25 deletions

View File

@ -1,6 +1,7 @@
package org.nuclearfog.twidda.adapter.holder; package org.nuclearfog.twidda.adapter.holder;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.graphics.drawable.ColorDrawable;
import android.text.SpannableString; import android.text.SpannableString;
import android.text.style.StyleSpan; import android.text.style.StyleSpan;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -14,6 +15,7 @@ import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.ViewHolder; import androidx.recyclerview.widget.RecyclerView.ViewHolder;
import com.squareup.picasso.MemoryPolicy; import com.squareup.picasso.MemoryPolicy;
import com.squareup.picasso.NetworkPolicy;
import com.squareup.picasso.Picasso; import com.squareup.picasso.Picasso;
import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.R;
@ -28,6 +30,11 @@ import org.nuclearfog.twidda.model.Card;
*/ */
public class CardHolder extends ViewHolder implements OnClickListener { public class CardHolder extends ViewHolder implements OnClickListener {
/**
* empty placeholder image color
*/
private static final int EMPTY_COLOR = 0x1f000000;
/** /**
* link text background transparency * link text background transparency
*/ */
@ -102,8 +109,10 @@ public class CardHolder extends ViewHolder implements OnClickListener {
textSpan.setSpan(new StyleSpan(Typeface.BOLD), 0, Math.min(textStr.length() - 1, TITLE_MAX_LEN), 0); textSpan.setSpan(new StyleSpan(Typeface.BOLD), 0, Math.min(textStr.length() - 1, TITLE_MAX_LEN), 0);
linkText.setText(textSpan); linkText.setText(textSpan);
if (settings.imagesEnabled() && !card.getImageUrl().isEmpty()) { if (settings.imagesEnabled() && !card.getImageUrl().isEmpty()) {
picasso.load(card.getImageUrl()).memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE).into(preview); picasso.load(card.getImageUrl()).networkPolicy(NetworkPolicy.NO_STORE).memoryPolicy(MemoryPolicy.NO_STORE).into(preview);
} // todo add placeholder if image loading is disabled } else {
preview.setImageDrawable(new ColorDrawable(EMPTY_COLOR));
}
} }
/** /**

View File

@ -1,5 +1,6 @@
package org.nuclearfog.twidda.adapter.holder; package org.nuclearfog.twidda.adapter.holder;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
@ -10,6 +11,7 @@ import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.ViewHolder; import androidx.recyclerview.widget.RecyclerView.ViewHolder;
import com.squareup.picasso.MemoryPolicy; import com.squareup.picasso.MemoryPolicy;
import com.squareup.picasso.NetworkPolicy;
import com.squareup.picasso.Picasso; import com.squareup.picasso.Picasso;
import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.R;
@ -23,6 +25,11 @@ import org.nuclearfog.twidda.model.Media;
*/ */
public class PreviewHolder extends ViewHolder implements OnClickListener { public class PreviewHolder extends ViewHolder implements OnClickListener {
/**
* empty placeholder image color
*/
private static final int EMPTY_COLOR = 0x1f000000;
private ImageView previewImage, playIcon; private ImageView previewImage, playIcon;
private Picasso picasso; private Picasso picasso;
@ -32,12 +39,12 @@ public class PreviewHolder extends ViewHolder implements OnClickListener {
public PreviewHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso) { public PreviewHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso) {
super(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_preview, parent, false)); super(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_preview, parent, false));
previewImage = itemView.findViewById(R.id.item_preview_image);
playIcon = itemView.findViewById(R.id.item_preview_play);
previewImage.getLayoutParams().width = parent.getMeasuredHeight();
this.picasso = picasso; this.picasso = picasso;
this.settings = settings; this.settings = settings;
previewImage = itemView.findViewById(R.id.item_preview_image);
playIcon = itemView.findViewById(R.id.item_preview_play);
previewImage.getLayoutParams().width = parent.getMeasuredHeight();
previewImage.setOnClickListener(this); previewImage.setOnClickListener(this);
} }
@ -60,9 +67,9 @@ public class PreviewHolder extends ViewHolder implements OnClickListener {
public void setContent(Media media) { public void setContent(Media media) {
if (settings.imagesEnabled()) { if (settings.imagesEnabled()) {
if (!media.getPreviewUrl().isEmpty()) { if (!media.getPreviewUrl().isEmpty()) {
picasso.load(media.getPreviewUrl()).memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE).error(R.drawable.no_image).into(previewImage); picasso.load(media.getPreviewUrl()).networkPolicy(NetworkPolicy.NO_STORE).memoryPolicy(MemoryPolicy.NO_STORE).error(R.drawable.no_image).into(previewImage);
} else { } else {
previewImage.setImageResource(R.drawable.no_image); previewImage.setImageDrawable(new ColorDrawable(EMPTY_COLOR));
} }
}// todo add placeholder if image load is disabled }// todo add placeholder if image load is disabled
if (media.getMediaType() == Media.VIDEO || media.getMediaType() == Media.GIF) { if (media.getMediaType() == Media.VIDEO || media.getMediaType() == Media.GIF) {

View File

@ -1183,7 +1183,7 @@ public class Twitter implements Connection {
try { try {
params.add(TweetV2.FIELDS_TWEET); params.add(TweetV2.FIELDS_TWEET);
params.add(TweetV2.FIELDS_EXPANSION); params.add(TweetV2.FIELDS_EXPANSION);
params.add(UserV2.USER_FIELDS); params.add(UserV2.FIELDS_USER);
params.add(MediaV2.FIELDS_MEDIA); params.add(MediaV2.FIELDS_MEDIA);
params.add(PollV2.FIELDS_POLL); params.add(PollV2.FIELDS_POLL);
params.add(LocationV2.FIELDS_PLACE); params.add(LocationV2.FIELDS_PLACE);
@ -1196,9 +1196,12 @@ public class Twitter implements Connection {
if (data != null && data.length() > 0) { if (data != null && data.length() > 0) {
List<Status> tweets = new ArrayList<>(data.length() + 1); List<Status> tweets = new ArrayList<>(data.length() + 1);
UserV2Map userMap = new UserV2Map(json, settings.getLogin().getId()); UserV2Map userMap = new UserV2Map(json, settings.getLogin().getId());
MediaV2Map mediaMap = new MediaV2Map(json);
PollV2Map pollMap = new PollV2Map(json);
LocationV2Map locationMap = new LocationV2Map(json);
for (int i = 0; i < data.length(); i++) { for (int i = 0; i < data.length(); i++) {
try { try {
Status item = new TweetV2(data.getJSONObject(i), userMap); Status item = new TweetV2(data.getJSONObject(i), userMap, mediaMap, pollMap, locationMap, null);
tweets.add(item); tweets.add(item);
} catch (JSONException e) { } catch (JSONException e) {
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
@ -1269,7 +1272,7 @@ public class Twitter implements Connection {
else else
params.add(TweetV2.FIELDS_TWEET); params.add(TweetV2.FIELDS_TWEET);
params.add(TweetV2.FIELDS_EXPANSION); params.add(TweetV2.FIELDS_EXPANSION);
params.add(UserV2.USER_FIELDS); params.add(UserV2.FIELDS_USER);
params.add(MediaV2.FIELDS_MEDIA); params.add(MediaV2.FIELDS_MEDIA);
params.add(PollV2.FIELDS_POLL); params.add(PollV2.FIELDS_POLL);
params.add(LocationV2.FIELDS_PLACE); params.add(LocationV2.FIELDS_PLACE);
@ -1397,7 +1400,7 @@ public class Twitter implements Connection {
private Users getUsers2(String endpoint) throws TwitterException { private Users getUsers2(String endpoint) throws TwitterException {
try { try {
List<String> params = new ArrayList<>(); List<String> params = new ArrayList<>();
params.add("user.fields=" + UserV2.USER_FIELDS); params.add("user.fields=" + UserV2.FIELDS_USER);
Response response = get(endpoint, params); Response response = get(endpoint, params);
ResponseBody body = response.body(); ResponseBody body = response.body();
if (body != null && response.code() == 200) { if (body != null && response.code() == 200) {

View File

@ -23,7 +23,6 @@ public class MediaV1 implements Media {
private int type = NONE; private int type = NONE;
private String url = ""; private String url = "";
private String preview;
private String key; private String key;
/** /**
@ -31,7 +30,6 @@ public class MediaV1 implements Media {
*/ */
public MediaV1(JSONObject json) throws JSONException { public MediaV1(JSONObject json) throws JSONException {
String type = json.getString("type"); String type = json.getString("type");
preview = json.getString("media_url_https");
key = json.getString("id_str"); key = json.getString("id_str");
switch (type) { switch (type) {
case "photo": case "photo":
@ -88,7 +86,7 @@ public class MediaV1 implements Media {
@Override @Override
public String getPreviewUrl() { public String getPreviewUrl() {
return preview; return "";
} }

View File

@ -42,7 +42,8 @@ public class MediaV2 implements Media {
switch (typeStr) { switch (typeStr) {
case "photo": case "photo":
url = mediaItem.optString("url"); url = mediaItem.optString("url");
preview = url; // fixme: currently Twitter doesn't support preview for images. if (preview.isEmpty())// fixme: currently Twitter doesn't support preview for images.
preview = url;
type = PHOTO; type = PHOTO;
break; break;

View File

@ -75,14 +75,6 @@ public class TweetV2 implements Status {
private Media[] medias = {}; private Media[] medias = {};
private Card[] cards = {}; private Card[] cards = {};
/**
* @param json tweet json format
* @param userMap map containing user instances
*/
public TweetV2(JSONObject json, UserV2Map userMap) throws JSONException {
this(json, userMap, null, null, null, null);
}
/** /**
* @param json tweet json format * @param json tweet json format
* @param userMap map containing user instances * @param userMap map containing user instances
@ -219,7 +211,6 @@ public class TweetV2 implements Status {
favorited = tweetCompat.isFavorited(); favorited = tweetCompat.isFavorited();
// fixme: for any reason Twitter API 2.0 doesn't return the attributes below // fixme: for any reason Twitter API 2.0 doesn't return the attributes below
source = tweetCompat.getSource(); source = tweetCompat.getSource();
medias = tweetCompat.getMedia();
} }
} }

View File

@ -23,7 +23,7 @@ public class UserV2 implements User {
/** /**
* extra parameters required to fetch additional data * extra parameters required to fetch additional data
*/ */
public static final String USER_FIELDS = "user.fields=created_at%2Cdescription%2Centities%2Cid%2Clocation%2Cname%2Cprofile_image_url" + public static final String FIELDS_USER = "user.fields=created_at%2Cdescription%2Centities%2Cid%2Clocation%2Cname%2Cprofile_image_url" +
"%2Cprotected%2Cpublic_metrics%2Curl%2Cusername%2Cverified"; "%2Cprotected%2Cpublic_metrics%2Curl%2Cusername%2Cverified";
private long id; private long id;