add basic views for all task types

This commit is contained in:
Phillip Thelen 2022-06-06 11:53:59 +02:00
parent b090ac537b
commit f6fd3289ba
16 changed files with 243 additions and 32 deletions

View file

@ -6,37 +6,53 @@ import androidx.wear.widget.WearableLinearLayoutManager
import com.habitrpg.common.habitica.models.tasks.TaskType
import com.habitrpg.wearos.habitica.R
import com.habitrpg.wearos.habitica.databinding.ActivityTasklistBinding
import com.habitrpg.wearos.habitica.ui.adapters.DailyListAdapter
import com.habitrpg.wearos.habitica.ui.adapters.HabitListAdapter
import com.habitrpg.wearos.habitica.ui.adapters.RewardListAdapter
import com.habitrpg.wearos.habitica.ui.adapters.TaskListAdapter
import com.habitrpg.wearos.habitica.ui.adapters.ToDoListAdapter
import com.habitrpg.wearos.habitica.ui.viewmodels.TaskListViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class TaskListActivity: BaseActivity<ActivityTasklistBinding, TaskListViewModel>() {
private val adapter = TaskListAdapter()
private lateinit var adapter: TaskListAdapter
override val viewModel: TaskListViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
binding = ActivityTasklistBinding.inflate(layoutInflater)
super.onCreate(savedInstanceState)
configureAdapter()
binding.root.apply {
layoutManager =
WearableLinearLayoutManager(this@TaskListActivity, HabiticaScrollingLayoutCallback())
adapter = this@TaskListActivity.adapter
}
setAdapterTitle()
viewModel.tasks.observe(this) {
adapter.data = it
}
}
private fun setAdapterTitle() {
adapter.title = when (viewModel.taskType) {
TaskType.HABIT -> getString(R.string.habits)
TaskType.DAILY -> getString(R.string.dailies)
TaskType.TODO -> getString(R.string.todos)
TaskType.REWARD -> getString(R.string.rewards)
null -> ""
private fun configureAdapter() {
when (viewModel.taskType) {
TaskType.HABIT -> {
adapter = HabitListAdapter()
adapter.title = getString(R.string.habits)
}
TaskType.DAILY -> {
adapter = DailyListAdapter()
adapter.title = getString(R.string.dailies)
}
TaskType.TODO -> {
adapter = ToDoListAdapter()
adapter.title = getString(R.string.todos)
}
TaskType.REWARD -> {
adapter = RewardListAdapter()
adapter.title = getString(R.string.rewards)
}
else -> {}
}
}
}

View file

@ -0,0 +1,17 @@
package com.habitrpg.wearos.habitica.ui.adapters
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.wearos.habitica.databinding.RowDailyBinding
import com.habitrpg.wearos.habitica.ui.viewHolders.tasks.DailyViewHolder
class DailyListAdapter: TaskListAdapter() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if (viewType == 1) {
return DailyViewHolder(RowDailyBinding.inflate(parent.context.layoutInflater, parent, false).root)
} else {
super.onCreateViewHolder(parent, viewType)
}
}
}

View file

@ -0,0 +1,17 @@
package com.habitrpg.wearos.habitica.ui.adapters
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.wearos.habitica.databinding.RowHabitBinding
import com.habitrpg.wearos.habitica.ui.viewHolders.tasks.HabitViewHolder
class HabitListAdapter: TaskListAdapter() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if (viewType == 1) {
return HabitViewHolder(RowHabitBinding.inflate(parent.context.layoutInflater, parent, false).root)
} else {
super.onCreateViewHolder(parent, viewType)
}
}
}

View file

@ -0,0 +1,17 @@
package com.habitrpg.wearos.habitica.ui.adapters
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.wearos.habitica.databinding.RowRewardBinding
import com.habitrpg.wearos.habitica.ui.viewHolders.tasks.RewardViewHolder
class RewardListAdapter: TaskListAdapter() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if (viewType == 1) {
return RewardViewHolder(RowRewardBinding.inflate(parent.context.layoutInflater, parent, false).root)
} else {
super.onCreateViewHolder(parent, viewType)
}
}
}

View file

