From 8625785f8e44eaf68be3a869b6672fa461f39aa9 Mon Sep 17 00:00:00 2001 From: ialokim <ialokim@mailbox.org> Date: Sat, 13 Nov 2021 18:47:49 +0100 Subject: [PATCH] avoid matching instances of different classes to same key --- .../briar/desktop/viewmodel/ComposeUtils.kt | 6 +----- .../briar/desktop/viewmodel/ViewModelProvider.kt | 10 ++++------ 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/org/briarproject/briar/desktop/viewmodel/ComposeUtils.kt b/src/main/kotlin/org/briarproject/briar/desktop/viewmodel/ComposeUtils.kt index 351a067418..86043d455e 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/viewmodel/ComposeUtils.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/viewmodel/ComposeUtils.kt @@ -52,11 +52,7 @@ fun <VM : ViewModel> viewModel( "No ViewModelProvider was provided via LocalViewModelProvider" } ): VM { - val viewModel = if (key == null) { - viewModelProvider.get(modelClass) - } else { - viewModelProvider.get(key, modelClass) - } + val viewModel = viewModelProvider.get(modelClass, key) DisposableEffect(key) { viewModel.onInit() diff --git a/src/main/kotlin/org/briarproject/briar/desktop/viewmodel/ViewModelProvider.kt b/src/main/kotlin/org/briarproject/briar/desktop/viewmodel/ViewModelProvider.kt index dd352bfb2c..f232f4600f 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/viewmodel/ViewModelProvider.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/viewmodel/ViewModelProvider.kt @@ -16,11 +16,9 @@ constructor( private val viewModels = HashMap<String, ViewModel>() - fun <VM : ViewModel> get(modelClass: KClass<VM>): VM = - get(modelClass.qualifiedName!!, modelClass) - - fun <VM : ViewModel> get(key: String, modelClass: KClass<VM>): VM { - val viewModel = viewModels[key] + fun <VM : ViewModel> get(modelClass: KClass<VM>, key: String? = null): VM { + val viewModelKey = "${modelClass.qualifiedName}:$key" + val viewModel = viewModels[viewModelKey] if (modelClass.isInstance(viewModel)) { return viewModel as VM @@ -28,7 +26,7 @@ constructor( try { val viewModel = viewModelFactory.create(modelClass) - viewModels[key] = viewModel + viewModels[viewModelKey] = viewModel return viewModel } catch (e: InstantiationException) { throw RuntimeException("Cannot create an instance of $modelClass", e) -- GitLab