добавление открытия созданных тренировок
This commit is contained in:
parent
3078443367
commit
57f305819a
@ -34,12 +34,13 @@ class AddWorkout : AppCompatActivity() {
|
||||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
|
||||
insets
|
||||
}
|
||||
|
||||
|
||||
val workoutViewModel = ViewModelProvider(
|
||||
this,
|
||||
ViewModelProvider.AndroidViewModelFactory.getInstance(application)
|
||||
)[WorkoutViewModel::class.java]
|
||||
val workoutId = intent.getIntExtra("workoutId", -1)
|
||||
|
||||
|
||||
|
||||
editWorkoutView = findViewById(R.id.name_training)
|
||||
numWorkoutView = findViewById(R.id.num_exercise)
|
||||
@ -48,6 +49,27 @@ class AddWorkout : AppCompatActivity() {
|
||||
numSetsView = findViewById(R.id.numbers_of_sets_all)
|
||||
timeWorkoutView = findViewById(R.id.time_work_all)
|
||||
|
||||
if (workoutId != -1) {
|
||||
val viewModel = ViewModelProvider(
|
||||
this,
|
||||
ViewModelProvider.AndroidViewModelFactory.getInstance(application)
|
||||
)[WorkoutViewModel::class.java]
|
||||
|
||||
viewModel.allWorkouts.observe(this) { workouts ->
|
||||
val workout = workouts.find { it.id == workoutId }
|
||||
if (workout != null) {
|
||||
editWorkoutView.setText(workout.name)
|
||||
numWorkoutView.setText(workout.numExercises.toString())
|
||||
numRestWorkoutView.setText(workout.restBetweenExercises.toString())
|
||||
numRestSetsView.setText(workout.restBetweenApproaches.toString())
|
||||
numSetsView.setText(workout.numApproaches.toString())
|
||||
timeWorkoutView.setText(workout.exerciseDuration.toString())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
val buttonSaveAll: Button = findViewById(R.id.btn_save_all)
|
||||
buttonSaveAll.setOnClickListener {
|
||||
@ -85,7 +107,7 @@ class AddWorkout : AppCompatActivity() {
|
||||
)
|
||||
workoutViewModel.insert(newWorkout)
|
||||
|
||||
Toast.makeText(this, "Упражнение сохранено", Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(this, "Тренировка сохранена", Toast.LENGTH_SHORT).show()
|
||||
|
||||
isSave = true
|
||||
|
||||
|
@ -63,6 +63,7 @@ class AllTraining : AppCompatActivity() {
|
||||
trainingId = 0
|
||||
)
|
||||
exerciseViewModel.insert(newExercise)
|
||||
//exerciseViewModel.addUnsavedExercise(newExercise)
|
||||
Toast.makeText(this, "Упражнение сохранено", Toast.LENGTH_SHORT).show()
|
||||
isSave = true
|
||||
finish()
|
||||
|
@ -13,6 +13,7 @@ import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.example.timert.data.adapter.ExerciseAdapter
|
||||
@ -20,10 +21,12 @@ import com.example.timert.data.entity.Training
|
||||
import com.example.timert.data.viewModel.ExerciseViewModel
|
||||
import com.example.timert.data.viewModel.TrainingViewModel
|
||||
import com.example.timert.data.viewModel.WorkoutViewModel
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class CreatingTraining : AppCompatActivity() {
|
||||
|
||||
private lateinit var viewModel: ExerciseViewModel
|
||||
private lateinit var trainingViewModel: TrainingViewModel
|
||||
|
||||
private lateinit var name_training: EditText
|
||||
private lateinit var numSets: EditText
|
||||
@ -40,46 +43,52 @@ class CreatingTraining : AppCompatActivity() {
|
||||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
|
||||
insets
|
||||
}
|
||||
|
||||
|
||||
|
||||
viewModel = ViewModelProvider(
|
||||
this,
|
||||
ViewModelProvider.AndroidViewModelFactory.getInstance(application)
|
||||
)[ExerciseViewModel::class.java]
|
||||
|
||||
|
||||
name_training = findViewById(R.id.name_training)
|
||||
numSets = findViewById(R.id.numbers_of_sets)
|
||||
restSets = findViewById(R.id.rest_sets)
|
||||
|
||||
|
||||
val recyclerView = findViewById<RecyclerView>(R.id.exercise)
|
||||
val buttonSave: Button = findViewById(R.id.btn_save)
|
||||
|
||||
viewModel = ViewModelProvider(this)[ExerciseViewModel::class.java]
|
||||
trainingViewModel = ViewModelProvider(this)[TrainingViewModel::class.java]
|
||||
|
||||
val adapter = ExerciseAdapter { id ->
|
||||
viewModel.deleteExerciseById(id)
|
||||
}
|
||||
// adapter = ExerciseAdapter(this)
|
||||
val recyclerView = findViewById<RecyclerView>(R.id.exercise)
|
||||
|
||||
|
||||
recyclerView.adapter = adapter
|
||||
recyclerView.layoutManager = LinearLayoutManager(this)
|
||||
|
||||
|
||||
viewModel.allExercise.observe(this) { exercises ->
|
||||
exercises?.let {
|
||||
adapter.setExercises(it)
|
||||
val type = intent.getStringExtra("type")
|
||||
val trainingId = intent.getIntExtra("trainingId", -1)
|
||||
if (trainingId != -1) {
|
||||
// Загружаем тренировку по ID
|
||||
trainingViewModel.getTrainingById(trainingId).observe(this) { training ->
|
||||
name_training.setText(training.name)
|
||||
numSets.setText(training.numSets.toString())
|
||||
restSets.setText(training.restBetweenSets.toString())
|
||||
}
|
||||
|
||||
if (type == "trainingWithExercises") {
|
||||
// Загружаем упражнения только если тренировка с упражнениями
|
||||
viewModel.getExercisesByTrainingId(trainingId).observe(this) { exercises ->
|
||||
adapter.setExercises(exercises)
|
||||
}
|
||||
viewModel.unsavedExercises.observe(this) { exercises ->
|
||||
adapter.setExercises(exercises)
|
||||
}
|
||||
} else {
|
||||
adapter.setExercises(emptyList()) // у обычной тренировки нет упражнений
|
||||
}
|
||||
} else {
|
||||
// Создание новой — поля пустые, список упражнений пустой
|
||||
adapter.setExercises(emptyList())
|
||||
}
|
||||
|
||||
val trainingViewModel = ViewModelProvider(
|
||||
this,
|
||||
ViewModelProvider.AndroidViewModelFactory.getInstance(application)
|
||||
)[TrainingViewModel::class.java]
|
||||
|
||||
|
||||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
|
||||
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
|
||||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
|
||||
insets
|
||||
}
|
||||
val buttonSave: Button = findViewById(R.id.btn_save)
|
||||
buttonSave.setOnClickListener {
|
||||
val name = name_training.text.toString()
|
||||
val numS = numSets.text.toString()
|
||||
|
@ -34,7 +34,17 @@ class MainActivity : AppCompatActivity() {
|
||||
}
|
||||
adapter = TrainingAdapter(
|
||||
onDeleteWorkout = { id -> workoutViewModel.deleteWorkoutById(id) },
|
||||
onDeleteTraining = { id -> trainingViewModel.deleteTrainingById(id) }
|
||||
onDeleteTraining = { id -> trainingViewModel.deleteTrainingById(id) },
|
||||
onWorkoutClick = { workout ->
|
||||
val intent = Intent(this, AddWorkout::class.java)
|
||||
intent.putExtra("workout_id", workout.id)
|
||||
startActivity(intent)
|
||||
},
|
||||
onTrainingClick = { training ->
|
||||
val intent = Intent(this, CreatingTraining::class.java)
|
||||
intent.putExtra("training_id", training.id)
|
||||
startActivity(intent)
|
||||
}
|
||||
)
|
||||
|
||||
val recyclerView = findViewById<RecyclerView>(R.id.workout)
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.example.timert.data.adapter
|
||||
|
||||
import android.content.Intent
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
@ -9,14 +10,20 @@ import android.widget.TextView
|
||||
import androidx.recyclerview.widget.DiffUtil
|
||||
import androidx.recyclerview.widget.ListAdapter
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.example.timert.AddWorkout
|
||||
import com.example.timert.CreatingTraining
|
||||
import com.example.timert.R
|
||||
import com.example.timert.com.example.timert.data.entity.Workout
|
||||
import com.example.timert.data.TrainingItem
|
||||
import com.example.timert.data.entity.Training
|
||||
import com.example.timert.data.trainingWithExercise
|
||||
|
||||
|
||||
class TrainingAdapter( private val onDeleteWorkout: (Int) -> Unit,
|
||||
private val onDeleteTraining: (Int) -> Unit
|
||||
private val onDeleteTraining: (Int) -> Unit,
|
||||
private val onWorkoutClick: (Workout) -> Unit,
|
||||
private val onTrainingClick: (Training) -> Unit
|
||||
|
||||
) : ListAdapter<TrainingItem, RecyclerView.ViewHolder>(DiffCallback()) {
|
||||
|
||||
companion object {
|
||||
@ -35,8 +42,8 @@ class TrainingAdapter( private val onDeleteWorkout: (Int) -> Unit,
|
||||
val inflater = LayoutInflater.from(parent.context)
|
||||
val view = inflater.inflate(R.layout.training_item_layout, parent, false) // один layout
|
||||
return when (viewType) {
|
||||
TYPE_WORKOUT -> WorkoutViewHolder(view, onDeleteWorkout)
|
||||
TYPE_TRAINING_WITH_EXERCISES -> TrainingViewHolder(view, onDeleteTraining)
|
||||
TYPE_WORKOUT -> WorkoutViewHolder(view, onDeleteWorkout, onWorkoutClick)
|
||||
TYPE_TRAINING_WITH_EXERCISES -> TrainingViewHolder(view, onDeleteTraining, onTrainingClick)
|
||||
else -> throw IllegalArgumentException("Invalid view type")
|
||||
}
|
||||
}
|
||||
@ -48,23 +55,40 @@ class TrainingAdapter( private val onDeleteWorkout: (Int) -> Unit,
|
||||
}
|
||||
}
|
||||
|
||||
class WorkoutViewHolder(itemView: View, private val onDelete: (Int) -> Unit) :
|
||||
class WorkoutViewHolder(itemView: View, private val onDelete: (Int) -> Unit,
|
||||
private val onClick: (Workout) -> Unit) :
|
||||
RecyclerView.ViewHolder(itemView) {
|
||||
fun bind(workout: Workout) {
|
||||
itemView.findViewById<TextView>(R.id.training_text).text = workout.name
|
||||
itemView.findViewById<ImageButton>(R.id.deleteButtonTraining).setOnClickListener {
|
||||
onDelete(workout.id)
|
||||
}
|
||||
|
||||
itemView.setOnClickListener {
|
||||
val context = itemView.context
|
||||
val intent = Intent(context, AddWorkout::class.java)
|
||||
intent.putExtra("workoutId", workout.id)
|
||||
context.startActivity(intent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class TrainingViewHolder(itemView: View, private val onDelete: (Int) -> Unit) :
|
||||
class TrainingViewHolder(itemView: View, private val onDelete: (Int) -> Unit,
|
||||
private val onClick: (Training) -> Unit) :
|
||||
RecyclerView.ViewHolder(itemView) {
|
||||
fun bind(trainingWithExercise: trainingWithExercise) {
|
||||
val training = trainingWithExercise.training
|
||||
itemView.findViewById<TextView>(R.id.training_text).text = trainingWithExercise.training.name
|
||||
itemView.findViewById<ImageButton>(R.id.deleteButtonTraining).setOnClickListener {
|
||||
onDelete(trainingWithExercise.training.id)
|
||||
}
|
||||
itemView.setOnClickListener {
|
||||
val context = itemView.context
|
||||
val intent = Intent(context, CreatingTraining::class.java)
|
||||
intent.putExtra("type", "trainingWithExercises")
|
||||
intent.putExtra("trainingId", trainingWithExercise.training.id)
|
||||
context.startActivity(intent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -26,4 +26,7 @@ interface ExerciseDao {
|
||||
|
||||
@Query("UPDATE exercise_table SET trainingId = :newTrainingId WHERE trainingId = 0")
|
||||
suspend fun updateExercisesWithTrainingId(newTrainingId: Int)
|
||||
|
||||
@Query("SELECT * FROM exercise_table WHERE trainingId = :trainingId")
|
||||
fun getExercisesByTrainingId(trainingId: Int): LiveData<List<Exercise>>
|
||||
}
|
@ -38,4 +38,7 @@ interface TrainingDao {
|
||||
@Transaction
|
||||
@Query("SELECT * FROM training")
|
||||
fun getTrainingsWithExercises(): LiveData<List<trainingWithExercise>>
|
||||
|
||||
@Query("SELECT * FROM training WHERE id = :id")
|
||||
fun getTrainingById(id: Int): LiveData<Training>
|
||||
}
|
||||
|
@ -14,4 +14,8 @@ class ExerciseRepository(private val exerciseDao:ExerciseDao){
|
||||
exerciseDao.deleteById(id)
|
||||
}
|
||||
|
||||
fun getExercisesByTrainingId(trainingId: Int): LiveData<List<Exercise>> {
|
||||
return exerciseDao.getExercisesByTrainingId(trainingId)
|
||||
}
|
||||
|
||||
}
|
@ -20,4 +20,8 @@ class TrainingRepository(private val trainingDao: TrainingDao) {
|
||||
trainingDao.deleteById(id)
|
||||
}
|
||||
|
||||
fun getTrainingById(id: Int): LiveData<Training> {
|
||||
return trainingDao.getTrainingById(id)
|
||||
}
|
||||
|
||||
}
|
@ -3,6 +3,7 @@ package com.example.timert.data.viewModel
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.example.timert.com.example.timert.data.database.AppDatabase
|
||||
import com.example.timert.data.entity.Exercise
|
||||
@ -12,7 +13,8 @@ import kotlinx.coroutines.launch
|
||||
class ExerciseViewModel(application: Application):AndroidViewModel(application){
|
||||
private val repository: ExerciseRepository
|
||||
val allExercise: LiveData<List<Exercise>>
|
||||
|
||||
private val _unsavedExercises = MutableLiveData<List<Exercise>>(emptyList())
|
||||
val unsavedExercises: LiveData<List<Exercise>> = _unsavedExercises
|
||||
init{
|
||||
val exercisesDao = AppDatabase.getDatabase(application).exerciseDao()
|
||||
repository = ExerciseRepository(exercisesDao)
|
||||
@ -25,4 +27,20 @@ class ExerciseViewModel(application: Application):AndroidViewModel(application){
|
||||
fun deleteExerciseById(id: Int) = viewModelScope.launch {
|
||||
repository.deleteExerciseById(id)
|
||||
}
|
||||
|
||||
fun getExercisesByTrainingId(trainingId: Int): LiveData<List<Exercise>> {
|
||||
return repository.getExercisesByTrainingId(trainingId)
|
||||
}
|
||||
|
||||
fun addUnsavedExercise(exercise: Exercise) {
|
||||
_unsavedExercises.value = _unsavedExercises.value.orEmpty() + exercise
|
||||
}
|
||||
|
||||
fun deleteUnsavedExerciseById(id: Int) {
|
||||
_unsavedExercises.value = _unsavedExercises.value.orEmpty().filterNot { it.id == id }
|
||||
}
|
||||
|
||||
fun clearUnsavedExercises() {
|
||||
_unsavedExercises.value = emptyList()
|
||||
}
|
||||
}
|
@ -38,6 +38,10 @@ class TrainingViewModel (application: Application): AndroidViewModel(application
|
||||
repository.delete(training)
|
||||
}
|
||||
|
||||
fun getTrainingById(id: Int): LiveData<Training> {
|
||||
return repository.getTrainingById(id)
|
||||
}
|
||||
|
||||
fun insertTrainingAndLinkExercises(training: Training) {
|
||||
viewModelScope.launch {
|
||||
val newId = repository.insert(training) // возвращает id
|
||||
|
Loading…
Reference in New Issue
Block a user