diff --git a/app/src/main/java/com/example/android/guesstheword/screens/score/ScoreFragment.kt b/app/src/main/java/com/example/android/guesstheword/screens/score/ScoreFragment.kt index 63bcb61..97e31c8 100644 --- a/app/src/main/java/com/example/android/guesstheword/screens/score/ScoreFragment.kt +++ b/app/src/main/java/com/example/android/guesstheword/screens/score/ScoreFragment.kt @@ -22,6 +22,8 @@ import android.view.View import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProviders import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.example.android.guesstheword.R @@ -32,6 +34,9 @@ import com.example.android.guesstheword.databinding.ScoreFragmentBinding */ class ScoreFragment : Fragment() { + private lateinit var viewModel: ScoreViewModel + private lateinit var viewModelFactory: ScoreViewModelFactory + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -46,15 +51,30 @@ class ScoreFragment : Fragment() { false ) - // Get args using by navArgs property delegate val scoreFragmentArgs by navArgs() - binding.scoreText.text = scoreFragmentArgs.score.toString() - binding.playAgainButton.setOnClickListener { onPlayAgain() } + viewModelFactory = ScoreViewModelFactory(scoreFragmentArgs.score) + viewModel = ViewModelProviders.of(this, viewModelFactory) + .get(ScoreViewModel::class.java) + + viewModel.score.observe(this, Observer { + binding.scoreText.text = getString(R.string.score_format, it) + }) + + viewModel.eventPlayAgain.observe(this, Observer { + if (it) { + onPlayAgain() + } + }) + + binding.playAgainButton.setOnClickListener { + viewModel.playAgain() + } return binding.root } private fun onPlayAgain() { findNavController().navigate(ScoreFragmentDirections.actionRestart()) + viewModel.onPlayAgainComplete() } } diff --git a/app/src/main/java/com/example/android/guesstheword/screens/score/ScoreViewModel.kt b/app/src/main/java/com/example/android/guesstheword/screens/score/ScoreViewModel.kt new file mode 100644 index 0000000..626f7c9 --- /dev/null +++ b/app/src/main/java/com/example/android/guesstheword/screens/score/ScoreViewModel.kt @@ -0,0 +1,33 @@ +package com.example.android.guesstheword.screens.score + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import timber.log.Timber + +class ScoreViewModel(var finalScore: Int): ViewModel() { + + private val _score = MutableLiveData() + val score: LiveData + get() = _score + + + private val _eventPlayAgain = MutableLiveData() + val eventPlayAgain: LiveData + get() = _eventPlayAgain + + init { + Timber.i("finalScore: $finalScore") + _eventPlayAgain.value = false + _score.value = finalScore + } + + fun playAgain() { + _eventPlayAgain.value = true + } + + fun onPlayAgainComplete() { + _eventPlayAgain.value = false + } +} + diff --git a/app/src/main/java/com/example/android/guesstheword/screens/score/ScoreViewModelFactory.kt b/app/src/main/java/com/example/android/guesstheword/screens/score/ScoreViewModelFactory.kt new file mode 100644 index 0000000..d93bbd2 --- /dev/null +++ b/app/src/main/java/com/example/android/guesstheword/screens/score/ScoreViewModelFactory.kt @@ -0,0 +1,13 @@ +package com.example.android.guesstheword.screens.score + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider + +class ScoreViewModelFactory(private val finalScore: Int) : ViewModelProvider.Factory { + override fun create(modelClass: Class): T { + if (modelClass.isAssignableFrom(ScoreViewModel::class.java)) { + // TODO Construct and return the ScoreViewModel + } + throw IllegalArgumentException("Unknown ViewModel class") + } +} \ No newline at end of file