Start of tablet split layout

multisite
Floens 10 years ago
parent 17dc135820
commit 4003daafb3
  1. 17
      Clover/app/src/main/java/org/floens/chan/controller/Controller.java
  2. 8
      Clover/app/src/main/java/org/floens/chan/controller/ControllerLogic.java
  3. 33
      Clover/app/src/main/java/org/floens/chan/controller/NavigationController.java
  4. 40
      Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java
  5. 14
      Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java
  6. 18
      Clover/app/src/main/java/org/floens/chan/ui/controller/DrawerNavigationController.java
  7. 2
      Clover/app/src/main/java/org/floens/chan/ui/controller/FiltersController.java
  8. 2
      Clover/app/src/main/java/org/floens/chan/ui/controller/HistoryController.java
  9. 146
      Clover/app/src/main/java/org/floens/chan/ui/controller/SplitNavigationController.java
  10. 4
      Clover/app/src/main/java/org/floens/chan/ui/controller/ThreadController.java
  11. 10
      Clover/app/src/main/java/org/floens/chan/ui/controller/ViewThreadController.java
  12. 9
      Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java
  13. 1
      Clover/app/src/main/res/values/attrs.xml
  14. 3
      Clover/app/src/main/res/values/styles.xml

@ -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) {

@ -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();
}
}

@ -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<Controller> 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,8 +198,10 @@ public abstract class NavigationController extends Controller implements Toolbar
}
public void showSearch() {
if (toolbar != null) {
toolbar.openSearch();
}
}
@Override
public void onMenuOrBackClicked(boolean isArrow) {
@ -224,7 +225,8 @@ public abstract class NavigationController extends Controller implements Toolbar
public void onSearchEntered(String entered) {
}
private void updateToolbarCollapse(Controller controller, boolean animate) {
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();
@ -233,4 +235,5 @@ public abstract class NavigationController extends Controller implements Toolbar
toolbar.processScrollCollapse(Toolbar.TOOLBAR_COLLAPSE_SHOW, animate);
}
}
}

@ -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<Controller> 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<Controller> controllers = rootNavigationController.getControllerList();
List<Controller> 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 {

@ -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,10 +218,23 @@ public class BrowseController extends ThreadController implements ToolbarMenuIte
}
public void showThread(Loadable threadLoadable, boolean 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) {
loadBoards();

@ -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);

@ -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;

@ -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;

@ -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 <http://www.gnu.org/licenses/>.
*/
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;
}
}
}

@ -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;

@ -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();

@ -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,6 +400,7 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL
}
private void attachToolbarScroll(boolean attach) {
if (toolbar != null) {
if (attach) {
toolbar.attachRecyclerViewScrollStateListener(recyclerView);
} else {
@ -408,6 +408,7 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL
toolbar.setCollapse(Toolbar.TOOLBAR_COLLAPSE_SHOW, true);
}
}
}
private int getTopAdapterPosition() {
switch (postViewMode) {

@ -39,6 +39,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<attr name="post_options_drawable" format="integer" />
<attr name="divider_color" format="color" />
<attr name="divider_split_color" format="color" />
<attr name="dropdown_light_color" format="color" />
<attr name="dropdown_light_pressed_color" format="color" />

@ -57,6 +57,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<item name="post_highlighted_color">#FFD6BAD0</item>
<item name="divider_color">#1e000000</item>
<item name="divider_split_color">#ffe1e1e1</item>
<item name="dropdown_light_color">#ffffffff</item>
<item name="dropdown_light_pressed_color">#88ffffff</item>
@ -120,6 +121,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<item name="text_color_primary">#ff800000</item>
<item name="text_color_secondary">#89800000</item>
<item name="divider_split_color">#FFD4C6BD</item>
<item name="post_subject_color">#ffcc1105</item>
<item name="post_quote_color">#ff000080</item>
<item name="post_link_color">#ff000080</item>

Loading…
Cancel
Save