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.
main
Vavassor 8 years ago
parent c39c61e118
commit 5f045ca5c3
  1. 1
      app/src/main/java/com/keylesspalace/tusky/SearchActivity.java
  2. 2
      app/src/main/java/com/keylesspalace/tusky/adapter/StatusViewHolder.java
  3. 4
      app/src/main/java/com/keylesspalace/tusky/adapter/ThreadAdapter.java
  4. 2
      app/src/main/java/com/keylesspalace/tusky/entity/Status.java
  5. 26
      app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.java

@ -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…
Cancel
Save