From 01d4a48b8b71820517ece88abb49969dbb7a6274 Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Wed, 8 Dec 2021 11:31:01 +0000 Subject: [PATCH] adding ability to lazily create viewmodels - helpful when multiple view models are injected but not all are needed --- .../app/core/extensions/MavericksViewModel.kt | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 vector/src/main/java/im/vector/app/core/extensions/MavericksViewModel.kt diff --git a/vector/src/main/java/im/vector/app/core/extensions/MavericksViewModel.kt b/vector/src/main/java/im/vector/app/core/extensions/MavericksViewModel.kt new file mode 100644 index 0000000000..6120a84d7c --- /dev/null +++ b/vector/src/main/java/im/vector/app/core/extensions/MavericksViewModel.kt @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package im.vector.app.core.extensions + +import androidx.activity.ComponentActivity +import com.airbnb.mvrx.ActivityViewModelContext +import com.airbnb.mvrx.Mavericks +import com.airbnb.mvrx.MavericksState +import com.airbnb.mvrx.MavericksViewModel +import com.airbnb.mvrx.MavericksViewModelProvider + +inline fun , reified S : MavericksState> ComponentActivity.lazyViewModel(): Lazy { + return lazy(mode = LazyThreadSafetyMode.NONE) { + MavericksViewModelProvider.get( + viewModelClass = VM::class.java, + stateClass = S::class.java, + viewModelContext = ActivityViewModelContext(this, intent.extras?.get(Mavericks.KEY_ARG)), + key = VM::class.java.name + ) + } +}