Skip to content

Commit bee55a9

Browse files
authored
Merge pull request #5920 from nextcloud/bugfix/5886/ecosystemSwitcher
Switch properly between accounts
2 parents 9be68d5 + e423253 commit bee55a9

3 files changed

Lines changed: 48 additions & 5 deletions

File tree

app/src/main/AndroidManifest.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,6 @@
111111
<category android:name="android.intent.category.LAUNCHER" />
112112
</intent-filter>
113113

114-
<intent-filter>
115-
<action android:name="com.nextcloud.intent.OPEN_ECOSYSTEM_APP" />
116-
<category android:name="android.intent.category.DEFAULT" />
117-
</intent-filter>
118-
119114
<intent-filter>
120115
<action android:name="android.intent.action.VIEW" />
121116
<category android:name="android.intent.category.DEFAULT" />
@@ -173,6 +168,11 @@
173168
android:name="android.service.chooser.chooser_target_service"
174169
android:value="androidx.sharetarget.ChooserTargetServiceCompat" />
175170

171+
<intent-filter>
172+
<action android:name="com.nextcloud.intent.OPEN_ECOSYSTEM_APP" />
173+
<category android:name="android.intent.category.DEFAULT" />
174+
</intent-filter>
175+
176176
<intent-filter>
177177
<action android:name="android.intent.action.SEND" />
178178
<category android:name="android.intent.category.DEFAULT" />

app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ import androidx.work.WorkInfo
3434
import androidx.work.WorkManager
3535
import autodagger.AutoInjector
3636
import 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
3739
import com.nextcloud.talk.R
3840
import com.nextcloud.talk.account.BrowserLoginActivity
3941
import 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

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -991,4 +991,5 @@ How to translate with transifex:
991991
<string name="nc_show_ecosystem_description">Nextcloud app suggestions in account chooser dialog</string>
992992
<string name="turn_on_background_blur">Turn on background blur</string>
993993
<string name="turn_off_background_blur">Turn off background blur</string>
994+
<string name="nc_no_account_found">Account not found</string>
994995
</resources>

0 commit comments

Comments
 (0)