From 161f1e3e8cdf01f032cadc63c0e786eb94ccfa9d Mon Sep 17 00:00:00 2001 From: Floens Date: Thu, 25 Jun 2015 19:51:43 +0200 Subject: [PATCH] Add sorting of boards A-Z --- .../ui/controller/BoardEditController.java | 44 ++++++++++++++++++- Clover/app/src/main/res/values/strings.xml | 1 + 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/BoardEditController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/BoardEditController.java index bccd68e8..ed256894 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/BoardEditController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/BoardEditController.java @@ -45,16 +45,22 @@ import org.floens.chan.core.manager.BoardManager; import org.floens.chan.core.model.Board; import org.floens.chan.ui.drawable.ThumbDrawable; import org.floens.chan.ui.helper.SwipeListener; +import org.floens.chan.ui.toolbar.ToolbarMenu; +import org.floens.chan.ui.toolbar.ToolbarMenuItem; +import org.floens.chan.ui.view.FloatingMenuItem; import org.floens.chan.utils.AndroidUtils; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Locale; import static org.floens.chan.utils.AndroidUtils.dp; import static org.floens.chan.utils.AndroidUtils.fixSnackbarText; -public class BoardEditController extends Controller implements SwipeListener.Callback, View.OnClickListener { +public class BoardEditController extends Controller implements SwipeListener.Callback, View.OnClickListener, ToolbarMenuItem.ToolbarMenuItemCallback { + private static final int OPTION_SORT_A_Z = 1; private final BoardManager boardManager = Chan.getBoardManager(); @@ -73,6 +79,12 @@ public class BoardEditController extends Controller implements SwipeListener.Cal super.onCreate(); navigationItem.title = string(R.string.board_edit); + + List items = new ArrayList<>(); + items.add(new FloatingMenuItem(OPTION_SORT_A_Z, R.string.board_edit_sort_a_z)); + navigationItem.menu = new ToolbarMenu(context); + navigationItem.createOverflow(context, this, items); + view = inflateRes(R.layout.controller_board_edit); recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view); recyclerView.setHasFixedSize(true); @@ -87,6 +99,23 @@ public class BoardEditController extends Controller implements SwipeListener.Cal new SwipeListener(context, recyclerView, this); } + @Override + public void onMenuItemClicked(ToolbarMenuItem item) { + } + + @Override + public void onSubMenuItemClicked(ToolbarMenuItem parent, FloatingMenuItem item) { + if (((Integer) item.getId()) == OPTION_SORT_A_Z) { + Collections.sort(boards, new Comparator() { + @Override + public int compare(Board lhs, Board rhs) { + return lhs.key.compareTo(rhs.key); + } + }); + adapter.notifyDataSetChanged(); + } + } + @Override public void onDestroy() { super.onDestroy(); @@ -343,6 +372,10 @@ public class BoardEditController extends Controller implements SwipeListener.Cal private int TYPE_ITEM = 0; private int TYPE_HEADER = 1; + public BoardEditAdapter() { + setHasStableIds(true); + } + @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_ITEM) { @@ -373,6 +406,15 @@ public class BoardEditController extends Controller implements SwipeListener.Cal public int getItemCount() { return boards.size() + 1; } + + @Override + public long getItemId(int position) { + if (getItemViewType(position) == TYPE_HEADER) { + return -1; + } else { + return boards.get(position - 1).id; + } + } } private class BoardEditItem extends RecyclerView.ViewHolder { diff --git a/Clover/app/src/main/res/values/strings.xml b/Clover/app/src/main/res/values/strings.xml index 34215898..6d8fcc99 100644 --- a/Clover/app/src/main/res/values/strings.xml +++ b/Clover/app/src/main/res/values/strings.xml @@ -113,6 +113,7 @@ along with this program. If not, see . Board already added Unknown board code The board with code %1$s is not known. + Sort A-Z Board Catalog