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