From e3519915b2e90111e27f55f2346aba7c3166f494 Mon Sep 17 00:00:00 2001 From: Floens Date: Wed, 8 Apr 2015 20:01:28 +0200 Subject: [PATCH] Add board and catalog link to drawer --- .../floens/chan/ui/adapter/PinAdapter.java | 130 ++++++++++++++---- .../java/org/floens/chan/ui/cell/PinCell.java | 24 ---- .../controller/RootNavigationController.java | 2 + .../floens/chan/ui/helper/SwipeListener.java | 8 +- .../res/drawable-hdpi/ic_view_list_24dp.png | Bin 0 -> 209 bytes .../res/drawable-hdpi/ic_view_module_24dp.png | Bin 0 -> 199 bytes .../res/drawable-mdpi/ic_view_list_24dp.png | Bin 0 -> 170 bytes .../res/drawable-mdpi/ic_view_module_24dp.png | Bin 0 -> 168 bytes .../res/drawable-xhdpi/ic_view_list_24dp.png | Bin 0 -> 199 bytes .../drawable-xhdpi/ic_view_module_24dp.png | Bin 0 -> 196 bytes .../res/drawable-xxhdpi/ic_view_list_24dp.png | Bin 0 -> 226 bytes .../drawable-xxhdpi/ic_view_module_24dp.png | Bin 0 -> 220 bytes .../drawable-xxxhdpi/ic_view_list_24dp.png | Bin 0 -> 258 bytes .../drawable-xxxhdpi/ic_view_module_24dp.png | Bin 0 -> 270 bytes .../app/src/main/res/layout/cell_header.xml | 19 +++ Clover/app/src/main/res/layout/cell_link.xml | 30 ++++ Clover/app/src/main/res/layout/cell_pin.xml | 63 ++------- .../layout/controller_navigation_drawer.xml | 1 - Clover/app/src/main/res/values/strings.xml | 8 +- 19 files changed, 179 insertions(+), 106 deletions(-) delete mode 100644 Clover/app/src/main/java/org/floens/chan/ui/cell/PinCell.java create mode 100644 Clover/app/src/main/res/drawable-hdpi/ic_view_list_24dp.png create mode 100644 Clover/app/src/main/res/drawable-hdpi/ic_view_module_24dp.png create mode 100644 Clover/app/src/main/res/drawable-mdpi/ic_view_list_24dp.png create mode 100644 Clover/app/src/main/res/drawable-mdpi/ic_view_module_24dp.png create mode 100644 Clover/app/src/main/res/drawable-xhdpi/ic_view_list_24dp.png create mode 100644 Clover/app/src/main/res/drawable-xhdpi/ic_view_module_24dp.png create mode 100644 Clover/app/src/main/res/drawable-xxhdpi/ic_view_list_24dp.png create mode 100644 Clover/app/src/main/res/drawable-xxhdpi/ic_view_module_24dp.png create mode 100644 Clover/app/src/main/res/drawable-xxxhdpi/ic_view_list_24dp.png create mode 100644 Clover/app/src/main/res/drawable-xxxhdpi/ic_view_module_24dp.png create mode 100644 Clover/app/src/main/res/layout/cell_header.xml create mode 100644 Clover/app/src/main/res/layout/cell_link.xml diff --git a/Clover/app/src/main/java/org/floens/chan/ui/adapter/PinAdapter.java b/Clover/app/src/main/java/org/floens/chan/ui/adapter/PinAdapter.java index 9390ce21..ebc101fa 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/adapter/PinAdapter.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/adapter/PinAdapter.java @@ -4,45 +4,101 @@ import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.TextView; import org.floens.chan.ChanApplication; import org.floens.chan.R; import org.floens.chan.core.model.Pin; -import org.floens.chan.ui.cell.PinCell; import org.floens.chan.ui.helper.SwipeListener; import org.floens.chan.ui.view.ThumbnailView; import java.util.ArrayList; import java.util.List; +import static org.floens.chan.utils.AndroidUtils.ROBOTO_MEDIUM; import static org.floens.chan.utils.AndroidUtils.dp; -public class PinAdapter extends RecyclerView.Adapter implements SwipeListener.Callback { +public class PinAdapter extends RecyclerView.Adapter implements SwipeListener.Callback { + private static final int TYPE_HEADER = 0; + private static final int TYPE_PIN = 1; + private static final int TYPE_LINK = 2; + private final Callback callback; private List pins = new ArrayList<>(); public PinAdapter(Callback callback) { this.callback = callback; + setHasStableIds(true); } @Override - public PinViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - PinCell pinCell = (PinCell) LayoutInflater.from(parent.getContext()).inflate(R.layout.cell_pin, parent, false); - return new PinViewHolder(pinCell); + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + switch (viewType) { + case TYPE_HEADER: + return new PinHeaderHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.cell_header, parent, false)); + case TYPE_PIN: + return new PinViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.cell_pin, parent, false)); + case TYPE_LINK: + return new LinkHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.cell_link, parent, false)); + } + return null; } @Override - public void onBindViewHolder(PinViewHolder holder, int position) { - final Pin pin = pins.get(position); - - holder.textView.setText(pin.loadable.title); - holder.image.setUrl(pin.thumbnailUrl, dp(40), dp(40)); + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + switch (holder.getItemViewType()) { + case TYPE_HEADER: + ((PinHeaderHolder) holder).text.setText(R.string.drawer_pinned); + break; + case TYPE_PIN: + final Pin pin = pins.get(position - 3); + PinViewHolder pinHolder = (PinViewHolder) holder; + pinHolder.textView.setText(pin.loadable.title); + pinHolder.image.setUrl(pin.thumbnailUrl, dp(40), dp(40)); + break; + case TYPE_LINK: + LinkHolder linkHolder = (LinkHolder) holder; + switch (position) { + case 0: + linkHolder.text.setText(R.string.drawer_board); + linkHolder.image.setImageResource(R.drawable.ic_view_list_24dp); + break; + case 1: + linkHolder.text.setText(R.string.drawer_catalog); + linkHolder.image.setImageResource(R.drawable.ic_view_module_24dp); + break; + } + break; + } } @Override public int getItemCount() { - return pins.size(); + return pins.size() + 3; + } + + @Override + public long getItemId(int position) { + position -= 3; + if (position >= 0 && position < pins.size()) { + return pins.get(position).id + 10; + } else { + return position; + } + } + + @Override + public int getItemViewType(int position) { + switch (position) { + case 0: + case 1: + return TYPE_LINK; + case 2: + return TYPE_HEADER; + default: + return TYPE_PIN; + } } public void onPinsChanged(List pins) { @@ -53,7 +109,7 @@ public class PinAdapter extends RecyclerView.Adapter i public void onPinAdded(Pin pin) { pins.add(pin); - notifyItemInserted(pins.size() - 1); + notifyItemInserted(pins.size() - 1 + 3); } public void onPinRemoved(Pin pin) { @@ -64,33 +120,33 @@ public class PinAdapter extends RecyclerView.Adapter i } else { int location = pins.indexOf(pin); pins.remove(pin); - notifyItemRemoved(location); + notifyItemRemoved(location + 3); } } public void onPinChanged(Pin pin) { - notifyItemChanged(pins.indexOf(pin)); + notifyItemChanged(pins.indexOf(pin) + 3); } @Override public SwipeListener.Swipeable getSwipeable(int position) { - return SwipeListener.Swipeable.RIGHT; + return getItemViewType(position) == TYPE_PIN ? SwipeListener.Swipeable.RIGHT : SwipeListener.Swipeable.NO; } @Override public void removeItem(int position) { - ChanApplication.getWatchManager().removePin(pins.get(position)); + ChanApplication.getWatchManager().removePin(pins.get(position - 3)); } @Override public boolean isMoveable(int position) { - return true; + return getItemViewType(position) == TYPE_PIN; } @Override public void moveItem(int from, int to) { - Pin item = pins.remove(from); - pins.add(to, item); + Pin item = pins.remove(from - 3); + pins.add(to - 3, item); notifyItemMoved(from, to); } @@ -99,21 +155,49 @@ public class PinAdapter extends RecyclerView.Adapter i } public class PinViewHolder extends RecyclerView.ViewHolder { - private PinCell pinCell; private ThumbnailView image; private TextView textView; - public PinViewHolder(PinCell pinCell) { + public PinViewHolder(View pinCell) { super(pinCell); - this.pinCell = pinCell; image = (ThumbnailView) pinCell.findViewById(R.id.thumb); image.setCircular(true); textView = (TextView) pinCell.findViewById(R.id.text); + textView.setTypeface(ROBOTO_MEDIUM); pinCell.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - callback.onPinClicked(pins.get(getAdapterPosition())); + callback.onPinClicked(pins.get(getAdapterPosition() - 3)); + } + }); + } + } + + public class PinHeaderHolder extends RecyclerView.ViewHolder { + private TextView text; + + public PinHeaderHolder(View itemView) { + super(itemView); + text = (TextView) itemView.findViewById(R.id.text); + text.setTypeface(ROBOTO_MEDIUM); + } + } + + public class LinkHolder extends RecyclerView.ViewHolder { + private ImageView image; + private TextView text; + + public LinkHolder(View itemView) { + super(itemView); + image = (ImageView) itemView.findViewById(R.id.image); + text = (TextView) itemView.findViewById(R.id.text); + text.setTypeface(ROBOTO_MEDIUM); + + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + } }); } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/PinCell.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/PinCell.java deleted file mode 100644 index 2e1bd5d3..00000000 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/PinCell.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.floens.chan.ui.cell; - -import android.content.Context; -import android.util.AttributeSet; -import android.widget.LinearLayout; - -public class PinCell extends LinearLayout { - public PinCell(Context context) { - super(context); - } - - public PinCell(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public PinCell(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - } -} 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/RootNavigationController.java index 7942bf73..e209ca2d 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/RootNavigationController.java @@ -61,6 +61,7 @@ public class RootNavigationController extends NavigationController implements Pi 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 = (FrameLayout) view.findViewById(R.id.drawer); recyclerView = (RecyclerView) view.findViewById(R.id.drawer_recycler_view); recyclerView.setHasFixedSize(true); @@ -127,6 +128,7 @@ public class RootNavigationController extends NavigationController implements Pi public void onEvent(WatchManager.PinAddedMessage message) { pinAdapter.onPinAdded(message.pin); + drawerLayout.openDrawer(drawer); } public void onEvent(WatchManager.PinRemovedMessage message) { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/helper/SwipeListener.java b/Clover/app/src/main/java/org/floens/chan/ui/helper/SwipeListener.java index 9851b392..ef7c7f28 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/helper/SwipeListener.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/helper/SwipeListener.java @@ -307,9 +307,11 @@ public class SwipeListener extends RecyclerView.ItemDecoration implements Recycl if ((touchAdapterPos > dragPosition && floatingViewPos > viewAtPosition.getTop() + viewAtPosition.getHeight() / 5f) || (touchAdapterPos < dragPosition && floatingViewPos < viewAtPosition.getTop() + viewAtPosition.getHeight() * 4f / 5f)) { - callback.moveItem(dragPosition, touchAdapterPos); - dragPosition = touchAdapterPos; - somePositionChanged = true; + if (callback.isMoveable(touchAdapterPos)) { + callback.moveItem(dragPosition, touchAdapterPos); + dragPosition = touchAdapterPos; + somePositionChanged = true; + } } } diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_view_list_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_view_list_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..c031adccfe7d1f84fb3af581df307cbe844723a9 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K;Lb6AYF9SoB8UsT^3j@P1pisjL z28L1t28LG&3=CE?7#PG0=Ijcz0ZK3>dAqwX{BQ3+vmeOgEbxddW?H@w58Pkjt(pMS|l`%LuJzx+>GJIjbNz`HSD^95^9Gh#dCE8BbQR)9&y770mRH?~kiqpS-T3^*8kKl;p6eEGo|k0wldT1B8K;Lb6AYF9SoB8UsT^3j@P1pisjL z28L1t28LG&3=CE?7#PG0=Ijcz0ZK3>dAqwX{BQ3+vmeOgEbxddW?H@w58Pkjt(pMUk${9F11rH`&s26eVb?`mX(IaJ&CD1FRa&^;* oj5WPdCM$TP)?Rnxl}c!4SfSK3Gc&S16lfHKr>mdKI;Vst03ePuumAu6 literal 0 HcmV?d00001 diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_view_list_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_view_list_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..b90d335f9ac54d821edbce73932918fe8b14da6d GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1g=CK)Uj~LMH3o);76yi2K%s^g z3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tWO=~G=WkLM zSlcbf^@&$5FPO=~G=WkLM z;OXKRVsScICsl#hfKQwEzhIKZ&Ban~&7}n_uQ@I;FnpSzFW4WzumY%-!PC{xWt~$( F69CDOD5U@Z literal 0 HcmV?d00001 diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_view_list_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_view_list_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0e7f15a4b4950f1f97c75550292fc6b0376c0f4d GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}tg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^+;1OBOz`!jG!i)^F=12eq z?LA!_Ln02pz3j-vpuoX$pr+*g`Dzv?0mUI(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g$s z6pZq8aSX}0_x7427lQ%^%YmAb_uIuqDg;{6)(f3mn323bl2ZW;7UVltT7R4~?K?9g z2yAWq^X*l8I2#KPEU9DIdBp()UbX*X1c|V)gq&lX_%+jzx7#NiXbXdI(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g$s z6b$inaSX}0_x9RGUIqmY21kimKU0~txu-5}dm=UIeAjNZ#s)Ar)^zRPyBB-{P;jAJ p!B_WFtt6B?;e_~42Plwll2ZHLYgnoE;VIC322WQ%mvv4FO#o-GKmGs! literal 0 HcmV?d00001 diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_view_list_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_view_list_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f2c9d42de4007292693eae2a447f0306ff88b6a8 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcg6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g$s z6s+=eaSW-r_4c|W7lQ%^!@-)8_v_U)JQ@w=InV0eu<`mEPM{(LXb5kZoU5@f`@aZ6 z?18nzM8=Gya1OYTgRr&{gYO$IMz}~uk}DgW17sM;7cffx?s436rOFB{$HIwAl7 literal 0 HcmV?d00001 diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_view_module_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_view_module_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..41e1a79327f7a0e2a4900d0897d1d8d144d668d6 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcg6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g$s z6m0W!aSW-r_4bA%SAzi$%K^7Po8DhnKO!c*VeXvi2M#=&wBy$P=NUkSNWi&xS?BMk z%QQ}{7C;gOF%O7O{@=Q&`0<-PT#O<28}6^*VnkK3hU0^Ds3NLZgDoTfCx3S5gs^sd Okc_9RpUXO@geCx)rbX)j literal 0 HcmV?d00001 diff --git a/Clover/app/src/main/res/layout/cell_header.xml b/Clover/app/src/main/res/layout/cell_header.xml new file mode 100644 index 00000000..856e6338 --- /dev/null +++ b/Clover/app/src/main/res/layout/cell_header.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/Clover/app/src/main/res/layout/cell_link.xml b/Clover/app/src/main/res/layout/cell_link.xml new file mode 100644 index 00000000..5aede947 --- /dev/null +++ b/Clover/app/src/main/res/layout/cell_link.xml @@ -0,0 +1,30 @@ + + + + + + + + diff --git a/Clover/app/src/main/res/layout/cell_pin.xml b/Clover/app/src/main/res/layout/cell_pin.xml index 833625cb..d13567ea 100644 --- a/Clover/app/src/main/res/layout/cell_pin.xml +++ b/Clover/app/src/main/res/layout/cell_pin.xml @@ -1,18 +1,18 @@ - + android:layout_height="48dp" + android:background="?attr/selectableItemBackground"> + android:paddingRight="0dp" + android:paddingBottom="4dp" /> - - + android:textColor="#ff212121" + android:textSize="14sp" /> - + diff --git a/Clover/app/src/main/res/layout/controller_navigation_drawer.xml b/Clover/app/src/main/res/layout/controller_navigation_drawer.xml index b2796cb7..8d6d73b0 100644 --- a/Clover/app/src/main/res/layout/controller_navigation_drawer.xml +++ b/Clover/app/src/main/res/layout/controller_navigation_drawer.xml @@ -52,7 +52,6 @@ along with this program. If not, see . . Show filler Remove board? - Open drawer - Close drawer - Pinned threads + Board + Catalog + Watching threads Delete pin Edit title + Open drawer + Close drawer reply replies