1
0
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:
Michel Roux 2020-04-27 14:45:39 +02:00
parent e2acc418d4
commit 77cafcb325
3 changed files with 42 additions and 20 deletions

View File

@ -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)

View File

@ -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 {

View File

@ -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()