From 9302068836a6baa96f7f4cdc51d0786afb35908e Mon Sep 17 00:00:00 2001 From: Gertjan Bosteels Date: Tue, 2 Nov 2021 15:55:56 +0100 Subject: [PATCH 01/10] refactors to viewModel class --- JokeApp/app/build.gradle | 2 +- .../main/java/com/example/jokeapp/Comedian.kt | 28 -------------- .../{ => screens/jokes}/JokeFragment.kt | 37 +++++++++++-------- .../jokes/JokeViewModel.kt} | 32 +++++++++++++--- .../app/src/main/res/layout/fragment_joke.xml | 2 +- .../src/main/res/navigation/navigation.xml | 2 +- 6 files changed, 51 insertions(+), 52 deletions(-) delete mode 100644 JokeApp/app/src/main/java/com/example/jokeapp/Comedian.kt rename JokeApp/app/src/main/java/com/example/jokeapp/{ => screens/jokes}/JokeFragment.kt (81%) rename JokeApp/app/src/main/java/com/example/jokeapp/{JokeBook.kt => screens/jokes/JokeViewModel.kt} (67%) diff --git a/JokeApp/app/build.gradle b/JokeApp/app/build.gradle index e709117..993e99e 100644 --- a/JokeApp/app/build.gradle +++ b/JokeApp/app/build.gradle @@ -56,7 +56,7 @@ dependencies { implementation "android.arch.navigation:navigation-fragment-ktx:$version_navigation" implementation "android.arch.navigation:navigation-ui-ktx:$version_navigation" implementation 'com.jakewharton.timber:timber:5.0.1' - + implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' } diff --git a/JokeApp/app/src/main/java/com/example/jokeapp/Comedian.kt b/JokeApp/app/src/main/java/com/example/jokeapp/Comedian.kt deleted file mode 100644 index ef38f2b..0000000 --- a/JokeApp/app/src/main/java/com/example/jokeapp/Comedian.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.example.jokeapp - -class Comedian (var happyJokes:Int = 0, var badJokes: Int = 0) { - /** - * A Comedian tells joke using a Jokebook - * The comedian can get good and bad points. Every three jokes there is an evaluation - */ - fun isHappy() = happyJokes > 2 - fun shouldEvaluate() = happyJokes+badJokes > 2 - - var totalJokesTold = 0 - - fun startOver() { - happyJokes = 0 - badJokes = 0 - - } - - fun goodJoke() { - happyJokes++ - } - - fun badJoke() { - badJokes++ - } - - -} \ No newline at end of file diff --git a/JokeApp/app/src/main/java/com/example/jokeapp/JokeFragment.kt b/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeFragment.kt similarity index 81% rename from JokeApp/app/src/main/java/com/example/jokeapp/JokeFragment.kt rename to JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeFragment.kt index a9f1f9b..c3c12a2 100644 --- a/JokeApp/app/src/main/java/com/example/jokeapp/JokeFragment.kt +++ b/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeFragment.kt @@ -1,15 +1,13 @@ -package com.example.jokeapp +package com.example.jokeapp.screens.jokes import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.Toast import androidx.databinding.DataBindingUtil -import androidx.navigation.Navigation import androidx.navigation.findNavController -import com.example.jokeapp.databinding.FragmentHomeBinding +import com.example.jokeapp.R import com.example.jokeapp.databinding.FragmentJokeBinding import kotlin.random.Random @@ -26,10 +24,7 @@ class JokeFragment : Fragment() { } lateinit var binding: FragmentJokeBinding - - - private val myJokeBook = JokeBook("") - private val myComedian = Comedian() + lateinit var viewModel : JokeViewModel override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -40,7 +35,12 @@ class JokeFragment : Fragment() { binding = DataBindingUtil.inflate(inflater, R.layout.fragment_joke, container, false) - binding.jokes = myJokeBook + viewModel = JokeViewModel() + + binding.jokes = viewModel + + + changeJoke() //setting an initial joke setOnClickListeners() @@ -67,18 +67,23 @@ class JokeFragment : Fragment() { * If no evaluation is needed, go to next joke * If evaluation needed, go to next screen depending on score. */ - if(myComedian.shouldEvaluate()){ - if(myComedian.isHappy()){ + if(viewModel.shouldEvaluate()){ + if(viewModel.isHappy()){ //navigate to happy fragment //Toast.makeText(activity, "Comedian is Happy!", Toast.LENGTH_SHORT).show() - view?.findNavController()?.navigate(JokeFragmentDirections.actionJokeFragmentToHappyComedian(myComedian.happyJokes, myComedian.badJokes)) + view?.findNavController()?.navigate( + JokeFragmentDirections.actionJokeFragmentToHappyComedian( + viewModel.happyJokes, + viewModel.badJokes + ) + ) } else{ //navigate to unhappy fragment //Toast.makeText(activity, "Comedian is Unhappy", Toast.LENGTH_SHORT).show() view?.findNavController()?.navigate(JokeFragmentDirections.actionJokeFragmentToSadComedian()) } - myComedian.startOver() + viewModel.startOver() } else{ changeJoke() @@ -95,17 +100,17 @@ class JokeFragment : Fragment() { } binding.happyImage.setImageResource(drawableResource) - myComedian.goodJoke() + viewModel.goodJoke() } private fun changeJoke() { //binding.jokeTextview.text = myJokeBook.getRandomJoke() - myJokeBook.changeCurrentJoke() + viewModel.changeCurrentJoke() binding.invalidateAll() //important! this binds the new data. } private fun countUnhappy(){ - myComedian.badJoke() + viewModel.badJoke() } diff --git a/JokeApp/app/src/main/java/com/example/jokeapp/JokeBook.kt b/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeViewModel.kt similarity index 67% rename from JokeApp/app/src/main/java/com/example/jokeapp/JokeBook.kt rename to JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeViewModel.kt index 592d7b0..f474897 100644 --- a/JokeApp/app/src/main/java/com/example/jokeapp/JokeBook.kt +++ b/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeViewModel.kt @@ -1,12 +1,14 @@ -package com.example.jokeapp +package com.example.jokeapp.screens.jokes -import android.util.Log +import androidx.lifecycle.ViewModel import kotlin.random.Random -data class JokeBook (var currentJoke: String = ""){ +class JokeViewModel: ViewModel() { + var currentJoke = "" + var happyJokes = 0 + var badJokes = 0 - - val jokes = listOf( + private val jokes = listOf( "My wife said I should do lunges to stay in shape. That would be a big step forward.", "I thought the dryer was shrinking my clothes. Turns out it was the refrigerator all along", "I only know 25 letters of the alphabet. I don't know y.", @@ -27,4 +29,24 @@ data class JokeBook (var currentJoke: String = ""){ //use mod to stay in the correct range currentJoke = jokes[randomListNumber] } + + fun isHappy() = happyJokes > 2 + fun shouldEvaluate() = happyJokes+badJokes > 2 + + var totalJokesTold = 0 + + fun startOver() { + happyJokes = 0 + badJokes = 0 + + } + + fun goodJoke() { + happyJokes++ + } + + fun badJoke() { + badJokes++ + } + } \ No newline at end of file diff --git a/JokeApp/app/src/main/res/layout/fragment_joke.xml b/JokeApp/app/src/main/res/layout/fragment_joke.xml index 6e1df34..3751561 100644 --- a/JokeApp/app/src/main/res/layout/fragment_joke.xml +++ b/JokeApp/app/src/main/res/layout/fragment_joke.xml @@ -6,7 +6,7 @@ + type="com.example.jokeapp.screens.jokes.JokeViewModel" /> Date: Tue, 2 Nov 2021 16:06:48 +0100 Subject: [PATCH 02/10] refactors current joke as liveData --- .../jokeapp/screens/jokes/JokeFragment.kt | 15 +++++++-------- .../jokeapp/screens/jokes/JokeViewModel.kt | 16 +++++++++------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeFragment.kt b/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeFragment.kt index c3c12a2..6bc27f0 100644 --- a/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeFragment.kt +++ b/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeFragment.kt @@ -6,6 +6,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.databinding.DataBindingUtil +import androidx.lifecycle.Observer import androidx.navigation.findNavController import com.example.jokeapp.R import com.example.jokeapp.databinding.FragmentJokeBinding @@ -39,9 +40,11 @@ class JokeFragment : Fragment() { binding.jokes = viewModel + viewModel.currentJoke.observe(viewLifecycleOwner, Observer { + newJoke -> binding.jokeTextview.text = newJoke + }) - - changeJoke() //setting an initial joke + viewModel.changeCurrentJoke() //setting an initial joke setOnClickListeners() return binding.root @@ -86,7 +89,7 @@ class JokeFragment : Fragment() { viewModel.startOver() } else{ - changeJoke() + viewModel.changeCurrentJoke() } } @@ -103,11 +106,7 @@ class JokeFragment : Fragment() { viewModel.goodJoke() } - private fun changeJoke() { - //binding.jokeTextview.text = myJokeBook.getRandomJoke() - viewModel.changeCurrentJoke() - binding.invalidateAll() //important! this binds the new data. - } + private fun countUnhappy(){ viewModel.badJoke() diff --git a/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeViewModel.kt b/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeViewModel.kt index f474897..8a74c7d 100644 --- a/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeViewModel.kt +++ b/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeViewModel.kt @@ -1,10 +1,12 @@ package com.example.jokeapp.screens.jokes +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import kotlin.random.Random class JokeViewModel: ViewModel() { - var currentJoke = "" + var happyJokes = 0 var badJokes = 0 @@ -18,16 +20,16 @@ class JokeViewModel: ViewModel() { "I used to be addicted to soap, but I'm clean now." ) - fun getRandomJoke() : String { - var randomListNumber = Random.nextInt(jokes.size) - return jokes[randomListNumber]; - } + private val _currentJoke = MutableLiveData() + val currentJoke: LiveData + get() = _currentJoke + fun changeCurrentJoke() { var randomListNumber = Random.nextInt(jokes.size) - if(currentJoke == jokes[randomListNumber]) randomListNumber = randomListNumber.plus(1).mod(jokes.size) + if(_currentJoke.value == jokes[randomListNumber]) randomListNumber = randomListNumber.plus(1).mod(jokes.size) //use mod to stay in the correct range - currentJoke = jokes[randomListNumber] + _currentJoke.value = jokes[randomListNumber] } fun isHappy() = happyJokes > 2 From 97134d101d6452a74125185d3403ac80a1520905 Mon Sep 17 00:00:00 2001 From: Gertjan Bosteels Date: Tue, 2 Nov 2021 20:12:07 +0100 Subject: [PATCH 03/10] refactors all logic to viewModel --- .../jokeapp/screens/jokes/JokeFragment.kt | 67 ++++++------------- .../jokeapp/screens/jokes/JokeViewModel.kt | 21 +++++- 2 files changed, 39 insertions(+), 49 deletions(-) diff --git a/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeFragment.kt b/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeFragment.kt index 6bc27f0..1f3726f 100644 --- a/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeFragment.kt +++ b/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeFragment.kt @@ -35,7 +35,6 @@ class JokeFragment : Fragment() { //Step 1, use databinding to inflate the xml binding = DataBindingUtil.inflate(inflater, R.layout.fragment_joke, container, false) - viewModel = JokeViewModel() binding.jokes = viewModel @@ -44,9 +43,24 @@ class JokeFragment : Fragment() { newJoke -> binding.jokeTextview.text = newJoke }) - viewModel.changeCurrentJoke() //setting an initial joke + + viewModel.shouldEvaluate.observe(viewLifecycleOwner, Observer { shouldEveluate -> + if(shouldEveluate){ + if(viewModel.isHappy()){ + //navigate to happy fragment + view?.findNavController()?.navigate(JokeFragmentDirections.actionJokeFragmentToHappyComedian(viewModel.happyJokes, viewModel.badJokes)) + } + else{ + //navigate to unhappy fragment + view?.findNavController()?.navigate(JokeFragmentDirections.actionJokeFragmentToSadComedian()) + } + viewModel.evaluationComplete() + } + }) + setOnClickListeners() + return binding.root } @@ -58,63 +72,20 @@ class JokeFragment : Fragment() { ) for (item in clickableElements){ when(item.id){ - R.id.nextjoke_button -> item.setOnClickListener { countUnhappy(); next() } - R.id.happy_button -> item.setOnClickListener { happy(); next() } + R.id.nextjoke_button -> item.setOnClickListener { viewModel.badJoke(); viewModel.changeCurrentJoke()} + R.id.happy_button -> item.setOnClickListener { showHappySmiley(); viewModel.goodJoke(); viewModel.changeCurrentJoke()} } } } - private fun next() { - //Condional navigation - /** - * If no evaluation is needed, go to next joke - * If evaluation needed, go to next screen depending on score. - */ - if(viewModel.shouldEvaluate()){ - if(viewModel.isHappy()){ - //navigate to happy fragment - //Toast.makeText(activity, "Comedian is Happy!", Toast.LENGTH_SHORT).show() - view?.findNavController()?.navigate( - JokeFragmentDirections.actionJokeFragmentToHappyComedian( - viewModel.happyJokes, - viewModel.badJokes - ) - ) - } - else{ - //navigate to unhappy fragment - //Toast.makeText(activity, "Comedian is Unhappy", Toast.LENGTH_SHORT).show() - view?.findNavController()?.navigate(JokeFragmentDirections.actionJokeFragmentToSadComedian()) - } - viewModel.startOver() - } - else{ - viewModel.changeCurrentJoke() - } - } - - private fun happy() { + private fun showHappySmiley() { val drawableResource = when (Random.nextInt(3)) { 0 -> R.drawable.ic_iconmonstr_smiley_1 1 -> R.drawable.ic_iconmonstr_smiley_13 else -> R.drawable.ic_iconmonstr_smiley_2 - } binding.happyImage.setImageResource(drawableResource) - - viewModel.goodJoke() - } - - - - private fun countUnhappy(){ - viewModel.badJoke() } - - override fun onSaveInstanceState(outState: Bundle) { - super.onSaveInstanceState(outState) - - } } \ No newline at end of file diff --git a/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeViewModel.kt b/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeViewModel.kt index 8a74c7d..9bb919f 100644 --- a/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeViewModel.kt +++ b/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeViewModel.kt @@ -24,16 +24,35 @@ class JokeViewModel: ViewModel() { val currentJoke: LiveData get() = _currentJoke + private val _shouldEvaluate = MutableLiveData() + val shouldEvaluate : LiveData + get() = _shouldEvaluate + + + init { + changeCurrentJoke() + } fun changeCurrentJoke() { + //Check for evaluation: + if (happyJokes + badJokes == 3){ + _shouldEvaluate.value = true + startOver() + return + } + var randomListNumber = Random.nextInt(jokes.size) if(_currentJoke.value == jokes[randomListNumber]) randomListNumber = randomListNumber.plus(1).mod(jokes.size) //use mod to stay in the correct range _currentJoke.value = jokes[randomListNumber] } + fun evaluationComplete(){ + _shouldEvaluate.value = false + } + fun isHappy() = happyJokes > 2 - fun shouldEvaluate() = happyJokes+badJokes > 2 + //fun shouldEvaluate() = happyJokes+badJokes > 2 var totalJokesTold = 0 From a2cf9d19af995270c52ef7042bdb603267de19a6 Mon Sep 17 00:00:00 2001 From: Gertjan Bosteels Date: Wed, 3 Nov 2021 12:31:11 +0100 Subject: [PATCH 04/10] adds viewModel with constructor for score view --- .../example/jokeapp/SadComedianFragment.kt | 45 ---------------- .../jokeapp/screens/jokes/JokeFragment.kt | 11 ++-- .../score}/HappyComedianFragment.kt | 26 ++++++++- .../jokeapp/screens/score/ScoreViewModel.kt | 27 ++++++++++ .../screens/score/ScoreViewModelFactory.kt | 13 +++++ .../res/layout/fragment_happy_comedian.xml | 1 + .../main/res/layout/fragment_sad_comedian.xml | 53 ------------------- .../src/main/res/navigation/navigation.xml | 17 +----- 8 files changed, 69 insertions(+), 124 deletions(-) delete mode 100644 JokeApp/app/src/main/java/com/example/jokeapp/SadComedianFragment.kt rename JokeApp/app/src/main/java/com/example/jokeapp/{ => screens/score}/HappyComedianFragment.kt (62%) create mode 100644 JokeApp/app/src/main/java/com/example/jokeapp/screens/score/ScoreViewModel.kt create mode 100644 JokeApp/app/src/main/java/com/example/jokeapp/screens/score/ScoreViewModelFactory.kt delete mode 100644 JokeApp/app/src/main/res/layout/fragment_sad_comedian.xml diff --git a/JokeApp/app/src/main/java/com/example/jokeapp/SadComedianFragment.kt b/JokeApp/app/src/main/java/com/example/jokeapp/SadComedianFragment.kt deleted file mode 100644 index 440e9f3..0000000 --- a/JokeApp/app/src/main/java/com/example/jokeapp/SadComedianFragment.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.example.jokeapp - -import android.os.Bundle -import androidx.fragment.app.Fragment -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.databinding.DataBindingUtil -import androidx.navigation.Navigation -import com.example.jokeapp.databinding.FragmentSadComedianBinding - - -/** - * A simple [Fragment] subclass. - * Use the [SadComedianFragment.newInstance] factory method to - * create an instance of this fragment. - */ -class SadComedianFragment : Fragment() { - lateinit var binding: FragmentSadComedianBinding - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - } - - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - // Inflate the layout for this fragment - binding = DataBindingUtil.inflate(inflater, R.layout.fragment_sad_comedian, container, false) - setClickListeners() - return binding.root - } - - private fun setClickListeners() { - binding.homeButton.setOnClickListener( - Navigation.createNavigateOnClickListener(R.id.action_sadComedian_to_homeFragment2) - ) - - binding.startAgainButton.setOnClickListener ( - Navigation.createNavigateOnClickListener(R.id.action_sadComedian_to_jokeFragment) - ) - } -} \ No newline at end of file diff --git a/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeFragment.kt b/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeFragment.kt index 1f3726f..14b1df3 100644 --- a/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeFragment.kt +++ b/JokeApp/app/src/main/java/com/example/jokeapp/screens/jokes/JokeFragment.kt @@ -46,14 +46,9 @@ class JokeFragment : Fragment() { viewModel.shouldEvaluate.observe(viewLifecycleOwner, Observer { shouldEveluate -> if(shouldEveluate){ - if(viewModel.isHappy()){ - //navigate to happy fragment - view?.findNavController()?.navigate(JokeFragmentDirections.actionJokeFragmentToHappyComedian(viewModel.happyJokes, viewModel.badJokes)) - } - else{ - //navigate to unhappy fragment - view?.findNavController()?.navigate(JokeFragmentDirections.actionJokeFragmentToSadComedian()) - } + + view?.findNavController()?.navigate(JokeFragmentDirections.actionJokeFragmentToHappyComedian(viewModel.happyJokes, viewModel.badJokes)) + viewModel.evaluationComplete() } }) diff --git a/JokeApp/app/src/main/java/com/example/jokeapp/HappyComedianFragment.kt b/JokeApp/app/src/main/java/com/example/jokeapp/screens/score/HappyComedianFragment.kt similarity index 62% rename from JokeApp/app/src/main/java/com/example/jokeapp/HappyComedianFragment.kt rename to JokeApp/app/src/main/java/com/example/jokeapp/screens/score/HappyComedianFragment.kt index b3b0a56..59c4f6f 100644 --- a/JokeApp/app/src/main/java/com/example/jokeapp/HappyComedianFragment.kt +++ b/JokeApp/app/src/main/java/com/example/jokeapp/screens/score/HappyComedianFragment.kt @@ -1,13 +1,17 @@ -package com.example.jokeapp +package com.example.jokeapp.screens.score +import android.graphics.Color import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast +import androidx.core.content.ContextCompat import androidx.databinding.DataBindingUtil +import androidx.lifecycle.ViewModelProvider import androidx.navigation.Navigation +import com.example.jokeapp.R import com.example.jokeapp.databinding.FragmentHappyComedianBinding @@ -19,6 +23,10 @@ import com.example.jokeapp.databinding.FragmentHappyComedianBinding class HappyComedianFragment : Fragment() { lateinit var binding: FragmentHappyComedianBinding + lateinit var viewModel: ScoreViewModel + lateinit var viewModelFactory: ScoreViewModelFactory + + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } @@ -28,16 +36,30 @@ class HappyComedianFragment : Fragment() { savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment - binding = DataBindingUtil.inflate(inflater, R.layout.fragment_happy_comedian, container, false) + binding = DataBindingUtil.inflate(inflater, + R.layout.fragment_happy_comedian, container, false) setClickListeners() val args = HappyComedianFragmentArgs.fromBundle(requireArguments()) Toast.makeText(context, "There were ${args.numHappyJokes} happy jokes and ${args.numUnhappyJokes} bad jokes", Toast.LENGTH_SHORT).show() + viewModelFactory = ScoreViewModelFactory(args.numHappyJokes, args.numUnhappyJokes) + viewModel = ViewModelProvider(this, viewModelFactory).get(ScoreViewModel::class.java) + + setBackgroundCollor() + return binding.root } + private fun setBackgroundCollor() { + if(!viewModel.isHappy()){ + //make sad screen: + binding.scoreConstraintLayout.setBackgroundColor(ContextCompat.getColor(requireActivity(), R.color.sad_red)) + binding.textView.text = "Sad" + } + } + private fun setClickListeners() { binding.homeButton.setOnClickListener( Navigation.createNavigateOnClickListener(R.id.action_happyComedian_to_homeFragment2) diff --git a/JokeApp/app/src/main/java/com/example/jokeapp/screens/score/ScoreViewModel.kt b/JokeApp/app/src/main/java/com/example/jokeapp/screens/score/ScoreViewModel.kt new file mode 100644 index 0000000..07925a8 --- /dev/null +++ b/JokeApp/app/src/main/java/com/example/jokeapp/screens/score/ScoreViewModel.kt @@ -0,0 +1,27 @@ +package com.example.jokeapp.screens.score + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import timber.log.Timber + +class ScoreViewModel(happyJokesCount: Int, sadJokesCount: Int) : ViewModel(){ + + private val _happyJokes = MutableLiveData() + val happyJokes: LiveData + get() = _happyJokes + + private val _sadJokes = MutableLiveData() + val sadJokes: LiveData + get() = _sadJokes + + init { + _happyJokes.value = happyJokesCount + _sadJokes.value = sadJokesCount + //Timber.i("happyJokeCount: ${happyJokesCount}") + //Timber.i("sadJokeCount: ${sadJokesCount}") + } + + fun isHappy() = happyJokes.value == 3 + +} \ No newline at end of file diff --git a/JokeApp/app/src/main/java/com/example/jokeapp/screens/score/ScoreViewModelFactory.kt b/JokeApp/app/src/main/java/com/example/jokeapp/screens/score/ScoreViewModelFactory.kt new file mode 100644 index 0000000..5c66b38 --- /dev/null +++ b/JokeApp/app/src/main/java/com/example/jokeapp/screens/score/ScoreViewModelFactory.kt @@ -0,0 +1,13 @@ +package com.example.jokeapp.screens.score + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider + +class ScoreViewModelFactory(private val happyJokes: Int, private val sadJokes: Int): ViewModelProvider.Factory { + override fun create(modelClass: Class): T { + if(modelClass.isAssignableFrom(ScoreViewModel::class.java)) { + return ScoreViewModel(happyJokes, sadJokes) as T + } + throw IllegalArgumentException("Unknown ViewModel class") + } +} \ No newline at end of file diff --git a/JokeApp/app/src/main/res/layout/fragment_happy_comedian.xml b/JokeApp/app/src/main/res/layout/fragment_happy_comedian.xml index 234e7d3..aec66fa 100644 --- a/JokeApp/app/src/main/res/layout/fragment_happy_comedian.xml +++ b/JokeApp/app/src/main/res/layout/fragment_happy_comedian.xml @@ -6,6 +6,7 @@ diff --git a/JokeApp/app/src/main/res/layout/fragment_sad_comedian.xml b/JokeApp/app/src/main/res/layout/fragment_sad_comedian.xml deleted file mode 100644 index 079c17c..0000000 --- a/JokeApp/app/src/main/res/layout/fragment_sad_comedian.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - -