Fixes a bug where mentioning users of the same username links them all to the same profile. Closes #312
Also, removes the title on the search page and fixes an intermittent crash on thread pages when elements load in a paritcular order.
This commit is contained in:
parent
2e29088d65
commit
8b4e377d34
|
@ -66,6 +66,7 @@ public class SearchActivity extends BaseActivity implements SearchView.OnQueryTe
|
|||
if (bar != null) {
|
||||
bar.setDisplayHomeAsUpEnabled(true);
|
||||
bar.setDisplayShowHomeEnabled(true);
|
||||
bar.setDisplayShowTitleEnabled(false);
|
||||
}
|
||||
|
||||
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
|
||||
|
|
|
@ -231,8 +231,6 @@ class StatusViewHolder extends RecyclerView.ViewHolder {
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (sensitive) {
|
||||
|
|
|
@ -82,7 +82,9 @@ public class ThreadAdapter extends RecyclerView.Adapter implements AdapterItemRe
|
|||
}
|
||||
|
||||
public int setStatus(Status status) {
|
||||
if (statuses.size() > 0 && statuses.get(statusIndex).equals(status)) {
|
||||
if (statuses.size() > 0
|
||||
&& statusIndex < statuses.size()
|
||||
&& statuses.get(statusIndex).equals(status)) {
|
||||
// Do not add this status on refresh, it's already in there.
|
||||
statuses.set(statusIndex, status);
|
||||
return statusIndex;
|
||||
|
|
|
@ -172,6 +172,4 @@ public class Status {
|
|||
@SerializedName("username")
|
||||
public String localUsername;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -27,7 +27,25 @@ import android.widget.TextView;
|
|||
import com.keylesspalace.tusky.entity.Status;
|
||||
import com.keylesspalace.tusky.interfaces.LinkListener;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
public class LinkHelper {
|
||||
private static String getDomain(String urlString) {
|
||||
URI uri;
|
||||
try {
|
||||
uri = new URI(urlString);
|
||||
} catch (URISyntaxException e) {
|
||||
return "";
|
||||
}
|
||||
String host = uri.getHost();
|
||||
if (host.startsWith("www.")) {
|
||||
return host.substring(4);
|
||||
} else {
|
||||
return host;
|
||||
}
|
||||
}
|
||||
|
||||
public static void setClickableText(TextView view, Spanned content,
|
||||
@Nullable Status.Mention[] mentions, boolean useCustomTabs,
|
||||
final LinkListener listener) {
|
||||
|
@ -49,11 +67,17 @@ public class LinkHelper {
|
|||
builder.removeSpan(span);
|
||||
builder.setSpan(newSpan, start, end, flags);
|
||||
} else if (text.charAt(0) == '@' && mentions != null) {
|
||||
final String accountUsername = text.subSequence(1, text.length()).toString();
|
||||
String accountUsername = text.subSequence(1, text.length()).toString();
|
||||
/* There may be multiple matches for users on different instances with the same
|
||||
* username. If a match has the same domain we know it's for sure the same, but if
|
||||
* that can't be found then just go with whichever one matched last. */
|
||||
String id = null;
|
||||
for (Status.Mention mention : mentions) {
|
||||
if (mention.localUsername.equals(accountUsername)) {
|
||||
id = mention.id;
|
||||
if (mention.url.contains(getDomain(span.getURL()))) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (id != null) {
|
||||
|
|
Loading…
Reference in New Issue