fixed DM account selection

This commit is contained in:
Mariotaku Lee 2017-10-03 17:06:04 +08:00
parent 6adecffe57
commit 4341e53696
No known key found for this signature in database
GPG Key ID: 15C10F89D7C33535
3 changed files with 41 additions and 12 deletions

View File

@ -80,6 +80,7 @@ public interface IntentConstants {
String EXTRA_ACCOUNT_KEY = "account_key";
String EXTRA_ACCOUNT_HOST = "account_host";
String EXTRA_ACCOUNT_TYPE = "account_type";
String EXTRA_ACCOUNT_TYPES = "account_types";
String EXTRA_ACCOUNT_KEYS = "account_keys";
String EXTRA_PAGE = "page";
String EXTRA_DATA = "data";

View File

@ -60,8 +60,17 @@ class AccountSelectorActivity : BaseActivity(), OnItemClickListener {
private val accountHost: String?
get() = intent.getStringExtra(EXTRA_ACCOUNT_HOST)
private val accountType: String?
get() = intent.getStringExtra(EXTRA_ACCOUNT_TYPE)
private val accountTypes: Array<String>?
get() {
var types = intent.getStringArrayExtra(EXTRA_ACCOUNT_TYPES)
if (types == null) {
val type = intent.getStringExtra(EXTRA_ACCOUNT_TYPE)
if (type != null) {
types = arrayOf(type)
}
}
return types
}
private val isSelectNoneAllowed: Boolean
get() = intent.getBooleanExtra(EXTRA_ALLOW_SELECT_NONE, false)
@ -94,21 +103,21 @@ class AccountSelectorActivity : BaseActivity(), OnItemClickListener {
val extraKeys = onlyIncludeKeys
val oauthOnly = isOAuthOnly
val accountHost = accountHost
val accountType = accountType
val matchedAccounts = allAccountDetails.filter {
if (extraKeys != null) {
return@filter extraKeys.contains(it.key)
val accountTypes = accountTypes
val matchedAccounts = allAccountDetails.filter { account ->
if (extraKeys != null && !extraKeys.contains(account.key)) {
return@filter false
}
if (oauthOnly && !it.isOAuth) {
if (oauthOnly && !account.isOAuth) {
return@filter false
}
if (USER_TYPE_TWITTER_COM == accountHost) {
if (it.key.host != null && it.type != AccountType.TWITTER) return@filter false
} else if (accountHost != null && accountType == AccountType.MASTODON) {
if (accountHost != it.key.host) return@filter false
if (account.key.host != null && account.type != AccountType.TWITTER) return@filter false
} else if (accountHost != null && accountTypes?.singleOrNull() == AccountType.MASTODON) {
if (accountHost != account.key.host) return@filter false
}
if (accountType != null) {
if (accountType != it.type) return@filter false
if (accountTypes != null && accountTypes.none { it == account.type }) {
return@filter false
}
return@filter true
}

View File

@ -19,6 +19,7 @@
package org.mariotaku.twidere.fragment.message
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
@ -43,6 +44,9 @@ import org.mariotaku.twidere.activity.AccountSelectorActivity
import org.mariotaku.twidere.adapter.MessagesEntriesAdapter
import org.mariotaku.twidere.adapter.MessagesEntriesAdapter.MessageConversationClickListener
import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter
import org.mariotaku.twidere.annotation.AccountType
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_TYPES
import org.mariotaku.twidere.constant.nameFirstKey
import org.mariotaku.twidere.constant.newDocumentApiKey
import org.mariotaku.twidere.extension.model.getTitle
@ -96,6 +100,19 @@ class MessagesEntriesFragment : AbsContentListRecyclerViewFragment<MessagesEntri
super.onStop()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
when (requestCode) {
REQUEST_SELECT_ACCOUNT -> {
if (resultCode != Activity.RESULT_OK) return
val accountKey = data!!.getParcelableExtra<UserKey>(EXTRA_ACCOUNT_KEY)
startActivity(IntentUtils.newMessageConversation(accountKey))
}
else -> {
super.onActivityResult(requestCode, resultCode, data)
}
}
}
override fun onCreateLoader(id: Int, args: Bundle?): Loader<List<ParcelableMessageConversation>?> {
val loader = ObjectCursorLoader(context, ParcelableMessageConversation::class.java)
val projection = (Conversations.COLUMNS + Conversations.UNREAD_COUNT).map {
@ -181,6 +198,8 @@ class MessagesEntriesFragment : AbsContentListRecyclerViewFragment<MessagesEntri
val accountKey = accountKeys.singleOrNull() ?: run {
val selectIntent = Intent(context, AccountSelectorActivity::class.java)
selectIntent.putExtra(EXTRA_ACCOUNT_KEYS, accountKeys)
selectIntent.putExtra(EXTRA_ACCOUNT_TYPES, arrayOf(AccountType.TWITTER,
AccountType.FANFOU))
startActivityForResult(selectIntent, REQUEST_SELECT_ACCOUNT)
return true
}