1
0
mirror of https://github.com/TwidereProject/Twidere-Android synced 2025-02-02 09:46:51 +01:00

crash fixes

This commit is contained in:
Mariotaku Lee 2017-09-08 19:40:12 +08:00
parent 0b381c013e
commit e3978b91bf
No known key found for this signature in database
GPG Key ID: 15C10F89D7C33535
16 changed files with 214 additions and 299 deletions

View File

@ -49,6 +49,7 @@ public class ParcelableUser implements Parcelable, Comparable<ParcelableUser> {
@ParcelableThisPlease
@JsonField(name = "account_id", typeConverter = UserKeyConverter.class)
@Nullable
public UserKey account_key;
@ParcelableThisPlease

View File

@ -959,13 +959,14 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
@SuppressLint("SetTextI18n")
private fun handleMentionIntent(user: ParcelableUser?): Boolean {
if (user == null || user.key == null) return false
val accountScreenName = DataStoreUtils.getAccountScreenName(this, user.account_key)
if (user?.key == null) return false
val accountKey = user.account_key ?: return false
val accountScreenName = DataStoreUtils.getAccountScreenName(this, accountKey)
if (TextUtils.isEmpty(accountScreenName)) return false
editText.setText("@${user.acct} ")
val selectionEnd = editText.length()
editText.setSelection(selectionEnd)
accountsAdapter.selectedAccountKeys = arrayOf(user.account_key)
accountsAdapter.selectedAccountKeys = arrayOf(accountKey)
return true
}

View File

@ -26,21 +26,16 @@ import org.mariotaku.twidere.R
import org.mariotaku.twidere.util.StatusCodeMessageUtils
import java.security.cert.CertPathValidatorException
/**
* Created by mariotaku on 2017/4/20.
*/
fun Throwable.getErrorMessage(context: Context): CharSequence = when (this) {
is MicroBlogException -> getMicroBlogErrorMessage(context)
is CertPathValidatorException -> context.getString(R.string.message_toast_ssl_tls_error)
else -> message ?: toString()
}
private fun MicroBlogException.getMicroBlogErrorMessage(context: Context): String {
if (isRateLimitExceeded) {
val status = rateLimitStatus
val secUntilReset = status.secondsUntilReset * 1000L
val rateLimitStatus = this.rateLimitStatus
if (isRateLimitExceeded && rateLimitStatus != null) {
val secUntilReset = rateLimitStatus.secondsUntilReset * 1000L
val nextResetTime = DateUtils.getRelativeTimeSpanString(System.currentTimeMillis() + secUntilReset)
return context.getString(R.string.error_message_rate_limit, nextResetTime.trim())
} else if (isCausedByNetworkIssue) {
@ -50,12 +45,10 @@ private fun MicroBlogException.getMicroBlogErrorMessage(context: Context): Strin
}
return context.getString(R.string.message_toast_network_error_with_message, msg)
}
val msg = if (StatusCodeMessageUtils.containsTwitterError(errorCode)) {
StatusCodeMessageUtils.getTwitterErrorMessage(context, errorCode)
} else if (StatusCodeMessageUtils.containsHttpStatus(statusCode)) {
StatusCodeMessageUtils.getHttpStatusMessage(context, statusCode)
} else {
errorMessage
val msg = when {
StatusCodeMessageUtils.containsTwitterError(errorCode) -> StatusCodeMessageUtils.getTwitterErrorMessage(context, errorCode)
StatusCodeMessageUtils.containsHttpStatus(statusCode) -> StatusCodeMessageUtils.getHttpStatusMessage(context, statusCode)
else -> errorMessage
}
return msg ?: message ?: javaClass.simpleName
}

View File

@ -31,7 +31,7 @@ import org.mariotaku.twidere.util.Utils
fun ParcelableUser.getBestProfileBanner(width: Int, height: Int = 0): String? {
return profile_banner_url?.let {
InternalTwitterContentUtils.getBestBannerUrl(it, width, height)
} ?: if (USER_TYPE_FANFOU_COM == key.host) {
} ?: if (USER_TYPE_FANFOU_COM == key?.host) {
profile_background_url
} else {
null
@ -60,7 +60,8 @@ fun ParcelableUser.applyTo(relationship: ParcelableRelationship) {
}
}
val ParcelableUser.relationship: ParcelableRelationship get() = ParcelableRelationship().also {
val ParcelableUser.relationship: ParcelableRelationship
get() = ParcelableRelationship().also {
it.account_key = this.account_key
it.user_key = this.key
this.applyTo(it)
@ -77,18 +78,22 @@ val ParcelableUser.host: String
val ParcelableUser.isFanfouUser: Boolean
get() = USER_TYPE_FANFOU_COM == key.host
inline val ParcelableUser.originalProfileImage: String? get() {
inline val ParcelableUser.originalProfileImage: String?
get() {
return extras?.profile_image_url_original?.takeIf(String::isNotEmpty)
?: Utils.getOriginalTwitterProfileImage(profile_image_url)
}
inline val ParcelableUser.urlPreferred: String? get() = url_expanded?.takeIf(String::isNotEmpty) ?: url
inline val ParcelableUser.acct: String get() = if (account_key.host == key.host) {
inline val ParcelableUser.acct: String
get() {
val key = this.key ?: return screen_name
return if (account_key?.host == key.host) {
screen_name
} else {
"$screen_name@${key.host}"
}
}
inline val ParcelableUser.groups_count: Long get() = extras?.groups_count ?: -1

View File

@ -40,7 +40,8 @@ class AddUserFilterDialogFragment : AbsUserMuteBlockDialogFragment() {
override fun performUserAction(user: ParcelableUser, filterEverywhere: Boolean) {
DataStoreUtils.addToFilter(context, listOf(user), filterEverywhere)
bus.post(FriendshipTaskEvent(FriendshipTaskEvent.Action.FILTER, user.account_key, user.key).apply {
val accountKey = user.account_key ?: return
bus.post(FriendshipTaskEvent(FriendshipTaskEvent.Action.FILTER, accountKey, user.key).apply {
isFinished = true
isSucceeded = true
})

View File

@ -42,7 +42,8 @@ class CreateUserBlockDialogFragment : AbsUserMuteBlockDialogFragment() {
}
override fun performUserAction(user: ParcelableUser, filterEverywhere: Boolean) {
twitterWrapper.createBlockAsync(user.account_key, user.key, filterEverywhere)
val accountKey = user.account_key ?: return
twitterWrapper.createBlockAsync(accountKey, user.key, filterEverywhere)
}
companion object {

View File

@ -43,7 +43,8 @@ class CreateUserMuteDialogFragment : AbsUserMuteBlockDialogFragment() {
}
override fun performUserAction(user: ParcelableUser, filterEverywhere: Boolean) {
twitterWrapper.createMuteAsync(user.account_key, user.key, filterEverywhere)
val accountKey = user.account_key ?: return
twitterWrapper.createMuteAsync(accountKey, user.key, filterEverywhere)
}
companion object {

View File

@ -39,7 +39,8 @@ class DestroyFriendshipDialogFragment : BaseDialogFragment(), DialogInterface.On
override fun onClick(dialog: DialogInterface, which: Int) {
when (which) {
DialogInterface.BUTTON_POSITIVE -> {
twitterWrapper.destroyFriendshipAsync(user.account_key, user.key)
val accountKey = user.account_key ?: return
twitterWrapper.destroyFriendshipAsync(accountKey, user.key)
}
else -> {
}

View File

@ -209,24 +209,27 @@ abstract class ParcelableUsersFragment : AbsContentListRecyclerViewFragment<Parc
override fun onFollowClicked(holder: UserViewHolder, position: Int) {
val user = adapter.getUser(position) ?: return
if (twitterWrapper.isUpdatingRelationship(user.account_key, user.key)) return
val accountKey = user.account_key ?: return
if (twitterWrapper.isUpdatingRelationship(accountKey, user.key)) return
if (user.is_following) {
DestroyFriendshipDialogFragment.show(fragmentManager, user)
} else {
twitterWrapper.createFriendshipAsync(user.account_key, user.key, user.screen_name)
twitterWrapper.createFriendshipAsync(accountKey, user.key, user.screen_name)
}
}
override fun onUnblockClicked(holder: UserViewHolder, position: Int) {
val user = adapter.getUser(position) ?: return
if (twitterWrapper.isUpdatingRelationship(user.account_key, user.key)) return
twitterWrapper.destroyBlockAsync(user.account_key, user.key)
val accountKey = user.account_key ?: return
if (twitterWrapper.isUpdatingRelationship(accountKey, user.key)) return
twitterWrapper.destroyBlockAsync(accountKey, user.key)
}
override fun onUnmuteClicked(holder: UserViewHolder, position: Int) {
val user = adapter.getUser(position) ?: return
if (twitterWrapper.isUpdatingRelationship(user.account_key, user.key)) return
twitterWrapper.destroyMuteAsync(user.account_key, user.key)
val accountKey = user.account_key ?: return
if (twitterWrapper.isUpdatingRelationship(accountKey, user.key)) return
twitterWrapper.destroyMuteAsync(accountKey, user.key)
}

View File

@ -43,7 +43,8 @@ class ReportUserSpamDialogFragment : AbsUserMuteBlockDialogFragment() {
}
override fun performUserAction(user: ParcelableUser, filterEverywhere: Boolean) {
twitterWrapper.reportSpamAsync(user.account_key, user.key)
val accountKey = user.account_key ?: return
twitterWrapper.reportSpamAsync(accountKey, user.key)
}
companion object {

View File

@ -410,7 +410,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
val activity = activity ?: return
this.user = user
this.account = account
if (user == null || user.key == null) {
if (user?.key == null) {
profileImage.visibility = View.GONE
profileType.visibility = View.GONE
val theme = Chameleon.getOverrideTheme(activity, activity)
@ -612,36 +612,34 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
val user = user
val user = user ?: return
val accountKey = user.account_key ?: return
when (requestCode) {
REQUEST_SET_COLOR -> {
if (user == null) return
if (resultCode == Activity.RESULT_OK) {
if (data == null) return
val color = data.getIntExtra(EXTRA_COLOR, Color.TRANSPARENT)
userColorNameManager.setUserColor(this.user!!.key, color)
userColorNameManager.setUserColor(user.key, color)
} else if (resultCode == ColorPickerDialogActivity.RESULT_CLEARED) {
userColorNameManager.clearUserColor(this.user!!.key)
userColorNameManager.clearUserColor(user.key)
}
}
REQUEST_ADD_TO_LIST -> {
if (user == null) return
if (resultCode == Activity.RESULT_OK && data != null) {
val twitter = twitterWrapper
val list = data.getParcelableExtra<ParcelableUserList>(EXTRA_USER_LIST) ?: return
twitter.addUserListMembersAsync(user.account_key, list.id, user)
twitter.addUserListMembersAsync(accountKey, list.id, user)
}
}
REQUEST_SELECT_ACCOUNT -> {
if (user == null) return
if (resultCode == Activity.RESULT_OK) {
if (data == null || !data.hasExtra(EXTRA_ID)) return
val accountKey = data.getParcelableExtra<UserKey>(EXTRA_ACCOUNT_KEY)
val selectedAccountKey: UserKey = data.getParcelableExtra(EXTRA_ACCOUNT_KEY) ?: return
var userKey = user.key
if (account?.type == AccountType.MASTODON && account?.key?.host != accountKey.host) {
if (account?.type == AccountType.MASTODON && account?.key?.host != selectedAccountKey.host) {
userKey = AcctPlaceholderUserKey(user.key.host)
}
IntentUtils.openUserProfile(activity, accountKey, userKey, user.screen_name,
IntentUtils.openUserProfile(activity, selectedAccountKey, userKey, user.screen_name,
user.extras?.statusnet_profile_url, preferences[newDocumentApiKey],
null)
}
@ -786,10 +784,11 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
@UiThread
override fun onPrepareOptionsMenu(menu: Menu) {
val user = this.user ?: return
val accountKey = user.account_key ?: return
val account = this.account
val relationship = this.relationship
val isMyself = user.account_key.maybeEquals(user.key)
val isMyself = accountKey.maybeEquals(user.key)
val mentionItem = menu.findItem(R.id.mention)
if (mentionItem != null) {
val displayName = UserColorNameManager.decideDisplayName(user.nickname,
@ -881,14 +880,14 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val context = context
val twitter = twitterWrapper
val user = user
val user = user ?: return false
val accountKey = user.account_key ?: return false
val userRelationship = relationship
if (user == null) return false
when (item.itemId) {
R.id.block -> {
if (userRelationship == null) return true
if (userRelationship.blocking) {
twitter.destroyBlockAsync(user.account_key, user.key)
twitter.destroyBlockAsync(accountKey, user.key)
} else {
CreateUserBlockDialogFragment.show(fragmentManager, user)
}
@ -910,7 +909,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
R.id.mute_user -> {
if (userRelationship == null) return true
if (userRelationship.muting) {
twitter.destroyMuteAsync(user.account_key, user.key)
twitter.destroyMuteAsync(accountKey, user.key)
} else {
CreateUserMuteDialogFragment.show(fragmentManager, user)
}
@ -928,10 +927,10 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
scheme(SCHEME_TWIDERE)
authority(AUTHORITY_MESSAGES)
path(PATH_MESSAGES_CONVERSATION_NEW)
appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, user.account_key.toString())
appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
val intent = Intent(Intent.ACTION_VIEW, builder.build())
intent.putExtra(EXTRA_ACCOUNT, AccountUtils.getAccountDetails(am, user.account_key,
intent.putExtra(EXTRA_ACCOUNT, AccountUtils.getAccountDetails(am, accountKey,
true))
intent.putExtra(EXTRA_USERS, arrayOf(user))
intent.putExtra(EXTRA_OPEN_CONVERSATION, true)
@ -966,13 +965,13 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
}
R.id.follow -> {
if (userRelationship == null) return true
val updatingRelationship = twitter.isUpdatingRelationship(user.account_key,
val updatingRelationship = twitter.isUpdatingRelationship(accountKey,
user.key)
if (!updatingRelationship) {
if (userRelationship.following) {
DestroyFriendshipDialogFragment.show(fragmentManager, user)
} else {
twitter.createFriendshipAsync(user.account_key, user.key, user.screen_name)
twitter.createFriendshipAsync(accountKey, user.key, user.screen_name)
}
}
return true
@ -981,7 +980,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
val newState = !item.isChecked
val update = FriendshipUpdate()
update.retweets(newState)
twitter.updateFriendship(user.account_key, user.key, update)
twitter.updateFriendship(accountKey, user.key, update)
item.isChecked = newState
return true
}
@ -993,28 +992,28 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
}
val update = FriendshipUpdate()
update.deviceNotifications(newState)
twitter.updateFriendship(user.account_key, user.key, update)
twitter.updateFriendship(accountKey, user.key, update)
item.isChecked = newState
return true
}
R.id.muted_users -> {
IntentUtils.openMutesUsers(activity, user.account_key)
IntentUtils.openMutesUsers(activity, accountKey)
return true
}
R.id.blocked_users -> {
IntentUtils.openUserBlocks(activity, user.account_key)
IntentUtils.openUserBlocks(activity, accountKey)
return true
}
R.id.incoming_friendships -> {
IntentUtils.openIncomingFriendships(activity, user.account_key)
IntentUtils.openIncomingFriendships(activity, accountKey)
return true
}
R.id.user_mentions -> {
IntentUtils.openUserMentions(context, user.account_key, user.screen_name)
IntentUtils.openUserMentions(context, accountKey, user.screen_name)
return true
}
R.id.saved_searches -> {
IntentUtils.openSavedSearches(context, user.account_key)
IntentUtils.openSavedSearches(context, accountKey)
return true
}
R.id.open_in_browser -> {
@ -1039,22 +1038,22 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
}
R.id.add_user_to_home_screen -> {
ShortcutCreator.performCreation(this) {
ShortcutCreator.user(context, user.account_key, user)
ShortcutCreator.user(context, accountKey, user)
}
}
R.id.add_statuses_to_home_screen -> {
ShortcutCreator.performCreation(this) {
ShortcutCreator.userTimeline(context, user.account_key, user)
ShortcutCreator.userTimeline(context, accountKey, user)
}
}
R.id.add_favorites_to_home_screen -> {
ShortcutCreator.performCreation(this) {
ShortcutCreator.userFavorites(context, user.account_key, user)
ShortcutCreator.userFavorites(context, accountKey, user)
}
}
R.id.add_media_to_home_screen -> {
ShortcutCreator.performCreation(this) {
ShortcutCreator.userMediaTimeline(context, user.account_key, user)
ShortcutCreator.userMediaTimeline(context, accountKey, user)
}
}
else -> {
@ -1197,28 +1196,28 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
}
override fun onClick(view: View) {
val activity = activity
val user = user
if (activity == null || user == null) return
val activity = activity ?: return
val user = user ?: return
val accountKey = user.account_key ?: return
when (view.id) {
R.id.errorContainer -> {
getUserInfo(true)
}
R.id.follow -> {
if (user.account_key.maybeEquals(user.key)) {
IntentUtils.openProfileEditor(getActivity(), user.account_key)
if (accountKey.maybeEquals(user.key)) {
IntentUtils.openProfileEditor(getActivity(), accountKey)
} else {
val userRelationship = relationship
val twitter = twitterWrapper
if (userRelationship == null) return
if (userRelationship.blocking) {
twitter.destroyBlockAsync(user.account_key, user.key)
twitter.destroyBlockAsync(accountKey, user.key)
} else if (userRelationship.blocked_by) {
CreateUserBlockDialogFragment.show(childFragmentManager, user)
} else if (userRelationship.following) {
DestroyFriendshipDialogFragment.show(fragmentManager, user)
} else {
twitter.createFriendshipAsync(user.account_key, user.key, user.screen_name)
twitter.createFriendshipAsync(accountKey, user.key, user.screen_name)
}
}
}
@ -1228,7 +1227,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
profileImage.type = ParcelableMedia.Type.IMAGE
profileImage.preview_url = user.profile_image_url
val media = arrayOf(profileImage)
IntentUtils.openMedia(activity, user.account_key, media, null, false,
IntentUtils.openMedia(activity, accountKey, media, null, false,
preferences[newDocumentApiKey], preferences[displaySensitiveContentsKey])
}
R.id.profileBanner -> {
@ -1236,28 +1235,28 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
val profileBanner = ParcelableMediaUtils.image(url)
profileBanner.type = ParcelableMedia.Type.IMAGE
val media = arrayOf(profileBanner)
IntentUtils.openMedia(activity, user.account_key, media, null, false,
IntentUtils.openMedia(activity, accountKey, media, null, false,
preferences[newDocumentApiKey], preferences[displaySensitiveContentsKey])
}
R.id.listedContainer -> {
IntentUtils.openUserLists(getActivity(), user.account_key, user.key,
IntentUtils.openUserLists(getActivity(), accountKey, user.key,
user.screen_name)
}
R.id.groupsContainer -> {
IntentUtils.openUserGroups(getActivity(), user.account_key, user.key,
IntentUtils.openUserGroups(getActivity(), accountKey, user.key,
user.screen_name)
}
R.id.followersContainer -> {
IntentUtils.openUserFollowers(getActivity(), user.account_key, user.key,
IntentUtils.openUserFollowers(getActivity(), accountKey, user.key,
user.screen_name)
}
R.id.friendsContainer -> {
IntentUtils.openUserFriends(getActivity(), user.account_key, user.key,
IntentUtils.openUserFriends(getActivity(), accountKey, user.key,
user.screen_name)
}
R.id.nameContainer -> {
if (user.account_key == user.key) return
IntentUtils.openProfileEditor(getActivity(), user.account_key)
if (accountKey == user.key) return
IntentUtils.openProfileEditor(getActivity(), accountKey)
}
R.id.urlContainer -> {
val uri = user.urlPreferred?.let(Uri::parse) ?: return
@ -1379,7 +1378,8 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
private fun getUserInfo(omitIntentExtra: Boolean) {
val user = this.user ?: return
getUserInfo(user.account_key, user.key, user.screen_name, omitIntentExtra)
val accountKey = user.account_key ?: return
getUserInfo(accountKey, user.key, user.screen_name, omitIntentExtra)
}
private fun setUiColor(color: Int) {
@ -1598,6 +1598,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
}
private fun showAddToListDialog(user: ParcelableUser) {
val accountKey = user.account_key ?: return
val weakThis = WeakReference(this)
executeAfterFragmentResumed {
ProgressDialogFragment.show(it.childFragmentManager, "get_list_progress")
@ -1618,7 +1619,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
return result
}
val microBlog = MicroBlogAPIFactory.getInstance(fragment.context, user.account_key)
val microBlog = MicroBlogAPIFactory.getInstance(fragment.context, accountKey)
val ownedLists = ArrayList<ParcelableUserList>()
val listMemberships = microBlog.getUserListOwnerMemberships(user.key.id)
val paging = Paging()
@ -1627,7 +1628,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
do {
val resp = microBlog.getUserListOwnerships(paging)
resp.mapTo(ownedLists) { item ->
val userList = item.toParcelable(user.account_key)
val userList = item.toParcelable(accountKey)
userList.is_user_inside = listMemberships.any { it.id == item.id }
return@mapTo userList
}
@ -1645,7 +1646,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
fragment.executeAfterFragmentResumed { f ->
val df = AddRemoveUserListDialogFragment()
df.arguments = Bundle {
this[EXTRA_ACCOUNT_KEY] = user.account_key
this[EXTRA_ACCOUNT_KEY] = accountKey
this[EXTRA_USER_KEY] = user.key
this[EXTRA_USER_LISTS] = result
}

View File

@ -57,12 +57,14 @@ class IncomingFriendshipsFragment : ParcelableUsersFragment(), IUsersAdapter.Req
override fun onAcceptClicked(holder: UserViewHolder, position: Int) {
val user = adapter.getUser(position) ?: return
twitterWrapper.acceptFriendshipAsync(user.account_key, user.key)
val accountKey = user.account_key ?: return
twitterWrapper.acceptFriendshipAsync(accountKey, user.key)
}
override fun onDenyClicked(holder: UserViewHolder, position: Int) {
val user = adapter.getUser(position) ?: return
twitterWrapper.denyFriendshipAsync(user.account_key, user.key)
val accountKey = user.account_key ?: return
twitterWrapper.denyFriendshipAsync(accountKey, user.key)
}
@SuppressLint("SwitchIntDef")

View File

@ -36,7 +36,7 @@ abstract class ComponentPickerPreference(context: Context, attrs: AttributeSet?
override fun getSummary(): CharSequence {
if (isNoneValue(value)) return noneEntry
return entry
return entry ?: noneEntry
}
protected abstract val intentAction: String

View File

@ -69,7 +69,7 @@ object IntentUtils {
fun userProfile(user: ParcelableUser): Intent {
val uri = LinkCreator.getTwidereUserLink(user.account_key, user.key, user.screen_name)
val intent = Intent(Intent.ACTION_VIEW, uri)
val intent = uri.intent()
intent.setExtrasClassLoader(TwidereApplication::class.java.classLoader)
intent.putExtra(EXTRA_USER, user)
if (user.extras != null) {
@ -81,7 +81,7 @@ object IntentUtils {
fun userProfile(accountKey: UserKey?, userKey: UserKey?, screenName: String?,
profileUrl: String? = null, accountHost: String? = accountKey?.host ?: userKey?.host): Intent {
val uri = LinkCreator.getTwidereUserLink(accountKey, userKey, screenName)
val intent = Intent(Intent.ACTION_VIEW, uri)
val intent = uri.intent()
intent.putExtra(EXTRA_PROFILE_URL, profileUrl)
intent.putExtra(EXTRA_ACCOUNT_HOST, accountHost)
return intent
@ -100,7 +100,7 @@ object IntentUtils {
profileUrl: String? = null): Intent {
val uri = LinkCreator.getTwidereUserRelatedLink(AUTHORITY_USER_MEDIA_TIMELINE, accountKey,
userKey, screenName)
val intent = Intent(Intent.ACTION_VIEW, uri)
val intent = uri.intent()
intent.putExtra(EXTRA_PROFILE_URL, profileUrl)
return intent
}
@ -109,7 +109,7 @@ object IntentUtils {
profileUrl: String? = null): Intent {
val uri = LinkCreator.getTwidereUserRelatedLink(AUTHORITY_USER_FAVORITES, accountKey,
userKey, screenName)
val intent = Intent(Intent.ACTION_VIEW, uri)
val intent = uri.intent()
intent.putExtra(EXTRA_PROFILE_URL, profileUrl)
return intent
}
@ -118,25 +118,20 @@ object IntentUtils {
if (items == null) return
val extras = Bundle()
extras.putParcelableArrayList(EXTRA_ITEMS, ArrayList(items))
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_ITEMS)
val intent = Intent(Intent.ACTION_VIEW, builder.build())
val builder = UriBuilder(AUTHORITY_ITEMS)
val intent = builder.intent()
intent.putExtras(extras)
context.startActivity(intent)
}
fun openUserMentions(context: Context, accountKey: UserKey?,
screenName: String) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_USER_MENTIONS)
val builder = UriBuilder(AUTHORITY_USER_MENTIONS)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, screenName)
val intent = Intent(Intent.ACTION_VIEW, builder.build())
context.startActivity(intent)
context.startActivity(builder.intent())
}
fun openMedia(context: Context, status: ParcelableStatus,
@ -250,137 +245,107 @@ object IntentUtils {
}
fun messageConversation(accountKey: UserKey, conversationId: String): Intent {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_MESSAGES)
val builder = UriBuilder(AUTHORITY_MESSAGES)
builder.path(PATH_MESSAGES_CONVERSATION)
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
builder.appendQueryParameter(QUERY_PARAM_CONVERSATION_ID, conversationId)
val intent = Intent(Intent.ACTION_VIEW, builder.build())
intent.`package` = BuildConfig.APPLICATION_ID
return intent
return builder.intent()
}
fun messageConversationInfo(accountKey: UserKey, conversationId: String): Intent {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_MESSAGES)
val builder = UriBuilder(AUTHORITY_MESSAGES)
builder.path(PATH_MESSAGES_CONVERSATION_INFO)
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
builder.appendQueryParameter(QUERY_PARAM_CONVERSATION_ID, conversationId)
val intent = Intent(Intent.ACTION_VIEW, builder.build())
intent.`package` = BuildConfig.APPLICATION_ID
return intent
return builder.intent()
}
fun newMessageConversation(accountKey: UserKey): Intent {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_MESSAGES)
val builder = UriBuilder(AUTHORITY_MESSAGES)
builder.path(PATH_MESSAGES_CONVERSATION_NEW)
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
val intent = Intent(Intent.ACTION_VIEW, builder.build())
intent.`package` = BuildConfig.APPLICATION_ID
return intent
return builder.intent()
}
fun openIncomingFriendships(context: Context,
accountKey: UserKey?) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_INCOMING_FRIENDSHIPS)
val builder = UriBuilder(AUTHORITY_INCOMING_FRIENDSHIPS)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
val intent = Intent(Intent.ACTION_VIEW, builder.build())
intent.`package` = BuildConfig.APPLICATION_ID
context.startActivity(intent)
context.startActivity(builder.intent())
}
fun openMap(context: Context, latitude: Double, longitude: Double) {
if (!ParcelableLocationUtils.isValidLocation(latitude, longitude)) return
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_MAP)
val builder = UriBuilder(AUTHORITY_MAP)
builder.appendQueryParameter(QUERY_PARAM_LAT, latitude.toString())
builder.appendQueryParameter(QUERY_PARAM_LNG, longitude.toString())
val intent = Intent(Intent.ACTION_VIEW, builder.build())
intent.`package` = BuildConfig.APPLICATION_ID
context.startActivity(intent)
context.startActivity(builder.intent())
}
fun openMutesUsers(context: Context,
accountKey: UserKey?) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_MUTES_USERS)
val builder = UriBuilder(AUTHORITY_MUTES_USERS)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
val intent = Intent(Intent.ACTION_VIEW, builder.build())
intent.`package` = BuildConfig.APPLICATION_ID
context.startActivity(intent)
context.startActivity(builder.intent())
}
fun openSavedSearches(context: Context, accountKey: UserKey?) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_SAVED_SEARCHES)
val builder = UriBuilder(AUTHORITY_SAVED_SEARCHES)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
val intent = Intent(Intent.ACTION_VIEW, builder.build())
intent.`package` = BuildConfig.APPLICATION_ID
context.startActivity(intent)
context.startActivity(builder.intent())
}
fun openSearch(context: Context, accountKey: UserKey?, query: String, type: String? = null) {
val intent = Intent(Intent.ACTION_VIEW)
// Some devices cannot process query parameter with hashes well, so add this intent extra
intent.putExtra(EXTRA_QUERY, query)
if (accountKey != null) {
intent.putExtra(EXTRA_ACCOUNT_KEY, accountKey)
}
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_SEARCH)
val builder = UriBuilder(AUTHORITY_SEARCH)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
builder.appendQueryParameter(QUERY_PARAM_QUERY, query)
if (!TextUtils.isEmpty(type)) {
builder.appendQueryParameter(QUERY_PARAM_TYPE, type)
}
val intent = builder.intent()
// Some devices cannot process query parameter with hashes well, so add this intent extra
intent.putExtra(EXTRA_QUERY, query)
if (!TextUtils.isEmpty(type)) {
intent.putExtra(EXTRA_TYPE, type)
}
intent.data = builder.build()
if (accountKey != null) {
intent.putExtra(EXTRA_ACCOUNT_KEY, accountKey)
}
context.startActivity(intent)
}
fun openMastodonSearch(context: Context, accountKey: UserKey?, query: String) {
val intent = Intent(Intent.ACTION_VIEW)
val builder = UriBuilder(AUTHORITY_MASTODON_SEARCH)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
builder.appendQueryParameter(QUERY_PARAM_QUERY, query)
val intent = builder.intent()
// Some devices cannot process query parameter with hashes well, so add this intent extra
intent.putExtra(EXTRA_QUERY, query)
if (accountKey != null) {
intent.putExtra(EXTRA_ACCOUNT_KEY, accountKey)
}
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_MASTODON_SEARCH)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
builder.appendQueryParameter(QUERY_PARAM_QUERY, query)
intent.data = builder.build()
context.startActivity(intent)
}
fun status(accountKey: UserKey?, statusId: String): Intent {
val uri = LinkCreator.getTwidereStatusLink(accountKey, statusId)
return Intent(Intent.ACTION_VIEW, uri)
return Intent(Intent.ACTION_VIEW, uri).setPackage(BuildConfig.APPLICATION_ID)
}
fun openStatus(context: Context, accountKey: UserKey?, statusId: String) {
@ -388,65 +353,44 @@ object IntentUtils {
}
fun openStatus(context: Context, status: ParcelableStatus, activityOptions: Bundle? = null) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_STATUS)
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, status.account_key.toString())
builder.appendQueryParameter(QUERY_PARAM_STATUS_ID, status.id)
val intent = Intent(Intent.ACTION_VIEW, builder.build())
val intent = status(status.account_key, status.id)
intent.setExtrasClassLoader(TwidereApplication::class.java.classLoader)
intent.putExtra(EXTRA_STATUS, status)
ActivityCompat.startActivity(context, intent, activityOptions)
}
fun openStatusFavoriters(context: Context, accountKey: UserKey?,
statusId: String) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_STATUS_FAVORITERS)
fun openStatusFavoriters(context: Context, accountKey: UserKey?, statusId: String) {
val builder = UriBuilder(AUTHORITY_STATUS_FAVORITERS)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
builder.appendQueryParameter(QUERY_PARAM_STATUS_ID, statusId)
val intent = Intent(Intent.ACTION_VIEW, builder.build())
ActivityCompat.startActivity(context, intent, null)
ActivityCompat.startActivity(context, builder.intent(), null)
}
fun openStatusRetweeters(context: Context, accountKey: UserKey?,
statusId: String) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_STATUS_RETWEETERS)
fun openStatusRetweeters(context: Context, accountKey: UserKey?, statusId: String) {
val builder = UriBuilder(AUTHORITY_STATUS_RETWEETERS)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
builder.appendQueryParameter(QUERY_PARAM_STATUS_ID, statusId)
val intent = Intent(Intent.ACTION_VIEW, builder.build())
ActivityCompat.startActivity(context, intent, null)
ActivityCompat.startActivity(context, builder.intent(), null)
}
fun openTweetSearch(context: Context, accountKey: UserKey?,
query: String) {
fun openTweetSearch(context: Context, accountKey: UserKey?, query: String) {
openSearch(context, accountKey, query, QUERY_PARAM_VALUE_TWEETS)
}
fun openUserBlocks(activity: Activity?, accountKey: UserKey) {
if (activity == null) return
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_USER_BLOCKS)
val builder = UriBuilder(AUTHORITY_USER_BLOCKS)
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
val intent = Intent(Intent.ACTION_VIEW, builder.build())
activity.startActivity(intent)
activity.startActivity(builder.intent())
}
fun openUserFavorites(context: Context,
accountKey: UserKey?,
userKey: UserKey?,
fun openUserFavorites(context: Context, accountKey: UserKey?, userKey: UserKey?,
screenName: String?) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_USER_FAVORITES)
val builder = UriBuilder(AUTHORITY_USER_FAVORITES)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
@ -456,8 +400,7 @@ object IntentUtils {
if (screenName != null) {
builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, screenName)
}
val intent = Intent(Intent.ACTION_VIEW, builder.build())
context.startActivity(intent)
context.startActivity(builder.intent())
}
@ -468,13 +411,9 @@ object IntentUtils {
context.startActivity(Intent(Intent.ACTION_VIEW, intent))
}
fun openUserFriends(context: Context,
accountKey: UserKey?,
userKey: UserKey?,
fun openUserFriends(context: Context, accountKey: UserKey?, userKey: UserKey?,
screenName: String?) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_USER_FRIENDS)
val builder = UriBuilder(AUTHORITY_USER_FRIENDS)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
@ -484,9 +423,7 @@ object IntentUtils {
if (screenName != null) {
builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, screenName)
}
val intent = Intent(Intent.ACTION_VIEW, builder.build())
context.startActivity(intent)
context.startActivity(builder.intent())
}
fun openUserListDetails(context: Context, accountKey: UserKey?, listId: String?,
@ -496,14 +433,14 @@ object IntentUtils {
fun userListDetails(accountKey: UserKey?, listId: String?, userKey: UserKey?,
screenName: String?, listName: String?): Intent {
return Intent(Intent.ACTION_VIEW, getTwidereUserListRelatedLink(AUTHORITY_USER_LIST,
accountKey, listId, userKey, screenName, listName))
return getTwidereUserListRelatedLink(AUTHORITY_USER_LIST, accountKey, listId, userKey,
screenName, listName).intent()
}
fun userListTimeline(accountKey: UserKey?, listId: String?, userKey: UserKey?,
screenName: String?, listName: String?): Intent {
return Intent(Intent.ACTION_VIEW, getTwidereUserListRelatedLink(AUTHORITY_USER_LIST_TIMELINE,
accountKey, listId, userKey, screenName, listName))
return getTwidereUserListRelatedLink(AUTHORITY_USER_LIST_TIMELINE, accountKey, listId,
userKey, screenName, listName).intent()
}
fun openUserListDetails(context: Context, userList: ParcelableUserList) {
@ -513,35 +450,28 @@ object IntentUtils {
fun userListDetails(userList: ParcelableUserList): Intent {
val userKey = userList.user_key
val listId = userList.id
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_USER_LIST)
val builder = UriBuilder(AUTHORITY_USER_LIST)
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, userList.account_key.toString())
builder.appendQueryParameter(QUERY_PARAM_USER_KEY, userKey.toString())
builder.appendQueryParameter(QUERY_PARAM_LIST_ID, listId)
val intent = Intent(Intent.ACTION_VIEW, builder.build())
val intent = builder.intent()
intent.setExtrasClassLoader(TwidereApplication::class.java.classLoader)
intent.putExtra(EXTRA_USER_LIST, userList)
return intent
}
fun openGroupDetails(context: Context, group: ParcelableGroup) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_GROUP)
val builder = UriBuilder(AUTHORITY_GROUP)
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, group.account_key.toString())
builder.appendQueryParameter(QUERY_PARAM_GROUP_ID, group.id)
builder.appendQueryParameter(QUERY_PARAM_GROUP_NAME, group.nickname)
val intent = Intent(Intent.ACTION_VIEW, builder.build())
val intent = builder.intent()
intent.setExtrasClassLoader(TwidereApplication::class.java.classLoader)
intent.putExtra(EXTRA_GROUP, group)
context.startActivity(intent)
}
fun openUserLists(context: Context,
accountKey: UserKey?,
userKey: UserKey?,
screenName: String?) {
fun openUserLists(context: Context, accountKey: UserKey?, userKey: UserKey?, screenName: String?) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_USER_LISTS)
@ -554,16 +484,12 @@ object IntentUtils {
if (screenName != null) {
builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, screenName)
}
val intent = Intent(Intent.ACTION_VIEW, builder.build())
context.startActivity(intent)
context.startActivity(builder.intent())
}
fun openUserGroups(context: Context, accountKey: UserKey?, userKey: UserKey?,
screenName: String?) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_USER_GROUPS)
fun openUserGroups(context: Context, accountKey: UserKey?, userKey: UserKey?, screenName: String?) {
val builder = UriBuilder(AUTHORITY_USER_GROUPS)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
@ -573,104 +499,69 @@ object IntentUtils {
if (screenName != null) {
builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, screenName)
}
val intent = Intent(Intent.ACTION_VIEW, builder.build())
context.startActivity(intent)
context.startActivity(builder.intent())
}
fun openDirectMessages(context: Context, accountKey: UserKey?) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_MESSAGES)
val builder = UriBuilder(AUTHORITY_MESSAGES)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
val intent = Intent(Intent.ACTION_VIEW, builder.build())
context.startActivity(intent)
context.startActivity(builder.intent())
}
fun openInteractions(context: Context, accountKey: UserKey?) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_INTERACTIONS)
val builder = UriBuilder(AUTHORITY_INTERACTIONS)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
val intent = Intent(Intent.ACTION_VIEW, builder.build())
context.startActivity(intent)
context.startActivity(builder.intent())
}
fun openPublicTimeline(context: Context, accountKey: UserKey?) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_PUBLIC_TIMELINE)
val builder = UriBuilder(AUTHORITY_PUBLIC_TIMELINE)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
val intent = Intent(Intent.ACTION_VIEW, builder.build())
context.startActivity(intent)
context.startActivity(builder.intent())
}
fun openNetworkPublicTimeline(context: Context, accountKey: UserKey?) {
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_NETWORK_PUBLIC_TIMELINE)
val builder = UriBuilder(AUTHORITY_NETWORK_PUBLIC_TIMELINE)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
val intent = Intent(Intent.ACTION_VIEW, builder.build())
context.startActivity(intent)
context.startActivity(builder.intent())
}
fun openAccountsManager(context: Context) {
val intent = Intent()
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_ACCOUNTS)
intent.data = builder.build()
intent.`package` = BuildConfig.APPLICATION_ID
context.startActivity(intent)
val builder = UriBuilder(AUTHORITY_ACCOUNTS)
context.startActivity(builder.intent())
}
fun openDrafts(context: Context) {
val intent = Intent()
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_DRAFTS)
intent.data = builder.build()
intent.`package` = BuildConfig.APPLICATION_ID
context.startActivity(intent)
val builder = UriBuilder(AUTHORITY_DRAFTS)
context.startActivity(builder.intent())
}
fun settings(initialTag: String? = null): Intent {
val intent = Intent()
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE_SETTINGS)
builder.authority(initialTag.orEmpty())
intent.data = builder.build()
intent.`package` = BuildConfig.APPLICATION_ID
return intent
return builder.intent()
}
fun openProfileEditor(context: Context, accountKey: UserKey?) {
val intent = Intent()
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_PROFILE_EDITOR)
val builder = UriBuilder(AUTHORITY_PROFILE_EDITOR)
if (accountKey != null) {
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_KEY, accountKey.toString())
}
intent.data = builder.build()
intent.`package` = BuildConfig.APPLICATION_ID
context.startActivity(intent)
context.startActivity(builder.intent())
}
fun openFilters(context: Context, initialTab: String? = null) {
val intent = Intent()
val builder = Uri.Builder()
builder.scheme(SCHEME_TWIDERE)
builder.authority(AUTHORITY_FILTERS)
intent.data = builder.build()
intent.`package` = BuildConfig.APPLICATION_ID
val builder = UriBuilder(AUTHORITY_FILTERS)
val intent = builder.intent()
intent.putExtra(EXTRA_INITIAL_TAB, initialTab)
context.startActivity(intent)
}
@ -702,4 +593,16 @@ object IntentUtils {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT)
}
}
private fun UriBuilder(authority: String): Uri.Builder {
return Uri.Builder().scheme(SCHEME_TWIDERE).authority(authority)
}
private fun Uri.intent(action: String = Intent.ACTION_VIEW): Intent {
return Intent(action, this).setPackage(BuildConfig.APPLICATION_ID)
}
private fun Uri.Builder.intent(action: String = Intent.ACTION_VIEW): Intent {
return build().intent(action)
}
}

View File

@ -134,8 +134,8 @@ object LinkCreator {
when (user.user_type) {
AccountType.FANFOU -> return getFanfouUserLink(user.key.id)
AccountType.MASTODON -> {
val host = user.key.host ?: user.account_key.host
return getMastodonUserLink(host!!, user.screen_name)
val host = (user.key.host ?: user.account_key?.host)!! // Let it crash
return getMastodonUserLink(host, user.screen_name)
}
}
return getTwitterUserLink(user.screen_name)

View File

@ -120,14 +120,15 @@ class UserViewHolder(
profileImageView.visibility = View.GONE
}
if (user.account_key != null && twitter.isUpdatingRelationship(user.account_key, user.key)) {
val accountKey = user.account_key
if (accountKey != null && twitter.isUpdatingRelationship(accountKey, user.key)) {
processingRequestProgress.visibility = View.VISIBLE
actionsContainer.visibility = View.GONE
} else {
processingRequestProgress.visibility = View.GONE
actionsContainer.visibility = View.VISIBLE
}
if (user.account_key != null && user.key.hasSameHost(user.account_key)) {
if (accountKey != null && user.key.hasSameHost(accountKey)) {
externalIndicator.visibility = View.GONE
} else {
externalIndicator.visibility = View.VISIBLE
@ -137,7 +138,7 @@ class UserViewHolder(
followButton.setImageResource(if (user.is_following) R.drawable.ic_action_confirm else R.drawable.ic_action_add)
followButton.isActivated = user.is_following
val isMySelf = user.account_key == user.key
val isMySelf = accountKey == user.key
if (requestClickListener != null && !isMySelf) {
acceptRequestButton.visibility = View.VISIBLE