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
5 changed files with 29 additions and 6 deletions
|
@ -66,6 +66,7 @@ public class SearchActivity extends BaseActivity implements SearchView.OnQueryTe
|
||||||
if (bar != null) {
|
if (bar != null) {
|
||||||
bar.setDisplayHomeAsUpEnabled(true);
|
bar.setDisplayHomeAsUpEnabled(true);
|
||||||
bar.setDisplayShowHomeEnabled(true);
|
bar.setDisplayShowHomeEnabled(true);
|
||||||
|
bar.setDisplayShowTitleEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
|
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
|
||||||
|
|
|
@ -231,8 +231,6 @@ class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sensitive) {
|
if (sensitive) {
|
||||||
|
|
|
@ -82,7 +82,9 @@ public class ThreadAdapter extends RecyclerView.Adapter implements AdapterItemRe
|
||||||
}
|
}
|
||||||
|
|
||||||
public int setStatus(Status status) {
|
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.
|
// Do not add this status on refresh, it's already in there.
|
||||||
statuses.set(statusIndex, status);
|
statuses.set(statusIndex, status);
|
||||||
return statusIndex;
|
return statusIndex;
|
||||||
|
|
|
@ -172,6 +172,4 @@ public class Status {
|
||||||
@SerializedName("username")
|
@SerializedName("username")
|
||||||
public String localUsername;
|
public String localUsername;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,25 @@ import android.widget.TextView;
|
||||||
import com.keylesspalace.tusky.entity.Status;
|
import com.keylesspalace.tusky.entity.Status;
|
||||||
import com.keylesspalace.tusky.interfaces.LinkListener;
|
import com.keylesspalace.tusky.interfaces.LinkListener;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
|
||||||
public class LinkHelper {
|
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,
|
public static void setClickableText(TextView view, Spanned content,
|
||||||
@Nullable Status.Mention[] mentions, boolean useCustomTabs,
|
@Nullable Status.Mention[] mentions, boolean useCustomTabs,
|
||||||
final LinkListener listener) {
|
final LinkListener listener) {
|
||||||
|
@ -49,11 +67,17 @@ public class LinkHelper {
|
||||||
builder.removeSpan(span);
|
builder.removeSpan(span);
|
||||||
builder.setSpan(newSpan, start, end, flags);
|
builder.setSpan(newSpan, start, end, flags);
|
||||||
} else if (text.charAt(0) == '@' && mentions != null) {
|
} 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;
|
String id = null;
|
||||||
for (Status.Mention mention : mentions) {
|
for (Status.Mention mention : mentions) {
|
||||||
if (mention.localUsername.equals(accountUsername)) {
|
if (mention.localUsername.equals(accountUsername)) {
|
||||||
id = mention.id;
|
id = mention.id;
|
||||||
|
if (mention.url.contains(getDomain(span.getURL()))) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (id != null) {
|
if (id != null) {
|
||||||
|
|
Loading…
Reference in a new issue