Add ActionViewHolder for navigation drawer

pull/1020/head
Alex Baker 6 years ago
parent 085dfbb7b4
commit 9b724ad2c5

@ -0,0 +1,41 @@
package com.todoroo.astrid.adapter
import android.app.Activity
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import butterknife.BindView
import butterknife.ButterKnife
import com.todoroo.astrid.api.FilterListItem
import org.tasks.R
import org.tasks.themes.DrawableUtil
class ActionViewHolder internal constructor(
private val activity: Activity,
itemView: View,
private val onClick: ((FilterListItem?) -> Unit)?) : RecyclerView.ViewHolder(itemView) {
@BindView(R.id.row)
lateinit var row: View
@BindView(R.id.text)
lateinit var text: TextView
@BindView(R.id.icon)
lateinit var icon: ImageView
init {
ButterKnife.bind(this, itemView)
}
fun bind(filter: FilterListItem) {
text.text = filter.listingTitle
icon.setImageDrawable(DrawableUtil.getWrapped(activity, filter.icon))
if (onClick != null) {
row.setOnClickListener {
onClick.invoke(filter)
}
}
}
}

@ -77,6 +77,7 @@ class FilterAdapter @Inject constructor(
newView.tag = when (viewType) { newView.tag = when (viewType) {
ITEM -> FilterViewHolder( ITEM -> FilterViewHolder(
newView, false, locale, activity, inventory, colorProvider, null) newView, false, locale, activity, inventory, colorProvider, null)
ACTION -> ActionViewHolder(activity, newView, null)
SEPARATOR -> SeparatorViewHolder(newView) SEPARATOR -> SeparatorViewHolder(newView)
SUBHEADER -> SubheaderViewHolder( SUBHEADER -> SubheaderViewHolder(
newView, newView,
@ -101,6 +102,7 @@ class FilterAdapter @Inject constructor(
val viewHolder = view.tag as RecyclerView.ViewHolder val viewHolder = view.tag as RecyclerView.ViewHolder
when (item.itemType) { when (item.itemType) {
ITEM -> (viewHolder as FilterViewHolder).bind(item, item == selected, 0) ITEM -> (viewHolder as FilterViewHolder).bind(item, item == selected, 0)
ACTION -> (viewHolder as ActionViewHolder).bind(item)
SUBHEADER -> (viewHolder as SubheaderViewHolder).bind((item as NavigationDrawerSubheader)) SUBHEADER -> (viewHolder as SubheaderViewHolder).bind((item as NavigationDrawerSubheader))
else -> {} else -> {}
} }

@ -66,9 +66,10 @@ class NavigationDrawerAdapter @Inject constructor(
val view = LayoutInflater.from(parent.context).inflate(type.layout, parent, false) val view = LayoutInflater.from(parent.context).inflate(type.layout, parent, false)
return when (type) { return when (type) {
FilterListItem.Type.ITEM -> FilterViewHolder( FilterListItem.Type.ITEM -> FilterViewHolder(
view, true, locale, activity, inventory, colorProvider) { filter: FilterListItem? -> onClickFilter(filter) } view, true, locale, activity, inventory, colorProvider) { onClickFilter(it) }
FilterListItem.Type.SUBHEADER -> SubheaderViewHolder( FilterListItem.Type.SUBHEADER -> SubheaderViewHolder(
view, activity, preferences, googleTaskDao, caldavDao, localBroadcastManager) view, activity, preferences, googleTaskDao, caldavDao, localBroadcastManager)
FilterListItem.Type.ACTION -> ActionViewHolder(activity, view) { onClickFilter(it) }
else -> SeparatorViewHolder(view) else -> SeparatorViewHolder(view)
} }
} }
@ -77,11 +78,13 @@ class NavigationDrawerAdapter @Inject constructor(
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val item = getItem(position) val item = getItem(position)
val type = item.itemType when (item.itemType) {
if (type == FilterListItem.Type.ITEM) { FilterListItem.Type.ITEM ->
(holder as FilterViewHolder).bind(item, item == selected, max(item.count, 0)) (holder as FilterViewHolder).bind(item, item == selected, max(item.count, 0))
} else if (type == FilterListItem.Type.SUBHEADER) { FilterListItem.Type.ACTION -> (holder as ActionViewHolder).bind(item)
FilterListItem.Type.SUBHEADER ->
(holder as SubheaderViewHolder).bind((item as NavigationDrawerSubheader)) (holder as SubheaderViewHolder).bind((item as NavigationDrawerSubheader))
else -> {}
} }
} }

@ -79,6 +79,7 @@ public abstract class FilterListItem implements Parcelable {
public enum Type { public enum Type {
ITEM(R.layout.filter_adapter_row), ITEM(R.layout.filter_adapter_row),
ACTION(R.layout.filter_adapter_action),
SUBHEADER(R.layout.filter_adapter_subheader), SUBHEADER(R.layout.filter_adapter_subheader),
SEPARATOR(R.layout.filter_adapter_separator); SEPARATOR(R.layout.filter_adapter_separator);

@ -45,7 +45,7 @@ public class NavigationDrawerAction extends FilterListItem {
@Override @Override
public Type getItemType() { public Type getItemType() {
return Type.ITEM; return Type.ACTION;
} }
/** {@inheritDoc} */ /** {@inheritDoc} */

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/row"
android:background="@drawable/drawer_background_selector"
android:foreground="?attr/selectableItemBackground"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingStart="@dimen/keyline_first"
android:paddingEnd="0dp">
<ImageView
android:id="@+id/icon"
android:src="@drawable/ic_outline_add_24px"
android:tint="@color/text_primary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:background="@null"
android:layout_gravity="center_vertical"
android:alpha="@dimen/alpha_secondary"
android:scaleType="center"/>
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toEndOf="@id/icon"
android:background="@null"
android:paddingStart="@dimen/keyline_second"
android:paddingEnd="@dimen/keyline_first"
android:duplicateParentState="true"
android:ellipsize="end"
android:fontFamily="@string/font_fontFamily_medium"
android:gravity="start|center_vertical"
android:lines="1"
android:singleLine="true"
android:textAlignment="viewStart"
android:textSize="14sp"
android:textColor="@color/text_primary"
tools:ignore="UnusedAttribute"/>
</RelativeLayout>
Loading…
Cancel
Save