Add pin and some other menu items to threadviewcontroller

filtering
Floens 10 years ago
parent 32a4955504
commit 4f45eb2b44
  1. 20
      Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java
  2. 60
      Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java
  3. 8
      Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarMenuItem.java

@ -28,8 +28,10 @@ import org.floens.chan.R;
import org.floens.chan.chan.ChanUrls; import org.floens.chan.chan.ChanUrls;
import org.floens.chan.core.loader.ChanLoader; import org.floens.chan.core.loader.ChanLoader;
import org.floens.chan.core.loader.LoaderPool; 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.ChanThread;
import org.floens.chan.core.model.Loadable; 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.Post;
import org.floens.chan.core.model.PostImage; import org.floens.chan.core.model.PostImage;
import org.floens.chan.core.model.PostLinkable; import org.floens.chan.core.model.PostLinkable;
@ -81,6 +83,24 @@ public class ThreadPresenter implements ChanLoader.ChanLoaderCallback, PostAdapt
chanLoader.requestData(); 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 @Override
public Loadable getLoadable() { public Loadable getLoadable() {
return loadable; return loadable;

@ -22,10 +22,24 @@ import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import org.floens.chan.R; import org.floens.chan.R;
import org.floens.chan.chan.ChanUrls;
import org.floens.chan.core.model.Loadable; import org.floens.chan.core.model.Loadable;
import org.floens.chan.ui.layout.ThreadLayout; 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; private Loadable loadable;
public ViewThreadController(Context context) { public ViewThreadController(Context context) {
@ -46,6 +60,17 @@ public class ViewThreadController extends ThreadController implements ThreadLayo
threadLayout.getPresenter().requestData(); threadLayout.getPresenter().requestData();
navigationItem.title = loadable.title; 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 @Override
@ -63,4 +88,37 @@ public class ViewThreadController extends ThreadController implements ThreadLayo
.setMessage("/" + threadLoadable.board + "/" + threadLoadable.no) .setMessage("/" + threadLoadable.board + "/" + threadLoadable.no)
.show(); .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);
}
} }

@ -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) { public void setSubMenu(FloatingMenu subMenu) {
this.subMenu = subMenu; this.subMenu = subMenu;
subMenu.setCallback(this); subMenu.setCallback(this);

Loading…
Cancel
Save