diff --git a/app/src/main/java/com/todoroo/astrid/adapter/ActionViewHolder.kt b/app/src/main/java/com/todoroo/astrid/adapter/ActionViewHolder.kt new file mode 100644 index 000000000..af787264e --- /dev/null +++ b/app/src/main/java/com/todoroo/astrid/adapter/ActionViewHolder.kt @@ -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) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/todoroo/astrid/adapter/FilterAdapter.kt b/app/src/main/java/com/todoroo/astrid/adapter/FilterAdapter.kt index 1d9646991..4f336ed52 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/FilterAdapter.kt +++ b/app/src/main/java/com/todoroo/astrid/adapter/FilterAdapter.kt @@ -77,6 +77,7 @@ class FilterAdapter @Inject constructor( newView.tag = when (viewType) { ITEM -> FilterViewHolder( newView, false, locale, activity, inventory, colorProvider, null) + ACTION -> ActionViewHolder(activity, newView, null) SEPARATOR -> SeparatorViewHolder(newView) SUBHEADER -> SubheaderViewHolder( newView, @@ -101,6 +102,7 @@ class FilterAdapter @Inject constructor( val viewHolder = view.tag as RecyclerView.ViewHolder when (item.itemType) { ITEM -> (viewHolder as FilterViewHolder).bind(item, item == selected, 0) + ACTION -> (viewHolder as ActionViewHolder).bind(item) SUBHEADER -> (viewHolder as SubheaderViewHolder).bind((item as NavigationDrawerSubheader)) else -> {} } diff --git a/app/src/main/java/com/todoroo/astrid/adapter/NavigationDrawerAdapter.kt b/app/src/main/java/com/todoroo/astrid/adapter/NavigationDrawerAdapter.kt index 96701fb51..bd6969310 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/NavigationDrawerAdapter.kt +++ b/app/src/main/java/com/todoroo/astrid/adapter/NavigationDrawerAdapter.kt @@ -66,9 +66,10 @@ class NavigationDrawerAdapter @Inject constructor( val view = LayoutInflater.from(parent.context).inflate(type.layout, parent, false) return when (type) { 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( view, activity, preferences, googleTaskDao, caldavDao, localBroadcastManager) + FilterListItem.Type.ACTION -> ActionViewHolder(activity, view) { onClickFilter(it) } else -> SeparatorViewHolder(view) } } @@ -77,11 +78,13 @@ class NavigationDrawerAdapter @Inject constructor( override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { val item = getItem(position) - val type = item.itemType - if (type == FilterListItem.Type.ITEM) { - (holder as FilterViewHolder).bind(item, item == selected, max(item.count, 0)) - } else if (type == FilterListItem.Type.SUBHEADER) { - (holder as SubheaderViewHolder).bind((item as NavigationDrawerSubheader)) + when (item.itemType) { + FilterListItem.Type.ITEM -> + (holder as FilterViewHolder).bind(item, item == selected, max(item.count, 0)) + FilterListItem.Type.ACTION -> (holder as ActionViewHolder).bind(item) + FilterListItem.Type.SUBHEADER -> + (holder as SubheaderViewHolder).bind((item as NavigationDrawerSubheader)) + else -> {} } } diff --git a/app/src/main/java/com/todoroo/astrid/api/FilterListItem.java b/app/src/main/java/com/todoroo/astrid/api/FilterListItem.java index b90d25f45..4132432d1 100644 --- a/app/src/main/java/com/todoroo/astrid/api/FilterListItem.java +++ b/app/src/main/java/com/todoroo/astrid/api/FilterListItem.java @@ -79,6 +79,7 @@ public abstract class FilterListItem implements Parcelable { public enum Type { ITEM(R.layout.filter_adapter_row), + ACTION(R.layout.filter_adapter_action), SUBHEADER(R.layout.filter_adapter_subheader), SEPARATOR(R.layout.filter_adapter_separator); diff --git a/app/src/main/java/org/tasks/filters/NavigationDrawerAction.java b/app/src/main/java/org/tasks/filters/NavigationDrawerAction.java index 50e93e0c5..f903b83e0 100644 --- a/app/src/main/java/org/tasks/filters/NavigationDrawerAction.java +++ b/app/src/main/java/org/tasks/filters/NavigationDrawerAction.java @@ -45,7 +45,7 @@ public class NavigationDrawerAction extends FilterListItem { @Override public Type getItemType() { - return Type.ITEM; + return Type.ACTION; } /** {@inheritDoc} */ diff --git a/app/src/main/res/layout/filter_adapter_action.xml b/app/src/main/res/layout/filter_adapter_action.xml new file mode 100644 index 000000000..20100b558 --- /dev/null +++ b/app/src/main/res/layout/filter_adapter_action.xml @@ -0,0 +1,46 @@ + + + + + + + +