From 2b139c17a25c326a4541f36ad3ba8334713ce846 Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Thu, 4 Jan 2024 16:32:55 +0200
Subject: [PATCH] Set server domains as list in config

---
 app/src/main/java/org/futo/circles/App.kt     |  8 ++++++--
 app/src/main/res/values/strings.xml           | 14 ++++++++++----
 .../auth/feature/log_in/LogInFragment.kt      |  8 ++++----
 .../circles/core/base/CirclesAppConfig.kt     | 19 +++++--------------
 .../org/futo/circles/core/base/Constants.kt   |  7 ++-----
 5 files changed, 27 insertions(+), 29 deletions(-)

diff --git a/app/src/main/java/org/futo/circles/App.kt b/app/src/main/java/org/futo/circles/App.kt
index 1baa30e00..71156c948 100644
--- a/app/src/main/java/org/futo/circles/App.kt
+++ b/app/src/main/java/org/futo/circles/App.kt
@@ -46,8 +46,12 @@ class App : Application() {
                 BuildConfig.FLAVOR
             )
             .appName(getString(R.string.app_name))
-            .euDomain(getString(if (BuildConfig.DEBUG) R.string.debug_eu_domain else R.string.release_eu_domain))
-            .usDomain(getString(if (BuildConfig.DEBUG) R.string.debug_us_domain else R.string.release_us_domain))
+            .serverDomains(
+                applicationContext.resources.getStringArray(
+                    if (BuildConfig.DEBUG) R.array.debug_domains
+                    else R.array.release_domains
+                ).toList()
+            )
             .init()
 
         MatrixSessionProvider.initSession(
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 265530ea7..068dd8856 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,8 +1,4 @@
 <resources>
-    <string name="debug_eu_domain" translatable="false">matrix.org</string>
-    <string name="debug_us_domain" translatable="false">nl.circles-dev.net</string>
-    <string name="release_eu_domain" translatable="false">eu.circu.li</string>
-    <string name="release_us_domain" translatable="false">circu.li</string>
     <string name="app_name">Circles</string>
     <string name="futo">FUTO</string>
     <string name="circles">Circles</string>
@@ -221,6 +217,16 @@
     <string name="invite_to_connect">Invite to connect</string>
     <string name="empty_media_storage_info">0 MB used</string>
 
+    <string-array name="debug_domains">
+        <item>nl.circles-dev.net</item>
+        <item>matrix.org</item>
+    </string-array>
+
+    <string-array name="release_domains">
+        <item>circu.li</item>
+        <item>eu.circu.li</item>
+    </string-array>
+
     <string-array name="report_categories">
         <item>@string/crude_language</item>
         <item>@string/copyright_violation</item>
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/log_in/LogInFragment.kt b/auth/src/main/java/org/futo/circles/auth/feature/log_in/LogInFragment.kt
index ec5d06f5d..e1ea34e4a 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/log_in/LogInFragment.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/log_in/LogInFragment.kt
@@ -39,7 +39,7 @@ class LogInFragment : Fragment(R.layout.fragment_log_in), HasLoadingState {
         ArrayAdapter(
             requireContext(),
             android.R.layout.simple_dropdown_item_1line,
-            listOf(CirclesAppConfig.usServerDomain, CirclesAppConfig.euServerDomain)
+            CirclesAppConfig.serverDomains
         )
     }
 
@@ -71,11 +71,11 @@ class LogInFragment : Fragment(R.layout.fragment_log_in), HasLoadingState {
                 setAdapter(autocompleteAdapter)
                 onFocusChangeListener = OnFocusChangeListener { _, hasFocus ->
                     tilDomain.hint =
-                        if (!hasFocus && tvDomain.text.isEmpty()) CirclesAppConfig.usServerDomain
+                        if (!hasFocus && tvDomain.text.isEmpty()) CirclesAppConfig.serverDomains.first()
                         else getString(R.string.domain)
                 }
             }
-            tilDomain.hint = CirclesAppConfig.usServerDomain
+            tilDomain.hint = CirclesAppConfig.serverDomains.first()
             binding.rvSwitchUsers.apply {
                 adapter = switchUsersAdapter
                 addItemDecoration(
@@ -121,5 +121,5 @@ class LogInFragment : Fragment(R.layout.fragment_log_in), HasLoadingState {
     }
 
     private fun getDomain() = binding.tvDomain.text.toString().takeIf { it.isNotEmpty() }
-        ?: CirclesAppConfig.usServerDomain
+        ?: CirclesAppConfig.serverDomains.first()
 }
\ No newline at end of file
diff --git a/core/src/main/java/org/futo/circles/core/base/CirclesAppConfig.kt b/core/src/main/java/org/futo/circles/core/base/CirclesAppConfig.kt
index e5337064d..feb74f9e4 100644
--- a/core/src/main/java/org/futo/circles/core/base/CirclesAppConfig.kt
+++ b/core/src/main/java/org/futo/circles/core/base/CirclesAppConfig.kt
@@ -14,10 +14,7 @@ object CirclesAppConfig {
     var appName = ""
         private set
 
-    var usServerDomain = ""
-        private set
-
-    var euServerDomain = ""
+    var serverDomains = emptyList<String>()
         private set
 
     var isMediaBackupEnabled = false
@@ -32,9 +29,8 @@ object CirclesAppConfig {
         private var version: String? = null,
         private var flavour: String? = null,
         private var appName: String? = null,
-        private var usDomain: String? = null,
+        private var serverDomains: List<String> = emptyList(),
         private var euDomain: String? = null,
-        private var subscriptionEnabled: Boolean = false,
         private var mediaBackupEnabled: Boolean = false,
         private var rageshakeEnabled: Boolean = false
     ) {
@@ -48,9 +44,7 @@ object CirclesAppConfig {
 
         fun appName(appName: String) = apply { this.appName = appName }
 
-        fun usDomain(domain: String) = apply { this.usDomain = domain }
-
-        fun euDomain(domain: String) = apply { this.euDomain = domain }
+        fun serverDomains(domains: List<String>) = apply { this.serverDomains = domains }
 
         fun isMediaBackupEnabled(isEnabled: Boolean) = apply { this.mediaBackupEnabled = isEnabled }
 
@@ -70,11 +64,8 @@ object CirclesAppConfig {
             CirclesAppConfig.appName = appName?.takeIf { it.isNotEmpty() }
                 ?: throw IllegalArgumentException("appName is empty $appName")
 
-            usServerDomain = usDomain?.takeIf { it.isNotEmpty() }
-                ?: throw IllegalArgumentException("Illegal US server domain $usDomain")
-
-            euServerDomain = euDomain?.takeIf { it.isNotEmpty() }
-                ?: throw IllegalArgumentException("Illegal EU server domain $euDomain")
+            CirclesAppConfig.serverDomains = serverDomains.takeIf { it.isNotEmpty() }
+                ?: throw IllegalArgumentException("Illegal empty server domains")
 
             isMediaBackupEnabled = mediaBackupEnabled
             isRageshakeEnabled = rageshakeEnabled
diff --git a/core/src/main/java/org/futo/circles/core/base/Constants.kt b/core/src/main/java/org/futo/circles/core/base/Constants.kt
index da27a0b25..8ead7f0d1 100644
--- a/core/src/main/java/org/futo/circles/core/base/Constants.kt
+++ b/core/src/main/java/org/futo/circles/core/base/Constants.kt
@@ -1,6 +1,5 @@
 package org.futo.circles.core.base
 
-import org.futo.circles.core.BuildConfig
 import org.futo.circles.core.provider.MatrixSessionProvider
 
 const val FILE_PROVIDER_AUTHORITY_EXTENSION = ".provider"
@@ -8,9 +7,7 @@ const val MediaCaptionFieldKey = "caption"
 const val READ_ONLY_ROLE = -10
 
 fun getCirclesDomain(): String {
-    if (BuildConfig.DEBUG) return CirclesAppConfig.usServerDomain
     val homeServerUrl = MatrixSessionProvider.currentSession?.sessionParams?.homeServerUrl ?: ""
-    if (homeServerUrl.contains(CirclesAppConfig.usServerDomain)) return CirclesAppConfig.usServerDomain
-    if (homeServerUrl.contains(CirclesAppConfig.euServerDomain)) return CirclesAppConfig.euServerDomain
-    return CirclesAppConfig.usServerDomain
+    return CirclesAppConfig.serverDomains.firstOrNull { homeServerUrl.contains(it) }
+        ?: CirclesAppConfig.serverDomains.first()
 }
-- 
GitLab