Browse Source

open talk links of same baseurl inside the app

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 1 year ago
parent
commit
932352b785

+ 10 - 0
app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt

@@ -33,11 +33,13 @@ import com.nextcloud.talk.account.ServerSelectionActivity
 import com.nextcloud.talk.account.SwitchAccountActivity
 import com.nextcloud.talk.account.WebViewLoginActivity
 import com.nextcloud.talk.application.NextcloudTalkApplication
+import com.nextcloud.talk.chat.ChatActivity
 import com.nextcloud.talk.events.CertificateEvent
 import com.nextcloud.talk.ui.theme.ViewThemeUtils
 import com.nextcloud.talk.utils.DisplayUtils
 import com.nextcloud.talk.utils.FileViewerUtils
 import com.nextcloud.talk.utils.UriUtils
+import com.nextcloud.talk.utils.bundle.BundleKeys
 import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
 import com.nextcloud.talk.utils.preferences.AppPreferences
 import com.nextcloud.talk.utils.ssl.TrustManager
@@ -248,6 +250,14 @@ open class BaseActivity : AppCompatActivity() {
                     // https://cloud.nextcloud.com/apps/files/?dir=/Engineering&fileid=41
                     val fileViewerUtils = FileViewerUtils(applicationContext, user)
                     fileViewerUtils.openFileInFilesApp(uri, UriUtils.extractInstanceInternalFileFileIdNew(uri))
+                } else if (UriUtils.isInstanceInternalTalkUrl(user.baseUrl!!, uri)) {
+                    // https://cloud.nextcloud.com/call/123456789
+                    val bundle = Bundle()
+                    bundle.putString(BundleKeys.KEY_ROOM_TOKEN, UriUtils.extractRoomTokenFromTalkUrl(uri))
+                    val chatIntent = Intent(context, ChatActivity::class.java)
+                    chatIntent.putExtras(bundle)
+                    chatIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
+                    startActivity(chatIntent)
                 } else {
                     super.startActivity(intent)
                 }

+ 11 - 0
app/src/main/java/com/nextcloud/talk/utils/UriUtils.kt

@@ -27,11 +27,22 @@ class UriUtils {
                 Regex(".*/f/\\d*").matches(url)
         }
 
+        fun isInstanceInternalTalkUrl(baseUrl: String, url: String): Boolean {
+            // https://cloud.nextcloud.com/call/123456789
+            return (url.startsWith("$baseUrl/call/") || url.startsWith("$baseUrl/index.php/call/")) &&
+                Regex(".*/call/\\d*").matches(url)
+        }
+
         fun extractInstanceInternalFileShareFileId(url: String): String {
             // https://cloud.nextcloud.com/f/41
             return Uri.parse(url).lastPathSegment ?: ""
         }
 
+        fun extractRoomTokenFromTalkUrl(url: String): String {
+            // https://cloud.nextcloud.com/call/123456789
+            return Uri.parse(url).lastPathSegment ?: ""
+        }
+
         fun isInstanceInternalFileUrl(baseUrl: String, url: String): Boolean {
             // https://cloud.nextcloud.com/apps/files/?dir=/Engineering&fileid=41
             return (