From 53d864b1edd8f25b87deeca2a1175a17e07e15cf Mon Sep 17 00:00:00 2001 From: subhajitpatra498 Date: Mon, 3 Apr 2023 20:51:27 +0530 Subject: [PATCH] complete plans section --- .../HealthyMode/Adapter/Adapter_todo.kt | 112 +++++--- .../HealthyMode/Adapter/FoodNameAdapter.kt | 14 - .../HealthyMode/Application/HMApplicaton.kt | 5 - .../HealthyMode/Repository/TodoRepository.kt | 21 -- .../example/HealthyMode/Service/MyService.kt | 4 +- .../TodoDatabase/Repository/TodoRepository.kt | 11 + .../Repository/TodoRepositoryImp.kt | 28 ++ .../example/HealthyMode/TodoDatabase/Todo.kt | 10 +- .../HealthyMode/TodoDatabase/TodoDao.kt | 7 +- .../HealthyMode/TodoDatabase/TodoDatabase.kt | 18 -- .../HealthyMode/UI/Home/Home_screen.kt | 11 +- .../UI/Home_fragment/Plans_fragment.kt | 41 --- .../example/HealthyMode/UI/Task/AddTask.kt | 188 -------------- .../example/HealthyMode/UI/Task/Add_Task.kt | 66 ++--- .../HealthyMode/UI/Task/Module/TaskModule.kt | 36 +++ .../example/HealthyMode/UI/Task/TaskList.kt | 116 ++++++--- .../UI/Task/ViewModel/Model_view.kt | 48 ---- .../UI/Task/ViewModel/TodoModel.kt | 48 ++-- .../UI/Task/ViewModel/ViewModelFactory.kt | 17 -- .../com/example/HealthyMode/Utils/Constant.kt | 24 ++ app/src/main/res/layout/activity_add_task.xml | 35 +-- app/src/main/res/layout/fragment_add_task.xml | 242 ------------------ .../res/layout/fragment_plans_fragment.xml | 40 --- app/src/main/res/values-night/themes.xml | 1 + app/src/main/res/values/style.xml | 3 + app/src/main/res/values/themes.xml | 1 + 26 files changed, 322 insertions(+), 825 deletions(-) delete mode 100644 app/src/main/java/com/example/HealthyMode/Repository/TodoRepository.kt create mode 100644 app/src/main/java/com/example/HealthyMode/TodoDatabase/Repository/TodoRepository.kt create mode 100644 app/src/main/java/com/example/HealthyMode/TodoDatabase/Repository/TodoRepositoryImp.kt delete mode 100644 app/src/main/java/com/example/HealthyMode/UI/Task/AddTask.kt create mode 100644 app/src/main/java/com/example/HealthyMode/UI/Task/Module/TaskModule.kt delete mode 100644 app/src/main/java/com/example/HealthyMode/UI/Task/ViewModel/Model_view.kt delete mode 100644 app/src/main/java/com/example/HealthyMode/UI/Task/ViewModel/ViewModelFactory.kt delete mode 100644 app/src/main/res/layout/fragment_add_task.xml diff --git a/app/src/main/java/com/example/HealthyMode/Adapter/Adapter_todo.kt b/app/src/main/java/com/example/HealthyMode/Adapter/Adapter_todo.kt index badae71..91dc119 100644 --- a/app/src/main/java/com/example/HealthyMode/Adapter/Adapter_todo.kt +++ b/app/src/main/java/com/example/HealthyMode/Adapter/Adapter_todo.kt @@ -1,40 +1,72 @@ -//package com.example.HealthyMode.Adapter -// -//import android.view.LayoutInflater -//import android.view.ViewGroup -//import androidx.paging.PagingDataAdapter -//import androidx.recyclerview.widget.DiffUtil -//import androidx.recyclerview.widget.RecyclerView -//import com.example.HealthyMode.TodoDatabase.Todo -//import com.example.HealthyMode.databinding.TodoItemBinding -// -//class Adapter_todo: PagingDataAdapter(DIFF_CALLBACK) { -// -// companion object { -// val DIFF_CALLBACK = object : DiffUtil.ItemCallback() { -// override fun areItemsTheSame(oldItem: Todo, newItem: Todo): Boolean = -// oldItem.id == newItem.id -// -// override fun areContentsTheSame(oldItem: Todo, newItem: Todo): Boolean = -// oldItem == newItem -// } -// } -// inner class MainViewHolder(val binding: TodoItemBinding) : RecyclerView.ViewHolder(binding.root) -// -// override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MainViewHolder { -// return MainViewHolder( -// TodoItemBinding.inflate(LayoutInflater.from(parent.context), parent, false) -// ) -// } -// override fun onBindViewHolder(holder: MainViewHolder, position: Int) { -// val item = getItem(position) -// -// holder.binding.apply { -// desc.text=item!!.Desc.toString() -// sd.text=item.Start_date.toString() -// st.text=item.Start_time.toString() -// ed.text=item.End_date.toString() -// et.text=item.End_time.toString() -// } -// } -//} \ No newline at end of file +package com.codinginflow.mvvmtodo.ui.tasks + +import android.graphics.Paint +import android.view.LayoutInflater +import android.view.ViewGroup +import android.widget.CheckBox +import android.widget.TextView +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.ListAdapter +import androidx.recyclerview.widget.RecyclerView +import com.example.HealthyMode.TodoDatabase.Todo +import com.example.HealthyMode.databinding.TodoItemBinding + +class Adapter_todo(private val listener: OnItemClickListener) : + ListAdapter(DiffUtill()) { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TasksViewHolder { + val binding = TodoItemBinding.inflate(LayoutInflater.from(parent.context), parent, false) + return TasksViewHolder(binding) + } + override fun onBindViewHolder(holder: TasksViewHolder, position: Int) { + val currentItem = getItem(position) + holder.bind(currentItem) + } + inner class TasksViewHolder(private val binding: TodoItemBinding) : + RecyclerView.ViewHolder(binding.root) { + init { + binding.apply { + status.setOnClickListener { + val position = adapterPosition + if (position != RecyclerView.NO_POSITION) { + val task = getItem(position) + listener.onCheckBoxClick(task, status.isChecked) + check(status,desc) + } + } + } + } + + fun bind(task: Todo) { + binding.apply { + status.isChecked=task.status + desc.text = task.Desc + sd.text=task.Start_date + st.text=task.Start_time + ed.text=task.End_date + et.text=task.End_time + check(status,desc) + } + } + } +private fun check(status:CheckBox,desc:TextView) +{ + if (status.isChecked) { + desc.paintFlags = + desc.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG + } else { + desc.paintFlags = + desc.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv() + } +} + interface OnItemClickListener { + fun onCheckBoxClick(task: Todo, isChecked: Boolean) + } + + class DiffUtill : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: Todo, newItem: Todo) = + oldItem.id == newItem.id + override fun areContentsTheSame(oldItem: Todo, newItem: Todo) = + oldItem == newItem + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/HealthyMode/Adapter/FoodNameAdapter.kt b/app/src/main/java/com/example/HealthyMode/Adapter/FoodNameAdapter.kt index a83250a..16e40d4 100644 --- a/app/src/main/java/com/example/HealthyMode/Adapter/FoodNameAdapter.kt +++ b/app/src/main/java/com/example/HealthyMode/Adapter/FoodNameAdapter.kt @@ -28,20 +28,6 @@ class FoodNameAdapter(val foodlist:ArrayList): } } -// override fun onBindViewHolder(holder: MyViewHolder, position: Int) { -// with(holder){ -// with(foodlist[position]){ -// binding.text = this.name -// binding.tvExp.text = this.exp -// } -// } -// holder.apply { -// binding.food_name.text=foodlist[position].foodName -// cal.text=foodlist[position].calories -// -// } -// -// } private val touchHelper=object :ItemTouchHelper.SimpleCallback( 0,ItemTouchHelper.RIGHT or ItemTouchHelper.LEFT ){ diff --git a/app/src/main/java/com/example/HealthyMode/Application/HMApplicaton.kt b/app/src/main/java/com/example/HealthyMode/Application/HMApplicaton.kt index 010d588..55b4f85 100644 --- a/app/src/main/java/com/example/HealthyMode/Application/HMApplicaton.kt +++ b/app/src/main/java/com/example/HealthyMode/Application/HMApplicaton.kt @@ -5,8 +5,6 @@ import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context import android.os.Build -import com.example.HealthyMode.Repository.TodoRepository -import com.example.HealthyMode.TodoDatabase.TodoDatabase import com.google.firebase.firestore.FirebaseFirestore import com.google.firebase.firestore.Source import dagger.hilt.android.HiltAndroidApp @@ -25,7 +23,4 @@ class HMApplicaton : Application() { notificationManager.createNotificationChannel(channel) } } - - private val database by lazy { TodoDatabase.getDatabase(this@HMApplicaton) } - val repository by lazy { TodoRepository(database.todoDao()) } } \ No newline at end of file diff --git a/app/src/main/java/com/example/HealthyMode/Repository/TodoRepository.kt b/app/src/main/java/com/example/HealthyMode/Repository/TodoRepository.kt deleted file mode 100644 index 1e9dbc5..0000000 --- a/app/src/main/java/com/example/HealthyMode/Repository/TodoRepository.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.example.HealthyMode.Repository - -import androidx.lifecycle.LiveData -import com.example.HealthyMode.TodoDatabase.Todo -import com.example.HealthyMode.TodoDatabase.TodoDao - -class TodoRepository(val todoDao: TodoDao){ - val planslist:LiveData> =todoDao.getTodo() - suspend fun insertTodo(todo:Todo) - { - todoDao.insertTodo(todo) - } - suspend fun deleteTodo(todo:Todo) - { - todoDao.deleteTodo(todo) - } - suspend fun updateTodo(todo:Todo) - { - todoDao.updateTodo(todo) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/HealthyMode/Service/MyService.kt b/app/src/main/java/com/example/HealthyMode/Service/MyService.kt index ff5cad1..41d5f3a 100644 --- a/app/src/main/java/com/example/HealthyMode/Service/MyService.kt +++ b/app/src/main/java/com/example/HealthyMode/Service/MyService.kt @@ -72,8 +72,8 @@ class MyService : Service(), SensorEventListener { .setOngoing(true) .setSilent(true) notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager - notificationManager!!.notify(1, notification!!.build()) - startForeground(1, notification!!.build()) + notificationManager.notify(1, notification.build()) + startForeground(1, notification.build()) } private fun stop() { diff --git a/app/src/main/java/com/example/HealthyMode/TodoDatabase/Repository/TodoRepository.kt b/app/src/main/java/com/example/HealthyMode/TodoDatabase/Repository/TodoRepository.kt new file mode 100644 index 0000000..5e14282 --- /dev/null +++ b/app/src/main/java/com/example/HealthyMode/TodoDatabase/Repository/TodoRepository.kt @@ -0,0 +1,11 @@ +package com.example.HealthyMode.TodoDatabase.Repository + +import androidx.lifecycle.LiveData +import com.example.HealthyMode.TodoDatabase.Todo +interface TodoRepository{ + suspend fun insertTodo(todo: Todo) + suspend fun deleteTodo(todo:Todo) + suspend fun updateTodo(todo:Todo) + suspend fun getTodoById(id:Int):Todo? + fun getList(): LiveData> +} \ No newline at end of file diff --git a/app/src/main/java/com/example/HealthyMode/TodoDatabase/Repository/TodoRepositoryImp.kt b/app/src/main/java/com/example/HealthyMode/TodoDatabase/Repository/TodoRepositoryImp.kt new file mode 100644 index 0000000..ff53fb2 --- /dev/null +++ b/app/src/main/java/com/example/HealthyMode/TodoDatabase/Repository/TodoRepositoryImp.kt @@ -0,0 +1,28 @@ +package com.example.HealthyMode.TodoDatabase.Repository + +import androidx.lifecycle.LiveData +import com.example.HealthyMode.TodoDatabase.Todo +import com.example.HealthyMode.TodoDatabase.TodoDao + +class TodoRepositoryImp(val todoDao: TodoDao):TodoRepository{ + override suspend fun insertTodo(todo: Todo) { + todoDao.insertTodo(todo) + } + + override suspend fun deleteTodo(todo: Todo) { + todoDao.deleteTodo(todo) + } + + override suspend fun updateTodo(todo: Todo) { + todoDao.updateTodo(todo) + } + + override suspend fun getTodoById(id: Int): Todo? { + return todoDao.getTodoById(id) + } + + override fun getList(): LiveData> { + return todoDao.getTodo() + } +} + diff --git a/app/src/main/java/com/example/HealthyMode/TodoDatabase/Todo.kt b/app/src/main/java/com/example/HealthyMode/TodoDatabase/Todo.kt index 9509930..a887193 100644 --- a/app/src/main/java/com/example/HealthyMode/TodoDatabase/Todo.kt +++ b/app/src/main/java/com/example/HealthyMode/TodoDatabase/Todo.kt @@ -8,10 +8,9 @@ import kotlinx.android.parcel.Parcelize @Parcelize @Entity(tableName = "TODO") -data class Todo ( - @PrimaryKey(autoGenerate = true) +data class Todo( @ColumnInfo(name="status") - val status:Int, + val status:Boolean, @ColumnInfo(name="Desc") val Desc:String, @ColumnInfo(name="Start_date") @@ -23,5 +22,8 @@ data class Todo ( @ColumnInfo(name="End_time") val End_time:String, @ColumnInfo(name="reminder") - val reminder: String + val reminder: String, + @ColumnInfo(name="time") + val time: Long, + @PrimaryKey(autoGenerate = true) val id:Int=0 ):Parcelable \ No newline at end of file diff --git a/app/src/main/java/com/example/HealthyMode/TodoDatabase/TodoDao.kt b/app/src/main/java/com/example/HealthyMode/TodoDatabase/TodoDao.kt index 30ef1c4..072230d 100644 --- a/app/src/main/java/com/example/HealthyMode/TodoDatabase/TodoDao.kt +++ b/app/src/main/java/com/example/HealthyMode/TodoDatabase/TodoDao.kt @@ -5,14 +5,15 @@ import androidx.room.* @Dao interface TodoDao { - @Query("SELECT * from Todo") + @Query("SELECT * from Todo ORDER BY time ASC,status DESC") fun getTodo():LiveData> - - @Insert + @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertTodo(todo: Todo) @Delete suspend fun deleteTodo(todo: Todo) @Update suspend fun updateTodo(todo: Todo) + @Query("SELECT * from Todo WHERE id= :id") + suspend fun getTodoById(id: Int): Todo? } \ No newline at end of file diff --git a/app/src/main/java/com/example/HealthyMode/TodoDatabase/TodoDatabase.kt b/app/src/main/java/com/example/HealthyMode/TodoDatabase/TodoDatabase.kt index 53689cf..ac4765b 100644 --- a/app/src/main/java/com/example/HealthyMode/TodoDatabase/TodoDatabase.kt +++ b/app/src/main/java/com/example/HealthyMode/TodoDatabase/TodoDatabase.kt @@ -1,27 +1,9 @@ package com.example.HealthyMode.TodoDatabase -import android.content.Context import androidx.room.Database -import androidx.room.Room import androidx.room.RoomDatabase @Database(entities = [Todo::class], version = 3) abstract class TodoDatabase:RoomDatabase() { abstract fun todoDao():TodoDao - - companion object{ - @Volatile - private var INSTANCE:TodoDatabase?=null - fun getDatabase(context: Context):TodoDatabase{ - if (INSTANCE==null) - { - synchronized(this){ - INSTANCE=Room.databaseBuilder( - context,TodoDatabase::class.java,"TODO" - ).createFromAsset("Todo.db").build() - } - } - return INSTANCE!! - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/example/HealthyMode/UI/Home/Home_screen.kt b/app/src/main/java/com/example/HealthyMode/UI/Home/Home_screen.kt index 5cd1e1e..9c3c4c9 100644 --- a/app/src/main/java/com/example/HealthyMode/UI/Home/Home_screen.kt +++ b/app/src/main/java/com/example/HealthyMode/UI/Home/Home_screen.kt @@ -30,9 +30,10 @@ import com.google.firebase.auth.FirebaseAuth import com.google.firebase.firestore.DocumentReference import com.google.firebase.firestore.ktx.firestore import com.google.firebase.ktx.Firebase +import dagger.hilt.android.AndroidEntryPoint import net.yslibrary.android.keyboardvisibilityevent.KeyboardVisibilityEvent import java.util.* - +@AndroidEntryPoint @Suppress("UNREACHABLE_CODE") class Home_screen : AppCompatActivity() { @RequiresApi(VERSION_CODES.TIRAMISU) @@ -55,13 +56,14 @@ class Home_screen : AppCompatActivity() { super.onCreate(savedInstanceState) binding = ActivityHomeScreenBinding.inflate(layoutInflater) setContentView(binding.root) - binding.buttonnav.visibility = View.VISIBLE + window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR checkpermission() + binding.buttonnav.visibility = View.VISIBLE val Home_fragment = Home_fragment() val plansFragment = Plans_fragment() val ProfileFragment = profile_fragment() val Weight = AddWeight() - window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR + val Stats=Stats() userDitails.collection("Weight track").get().addOnSuccessListener { snapshot -> if (snapshot.isEmpty) { binding.buttonnav.visibility = View.GONE @@ -83,13 +85,12 @@ class Home_screen : AppCompatActivity() { } binding.buttonnav.visibility = View.VISIBLE buttonnav=binding.buttonnav -// Plans_fragment().hide(buttonnav) binding.buttonnav.setOnNavigationItemSelectedListener { when (it.itemId) { R.id.home_t -> makeCurrentFrag(Home_fragment) R.id.plan -> makeCurrentFrag(plansFragment) R.id.profile -> makeCurrentFrag(ProfileFragment) - R.id.stats -> makeCurrentFrag(Stats()) + R.id.stats -> makeCurrentFrag(Stats) } true diff --git a/app/src/main/java/com/example/HealthyMode/UI/Home_fragment/Plans_fragment.kt b/app/src/main/java/com/example/HealthyMode/UI/Home_fragment/Plans_fragment.kt index a0b2fbe..ab8b31d 100644 --- a/app/src/main/java/com/example/HealthyMode/UI/Home_fragment/Plans_fragment.kt +++ b/app/src/main/java/com/example/HealthyMode/UI/Home_fragment/Plans_fragment.kt @@ -8,26 +8,17 @@ import android.view.View import android.view.ViewGroup import androidx.activity.addCallback import androidx.fragment.app.Fragment -import androidx.viewpager.widget.ViewPager -import com.example.HealthyMode.Adapter.ViewPagerAdapter -import com.example.HealthyMode.TodoDatabase.Todo import com.example.HealthyMode.UI.Home.Home_screen import com.example.HealthyMode.UI.Reminder.MealReminder import com.example.HealthyMode.UI.Reminder.Reminder import com.example.HealthyMode.UI.Reminder.SanitizerReminder -import com.example.HealthyMode.UI.Task.AddTask import com.example.HealthyMode.UI.Task.Add_Task import com.example.HealthyMode.UI.Task.TaskList -import com.example.HealthyMode.UI.Task.ViewModel.TodoModel import com.example.HealthyMode.databinding.FragmentPlansFragmentBinding -import com.google.android.material.tabs.TabLayout class Plans_fragment : Fragment() { - lateinit var todoModel: TodoModel - private lateinit var todolist: ArrayList private lateinit var binding:FragmentPlansFragmentBinding -// private val nav= ActivityHomeScreenBinding.inflate(layoutInflater).buttonnav @SuppressLint("FragmentLiveDataObserve") override fun onCreateView( @@ -37,24 +28,6 @@ class Plans_fragment : Fragment() { // Inflate the layout for this fragment binding=FragmentPlansFragmentBinding.inflate(inflater,container,false) getReminder() - todolist= ArrayList() -// view model implementation -// val dao=TodoDatabase.getDatabase(requireContext()).todoDao() -// val repo= TodoRepository(dao) -// todoModel=ViewModelProvider(this,ViewModelFactory(repo)).get(TodoModel::class.java) -// todoModel.getTodo().observe(this, Observer { todo-> -// for (data in todo) -// { -// todolist.add(data) -// } -// }) - val tabLayout: TabLayout =binding.tabLayout - val viewpager: ViewPager =binding.viewPager - tabLayout.addTab(tabLayout.newTab().setText("Plans")) - tabLayout.addTab(tabLayout.newTab().setText("Add Plans")) - tabLayout.tabGravity= TabLayout.GRAVITY_FILL -// setupViewPager(viewpager) - tabLayout.setupWithViewPager(viewpager) val childFragment: Fragment = TaskList() childFragmentManager.beginTransaction().apply { replace(com.example.HealthyMode.R.id.todolist, childFragment) @@ -65,18 +38,10 @@ class Plans_fragment : Fragment() { } return binding.root } - private fun setupViewPager(viewpager: ViewPager) { - var adapter: ViewPagerAdapter = - ViewPagerAdapter(childFragmentManager) - adapter.addFragment(TaskList(), "Plans") - adapter.addFragment(AddTask(), "Add Plans") - viewpager.setAdapter(adapter) - } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner){ startActivity(Intent(requireActivity(), Home_screen::class.java)) -// requireActivity().overridePendingTransition(R.anim.left_center, R.anim.right_center); requireActivity().finish() } } @@ -86,18 +51,12 @@ class Plans_fragment : Fragment() { c1.setOnClickListener{ startActivity(Intent(requireActivity(), Reminder::class.java)) } - } - binding.apply { c4.setOnClickListener{ startActivity(Intent(requireActivity(), SanitizerReminder::class.java)) } - } - binding.apply { c2.setOnClickListener{ startActivity(Intent(requireActivity(), MealReminder::class.java)) } - } - binding.apply { c3.setOnClickListener{ } } diff --git a/app/src/main/java/com/example/HealthyMode/UI/Task/AddTask.kt b/app/src/main/java/com/example/HealthyMode/UI/Task/AddTask.kt deleted file mode 100644 index 9e3e34a..0000000 --- a/app/src/main/java/com/example/HealthyMode/UI/Task/AddTask.kt +++ /dev/null @@ -1,188 +0,0 @@ -package com.example.HealthyMode.UI.Task - -import android.annotation.SuppressLint -import android.app.DatePickerDialog -import android.app.TimePickerDialog -import android.os.Bundle -import android.text.method.ScrollingMovementMethod -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.EditText -import android.widget.Scroller -import android.widget.Toast -import androidx.fragment.app.Fragment -import androidx.fragment.app.viewModels -import com.example.HealthyMode.Application.HMApplicaton -import com.example.HealthyMode.R -import com.example.HealthyMode.TodoDatabase.Todo -import com.example.HealthyMode.UI.Task.ViewModel.TodoModel -import com.example.HealthyMode.UI.Task.ViewModel.ViewModelFactory -import com.example.HealthyMode.databinding.FragmentAddTaskBinding -import java.util.* - - -@Suppress("INTEGER_OVERFLOW") -class AddTask : Fragment() ,View.OnClickListener{ -private lateinit var binding: FragmentAddTaskBinding - private val TodoViewModel: TodoModel by viewModels{ - ViewModelFactory((requireActivity().application as HMApplicaton).repository) - } - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - binding= FragmentAddTaskBinding.inflate(inflater,container,false) - return binding.root - } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - binding.StartDate.setOnClickListener(this) - binding.StartTime.setOnClickListener(this) - binding.EndDate.setOnClickListener(this) - binding.EndTime.setOnClickListener(this) - binding.addplan.setOnClickListener(this) - binding.description.setScroller(Scroller(context)) - binding.description.isVerticalScrollBarEnabled=true - binding.description.setMovementMethod(ScrollingMovementMethod()); - } - @SuppressLint("SetTextI18n") - override fun onClick(v: View?) { - when(v!!.id){ - R.id.StartDate->{ - clickDataPicker(binding.StartDate) - return - } - R.id.EndDate->{ - clickDataPicker(binding.EndDate) - return - } - R.id.EndTime->{ - showTimePicker(binding.EndTime) - return - } - R.id.StartTime->{ - showTimePicker(binding.StartTime) - return - } - R.id.reminder->{ - binding.reminder.setText("30 min") - } - R.id.addplan->{ - val plan=binding.description.text.toString().trim{it<=' '} - val startdate=binding.StartDate.text.toString().trim{it<=' '} - val starttime=binding.StartTime.text.toString().trim{it<=' '} - val enddate=binding.EndDate.text.toString().trim{it<=' '} - val endtime=binding.EndTime.text.toString().trim{it<=' '} - val rem=binding.reminder.text.toString().trim{it<=' '} - when{ - plan.isEmpty() -> { - binding.description.error = "Required" - return - } - startdate.isEmpty() -> { - binding.StartDate.error = "Required" - return - } - starttime.isEmpty() -> { - binding.StartTime.error = "Required" - return - } - enddate.isEmpty() -> { - binding.EndDate.error = "Required" - return - } - endtime.isEmpty() -> { - binding.EndTime.error = "Required" - return - } - else -> { - val plans: Todo =Todo( - 0, - plan, - startdate, - starttime, - enddate, - endtime, - rem - ) - TodoViewModel.insertTodo(plans) - Toast.makeText(requireContext(), "Plan Set Successfully", Toast.LENGTH_SHORT).show() - binding.description.setText("") - binding.StartTime.setText("") - binding.StartDate.setText("") - binding.EndTime.setText("") - binding.EndDate.setText("") - binding.reminder.setText("") - } - } - } - } - } - @SuppressLint("SetTextI18n") - fun clickDataPicker(v:EditText){ - val c = Calendar.getInstance() - val year = c.get(Calendar.YEAR) - val month = c.get(Calendar.MONTH) - val day = c.get(Calendar.DAY_OF_MONTH) - val dpd = DatePickerDialog( - requireContext(), - { view, year, monthOfYear, dayOfMonth -> - v.setText("$dayOfMonth/${monthOfYear + 1}/$year") - }, - year, - month, - day - ) -// dpd.datePicker.maxDate = Date().time + (86400000) - dpd.show() - } - // function to show a time picker dialog and return the selected time as a string - private fun showTimePicker(v:EditText) { - val timePicker=TimePickerDialog.OnTimeSetListener { view, hourOfDay, minute -> - // logic to properly handle - // the picked timings by user - val formattedTime: String = when { - hourOfDay == 0 -> { - if (minute < 10) { - "${hourOfDay + 12}:0${minute} am" - } else { - "${hourOfDay + 12}:${minute} am" - } - } - hourOfDay > 12 -> { - if (minute < 10) { - "${hourOfDay - 12}:0${minute} pm" - } else { - "${hourOfDay - 12}:${minute} pm" - } - } - hourOfDay == 12 -> { - if (minute < 10) { - "${hourOfDay}:0${minute} pm" - } else { - "${hourOfDay}:${minute} pm" - } - } - else -> { - if (minute < 10) { - "${hourOfDay}:${minute} am" - } else { - "${hourOfDay}:${minute} am" - } - } - } - - v.setText(formattedTime) - } - val calendar = Calendar.getInstance() - // get the current hour and minute - val hour = calendar.get(Calendar.HOUR_OF_DAY) - val minute = calendar.get(Calendar.MINUTE) - // create a time picker dialog with the current time as the default value - val timePickerDialog = TimePickerDialog(context, timePicker, hour, minute, true) - // show the dialog - timePickerDialog.show() - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/example/HealthyMode/UI/Task/Add_Task.kt b/app/src/main/java/com/example/HealthyMode/UI/Task/Add_Task.kt index 2aa2406..3189348 100644 --- a/app/src/main/java/com/example/HealthyMode/UI/Task/Add_Task.kt +++ b/app/src/main/java/com/example/HealthyMode/UI/Task/Add_Task.kt @@ -1,31 +1,28 @@ package com.example.HealthyMode.UI.Task import android.annotation.SuppressLint -import android.app.DatePickerDialog +import android.os.Build import android.os.Bundle import android.view.View -import android.widget.EditText import android.widget.Scroller import android.widget.Toast import androidx.activity.viewModels +import androidx.annotation.RequiresApi import androidx.appcompat.app.AppCompatActivity -import com.example.HealthyMode.Application.HMApplicaton import com.example.HealthyMode.R import com.example.HealthyMode.TodoDatabase.Todo import com.example.HealthyMode.UI.Task.ViewModel.TodoModel -import com.example.HealthyMode.UI.Task.ViewModel.ViewModelFactory import com.example.HealthyMode.Utils.Constant +import com.example.HealthyMode.Utils.Constant.clickDataPicker import com.example.HealthyMode.Utils.Constant.showTimePicker import com.example.HealthyMode.databinding.ActivityAddTaskBinding +import dagger.hilt.android.AndroidEntryPoint import java.util.* - +@AndroidEntryPoint class Add_Task : AppCompatActivity(), View.OnClickListener{ private lateinit var binding: ActivityAddTaskBinding - private val TodoViewModel: TodoModel by viewModels{ - ViewModelFactory((this.application as HMApplicaton).repository) - } - - + private var time: Long = 0 + private val ViewModel:TodoModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR @@ -38,18 +35,22 @@ class Add_Task : AppCompatActivity(), View.OnClickListener{ binding.addplan.setOnClickListener(this) binding.description.setScroller(Scroller(this)) binding.description.isVerticalScrollBarEnabled=true -// binding.description.setMovementMethod(ScrollingMovementMethod()); } + @RequiresApi(Build.VERSION_CODES.O) @SuppressLint("SetTextI18n") override fun onClick(v: View?) { when(v!!.id){ R.id.StartDate->{ - clickDataPicker(binding.StartDate) - return + clickDataPicker(binding.StartDate,this,object : Constant.OnTimeSelectedListener { + override fun onTimeSelected(timeInMillis: Long,Time:String) { + time+=timeInMillis + } + }) } R.id.EndDate->{ - clickDataPicker(binding.EndDate) - return + clickDataPicker(binding.EndDate,this,object : Constant.OnTimeSelectedListener { + override fun onTimeSelected(timeInMillis: Long,Time:String) {} + }) } R.id.EndTime->{ showTimePicker(binding.EndTime,this,object : Constant.OnTimeSelectedListener { @@ -58,20 +59,18 @@ class Add_Task : AppCompatActivity(), View.OnClickListener{ } R.id.StartTime->{ showTimePicker(binding.StartTime,this,object : Constant.OnTimeSelectedListener { - override fun onTimeSelected(timeInMillis: Long,Time:String) {} + override fun onTimeSelected(timeInMillis: Long,Time:String) { + time+=timeInMillis + } }) return } - R.id.reminder->{ - binding.reminder.setText("30 min") - } R.id.addplan->{ val plan=binding.description.text.toString().trim{it<=' '} val startdate=binding.StartDate.text.toString().trim{it<=' '} val starttime=binding.StartTime.text.toString().trim{it<=' '} val enddate=binding.EndDate.text.toString().trim{it<=' '} val endtime=binding.EndTime.text.toString().trim{it<=' '} - val rem=binding.reminder.text.toString().trim{it<=' '} when{ plan.isEmpty() -> { binding.description.error = "Required" @@ -95,45 +94,26 @@ class Add_Task : AppCompatActivity(), View.OnClickListener{ } else -> { val plans: Todo = Todo( - 0, + false, plan, startdate, starttime, enddate, endtime, - rem + "", + time ) - TodoViewModel.insertTodo(plans) + ViewModel.insertTodo(plans) Toast.makeText(this, "Plan Set Successfully", Toast.LENGTH_SHORT).show() binding.description.setText("") binding.StartTime.setText("") binding.StartDate.setText("") binding.EndTime.setText("") binding.EndDate.setText("") - binding.reminder.setText("") } } -// nav.visibility = View.VISIBLE } } } - @SuppressLint("SetTextI18n") - fun clickDataPicker(v: EditText){ - val c = Calendar.getInstance() - val year = c.get(Calendar.YEAR) - val month = c.get(Calendar.MONTH) - val day = c.get(Calendar.DAY_OF_MONTH) - val dpd = DatePickerDialog( - this, - { view, year, monthOfYear, dayOfMonth -> - v.setText("$dayOfMonth/${monthOfYear + 1}/$year") - }, - year, - month, - day - ) -// dpd.datePicker.maxDate = Date().time + (86400000) - dpd.show() - } } \ No newline at end of file diff --git a/app/src/main/java/com/example/HealthyMode/UI/Task/Module/TaskModule.kt b/app/src/main/java/com/example/HealthyMode/UI/Task/Module/TaskModule.kt new file mode 100644 index 0000000..b963367 --- /dev/null +++ b/app/src/main/java/com/example/HealthyMode/UI/Task/Module/TaskModule.kt @@ -0,0 +1,36 @@ +package com.example.HealthyMode.UI.Task.Module + +import android.app.Application +import androidx.room.Room +import com.example.HealthyMode.TodoDatabase.Repository.TodoRepository +import com.example.HealthyMode.TodoDatabase.Repository.TodoRepositoryImp +import com.example.HealthyMode.TodoDatabase.TodoDatabase +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object TaskModule { + @Provides + @Singleton + fun provideDatabase(app:Application):TodoDatabase{ + var INSTANCE:TodoDatabase?=null + if (INSTANCE ==null) + { + synchronized(this){ + INSTANCE = Room.databaseBuilder( + app,TodoDatabase::class.java,"TODO" + ).createFromAsset("Todo.db").build() + } + } + return INSTANCE!! + } + @Provides + @Singleton + fun provideRepository(db:TodoDatabase): TodoRepository{ + return TodoRepositoryImp(db.todoDao()) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/HealthyMode/UI/Task/TaskList.kt b/app/src/main/java/com/example/HealthyMode/UI/Task/TaskList.kt index 002f564..6605b14 100644 --- a/app/src/main/java/com/example/HealthyMode/UI/Task/TaskList.kt +++ b/app/src/main/java/com/example/HealthyMode/UI/Task/TaskList.kt @@ -6,62 +6,100 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels +import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager -import com.example.HealthyMode.Adapter.TodoAdapter -import com.example.HealthyMode.Application.HMApplicaton +import androidx.recyclerview.widget.RecyclerView +import com.codinginflow.mvvmtodo.ui.tasks.Adapter_todo +import com.example.HealthyMode.TodoDatabase.Todo import com.example.HealthyMode.UI.Task.ViewModel.TodoModel -import com.example.HealthyMode.UI.Task.ViewModel.ViewModelFactory import com.example.HealthyMode.databinding.FragmentTaskListBinding +import com.google.android.material.snackbar.Snackbar +import dagger.hilt.android.AndroidEntryPoint -class TaskList : Fragment() { - private var _binding: FragmentTaskListBinding?=null +@AndroidEntryPoint +class TaskList : Fragment(), Adapter_todo.OnItemClickListener { + private var _binding: FragmentTaskListBinding? = null private val binding get() = _binding!! - private lateinit var todoAdapter:TodoAdapter - private val TodoViewModel: TodoModel by viewModels{ - ViewModelFactory((requireActivity().application as HMApplicaton).repository) - } -// private lateinit var dao: TodoDao -// private lateinit var repository: TodoRepository -// private val viewModel: Model_view by viewModels { MainViewModelFactory(dao,repository) } - + private lateinit var todoAdapter: Adapter_todo + private val ViewModel: TodoModel by viewModels() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment - _binding=FragmentTaskListBinding.inflate(inflater,container,false) - val view= binding.root + _binding = FragmentTaskListBinding.inflate(inflater, container, false) + val view = binding.root return view } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.rev.layoutManager =LinearLayoutManager(requireContext()) - todoAdapter=TodoAdapter(this@TaskList) - binding.rev.adapter=todoAdapter - TodoViewModel.allplans.observe(viewLifecycleOwner) - { - plans-> + todoAdapter= Adapter_todo(this) + binding.apply { + rev.apply { + adapter = todoAdapter + layoutManager = LinearLayoutManager(requireContext()) + setHasFixedSize(true) + } + ItemTouchHelper(object : ItemTouchHelper.SimpleCallback( + 0, + ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT + ) { + override fun onMove( + recyclerView: RecyclerView, + viewHolder: RecyclerView.ViewHolder, + target: RecyclerView.ViewHolder + ): Boolean { + return false + } + + override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { + val task = todoAdapter.currentList[viewHolder.adapterPosition] + ViewModel.onTaskSwiped(task) + } + }).attachToRecyclerView(rev) + } + observe() + viewLifecycleOwner.lifecycleScope.launchWhenStarted { + ViewModel.tasksEvent.collect { event -> + when (event) { + is TodoModel.TasksEvent.ShowUndoDeleteTaskMessage -> { + + val snackbar=Snackbar.make(requireView(), "Plan deleted", Snackbar.LENGTH_LONG) + .setAction("UNDO") { + ViewModel.onUndoDeleteClick(event.task) + } + val params = snackbar.view.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, 134) + snackbar.view.layoutParams = params + snackbar.show() + } + } + } + } + } + + private fun observe() { + ViewModel.allplans.observe(viewLifecycleOwner) { plans -> plans?.let { - if(it.isNotEmpty()) - { - binding.noplan.visibility=View.GONE - binding.rev.visibility=View.VISIBLE - todoAdapter.planslist(it) - }else{ - binding.noplan.visibility=View.VISIBLE - binding.rev.visibility=View.GONE + if (it.isNotEmpty()) { + binding.noplan.visibility = View.GONE + binding.rev.visibility = View.VISIBLE + todoAdapter.submitList(it) + } else { + binding.noplan.visibility = View.VISIBLE + binding.rev.visibility = View.GONE } } + if(plans==null) + { + binding.noplan.visibility = View.VISIBLE + binding.rev.visibility = View.GONE + } } -// dao = TodoDatabase.getDatabase(requireContext()) -// val adapter = Adapter_todo() -// binding.rev.adapter = adapter.withLoadStateFooter( -// MainLoadStateAdapter() -// ) -// lifecycleScope.launch { -// viewModel.data.collectLatest { -// adapter.submitData(it) -// } -// } + } + override fun onCheckBoxClick(task: Todo, isChecked: Boolean) { + ViewModel.onTaskCheckedChanged(task, isChecked) } } \ No newline at end of file diff --git a/app/src/main/java/com/example/HealthyMode/UI/Task/ViewModel/Model_view.kt b/app/src/main/java/com/example/HealthyMode/UI/Task/ViewModel/Model_view.kt deleted file mode 100644 index 2f4779d..0000000 --- a/app/src/main/java/com/example/HealthyMode/UI/Task/ViewModel/Model_view.kt +++ /dev/null @@ -1,48 +0,0 @@ -//package com.example.HealthyMode.UI.Task.ViewModel -// -//import androidx.lifecycle.LiveData -//import androidx.lifecycle.ViewModel -//import androidx.lifecycle.ViewModelProvider -//import androidx.lifecycle.viewModelScope -//import androidx.paging.Pager -//import androidx.paging.PagingConfig -//import androidx.paging.cachedIn -//import com.example.HealthyMode.Paging.MainPagingSource -//import com.example.HealthyMode.Repository.TodoRepository -//import com.example.HealthyMode.TodoDatabase.Todo -//import com.example.HealthyMode.TodoDatabase.TodoDao -//import kotlinx.coroutines.Dispatchers -//import kotlinx.coroutines.launch -// -//class Model_view( -// private val dao: TodoDao,private val Repository: TodoRepository): ViewModel() { -// val allplans:LiveData> =Repository.planslist -// fun insertTodo(todo: Todo) -// { -// viewModelScope.launch (Dispatchers.IO){ -// Repository.insertTodo(todo) -// } -// } -// val data = Pager( -// PagingConfig( -// pageSize = 20, -// enablePlaceholders = false, -// initialLoadSize = 20 -// ), -// ) { -// MainPagingSource(dao) -// }.flow.cachedIn(viewModelScope) -// -//} -// -//class MainViewModelFactory( -// private val dao: TodoDao,private val Repository: TodoRepository -//) : ViewModelProvider.Factory { -// override fun create(modelClass: Class): T { -// if(modelClass.isAssignableFrom(Model_view::class.java)) { -// @Suppress("UNCHECKED_CAST") -// return Model_view(dao,Repository) as T -// } -// throw IllegalArgumentException("Unknown ViewModel class") -// } -//} diff --git a/app/src/main/java/com/example/HealthyMode/UI/Task/ViewModel/TodoModel.kt b/app/src/main/java/com/example/HealthyMode/UI/Task/ViewModel/TodoModel.kt index 15584cc..352c942 100644 --- a/app/src/main/java/com/example/HealthyMode/UI/Task/ViewModel/TodoModel.kt +++ b/app/src/main/java/com/example/HealthyMode/UI/Task/ViewModel/TodoModel.kt @@ -3,36 +3,38 @@ package com.example.HealthyMode.UI.Task.ViewModel import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.example.HealthyMode.Repository.TodoRepository +import com.example.HealthyMode.TodoDatabase.Repository.TodoRepository import com.example.HealthyMode.TodoDatabase.Todo +import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.launch +import javax.inject.Inject -class TodoModel(private val Repository: TodoRepository): ViewModel() { - val allplans:LiveData> =Repository.planslist -// fun getTodo():LiveData>{ -// return Repository.getTodo() -// } - fun insertTodo(todo: Todo) - { -// as it is suspended we use corotine - viewModelScope.launch (Dispatchers.IO){ +@HiltViewModel +class TodoModel @Inject constructor(private val Repository: TodoRepository) : ViewModel() { + val allplans: LiveData> = Repository.getList() + private val tasksEventChannel = Channel() + val tasksEvent = tasksEventChannel.receiveAsFlow() + fun insertTodo(todo: Todo) { + viewModelScope.launch(Dispatchers.IO) { Repository.insertTodo(todo) } } - fun deletetodo(todo: Todo) - { -// as it is suspended we use corotine - viewModelScope.launch (Dispatchers.IO){ - Repository.deleteTodo(todo) - } + + fun onTaskSwiped(task: Todo) = viewModelScope.launch { + Repository.deleteTodo(task) + tasksEventChannel.send(TasksEvent.ShowUndoDeleteTaskMessage(task)) } - fun updatetodo(todo: Todo) - { -// as it is suspended we use corotine - viewModelScope.launch (Dispatchers.IO){ - Repository.updateTodo(todo) - } + fun onTaskCheckedChanged(task: Todo, isChecked: Boolean) = viewModelScope.launch { + Repository.updateTodo(task.copy(status = isChecked)) + } + fun onUndoDeleteClick(task: Todo) = viewModelScope.launch { + Repository.insertTodo(task) } -} \ No newline at end of file + sealed class TasksEvent { + data class ShowUndoDeleteTaskMessage(val task: Todo) : TasksEvent() + } +} diff --git a/app/src/main/java/com/example/HealthyMode/UI/Task/ViewModel/ViewModelFactory.kt b/app/src/main/java/com/example/HealthyMode/UI/Task/ViewModel/ViewModelFactory.kt deleted file mode 100644 index 97091bf..0000000 --- a/app/src/main/java/com/example/HealthyMode/UI/Task/ViewModel/ViewModelFactory.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.example.HealthyMode.UI.Task.ViewModel - -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider -import com.example.HealthyMode.Repository.TodoRepository - -@Suppress("UNCHECKED_CAST") -class ViewModelFactory(private val Repository: TodoRepository):ViewModelProvider.Factory { - override fun create(modelClass: Class): T { - if(modelClass.isAssignableFrom(TodoModel::class.java)) - { - return TodoModel(Repository) as T - } - throw IllegalArgumentException("Unknown ViewModel class") - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/example/HealthyMode/Utils/Constant.kt b/app/src/main/java/com/example/HealthyMode/Utils/Constant.kt index bda81c5..f7336d8 100644 --- a/app/src/main/java/com/example/HealthyMode/Utils/Constant.kt +++ b/app/src/main/java/com/example/HealthyMode/Utils/Constant.kt @@ -2,6 +2,7 @@ package com.example.HealthyMode.Utils import android.annotation.SuppressLint import android.app.ActivityManager +import android.app.DatePickerDialog import android.app.TimePickerDialog import android.content.Context import android.content.SharedPreferences @@ -24,6 +25,8 @@ import com.github.mikephil.charting.formatter.IFillFormatter import com.github.mikephil.charting.formatter.ValueFormatter import com.github.mikephil.charting.interfaces.dataprovider.LineDataProvider import com.github.mikephil.charting.interfaces.datasets.ILineDataSet +import java.time.LocalDate +import java.time.ZoneId import java.util.* object @@ -219,6 +222,27 @@ Constant { val timePickerDialog = TimePickerDialog(context, timePicker, hour, minute ,false) timePickerDialog.show() } + @RequiresApi(Build.VERSION_CODES.O) + fun clickDataPicker(v: EditText, context: Context, listener: OnTimeSelectedListener){ + val c = Calendar.getInstance() + val year = c.get(Calendar.YEAR) + val month = c.get(Calendar.MONTH) + val day = c.get(Calendar.DAY_OF_MONTH) + val dpd = DatePickerDialog( + context, + { view, year, monthOfYear, dayOfMonth -> + v.setText("$dayOfMonth/${monthOfYear + 1}/$year") + val date = LocalDate.of(year, monthOfYear + 1, dayOfMonth) + val dateTime = date.atStartOfDay() + val milliseconds = dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() + listener.onTimeSelected(milliseconds.toLong(),"$dayOfMonth/${monthOfYear + 1}/$year") + }, + year, + month, + day + ) + dpd.show() + } fun currentDate():Long{ val calendar = Calendar.getInstance() calendar.set(Calendar.HOUR_OF_DAY, 0) diff --git a/app/src/main/res/layout/activity_add_task.xml b/app/src/main/res/layout/activity_add_task.xml index 7e63ee8..5ba6464 100644 --- a/app/src/main/res/layout/activity_add_task.xml +++ b/app/src/main/res/layout/activity_add_task.xml @@ -199,40 +199,11 @@ android:layout_height="wrap_content" android:baselineAligned="false" android:orientation="horizontal" - android:weightSum="2" + android:layout_marginStart="30dp" + android:layout_marginEnd="30dp" + android:layout_marginTop="40dp" app:layout_constraintTop_toBottomOf="@+id/linearLayout10"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_plans_fragment.xml b/app/src/main/res/layout/fragment_plans_fragment.xml index f1cb260..14f369e 100644 --- a/app/src/main/res/layout/fragment_plans_fragment.xml +++ b/app/src/main/res/layout/fragment_plans_fragment.xml @@ -163,46 +163,6 @@ - - - - - - @color/background + @style/MySnackbar \ No newline at end of file diff --git a/app/src/main/res/values/style.xml b/app/src/main/res/values/style.xml index 3cf1e65..06abb37 100644 --- a/app/src/main/res/values/style.xml +++ b/app/src/main/res/values/style.xml @@ -15,4 +15,7 @@ + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 372f1f9..8bd43cc 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -14,5 +14,6 @@ @color/background + @style/MySnackbar \ No newline at end of file