Avoid crash when device fails to handle opening a URL

(cherry picked from commit 61e5440b7c9c01dcb4a373d407da4872a4f38de2)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/ConductorExtensions.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/main/WhatsNewDialogController.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/more/AboutController.kt
This commit is contained in:
arkon 2021-02-12 17:02:37 -05:00 committed by Jobobby04
parent 7d1fd9f0bb
commit cd8543d40b
5 changed files with 24 additions and 22 deletions

View File

@ -1,12 +1,15 @@
package eu.kanade.tachiyomi.ui.base.controller package eu.kanade.tachiyomi.ui.base.controller
import android.content.Intent
import android.content.pm.PackageManager.PERMISSION_GRANTED import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.os.Build import android.os.Build
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.net.toUri
import com.bluelinelabs.conductor.Controller import com.bluelinelabs.conductor.Controller
import com.bluelinelabs.conductor.Router import com.bluelinelabs.conductor.Router
import com.bluelinelabs.conductor.RouterTransaction import com.bluelinelabs.conductor.RouterTransaction
import eu.kanade.tachiyomi.ui.base.changehandler.OneWayFadeChangeHandler import eu.kanade.tachiyomi.ui.base.changehandler.OneWayFadeChangeHandler
import eu.kanade.tachiyomi.util.system.toast
fun Router.popControllerWithTag(tag: String): Boolean { fun Router.popControllerWithTag(tag: String): Boolean {
val controller = getControllerWithTag(tag) val controller = getControllerWithTag(tag)
@ -33,3 +36,12 @@ fun Controller.withFadeTransaction(): RouterTransaction {
.pushChangeHandler(OneWayFadeChangeHandler()) .pushChangeHandler(OneWayFadeChangeHandler())
.popChangeHandler(OneWayFadeChangeHandler()) .popChangeHandler(OneWayFadeChangeHandler())
} }
fun Controller.openInBrowser(url: String) {
try {
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(intent)
} catch (e: Throwable) {
activity?.toast(e.message)
}
}

View File

@ -14,7 +14,6 @@ import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.view.ContextThemeWrapper import androidx.appcompat.view.ContextThemeWrapper
import androidx.core.net.toUri
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceGroupAdapter import androidx.preference.PreferenceGroupAdapter
@ -36,6 +35,7 @@ import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.getPreferenceKey import eu.kanade.tachiyomi.source.getPreferenceKey
import eu.kanade.tachiyomi.ui.base.controller.NucleusController import eu.kanade.tachiyomi.ui.base.controller.NucleusController
import eu.kanade.tachiyomi.ui.base.controller.ToolbarLiftOnScrollController import eu.kanade.tachiyomi.ui.base.controller.ToolbarLiftOnScrollController
import eu.kanade.tachiyomi.ui.base.controller.openInBrowser
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
import eu.kanade.tachiyomi.util.preference.DSL import eu.kanade.tachiyomi.util.preference.DSL
import eu.kanade.tachiyomi.util.preference.onChange import eu.kanade.tachiyomi.util.preference.onChange
@ -213,8 +213,7 @@ class ExtensionDetailsController(bundle: Bundle? = null) :
!pkgFactory.isNullOrEmpty() -> "$URL_EXTENSION_COMMITS/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/$pkgFactory" !pkgFactory.isNullOrEmpty() -> "$URL_EXTENSION_COMMITS/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/$pkgFactory"
else -> "$URL_EXTENSION_COMMITS/src/${pkgName.replace(".", "/")}" else -> "$URL_EXTENSION_COMMITS/src/${pkgName.replace(".", "/")}"
} }
val intent = Intent(Intent.ACTION_VIEW, url.toUri()) openInBrowser(url)
startActivity(intent)
} }
private fun openInSettings() { private fun openInSettings() {

View File

@ -1,13 +1,12 @@
package eu.kanade.tachiyomi.ui.manga.track package eu.kanade.tachiyomi.ui.manga.track
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.net.toUri
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.databinding.TrackControllerBinding import eu.kanade.tachiyomi.databinding.TrackControllerBinding
import eu.kanade.tachiyomi.ui.base.controller.openInBrowser
import eu.kanade.tachiyomi.ui.manga.MangaController import eu.kanade.tachiyomi.ui.manga.MangaController
import eu.kanade.tachiyomi.util.system.copyToClipboard import eu.kanade.tachiyomi.util.system.copyToClipboard
import eu.kanade.tachiyomi.widget.sheet.BaseBottomSheetDialog import eu.kanade.tachiyomi.widget.sheet.BaseBottomSheetDialog
@ -65,7 +64,7 @@ class TrackSheet(
val track = adapter.getItem(position)?.track ?: return val track = adapter.getItem(position)?.track ?: return
if (track.tracking_url.isNotBlank()) { if (track.tracking_url.isNotBlank()) {
controller.activity?.startActivity(Intent(Intent.ACTION_VIEW, track.tracking_url.toUri())) controller.openInBrowser(track.tracking_url)
} }
} }

View File

@ -1,10 +1,8 @@
package eu.kanade.tachiyomi.ui.more package eu.kanade.tachiyomi.ui.more
import android.app.Dialog import android.app.Dialog
import android.content.Intent
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import androidx.core.net.toUri
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
@ -15,6 +13,7 @@ import eu.kanade.tachiyomi.data.updater.UpdateResult
import eu.kanade.tachiyomi.data.updater.UpdaterService import eu.kanade.tachiyomi.data.updater.UpdaterService
import eu.kanade.tachiyomi.data.updater.github.GithubUpdateChecker import eu.kanade.tachiyomi.data.updater.github.GithubUpdateChecker
import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.ui.base.controller.DialogController
import eu.kanade.tachiyomi.ui.base.controller.openInBrowser
import eu.kanade.tachiyomi.ui.main.WhatsNewDialogController import eu.kanade.tachiyomi.ui.main.WhatsNewDialogController
import eu.kanade.tachiyomi.ui.setting.SettingsController import eu.kanade.tachiyomi.ui.setting.SettingsController
import eu.kanade.tachiyomi.util.lang.launchNow import eu.kanade.tachiyomi.util.lang.launchNow
@ -86,8 +85,7 @@ class AboutController : SettingsController() {
val url = "https://tachiyomi.org" val url = "https://tachiyomi.org"
summary = url summary = url
onClick { onClick {
val intent = Intent(Intent.ACTION_VIEW, url.toUri()) openInBrowser(url)
startActivity(intent)
} }
} }
preference { preference {
@ -96,8 +94,7 @@ class AboutController : SettingsController() {
val url = "https://discord.gg/tachiyomi" val url = "https://discord.gg/tachiyomi"
summary = url summary = url
onClick { onClick {
val intent = Intent(Intent.ACTION_VIEW, url.toUri()) openInBrowser(url)
startActivity(intent)
} }
} }
preference { preference {
@ -108,8 +105,7 @@ class AboutController : SettingsController() {
// SY <-- // SY <--
summary = url summary = url
onClick { onClick {
val intent = Intent(Intent.ACTION_VIEW, url.toUri()) openInBrowser(url)
startActivity(intent)
} }
} }
// SY --> // SY -->
@ -119,8 +115,7 @@ class AboutController : SettingsController() {
val url = "https://github.com/tachiyomiorg/tachiyomi" val url = "https://github.com/tachiyomiorg/tachiyomi"
summary = url summary = url
onClick { onClick {
val intent = Intent(Intent.ACTION_VIEW, url.toUri()) openInBrowser(url)
startActivity(intent)
} }
} }
// SY <-- // SY <--
@ -130,8 +125,7 @@ class AboutController : SettingsController() {
val url = "https://github.com/tachiyomiorg/tachiyomi-extensions" val url = "https://github.com/tachiyomiorg/tachiyomi-extensions"
summary = url summary = url
onClick { onClick {
val intent = Intent(Intent.ACTION_VIEW, url.toUri()) openInBrowser(url)
startActivity(intent)
} }
} }
preference { preference {

View File

@ -1,13 +1,12 @@
package eu.kanade.tachiyomi.ui.setting package eu.kanade.tachiyomi.ui.setting
import android.content.Intent
import androidx.core.net.toUri
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.library.LibraryUpdateService import eu.kanade.tachiyomi.data.library.LibraryUpdateService
import eu.kanade.tachiyomi.data.preference.PreferenceKeys import eu.kanade.tachiyomi.data.preference.PreferenceKeys
import eu.kanade.tachiyomi.data.preference.asImmediateFlow import eu.kanade.tachiyomi.data.preference.asImmediateFlow
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.ui.base.controller.openInBrowser
import eu.kanade.tachiyomi.util.preference.defaultValue import eu.kanade.tachiyomi.util.preference.defaultValue
import eu.kanade.tachiyomi.util.preference.entriesRes import eu.kanade.tachiyomi.util.preference.entriesRes
import eu.kanade.tachiyomi.util.preference.intListPreference import eu.kanade.tachiyomi.util.preference.intListPreference
@ -161,8 +160,7 @@ class SettingsMangaDexController :
val url = "https://github.com/goldbattle/MangadexRecomendations" val url = "https://github.com/goldbattle/MangadexRecomendations"
summary = context.getString(R.string.similar_credit_message, url) summary = context.getString(R.string.similar_credit_message, url)
onClick { onClick {
val intent = Intent(Intent.ACTION_VIEW, url.toUri()) openInBrowser(url)
startActivity(intent)
} }
isIconSpaceReserved = true isIconSpaceReserved = true
} }