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
import android.content.Intent
import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.os.Build
import androidx.core.content.ContextCompat
import androidx.core.net.toUri
import com.bluelinelabs.conductor.Controller
import com.bluelinelabs.conductor.Router
import com.bluelinelabs.conductor.RouterTransaction
import eu.kanade.tachiyomi.ui.base.changehandler.OneWayFadeChangeHandler
import eu.kanade.tachiyomi.util.system.toast
fun Router.popControllerWithTag(tag: String): Boolean {
val controller = getControllerWithTag(tag)
@ -33,3 +36,12 @@ fun Controller.withFadeTransaction(): RouterTransaction {
.pushChangeHandler(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.ViewGroup
import androidx.appcompat.view.ContextThemeWrapper
import androidx.core.net.toUri
import androidx.core.os.bundleOf
import androidx.preference.Preference
import androidx.preference.PreferenceGroupAdapter
@ -36,6 +35,7 @@ import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.getPreferenceKey
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
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.util.preference.DSL
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"
else -> "$URL_EXTENSION_COMMITS/src/${pkgName.replace(".", "/")}"
}
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(intent)
openInBrowser(url)
}
private fun openInSettings() {

View File

@ -1,13 +1,12 @@
package eu.kanade.tachiyomi.ui.manga.track
import android.content.Intent
import android.os.Bundle
import android.view.ViewGroup
import androidx.core.net.toUri
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.bottomsheet.BottomSheetBehavior
import eu.kanade.tachiyomi.data.database.models.Manga
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.util.system.copyToClipboard
import eu.kanade.tachiyomi.widget.sheet.BaseBottomSheetDialog
@ -65,7 +64,7 @@ class TrackSheet(
val track = adapter.getItem(position)?.track ?: return
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
import android.app.Dialog
import android.content.Intent
import android.os.Build
import android.os.Bundle
import androidx.core.net.toUri
import androidx.core.os.bundleOf
import androidx.preference.PreferenceScreen
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.github.GithubUpdateChecker
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.setting.SettingsController
import eu.kanade.tachiyomi.util.lang.launchNow
@ -86,8 +85,7 @@ class AboutController : SettingsController() {
val url = "https://tachiyomi.org"
summary = url
onClick {
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(intent)
openInBrowser(url)
}
}
preference {
@ -96,8 +94,7 @@ class AboutController : SettingsController() {
val url = "https://discord.gg/tachiyomi"
summary = url
onClick {
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(intent)
openInBrowser(url)
}
}
preference {
@ -108,8 +105,7 @@ class AboutController : SettingsController() {
// SY <--
summary = url
onClick {
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(intent)
openInBrowser(url)
}
}
// SY -->
@ -119,8 +115,7 @@ class AboutController : SettingsController() {
val url = "https://github.com/tachiyomiorg/tachiyomi"
summary = url
onClick {
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(intent)
openInBrowser(url)
}
}
// SY <--
@ -130,8 +125,7 @@ class AboutController : SettingsController() {
val url = "https://github.com/tachiyomiorg/tachiyomi-extensions"
summary = url
onClick {
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(intent)
openInBrowser(url)
}
}
preference {

View File

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