@@ -34,6 +34,8 @@ import androidx.work.WorkInfo
3434import androidx.work.WorkManager
3535import autodagger.AutoInjector
3636import com.google.android.material.dialog.MaterialAlertDialogBuilder
37+ import com.nextcloud.android.common.core.utils.ecosystem.AccountReceiverCallback
38+ import com.nextcloud.android.common.core.utils.ecosystem.EcosystemManager
3739import com.nextcloud.talk.R
3840import com.nextcloud.talk.account.BrowserLoginActivity
3941import com.nextcloud.talk.account.ServerSelectionActivity
@@ -170,6 +172,8 @@ class ConversationsListActivity : BaseActivity() {
170172 private var selectedMessageId: String? = null
171173 private var pendingDirectShareToken: String? = null
172174
175+ lateinit var ecosystemManager: EcosystemManager
176+
173177 private val onBackPressedCallback = object : OnBackPressedCallback (true ) {
174178 override fun handleOnBackPressed () {
175179 if (forwardMessage) {
@@ -183,6 +187,7 @@ class ConversationsListActivity : BaseActivity() {
183187 override fun onCreate (savedInstanceState : Bundle ? ) {
184188 super .onCreate(savedInstanceState)
185189 NextcloudTalkApplication .sharedApplication!! .componentApplication.inject(this )
190+ ecosystemManager = EcosystemManager (this @ConversationsListActivity)
186191
187192 val targetUserId = intent.getLongExtra(KEY_INTERNAL_USER_ID , 0L )
188193 currentUser = if (targetUserId != 0L ) {
@@ -208,6 +213,9 @@ class ConversationsListActivity : BaseActivity() {
208213 )
209214 }
210215
216+ intent?.let {
217+ handleEcoSystemIntent(it)
218+ }
211219 initObservers()
212220 }
213221
@@ -216,6 +224,11 @@ class ConversationsListActivity : BaseActivity() {
216224 outState.putBoolean(KEY_ACCOUNT_DIALOG_VISIBLE , showAccountDialogState.value)
217225 }
218226
227+ override fun onNewIntent (intent : Intent ) {
228+ super .onNewIntent(intent)
229+ handleEcoSystemIntent(intent)
230+ }
231+
219232 private fun buildScreenState () =
220233 ConversationsListScreenState (
221234 currentUser = currentUser,
@@ -309,6 +322,35 @@ class ConversationsListActivity : BaseActivity() {
309322 onConversationOpsAction = { action, conversation -> handleConversationOpsAction(action, conversation) }
310323 )
311324
325+ private fun handleEcoSystemIntent (intent : Intent ) {
326+ ecosystemManager.receiveAccount(
327+ intent,
328+ object : AccountReceiverCallback {
329+ @SuppressLint(" UseKtx" )
330+ override fun onAccountReceived (accountName : String ) {
331+ val users = userManager.users.blockingGet()
332+ val baseUrl = accountName.substringAfterLast(" @" )
333+ val accountName = accountName.substringBeforeLast(" @" )
334+ val user = users.firstOrNull { user ->
335+ user.username == accountName && baseUrl == user.baseUrl?.toUri()?.host
336+ }
337+ if (user != null ) {
338+ userManager.setUserAsActive(user)
339+ val intent = Intent (context, ConversationsListActivity ::class .java)
340+ startActivity(intent)
341+ } else {
342+ showSnackbar(getString(R .string.nc_no_account_found))
343+ }
344+ Log .d(TAG , accountName)
345+ }
346+
347+ override fun onAccountError (reason : String ) {
348+ Log .d(TAG , " handleEcosystemIntent: $reason " )
349+ }
350+ }
351+ )
352+ }
353+
312354 override fun onPostCreate (savedInstanceState : Bundle ? ) {
313355 super .onPostCreate(savedInstanceState)
314356
0 commit comments