When opening a post via "Open As", if post lookup from the target instance fails, display an error instead of opening the post in the browser. (#1531)

Addresses #1526
This commit is contained in:
Levi Bard 2019-10-11 17:51:47 +02:00 committed by Konrad Pozniak
commit 44bb1999af
5 changed files with 35 additions and 5 deletions

View file

@ -19,6 +19,7 @@ import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.LinearLayout
import android.widget.Toast
import androidx.annotation.VisibleForTesting
import androidx.lifecycle.Lifecycle
import com.google.android.material.bottomsheet.BottomSheetBehavior
@ -62,7 +63,7 @@ abstract class BottomSheetActivity : BaseActivity() {
}
open fun viewUrl(url: String) {
open fun viewUrl(url: String, lookupFallbackBehavior: PostLookupFallbackBehavior = PostLookupFallbackBehavior.OPEN_IN_BROWSER) {
if (!looksLikeMastodonUrl(url)) {
openLink(url)
return
@ -88,11 +89,11 @@ abstract class BottomSheetActivity : BaseActivity() {
return@subscribe
}
openLink(url)
performUrlFallbackAction(url, lookupFallbackBehavior)
}, {
if (!getCancelSearchRequested(url)) {
onEndSearch(url)
openLink(url)
performUrlFallbackAction(url, lookupFallbackBehavior)
}
})
@ -113,6 +114,13 @@ abstract class BottomSheetActivity : BaseActivity() {
startActivityWithSlideInAnimation(intent)
}
protected open fun performUrlFallbackAction(url: String, fallbackBehavior: PostLookupFallbackBehavior) {
when (fallbackBehavior) {
PostLookupFallbackBehavior.OPEN_IN_BROWSER -> openLink(url)
PostLookupFallbackBehavior.DISPLAY_ERROR -> Toast.makeText(this, getString(R.string.post_lookup_error_format, url), Toast.LENGTH_SHORT).show()
}
}
@VisibleForTesting
fun onBeginSearch(url: String) {
searchUrl = url
@ -187,3 +195,8 @@ fun looksLikeMastodonUrl(urlString: String): Boolean {
path.matches("^/notice/\\d+$".toRegex()) ||
path.matches("^/objects/[-a-f0-9]+$".toRegex())
}
enum class PostLookupFallbackBehavior {
OPEN_IN_BROWSER,
DISPLAY_ERROR,
}