Update drawer headers

* Move chevron to end
* Animate chevron
* 'Add' button replaces 'Create new ...' rows
pull/1722/head
Alex Baker 4 years ago
parent ad4af1a2cb
commit 08ff146320

@ -1,6 +1,6 @@
package com.todoroo.astrid.adapter package com.todoroo.astrid.adapter
import android.app.Activity import android.content.Context
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
@ -10,9 +10,9 @@ import org.tasks.databinding.FilterAdapterActionBinding
import org.tasks.themes.DrawableUtil import org.tasks.themes.DrawableUtil
class ActionViewHolder internal constructor( class ActionViewHolder internal constructor(
private val activity: Activity, private val context: Context,
itemView: View, itemView: View,
private val onClick: ((FilterListItem?) -> Unit)?) : RecyclerView.ViewHolder(itemView) { private val onClick: ((FilterListItem?) -> Unit)?) : RecyclerView.ViewHolder(itemView) {
private val row: View private val row: View
private val text: TextView private val text: TextView
@ -28,7 +28,7 @@ class ActionViewHolder internal constructor(
fun bind(filter: FilterListItem) { fun bind(filter: FilterListItem) {
text.text = filter.listingTitle text.text = filter.listingTitle
icon.setImageDrawable(DrawableUtil.getWrapped(activity, filter.icon)) icon.setImageDrawable(DrawableUtil.getWrapped(context, filter.icon))
if (onClick != null) { if (onClick != null) {
row.setOnClickListener { row.setOnClickListener {
onClick.invoke(filter) onClick.invoke(filter)

@ -11,19 +11,14 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.BaseAdapter import android.widget.BaseAdapter
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.FilterListItem import com.todoroo.astrid.api.FilterListItem
import com.todoroo.astrid.api.FilterListItem.Type.* import com.todoroo.astrid.api.FilterListItem.Type.*
import org.tasks.LocalBroadcastManager
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.data.CaldavDao
import org.tasks.data.GoogleTaskDao
import org.tasks.filters.NavigationDrawerSubheader import org.tasks.filters.NavigationDrawerSubheader
import org.tasks.locale.Locale import org.tasks.locale.Locale
import org.tasks.preferences.Preferences
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
@ -33,10 +28,8 @@ class FilterAdapter @Inject constructor(
private val locale: Locale, private val locale: Locale,
private val inventory: Inventory, private val inventory: Inventory,
private val colorProvider: ColorProvider, private val colorProvider: ColorProvider,
private val preferences: Preferences, private val subheaderClickHandler: SubheaderClickHandler,
private val googleTaskDao: GoogleTaskDao, ) : BaseAdapter() {
private val caldavDao: CaldavDao,
private val localBroadcastManager: LocalBroadcastManager) : BaseAdapter() {
private var selected: Filter? = null private var selected: Filter? = null
private var items: List<FilterListItem> = ArrayList() private var items: List<FilterListItem> = ArrayList()
@ -80,13 +73,7 @@ class FilterAdapter @Inject constructor(
newView, false, locale, activity, inventory, colorProvider, null) newView, false, locale, activity, inventory, colorProvider, null)
ACTION -> ActionViewHolder(activity, newView, null) ACTION -> ActionViewHolder(activity, newView, null)
SEPARATOR -> SeparatorViewHolder(newView) SEPARATOR -> SeparatorViewHolder(newView)
SUBHEADER -> SubheaderViewHolder( SUBHEADER -> SubheaderViewHolder(newView, subheaderClickHandler)
newView,
activity as AppCompatActivity,
preferences,
googleTaskDao,
caldavDao,
localBroadcastManager)
} }
newView newView
} }
@ -104,7 +91,8 @@ class FilterAdapter @Inject constructor(
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) ACTION -> (viewHolder as ActionViewHolder).bind(item)
SUBHEADER -> (viewHolder as SubheaderViewHolder).bind((item as NavigationDrawerSubheader)) SUBHEADER ->
(viewHolder as SubheaderViewHolder).bind((item as NavigationDrawerSubheader))
else -> {} else -> {}
} }
return view return view

@ -1,6 +1,6 @@
package com.todoroo.astrid.adapter package com.todoroo.astrid.adapter
import android.app.Activity import android.content.Context
import android.view.View import android.view.View
import android.widget.CheckedTextView import android.widget.CheckedTextView
import android.widget.ImageView import android.widget.ImageView
@ -22,13 +22,14 @@ import org.tasks.themes.CustomIcons.getIconResId
import org.tasks.themes.DrawableUtil import org.tasks.themes.DrawableUtil
class FilterViewHolder internal constructor( class FilterViewHolder internal constructor(
itemView: View, itemView: View,
private val navigationDrawer: Boolean, private val navigationDrawer: Boolean,
private val locale: Locale, private val locale: Locale,
private val activity: Activity, private val context: Context,
private val inventory: Inventory, private val inventory: Inventory,
private val colorProvider: ColorProvider, private val colorProvider: ColorProvider,
private val onClick: ((FilterListItem?) -> Unit)?) : RecyclerView.ViewHolder(itemView) { private val onClick: ((FilterListItem?) -> Unit)?
) : RecyclerView.ViewHolder(itemView) {
private val row: View private val row: View
private val text: CheckedTextView private val text: CheckedTextView
@ -63,7 +64,7 @@ class FilterViewHolder internal constructor(
text.isChecked = selected text.isChecked = selected
} }
val icon = getIcon(filter) val icon = getIcon(filter)
this.icon.setImageDrawable(DrawableUtil.getWrapped(activity, icon)) this.icon.setImageDrawable(DrawableUtil.getWrapped(context, icon))
this.icon.drawable.setTint(getColor(filter)) this.icon.drawable.setTint(getColor(filter))
text.text = filter.listingTitle text.text = filter.listingTitle
if (count == null || count == 0) { if (count == null || count == 0) {
@ -94,7 +95,7 @@ class FilterViewHolder internal constructor(
return color.primaryColor return color.primaryColor
} }
} }
return activity.getColor(R.color.text_primary) return context.getColor(R.color.text_primary)
} }
private fun getIcon(filter: FilterListItem): Int { private fun getIcon(filter: FilterListItem): Int {

@ -9,7 +9,6 @@ import android.app.Activity
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
@ -18,14 +17,10 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import org.tasks.LocalBroadcastManager
import org.tasks.activities.DragAndDropDiffer import org.tasks.activities.DragAndDropDiffer
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.data.CaldavDao
import org.tasks.data.GoogleTaskDao
import org.tasks.filters.NavigationDrawerSubheader import org.tasks.filters.NavigationDrawerSubheader
import org.tasks.locale.Locale import org.tasks.locale.Locale
import org.tasks.preferences.Preferences
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import java.util.* import java.util.*
import java.util.concurrent.Executors import java.util.concurrent.Executors
@ -33,15 +28,13 @@ import javax.inject.Inject
import kotlin.math.max import kotlin.math.max
class NavigationDrawerAdapter @Inject constructor( class NavigationDrawerAdapter @Inject constructor(
private val activity: Activity, private val activity: Activity,
private val locale: Locale, private val locale: Locale,
private val inventory: Inventory, private val inventory: Inventory,
private val colorProvider: ColorProvider, private val colorProvider: ColorProvider,
private val preferences: Preferences, private val subheaderClickHandler: SubheaderClickHandler,
private val googleTaskDao: GoogleTaskDao, ) : RecyclerView.Adapter<RecyclerView.ViewHolder>(),
private val caldavDao: CaldavDao, DragAndDropDiffer<FilterListItem, MutableList<FilterListItem>> {
private val localBroadcastManager: LocalBroadcastManager)
: RecyclerView.Adapter<RecyclerView.ViewHolder>(), DragAndDropDiffer<FilterListItem, MutableList<FilterListItem>> {
private lateinit var onClick: (FilterListItem?) -> Unit private lateinit var onClick: (FilterListItem?) -> Unit
private var selected: Filter? = null private var selected: Filter? = null
@ -83,19 +76,14 @@ class NavigationDrawerAdapter @Inject constructor(
return when (type) { return when (type) {
FilterListItem.Type.ITEM -> FilterViewHolder( FilterListItem.Type.ITEM -> FilterViewHolder(
view, true, locale, activity, inventory, colorProvider) { onClickFilter(it) } view, true, locale, activity, inventory, colorProvider) { onClickFilter(it) }
FilterListItem.Type.SUBHEADER -> SubheaderViewHolder( FilterListItem.Type.SUBHEADER -> SubheaderViewHolder(view, subheaderClickHandler)
view,
activity as AppCompatActivity,
preferences,
googleTaskDao,
caldavDao,
localBroadcastManager)
FilterListItem.Type.ACTION -> ActionViewHolder(activity, view) { onClickFilter(it) } FilterListItem.Type.ACTION -> ActionViewHolder(activity, view) { onClickFilter(it) }
else -> SeparatorViewHolder(view) else -> SeparatorViewHolder(view)
} }
} }
private fun onClickFilter(filter: FilterListItem?) = onClick(if (filter == selected) null else filter) private fun onClickFilter(filter: FilterListItem?) =
onClick(if (filter == selected) null else filter)
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val item = getItem(position) val item = getItem(position)

@ -0,0 +1,55 @@
package com.todoroo.astrid.adapter
import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager
import org.tasks.data.CaldavDao
import org.tasks.data.GoogleTaskDao
import org.tasks.dialogs.NewFilterDialog
import org.tasks.filters.NavigationDrawerSubheader
import org.tasks.filters.NavigationDrawerSubheader.SubheaderType.*
import org.tasks.preferences.MainPreferences
import org.tasks.preferences.Preferences
import org.tasks.ui.NavigationDrawerFragment
import javax.inject.Inject
class SubheaderClickHandler @Inject constructor(
private val activity: Activity,
private val preferences: Preferences,
private val googleTaskDao: GoogleTaskDao,
private val caldavDao: CaldavDao,
private val localBroadcastManager: LocalBroadcastManager,
): SubheaderViewHolder.ClickHandler {
override fun onClick(subheader: NavigationDrawerSubheader) {
(activity as AppCompatActivity).lifecycleScope.launch {
val collapsed = !subheader.isCollapsed
when (subheader.subheaderType) {
PREFERENCE -> preferences.setBoolean(subheader.id.toInt(), collapsed)
GOOGLE_TASKS -> googleTaskDao.setCollapsed(subheader.id, collapsed)
CALDAV, TASKS, ETESYNC -> caldavDao.setCollapsed(subheader.id, collapsed)
}
localBroadcastManager.broadcastRefreshList()
}
}
override fun onAdd(subheader: NavigationDrawerSubheader) {
when (subheader.addIntentRc) {
NavigationDrawerFragment.REQUEST_NEW_FILTER ->
NewFilterDialog.newFilterDialog().show(
(activity as AppCompatActivity).supportFragmentManager,
FRAG_TAG_NEW_FILTER
)
else -> activity.startActivityForResult(subheader.addIntent, subheader.addIntentRc)
}
}
override fun showError() =
activity.startActivity(Intent(activity, MainPreferences::class.java))
companion object {
private const val FRAG_TAG_NEW_FILTER = "frag_tag_new_filter"
}
}

@ -1,77 +1,68 @@
package com.todoroo.astrid.adapter package com.todoroo.astrid.adapter
import android.content.Intent
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import kotlinx.coroutines.launch
import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.data.CaldavDao
import org.tasks.data.GoogleTaskDao
import org.tasks.databinding.FilterAdapterSubheaderBinding import org.tasks.databinding.FilterAdapterSubheaderBinding
import org.tasks.filters.NavigationDrawerSubheader import org.tasks.filters.NavigationDrawerSubheader
import org.tasks.filters.NavigationDrawerSubheader.SubheaderType import org.tasks.filters.NavigationDrawerSubheader.SubheaderType.ETESYNC
import org.tasks.preferences.MainPreferences
import org.tasks.preferences.Preferences
import org.tasks.themes.DrawableUtil
internal class SubheaderViewHolder( internal class SubheaderViewHolder(
itemView: View, itemView: View,
private val activity: AppCompatActivity, private val clickHandler: ClickHandler,
private val preferences: Preferences, ): RecyclerView.ViewHolder(itemView) {
private val googleTaskDao: GoogleTaskDao,
private val caldavDao: CaldavDao, interface ClickHandler {
private val localBroadcastManager: LocalBroadcastManager) fun onClick(subheader: NavigationDrawerSubheader)
: RecyclerView.ViewHolder(itemView) { fun onAdd(subheader: NavigationDrawerSubheader)
fun showError()
}
private val text: TextView private val text: TextView
private val chevron: ImageView
private val add: ImageView
private val errorIcon: ImageView private val errorIcon: ImageView
private var rotation = 0f
private lateinit var subheader: NavigationDrawerSubheader private lateinit var subheader: NavigationDrawerSubheader
private fun onClick() {
activity.lifecycleScope.launch {
val collapsed = !subheader.isCollapsed
when (subheader.subheaderType) {
SubheaderType.PREFERENCE -> preferences.setBoolean(subheader.id.toInt(), collapsed)
SubheaderType.GOOGLE_TASKS -> googleTaskDao.setCollapsed(subheader.id, collapsed)
SubheaderType.CALDAV, SubheaderType.TASKS, SubheaderType.ETESYNC ->
caldavDao.setCollapsed(subheader.id, collapsed)
}
localBroadcastManager.broadcastRefreshList()
}
}
fun bind(subheader: NavigationDrawerSubheader) { fun bind(subheader: NavigationDrawerSubheader) {
add.isVisible = subheader.addIntent != null
this.subheader = subheader this.subheader = subheader
text.text = subheader.listingTitle text.text = subheader.listingTitle
when { when {
subheader.error || subheader.subheaderType == SubheaderType.ETESYNC -> subheader.error || subheader.subheaderType == ETESYNC ->
with(errorIcon) { with(errorIcon) {
setColorFilter(ContextCompat.getColor(activity, R.color.overdue)) setColorFilter(ContextCompat.getColor(itemView.context, R.color.overdue))
visibility = View.VISIBLE visibility = View.VISIBLE
} }
else -> errorIcon.visibility = View.GONE else -> errorIcon.visibility = View.GONE
} }
DrawableUtil.setRightDrawable( rotation = if (subheader.isCollapsed) 180f else 0f
itemView.context, chevron.rotation = rotation
text, }
if (subheader.isCollapsed) R.drawable.ic_keyboard_arrow_down_black_18dp else R.drawable.ic_keyboard_arrow_up_black_18dp)
private fun rotate() {
rotation = if (rotation == 0f) 180f else 0f
chevron.animate().rotation(rotation).setDuration(250).start()
} }
init { init {
FilterAdapterSubheaderBinding.bind(itemView).let { FilterAdapterSubheaderBinding.bind(itemView).let {
text = it.text text = it.text
errorIcon = it.iconError errorIcon = it.iconError
it.subheaderRow.setOnClickListener { onClick() } chevron = it.chevron
} add = it.addItem
errorIcon.setOnClickListener { it.subheaderRow.setOnClickListener {
activity.startActivity(Intent(activity, MainPreferences::class.java)) rotate()
clickHandler.onClick(subheader)
}
} }
errorIcon.setOnClickListener { clickHandler.showError() }
add.setOnClickListener { clickHandler.onAdd(subheader) }
} }
} }

@ -24,13 +24,10 @@ import org.tasks.R
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity import org.tasks.caldav.BaseCaldavCalendarSettingsActivity
import org.tasks.data.* import org.tasks.data.*
import org.tasks.databinding.ActivityTagOrganizerBinding import org.tasks.databinding.ActivityTagOrganizerBinding
import org.tasks.dialogs.NewFilterDialog.Companion.newFilterDialog
import org.tasks.filters.FilterProvider import org.tasks.filters.FilterProvider
import org.tasks.filters.NavigationDrawerAction
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.injection.ThemedInjectingAppCompatActivity import org.tasks.injection.ThemedInjectingAppCompatActivity
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import org.tasks.ui.NavigationDrawerFragment.Companion.REQUEST_NEW_FILTER
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
@ -96,39 +93,31 @@ class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolba
} }
private fun onClick(item: FilterListItem?) { private fun onClick(item: FilterListItem?) {
if (item is NavigationDrawerAction) { when (item) {
when (item.requestCode) { is GtasksFilter ->
REQUEST_NEW_FILTER -> Intent(this, GoogleTaskListSettingsActivity::class.java)
newFilterDialog().show(supportFragmentManager, FRAG_TAG_NEW_FILTER) .putExtra(GoogleTaskListSettingsActivity.EXTRA_STORE_DATA, item.list)
else -> startActivity(item.intent) .apply(this::startActivity)
} is CaldavFilter ->
} else { lifecycleScope.launch {
when (item) { caldavDao.getAccountByUuid(item.account)?.let {
is GtasksFilter -> Intent(this@NavigationDrawerCustomization, it.listSettingsClass())
Intent(this, GoogleTaskListSettingsActivity::class.java) .putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR, item.calendar)
.putExtra(GoogleTaskListSettingsActivity.EXTRA_STORE_DATA, item.list) .apply { startActivity(this) }
.apply(this::startActivity)
is CaldavFilter ->
lifecycleScope.launch {
caldavDao.getAccountByUuid(item.account)?.let {
Intent(this@NavigationDrawerCustomization, it.listSettingsClass())
.putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_CALENDAR, item.calendar)
.apply { startActivity(this) }
}
} }
is CustomFilter -> }
Intent(this, FilterSettingsActivity::class.java) is CustomFilter ->
.putExtra(FilterSettingsActivity.TOKEN_FILTER, item) Intent(this, FilterSettingsActivity::class.java)
.apply(this::startActivity) .putExtra(FilterSettingsActivity.TOKEN_FILTER, item)
is TagFilter -> .apply(this::startActivity)
Intent(this, TagSettingsActivity::class.java) is TagFilter ->
.putExtra(TagSettingsActivity.EXTRA_TAG_DATA, item.tagData) Intent(this, TagSettingsActivity::class.java)
.apply(this::startActivity) .putExtra(TagSettingsActivity.EXTRA_TAG_DATA, item.tagData)
is PlaceFilter -> .apply(this::startActivity)
Intent(this, PlaceSettingsActivity::class.java) is PlaceFilter ->
.putExtra(PlaceSettingsActivity.EXTRA_PLACE, item.place as Parcelable) Intent(this, PlaceSettingsActivity::class.java)
.apply(this::startActivity) .putExtra(PlaceSettingsActivity.EXTRA_PLACE, item.place as Parcelable)
} .apply(this::startActivity)
} }
} }
@ -251,6 +240,5 @@ class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolba
companion object { companion object {
private val NO_MOVEMENT = makeMovementFlags(0, 0) private val NO_MOVEMENT = makeMovementFlags(0, 0)
private val ALLOW_DRAGGING = makeMovementFlags(UP or DOWN, 0) private val ALLOW_DRAGGING = makeMovementFlags(UP or DOWN, 0)
private const val FRAG_TAG_NEW_FILTER = "frag_tag_new_filter"
} }
} }

