From 4f45eb2b440facfbf545d929d13fa33798ee977b Mon Sep 17 00:00:00 2001 From: Floens Date: Mon, 30 Mar 2015 19:26:01 +0200 Subject: [PATCH] Add pin and some other menu items to threadviewcontroller --- .../chan/core/presenter/ThreadPresenter.java | 20 +++++++ .../ui/controller/ViewThreadController.java | 60 ++++++++++++++++++- .../chan/ui/toolbar/ToolbarMenuItem.java | 8 +++ 3 files changed, 87 insertions(+), 1 deletion(-) diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java index bf78b6c1..6292fb71 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java +++ b/Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java @@ -28,8 +28,10 @@ import org.floens.chan.R; import org.floens.chan.chan.ChanUrls; import org.floens.chan.core.loader.ChanLoader; import org.floens.chan.core.loader.LoaderPool; +import org.floens.chan.core.manager.WatchManager; import org.floens.chan.core.model.ChanThread; import org.floens.chan.core.model.Loadable; +import org.floens.chan.core.model.Pin; import org.floens.chan.core.model.Post; import org.floens.chan.core.model.PostImage; import org.floens.chan.core.model.PostLinkable; @@ -81,6 +83,24 @@ public class ThreadPresenter implements ChanLoader.ChanLoaderCallback, PostAdapt chanLoader.requestData(); } + public boolean pin() { + if (chanLoader.getThread() != null) { + WatchManager wm = ChanApplication.getWatchManager(); + Pin pin = wm.findPinByLoadable(loadable); + if (pin == null) { + Post op = chanLoader.getThread().op; + wm.addPin(loadable, op); + } else { + wm.removePin(pin); + } + } + return isPinned(); + } + + public boolean isPinned() { + return ChanApplication.getWatchManager().findPinByLoadable(loadable) != null; + } + @Override public Loadable getLoadable() { return loadable; diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java index 8db6f9dd..6561c842 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java @@ -22,10 +22,24 @@ import android.content.Context; import android.content.DialogInterface; import org.floens.chan.R; +import org.floens.chan.chan.ChanUrls; import org.floens.chan.core.model.Loadable; import org.floens.chan.ui.layout.ThreadLayout; +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; -public class ViewThreadController extends ThreadController implements ThreadLayout.ThreadLayoutCallback { +import java.util.Arrays; + +public class ViewThreadController extends ThreadController implements ThreadLayout.ThreadLayoutCallback, ToolbarMenuItem.ToolbarMenuItemCallback { + private static final int POST_ID = 1; + private static final int PIN_ID = 2; + private static final int REFRESH_ID = 101; + private static final int SEARCH_ID = 102; + private static final int SHARE_ID = 103; + + private ToolbarMenuItem pinItem; private Loadable loadable; public ViewThreadController(Context context) { @@ -46,6 +60,17 @@ public class ViewThreadController extends ThreadController implements ThreadLayo threadLayout.getPresenter().requestData(); navigationItem.title = loadable.title; + navigationItem.menu = new ToolbarMenu(context); + + navigationItem.menu.addItem(new ToolbarMenuItem(context, this, POST_ID, R.drawable.ic_action_write)); + pinItem = navigationItem.menu.addItem(new ToolbarMenuItem(context, this, PIN_ID, R.drawable.ic_bookmark)); + navigationItem.createOverflow(context, this, Arrays.asList( + new FloatingMenuItem(REFRESH_ID, context.getString(R.string.action_reload)), + new FloatingMenuItem(SEARCH_ID, context.getString(R.string.action_search)), + new FloatingMenuItem(SHARE_ID, context.getString(R.string.action_share)) + )); + + setPinIconState(threadLayout.getPresenter().isPinned()); } @Override @@ -63,4 +88,37 @@ public class ViewThreadController extends ThreadController implements ThreadLayo .setMessage("/" + threadLoadable.board + "/" + threadLoadable.no) .show(); } + + @Override + public void onMenuItemClicked(ToolbarMenuItem item) { + switch (item.getId()) { + case PIN_ID: + setPinIconState(threadLayout.getPresenter().pin()); + break; + case POST_ID: + // TODO + break; + } + } + + @Override + public void onSubMenuItemClicked(ToolbarMenuItem parent, FloatingMenuItem item) { + switch ((Integer) item.getId()) { + case REFRESH_ID: + threadLayout.getPresenter().requestData(); + break; + case SEARCH_ID: + // TODO + break; + case SHARE_ID: + Loadable loadable = threadLayout.getPresenter().getLoadable(); + String link = ChanUrls.getThreadUrlDesktop(loadable.board, loadable.no); + AndroidUtils.shareLink(link); + break; + } + } + + private void setPinIconState(boolean pinned) { + pinItem.setImage(pinned ? R.drawable.ic_bookmark_filled : R.drawable.ic_bookmark); + } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarMenuItem.java b/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarMenuItem.java index 073a5435..dbfe18e1 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarMenuItem.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarMenuItem.java @@ -67,6 +67,14 @@ public class ToolbarMenuItem implements View.OnClickListener, FloatingMenu.Float } } + public void setImage(Drawable drawable) { + imageView.setImageDrawable(drawable); + } + + public void setImage(int drawable) { + imageView.setImageResource(drawable); + } + public void setSubMenu(FloatingMenu subMenu) { this.subMenu = subMenu; subMenu.setCallback(this);