2017-08-03 23:26:26 +02:00
|
|
|
package com.keylesspalace.tusky.adapter;
|
|
|
|
|
|
|
|
import android.content.Context;
|
2017-10-27 13:20:17 +02:00
|
|
|
import android.os.Build;
|
2017-08-03 23:26:26 +02:00
|
|
|
import android.preference.PreferenceManager;
|
|
|
|
import android.support.annotation.Nullable;
|
|
|
|
import android.text.SpannableStringBuilder;
|
|
|
|
import android.text.Spanned;
|
2017-10-27 13:20:17 +02:00
|
|
|
import android.text.TextUtils;
|
2017-08-03 23:26:26 +02:00
|
|
|
import android.text.method.LinkMovementMethod;
|
|
|
|
import android.text.style.URLSpan;
|
|
|
|
import android.view.View;
|
2017-10-27 13:20:17 +02:00
|
|
|
import android.view.ViewGroup;
|
|
|
|
import android.widget.ImageView;
|
|
|
|
import android.widget.LinearLayout;
|
2017-08-03 23:26:26 +02:00
|
|
|
import android.widget.TextView;
|
|
|
|
|
|
|
|
import com.keylesspalace.tusky.R;
|
2017-10-27 13:20:17 +02:00
|
|
|
import com.keylesspalace.tusky.entity.Card;
|
2017-08-03 23:26:26 +02:00
|
|
|
import com.keylesspalace.tusky.entity.Status;
|
|
|
|
import com.keylesspalace.tusky.interfaces.StatusActionListener;
|
|
|
|
import com.keylesspalace.tusky.util.CustomTabURLSpan;
|
2017-10-27 13:20:17 +02:00
|
|
|
import com.keylesspalace.tusky.util.LinkHelper;
|
2017-08-03 23:26:26 +02:00
|
|
|
import com.keylesspalace.tusky.viewdata.StatusViewData;
|
2017-10-27 13:20:17 +02:00
|
|
|
import com.squareup.picasso.Picasso;
|
2017-08-03 23:26:26 +02:00
|
|
|
|
|
|
|
import java.text.DateFormat;
|
|
|
|
import java.util.Date;
|
|
|
|
|
|
|
|
class StatusDetailedViewHolder extends StatusBaseViewHolder {
|
|
|
|
private TextView reblogs;
|
|
|
|
private TextView favourites;
|
|
|
|
private TextView application;
|
2017-10-27 13:20:17 +02:00
|
|
|
private LinearLayout cardView;
|
|
|
|
private LinearLayout cardInfo;
|
|
|
|
private ImageView cardImage;
|
|
|
|
private TextView cardTitle;
|
|
|
|
private TextView cardDescription;
|
|
|
|
private TextView cardUrl;
|
2017-08-03 23:26:26 +02:00
|
|
|
|
|
|
|
StatusDetailedViewHolder(View view) {
|
|
|
|
super(view);
|
2017-10-18 00:20:26 +02:00
|
|
|
reblogs = view.findViewById(R.id.status_reblogs);
|
|
|
|
favourites = view.findViewById(R.id.status_favourites);
|
|
|
|
application = view.findViewById(R.id.status_application);
|
2017-10-27 13:20:17 +02:00
|
|
|
cardView = view.findViewById(R.id.card_view);
|
|
|
|
cardInfo = view.findViewById(R.id.card_info);
|
|
|
|
cardImage = view.findViewById(R.id.card_image);
|
|
|
|
cardTitle = view.findViewById(R.id.card_title);
|
|
|
|
cardDescription = view.findViewById(R.id.card_description);
|
|
|
|
cardUrl = view.findViewById(R.id.card_link);
|
2017-08-03 23:26:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void setCreatedAt(@Nullable Date createdAt) {
|
|
|
|
if (createdAt != null) {
|
|
|
|
DateFormat dateFormat = android.text.format.DateFormat.getMediumDateFormat(
|
|
|
|
timestamp.getContext());
|
|
|
|
timestamp.setText(dateFormat.format(createdAt));
|
|
|
|
} else {
|
|
|
|
timestamp.setText("");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void setApplication(@Nullable Status.Application app) {
|
|
|
|
if (app == null) {
|
|
|
|
application.setText("");
|
|
|
|
} else if (app.website != null) {
|
|
|
|
URLSpan span;
|
|
|
|
Context context = application.getContext();
|
|
|
|
boolean useCustomTabs = PreferenceManager.getDefaultSharedPreferences(context)
|
|
|
|
.getBoolean("customTabs", true);
|
|
|
|
if (useCustomTabs) {
|
|
|
|
span = new CustomTabURLSpan(app.website);
|
|
|
|
} else {
|
|
|
|
span = new URLSpan(app.website);
|
|
|
|
}
|
|
|
|
SpannableStringBuilder text = new SpannableStringBuilder(app.name);
|
|
|
|
text.setSpan(span, 0, app.name.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
|
|
|
application.setText(text);
|
|
|
|
application.setMovementMethod(LinkMovementMethod.getInstance());
|
|
|
|
} else {
|
|
|
|
application.setText(app.name);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2017-11-06 16:19:15 +01:00
|
|
|
void setupWithStatus(final StatusViewData.Concrete status, final StatusActionListener listener,
|
2017-08-03 23:26:26 +02:00
|
|
|
boolean mediaPreviewEnabled) {
|
|
|
|
super.setupWithStatus(status, listener, mediaPreviewEnabled);
|
|
|
|
reblogs.setText(status.getReblogsCount());
|
|
|
|
favourites.setText(status.getFavouritesCount());
|
|
|
|
setApplication(status.getApplication());
|
2017-10-27 13:20:17 +02:00
|
|
|
|
|
|
|
if(status.getAttachments().length == 0 && status.getCard() != null && !TextUtils.isEmpty(status.getCard().url)) {
|
|
|
|
final Card card = status.getCard();
|
|
|
|
cardView.setVisibility(View.VISIBLE);
|
|
|
|
cardTitle.setText(card.title);
|
|
|
|
cardDescription.setText(card.description);
|
|
|
|
|
|
|
|
cardUrl.setText(card.url);
|
|
|
|
|
|
|
|
if(card.width > 0 && card.height > 0 && !TextUtils.isEmpty(card.image)) {
|
|
|
|
cardImage.setVisibility(View.VISIBLE);
|
|
|
|
|
|
|
|
if(card.width > card.height) {
|
|
|
|
cardView.setOrientation(LinearLayout.VERTICAL);
|
|
|
|
cardImage.getLayoutParams().height = cardImage.getContext().getResources()
|
|
|
|
.getDimensionPixelSize(R.dimen.card_image_vertical_height);
|
|
|
|
cardImage.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
|
|
|
|
cardInfo.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
|
|
|
|
cardInfo.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT;
|
|
|
|
} else {
|
|
|
|
cardView.setOrientation(LinearLayout.HORIZONTAL);
|
|
|
|
cardImage.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
|
|
|
|
cardImage.getLayoutParams().width = cardImage.getContext().getResources()
|
|
|
|
.getDimensionPixelSize(R.dimen.card_image_horizontal_width);
|
|
|
|
cardInfo.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
|
|
|
cardInfo.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
|
|
|
cardView.setClipToOutline(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
Picasso.with(cardImage.getContext())
|
|
|
|
.load(card.image)
|
|
|
|
.fit()
|
|
|
|
.centerCrop()
|
|
|
|
.into(cardImage);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
cardImage.setVisibility(View.GONE);
|
|
|
|
}
|
|
|
|
|
|
|
|
cardView.setOnClickListener(new View.OnClickListener() {
|
|
|
|
@Override
|
|
|
|
public void onClick(View v) {
|
|
|
|
|
|
|
|
LinkHelper.openLink(card.url, v.getContext());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
} else {
|
|
|
|
cardView.setVisibility(View.GONE);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-08-03 23:26:26 +02:00
|
|
|
}
|
|
|
|
}
|