diff --git a/Clover/app/src/main/java/org/floens/chan/controller/Controller.java b/Clover/app/src/main/java/org/floens/chan/controller/Controller.java index 3abdf6bf..ca8400d5 100644 --- a/Clover/app/src/main/java/org/floens/chan/controller/Controller.java +++ b/Clover/app/src/main/java/org/floens/chan/controller/Controller.java @@ -20,10 +20,9 @@ package org.floens.chan.controller; import android.content.Context; import android.content.res.Configuration; import android.view.LayoutInflater; -import android.view.View; import android.view.ViewGroup; -import org.floens.chan.ui.activity.BoardActivity; +import org.floens.chan.ui.activity.StartActivity; import org.floens.chan.ui.toolbar.NavigationItem; import org.floens.chan.utils.Logger; @@ -31,7 +30,7 @@ public abstract class Controller { private static final boolean LOG_STATES = false; public Context context; - public View view; + public ViewGroup view; public NavigationItem navigationItem = new NavigationItem(); @@ -93,7 +92,7 @@ public abstract class Controller { } public void presentController(Controller controller, boolean animated) { - ViewGroup contentView = ((BoardActivity) context).getContentView(); + ViewGroup contentView = ((StartActivity) context).getContentView(); presentedController = controller; controller.presentingController = this; @@ -109,7 +108,7 @@ public abstract class Controller { } else { ControllerLogic.transition(null, controller, true, contentView); } - ((BoardActivity) context).addController(controller); + ((StartActivity) context).addController(controller); } public void stopPresenting() { @@ -117,7 +116,7 @@ public abstract class Controller { } public void stopPresenting(boolean animated) { - ViewGroup contentView = ((BoardActivity) context).getContentView(); + ViewGroup contentView = ((StartActivity) context).getContentView(); if (animated) { ControllerTransition transition = new FadeOutTransition(); @@ -131,12 +130,12 @@ public abstract class Controller { } else { ControllerLogic.transition(this, null, false, contentView); } - ((BoardActivity) context).removeController(this); + ((StartActivity) context).removeController(this); presentingController.presentedController = null; } - public View inflateRes(int resId) { - return LayoutInflater.from(context).inflate(resId, null); + public ViewGroup inflateRes(int resId) { + return (ViewGroup) LayoutInflater.from(context).inflate(resId, null); } public String string(int id) { diff --git a/Clover/app/src/main/java/org/floens/chan/controller/ControllerLogic.java b/Clover/app/src/main/java/org/floens/chan/controller/ControllerLogic.java index 0937b78a..e50d4e79 100644 --- a/Clover/app/src/main/java/org/floens/chan/controller/ControllerLogic.java +++ b/Clover/app/src/main/java/org/floens/chan/controller/ControllerLogic.java @@ -46,8 +46,12 @@ public class ControllerLogic { } public static void transition(Controller from, Controller to, boolean pushing, ViewGroup toView) { + transition(from, to, pushing, !pushing, toView); + } + + public static void transition(Controller from, Controller to, boolean createTo, boolean destroyFrom, ViewGroup toView) { if (to != null) { - if (pushing) { + if (createTo) { to.onCreate(); } @@ -59,7 +63,7 @@ public class ControllerLogic { from.onHide(); detach(from); - if (!pushing) { + if (destroyFrom) { from.onDestroy(); } } diff --git a/Clover/app/src/main/java/org/floens/chan/controller/NavigationController.java b/Clover/app/src/main/java/org/floens/chan/controller/NavigationController.java index a9819752..68024e54 100644 --- a/Clover/app/src/main/java/org/floens/chan/controller/NavigationController.java +++ b/Clover/app/src/main/java/org/floens/chan/controller/NavigationController.java @@ -19,6 +19,7 @@ package org.floens.chan.controller; import android.content.Context; import android.content.res.Configuration; +import android.view.ViewGroup; import android.widget.FrameLayout; import org.floens.chan.ui.toolbar.Toolbar; @@ -28,7 +29,7 @@ import java.util.List; public abstract class NavigationController extends Controller implements Toolbar.ToolbarCallback, ControllerTransition.Callback { protected Toolbar toolbar; - protected FrameLayout container; + protected ViewGroup container; protected List controllerList = new ArrayList<>(); protected ControllerTransition controllerTransition; @@ -69,9 +70,6 @@ public abstract class NavigationController extends Controller implements Toolbar return true; } - protected void controllerPushed(Controller controller) { - } - public boolean popController() { return popController(true); } @@ -91,9 +89,6 @@ public abstract class NavigationController extends Controller implements Toolbar return true; } - protected void controllerPopped(Controller controller) { - } - public void transition(Controller from, Controller to, boolean pushing, ControllerTransition controllerTransition) { if (this.controllerTransition != null) { throw new IllegalArgumentException("Cannot transition while another transition is in progress."); @@ -108,20 +103,18 @@ public abstract class NavigationController extends Controller implements Toolbar this.controllerTransition = controllerTransition; controllerTransition.setCallback(this); ControllerLogic.startTransition(from, to, pushing, container, controllerTransition); - if (to != null) { - toolbar.setNavigationItem(true, false, to.navigationItem); - } } else { ControllerLogic.transition(from, to, pushing, container); - if (to != null) { - toolbar.setNavigationItem(false, false, to.navigationItem); - } if (!pushing) { controllerList.remove(from); } } if (to != null) { + if (toolbar != null) { + toolbar.setNavigationItem(controllerTransition != null, pushing, to.navigationItem); + } + updateToolbarCollapse(to, controllerTransition != null); if (pushing) { @@ -132,6 +125,12 @@ public abstract class NavigationController extends Controller implements Toolbar } } + protected void controllerPushed(Controller controller) { + } + + protected void controllerPopped(Controller controller) { + } + @Override public void onControllerTransitionCompleted(ControllerTransition transition) { ControllerLogic.finishTransition(transition); @@ -166,7 +165,7 @@ public abstract class NavigationController extends Controller implements Toolbar public boolean onBack() { if (blockingInput) return true; - if (toolbar.closeSearch()) { + if (toolbar != null && toolbar.closeSearch()) { return true; } @@ -199,7 +198,9 @@ public abstract class NavigationController extends Controller implements Toolbar } public void showSearch() { - toolbar.openSearch(); + if (toolbar != null) { + toolbar.openSearch(); + } } @Override @@ -224,13 +225,15 @@ public abstract class NavigationController extends Controller implements Toolbar public void onSearchEntered(String entered) { } - private void updateToolbarCollapse(Controller controller, boolean animate) { - if (!controller.navigationItem.collapseToolbar) { - FrameLayout.LayoutParams toViewParams = (FrameLayout.LayoutParams) controller.view.getLayoutParams(); - toViewParams.topMargin = toolbar.getToolbarHeight(); - controller.view.setLayoutParams(toViewParams); - } + protected void updateToolbarCollapse(Controller controller, boolean animate) { + if (toolbar != null) { + if (!controller.navigationItem.collapseToolbar) { + FrameLayout.LayoutParams toViewParams = (FrameLayout.LayoutParams) controller.view.getLayoutParams(); + toViewParams.topMargin = toolbar.getToolbarHeight(); + controller.view.setLayoutParams(toViewParams); + } - toolbar.processScrollCollapse(Toolbar.TOOLBAR_COLLAPSE_SHOW, animate); + toolbar.processScrollCollapse(Toolbar.TOOLBAR_COLLAPSE_SHOW, animate); + } } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java index 7fec9f15..2137a965 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java @@ -33,13 +33,15 @@ import org.floens.chan.Chan; import org.floens.chan.R; import org.floens.chan.chan.ChanHelper; import org.floens.chan.controller.Controller; +import org.floens.chan.controller.NavigationController; import org.floens.chan.core.manager.BoardManager; import org.floens.chan.core.model.Board; import org.floens.chan.core.model.Loadable; import org.floens.chan.core.model.Pin; import org.floens.chan.core.settings.ChanSettings; import org.floens.chan.ui.controller.BrowseController; -import org.floens.chan.ui.controller.RootNavigationController; +import org.floens.chan.ui.controller.DrawerNavigationController; +import org.floens.chan.ui.controller.SplitNavigationController; import org.floens.chan.ui.controller.ViewThreadController; import org.floens.chan.ui.helper.ImagePickDelegate; import org.floens.chan.ui.state.ChanState; @@ -59,7 +61,7 @@ public class StartActivity extends AppCompatActivity implements NfcAdapter.Creat private List stack = new ArrayList<>(); private final BoardManager boardManager; - private RootNavigationController rootNavigationController; + private NavigationController navigationController; private BrowseController browseController; private ImagePickDelegate imagePickDelegate; @@ -78,16 +80,28 @@ public class StartActivity extends AppCompatActivity implements NfcAdapter.Creat contentView = (ViewGroup) findViewById(android.R.id.content); - rootNavigationController = new RootNavigationController(this); - rootNavigationController.onCreate(); + NavigationController mainThreadController; + if (AndroidUtils.isTablet(this)) { + SplitNavigationController splitNavigationController = new SplitNavigationController(this); + splitNavigationController.onCreate(); + splitNavigationController.onShow(); + DrawerNavigationController leftController = new DrawerNavigationController(this); + splitNavigationController.setLeftController(leftController); - setContentView(rootNavigationController.view); - addController(rootNavigationController); + navigationController = splitNavigationController; + mainThreadController = leftController; + } else { + navigationController = new DrawerNavigationController(this); + navigationController.onCreate(); + mainThreadController = navigationController; + } - browseController = new BrowseController(this); - rootNavigationController.pushController(browseController, false); + setContentView(navigationController.view); + addController(navigationController); - rootNavigationController.onShow(); + browseController = new BrowseController(this); + mainThreadController.pushController(browseController, false); + mainThreadController.onShow(); // Prevent overdraw // Do this after setContentView, or the decor creating will reset the background to a default non-null drawable @@ -157,9 +171,9 @@ public class StartActivity extends AppCompatActivity implements NfcAdapter.Creat // Handle WatchNotifier clicks if (intent.getExtras() != null) { int pinId = intent.getExtras().getInt("pin_id", -2); - if (pinId != -2 && rootNavigationController.getTop() instanceof BrowseController) { + if (pinId != -2 && navigationController.getTop() instanceof BrowseController) { if (pinId == -1) { - rootNavigationController.onMenuClicked(); + navigationController.onMenuClicked(); } else { Pin pin = Chan.getWatchManager().findPinById(pinId); if (pin != null) { @@ -179,7 +193,7 @@ public class StartActivity extends AppCompatActivity implements NfcAdapter.Creat Logger.w(TAG, "Can not save instance state, the board loadable is null"); } else { Loadable thread = null; - List controllers = rootNavigationController.getControllerList(); + List controllers = navigationController.getControllerList(); for (Controller controller : controllers) { if (controller instanceof ViewThreadController) { thread = ((ViewThreadController) controller).getLoadable(); @@ -198,7 +212,7 @@ public class StartActivity extends AppCompatActivity implements NfcAdapter.Creat @Override public NdefMessage createNdefMessage(NfcEvent event) { - Controller controller = rootNavigationController.getTop(); + Controller controller = navigationController.getTop(); if (controller instanceof NfcAdapter.CreateNdefMessageCallback) { return ((NfcAdapter.CreateNdefMessageCallback) controller).createNdefMessage(event); } else { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java index 4363e162..085e5349 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java @@ -29,6 +29,7 @@ import android.widget.TextView; import org.floens.chan.Chan; import org.floens.chan.R; import org.floens.chan.chan.ChanUrls; +import org.floens.chan.controller.Controller; import org.floens.chan.core.manager.BoardManager; import org.floens.chan.core.model.Board; import org.floens.chan.core.model.Loadable; @@ -217,9 +218,22 @@ public class BrowseController extends ThreadController implements ToolbarMenuIte } public void showThread(Loadable threadLoadable, boolean animated) { - ViewThreadController viewThreadController = new ViewThreadController(context); - viewThreadController.setLoadable(threadLoadable); - navigationController.pushController(viewThreadController, animated); + if (navigationController.navigationController instanceof SplitNavigationController) { + SplitNavigationController splitNavigationController = (SplitNavigationController) navigationController.navigationController; + + Controller controller = splitNavigationController.rightController; + if (controller instanceof ViewThreadController) { + ((ViewThreadController) controller).loadLoadable(threadLoadable); + } else { + ViewThreadController viewThreadController = new ViewThreadController(context); + viewThreadController.setLoadable(threadLoadable); + splitNavigationController.setRightController(viewThreadController); + } + } else { + ViewThreadController viewThreadController = new ViewThreadController(context); + viewThreadController.setLoadable(threadLoadable); + navigationController.pushController(viewThreadController, animated); + } } public void onEvent(BoardManager.BoardsChangedMessage event) { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/RootNavigationController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/DrawerNavigationController.java similarity index 95% rename from Clover/app/src/main/java/org/floens/chan/ui/controller/RootNavigationController.java rename to Clover/app/src/main/java/org/floens/chan/ui/controller/DrawerNavigationController.java index 8256fa14..1a8853a1 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/RootNavigationController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/DrawerNavigationController.java @@ -27,8 +27,8 @@ import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.Gravity; import android.view.View; +import android.view.ViewGroup; import android.widget.EditText; -import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; @@ -55,16 +55,16 @@ import static org.floens.chan.utils.AndroidUtils.ROBOTO_MEDIUM; import static org.floens.chan.utils.AndroidUtils.dp; import static org.floens.chan.utils.AndroidUtils.fixSnackbarText; -public class RootNavigationController extends NavigationController implements PinAdapter.Callback, View.OnClickListener { +public class DrawerNavigationController extends NavigationController implements PinAdapter.Callback, View.OnClickListener { private WatchManager watchManager; - public DrawerLayout drawerLayout; - public LinearLayout drawer; - private RecyclerView recyclerView; - private LinearLayout settings; - private PinAdapter pinAdapter; + protected DrawerLayout drawerLayout; + protected LinearLayout drawer; + protected RecyclerView recyclerView; + protected LinearLayout settings; + protected PinAdapter pinAdapter; - public RootNavigationController(Context context) { + public DrawerNavigationController(Context context) { super(context); } @@ -77,8 +77,8 @@ public class RootNavigationController extends NavigationController implements Pi EventBus.getDefault().register(this); view = inflateRes(R.layout.controller_navigation_drawer); + container = (ViewGroup) view.findViewById(R.id.container); toolbar = (Toolbar) view.findViewById(R.id.toolbar); - container = (FrameLayout) view.findViewById(R.id.container); drawerLayout = (DrawerLayout) view.findViewById(R.id.drawer_layout); drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, Gravity.LEFT); drawer = (LinearLayout) view.findViewById(R.id.drawer); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/FiltersController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/FiltersController.java index ffcba0d0..acff3c22 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/FiltersController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/FiltersController.java @@ -50,7 +50,7 @@ import static org.floens.chan.ui.theme.ThemeHelper.theme; import static org.floens.chan.utils.AndroidUtils.getAttrColor; import static org.floens.chan.utils.AndroidUtils.getString; -public class FiltersController extends Controller implements ToolbarMenuItem.ToolbarMenuItemCallback, RootNavigationController.ToolbarSearchCallback, View.OnClickListener { +public class FiltersController extends Controller implements ToolbarMenuItem.ToolbarMenuItemCallback, DrawerNavigationController.ToolbarSearchCallback, View.OnClickListener { private static final int SEARCH_ID = 1; private static final int CLEAR_ID = 101; diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/HistoryController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/HistoryController.java index 030b9565..7c245f2c 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/HistoryController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/HistoryController.java @@ -50,7 +50,7 @@ import java.util.Locale; import static org.floens.chan.ui.theme.ThemeHelper.theme; import static org.floens.chan.utils.AndroidUtils.dp; -public class HistoryController extends Controller implements CompoundButton.OnCheckedChangeListener, ToolbarMenuItem.ToolbarMenuItemCallback, RootNavigationController.ToolbarSearchCallback { +public class HistoryController extends Controller implements CompoundButton.OnCheckedChangeListener, ToolbarMenuItem.ToolbarMenuItemCallback, DrawerNavigationController.ToolbarSearchCallback { private static final int SEARCH_ID = 1; private static final int CLEAR_ID = 101; diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/SplitNavigationController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/SplitNavigationController.java new file mode 100644 index 00000000..c4c32eb7 --- /dev/null +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/SplitNavigationController.java @@ -0,0 +1,146 @@ +/* + * Clover - 4chan browser https://github.com/Floens/Clover/ + * Copyright (C) 2014 Floens + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.floens.chan.ui.controller; + +import android.content.Context; +import android.content.res.Configuration; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.LinearLayout; + +import org.floens.chan.R; +import org.floens.chan.controller.Controller; +import org.floens.chan.controller.ControllerLogic; +import org.floens.chan.controller.ControllerTransition; +import org.floens.chan.controller.NavigationController; +import org.floens.chan.utils.AndroidUtils; + +import static org.floens.chan.utils.AndroidUtils.dp; +import static org.floens.chan.utils.AndroidUtils.getAttrColor; + +public class SplitNavigationController extends NavigationController implements AndroidUtils.OnMeasuredCallback { + public Controller leftController; + public Controller rightController; + + private FrameLayout leftControllerView; + private FrameLayout rightControllerView; + private View dividerView; + + public SplitNavigationController(Context context) { + super(context); + } + + @Override + public void onCreate() { + super.onCreate(); + + LinearLayout wrap = new LinearLayout(context); + view = wrap; + + leftControllerView = new FrameLayout(context); + wrap.addView(leftControllerView, new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT)); + + dividerView = new View(context); + dividerView.setBackgroundColor(getAttrColor(context, R.attr.divider_split_color)); + wrap.addView(dividerView, new LinearLayout.LayoutParams(dp(1), LinearLayout.LayoutParams.MATCH_PARENT)); + + rightControllerView = new FrameLayout(context); + wrap.addView(rightControllerView, new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1f)); + + AndroidUtils.waitForMeasure(view, this); + } + + public void setLeftController(Controller leftController) { + leftController.navigationController = this; + ControllerLogic.transition(this.leftController, leftController, true, true, leftControllerView); + this.leftController = leftController; + } + + public void setRightController(Controller rightController) { + rightController.navigationController = this; + ControllerLogic.transition(this.rightController, rightController, true, true, rightControllerView); + this.rightController = rightController; + } + + @Override + public void transition(Controller from, Controller to, boolean pushing, ControllerTransition controllerTransition) { + if (this.controllerTransition != null) { + throw new IllegalArgumentException("Cannot transition while another transition is in progress."); + } + + if (!pushing && controllerList.size() == 0) { + throw new IllegalArgumentException("Cannot pop with no controllers left"); + } + + if (controllerTransition != null) { + blockingInput = true; + this.controllerTransition = controllerTransition; + controllerTransition.setCallback(this); + ControllerLogic.startTransition(from, to, pushing, leftControllerView, controllerTransition); + } else { + ControllerLogic.transition(from, to, pushing, leftControllerView); + if (!pushing) { + controllerList.remove(from); + } + } + + if (to != null) { + toolbar.setNavigationItem(controllerTransition != null, false, to.navigationItem); + + updateToolbarCollapse(to, controllerTransition != null); + + if (pushing) { + controllerPushed(to); + } else { + controllerPopped(to); + } + } + } + + @Override + public boolean onBack() { + if (!super.onBack()) { + if (rightController != null && rightController.onBack()) { + return true; + } + if (leftController != null && leftController.onBack()) { + return true; + } + } + return false; + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + + AndroidUtils.waitForMeasure(view, this); + } + + @Override + public boolean onMeasured(View view) { + int width = Math.max(dp(320), (int) (view.getWidth() * 0.35)); + if (leftControllerView.getWidth() != width) { + leftControllerView.getLayoutParams().width = width; + leftControllerView.requestLayout(); + return true; + } else { + return false; + } + } +} diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThreadController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ThreadController.java index 6cfaec4b..4ef0261f 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThreadController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/ThreadController.java @@ -43,7 +43,7 @@ import de.greenrobot.event.EventBus; import static org.floens.chan.utils.AndroidUtils.dp; -public abstract class ThreadController extends Controller implements ThreadLayout.ThreadLayoutCallback, ImageViewerController.PreviewCallback, RootNavigationController.DrawerCallback, SwipeRefreshLayout.OnRefreshListener, RootNavigationController.ToolbarSearchCallback, NfcAdapter.CreateNdefMessageCallback { +public abstract class ThreadController extends Controller implements ThreadLayout.ThreadLayoutCallback, ImageViewerController.PreviewCallback, DrawerNavigationController.DrawerCallback, SwipeRefreshLayout.OnRefreshListener, DrawerNavigationController.ToolbarSearchCallback, NfcAdapter.CreateNdefMessageCallback { private static final String TAG = "ThreadController"; protected ThreadLayout threadLayout; @@ -73,7 +73,7 @@ public abstract class ThreadController extends Controller implements ThreadLayou swipeRefreshLayout.addView(threadLayout); swipeRefreshLayout.setOnRefreshListener(this); - int toolbarHeight = navigationController.getToolbar().getToolbarHeight(); + int toolbarHeight = navigationController.getToolbar() == null ? 0 : navigationController.getToolbar().getToolbarHeight(); swipeRefreshLayout.setProgressViewOffset(false, toolbarHeight - dp(40), toolbarHeight + dp(64 - 40)); view = swipeRefreshLayout; 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 6f5725a5..585b9bc5 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 @@ -85,8 +85,8 @@ public class ViewThreadController extends ThreadController implements ThreadLayo @Override public void onShow() { super.onShow(); - if (navigationController instanceof RootNavigationController) { - ((RootNavigationController) navigationController).updateHighlighted(); + if (navigationController instanceof DrawerNavigationController) { + ((DrawerNavigationController) navigationController).updateHighlighted(); } } @@ -115,8 +115,8 @@ public class ViewThreadController extends ThreadController implements ThreadLayo @Override public void onClick(final DialogInterface dialog, final int which) { loadLoadable(threadLoadable); - if (navigationController instanceof RootNavigationController) { - ((RootNavigationController) navigationController).updateHighlighted(); + if (navigationController instanceof DrawerNavigationController) { + ((DrawerNavigationController) navigationController).updateHighlighted(); } } }) @@ -135,7 +135,7 @@ public class ViewThreadController extends ThreadController implements ThreadLayo return pin.loadable.equals(threadLayout.getPresenter().getLoadable()); } - private void loadLoadable(Loadable loadable) { + public void loadLoadable(Loadable loadable) { if (!loadable.equals(threadLayout.getPresenter().getLoadable())) { threadLayout.getPresenter().bindLoadable(loadable); this.loadable = threadLayout.getPresenter().getLoadable(); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java index d3482878..257eea54 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java @@ -66,7 +66,6 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL private PostCellInterface.PostViewMode postViewMode; private int spanCount = 2; private int background; - private int toolbarSpacing; private Toolbar toolbar; private boolean searchOpen; @@ -111,7 +110,7 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL toolbar = threadListLayoutCallback.getToolbar(); attachToolbarScroll(true); - int toolbarHeight = toolbar.getToolbarHeight(); + int toolbarHeight = toolbar == null ? 0 : toolbar.getToolbarHeight(); reply.setPadding(0, toolbarHeight, 0, 0); searchStatus.setPadding(searchStatus.getPaddingLeft(), searchStatus.getPaddingTop() + toolbarHeight, searchStatus.getPaddingRight(), searchStatus.getPaddingBottom()); @@ -140,7 +139,7 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL layoutManager = null; - int toolbarHeight = toolbar.getToolbarHeight(); + int toolbarHeight = toolbar == null ? 0 : toolbar.getToolbarHeight(); switch (postViewMode) { case LIST: LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); @@ -277,7 +276,7 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL return true; } - int toolbarHeight = toolbar.getToolbarHeight(); + int toolbarHeight = toolbar == null ? 0 : toolbar.getToolbarHeight(); switch (postViewMode) { case LIST: if (getTopAdapterPosition() == 0) { @@ -401,11 +400,13 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL } private void attachToolbarScroll(boolean attach) { - if (attach) { - toolbar.attachRecyclerViewScrollStateListener(recyclerView); - } else { - toolbar.detachRecyclerViewScrollStateListener(recyclerView); - toolbar.setCollapse(Toolbar.TOOLBAR_COLLAPSE_SHOW, true); + if (toolbar != null) { + if (attach) { + toolbar.attachRecyclerViewScrollStateListener(recyclerView); + } else { + toolbar.detachRecyclerViewScrollStateListener(recyclerView); + toolbar.setCollapse(Toolbar.TOOLBAR_COLLAPSE_SHOW, true); + } } } diff --git a/Clover/app/src/main/res/values/attrs.xml b/Clover/app/src/main/res/values/attrs.xml index 8e6bb32a..892e018b 100644 --- a/Clover/app/src/main/res/values/attrs.xml +++ b/Clover/app/src/main/res/values/attrs.xml @@ -39,6 +39,7 @@ along with this program. If not, see . + diff --git a/Clover/app/src/main/res/values/styles.xml b/Clover/app/src/main/res/values/styles.xml index 2d0947c0..9b12d9c2 100644 --- a/Clover/app/src/main/res/values/styles.xml +++ b/Clover/app/src/main/res/values/styles.xml @@ -57,6 +57,7 @@ along with this program. If not, see . #FFD6BAD0 #1e000000 + #ffe1e1e1 #ffffffff #88ffffff @@ -120,6 +121,8 @@ along with this program. If not, see . #ff800000 #89800000 + #FFD4C6BD + #ffcc1105 #ff000080 #ff000080