@ -1,16 +1,14 @@
package com.habitrpg.wearos.habitica.ui.adapters
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.wearos.habitica.databinding.RowHabitBinding
import com.habitrpg.wearos.habitica.databinding.RowHeaderBinding
import com.habitrpg.wearos.habitica.models.tasks.Task
import com.habitrpg.wearos.habitica.ui.viewHolders.BindableViewHolder
import com.habitrpg.wearos.habitica.ui.viewHolders.HeaderViewHolder
import com.habitrpg.wearos.habitica.ui.viewHolders.tasks.TaskViewHolder
class TaskListAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
open class TaskListAdapter(): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
var title: String = ""
var data: List<Task> = listOf()
set(value) {
@ -19,11 +17,7 @@ class TaskListAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val inflater = parent.context.layoutInflater
return if (viewType == 0) {
HeaderViewHolder(RowHeaderBinding.inflate(inflater, parent, false).root)
} else {
TaskViewHolder(RowHabitBinding.inflate(inflater, parent, false).root)
}
return HeaderViewHolder(RowHeaderBinding.inflate(inflater, parent, false).root)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
@ -42,12 +36,4 @@ class TaskListAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun getItemCount(): Int {
return data.size + 1
}
}
class TaskViewHolder(itemView: View) : BindableViewHolder<Task>(itemView) {
val binding = RowHabitBinding.bind(itemView)
override fun bind(task: Task) {
binding.title.text = task.text
}
}
}

View file

@ -0,0 +1,17 @@
package com.habitrpg.wearos.habitica.ui.adapters
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.wearos.habitica.databinding.RowTodoBinding
import com.habitrpg.wearos.habitica.ui.viewHolders.tasks.ToDoViewHolder
class ToDoListAdapter: TaskListAdapter() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if (viewType == 1) {
return ToDoViewHolder(RowTodoBinding.inflate(parent.context.layoutInflater, parent, false).root)
} else {
super.onCreateViewHolder(parent, viewType)
}
}
}

View file

@ -0,0 +1,16 @@
package com.habitrpg.wearos.habitica.ui.viewHolders.tasks
import android.view.View
import android.widget.TextView
import com.habitrpg.wearos.habitica.databinding.RowHabitBinding
import com.habitrpg.wearos.habitica.models.tasks.Task
class DailyViewHolder(itemView: View) : TaskViewHolder(itemView) {
private val binding = RowHabitBinding.bind(itemView)
override val titleView: TextView
get() = binding.title
override fun bind(data: Task) {
super.bind(data)
}
}

View file

@ -0,0 +1,16 @@
package com.habitrpg.wearos.habitica.ui.viewHolders.tasks
import android.view.View
import android.widget.TextView
import com.habitrpg.wearos.habitica.databinding.RowHabitBinding
import com.habitrpg.wearos.habitica.models.tasks.Task
class HabitViewHolder(itemView: View) : TaskViewHolder(itemView) {
private val binding = RowHabitBinding.bind(itemView)
override val titleView: TextView
get() = binding.title
override fun bind(data: Task) {
super.bind(data)
}
}

View file

@ -0,0 +1,16 @@
package com.habitrpg.wearos.habitica.ui.viewHolders.tasks
import android.view.View
import android.widget.TextView
import com.habitrpg.wearos.habitica.databinding.RowRewardBinding
import com.habitrpg.wearos.habitica.models.tasks.Task
class RewardViewHolder(itemView: View) : TaskViewHolder(itemView) {
private val binding = RowRewardBinding.bind(itemView)
override val titleView: TextView
get() = binding.title
override fun bind(data: Task) {
super.bind(data)
}
}

View file

@ -0,0 +1,13 @@
package com.habitrpg.wearos.habitica.ui.viewHolders.tasks
import android.view.View
import android.widget.TextView
import com.habitrpg.wearos.habitica.models.tasks.Task
import com.habitrpg.wearos.habitica.ui.viewHolders.BindableViewHolder
abstract class TaskViewHolder(itemView: View) : BindableViewHolder<Task>(itemView) {
abstract val titleView: TextView
override fun bind(data: Task) {
}
}

View file

@ -0,0 +1,15 @@
package com.habitrpg.wearos.habitica.ui.viewHolders.tasks
import android.view.View
import android.widget.TextView
import com.habitrpg.wearos.habitica.databinding.RowTodoBinding
import com.habitrpg.wearos.habitica.models.tasks.Task
class ToDoViewHolder(itemView: View) : TaskViewHolder(itemView) {
private val binding = RowTodoBinding.bind(itemView)
override val titleView: TextView
get() = binding.title
override fun bind(data: Task) {
super.bind(data)
}
}

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/spacing_medium"
android:gravity="center"
style="@style/Chip">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="Task Title"/>
</LinearLayout>
</FrameLayout>

View file

@ -3,15 +3,14 @@
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="@dimen/spacing_medium"
android:paddingVertical="1dp">
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/row_background"
android:padding="@dimen/spacing_medium"
android:gravity="center">
android:gravity="center"
style="@style/Chip">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/spacing_medium"
android:gravity="center"
style="@style/Chip">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="Task Title"/>
</LinearLayout>
</FrameLayout>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/spacing_medium"
android:gravity="center"
style="@style/Chip">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="Task Title"/>
</LinearLayout>
</FrameLayout>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Chip">
<item name="android:layout_marginVertical">1dp</item>
<item name="android:layout_marginHorizontal">@dimen/spacing_medium</item>
<item name="background">@drawable/row_background</item>
</style>
</resources>