diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableUser.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableUser.java index 145128285..2af5bf43e 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableUser.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableUser.java @@ -49,6 +49,7 @@ public class ParcelableUser implements Parcelable, Comparable { @ParcelableThisPlease @JsonField(name = "account_id", typeConverter = UserKeyConverter.class) + @Nullable public UserKey account_key; @ParcelableThisPlease diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/ComposeActivity.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/ComposeActivity.kt index 3c791d1be..74ec5d7fa 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/ComposeActivity.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/ComposeActivity.kt @@ -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 } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/extension/ThrowableExtension.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/extension/ThrowableExtension.kt index f204e059c..4f5dd362c 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/extension/ThrowableExtension.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/extension/ThrowableExtension.kt @@ -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 } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/extension/model/ParcelableUserExtensions.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/extension/model/ParcelableUserExtensions.kt index 42c689d1e..c637c70a4 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/extension/model/ParcelableUserExtensions.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/extension/model/ParcelableUserExtensions.kt @@ -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,11 +60,12 @@ fun ParcelableUser.applyTo(relationship: ParcelableRelationship) { } } -val ParcelableUser.relationship: ParcelableRelationship get() = ParcelableRelationship().also { - it.account_key = this.account_key - it.user_key = this.key - this.applyTo(it) -} +val ParcelableUser.relationship: ParcelableRelationship + get() = ParcelableRelationship().also { + it.account_key = this.account_key + it.user_key = this.key + this.applyTo(it) + } val ParcelableUser.host: String get() { @@ -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() { - return extras?.profile_image_url_original?.takeIf(String::isNotEmpty) - ?: Utils.getOriginalTwitterProfileImage(profile_image_url) -} +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) { - screen_name -} else { - "$screen_name@${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 \ No newline at end of file diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AddUserFilterDialogFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AddUserFilterDialogFragment.kt index 5476f78a7..0e7793495 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AddUserFilterDialogFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AddUserFilterDialogFragment.kt @@ -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 }) diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CreateUserBlockDialogFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CreateUserBlockDialogFragment.kt index 8d74d60cc..d5506c4d5 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CreateUserBlockDialogFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CreateUserBlockDialogFragment.kt @@ -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 { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CreateUserMuteDialogFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CreateUserMuteDialogFragment.kt index a86612fe6..426c49177 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CreateUserMuteDialogFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CreateUserMuteDialogFragment.kt @@ -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 { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/DestroyFriendshipDialogFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/DestroyFriendshipDialogFragment.kt index d068ef336..4746efff5 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/DestroyFriendshipDialogFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/DestroyFriendshipDialogFragment.kt @@ -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 -> { } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableUsersFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableUsersFragment.kt index d58b971a1..0906d91a8 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableUsersFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableUsersFragment.kt @@ -209,24 +209,27 @@ abstract class ParcelableUsersFragment : AbsContentListRecyclerViewFragment { - 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(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(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() 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 } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/users/IncomingFriendshipsFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/users/IncomingFriendshipsFragment.kt index 4426fa5d3..3e4a1879d 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/users/IncomingFriendshipsFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/users/IncomingFriendshipsFragment.kt @@ -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") diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/preference/ComponentPickerPreference.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/preference/ComponentPickerPreference.kt index 08ddd6ca7..f5197304b 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/preference/ComponentPickerPreference.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/preference/ComponentPickerPreference.kt @@ -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 diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/util/IntentUtils.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/util/IntentUtils.kt index 8554ae9f8..a10ed7076 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/util/IntentUtils.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/util/IntentUtils.kt @@ -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) + } } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/util/LinkCreator.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/util/LinkCreator.kt index 652d0617e..a3f0e7484 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/util/LinkCreator.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/util/LinkCreator.kt @@ -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) diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/view/holder/UserViewHolder.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/view/holder/UserViewHolder.kt index 75f581703..ed2efb8b1 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/view/holder/UserViewHolder.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/view/holder/UserViewHolder.kt @@ -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