bug fix, added comments
This commit is contained in:
parent
67a820b983
commit
b88bba7407
|
@ -27,7 +27,7 @@ public class CardAdapter extends RecyclerView.Adapter<CardHolder> implements OnI
|
||||||
private Picasso picasso;
|
private Picasso picasso;
|
||||||
private OnCardClickListener listener;
|
private OnCardClickListener listener;
|
||||||
|
|
||||||
private Card[] cards;
|
private Card[] cards = {};
|
||||||
|
|
||||||
|
|
||||||
public CardAdapter(Context context, OnCardClickListener listener) {
|
public CardAdapter(Context context, OnCardClickListener listener) {
|
||||||
|
@ -71,7 +71,7 @@ public class CardAdapter extends RecyclerView.Adapter<CardHolder> implements OnI
|
||||||
* replace all items
|
* replace all items
|
||||||
* @param newCards new items to insert
|
* @param newCards new items to insert
|
||||||
*/
|
*/
|
||||||
public void replaceAll(Card[] newCards) {
|
public void replaceAll(@NonNull Card[] newCards) {
|
||||||
cards = Arrays.copyOf(newCards, newCards.length);
|
cards = Arrays.copyOf(newCards, newCards.length);
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
@ -81,8 +81,14 @@ public class CardAdapter extends RecyclerView.Adapter<CardHolder> implements OnI
|
||||||
*/
|
*/
|
||||||
public interface OnCardClickListener {
|
public interface OnCardClickListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* indicates a link click
|
||||||
|
*/
|
||||||
int TYPE_LINK = 1;
|
int TYPE_LINK = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* indicates an image thumbnail click
|
||||||
|
*/
|
||||||
int TYPE_IMAGE = 2;
|
int TYPE_IMAGE = 2;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -31,9 +31,15 @@ public class CardHolder extends ViewHolder implements OnClickListener {
|
||||||
*/
|
*/
|
||||||
private static final int TEXT_TRANSPARENCY = 0xafffffff;
|
private static final int TEXT_TRANSPARENCY = 0xafffffff;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* how much views should be fit in the window
|
||||||
|
*/
|
||||||
private static final int COLUMN_COUNT = 2;
|
private static final int COLUMN_COUNT = 2;
|
||||||
|
|
||||||
private static final int MAX_TITLE_LEN = 20;
|
/**
|
||||||
|
* maximum char count of the title before truncating
|
||||||
|
*/
|
||||||
|
private static final int TITLE_MAX_LEN = 30;
|
||||||
|
|
||||||
private TextView linkText;
|
private TextView linkText;
|
||||||
private ImageView preview;
|
private ImageView preview;
|
||||||
|
@ -80,17 +86,17 @@ public class CardHolder extends ViewHolder implements OnClickListener {
|
||||||
public void setContent(Card card) {
|
public void setContent(Card card) {
|
||||||
String textStr;
|
String textStr;
|
||||||
String title = card.getTitle();
|
String title = card.getTitle();
|
||||||
if (title.length() > MAX_TITLE_LEN)
|
if (title.length() > TITLE_MAX_LEN) {
|
||||||
textStr = title.substring(0, MAX_TITLE_LEN - 3) + "...";
|
textStr = title.substring(0, TITLE_MAX_LEN - 3) + "...";
|
||||||
else
|
} else {
|
||||||
textStr = title;
|
textStr = title;
|
||||||
|
}
|
||||||
if (!card.getDescription().isEmpty())
|
if (!card.getDescription().isEmpty())
|
||||||
textStr += '\n' + card.getDescription();
|
textStr += '\n' + card.getDescription();
|
||||||
SpannableString textSpan = new SpannableString(textStr);
|
SpannableString textSpan = new SpannableString(textStr);
|
||||||
if (!title.isEmpty())
|
if (!title.isEmpty())
|
||||||
textSpan.setSpan(new StyleSpan(Typeface.BOLD), 0, title.length() - 1, 0);
|
textSpan.setSpan(new StyleSpan(Typeface.BOLD), 0, Math.min(textStr.length() - 1, TITLE_MAX_LEN), 0);
|
||||||
linkText.setText(textSpan);
|
linkText.setText(textSpan);
|
||||||
//description.setText(card.getDescription());
|
|
||||||
if (!card.getImageUrl().isEmpty()) {
|
if (!card.getImageUrl().isEmpty()) {
|
||||||
picasso.load(card.getImageUrl()).into(preview);
|
picasso.load(card.getImageUrl()).into(preview);
|
||||||
}
|
}
|
||||||
|
@ -108,8 +114,14 @@ public class CardHolder extends ViewHolder implements OnClickListener {
|
||||||
*/
|
*/
|
||||||
public interface OnItemClickListener {
|
public interface OnItemClickListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* indicates a link click
|
||||||
|
*/
|
||||||
int TYPE_LINK = 1;
|
int TYPE_LINK = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* indicates a click on the image
|
||||||
|
*/
|
||||||
int TYPE_IMAGE = 2;
|
int TYPE_IMAGE = 2;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package org.nuclearfog.twidda.backend.api.twitter.impl;
|
package org.nuclearfog.twidda.backend.api.twitter.impl;
|
||||||
|
|
||||||
|
import android.util.Patterns;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.nuclearfog.twidda.model.Card;
|
import org.nuclearfog.twidda.model.Card;
|
||||||
|
@ -16,7 +18,7 @@ public class TwitterCard implements Card {
|
||||||
private String url;
|
private String url;
|
||||||
private String title;
|
private String title;
|
||||||
private String description;
|
private String description;
|
||||||
private String imageUrl;
|
private String imageUrl = "";
|
||||||
|
|
||||||
|
|
||||||
public TwitterCard(JSONObject json) {
|
public TwitterCard(JSONObject json) {
|
||||||
|
@ -25,14 +27,14 @@ public class TwitterCard implements Card {
|
||||||
title = json.optString("title", "");
|
title = json.optString("title", "");
|
||||||
description = json.optString("description", "");
|
description = json.optString("description", "");
|
||||||
if (images != null && images.length() > 0) {
|
if (images != null && images.length() > 0) {
|
||||||
|
// first index contains image with the highest resolutuion
|
||||||
JSONObject image = images.optJSONObject(0);
|
JSONObject image = images.optJSONObject(0);
|
||||||
if (image != null) {
|
if (image != null) {
|
||||||
imageUrl = image.optString("url");
|
String imageUrl = image.optString("url", "");
|
||||||
} else {
|
if (Patterns.WEB_URL.matcher(imageUrl).matches()) {
|
||||||
imageUrl = "";
|
this.imageUrl = imageUrl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
imageUrl = "";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ public class TwitterNotification implements Notification {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getType() {
|
public int getType() {
|
||||||
|
// Twitte rcurrently only supports mentions as notification
|
||||||
return TYPE_MENTION;
|
return TYPE_MENTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package org.nuclearfog.twidda.backend.api.twitter.impl;
|
package org.nuclearfog.twidda.backend.api.twitter.impl;
|
||||||
|
|
||||||
|
import android.util.Patterns;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
@ -54,11 +56,11 @@ public class UserV1 implements User {
|
||||||
public UserV1(JSONObject json) throws JSONException {
|
public UserV1(JSONObject json) throws JSONException {
|
||||||
String idStr = json.getString("id_str");
|
String idStr = json.getString("id_str");
|
||||||
String profileImageUrl = json.optString("profile_image_url_https", "");
|
String profileImageUrl = json.optString("profile_image_url_https", "");
|
||||||
|
String profileBannerUrl = json.optString("profile_banner_url", "");
|
||||||
username = json.optString("name", "");
|
username = json.optString("name", "");
|
||||||
screenName = '@' + json.optString("screen_name", "");
|
screenName = '@' + json.optString("screen_name", "");
|
||||||
isVerified = json.optBoolean("verified");
|
isVerified = json.optBoolean("verified");
|
||||||
isLocked = json.optBoolean("protected");
|
isLocked = json.optBoolean("protected");
|
||||||
profileBannerUrl = json.optString("profile_banner_url", "");
|
|
||||||
location = json.optString("location", "");
|
location = json.optString("location", "");
|
||||||
following = json.optInt("friends_count");
|
following = json.optInt("friends_count");
|
||||||
follower = json.optInt("followers_count");
|
follower = json.optInt("followers_count");
|
||||||
|
@ -70,6 +72,17 @@ public class UserV1 implements User {
|
||||||
description = getDescription(json);
|
description = getDescription(json);
|
||||||
url = getUrl(json);
|
url = getUrl(json);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (Patterns.WEB_URL.matcher(profileImageUrl).matches()) {
|
||||||
|
this.profileImageUrl = profileImageUrl;
|
||||||
|
} else {
|
||||||
|
this.profileImageUrl = "";
|
||||||
|
}
|
||||||
|
if (Patterns.WEB_URL.matcher(profileBannerUrl).matches()) {
|
||||||
|
this.profileBannerUrl = profileBannerUrl;
|
||||||
|
} else {
|
||||||
|
this.profileBannerUrl = "";
|
||||||
|
}
|
||||||
if (defaultImage) {
|
if (defaultImage) {
|
||||||
this.profileImageUrl = profileImageUrl;
|
this.profileImageUrl = profileImageUrl;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package org.nuclearfog.twidda.backend.api.twitter.impl;
|
package org.nuclearfog.twidda.backend.api.twitter.impl;
|
||||||
|
|
||||||
|
import android.util.Patterns;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
@ -50,12 +52,12 @@ public class UserV2 implements User {
|
||||||
|
|
||||||
String idStr = json.getString("id");
|
String idStr = json.getString("id");
|
||||||
String profileImageUrl = json.optString("profile_image_url", "");
|
String profileImageUrl = json.optString("profile_image_url", "");
|
||||||
|
String profileBannerUrl = json.optString("profile_banner_url", "");
|
||||||
username = json.optString("name", "");
|
username = json.optString("name", "");
|
||||||
screenName = '@' + json.optString("username", "");
|
screenName = '@' + json.optString("username", "");
|
||||||
isProtected = json.optBoolean("protected");
|
isProtected = json.optBoolean("protected");
|
||||||
location = json.optString("location", "");
|
location = json.optString("location", "");
|
||||||
isVerified = json.optBoolean("verified");
|
isVerified = json.optBoolean("verified");
|
||||||
profileBannerUrl = json.optString("profile_banner_url", "");
|
|
||||||
created = StringTools.getTime(json.optString("created_at", ""), StringTools.TIME_TWITTER_V2);
|
created = StringTools.getTime(json.optString("created_at", ""), StringTools.TIME_TWITTER_V2);
|
||||||
defaultImage = profileImageUrl.contains("default_profile_images");
|
defaultImage = profileImageUrl.contains("default_profile_images");
|
||||||
|
|
||||||
|
@ -67,10 +69,19 @@ public class UserV2 implements User {
|
||||||
follower = metrics.optInt("followers_count");
|
follower = metrics.optInt("followers_count");
|
||||||
tweetCount = metrics.optInt("tweet_count");
|
tweetCount = metrics.optInt("tweet_count");
|
||||||
}
|
}
|
||||||
if (defaultImage) {
|
if (Patterns.WEB_URL.matcher(profileImageUrl).matches()) {
|
||||||
this.profileImageUrl = profileImageUrl;
|
if (defaultImage) {
|
||||||
|
this.profileImageUrl = profileImageUrl;
|
||||||
|
} else {
|
||||||
|
this.profileImageUrl = StringTools.createProfileImageLink(profileImageUrl);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
this.profileImageUrl = StringTools.createProfileImageLink(profileImageUrl);
|
this.profileImageUrl = "";
|
||||||
|
}
|
||||||
|
if (Patterns.WEB_URL.matcher(profileBannerUrl).matches()) {
|
||||||
|
this.profileBannerUrl = profileBannerUrl;
|
||||||
|
} else {
|
||||||
|
this.profileBannerUrl = "";
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
id = Long.parseLong(idStr);
|
id = Long.parseLong(idStr);
|
||||||
|
|
Loading…
Reference in New Issue