Fix l10n when searching for "Note to Self".

This commit is contained in:
Rashad Sookram 2022-01-26 16:23:12 -05:00 committed by Cody Henthorne
parent 33f4bb0000
commit 125ff83bac
8 changed files with 43 additions and 22 deletions

View file

@ -10,7 +10,6 @@ import android.text.TextUtils;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread; import androidx.annotation.WorkerThread;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.database.RecipientDatabase; import org.thoughtcrime.securesms.database.RecipientDatabase;
import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.SignalDatabase;
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter; import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter;
@ -101,9 +100,9 @@ public class ContactRepository {
})); }));
}}; }};
public ContactRepository(@NonNull Context context) { public ContactRepository(@NonNull Context context, @NonNull String noteToSelfTitle) {
this.recipientDatabase = SignalDatabase.recipients(); this.recipientDatabase = SignalDatabase.recipients();
this.noteToSelfTitle = context.getString(R.string.note_to_self); this.noteToSelfTitle = noteToSelfTitle;
this.context = context.getApplicationContext(); this.context = context.getApplicationContext();
} }

View file

@ -75,7 +75,7 @@ public class ContactsCursorLoader extends AbstractContactsCursorLoader {
this.mode = mode; this.mode = mode;
this.recents = recents; this.recents = recents;
this.contactRepository = new ContactRepository(context); this.contactRepository = new ContactRepository(context, context.getString(R.string.note_to_self));
} }
protected final List<Cursor> getUnfilteredResults() { protected final List<Cursor> getUnfilteredResults() {

View file

@ -2191,7 +2191,9 @@ public class ConversationParentFragment extends Fragment
} }
private void initializeSearchObserver() { private void initializeSearchObserver() {
searchViewModel = new ViewModelProvider(this).get(ConversationSearchViewModel.class); ConversationSearchViewModel.Factory viewModelFactory = new ConversationSearchViewModel.Factory(getString(R.string.note_to_self));
searchViewModel = new ViewModelProvider(this, viewModelFactory).get(ConversationSearchViewModel.class);
searchViewModel.getSearchResults().observe(getViewLifecycleOwner(), result -> { searchViewModel.getSearchResults().observe(getViewLifecycleOwner(), result -> {
if (result == null) return; if (result == null) return;

View file

@ -1,11 +1,10 @@
package org.thoughtcrime.securesms.conversation; package org.thoughtcrime.securesms.conversation;
import android.app.Application;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import org.signal.core.util.ThreadUtil; import org.signal.core.util.ThreadUtil;
import org.thoughtcrime.securesms.search.MessageResult; import org.thoughtcrime.securesms.search.MessageResult;
@ -15,7 +14,7 @@ import org.thoughtcrime.securesms.util.Debouncer;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
public class ConversationSearchViewModel extends AndroidViewModel { public class ConversationSearchViewModel extends ViewModel {
private final SearchRepository searchRepository; private final SearchRepository searchRepository;
private final MutableLiveData<SearchResult> result; private final MutableLiveData<SearchResult> result;
@ -26,11 +25,10 @@ public class ConversationSearchViewModel extends AndroidViewModel {
private String activeQuery; private String activeQuery;
private long activeThreadId; private long activeThreadId;
public ConversationSearchViewModel(@NonNull Application application) { public ConversationSearchViewModel(@NonNull String noteToSelfTitle) {
super(application);
result = new MutableLiveData<>(); result = new MutableLiveData<>();
debouncer = new Debouncer(500); debouncer = new Debouncer(500);
searchRepository = new SearchRepository(); searchRepository = new SearchRepository(noteToSelfTitle);
} }
LiveData<SearchResult> getSearchResults() { LiveData<SearchResult> getSearchResults() {
@ -128,4 +126,19 @@ public class ConversationSearchViewModel extends AndroidViewModel {
return position; return position;
} }
} }
public static class Factory extends ViewModelProvider.NewInstanceFactory {
private final String noteToSelfTitle;
public Factory(@NonNull String noteToSelfTitle) {
this.noteToSelfTitle = noteToSelfTitle;
}
@Override
public @NonNull <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
//noinspection ConstantConditions
return modelClass.cast(new ConversationSearchViewModel(noteToSelfTitle));
}
}
} }

View file

@ -673,7 +673,10 @@ public class ConversationListFragment extends MainFragment implements ActionMode
} }
private void initializeViewModel() { private void initializeViewModel() {
viewModel = new ViewModelProvider(this, new ConversationListViewModel.Factory(isArchived())).get(ConversationListViewModel.class); ConversationListViewModel.Factory viewModelFactory = new ConversationListViewModel.Factory(isArchived(),
getString(R.string.note_to_self));
viewModel = new ViewModelProvider(this, viewModelFactory).get(ConversationListViewModel.class);
viewModel.getSearchResult().observe(getViewLifecycleOwner(), this::onSearchResultChanged); viewModel.getSearchResult().observe(getViewLifecycleOwner(), this::onSearchResultChanged);
viewModel.getMegaphone().observe(getViewLifecycleOwner(), this::onMegaphoneChanged); viewModel.getMegaphone().observe(getViewLifecycleOwner(), this::onMegaphoneChanged);

View file

@ -290,15 +290,17 @@ class ConversationListViewModel extends ViewModel {
public static class Factory extends ViewModelProvider.NewInstanceFactory { public static class Factory extends ViewModelProvider.NewInstanceFactory {
private final boolean isArchived; private final boolean isArchived;
private final String noteToSelfTitle;
public Factory(boolean isArchived) { public Factory(boolean isArchived, @NonNull String noteToSelfTitle) {
this.isArchived = isArchived; this.isArchived = isArchived;
this.noteToSelfTitle = noteToSelfTitle;
} }
@Override @Override
public @NonNull <T extends ViewModel> T create(@NonNull Class<T> modelClass) { public @NonNull <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
//noinspection ConstantConditions //noinspection ConstantConditions
return modelClass.cast(new ConversationListViewModel(ApplicationDependencies.getApplication(), new SearchRepository(), isArchived)); return modelClass.cast(new ConversationListViewModel(ApplicationDependencies.getApplication(), new SearchRepository(noteToSelfTitle), isArchived));
} }
} }
} }

View file

@ -9,6 +9,7 @@ import androidx.annotation.WorkerThread;
import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.contacts.ContactRepository; import org.thoughtcrime.securesms.contacts.ContactRepository;
import org.thoughtcrime.securesms.database.GroupDatabase; import org.thoughtcrime.securesms.database.GroupDatabase;
import org.thoughtcrime.securesms.database.RecipientDatabase; import org.thoughtcrime.securesms.database.RecipientDatabase;
@ -48,7 +49,7 @@ class CameraContactsRepository {
this.threadDatabase = SignalDatabase.threads(); this.threadDatabase = SignalDatabase.threads();
this.groupDatabase = SignalDatabase.groups(); this.groupDatabase = SignalDatabase.groups();
this.recipientDatabase = SignalDatabase.recipients(); this.recipientDatabase = SignalDatabase.recipients();
this.contactRepository = new ContactRepository(context); this.contactRepository = new ContactRepository(context, context.getString(R.string.note_to_self));
this.serialExecutor = SignalExecutors.SERIAL; this.serialExecutor = SignalExecutors.SERIAL;
this.parallelExecutor = SignalExecutors.BOUNDED; this.parallelExecutor = SignalExecutors.BOUNDED;
} }

View file

@ -10,9 +10,9 @@ import androidx.annotation.Nullable;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import org.signal.core.util.concurrent.LatestPrioritizedSerialExecutor;
import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.contacts.ContactRepository; import org.thoughtcrime.securesms.contacts.ContactRepository;
import org.thoughtcrime.securesms.database.GroupDatabase; import org.thoughtcrime.securesms.database.GroupDatabase;
import org.thoughtcrime.securesms.database.MentionDatabase; import org.thoughtcrime.securesms.database.MentionDatabase;
@ -32,7 +32,6 @@ import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.CursorUtil; import org.thoughtcrime.securesms.util.CursorUtil;
import org.thoughtcrime.securesms.util.FtsUtil; import org.thoughtcrime.securesms.util.FtsUtil;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
import org.signal.core.util.concurrent.LatestPrioritizedSerialExecutor;
import org.thoughtcrime.securesms.util.concurrent.SerialExecutor; import org.thoughtcrime.securesms.util.concurrent.SerialExecutor;
import java.util.ArrayList; import java.util.ArrayList;
@ -56,6 +55,7 @@ public class SearchRepository {
private static final String TAG = Log.tag(SearchRepository.class); private static final String TAG = Log.tag(SearchRepository.class);
private final Context context; private final Context context;
private final String noteToSelfTitle;
private final SearchDatabase searchDatabase; private final SearchDatabase searchDatabase;
private final ContactRepository contactRepository; private final ContactRepository contactRepository;
private final ThreadDatabase threadDatabase; private final ThreadDatabase threadDatabase;
@ -66,14 +66,15 @@ public class SearchRepository {
private final LatestPrioritizedSerialExecutor searchExecutor; private final LatestPrioritizedSerialExecutor searchExecutor;
private final Executor serialExecutor; private final Executor serialExecutor;
public SearchRepository() { public SearchRepository(@NonNull String noteToSelfTitle) {
this.context = ApplicationDependencies.getApplication().getApplicationContext(); this.context = ApplicationDependencies.getApplication().getApplicationContext();
this.noteToSelfTitle = noteToSelfTitle;
this.searchDatabase = SignalDatabase.messageSearch(); this.searchDatabase = SignalDatabase.messageSearch();
this.threadDatabase = SignalDatabase.threads(); this.threadDatabase = SignalDatabase.threads();
this.recipientDatabase = SignalDatabase.recipients(); this.recipientDatabase = SignalDatabase.recipients();
this.mentionDatabase = SignalDatabase.mentions(); this.mentionDatabase = SignalDatabase.mentions();
this.mmsDatabase = SignalDatabase.mms(); this.mmsDatabase = SignalDatabase.mms();
this.contactRepository = new ContactRepository(context); this.contactRepository = new ContactRepository(context, noteToSelfTitle);
this.searchExecutor = new LatestPrioritizedSerialExecutor(SignalExecutors.BOUNDED); this.searchExecutor = new LatestPrioritizedSerialExecutor(SignalExecutors.BOUNDED);
this.serialExecutor = new SerialExecutor(SignalExecutors.BOUNDED); this.serialExecutor = new SerialExecutor(SignalExecutors.BOUNDED);
} }
@ -173,7 +174,7 @@ public class SearchRepository {
} }
} }
if (context.getString(R.string.note_to_self).toLowerCase().contains(query.toLowerCase())) { if (noteToSelfTitle.toLowerCase().contains(query.toLowerCase())) {
recipientIds.add(Recipient.self().getId()); recipientIds.add(Recipient.self().getId());
} }