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 }