1 package io.casey.musikcube.remote.ui.shared.mixin
2 
3 import android.os.Bundle
4 import io.casey.musikcube.remote.framework.MixinBase
5 import io.casey.musikcube.remote.framework.ViewModel
6 
7 class ViewModelMixin(private val provider: ViewModel.Provider): MixinBase() {
8     private var viewModel: ViewModel<*>? = null
9 
getnull10     fun <T: ViewModel<*>> get(): T {
11         if (viewModel == null) {
12             viewModel = provider.createViewModel()
13         }
14         @Suppress("unchecked_cast")
15         return viewModel as T
16     }
17 
onCreatenull18     override fun onCreate(bundle: Bundle) {
19         super.onCreate(bundle)
20 
21         viewModel = ViewModel.restore(bundle.getLong(EXTRA_VIEW_MODEL_ID, -1))
22 
23         if (viewModel == null) {
24             viewModel = provider.createViewModel()
25         }
26     }
27 
onResumenull28     override fun onResume() {
29         super.onResume()
30         viewModel?.onResume()
31     }
32 
onPausenull33     override fun onPause() {
34         super.onPause()
35         viewModel?.onPause()
36     }
37 
onSaveInstanceStatenull38     override fun onSaveInstanceState(bundle: Bundle) {
39         super.onSaveInstanceState(bundle)
40 
41         if (viewModel != null) {
42             bundle.putLong(EXTRA_VIEW_MODEL_ID, viewModel!!.id)
43         }
44     }
45 
onDestroynull46     override fun onDestroy() {
47         super.onDestroy()
48         viewModel?.onDestroy()
49     }
50 
51     companion object {
52         const val EXTRA_VIEW_MODEL_ID = "extra_view_model_id"
53     }
54 }