diff --git a/Habitica/res/layout/fragment_guild_recyclerview.xml b/Habitica/res/layout/fragment_guild_recyclerview.xml
new file mode 100644
index 000000000..173286a5a
--- /dev/null
+++ b/Habitica/res/layout/fragment_guild_recyclerview.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/menu/menu_public_guild.xml b/Habitica/res/menu/menu_public_guild.xml
new file mode 100644
index 000000000..8a28dd72e
--- /dev/null
+++ b/Habitica/res/menu/menu_public_guild.xml
@@ -0,0 +1,14 @@
+
+
\ No newline at end of file
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 0aa13106f..bcf608831 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -254,6 +254,7 @@ To start, which parts of your life do you want to improve?
Privacy
Write Message
Post
+ Search for guilds
Due: %s
current streak: %d
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java
index 927526881..3fd9a2e9e 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java
@@ -13,21 +13,26 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
+import android.widget.Filter;
+import android.widget.Filterable;
import android.widget.TextView;
+import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
-public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter {
+public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter implements Filterable{
public APIHelper apiHelper;
private List publicGuildList;
+ private List fullPublicGuildList;
private List memberGuildIDs;
public void setPublicGuildList(List publicGuildList) {
this.publicGuildList = publicGuildList;
+ this.fullPublicGuildList = new ArrayList<>(publicGuildList);
this.notifyDataSetChanged();
}
@@ -94,6 +99,44 @@ public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter filteredGuilds = null;
+
+ if(constraint.length() == 0) {
+ filteredGuilds = fullPublicGuildList;
+ } else {
+ filteredGuilds = getFilteredResults(constraint.toString().toLowerCase());
+ }
+
+ FilterResults results = new FilterResults();
+ results.values = filteredGuilds;
+ return results;
+ }
+
+ @Override
+ protected void publishResults(CharSequence constraint, FilterResults results) {
+ publicGuildList = (List) results.values;
+ PublicGuildsRecyclerViewAdapter.this.notifyDataSetChanged();
+ }
+ };
+ }
+
+ protected List getFilteredResults(String query) {
+ List filteredGuilds = new ArrayList<>();
+
+ for(Group guild : fullPublicGuildList) {
+ if(guild.name.toLowerCase().contains(query)) {
+ filteredGuilds.add(guild);
+ }
+ }
+
+ return filteredGuilds;
+ }
+
static class GuildViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.nameTextView)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java
index e58de9d6a..71f0d6b95 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java
@@ -4,14 +4,20 @@ import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.ui.adapter.social.PublicGuildsRecyclerViewAdapter;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
+import com.habitrpg.android.habitica.ui.helpers.UiUtils;
import com.habitrpg.android.habitica.ui.menu.DividerItemDecoration;
import com.magicmicky.habitrpgwrapper.lib.models.Group;
import android.os.Bundle;
import android.support.annotation.Nullable;
+import android.support.v4.content.ContextCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.SearchView;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
@@ -20,7 +26,7 @@ import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
-public class PublicGuildsFragment extends BaseMainFragment {
+public class PublicGuildsFragment extends BaseMainFragment implements SearchView.OnQueryTextListener {
List memberGuildIDs;
List guilds;
@@ -30,13 +36,14 @@ public class PublicGuildsFragment extends BaseMainFragment {
private View view;
private PublicGuildsRecyclerViewAdapter viewAdapter;
+ private SearchView guildSearchView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
if (view == null) {
- view = inflater.inflate(R.layout.fragment_recyclerview, container, false);
+ view = inflater.inflate(R.layout.fragment_guild_recyclerview, container, false);
unbinder = ButterKnife.bind(this, view);
recyclerView.setLayoutManager(new LinearLayoutManager(this.activity));
@@ -76,4 +83,30 @@ public class PublicGuildsFragment extends BaseMainFragment {
});
}
}
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ inflater.inflate(R.menu.menu_public_guild, menu);
+
+ MenuItem searchItem = menu.findItem(R.id.action_guild_search);
+ guildSearchView = (SearchView)searchItem.getActionView();
+ SearchView.SearchAutoComplete theTextArea = (SearchView.SearchAutoComplete) guildSearchView.findViewById(R.id.search_src_text);
+ theTextArea.setHintTextColor(ContextCompat.getColor(this.activity,R.color.white));
+ guildSearchView.setQueryHint(getString(R.string.guild_search_hint));
+ guildSearchView.setOnQueryTextListener(this);
+
+ }
+
+ @Override
+ public boolean onQueryTextSubmit(String s) {
+ viewAdapter.getFilter().filter(s);
+ UiUtils.dismissKeyboard(this.activity);
+ return true;
+ }
+
+ @Override
+ public boolean onQueryTextChange(String s) {
+ viewAdapter.getFilter().filter(s);
+ return true;
+ }
}