adapt basic search functions

This commit is contained in:
B. Petersen
2018-12-03 05:05:08 +01:00
parent 89355667c3
commit d89540d798
5 changed files with 46 additions and 56 deletions
@@ -16,7 +16,6 @@
*/
package org.thoughtcrime.securesms;
import android.Manifest;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
@@ -32,7 +31,6 @@ import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import org.thoughtcrime.securesms.components.SearchToolbar;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.qr.QrScanHandler;
import org.thoughtcrime.securesms.search.SearchFragment;
import org.thoughtcrime.securesms.util.DynamicLanguage;
@@ -182,7 +182,7 @@ public class ConversationListItem extends RelativeLayout
groupIndicator.setColorFilter(color);
}
public void bind(@NonNull Recipient contact,
public void bind(@NonNull DcContact contact,
@NonNull GlideRequests glideRequests,
@NonNull Locale locale,
@Nullable String highlightSubstring)
@@ -203,7 +203,7 @@ public class ConversationListItem extends RelativeLayout
contactPhotoImage.setAvatar(glideRequests, recipient, true);
}
public void bind(@NonNull MessageResult messageResult,
public void bind(@NonNull DcMsg messageResult,
@NonNull GlideRequests glideRequests,
@NonNull Locale locale,
@Nullable String highlightSubstring)
@@ -1,5 +1,6 @@
package org.thoughtcrime.securesms.search;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
@@ -8,10 +9,15 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.b44t.messenger.DcChat;
import com.b44t.messenger.DcContact;
import com.b44t.messenger.DcLot;
import com.b44t.messenger.DcMsg;
import org.thoughtcrime.securesms.ConversationListItem;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.connect.ApplicationDcContext;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.database.model.ThreadRecord;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.Recipient;
@@ -36,13 +42,17 @@ class SearchListAdapter extends RecyclerView.Adapter<SearchListAdapter.Search
@NonNull
private SearchResult searchResult = SearchResult.EMPTY;
SearchListAdapter(@NonNull GlideRequests glideRequests,
ApplicationDcContext dcContext;
SearchListAdapter(Context context,
@NonNull GlideRequests glideRequests,
@NonNull EventListener eventListener,
@NonNull Locale locale)
{
this.glideRequests = glideRequests;
this.eventListener = eventListener;
this.locale = locale;
this.dcContext = DcHelper.getContext(context);
}
@NonNull
@@ -54,21 +64,21 @@ class SearchListAdapter extends RecyclerView.Adapter<SearchListAdapter.Search
@Override
public void onBindViewHolder(@NonNull SearchResultViewHolder holder, int position) {
ThreadRecord conversationResult = getConversationResult(position);
DcChat conversationResult = getConversationResult(position);
if (conversationResult != null) {
holder.bind(conversationResult, 0, new DcLot(0), glideRequests, eventListener, locale, searchResult.getQuery());
return;
}
Recipient contactResult = getContactResult(position);
DcContact contactResult = getContactResult(position);
if (contactResult != null) {
holder.bind(contactResult, glideRequests, eventListener, locale, searchResult.getQuery());
return;
}
MessageResult messageResult = getMessageResult(position);
DcMsg messageResult = getMessageResult(position);
if (messageResult != null) {
holder.bind(messageResult, glideRequests, eventListener, locale, searchResult.getQuery());
@@ -113,41 +123,41 @@ class SearchListAdapter extends RecyclerView.Adapter<SearchListAdapter.Search
}
@Nullable
private ThreadRecord getConversationResult(int position) {
if (position < searchResult.getConversations().size()) {
return searchResult.getConversations().get(position);
private DcChat getConversationResult(int position) {
if (position < searchResult.getConversations().getCnt()) {
return dcContext.getChat(searchResult.getConversations().getChatId(position));
}
return null;
}
@Nullable
private Recipient getContactResult(int position) {
private DcContact getContactResult(int position) {
if (position >= getFirstContactIndex() && position < getFirstMessageIndex()) {
return searchResult.getContacts().get(position - getFirstContactIndex());
return dcContext.getContact(searchResult.getContacts()[position - getFirstContactIndex()]);
}
return null;
}
@Nullable
private MessageResult getMessageResult(int position) {
private DcMsg getMessageResult(int position) {
if (position >= getFirstMessageIndex() && position < searchResult.size()) {
return searchResult.getMessages().get(position - getFirstMessageIndex());
return dcContext.getMsg(searchResult.getMessages()[position - getFirstMessageIndex()]);
}
return null;
}
private int getFirstContactIndex() {
return searchResult.getConversations().size();
return searchResult.getConversations().getCnt();
}
private int getFirstMessageIndex() {
return getFirstContactIndex() + searchResult.getContacts().size();
return getFirstContactIndex() + searchResult.getContacts().length;
}
public interface EventListener {
void onConversationClicked(@NonNull ThreadRecord threadRecord);
void onContactClicked(@NonNull Recipient contact);
void onMessageClicked(@NonNull MessageResult message);
void onConversationClicked(@NonNull DcChat chat);
void onContactClicked(@NonNull DcContact contact);
void onMessageClicked(@NonNull DcMsg message);
}
static class SearchResultViewHolder extends RecyclerView.ViewHolder {
@@ -159,7 +169,7 @@ class SearchListAdapter extends RecyclerView.Adapter<SearchListAdapter.Search
root = (ConversationListItem) itemView;
}
void bind(@NonNull ThreadRecord conversationResult,
void bind(@NonNull DcChat conversationResult,
int msgId,
@NonNull DcLot summary,
@NonNull GlideRequests glideRequests,
@@ -171,7 +181,7 @@ class SearchListAdapter extends RecyclerView.Adapter<SearchListAdapter.Search
root.setOnClickListener(view -> eventListener.onConversationClicked(conversationResult));
}
void bind(@NonNull Recipient contactResult,
void bind(@NonNull DcContact contactResult,
@NonNull GlideRequests glideRequests,
@NonNull EventListener eventListener,
@NonNull Locale locale,
@@ -181,7 +191,7 @@ class SearchListAdapter extends RecyclerView.Adapter<SearchListAdapter.Search
root.setOnClickListener(view -> eventListener.onContactClicked(contactResult));
}
void bind(@NonNull MessageResult messageResult,
void bind(@NonNull DcMsg messageResult,
@NonNull GlideRequests glideRequests,
@NonNull EventListener eventListener,
@NonNull Locale locale,
@@ -1,6 +1,5 @@
package org.thoughtcrime.securesms.search;
import android.Manifest;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
@@ -19,7 +18,6 @@ import org.thoughtcrime.securesms.database.MmsSmsColumns;
import org.thoughtcrime.securesms.database.SearchDatabase;
import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.database.model.ThreadRecord;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.search.model.MessageResult;
import org.thoughtcrime.securesms.search.model.SearchResult;
@@ -4,6 +4,8 @@ import android.database.ContentObserver;
import android.database.DataSetObserver;
import android.support.annotation.NonNull;
import com.b44t.messenger.DcChatlist;
import org.thoughtcrime.securesms.database.CursorList;
import org.thoughtcrime.securesms.database.model.ThreadRecord;
import org.thoughtcrime.securesms.recipients.Recipient;
@@ -16,17 +18,17 @@ import java.util.List;
*/
public class SearchResult {
public static final SearchResult EMPTY = new SearchResult("", CursorList.emptyList(), CursorList.emptyList(), CursorList.emptyList());
public static final SearchResult EMPTY = new SearchResult("", new int[]{}, new DcChatlist(0), new int[]{});
private final String query;
private final CursorList<Recipient> contacts;
private final CursorList<ThreadRecord> conversations;
private final CursorList<MessageResult> messages;
private final String query;
private final int[] contacts;
private final DcChatlist conversations;
private final int[] messages;
public SearchResult(@NonNull String query,
@NonNull CursorList<Recipient> contacts,
@NonNull CursorList<ThreadRecord> conversations,
@NonNull CursorList<MessageResult> messages)
public SearchResult(@NonNull String query,
@NonNull int[] contacts,
@NonNull DcChatlist conversations,
@NonNull int[] messages)
{
this.query = query;
this.contacts = contacts;
@@ -34,15 +36,15 @@ public class SearchResult {
this.messages = messages;
}
public List<Recipient> getContacts() {
public int[] getContacts() {
return contacts;
}
public List<ThreadRecord> getConversations() {
public DcChatlist getConversations() {
return conversations;
}
public List<MessageResult> getMessages() {
public int[] getMessages() {
return messages;
}
@@ -51,28 +53,10 @@ public class SearchResult {
}
public int size() {
return contacts.size() + conversations.size() + messages.size();
return contacts.length + conversations.getCnt() + messages.length;
}
public boolean isEmpty() {
return size() == 0;
}
public void registerContentObserver(@NonNull ContentObserver observer) {
contacts.registerContentObserver(observer);
conversations.registerContentObserver(observer);
messages.registerContentObserver(observer);
}
public void unregisterContentObserver(@NonNull ContentObserver observer) {
contacts.unregisterContentObserver(observer);
conversations.unregisterContentObserver(observer);
messages.unregisterContentObserver(observer);
}
public void close() {
contacts.close();
conversations.close();
messages.close();
}
}