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; + } }