mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-20 20:59:00 +00:00
Merge pull request #591 from jjbillings/guild-search-bar
Guild Search Bar - Issue #513
This commit is contained in:
commit
43a63794bc
5 changed files with 124 additions and 3 deletions
30
Habitica/res/layout/fragment_guild_recyclerview.xml
Normal file
30
Habitica/res/layout/fragment_guild_recyclerview.xml
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_width="fill_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<android.support.design.widget.CoordinatorLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/coordinatorLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
||||
<com.habitrpg.android.habitica.ui.helpers.RecyclerViewEmptySupport
|
||||
android:id="@+id/recyclerView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scrollbarSize="3dp"
|
||||
android:scrollbarThumbVertical="@color/md_grey_500"
|
||||
android:scrollbars="vertical" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/empty_view"
|
||||
style="@style/EmptyView"/>
|
||||
|
||||
</android.support.design.widget.CoordinatorLayout>
|
||||
</LinearLayout>
|
||||
14
Habitica/res/menu/menu_public_guild.xml
Normal file
14
Habitica/res/menu/menu_public_guild.xml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:context="com.habitrpg.android.habitica.ui.activities.MainActivity">
|
||||
|
||||
<item
|
||||
android:id="@+id/action_guild_search"
|
||||
android:title="@string/guild_search_hint"
|
||||
android:orderInCategory="103"
|
||||
android:visible="true"
|
||||
app:showAsAction="always"
|
||||
app:actionViewClass="android.support.v7.widget.SearchView"/>
|
||||
</menu>
|
||||
|
|
@ -254,6 +254,7 @@ To start, which parts of your life do you want to improve?</string>
|
|||
<string name="privacy">Privacy</string>
|
||||
<string name="write_message">Write Message</string>
|
||||
<string name="post">Post</string>
|
||||
<string name="guild_search_hint">Search for guilds</string>
|
||||
|
||||
<string name="todo_due" formatted="false">Due: %s</string>
|
||||
<string name="daily_streak" formatted="false">current streak: %d</string>
|
||||
|
|
|
|||
|
|
@ -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<PublicGuildsRecyclerViewAdapter.GuildViewHolder> {
|
||||
public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter<PublicGuildsRecyclerViewAdapter.GuildViewHolder> implements Filterable{
|
||||
|
||||
public APIHelper apiHelper;
|
||||
private List<Group> publicGuildList;
|
||||
private List<Group> fullPublicGuildList;
|
||||
private List<String> memberGuildIDs;
|
||||
|
||||
public void setPublicGuildList(List<Group> publicGuildList) {
|
||||
this.publicGuildList = publicGuildList;
|
||||
this.fullPublicGuildList = new ArrayList<>(publicGuildList);
|
||||
this.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
|
|
@ -94,6 +99,44 @@ public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter<Public
|
|||
return this.memberGuildIDs != null && this.memberGuildIDs.contains(guild.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Filter getFilter() {
|
||||
return new Filter() {
|
||||
@Override
|
||||
protected FilterResults performFiltering(CharSequence constraint) {
|
||||
List<Group> 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<Group>) results.values;
|
||||
PublicGuildsRecyclerViewAdapter.this.notifyDataSetChanged();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
protected List<Group> getFilteredResults(String query) {
|
||||
List<Group> 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)
|
||||
|
|
|
|||
|
|
@ -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<String> memberGuildIDs;
|
||||
List<Group> 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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue