diff --git a/vector/build.gradle b/vector/build.gradle index e75bbd32..b9e01ed0 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -156,7 +156,7 @@ dependencies { implementation("com.airbnb.android:epoxy:$epoxy_version") kapt "com.airbnb.android:epoxy-processor:$epoxy_version" - implementation 'com.airbnb.android:mvrx:0.7.0' + implementation 'com.airbnb.android:mvrx:1.0.1' // Work implementation "android.arch.work:work-runtime-ktx:1.0.0" diff --git a/vector/src/main/java/im/vector/riotredesign/core/platform/StateView.kt b/vector/src/main/java/im/vector/riotredesign/core/platform/StateView.kt index e75fb26c..6c4bc8cd 100755 --- a/vector/src/main/java/im/vector/riotredesign/core/platform/StateView.kt +++ b/vector/src/main/java/im/vector/riotredesign/core/platform/StateView.kt @@ -27,6 +27,7 @@ import kotlinx.android.synthetic.main.view_state.view.* class StateView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) : FrameLayout(context, attrs, defStyle) { + // TODO Use Async from MvRx? sealed class State { object Content : State() object Loading : State() diff --git a/vector/src/main/java/im/vector/riotredesign/core/platform/VectorBaseFragment.kt b/vector/src/main/java/im/vector/riotredesign/core/platform/VectorBaseFragment.kt index 4db140f8..43dec625 100644 --- a/vector/src/main/java/im/vector/riotredesign/core/platform/VectorBaseFragment.kt +++ b/vector/src/main/java/im/vector/riotredesign/core/platform/VectorBaseFragment.kt @@ -100,6 +100,7 @@ abstract class VectorBaseFragment : BaseMvRxFragment(), OnBackPressed { override fun invalidate() { //no-ops by default + // TODO Remove default implementation? } protected fun setArguments(args: Parcelable? = null) { diff --git a/vector/src/main/java/im/vector/riotredesign/features/home/room/detail/timeline/action/BaseMvRxBottomSheetDialog.kt b/vector/src/main/java/im/vector/riotredesign/features/home/room/detail/timeline/action/BaseMvRxBottomSheetDialog.kt index 504e99c0..a37a5eaf 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/home/room/detail/timeline/action/BaseMvRxBottomSheetDialog.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/home/room/detail/timeline/action/BaseMvRxBottomSheetDialog.kt @@ -19,21 +19,30 @@ import android.os.Bundle import com.airbnb.mvrx.MvRxView import com.airbnb.mvrx.MvRxViewModelStore import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import java.util.* /** * Add MvRx capabilities to bottomsheetdialog (like BaseMvRxFragment) */ -abstract class BaseMvRxBottomSheetDialog() : BottomSheetDialogFragment(), MvRxView { +abstract class BaseMvRxBottomSheetDialog : BottomSheetDialogFragment(), MvRxView { + override val mvrxViewModelStore by lazy { MvRxViewModelStore(viewModelStore) } + private lateinit var mvrxPersistedViewId: String + + final override val mvrxViewId: String by lazy { mvrxPersistedViewId } override fun onCreate(savedInstanceState: Bundle?) { mvrxViewModelStore.restoreViewModels(this, savedInstanceState) + mvrxPersistedViewId = savedInstanceState?.getString(PERSISTED_VIEW_ID_KEY) + ?: this::class.java.simpleName + "_" + UUID.randomUUID().toString() + super.onCreate(savedInstanceState) } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) mvrxViewModelStore.saveViewModels(outState) + outState.putString(PERSISTED_VIEW_ID_KEY, mvrxViewId) } override fun onStart() { @@ -42,4 +51,6 @@ abstract class BaseMvRxBottomSheetDialog() : BottomSheetDialogFragment(), MvRxVi // subscribe to a ViewModel. postInvalidate() } -} \ No newline at end of file +} + +private const val PERSISTED_VIEW_ID_KEY = "mvrx:bottomsheet_persisted_view_id" \ No newline at end of file