Clicks on mentioned accounts opens details
This commit is contained in:
parent
d363fd28c1
commit
b92d2a5b51
|
@ -33,8 +33,6 @@ import android.os.Bundle;
|
|||
import android.support.v4.app.ActivityCompat;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.text.Html;
|
||||
import android.text.util.Linkify;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
@ -246,7 +244,7 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
|
|||
username = status.getAccount().getUsername();
|
||||
holder.status_reblog_user.setVisibility(View.GONE);
|
||||
holder.status_account_displayname.setText(displayName);
|
||||
holder.status_account_username.setText( String.format("@%s",username));
|
||||
holder.status_account_username.setText(String.format("@%s",username));
|
||||
}
|
||||
|
||||
|
||||
|
@ -262,12 +260,8 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
|
|||
});
|
||||
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||
holder.status_content.setText(Html.fromHtml(content, Html.FROM_HTML_MODE_COMPACT));
|
||||
else
|
||||
//noinspection deprecation
|
||||
holder.status_content.setText(Html.fromHtml(content));
|
||||
holder.status_content.setAutoLinkMask(Linkify.WEB_URLS);
|
||||
holder.status_content = Helper.clickableAccounts(context, holder.status_content,content, status.getReblog() != null?status.getReblog().getMentions():status.getMentions());
|
||||
|
||||
holder.status_favorite_count.setText(String.valueOf(status.getFavourites_count()));
|
||||
holder.status_reblog_count.setText(String.valueOf(status.getReblogs_count()));
|
||||
holder.status_toot_date.setText(Helper.dateDiff(context, status.getCreated_at()));
|
||||
|
|
|
@ -40,7 +40,14 @@ import android.os.Environment;
|
|||
import android.support.design.widget.NavigationView;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.support.v4.app.NotificationManagerCompat;
|
||||
import android.text.Html;
|
||||
import android.text.SpannableString;
|
||||
import android.text.Spanned;
|
||||
import android.text.TextPaint;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.text.style.ClickableSpan;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
|
@ -75,6 +82,7 @@ import fr.gouv.etalab.mastodon.activities.LoginActivity;
|
|||
import fr.gouv.etalab.mastodon.activities.ShowAccountActivity;
|
||||
import fr.gouv.etalab.mastodon.asynctasks.RemoveAccountAsyncTask;
|
||||
import fr.gouv.etalab.mastodon.client.Entities.Account;
|
||||
import fr.gouv.etalab.mastodon.client.Entities.Mention;
|
||||
import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
|
||||
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
|
||||
import mastodon.etalab.gouv.fr.mastodon.R;
|
||||
|
@ -772,4 +780,63 @@ public class Helper {
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if the status contents mentions and fills the content with ClickableSpan
|
||||
* @param context Context
|
||||
* @param statusTV Textview
|
||||
* @param fullContent String, should be the st
|
||||
* @param mentions List<Mention>
|
||||
* @return TextView
|
||||
*/
|
||||
public static TextView clickableAccounts(final Context context, TextView statusTV, String fullContent, List<Mention> mentions) {
|
||||
//Retrieves accounts name
|
||||
Pattern sPattern = Pattern.compile("@<span>([a-zA-Z0-9_]{1,})<\\/span>");
|
||||
Matcher m = sPattern.matcher(fullContent);
|
||||
while (m.find()) {
|
||||
fullContent = fullContent.replaceAll(m.group(0), "<font color='#000'>" + m.group(0) + "</font>");
|
||||
}
|
||||
if( mentions == null || mentions.size() == 0) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||
statusTV.setText(Html.fromHtml(fullContent, Html.FROM_HTML_MODE_COMPACT));
|
||||
else
|
||||
//noinspection deprecation
|
||||
statusTV.setText(Html.fromHtml(fullContent));
|
||||
return statusTV;
|
||||
}
|
||||
SpannableString spannableString;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||
spannableString = new SpannableString(Html.fromHtml(fullContent, Html.FROM_HTML_MODE_COMPACT));
|
||||
else
|
||||
//noinspection deprecation
|
||||
spannableString = new SpannableString(Html.fromHtml(fullContent));
|
||||
|
||||
//Looping through accounts which are mentioned
|
||||
for(final Mention mention: mentions){
|
||||
String targetedAccount = "@" + mention.getUsername();
|
||||
if( spannableString.toString().contains(targetedAccount)){
|
||||
|
||||
int startPosition = spannableString.toString().indexOf(targetedAccount);
|
||||
int endPosition = spannableString.toString().lastIndexOf(targetedAccount) + targetedAccount.length();
|
||||
spannableString.setSpan(new ClickableSpan() {
|
||||
@Override
|
||||
public void onClick(View textView) {
|
||||
Intent intent = new Intent(context, ShowAccountActivity.class);
|
||||
Bundle b = new Bundle();
|
||||
b.putString("accountId", mention.getId());
|
||||
intent.putExtras(b);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
@Override
|
||||
public void updateDrawState(TextPaint ds) {
|
||||
super.updateDrawState(ds);
|
||||
}},
|
||||
startPosition, endPosition,
|
||||
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
statusTV.setText(spannableString, TextView.BufferType.SPANNABLE);
|
||||
}
|
||||
statusTV.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
}
|
||||
return statusTV;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue