diff --git a/app/src/main/java/com/keylesspalace/tusky/AboutActivity.kt b/app/src/main/java/com/keylesspalace/tusky/AboutActivity.kt index 8194a45bf..c05bd9f48 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AboutActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/AboutActivity.kt @@ -47,7 +47,7 @@ class AboutActivity : BottomSheetActivity(), Injectable { } private fun onAccountButtonClick() { - viewUrl("https://mastodon.social/@Tusky") + viewUrl("https://mastodon.social/@Tusky", getString(R.string.about_tusky_account)) } override fun onOptionsItemSelected(item: MenuItem): Boolean { diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountActivity.kt b/app/src/main/java/com/keylesspalace/tusky/AccountActivity.kt index 409b83667..0aad5d1a6 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/AccountActivity.kt @@ -686,8 +686,8 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI startActivityWithSlideInAnimation(intent) } - override fun onViewUrl(url: String) { - viewUrl(url) + override fun onViewUrl(url: String, text: String) { + viewUrl(url, text) } override fun onOptionsItemSelected(item: MenuItem): Boolean { diff --git a/app/src/main/java/com/keylesspalace/tusky/BottomSheetActivity.kt b/app/src/main/java/com/keylesspalace/tusky/BottomSheetActivity.kt index 9f61e51d7..7674c2986 100644 --- a/app/src/main/java/com/keylesspalace/tusky/BottomSheetActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/BottomSheetActivity.kt @@ -44,6 +44,8 @@ abstract class BottomSheetActivity : BaseActivity() { @Inject lateinit var mastodonApi: MastodonApi + private val forceBrowser = arrayOf("リモートで結果を表示") + override fun onPostCreate(savedInstanceState: Bundle?) { super.onPostCreate(savedInstanceState) @@ -62,7 +64,12 @@ abstract class BottomSheetActivity : BaseActivity() { } - open fun viewUrl(url: String) { + open fun viewUrl(url: String, text: String) { + if (forceBrowser.contains(text)) { + openLink(url) + return + } + if (!looksLikeMastodonUrl(url)) { openLink(url) return @@ -174,6 +181,7 @@ abstract class BottomSheetActivity : BaseActivity() { // https://pleroma.foo.bar/notice/43456787654678 // https://pleroma.foo.bar/objects/d4643c42-3ae0-4b73-b8b0-c725f5819207 // https://mastodon.foo.bar/users/User/statuses/000000000000000000 +// https://new.misskey.foo.bar/notes/012789abyz fun looksLikeMastodonUrl(urlString: String): Boolean { val uri: URI try { @@ -194,5 +202,7 @@ fun looksLikeMastodonUrl(urlString: String): Boolean { path.matches("^/@[^/]+/\\d+$".toRegex()) || path.matches("^/notice/\\d+$".toRegex()) || path.matches("^/objects/[-a-f0-9]+$".toRegex()) || - path.matches("^/users/[^/]+/statuses/[0-9]+$".toRegex()) + path.matches("^/users/[^/]+/statuses/[0-9]+$".toRegex()) || + path.matches("^/notes/[a-z0-9]+$".toRegex()) + } diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java index 15e1f47eb..966ed45f4 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java @@ -315,7 +315,7 @@ public final class MainActivity extends BottomSheetActivity implements ActionBut if (intent != null) { String statusUrl = intent.getStringExtra(STATUS_URL); if (statusUrl != null) { - viewUrl(statusUrl); + viewUrl(statusUrl, statusUrl); } } } diff --git a/app/src/main/java/com/keylesspalace/tusky/components/report/ReportActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/report/ReportActivity.kt index ff1375d94..b92598838 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/report/ReportActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/report/ReportActivity.kt @@ -98,7 +98,7 @@ class ReportActivity : BottomSheetActivity(), HasAndroidInjector { viewModel.checkUrl.observe(this, Observer { if (!it.isNullOrBlank()) { viewModel.urlChecked() - viewUrl(it) + viewUrl(it, it) } }) } diff --git a/app/src/main/java/com/keylesspalace/tusky/components/report/fragments/ReportStatusesFragment.kt b/app/src/main/java/com/keylesspalace/tusky/components/report/fragments/ReportStatusesFragment.kt index 50d4861f1..4ee9fd1b5 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/report/fragments/ReportStatusesFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/report/fragments/ReportStatusesFragment.kt @@ -204,7 +204,7 @@ class ReportStatusesFragment : Fragment(), Injectable, AdapterHandler { override fun onViewTag(tag: String) = startActivity(ViewTagActivity.getIntent(requireContext(), tag)) - override fun onViewUrl(url: String?) = viewModel.checkClickedUrl(url) + override fun onViewUrl(url: String?, text: String?) = viewModel.checkClickedUrl(url) companion object { fun newInstance() = ReportStatusesFragment() diff --git a/app/src/main/java/com/keylesspalace/tusky/components/search/fragments/SearchFragment.kt b/app/src/main/java/com/keylesspalace/tusky/components/search/fragments/SearchFragment.kt index 9968a0950..91fedc542 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/search/fragments/SearchFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/search/fragments/SearchFragment.kt @@ -124,8 +124,8 @@ abstract class SearchFragment : Fragment(), override fun onViewTag(tag: String) = startActivity(ViewTagActivity.getIntent(requireContext(), tag)) - override fun onViewUrl(url: String) { - bottomSheetActivity?.viewUrl(url) + override fun onViewUrl(url: String, text: String) { + bottomSheetActivity?.viewUrl(url, text) } protected val bottomSheetActivity = (activity as? BottomSheetActivity) diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.java b/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.java index d0fcabe12..c7702a7a2 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.java @@ -131,8 +131,8 @@ public abstract class SFragment extends BaseFragment implements Injectable { bottomSheetActivity.viewAccount(accountId); } - public void onViewUrl(String url) { - bottomSheetActivity.viewUrl(url); + public void onViewUrl(String url, String text) { + bottomSheetActivity.viewUrl(url, text); } protected void reply(Status status) { diff --git a/app/src/main/java/com/keylesspalace/tusky/interfaces/LinkListener.java b/app/src/main/java/com/keylesspalace/tusky/interfaces/LinkListener.java index 90599b22f..aee8be8df 100644 --- a/app/src/main/java/com/keylesspalace/tusky/interfaces/LinkListener.java +++ b/app/src/main/java/com/keylesspalace/tusky/interfaces/LinkListener.java @@ -18,5 +18,5 @@ package com.keylesspalace.tusky.interfaces; public interface LinkListener { void onViewTag(String tag); void onViewAccount(String id); - void onViewUrl(String url); + void onViewUrl(String url, String text); } diff --git a/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.java b/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.java index e31aecfce..a040ff9e8 100644 --- a/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.java +++ b/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.java @@ -112,7 +112,7 @@ public class LinkHelper { customSpan = new CustomURLSpan(span.getURL()) { @Override public void onClick(View widget) { - listener.onViewUrl(getURL()); + listener.onViewUrl(getURL(), text.toString()); } }; } diff --git a/app/src/main/java/net/accelf/yuito/QuoteInlineHelper.java b/app/src/main/java/net/accelf/yuito/QuoteInlineHelper.java index f9965df60..68cb81db4 100644 --- a/app/src/main/java/net/accelf/yuito/QuoteInlineHelper.java +++ b/app/src/main/java/net/accelf/yuito/QuoteInlineHelper.java @@ -99,9 +99,9 @@ public class QuoteInlineHelper { quoteAvatar.setOnClickListener(view -> listener.onViewAccount(accountId)); quoteDisplayName.setOnClickListener(view -> listener.onViewAccount(accountId)); quoteUsername.setOnClickListener(view -> listener.onViewAccount(accountId)); - quoteContent.setOnClickListener(view -> listener.onViewUrl(statusUrl)); - quoteMedia.setOnClickListener(view -> listener.onViewUrl(statusUrl)); - quoteContainer.setOnClickListener(view -> listener.onViewUrl(statusUrl)); + quoteContent.setOnClickListener(view -> listener.onViewUrl(statusUrl, statusUrl)); + quoteMedia.setOnClickListener(view -> listener.onViewUrl(statusUrl, statusUrl)); + quoteContainer.setOnClickListener(view -> listener.onViewUrl(statusUrl, statusUrl)); } public void setupQuoteContainer() {