From 3896d73e431b2fe947a187baece2d76362d47397 Mon Sep 17 00:00:00 2001 From: jjbillings Date: Wed, 3 Aug 2016 21:04:17 -0400 Subject: [PATCH 1/3] Add guild search bar --- .../layout/fragment_guild_recyclerview.xml | 35 +++++++++++++++ Habitica/res/values/strings.xml | 1 + .../PublicGuildsRecyclerViewAdapter.java | 43 ++++++++++++++++++- .../social/PublicGuildsFragment.java | 21 ++++++++- 4 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 Habitica/res/layout/fragment_guild_recyclerview.xml diff --git a/Habitica/res/layout/fragment_guild_recyclerview.xml b/Habitica/res/layout/fragment_guild_recyclerview.xml new file mode 100644 index 000000000..2596c3177 --- /dev/null +++ b/Habitica/res/layout/fragment_guild_recyclerview.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 390d4b3b9..01c332fdb 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -243,6 +243,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..6677330e4 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 memberGuildIDs; + private List publicGuildListCopy; public void setPublicGuildList(List publicGuildList) { this.publicGuildList = publicGuildList; + this.publicGuildListCopy = new ArrayList<>(publicGuildList); this.notifyDataSetChanged(); } @@ -93,6 +98,42 @@ public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter filteredGuilds = null; + if(constraint.length() == 0) { + filteredGuilds = publicGuildListCopy; + } 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 constraint) { + List filteredGuilds = new ArrayList<>(); + + for(Group guild : publicGuildListCopy) { + if(guild.name.toLowerCase().contains(constraint)) { + filteredGuilds.add(guild); + } + } + + return filteredGuilds; + } static class GuildViewHolder extends RecyclerView.ViewHolder { 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..50a98adea 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 @@ -14,13 +14,14 @@ import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.SearchView; 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 +31,17 @@ 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); + + guildSearchView = (SearchView)view.findViewById(R.id.guild_search_view); + guildSearchView.setOnQueryTextListener(this); unbinder = ButterKnife.bind(this, view); recyclerView.setLayoutManager(new LinearLayoutManager(this.activity)); @@ -76,4 +81,16 @@ public class PublicGuildsFragment extends BaseMainFragment { }); } } + + @Override + public boolean onQueryTextSubmit(String s) { + viewAdapter.getFilter().filter(s); + return true; + } + + @Override + public boolean onQueryTextChange(String s) { + viewAdapter.getFilter().filter(s); + return true; + } } From b85a30de0acfbe380e3c2d646d4f6c120f88068e Mon Sep 17 00:00:00 2001 From: Jack Billings Date: Sun, 7 Aug 2016 19:30:40 -0500 Subject: [PATCH 2/3] Add guild search bar --- .../res/layout/fragment_guild_recyclerview.xml | 2 +- .../social/PublicGuildsRecyclerViewAdapter.java | 14 ++++++++------ .../ui/fragments/social/PublicGuildsFragment.java | 8 ++++---- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Habitica/res/layout/fragment_guild_recyclerview.xml b/Habitica/res/layout/fragment_guild_recyclerview.xml index 2596c3177..96ef26ad3 100644 --- a/Habitica/res/layout/fragment_guild_recyclerview.xml +++ b/Habitica/res/layout/fragment_guild_recyclerview.xml @@ -8,7 +8,7 @@ + android:queryHint="@string/guild_search_hint"/> publicGuildList; + private List fullPublicGuildList; private List memberGuildIDs; - private List publicGuildListCopy; public void setPublicGuildList(List publicGuildList) { this.publicGuildList = publicGuildList; - this.publicGuildListCopy = new ArrayList<>(publicGuildList); + this.fullPublicGuildList = new ArrayList<>(publicGuildList); this.notifyDataSetChanged(); } @@ -98,14 +98,16 @@ public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter filteredGuilds = null; + if(constraint.length() == 0) { - filteredGuilds = publicGuildListCopy; + filteredGuilds = fullPublicGuildList; } else { filteredGuilds = getFilteredResults(constraint.toString().toLowerCase()); } @@ -123,11 +125,11 @@ public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter getFilteredResults(String constraint) { + protected List getFilteredResults(String query) { List filteredGuilds = new ArrayList<>(); - for(Group guild : publicGuildListCopy) { - if(guild.name.toLowerCase().contains(constraint)) { + for(Group guild : fullPublicGuildList) { + if(guild.name.toLowerCase().contains(query)) { filteredGuilds.add(guild); } } 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 50a98adea..8004cc613 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 @@ -83,14 +83,14 @@ public class PublicGuildsFragment extends BaseMainFragment implements SearchView } @Override - public boolean onQueryTextSubmit(String s) { - viewAdapter.getFilter().filter(s); + public boolean onQueryTextSubmit(String query) { + viewAdapter.getFilter().filter(query); return true; } @Override - public boolean onQueryTextChange(String s) { - viewAdapter.getFilter().filter(s); + public boolean onQueryTextChange(String query) { + viewAdapter.getFilter().filter(query); return true; } } From 5abcc1bb7d3e2c6960a0d204f5a9065e34b7625a Mon Sep 17 00:00:00 2001 From: jjbillings Date: Sun, 14 Aug 2016 14:11:07 -0500 Subject: [PATCH 3/3] Move guild search bar to toolbar --- .../layout/fragment_guild_recyclerview.xml | 5 --- Habitica/res/menu/menu_public_guild.xml | 14 ++++++++ .../social/PublicGuildsFragment.java | 32 ++++++++++++++----- 3 files changed, 38 insertions(+), 13 deletions(-) create mode 100644 Habitica/res/menu/menu_public_guild.xml diff --git a/Habitica/res/layout/fragment_guild_recyclerview.xml b/Habitica/res/layout/fragment_guild_recyclerview.xml index 96ef26ad3..173286a5a 100644 --- a/Habitica/res/layout/fragment_guild_recyclerview.xml +++ b/Habitica/res/layout/fragment_guild_recyclerview.xml @@ -5,11 +5,6 @@ android:layout_width="fill_parent" android:orientation="vertical"> - - + + + + \ No newline at end of file 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 8004cc613..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,17 +4,22 @@ 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; -import android.widget.SearchView; import java.util.List; @@ -40,9 +45,6 @@ public class PublicGuildsFragment extends BaseMainFragment implements SearchView if (view == null) { view = inflater.inflate(R.layout.fragment_guild_recyclerview, container, false); - guildSearchView = (SearchView)view.findViewById(R.id.guild_search_view); - guildSearchView.setOnQueryTextListener(this); - unbinder = ButterKnife.bind(this, view); recyclerView.setLayoutManager(new LinearLayoutManager(this.activity)); recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST)); @@ -83,14 +85,28 @@ public class PublicGuildsFragment extends BaseMainFragment implements SearchView } @Override - public boolean onQueryTextSubmit(String query) { - viewAdapter.getFilter().filter(query); + 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 query) { - viewAdapter.getFilter().filter(query); + public boolean onQueryTextChange(String s) { + viewAdapter.getFilter().filter(s); return true; } }