Skip to content

Commit

Permalink
REM-809 - Update reminder list item design
Browse files Browse the repository at this point in the history
  • Loading branch information
naz013 committed Mar 17, 2024
1 parent f60a6b1 commit 0d3827b
Show file tree
Hide file tree
Showing 37 changed files with 1,017 additions and 859 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import com.elementary.tasks.core.utils.ui.gone
import com.elementary.tasks.core.utils.ui.listenScrollableView
import com.elementary.tasks.core.utils.ui.visible
import com.elementary.tasks.core.utils.ui.visibleGone
import com.elementary.tasks.core.views.SpaceItemDecoration
import com.elementary.tasks.core.views.recyclerview.SpaceItemDecoration
import com.elementary.tasks.databinding.ActivityApplicationListBinding
import org.koin.android.ext.android.inject
import org.koin.androidx.viewmodel.ext.android.viewModel
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.elementary.tasks.core.views.recyclerview

import android.graphics.Rect
import android.view.View

import androidx.recyclerview.widget.RecyclerView

class SpaceBetweenItemDecoration(
private val space: Int
) : RecyclerView.ItemDecoration() {

override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
// Add Top space to each next list item
if (parent.getChildAdapterPosition(view) > 0) {
outRect.top = space
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.elementary.tasks.core.views
package com.elementary.tasks.core.views.recyclerview

import android.graphics.Rect
import android.view.View
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.elementary.tasks.home.scheduleview.viewholder

import android.view.ViewGroup
import com.elementary.tasks.core.binding.HolderBinding
import com.elementary.tasks.core.text.applyStyles
import com.elementary.tasks.core.utils.ui.gone
import com.elementary.tasks.core.utils.ui.inflater
Expand All @@ -12,7 +13,7 @@ class ScheduleBirthdayHolder(
parent: ViewGroup,
private val common: ScheduleReminderViewHolderCommon,
private val listener: (Int) -> Unit
) : BaseScheduleHolder<ListItemScheduleBirthdayBinding>(
) : HolderBinding<ListItemScheduleBirthdayBinding>(
ListItemScheduleBirthdayBinding.inflate(parent.inflater(), parent, false)
) {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.elementary.tasks.home.scheduleview.viewholder

import android.view.ViewGroup
import com.elementary.tasks.core.binding.HolderBinding
import com.elementary.tasks.core.text.applyStyles
import com.elementary.tasks.core.utils.ui.gone
import com.elementary.tasks.core.utils.ui.inflater
Expand All @@ -14,7 +15,7 @@ class ScheduleReminderAndGTaskViewHolder(
private val googleCommon: ScheduleGoogleViewHolderCommon,
private val reminderClickListener: (Int) -> Unit,
private val taskClickListener: (Int) -> Unit
) : BaseScheduleHolder<ListItemScheduleReminderAndGoogleBinding>(
) : HolderBinding<ListItemScheduleReminderAndGoogleBinding>(
ListItemScheduleReminderAndGoogleBinding.inflate(parent.inflater(), parent, false)
) {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.elementary.tasks.home.scheduleview.viewholder

import android.view.ViewGroup
import com.elementary.tasks.core.binding.HolderBinding
import com.elementary.tasks.core.text.applyStyles
import com.elementary.tasks.core.utils.ui.gone
import com.elementary.tasks.core.utils.ui.inflater
Expand All @@ -14,7 +15,7 @@ class ScheduleReminderAndNoteViewHolder(
private val noteCommon: ScheduleNoteViewHolderCommon,
private val reminderClickListener: (Int) -> Unit,
private val noteClickListener: (Int) -> Unit
) : BaseScheduleHolder<ListItemScheduleReminderAndNoteBinding>(
) : HolderBinding<ListItemScheduleReminderAndNoteBinding>(
ListItemScheduleReminderAndNoteBinding.inflate(parent.inflater(), parent, false)
) {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
package com.elementary.tasks.home.scheduleview.viewholder

import android.view.ViewGroup
import com.elementary.tasks.core.binding.HolderBinding
import com.elementary.tasks.core.text.applyStyles
import com.elementary.tasks.core.utils.ui.gone
import com.elementary.tasks.core.utils.ui.inflater
import com.elementary.tasks.core.utils.ui.visible
import com.elementary.tasks.databinding.ListItemScheduleReminderBinding
import com.elementary.tasks.home.scheduleview.data.UiReminderScheduleList
import com.elementary.tasks.reminder.lists.adapter.BaseUiReminderListViewHolder

class ScheduleReminderViewHolder(
parent: ViewGroup,
private val common: ScheduleReminderViewHolderCommon,
private val listener: (Int) -> Unit
) : BaseUiReminderListViewHolder<ListItemScheduleReminderBinding, UiReminderScheduleList>(
) : HolderBinding<ListItemScheduleReminderBinding>(
ListItemScheduleReminderBinding.inflate(parent.inflater(), parent, false)
) {

Expand All @@ -23,7 +23,7 @@ class ScheduleReminderViewHolder(
}
}

override fun setData(data: UiReminderScheduleList) {
fun setData(data: UiReminderScheduleList) {
binding.mainTextView.text = data.mainText.text
binding.mainTextView.applyStyles(data.mainText.textFormat)

Expand Down
10 changes: 10 additions & 0 deletions app/src/main/java/com/elementary/tasks/reminder/KoinModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import com.elementary.tasks.reminder.build.bi.BiFilter
import com.elementary.tasks.reminder.build.bi.CreatorConfigFilter
import com.elementary.tasks.reminder.build.bi.LocationFilter
import com.elementary.tasks.reminder.build.formatter.ShopItemsFormatter
import com.elementary.tasks.reminder.build.formatter.factory.PlaceFormatterFactory
import com.elementary.tasks.reminder.build.formatter.factory.RadiusFormatterFactory
import com.elementary.tasks.reminder.build.logic.BuilderItemBlockedByConstraintCalculator
import com.elementary.tasks.reminder.build.logic.BuilderItemMandatoryIfConstraintCalculator
import com.elementary.tasks.reminder.build.logic.BuilderItemPermissionConstraintCalculator
Expand Down Expand Up @@ -65,6 +67,8 @@ import com.elementary.tasks.reminder.create.fragments.recur.preset.PresetViewMod
import com.elementary.tasks.reminder.dialog.ReminderViewModel
import com.elementary.tasks.reminder.lists.active.ActiveGpsRemindersViewModel
import com.elementary.tasks.reminder.lists.active.ActiveRemindersViewModel
import com.elementary.tasks.reminder.lists.data.UiReminderListAdapter
import com.elementary.tasks.reminder.lists.data.UiReminderListsAdapter
import com.elementary.tasks.reminder.lists.removed.ArchiveRemindersViewModel
import com.elementary.tasks.reminder.lists.todo.ActiveTodoRemindersViewModel
import com.elementary.tasks.reminder.preview.AttachmentToUiReminderPreviewAttachment
Expand Down Expand Up @@ -260,10 +264,16 @@ val reminderModule = module {

factory { ShopItemsFormatter(get()) }

single { RadiusFormatterFactory(get(), get()) }
single { PlaceFormatterFactory(get()) }

factory { GoogleTaskToUiReminderPreviewGoogleTask(get(), get(), get(), get()) }
factory { NoteToUiReminderPreviewNote(get(), get(), get(), get()) }
factory { EventToUiReminderPreview(get(), get(), get(), get()) }
factory { AttachmentToUiReminderPreviewAttachment(get(), get(), get(), get()) }

factory { UiReminderPreviewDataAdapter(get(), get(), get(), get(), get(), get(), get()) }

factory { UiReminderListsAdapter(get(), get(), get(), get(), get()) }
factory { UiReminderListAdapter(get(), get(), get(), get(), get(), get(), get(), get(), get()) }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.elementary.tasks.reminder.build.formatter.factory

import com.elementary.tasks.reminder.build.formatter.PlaceFormatter

class PlaceFormatterFactory(
private val radiusFormatterFactory: RadiusFormatterFactory
) {

fun create(): PlaceFormatter {
return PlaceFormatter(radiusFormatterFactory.create())
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.elementary.tasks.reminder.build.formatter.factory

import android.content.Context
import com.elementary.tasks.core.utils.params.Prefs
import com.elementary.tasks.core.utils.ui.radius.DefaultRadiusFormatter

class RadiusFormatterFactory(
private val context: Context,
private val prefs: Prefs
) {

fun create(): DefaultRadiusFormatter {
return DefaultRadiusFormatter(
context = context,
useMetric = prefs.useMetric
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
package com.elementary.tasks.reminder.lists

import android.content.Context
import android.view.View
import com.elementary.tasks.R
import com.elementary.tasks.core.os.PermissionFlow
import com.elementary.tasks.core.os.Permissions
import com.elementary.tasks.core.os.startActivity
import com.elementary.tasks.core.utils.Constants
import com.elementary.tasks.core.utils.ui.Dialogues
import com.elementary.tasks.reminder.ReminderBuilderLauncher
import com.elementary.tasks.reminder.lists.data.UiReminderListActions
import com.elementary.tasks.reminder.preview.ReminderPreviewActivity

class ReminderActionResolver(
private val context: Context,
private val dialogues: Dialogues,
private val reminderBuilderLauncher: ReminderBuilderLauncher,
private val permissionFlow: PermissionFlow,
private val deleteAction: (id: String) -> Unit,
private val toggleAction: (id: String) -> Unit,
private val skipAction: (id: String) -> Unit
) {

fun resolveItemClick(
id: String,
isRemoved: Boolean
) {
if (isRemoved) {
editReminder(id)
} else {
previewReminder(id)
}
}

fun resolveItemMore(
view: View,
id: String,
isRemoved: Boolean,
actions: UiReminderListActions
) {
if (isRemoved) {
showDeletedActionDialog(view, id)
} else {
showActionDialog(view, actions, id)
}
}

fun resolveItemToggle(
id: String,
isGps: Boolean
) {
if (isGps) {
permissionFlow.askPermission(Permissions.FOREGROUND_SERVICE) {
toggleAction(id)
}
} else {
toggleAction(id)
}
}

private fun showDeletedActionDialog(view: View, id: String) {
val items = arrayOf(
context.getString(R.string.open),
context.getString(R.string.edit),
context.getString(R.string.delete)
)
Dialogues.showPopup(view, { item ->
when (item) {
0 -> previewReminder(id)
1 -> editReminder(id)
2 -> askConfirmation(items[item]) {
if (it) {
deleteAction(id)
}
}
}
}, *items)
}

private fun showActionDialog(
view: View,
actions: UiReminderListActions,
id: String
) {
val items = if (actions.canSkip) {
arrayOf(
context.getString(R.string.open),
context.getString(R.string.edit),
context.getString(R.string.move_to_trash),
context.getString(R.string.skip_event)
)
} else {
arrayOf(
context.getString(R.string.open),
context.getString(R.string.edit),
context.getString(R.string.move_to_trash)
)
}
Dialogues.showPopup(view, { item ->
when (item) {
0 -> previewReminder(id)
1 -> editReminder(id)
2 -> askConfirmation(items[item]) {
if (it) {
deleteAction(id)
}
}

3 -> skipAction(id)
}
}, *items)
}

private fun askConfirmation(title: String, onAction: (Boolean) -> Unit) {
dialogues.askConfirmation(context, title, onAction)
}

private fun editReminder(id: String) {
reminderBuilderLauncher.openLogged(context) {
putExtra(Constants.INTENT_ID, id)
}
}

private fun previewReminder(id: String) {
context.startActivity(ReminderPreviewActivity::class.java) {
putExtra(Constants.INTENT_ID, id)
}
}
}
Loading

0 comments on commit 0d3827b

Please sign in to comment.