mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-15 10:41:58 +00:00
add basic views for all task types
This commit is contained in:
parent
b090ac537b
commit
f6fd3289ba
16 changed files with 243 additions and 32 deletions
|
|
@ -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 -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
19
wearos/src/main/res/layout/row_daily.xml
Normal file
19
wearos/src/main/res/layout/row_daily.xml
Normal 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>
|
||||
|
|
@ -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"
|
||||
|
|
|
|||
19
wearos/src/main/res/layout/row_reward.xml
Normal file
19
wearos/src/main/res/layout/row_reward.xml
Normal 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>
|
||||
19
wearos/src/main/res/layout/row_todo.xml
Normal file
19
wearos/src/main/res/layout/row_todo.xml
Normal 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>
|
||||
9
wearos/src/main/res/values/styles.xml
Normal file
9
wearos/src/main/res/values/styles.xml
Normal 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>
|
||||
Loading…
Reference in a new issue