mirror of
https://github.com/TwidereProject/Twidere-Android
synced 2025-02-16 11:41:21 +01:00
Fix open in browser and qr code availability
This commit is contained in:
parent
e2acc418d4
commit
77cafcb325
@ -792,7 +792,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||
val accountKey = user.account_key ?: return
|
||||
val account = this.account
|
||||
val relationship = this.relationship
|
||||
|
||||
val linkAvailable = LinkCreator.hasWebLink(user)
|
||||
val isMyself = accountKey.maybeEquals(user.key)
|
||||
val mentionItem = menu.findItem(R.id.mention)
|
||||
if (mentionItem != null) {
|
||||
@ -800,6 +800,11 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||
user.name, user.screen_name, nameFirst)
|
||||
mentionItem.title = getString(R.string.mention_user_name, displayName)
|
||||
}
|
||||
|
||||
menu.setItemAvailability(R.id.qr_code, linkAvailable)
|
||||
menu.setItemAvailability(R.id.copy_url, linkAvailable)
|
||||
menu.setItemAvailability(R.id.open_in_browser, linkAvailable)
|
||||
|
||||
menu.setItemAvailability(R.id.mention, !isMyself)
|
||||
menu.setItemAvailability(R.id.incoming_friendships, isMyself)
|
||||
menu.setItemAvailability(R.id.saved_searches, isMyself)
|
||||
@ -1023,7 +1028,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||
return true
|
||||
}
|
||||
R.id.open_in_browser -> {
|
||||
val uri = LinkCreator.getUserWebLink(user)
|
||||
val uri = LinkCreator.getUserWebLink(user) ?: return true
|
||||
val intent = Intent(Intent.ACTION_VIEW, uri)
|
||||
intent.addCategory(Intent.CATEGORY_BROWSABLE)
|
||||
intent.`package` = IntentUtils.getDefaultBrowserPackage(context, uri, true)
|
||||
|
@ -101,14 +101,20 @@ object LinkCreator {
|
||||
return builder.build()
|
||||
}
|
||||
|
||||
fun getStatusWebLink(status: ParcelableStatus): Uri {
|
||||
status.extras?.external_url?.takeIf(String::isNotEmpty)?.let {
|
||||
return Uri.parse(it)
|
||||
fun getStatusWebLink(status: ParcelableStatus): Uri? {
|
||||
return when (status.account_key.host) {
|
||||
USER_TYPE_TWITTER_COM -> getTwitterStatusLink(status.user_screen_name, status.originalId)
|
||||
USER_TYPE_FANFOU_COM -> getFanfouStatusLink(status.id)
|
||||
else -> status.extras?.external_url?.takeIf(String::isNotEmpty)?.let(Uri::parse)
|
||||
}
|
||||
if (USER_TYPE_FANFOU_COM == status.account_key.host) {
|
||||
return getFanfouStatusLink(status.id)
|
||||
}
|
||||
|
||||
fun hasWebLink(status: ParcelableStatus): Boolean {
|
||||
return when (status.account_key.host) {
|
||||
USER_TYPE_TWITTER_COM -> true
|
||||
USER_TYPE_FANFOU_COM -> true
|
||||
else -> !status.extras?.external_url.isNullOrEmpty()
|
||||
}
|
||||
return getTwitterStatusLink(status.user_screen_name, status.originalId)
|
||||
}
|
||||
|
||||
fun getQuotedStatusWebLink(status: ParcelableStatus): Uri {
|
||||
@ -127,18 +133,24 @@ object LinkCreator {
|
||||
return getTwitterStatusLink(status.quoted_user_screen_name, status.quoted_id)
|
||||
}
|
||||
|
||||
fun getUserWebLink(user: ParcelableUser): Uri {
|
||||
if (user.extras != null && user.extras?.statusnet_profile_url != null) {
|
||||
return Uri.parse(user.extras?.statusnet_profile_url)
|
||||
fun getUserWebLink(user: ParcelableUser): Uri? {
|
||||
return when (user.user_type) {
|
||||
AccountType.TWITTER -> getTwitterUserLink(user.screen_name)
|
||||
AccountType.FANFOU -> getFanfouUserLink(user.key.id)
|
||||
AccountType.STATUSNET -> user.extras?.statusnet_profile_url?.takeIf(String::isNotEmpty)?.let(Uri::parse)
|
||||
AccountType.MASTODON -> getMastodonUserLink((user.key.host ?: user.account_key?.host)!!, user.screen_name)
|
||||
else -> null
|
||||
}
|
||||
when (user.user_type) {
|
||||
AccountType.FANFOU -> return getFanfouUserLink(user.key.id)
|
||||
AccountType.MASTODON -> {
|
||||
val host = (user.key.host ?: user.account_key?.host)!! // Let it crash
|
||||
return getMastodonUserLink(host, user.screen_name)
|
||||
}
|
||||
}
|
||||
|
||||
fun hasWebLink(user: ParcelableUser): Boolean {
|
||||
return when (user.user_type) {
|
||||
AccountType.TWITTER -> true
|
||||
AccountType.FANFOU -> true
|
||||
AccountType.STATUSNET -> !user.extras?.statusnet_profile_url.isNullOrEmpty()
|
||||
AccountType.MASTODON -> true
|
||||
else -> false
|
||||
}
|
||||
return getTwitterUserLink(user.screen_name)
|
||||
}
|
||||
|
||||
internal fun getTwitterStatusLink(screenName: String, statusId: String): Uri {
|
||||
|
@ -194,6 +194,11 @@ object MenuUtils {
|
||||
val isOfficialKey = details.isOfficial(context)
|
||||
menu.setItemAvailability(R.id.translate, isOfficialKey)
|
||||
}
|
||||
|
||||
val linkAvailable = LinkCreator.hasWebLink(status)
|
||||
menu.setItemAvailability(R.id.copy_url, linkAvailable)
|
||||
menu.setItemAvailability(R.id.open_in_browser, linkAvailable)
|
||||
|
||||
menu.removeGroup(MENU_GROUP_STATUS_EXTENSION)
|
||||
addIntentToMenuForExtension(context, menu, MENU_GROUP_STATUS_EXTENSION,
|
||||
INTENT_ACTION_EXTENSION_OPEN_STATUS, EXTRA_STATUS, EXTRA_STATUS_JSON, status)
|
||||
@ -326,7 +331,7 @@ object MenuUtils {
|
||||
}
|
||||
}
|
||||
R.id.open_in_browser -> {
|
||||
val uri = LinkCreator.getStatusWebLink(status)
|
||||
val uri = LinkCreator.getStatusWebLink(status) ?: return true
|
||||
val intent = Intent(Intent.ACTION_VIEW, uri)
|
||||
intent.addCategory(Intent.CATEGORY_BROWSABLE)
|
||||
intent.`package` = IntentUtils.getDefaultBrowserPackage(context, uri, true)
|
||||
@ -338,7 +343,7 @@ object MenuUtils {
|
||||
}
|
||||
}
|
||||
R.id.copy_url -> {
|
||||
val uri = LinkCreator.getStatusWebLink(status)
|
||||
val uri = LinkCreator.getStatusWebLink(status) ?: return true
|
||||
ClipboardUtils.setText(context, uri.toString())
|
||||
Toast.makeText(context, R.string.message_toast_link_copied_to_clipboard,
|
||||
Toast.LENGTH_SHORT).show()
|
||||
|
Loading…
x
Reference in New Issue
Block a user