summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas <tschneider.ac@gmail.com>2023-01-11 18:07:54 +0100
committerThomas <tschneider.ac@gmail.com>2023-01-11 18:07:54 +0100
commit316e750004468ce2013b039182c60b978df34e9b (patch)
tree8b7e374c92396e9c2d650587fc756975b5dd86c0
parentedc4f1357ec344dbb173b3f53cbe08e3578f7d06 (diff)
Apply suggestion is search tab activity
-rw-r--r--app/src/main/java/app/fedilab/android/activities/SearchResultTabActivity.java87
1 files changed, 87 insertions, 0 deletions
diff --git a/app/src/main/java/app/fedilab/android/activities/SearchResultTabActivity.java b/app/src/main/java/app/fedilab/android/activities/SearchResultTabActivity.java
index 1fe2cf446..0f9c732a7 100644
--- a/app/src/main/java/app/fedilab/android/activities/SearchResultTabActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/SearchResultTabActivity.java
@@ -16,7 +16,9 @@ package app.fedilab.android.activities;
import android.app.SearchManager;
import android.content.Context;
+import android.database.MatrixCursor;
import android.os.Bundle;
+import android.provider.BaseColumns;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -26,22 +28,38 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.SearchView;
+import androidx.cursoradapter.widget.CursorAdapter;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
+import androidx.lifecycle.ViewModelProvider;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.FutureTarget;
+import com.bumptech.glide.request.target.Target;
import com.google.android.material.tabs.TabLayout;
import org.jetbrains.annotations.NotNull;
+import java.io.File;
+import java.util.concurrent.ExecutionException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import app.fedilab.android.BaseMainActivity;
import app.fedilab.android.R;
+import app.fedilab.android.client.entities.api.Tag;
import app.fedilab.android.databinding.ActivitySearchResultTabsBinding;
import app.fedilab.android.helper.Helper;
+import app.fedilab.android.ui.drawer.AccountsSearchTopBarAdapter;
+import app.fedilab.android.ui.drawer.TagSearchTopBarAdapter;
import app.fedilab.android.ui.fragment.timeline.FragmentMastodonAccount;
import app.fedilab.android.ui.fragment.timeline.FragmentMastodonTag;
import app.fedilab.android.ui.fragment.timeline.FragmentMastodonTimeline;
+import app.fedilab.android.viewmodel.mastodon.AccountsVM;
+import app.fedilab.android.viewmodel.mastodon.SearchVM;
import es.dmoral.toasty.Toasty;
@@ -140,6 +158,75 @@ public class SearchResultTabActivity extends BaseBarActivity {
@Override
public boolean onQueryTextChange(String newText) {
+ String pattern = "^(@[\\w_-]+@[a-z0-9.\\-]+|@[\\w_-]+)";
+ final Pattern mentionPattern = Pattern.compile(pattern);
+ String patternTag = "^#([\\w-]{2,})$";
+ final Pattern tagPattern = Pattern.compile(patternTag);
+ Matcher matcherMention, matcherTag;
+ matcherMention = mentionPattern.matcher(newText);
+ matcherTag = tagPattern.matcher(newText);
+ if (newText.trim().isEmpty()) {
+ searchView.setSuggestionsAdapter(null);
+ }
+ if (matcherMention.matches()) {
+ String[] from = new String[]{SearchManager.SUGGEST_COLUMN_ICON_1, SearchManager.SUGGEST_COLUMN_TEXT_1};
+ int[] to = new int[]{R.id.account_pp, R.id.account_un};
+ String searchGroup = matcherMention.group();
+ AccountsVM accountsVM = new ViewModelProvider(SearchResultTabActivity.this).get(AccountsVM.class);
+ MatrixCursor cursor = new MatrixCursor(new String[]{BaseColumns._ID,
+ SearchManager.SUGGEST_COLUMN_ICON_1,
+ SearchManager.SUGGEST_COLUMN_TEXT_1});
+ accountsVM.searchAccounts(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, searchGroup, 5, false, false)
+ .observe(SearchResultTabActivity.this, accounts -> {
+ if (accounts == null) {
+ return;
+ }
+ AccountsSearchTopBarAdapter cursorAdapter = new AccountsSearchTopBarAdapter(SearchResultTabActivity.this, accounts, R.layout.drawer_account_search, null, from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
+ searchView.setSuggestionsAdapter(cursorAdapter);
+ new Thread(() -> {
+ int i = 0;
+ for (app.fedilab.android.client.entities.api.Account account : accounts) {
+ FutureTarget<File> futureTarget = Glide
+ .with(SearchResultTabActivity.this.getApplicationContext())
+ .load(account.avatar_static)
+ .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);
+ File cacheFile;
+ try {
+ cacheFile = futureTarget.get();
+ cursor.addRow(new String[]{String.valueOf(i), cacheFile.getAbsolutePath(), "@" + account.acct});
+ i++;
+ } catch (ExecutionException | InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ runOnUiThread(() -> cursorAdapter.changeCursor(cursor));
+ }).start();
+
+ });
+ } else if (matcherTag.matches()) {
+ SearchVM searchVM = new ViewModelProvider(SearchResultTabActivity.this).get(SearchVM.class);
+ String[] from = new String[]{SearchManager.SUGGEST_COLUMN_TEXT_1};
+ int[] to = new int[]{R.id.tag_name};
+ String searchGroup = matcherTag.group();
+ MatrixCursor cursor = new MatrixCursor(new String[]{BaseColumns._ID,
+ SearchManager.SUGGEST_COLUMN_TEXT_1});
+ searchVM.search(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, searchGroup, null,
+ "hashtags", false, true, false, 0,
+ null, null, 10).observe(SearchResultTabActivity.this,
+ results -> {
+ if (results == null || results.hashtags == null) {
+ return;
+ }
+ TagSearchTopBarAdapter cursorAdapter = new TagSearchTopBarAdapter(SearchResultTabActivity.this, results.hashtags, R.layout.drawer_tag_search, null, from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
+ searchView.setSuggestionsAdapter(cursorAdapter);
+ int i = 0;
+ for (Tag tag : results.hashtags) {
+ cursor.addRow(new String[]{String.valueOf(i), "#" + tag.name});
+ i++;
+ }
+ runOnUiThread(() -> cursorAdapter.changeCursor(cursor));
+ });
+ }
return false;
}
});