@ -64,7 +64,10 @@ class FilterProvider @Inject constructor(
false, false,
collapsed, collapsed,
SubheaderType.PREFERENCE, SubheaderType.PREFERENCE,
R.string.p_collapse_debug.toLong())) R.string.p_collapse_debug.toLong(),
0,
null,
))
.apply { if (collapsed) return this } .apply { if (collapsed) return this }
.plus(listOf( .plus(listOf(
BuiltInFilterExposer.getNoListFilter(), BuiltInFilterExposer.getNoListFilter(),
@ -91,18 +94,14 @@ class FilterProvider @Inject constructor(
false, false,
collapsed, collapsed,
SubheaderType.PREFERENCE, SubheaderType.PREFERENCE,
R.string.p_collapse_filters.toLong())) R.string.p_collapse_filters.toLong(),
NavigationDrawerFragment.REQUEST_NEW_FILTER,
if (showCreate) Intent() else null))
.apply { if (collapsed) return this } .apply { if (collapsed) return this }
.plusAllIf(showBuiltIn) { .plusAllIf(showBuiltIn) {
builtInFilterExposer.filters() builtInFilterExposer.filters()
} }
.plus(filterDao.getFilters().map(::CustomFilter).sort()) .plus(filterDao.getFilters().map(::CustomFilter).sort())
.plusIf(showCreate) {
NavigationDrawerAction(
context.getString(R.string.add_filter),
R.drawable.ic_outline_add_24px,
NavigationDrawerFragment.REQUEST_NEW_FILTER)
}
} }
private suspend fun addTags(showCreate: Boolean): List<FilterListItem> = private suspend fun addTags(showCreate: Boolean): List<FilterListItem> =
@ -116,7 +115,13 @@ class FilterProvider @Inject constructor(
false, false,
collapsed, collapsed,
SubheaderType.PREFERENCE, SubheaderType.PREFERENCE,
R.string.p_collapse_tags.toLong())) R.string.p_collapse_tags.toLong(),
NavigationDrawerFragment.REQUEST_NEW_LIST,
if (showCreate) {
Intent(context, TagSettingsActivity::class.java)
} else {
null
}))
.apply { if (collapsed) return this } .apply { if (collapsed) return this }
.plus(tagDataDao.getTagFilters() .plus(tagDataDao.getTagFilters()
.filterIf(preferences.getBoolean(R.string.p_tags_hide_unused, false)) { .filterIf(preferences.getBoolean(R.string.p_tags_hide_unused, false)) {
@ -124,13 +129,6 @@ class FilterProvider @Inject constructor(
} }
.map(TagFilters::toTagFilter) .map(TagFilters::toTagFilter)
.sort()) .sort())
.plusIf(showCreate) {
NavigationDrawerAction(
context.getString(R.string.new_tag),
R.drawable.ic_outline_add_24px,
Intent(context, TagSettingsActivity::class.java),
NavigationDrawerFragment.REQUEST_NEW_LIST)
}
} }
private suspend fun addPlaces(showCreate: Boolean): List<FilterListItem> = private suspend fun addPlaces(showCreate: Boolean): List<FilterListItem> =
@ -144,7 +142,13 @@ class FilterProvider @Inject constructor(
false, false,
collapsed, collapsed,
SubheaderType.PREFERENCE, SubheaderType.PREFERENCE,
R.string.p_collapse_locations.toLong())) R.string.p_collapse_locations.toLong(),
NavigationDrawerFragment.REQUEST_NEW_PLACE,
if (showCreate) {
Intent(context, LocationPickerActivity::class.java)
} else {
null
}))
.apply { if (collapsed) return this } .apply { if (collapsed) return this }
.plus(locationDao.getPlaceFilters() .plus(locationDao.getPlaceFilters()
.filterIf(preferences.getBoolean(R.string.p_places_hide_unused, false)) { .filterIf(preferences.getBoolean(R.string.p_places_hide_unused, false)) {
@ -152,13 +156,6 @@ class FilterProvider @Inject constructor(
} }
.map(LocationFilters::toLocationFilter) .map(LocationFilters::toLocationFilter)
.sort()) .sort())
.plusIf(showCreate) {
NavigationDrawerAction(
context.getString(R.string.add_place),
R.drawable.ic_outline_add_24px,
Intent(context, LocationPickerActivity::class.java),
NavigationDrawerFragment.REQUEST_NEW_PLACE)
}
} }
private suspend fun getAllFilters(showCreate: Boolean = true, showBuiltIn: Boolean = true): List<FilterListItem> = private suspend fun getAllFilters(showCreate: Boolean = true, showBuiltIn: Boolean = true): List<FilterListItem> =
@ -216,20 +213,19 @@ class FilterProvider @Inject constructor(
account.error?.isNotBlank() ?: false, account.error?.isNotBlank() ?: false,
account.isCollapsed, account.isCollapsed,
SubheaderType.GOOGLE_TASKS, SubheaderType.GOOGLE_TASKS,
account.id)) account.id,
NavigationDrawerFragment.REQUEST_NEW_LIST,
if (showCreate) {
Intent(context, GoogleTaskListSettingsActivity::class.java)
.putExtra(GoogleTaskListSettingsActivity.EXTRA_ACCOUNT, account)
} else {
null
}))
.apply { if (account.isCollapsed) return this } .apply { if (account.isCollapsed) return this }
.plus(googleTaskListDao .plus(googleTaskListDao
.getGoogleTaskFilters(account.account!!) .getGoogleTaskFilters(account.account!!)
.map(GoogleTaskFilters::toGtasksFilter) .map(GoogleTaskFilters::toGtasksFilter)
.sort()) .sort())
.plusIf(showCreate) {
NavigationDrawerAction(
context.getString(R.string.new_list),
R.drawable.ic_outline_add_24px,
Intent(context, GoogleTaskListSettingsActivity::class.java)
.putExtra(GoogleTaskListSettingsActivity.EXTRA_ACCOUNT, account),
NavigationDrawerFragment.REQUEST_NEW_LIST)
}
private suspend fun caldavFilters(showCreate: Boolean = true): List<FilterListItem> = private suspend fun caldavFilters(showCreate: Boolean = true): List<FilterListItem> =
caldavDao.getAccounts() caldavDao.getAccounts()
@ -252,20 +248,23 @@ class FilterProvider @Inject constructor(
account.isEteSyncAccount -> SubheaderType.ETESYNC account.isEteSyncAccount -> SubheaderType.ETESYNC
else -> SubheaderType.CALDAV else -> SubheaderType.CALDAV
}, },
account.id)) account.id,
NavigationDrawerFragment.REQUEST_NEW_LIST,
if (showCreate) {
Intent(context, account.listSettingsClass())
.putExtra(
BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_ACCOUNT,
account
)
} else {
null
}
))
.apply { if (account.isCollapsed) return this } .apply { if (account.isCollapsed) return this }
.plus(caldavDao .plus(caldavDao
.getCaldavFilters(account.uuid!!) .getCaldavFilters(account.uuid!!)
.map(CaldavFilters::toCaldavFilter) .map(CaldavFilters::toCaldavFilter)
.sort()) .sort())
.plusIf(showCreate) {
NavigationDrawerAction(
context.getString(R.string.new_list),
R.drawable.ic_outline_add_24px,
Intent(context, account.listSettingsClass())
.putExtra(BaseCaldavCalendarSettingsActivity.EXTRA_CALDAV_ACCOUNT, account),
NavigationDrawerFragment.REQUEST_NEW_LIST)
}
companion object { companion object {
private val COMPARATOR = Comparator<Filter> { f1, f2 -> private val COMPARATOR = Comparator<Filter> { f1, f2 ->

@ -1,8 +1,10 @@
package org.tasks.filters; package org.tasks.filters;
import android.content.Intent;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.os.ParcelCompat; import androidx.core.os.ParcelCompat;
import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.api.FilterListItem;
@ -29,15 +31,27 @@ public class NavigationDrawerSubheader extends FilterListItem {
private boolean collapsed; private boolean collapsed;
private SubheaderType subheaderType; private SubheaderType subheaderType;
private long id; private long id;
@Nullable
private Intent addIntent;
private int addIntentRc;
private NavigationDrawerSubheader() {} private NavigationDrawerSubheader() {}
public NavigationDrawerSubheader( public NavigationDrawerSubheader(
String listingTitle, boolean error, boolean collapsed, SubheaderType subheaderType, long id) { String listingTitle,
boolean error,
boolean collapsed,
SubheaderType subheaderType,
long id,
int addIntentRc,
@Nullable Intent addIntent
) {
this.error = error; this.error = error;
this.collapsed = collapsed; this.collapsed = collapsed;
this.subheaderType = subheaderType; this.subheaderType = subheaderType;
this.id = id; this.id = id;
this.addIntent = addIntent;
this.addIntentRc = addIntentRc;
this.listingTitle = listingTitle; this.listingTitle = listingTitle;
} }
@ -49,6 +63,15 @@ public class NavigationDrawerSubheader extends FilterListItem {
return collapsed; return collapsed;
} }
@Nullable
public Intent getAddIntent() {
return addIntent;
}
public int getAddIntentRc() {
return addIntentRc;
}
public SubheaderType getSubheaderType() { public SubheaderType getSubheaderType() {
return subheaderType; return subheaderType;
} }
@ -60,13 +83,15 @@ public class NavigationDrawerSubheader extends FilterListItem {
collapsed = ParcelCompat.readBoolean(source); collapsed = ParcelCompat.readBoolean(source);
subheaderType = (SubheaderType) source.readSerializable(); subheaderType = (SubheaderType) source.readSerializable();
id = source.readLong(); id = source.readLong();
addIntent = source.readParcelable(getClass().getClassLoader());
addIntentRc = source.readInt();
} }
@Override @Override
public boolean areItemsTheSame(@NonNull FilterListItem other) { public boolean areItemsTheSame(@NonNull FilterListItem other) {
return other instanceof NavigationDrawerSubheader return other instanceof NavigationDrawerSubheader
&& subheaderType == ((NavigationDrawerSubheader) other).getSubheaderType() && subheaderType == ((NavigationDrawerSubheader) other).getSubheaderType()
&& id == ((NavigationDrawerSubheader) other).getId(); && id == other.getId();
} }
@Override @Override
@ -113,6 +138,8 @@ public class NavigationDrawerSubheader extends FilterListItem {
ParcelCompat.writeBoolean(dest, collapsed); ParcelCompat.writeBoolean(dest, collapsed);
dest.writeSerializable(subheaderType); dest.writeSerializable(subheaderType);
dest.writeLong(id); dest.writeLong(id);
dest.writeParcelable(addIntent, 0);
dest.writeInt(addIntentRc);
} }
@Override @Override

@ -27,7 +27,6 @@ import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.billing.PurchaseActivity import org.tasks.billing.PurchaseActivity
import org.tasks.data.TaskDao import org.tasks.data.TaskDao
import org.tasks.dialogs.NewFilterDialog
import org.tasks.extensions.Context.openUri import org.tasks.extensions.Context.openUri
import org.tasks.filters.FilterProvider import org.tasks.filters.FilterProvider
import org.tasks.filters.NavigationDrawerAction import org.tasks.filters.NavigationDrawerAction
@ -96,8 +95,6 @@ class NavigationDrawerFragment : BottomSheetDialogFragment() {
REQUEST_PURCHASE -> REQUEST_PURCHASE ->
startActivity(Intent(context, PurchaseActivity::class.java)) startActivity(Intent(context, PurchaseActivity::class.java))
REQUEST_DONATE -> context?.openUri(R.string.url_donate) REQUEST_DONATE -> context?.openUri(R.string.url_donate)
REQUEST_NEW_FILTER -> NewFilterDialog.newFilterDialog()
.show(parentFragmentManager, FRAG_TAG_NEW_FILTER)
else -> activity?.startActivityForResult(item.intent, item.requestCode) else -> activity?.startActivityForResult(item.intent, item.requestCode)
} }
} }
@ -154,7 +151,6 @@ class NavigationDrawerFragment : BottomSheetDialogFragment() {
const val REQUEST_DONATE = 10103 const val REQUEST_DONATE = 10103
const val REQUEST_NEW_PLACE = 10104 const val REQUEST_NEW_PLACE = 10104
const val REQUEST_NEW_FILTER = 101015 const val REQUEST_NEW_FILTER = 101015
private const val FRAG_TAG_NEW_FILTER = "frag_tag_new_filter"
private const val EXTRA_SELECTED = "extra_selected" private const val EXTRA_SELECTED = "extra_selected"
fun newNavigationDrawer(selected: Filter?): NavigationDrawerFragment { fun newNavigationDrawer(selected: Filter?): NavigationDrawerFragment {

@ -7,6 +7,8 @@
android:id="@+id/subheader_row" android:id="@+id/subheader_row"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:focusable="true" android:focusable="true"
android:paddingStart="0dp"
android:paddingEnd="@dimen/half_keyline_first"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<View <View
@ -16,41 +18,64 @@
android:layout_gravity="top" /> android:layout_gravity="top" />
<ImageView <ImageView
android:id="@+id/icon_error" android:id="@+id/chevron"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true" android:padding="@dimen/half_keyline_first"
android:layout_alignBottom="@id/text" android:src="@drawable/ic_keyboard_arrow_down_black_24dp"
android:layout_below="@id/divider" app:tint="@color/icon_tint_with_alpha"
android:paddingTop="8dp" android:layout_toStartOf="@id/add_item"
android:paddingBottom="8dp" android:layout_alignWithParentIfMissing="true"
android:paddingStart="0dp" android:layout_alignBottom="@id/text"
android:background="@null" android:layout_below="@id/divider" />
android:paddingEnd="@dimen/keyline_first"
android:alpha="@dimen/alpha_secondary" <ImageView
android:clickable="true" android:id="@+id/add_item"
android:focusable="true" android:background="?attr/selectableItemBackgroundBorderless"
android:scaleType="center" android:layout_width="wrap_content"
android:src="@drawable/ic_outline_sync_problem_24px" android:layout_height="wrap_content"
app:tint="@color/overdue" android:padding="@dimen/half_keyline_first"
android:visibility="gone" /> android:layout_alignParentEnd="true"
app:tint="@color/icon_tint_with_alpha"
android:layout_toStartOf="@id/icon_error"
android:layout_alignWithParentIfMissing="true"
android:layout_alignBottom="@id/text"
android:layout_below="@id/divider"
android:src="@drawable/ic_outline_add_24px" />
<ImageView
android:id="@+id/icon_error"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignBottom="@id/text"
android:layout_below="@id/divider"
android:padding="@dimen/half_keyline_first"
android:background="@null"
android:alpha="@dimen/alpha_secondary"
android:clickable="true"
android:focusable="true"
android:scaleType="center"
android:src="@drawable/ic_outline_sync_problem_24px"
app:tint="@color/overdue"
android:visibility="gone" />
<TextView <TextView
android:id="@+id/text" android:id="@+id/text"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="end" android:ellipsize="end"
android:background="@null" android:background="@null"
android:textColor="@color/text_secondary" android:textColor="@color/text_secondary"
android:fontFamily="@string/font_fontFamily_medium" android:fontFamily="@string/font_fontFamily_medium"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_below="@id/divider" android:layout_below="@id/divider"
android:gravity="start|center_vertical" android:layout_toStartOf="@id/chevron"
android:drawableTint="@color/icon_tint_with_alpha" android:gravity="start|center_vertical"
android:singleLine="true" android:singleLine="true"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textSize="14sp" android:textSize="14sp"
android:padding="@dimen/keyline_first" android:padding="@dimen/keyline_first"
tools:ignore="UnusedAttribute" /> tools:ignore="UnusedAttribute" />
</RelativeLayout> </RelativeLayout>

@ -365,7 +365,6 @@
<string name="share">مشاركة</string> <string name="share">مشاركة</string>
<string name="shortcut_pick_time">اختر الوقت</string> <string name="shortcut_pick_time">اختر الوقت</string>
<string name="chip_appearance_icon_only">الأيقونة فقط</string> <string name="chip_appearance_icon_only">الأيقونة فقط</string>
<string name="add_place">أضف مكانًا</string>
<string name="hide_unused_places">أخفِ الأماكن الغير مستخدمة</string> <string name="hide_unused_places">أخفِ الأماكن الغير مستخدمة</string>
<string name="color_wheel">عجلة الألوان</string> <string name="color_wheel">عجلة الألوان</string>
<string name="troubleshooting">استكشاف الأخطاء وإصلاحها</string> <string name="troubleshooting">استكشاف الأخطاء وإصلاحها</string>

@ -461,7 +461,6 @@
<string name="add_filter">Добавяне на филтър</string> <string name="add_filter">Добавяне на филтър</string>
<string name="add_tags">Добавяне на етикети</string> <string name="add_tags">Добавяне на етикети</string>
<string name="error_adding_account">Грешка: %s</string> <string name="error_adding_account">Грешка: %s</string>
<string name="add_place">Добавяне на място</string>
<string name="place_settings">Настройки на местата</string> <string name="place_settings">Настройки на местата</string>
<string name="places">Места</string> <string name="places">Места</string>
<string name="no_start_date">Без начална дата</string> <string name="no_start_date">Без начална дата</string>

@ -491,7 +491,6 @@
<string name="chip_appearance_icon_only">Pouze ikona</string> <string name="chip_appearance_icon_only">Pouze ikona</string>
<string name="chip_appearance_text_only">Pouze text</string> <string name="chip_appearance_text_only">Pouze text</string>
<string name="chip_appearance_text_and_icon">Text a ikona</string> <string name="chip_appearance_text_and_icon">Text a ikona</string>
<string name="add_place">Přidat místo</string>
<string name="hide_unused_places">Skrýt nevyužitá místa</string> <string name="hide_unused_places">Skrýt nevyužitá místa</string>
<string name="hide_unused_tags">Skrýt nevyužité štítky</string> <string name="hide_unused_tags">Skrýt nevyužité štítky</string>
<string name="navigation_drawer">Postranní nabídka</string> <string name="navigation_drawer">Postranní nabídka</string>

@ -147,7 +147,6 @@
<string name="chip_appearance_icon_only">Kun ikon</string> <string name="chip_appearance_icon_only">Kun ikon</string>
<string name="chip_appearance_text_only">Kun tekst</string> <string name="chip_appearance_text_only">Kun tekst</string>
<string name="chip_appearance_text_and_icon">Tekst og ikon</string> <string name="chip_appearance_text_and_icon">Tekst og ikon</string>
<string name="add_place">Tilføj sted</string>
<string name="hide_unused_places">Skjul ubrugte steder</string> <string name="hide_unused_places">Skjul ubrugte steder</string>
<string name="hide_unused_tags">Skjul ubrugte tags</string> <string name="hide_unused_tags">Skjul ubrugte tags</string>
<string name="navigation_drawer">Navigationsmenu</string> <string name="navigation_drawer">Navigationsmenu</string>

@ -496,7 +496,6 @@
<string name="navigation_drawer">Navigationsmenü</string> <string name="navigation_drawer">Navigationsmenü</string>
<string name="hide_unused_tags">Ungenutzte Schlagwörter ausblenden</string> <string name="hide_unused_tags">Ungenutzte Schlagwörter ausblenden</string>
<string name="hide_unused_places">Ungenutzte Orte ausblenden</string> <string name="hide_unused_places">Ungenutzte Orte ausblenden</string>
<string name="add_place">Ort hinzufügen</string>
<string name="menu_discard_changes">Änderungen verwerfen</string> <string name="menu_discard_changes">Änderungen verwerfen</string>
<string name="chip_appearance_text_and_icon">Text und Symbol</string> <string name="chip_appearance_text_and_icon">Text und Symbol</string>
<string name="chip_appearance_text_only">Nur Text</string> <string name="chip_appearance_text_only">Nur Text</string>

@ -495,7 +495,6 @@
<string name="navigation_drawer">Cajón de navegación</string> <string name="navigation_drawer">Cajón de navegación</string>
<string name="hide_unused_tags">Ocultar etiquetas no utilizadas</string> <string name="hide_unused_tags">Ocultar etiquetas no utilizadas</string>
<string name="hide_unused_places">Ocultar lugares inusuales</string> <string name="hide_unused_places">Ocultar lugares inusuales</string>
<string name="add_place">Añadir lugar</string>
<string name="menu_discard_changes">Descartar los cambios</string> <string name="menu_discard_changes">Descartar los cambios</string>
<string name="chip_appearance_text_and_icon">Texto e icono</string> <string name="chip_appearance_text_and_icon">Texto e icono</string>
<string name="chip_appearance_text_only">Sólo texto</string> <string name="chip_appearance_text_only">Sólo texto</string>

@ -495,7 +495,6 @@
<string name="navigation_drawer">Nabigazio tiradera</string> <string name="navigation_drawer">Nabigazio tiradera</string>
<string name="hide_unused_tags">Ezkutatu erabili gabeko etiketak</string> <string name="hide_unused_tags">Ezkutatu erabili gabeko etiketak</string>
<string name="hide_unused_places">Ezkutatu erabili gabeko tokiak</string> <string name="hide_unused_places">Ezkutatu erabili gabeko tokiak</string>
<string name="add_place">Gehitu tokia</string>
<string name="menu_discard_changes">Baztertu aldaketak</string> <string name="menu_discard_changes">Baztertu aldaketak</string>
<string name="chip_appearance_text_and_icon">Testua eta ikonoa</string> <string name="chip_appearance_text_and_icon">Testua eta ikonoa</string>
<string name="chip_appearance_text_only">Testua soilik</string> <string name="chip_appearance_text_only">Testua soilik</string>

@ -372,7 +372,6 @@
<string name="tasker_create_task">Luo tehtävä</string> <string name="tasker_create_task">Luo tehtävä</string>
<string name="tasker_list_notification">Ilmoituslista</string> <string name="tasker_list_notification">Ilmoituslista</string>
<string name="help">Apua</string> <string name="help">Apua</string>
<string name="add_place">Lisää paikka</string>
<string name="hide_unused_places">Piilota käyttämättömät paikat</string> <string name="hide_unused_places">Piilota käyttämättömät paikat</string>
<string name="hide_unused_tags">Piilota käyttämättömät tunnistimet</string> <string name="hide_unused_tags">Piilota käyttämättömät tunnistimet</string>
<string name="reinitialize_account">Uudelleenalustus</string> <string name="reinitialize_account">Uudelleenalustus</string>

@ -490,7 +490,6 @@
<string name="navigation_drawer">Tiroir de navigation</string> <string name="navigation_drawer">Tiroir de navigation</string>
<string name="hide_unused_tags">Masquer les étiquettes inutilisés</string> <string name="hide_unused_tags">Masquer les étiquettes inutilisés</string>
<string name="hide_unused_places">Masquer les lieux inutilisés</string> <string name="hide_unused_places">Masquer les lieux inutilisés</string>
<string name="add_place">Ajouter un lieu</string>
<string name="menu_discard_changes">Annuler les modifications</string> <string name="menu_discard_changes">Annuler les modifications</string>
<string name="chip_appearance_text_and_icon">Texte et icône</string> <string name="chip_appearance_text_and_icon">Texte et icône</string>
<string name="chip_appearance_text_only">Texte seul</string> <string name="chip_appearance_text_only">Texte seul</string>

@ -163,7 +163,6 @@
<string name="choose_synchronization_service">Odaberi platformu</string> <string name="choose_synchronization_service">Odaberi platformu</string>
<string name="not_signed_in">Nisi prijavljen/a</string> <string name="not_signed_in">Nisi prijavljen/a</string>
<string name="contact_developer">Kontaktiraj programera</string> <string name="contact_developer">Kontaktiraj programera</string>
<string name="add_place">Dodaj mjesto</string>
<string name="hide_unused_places">Sakrij nekorištena mjesta</string> <string name="hide_unused_places">Sakrij nekorištena mjesta</string>
<string name="manage_drawer">Upravljaj ladicom</string> <string name="manage_drawer">Upravljaj ladicom</string>
<string name="place_settings">Postavke mjesta</string> <string name="place_settings">Postavke mjesta</string>

@ -492,7 +492,6 @@
<string name="place_settings">Hely beállítások</string> <string name="place_settings">Hely beállítások</string>
<string name="hide_unused_tags">Használaton kívüli címkék elrejtése</string> <string name="hide_unused_tags">Használaton kívüli címkék elrejtése</string>
<string name="hide_unused_places">Használaton kívüli helyek elrejtése</string> <string name="hide_unused_places">Használaton kívüli helyek elrejtése</string>
<string name="add_place">Hely hozzáadása</string>
<string name="navigation_drawer">Hamburger menü</string> <string name="navigation_drawer">Hamburger menü</string>
<string name="menu_discard_changes">Módosítások elvetése</string> <string name="menu_discard_changes">Módosítások elvetése</string>
<string name="chip_appearance_text_and_icon">Szöveg és ikon</string> <string name="chip_appearance_text_and_icon">Szöveg és ikon</string>

@ -571,7 +571,6 @@
<string name="auto_dismiss_datetime_edit_summary">Tutup otomatis ketika mengambil dari tugas suntingan</string> <string name="auto_dismiss_datetime_edit_summary">Tutup otomatis ketika mengambil dari tugas suntingan</string>
<string name="auto_dismiss_datetime_list_summary">Tutup otomatis ketika mengambil dari daftar tugas</string> <string name="auto_dismiss_datetime_list_summary">Tutup otomatis ketika mengambil dari daftar tugas</string>
<string name="auto_dismiss_datetime">Tutup otomatis tabel tanggal dan waktu</string> <string name="auto_dismiss_datetime">Tutup otomatis tabel tanggal dan waktu</string>
<string name="add_place">Tambah tempat</string>
<string name="hide_unused_places">Sembunyikan tempat yang tidak digunakan</string> <string name="hide_unused_places">Sembunyikan tempat yang tidak digunakan</string>
<string name="place_settings">Pengaturan tempat</string> <string name="place_settings">Pengaturan tempat</string>
<string name="places">Tempat</string> <string name="places">Tempat</string>

@ -443,7 +443,6 @@
<string name="chip_appearance_icon_only">Solo icona</string> <string name="chip_appearance_icon_only">Solo icona</string>
<string name="chip_appearance_text_only">Solo testo</string> <string name="chip_appearance_text_only">Solo testo</string>
<string name="chip_appearance_text_and_icon">Testo e icona</string> <string name="chip_appearance_text_and_icon">Testo e icona</string>
<string name="add_place">Aggiungi luogo</string>
<string name="hide_unused_places">Nascondi luoghi non usati</string> <string name="hide_unused_places">Nascondi luoghi non usati</string>
<string name="hide_unused_tags">Nascondi etichette non usate</string> <string name="hide_unused_tags">Nascondi etichette non usate</string>
<string name="navigation_drawer">Menù laterale</string> <string name="navigation_drawer">Menù laterale</string>

@ -587,7 +587,6 @@
<string name="navigation_drawer">מגירת ניווט</string> <string name="navigation_drawer">מגירת ניווט</string>
<string name="hide_unused_tags">הסתרת תגיות שאינן בשימוש</string> <string name="hide_unused_tags">הסתרת תגיות שאינן בשימוש</string>
<string name="hide_unused_places">הסתרת מיקומים שאינם בשימוש</string> <string name="hide_unused_places">הסתרת מיקומים שאינם בשימוש</string>
<string name="add_place">הוספת מיקום</string>
<string name="auto_dismiss_datetime_summary">לסגור את בוחר התאריך והשעה לאחר בחירת תאריך או שעה</string> <string name="auto_dismiss_datetime_summary">לסגור את בוחר התאריך והשעה לאחר בחירת תאריך או שעה</string>
<string name="auto_dismiss_datetime_widget_summary">לסגור אוטומטית בעת בחירה מווידג׳ט</string> <string name="auto_dismiss_datetime_widget_summary">לסגור אוטומטית בעת בחירה מווידג׳ט</string>
<string name="auto_dismiss_datetime_edit">עריכת משימה</string> <string name="auto_dismiss_datetime_edit">עריכת משימה</string>

@ -512,7 +512,6 @@
<string name="error_adding_account">エラー:%s</string> <string name="error_adding_account">エラー:%s</string>
<string name="tasks_org_account">Tasks.org アカウント</string> <string name="tasks_org_account">Tasks.org アカウント</string>
<string name="copied_to_clipboard">%sをクリップボードにコピーしました</string> <string name="copied_to_clipboard">%sをクリップボードにコピーしました</string>
<string name="add_place">場所を追加</string>
<string name="hide_unused_places">使われていない場所を隠す</string> <string name="hide_unused_places">使われていない場所を隠す</string>
<string name="place_settings">場所の設定</string> <string name="place_settings">場所の設定</string>
<string name="places">場所</string> <string name="places">場所</string>

@ -536,7 +536,6 @@
<string name="auto_dismiss_datetime_edit">할일 수정</string> <string name="auto_dismiss_datetime_edit">할일 수정</string>
<string name="auto_dismiss_datetime_list">할일 목록</string> <string name="auto_dismiss_datetime_list">할일 목록</string>
<string name="auto_dismiss_datetime">일시 선택상자 닫기</string> <string name="auto_dismiss_datetime">일시 선택상자 닫기</string>
<string name="add_place">위치 추가하기</string>
<string name="whats_new">새 기능</string> <string name="whats_new">새 기능</string>
<string name="building_notifications">알림 생성하기</string> <string name="building_notifications">알림 생성하기</string>
<string name="widget_due_date_after_title">제목 다음</string> <string name="widget_due_date_after_title">제목 다음</string>

@ -700,7 +700,6 @@
<string name="add_filter">Pridėti filtrą</string> <string name="add_filter">Pridėti filtrą</string>
<string name="add_tags">Pridėti etiketes</string> <string name="add_tags">Pridėti etiketes</string>
<string name="auto_dismiss_datetime">Automatiškai uždaryti datos ir laiko parinkiklį</string> <string name="auto_dismiss_datetime">Automatiškai uždaryti datos ir laiko parinkiklį</string>
<string name="add_place">Pridėti vietą</string>
<string name="hide_unused_places">Slėpti nenaudojamas vietas</string> <string name="hide_unused_places">Slėpti nenaudojamas vietas</string>
<string name="hide_unused_tags">Slėpti nenaudojamas etiketes</string> <string name="hide_unused_tags">Slėpti nenaudojamas etiketes</string>
<string name="upgrade_blurb_2">Aš praleidau tūkstančius valandų dirbdamas su Tasks ir nemokamai skelbiu visą pirminį kodą internete. Kad galėčiau palaikyti savo darbą, kai kurioms funkcijoms reikalinga prenumerata</string> <string name="upgrade_blurb_2">Aš praleidau tūkstančius valandų dirbdamas su Tasks ir nemokamai skelbiu visą pirminį kodą internete. Kad galėčiau palaikyti savo darbą, kai kurioms funkcijoms reikalinga prenumerata</string>

@ -495,7 +495,6 @@
<string name="chip_appearance_icon_only">Kun ikon</string> <string name="chip_appearance_icon_only">Kun ikon</string>
<string name="chip_appearance_text_only">Kun tekst</string> <string name="chip_appearance_text_only">Kun tekst</string>
<string name="chip_appearance_text_and_icon">Tekst og ikon</string> <string name="chip_appearance_text_and_icon">Tekst og ikon</string>
<string name="add_place">Legg til sted</string>
<string name="more_notification_settings_summary">Ringetone, vibrering, og mer</string> <string name="more_notification_settings_summary">Ringetone, vibrering, og mer</string>
<string name="disable_battery_optimizations">Skru av batterisparing</string> <string name="disable_battery_optimizations">Skru av batterisparing</string>
<string name="notification_troubleshooting_summary">Trykk her hvis du har problemer med merknader</string> <string name="notification_troubleshooting_summary">Trykk her hvis du har problemer med merknader</string>

@ -490,7 +490,6 @@
<string name="navigation_drawer">Navigatie la</string> <string name="navigation_drawer">Navigatie la</string>
<string name="hide_unused_tags">Verberg ongebruikte labels</string> <string name="hide_unused_tags">Verberg ongebruikte labels</string>
<string name="hide_unused_places">Verberg ongebruikte plaatsen</string> <string name="hide_unused_places">Verberg ongebruikte plaatsen</string>
<string name="add_place">Voeg plaats toe</string>
<string name="menu_discard_changes">Negeer veranderingen</string> <string name="menu_discard_changes">Negeer veranderingen</string>
<string name="chip_appearance_text_and_icon">Tekst en icon</string> <string name="chip_appearance_text_and_icon">Tekst en icon</string>
<string name="chip_appearance_text_only">Alleen tekst</string> <string name="chip_appearance_text_only">Alleen tekst</string>

@ -507,7 +507,6 @@
<string name="chip_appearance_icon_only">Tylko ikona</string> <string name="chip_appearance_icon_only">Tylko ikona</string>
<string name="chip_appearance_text_only">Tylko tekst</string> <string name="chip_appearance_text_only">Tylko tekst</string>
<string name="chip_appearance_text_and_icon">Tekst i ikona</string> <string name="chip_appearance_text_and_icon">Tekst i ikona</string>
<string name="add_place">Dodaj miejsce</string>
<string name="hide_unused_places">Ukryj nieużywane miejsca</string> <string name="hide_unused_places">Ukryj nieużywane miejsca</string>
<string name="hide_unused_tags">Ukryj nieużywane tagi</string> <string name="hide_unused_tags">Ukryj nieużywane tagi</string>
<string name="navigation_drawer">Panel nawigacji</string> <string name="navigation_drawer">Panel nawigacji</string>

@ -440,7 +440,6 @@
<string name="chip_appearance_icon_only">Ícone apenas</string> <string name="chip_appearance_icon_only">Ícone apenas</string>
<string name="chip_appearance_text_only">Apenas texto</string> <string name="chip_appearance_text_only">Apenas texto</string>
<string name="chip_appearance_text_and_icon">Texto e ícone</string> <string name="chip_appearance_text_and_icon">Texto e ícone</string>
<string name="add_place">Adicionar um lugar</string>
<string name="hide_unused_places">Esconder lugares não usados</string> <string name="hide_unused_places">Esconder lugares não usados</string>
<string name="hide_unused_tags">Esconder etiquetas não usadas</string> <string name="hide_unused_tags">Esconder etiquetas não usadas</string>
<string name="navigation_drawer">Gaveta de navegação</string> <string name="navigation_drawer">Gaveta de navegação</string>

@ -498,7 +498,6 @@
<string name="chip_appearance_text_only">Apenas texto</string> <string name="chip_appearance_text_only">Apenas texto</string>
<string name="chip_appearance_text_and_icon">Texto e ícone</string> <string name="chip_appearance_text_and_icon">Texto e ícone</string>
<string name="menu_discard_changes">Descartar alterações</string> <string name="menu_discard_changes">Descartar alterações</string>
<string name="add_place">Adicionar local</string>
<string name="hide_unused_places">Ocultar locais não usados</string> <string name="hide_unused_places">Ocultar locais não usados</string>
<string name="hide_unused_tags">Ocultar etiquetas não usadas</string> <string name="hide_unused_tags">Ocultar etiquetas não usadas</string>
<string name="navigation_drawer">Gaveta de navegação</string> <string name="navigation_drawer">Gaveta de navegação</string>

@ -601,7 +601,6 @@
<string name="chip_appearance_icon_only">Doar pictograma</string> <string name="chip_appearance_icon_only">Doar pictograma</string>
<string name="chip_appearance_text_only">Doar text</string> <string name="chip_appearance_text_only">Doar text</string>
<string name="chip_appearance_text_and_icon">Text și pictogramă</string> <string name="chip_appearance_text_and_icon">Text și pictogramă</string>
<string name="add_place">Adăugați locul</string>
<string name="hide_unused_places">Ascundeți locurile nefolosite</string> <string name="hide_unused_places">Ascundeți locurile nefolosite</string>
<string name="hide_unused_tags">Ascundeți etichetele nefolosite</string> <string name="hide_unused_tags">Ascundeți etichetele nefolosite</string>
<string name="navigation_drawer">Sertar de navigare</string> <string name="navigation_drawer">Sertar de navigare</string>

@ -512,7 +512,6 @@
<string name="chip_appearance_icon_only">Только иконка</string> <string name="chip_appearance_icon_only">Только иконка</string>
<string name="chip_appearance_text_only">Только текст</string> <string name="chip_appearance_text_only">Только текст</string>
<string name="chip_appearance_text_and_icon">Текст и иконка</string> <string name="chip_appearance_text_and_icon">Текст и иконка</string>
<string name="add_place">Добавить место</string>
<string name="hide_unused_places">Скрыть неиспользуемые места</string> <string name="hide_unused_places">Скрыть неиспользуемые места</string>
<string name="hide_unused_tags">Скрыть неиспользуемые теги</string> <string name="hide_unused_tags">Скрыть неиспользуемые теги</string>
<string name="navigation_drawer">Панель навигации</string> <string name="navigation_drawer">Панель навигации</string>

@ -219,7 +219,6 @@
<string name="theme">තේමාව</string> <string name="theme">තේමාව</string>
<string name="opacity_footer">පාදකයේ පාරාන්ධතාව</string> <string name="opacity_footer">පාදකයේ පාරාන්ධතාව</string>
<string name="chip_appearance_text_and_icon">පෙළ සහ නිරූපකය</string> <string name="chip_appearance_text_and_icon">පෙළ සහ නිරූපකය</string>
<string name="add_place">ස්ථානය එක් කරන්න</string>
<string name="hide_unused_places">භාවිතයට නොගත් ස්ථාන සඟවන්න</string> <string name="hide_unused_places">භාවිතයට නොගත් ස්ථාන සඟවන්න</string>
<string name="hide_unused_tags">භාවිතයට නොගත් ටැග් සඟවන්න</string> <string name="hide_unused_tags">භාවිතයට නොගත් ටැග් සඟවන්න</string>
<string name="places">ස්ථාන</string> <string name="places">ස්ථාන</string>

@ -458,7 +458,6 @@
<string name="chip_appearance_icon_only">Ikon endast</string> <string name="chip_appearance_icon_only">Ikon endast</string>
<string name="chip_appearance_text_only">Text endast</string> <string name="chip_appearance_text_only">Text endast</string>
<string name="chip_appearance_text_and_icon">Text och ikon</string> <string name="chip_appearance_text_and_icon">Text och ikon</string>
<string name="add_place">Lägg till plats</string>
<string name="place_settings">Plats inställningar</string> <string name="place_settings">Plats inställningar</string>
<string name="places">Platser</string> <string name="places">Platser</string>
<string name="chip_style_filled">Fylld</string> <string name="chip_style_filled">Fylld</string>

@ -205,7 +205,6 @@
<string name="chip_appearance_icon_only">ஐகான் மட்டுமே</string> <string name="chip_appearance_icon_only">ஐகான் மட்டுமே</string>
<string name="chip_appearance_text_only">உரை மட்டும்</string> <string name="chip_appearance_text_only">உரை மட்டும்</string>
<string name="chip_appearance_text_and_icon">உரை மற்றும் ஐகான்</string> <string name="chip_appearance_text_and_icon">உரை மற்றும் ஐகான்</string>
<string name="add_place">இடத்தைச் சேர்க்கவும்</string>
<string name="hide_unused_places">பயன்படுத்தப்படாத இடங்களை மறைக்கவும்</string> <string name="hide_unused_places">பயன்படுத்தப்படாத இடங்களை மறைக்கவும்</string>
<string name="hide_unused_tags">பயன்படுத்தப்படாத குறிச்சொற்களை மறைக்கவும்</string> <string name="hide_unused_tags">பயன்படுத்தப்படாத குறிச்சொற்களை மறைக்கவும்</string>
<string name="place_settings">அமைப்புகளை வைக்கவும்</string> <string name="place_settings">அமைப்புகளை வைக்கவும்</string>

@ -599,7 +599,6 @@
<string name="chip_appearance_icon_only">ไอคอนเท่านั้น</string> <string name="chip_appearance_icon_only">ไอคอนเท่านั้น</string>
<string name="chip_appearance_text_only">เฉพาะข้อความ</string> <string name="chip_appearance_text_only">เฉพาะข้อความ</string>
<string name="chip_appearance_text_and_icon">ข้อความและไอคอน</string> <string name="chip_appearance_text_and_icon">ข้อความและไอคอน</string>
<string name="add_place">เพิ่มสถานที่</string>
<string name="hide_unused_places">ซ่อนสถานที่ที่ไม่ได้ใช้</string> <string name="hide_unused_places">ซ่อนสถานที่ที่ไม่ได้ใช้</string>
<string name="hide_unused_tags">ซ่อนแท็กที่ไม่ได้ใช้</string> <string name="hide_unused_tags">ซ่อนแท็กที่ไม่ได้ใช้</string>
<string name="navigation_drawer">ลิ้นชักนําทาง</string> <string name="navigation_drawer">ลิ้นชักนําทาง</string>

@ -495,7 +495,6 @@
<string name="navigation_drawer">Gezinim çekmecesi</string> <string name="navigation_drawer">Gezinim çekmecesi</string>
<string name="hide_unused_tags">Kullanılmayan etiketleri gizle</string> <string name="hide_unused_tags">Kullanılmayan etiketleri gizle</string>
<string name="hide_unused_places">Kullanılmayan yerleri gizle</string> <string name="hide_unused_places">Kullanılmayan yerleri gizle</string>
<string name="add_place">Yer ekle</string>
<string name="auto_dismiss_datetime_summary">Tarih veya zaman seçince tarih zaman seçiciyi kapat</string> <string name="auto_dismiss_datetime_summary">Tarih veya zaman seçince tarih zaman seçiciyi kapat</string>
<string name="auto_dismiss_datetime">Tarih zaman seçiciyi kendiliğinden kapat</string> <string name="auto_dismiss_datetime">Tarih zaman seçiciyi kendiliğinden kapat</string>
<string name="shortcut_pick_time">Zaman seç</string> <string name="shortcut_pick_time">Zaman seç</string>

@ -505,7 +505,6 @@
<string name="chip_appearance_icon_only">Лише піктограми</string> <string name="chip_appearance_icon_only">Лише піктограми</string>
<string name="chip_appearance_text_only">Лише текст</string> <string name="chip_appearance_text_only">Лише текст</string>
<string name="chip_appearance_text_and_icon">Текст та піктограма</string> <string name="chip_appearance_text_and_icon">Текст та піктограма</string>
<string name="add_place">Додати місце</string>
<string name="hide_unused_places">Сховати місця, що не використовуються</string> <string name="hide_unused_places">Сховати місця, що не використовуються</string>
<string name="hide_unused_tags">Сховати не використовувані мітки</string> <string name="hide_unused_tags">Сховати не використовувані мітки</string>
<string name="navigation_drawer">Панель навігації</string> <string name="navigation_drawer">Панель навігації</string>

@ -210,7 +210,6 @@
<string name="chip_appearance_icon_only">Chỉ biểu tượng</string> <string name="chip_appearance_icon_only">Chỉ biểu tượng</string>
<string name="chip_appearance_text_only">Chỉ văn bản</string> <string name="chip_appearance_text_only">Chỉ văn bản</string>
<string name="chip_appearance_text_and_icon">Văn bản và biểu tượng</string> <string name="chip_appearance_text_and_icon">Văn bản và biểu tượng</string>
<string name="add_place">Thêm địa điểm</string>
<string name="hide_unused_places">Ẩn các địa điểm chưa sử dụng</string> <string name="hide_unused_places">Ẩn các địa điểm chưa sử dụng</string>
<string name="hide_unused_tags">Ẩn các thẻ chưa sử dụng</string> <string name="hide_unused_tags">Ẩn các thẻ chưa sử dụng</string>
<string name="navigation_drawer">Ngăn điều hướng</string> <string name="navigation_drawer">Ngăn điều hướng</string>

@ -485,7 +485,6 @@
<string name="navigation_drawer">抽屉式导航栏</string> <string name="navigation_drawer">抽屉式导航栏</string>
<string name="hide_unused_tags">隐藏不用的标签</string> <string name="hide_unused_tags">隐藏不用的标签</string>
<string name="hide_unused_places">隐藏不用的地点</string> <string name="hide_unused_places">隐藏不用的地点</string>
<string name="add_place">添加地点</string>
<string name="auto_dismiss_datetime_summary">在选择一个日期或时间后关闭日期时间选择器</string> <string name="auto_dismiss_datetime_summary">在选择一个日期或时间后关闭日期时间选择器</string>
<string name="auto_dismiss_datetime">自动关闭日期时间选择器</string> <string name="auto_dismiss_datetime">自动关闭日期时间选择器</string>
<string name="shortcut_pick_time">挑选时间</string> <string name="shortcut_pick_time">挑选时间</string>

@ -385,7 +385,6 @@
<string name="chip_appearance_text_and_icon">文字與圖示</string> <string name="chip_appearance_text_and_icon">文字與圖示</string>
<string name="chip_appearance_icon_only">僅圖示</string> <string name="chip_appearance_icon_only">僅圖示</string>
<string name="chip_appearance_text_only">僅文字</string> <string name="chip_appearance_text_only">僅文字</string>
<string name="add_place">新增地點</string>
<string name="hide_unused_places">隱藏未使用地點</string> <string name="hide_unused_places">隱藏未使用地點</string>
<string name="hide_unused_tags">隱藏未使用標籤</string> <string name="hide_unused_tags">隱藏未使用標籤</string>
<string name="desaturate_colors_summary_off">暗色主題中顏色將不飽和</string> <string name="desaturate_colors_summary_off">暗色主題中顏色將不飽和</string>

@ -566,7 +566,6 @@ File %1$s contained %2$s.\n\n
<string name="navigation_drawer">Navigation drawer</string> <string name="navigation_drawer">Navigation drawer</string>
<string name="hide_unused_tags">Hide unused tags</string> <string name="hide_unused_tags">Hide unused tags</string>
<string name="hide_unused_places">Hide unused places</string> <string name="hide_unused_places">Hide unused places</string>
<string name="add_place">Add place</string>
<string name="chip_appearance_text_and_icon">Text and icon</string> <string name="chip_appearance_text_and_icon">Text and icon</string>
<string name="chip_appearance_text_only">Text only</string> <string name="chip_appearance_text_only">Text only</string>
<string name="chip_appearance_icon_only">Icon only</string> <string name="chip_appearance_icon_only">Icon only</string>

Loading…
Cancel
Save