diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..ab502a6
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+Rehabilitation
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index b589d56..fb7f4a8 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 0ad17cb..54d5acd 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 7223ade..ff07d54 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,6 +1,8 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
+ id 'kotlin-kapt'
+
}
android {
@@ -36,7 +38,9 @@ android {
}
dependencies {
-
+ implementation 'androidx.room:room-ktx:2.5.2'
+ implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1'
+ kapt 'androidx.room:room-compiler:2.5.2'
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.9.0'
diff --git a/app/src/main/java/com/example/rehabilitation/Baza/TaskItem.kt b/app/src/main/java/com/example/rehabilitation/Baza/TaskItem.kt
index ba2652b..23a87f0 100644
--- a/app/src/main/java/com/example/rehabilitation/Baza/TaskItem.kt
+++ b/app/src/main/java/com/example/rehabilitation/Baza/TaskItem.kt
@@ -1,4 +1,24 @@
package com.example.rehabilitation.Baza
-class TaskItem {
+import android.content.Context
+import androidx.core.content.ContextCompat
+import com.example.rehabilitation.R
+import java.time.LocalDate
+import java.time.LocalTime
+import java.util.*
+
+class TaskItem(
+ var name:String,
+ var desc:String,
+ var dueTime: LocalTime?,
+ var completedDate:LocalDate?,
+ var id: UUID = UUID.randomUUID(),
+ ) {
+ fun isCompleted() = completedDate !=null
+ fun imageResource(): Int = if(isCompleted()) R.drawable.check_24 else R.drawable.unchecked_24
+ fun imageColor(context:Context): Int = if(isCompleted()) purple(context) else black(context)
+
+ private fun purple(context:Context) = ContextCompat.getColor(context,R.color.purple_500)
+ private fun black(context:Context) = ContextCompat.getColor(context,R.color.black)
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/rehabilitation/Baza/TaskItemAdapter.kt b/app/src/main/java/com/example/rehabilitation/Baza/TaskItemAdapter.kt
index f9270dd..3ba5d97 100644
--- a/app/src/main/java/com/example/rehabilitation/Baza/TaskItemAdapter.kt
+++ b/app/src/main/java/com/example/rehabilitation/Baza/TaskItemAdapter.kt
@@ -1,4 +1,25 @@
package com.example.rehabilitation.Baza
-class TaskItemAdapter {
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import com.example.rehabilitation.databinding.TaskItemBinding
+
+class TaskItemAdapter(
+ private val taskItems: List,
+ private val clickListener: TaskItemClickListener
+
+):RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TaskItemViewHolder {
+ val from = LayoutInflater.from(parent.context)
+ val binding = TaskItemBinding.inflate(from,parent,false)
+ return TaskItemViewHolder(parent.context, binding, clickListener)
+ }
+
+ override fun getItemCount(): Int = taskItems.size
+
+ override fun onBindViewHolder(holder: TaskItemViewHolder, position: Int) {
+ holder.bindTaskItem(taskItems[position])
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/rehabilitation/Baza/TaskItemClickListener.kt b/app/src/main/java/com/example/rehabilitation/Baza/TaskItemClickListener.kt
index 7bdbddf..aa4e0df 100644
--- a/app/src/main/java/com/example/rehabilitation/Baza/TaskItemClickListener.kt
+++ b/app/src/main/java/com/example/rehabilitation/Baza/TaskItemClickListener.kt
@@ -1,4 +1,7 @@
package com.example.rehabilitation.Baza
interface TaskItemClickListener {
+ fun editTaskItem(taskitem:TaskItem)
+ fun completeTaskItem(taskitem:TaskItem)
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/rehabilitation/Baza/TaskItemViewHolder.kt b/app/src/main/java/com/example/rehabilitation/Baza/TaskItemViewHolder.kt
index a1ef31f..4470c61 100644
--- a/app/src/main/java/com/example/rehabilitation/Baza/TaskItemViewHolder.kt
+++ b/app/src/main/java/com/example/rehabilitation/Baza/TaskItemViewHolder.kt
@@ -1,4 +1,41 @@
package com.example.rehabilitation.Baza
-class TaskItemViewHolder {
+import android.content.Context
+import android.graphics.Paint
+import androidx.recyclerview.widget.RecyclerView
+import com.example.rehabilitation.databinding.TaskItemBinding
+import java.time.format.DateTimeFormatter
+
+class TaskItemViewHolder(
+ private val context: Context,
+ private val binding: TaskItemBinding,
+ private val clickListener: TaskItemClickListener
+):RecyclerView.ViewHolder(binding.root) {
+
+ private val timeFormat = DateTimeFormatter.ofPattern("HH:mm")
+ fun bindTaskItem(taskItem:TaskItem){
+ binding.txtName.text = taskItem.name
+ //binding.txtDesc.text = taskItem.desc
+
+ if(taskItem.isCompleted()){
+ binding.txtName.paintFlags = Paint.STRIKE_THRU_TEXT_FLAG
+ binding.txtTime.paintFlags = Paint.STRIKE_THRU_TEXT_FLAG
+ }
+
+ binding.btnComplete.setBackgroundResource(taskItem.imageResource())
+ binding.btnComplete.setColorFilter(taskItem.imageColor(context))
+ binding.btnComplete.setOnClickListener{
+ clickListener.completeTaskItem(taskItem)
+ }
+ binding.taskCellContainers.setOnClickListener{
+ clickListener.editTaskItem(taskItem)
+ }
+
+ if(taskItem.dueTime != null){
+ binding.txtTime.text = timeFormat.format(taskItem.dueTime)
+ }
+ else{
+ binding.txtTime.text = ""
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/rehabilitation/Baza/TaskViewModel.kt b/app/src/main/java/com/example/rehabilitation/Baza/TaskViewModel.kt
index 5d70ca2..4b12b36 100644
--- a/app/src/main/java/com/example/rehabilitation/Baza/TaskViewModel.kt
+++ b/app/src/main/java/com/example/rehabilitation/Baza/TaskViewModel.kt
@@ -1,4 +1,44 @@
package com.example.rehabilitation.Baza
-class TaskViewModel {
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import java.time.LocalDate
+import java.time.LocalTime
+import java.util.UUID
+
+class TaskViewModel:ViewModel() {
+ var taskItems = MutableLiveData>()
+
+ init{
+ taskItems.value = mutableListOf()
+ }
+
+ //Добавление
+ fun addTaskItem(newTask:TaskItem){
+ val list = taskItems.value
+ list!!.add(newTask)
+ taskItems.postValue(list!!)
+ }
+
+ //Обновление
+ fun updateTaskItem(id: UUID, name:String, desc:String, dueTime: LocalTime?){
+ val list = taskItems.value
+ val task = list!!.find{it.id == id}!!
+ task.name = name
+ task.desc = desc
+ task.dueTime = dueTime
+ taskItems.postValue(list!!)
+ }
+
+ //Вывод
+ fun setCompleted(taskItem:TaskItem){
+ val list = taskItems.value
+ val task = list!!.find{it.id == taskItem.id}!!
+ if(task.completedDate == null){
+ task.completedDate = LocalDate.now()
+ }
+ taskItems.postValue(list!!)
+ }
+
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/rehabilitation/db/Dao.kt b/app/src/main/java/com/example/rehabilitation/db/Dao.kt
index 1a6171f..f29c941 100644
--- a/app/src/main/java/com/example/rehabilitation/db/Dao.kt
+++ b/app/src/main/java/com/example/rehabilitation/db/Dao.kt
@@ -1,4 +1,14 @@
package com.example.rehabilitation.db
+import androidx.room.Dao
+import androidx.room.Insert
+import androidx.room.Query
+import kotlinx.coroutines.flow.Flow
+
+@Dao
interface Dao {
+ @Insert
+ fun insertItem(item:Item)
+ @Query("SELECT * FROM items")
+ fun getAllItems(): Flow>
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/rehabilitation/db/Item.kt b/app/src/main/java/com/example/rehabilitation/db/Item.kt
index b003481..97890d3 100644
--- a/app/src/main/java/com/example/rehabilitation/db/Item.kt
+++ b/app/src/main/java/com/example/rehabilitation/db/Item.kt
@@ -1,3 +1,16 @@
package com.example.rehabilitation.db
-data class Item()
+import androidx.room.ColumnInfo
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+
+@Entity(tableName = "items")
+data class Item(
+ @PrimaryKey(autoGenerate = true)
+ var id:Int? = null,
+ @ColumnInfo(name = "name")
+ var name:String,
+ @ColumnInfo(name = "price")
+ var price:String,
+
+ )
diff --git a/app/src/main/java/com/example/rehabilitation/db/MainDB.kt b/app/src/main/java/com/example/rehabilitation/db/MainDB.kt
index 22c761c..bf40c2f 100644
--- a/app/src/main/java/com/example/rehabilitation/db/MainDB.kt
+++ b/app/src/main/java/com/example/rehabilitation/db/MainDB.kt
@@ -1,4 +1,20 @@
package com.example.rehabilitation.db
-class MainDB {
+import androidx.room.Room
+import androidx.room.RoomDatabase
+import android.content.Context
+import androidx.room.Database
+
+@Database(entities = [Item::class], version = 1)
+abstract class MainDB: RoomDatabase() {
+ abstract fun getDao(): Dao
+ companion object{
+ fun getDB(context: Context):MainDB{
+ return Room.databaseBuilder(
+ context.applicationContext,
+ MainDB::class.java,
+ "tests.db"
+ ).build()
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/rehabilitation/fragment/User/SceduleFragment.kt b/app/src/main/java/com/example/rehabilitation/fragment/User/SceduleFragment.kt
index 518627a..f44dfed 100644
--- a/app/src/main/java/com/example/rehabilitation/fragment/User/SceduleFragment.kt
+++ b/app/src/main/java/com/example/rehabilitation/fragment/User/SceduleFragment.kt
@@ -5,12 +5,19 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import com.example.rehabilitation.R
+import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.example.rehabilitation.Baza.TaskItem
+import com.example.rehabilitation.Baza.TaskItemAdapter
+import com.example.rehabilitation.Baza.TaskItemClickListener
+import com.example.rehabilitation.Baza.TaskViewModel
import com.example.rehabilitation.databinding.FragmentSceduleBinding
-class SceduleFragment : Fragment() {
+class SceduleFragment(var taskItem: TaskItem?) : Fragment(), TaskItemClickListener {
private lateinit var binding: FragmentSceduleBinding
+ private lateinit var taskViewModel: TaskViewModel
+
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
@@ -19,7 +26,84 @@ class SceduleFragment : Fragment() {
return binding.root
}
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ //Закрытие карточки определенного дня
+ binding.btnExitCardSport.setOnClickListener {
+ binding.CLCardSport.visibility = View.GONE
+ binding.CLListSport.visibility = View.VISIBLE
+ binding.txtNameCard.setText("")
+ binding.txtDescCard.setText("")
+ }
+
+ if(taskItem != null){
+ binding.CLCardSport.visibility = View.VISIBLE
+ binding.CLListSport.visibility = View.GONE
+ binding.txtNameCard.text = taskItem!!.name
+ binding.txtDescCard.text = taskItem!!.desc
+ }
+ else{
+ binding.CLCardSport.visibility = View.GONE
+ binding.CLListSport.visibility = View.VISIBLE
+ }
+
+ taskViewModel = ViewModelProvider(requireActivity()).get(TaskViewModel::class.java)
+ binding.btnSave.setOnClickListener {
+ saveAction()
+ }
+
+ setRecycleView()
+
+ }
+
+ private fun setRecycleView() {
+ taskViewModel.taskItems.observe(requireActivity()){
+ binding.todoListRecycleView.apply {
+ layoutManager = LinearLayoutManager(activity?.applicationContext)
+ adapter = TaskItemAdapter(it,this@SceduleFragment)
+ }
+ }
+ }
+
+ private fun saveAction() {
+ val name = binding.edName.text.toString()
+ val desc = binding.edDesc.text.toString()
+
+ if(taskItem == null){
+ val newTask = TaskItem(name,desc,null,null)
+ taskViewModel.addTaskItem(newTask)
+ }
+ else{
+ taskViewModel.updateTaskItem(taskItem!!.id,name,desc,null)
+ }
+ binding.edName.setText("")
+ binding.edDesc.setText("")
+ }
+
+ override fun onResume() {
+ super.onResume()
+
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+
+ }
+
companion object {
- fun newInstance() = SceduleFragment()
+ fun newInstance() = SceduleFragment(null)
+ }
+
+ override fun editTaskItem(taskitem: TaskItem) {
+ binding.CLCardSport.visibility = View.VISIBLE
+ binding.CLListSport.visibility = View.GONE
+
+ binding.txtNameCard.setText(taskitem.name)
+ binding.txtDescCard.setText(taskitem.desc)
+ }
+
+ override fun completeTaskItem(taskitem: TaskItem) {
+ taskItem?.let { taskViewModel.setCompleted(it) }
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/check_24.xml b/app/src/main/res/drawable/check_24.xml
new file mode 100644
index 0000000..bc136f2
--- /dev/null
+++ b/app/src/main/res/drawable/check_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/fragment_scedule.xml b/app/src/main/res/layout/fragment_scedule.xml
index 4671b72..323eaa1 100644
--- a/app/src/main/res/layout/fragment_scedule.xml
+++ b/app/src/main/res/layout/fragment_scedule.xml
@@ -1,110 +1,144 @@
-
+ android:visibility="visible">
+
+
+
+
+ android:layout_marginStart="32dp"
+ android:layout_marginEnd="32dp"
+ android:layout_marginBottom="8dp"
+ android:text="Button"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent" />
-
+ android:layout_height="0dp"
+ android:layout_marginStart="16dp"
+ android:layout_marginTop="16dp"
+ android:layout_marginEnd="16dp"
+ android:layout_marginBottom="16dp"
+ app:layout_constraintBottom_toTopOf="@+id/edName"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
-
+
-
+
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/task_item.xml b/app/src/main/res/layout/task_item.xml
index 6728af8..a6ec687 100644
--- a/app/src/main/res/layout/task_item.xml
+++ b/app/src/main/res/layout/task_item.xml
@@ -1,6 +1,55 @@
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/taskCellContainers"
+ android:layout_width="match_parent"
+ android:layout_height="90dp">
+
+
+
+
+
+
+
+
+
\ No newline at end of file