diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index eb3629f7ae..b3558ec507 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,6 +48,9 @@
+
R.style.Theme_Tachiyomi_Dark
+ 3 -> R.style.Theme_Tachiyomi_Amoled
+ 4 -> R.style.Theme_Tachiyomi_DarkBlue
+ else -> R.style.Theme_Tachiyomi
+ })
+ super.onCreate(savedInstanceState)
+ }
+
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/BrowseCatalogueController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/BrowseCatalogueController.kt
index 64dc08e232..3ea5eb68fe 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/BrowseCatalogueController.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/BrowseCatalogueController.kt
@@ -28,7 +28,7 @@ import eu.kanade.tachiyomi.ui.base.controller.SecondaryDrawerController
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
import eu.kanade.tachiyomi.ui.library.ChangeMangaCategoriesDialog
import eu.kanade.tachiyomi.ui.manga.MangaController
-import eu.kanade.tachiyomi.ui.manga.info.MangaWebViewController
+import eu.kanade.tachiyomi.ui.webview.WebViewActivity
import eu.kanade.tachiyomi.util.*
import eu.kanade.tachiyomi.widget.AutofitRecyclerView
import kotlinx.android.synthetic.main.catalogue_controller.*
@@ -295,8 +295,9 @@ open class BrowseCatalogueController(bundle: Bundle) :
private fun openInWebView() {
val source = presenter.source as? HttpSource ?: return
- router.pushController(MangaWebViewController(source.id, source.baseUrl)
- .withFadeTransaction())
+ val activity = activity ?: return
+ val intent = WebViewActivity.newIntent(activity, source.id, source.baseUrl, presenter.source.name)
+ startActivity(intent)
}
/**
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt
index ad159b1eb9..12c6879438 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt
@@ -5,14 +5,13 @@ import android.app.SearchManager
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
+import android.view.ViewGroup
+import androidx.appcompat.graphics.drawable.DrawerArrowDrawable
import androidx.core.view.GravityCompat
import androidx.drawerlayout.widget.DrawerLayout
-import androidx.appcompat.graphics.drawable.DrawerArrowDrawable
-import android.view.ViewGroup
import com.bluelinelabs.conductor.*
import eu.kanade.tachiyomi.Migrations
import eu.kanade.tachiyomi.R
-import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
import eu.kanade.tachiyomi.ui.base.controller.*
import eu.kanade.tachiyomi.ui.catalogue.CatalogueController
@@ -26,15 +25,12 @@ import eu.kanade.tachiyomi.ui.recently_read.RecentlyReadController
import eu.kanade.tachiyomi.ui.setting.SettingsMainController
import eu.kanade.tachiyomi.util.openInBrowser
import kotlinx.android.synthetic.main.main_activity.*
-import uy.kohesive.injekt.injectLazy
class MainActivity : BaseActivity() {
private lateinit var router: Router
- val preferences: PreferencesHelper by injectLazy()
-
private var drawerArrow: DrawerArrowDrawable? = null
private var secondaryDrawer: ViewGroup? = null
@@ -50,12 +46,6 @@ class MainActivity : BaseActivity() {
lateinit var tabAnimator: TabsAnimator
override fun onCreate(savedInstanceState: Bundle?) {
- setTheme(when (preferences.theme()) {
- 2 -> R.style.Theme_Tachiyomi_Dark
- 3 -> R.style.Theme_Tachiyomi_Amoled
- 4 -> R.style.Theme_Tachiyomi_DarkBlue
- else -> R.style.Theme_Tachiyomi
- })
super.onCreate(savedInstanceState)
// Do not let the launcher create a new activity http://stackoverflow.com/questions/16283079
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt
index 221eae06ae..703c233642 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt
@@ -40,6 +40,7 @@ import eu.kanade.tachiyomi.ui.catalogue.global_search.CatalogueSearchController
import eu.kanade.tachiyomi.ui.library.ChangeMangaCategoriesDialog
import eu.kanade.tachiyomi.ui.main.MainActivity
import eu.kanade.tachiyomi.ui.manga.MangaController
+import eu.kanade.tachiyomi.ui.webview.WebViewActivity
import eu.kanade.tachiyomi.util.openInBrowser
import eu.kanade.tachiyomi.util.snack
import eu.kanade.tachiyomi.util.toast
@@ -297,8 +298,9 @@ class MangaInfoController : NucleusController(),
return
}
- parentController?.router?.pushController(MangaWebViewController(source.id, url)
- .withFadeTransaction())
+ val activity = activity ?: return
+ val intent = WebViewActivity.newIntent(activity, source.id, url, presenter.manga.title)
+ startActivity(intent)
}
/**
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaWebViewController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaWebViewController.kt
deleted file mode 100644
index 2ae3667e81..0000000000
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaWebViewController.kt
+++ /dev/null
@@ -1,94 +0,0 @@
-package eu.kanade.tachiyomi.ui.manga.info
-
-import android.os.Bundle
-import android.view.*
-import android.webkit.WebView
-import eu.kanade.tachiyomi.R
-import eu.kanade.tachiyomi.source.SourceManager
-import eu.kanade.tachiyomi.source.online.HttpSource
-import eu.kanade.tachiyomi.ui.base.controller.BaseController
-import eu.kanade.tachiyomi.util.WebViewClientCompat
-import uy.kohesive.injekt.injectLazy
-
-class MangaWebViewController(bundle: Bundle? = null) : BaseController(bundle) {
-
- private val sourceManager by injectLazy()
-
- init {
- setHasOptionsMenu(true)
- }
-
- constructor(sourceId: Long, url: String) : this(Bundle().apply {
- putLong(SOURCE_KEY, sourceId)
- putString(URL_KEY, url)
- })
-
- override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View {
- return inflater.inflate(R.layout.manga_info_web_controller, container, false)
- }
-
- override fun onViewCreated(view: View) {
- super.onViewCreated(view)
- val source = sourceManager.get(args.getLong(SOURCE_KEY)) as? HttpSource ?: return
- val url = args.getString(URL_KEY) ?: return
- val headers = source.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: "" }
-
- val web = view as WebView
- web.webViewClient = object : WebViewClientCompat() {
- override fun shouldOverrideUrlCompat(view: WebView, url: String): Boolean {
- view.loadUrl(url)
- return true
- }
- }
- web.settings.javaScriptEnabled = true
- web.settings.userAgentString = source.headers["User-Agent"]
- web.loadUrl(url, headers)
- }
-
- override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
- inflater.inflate(R.menu.web_view, menu)
- }
-
- override fun onPrepareOptionsMenu(menu: Menu) {
- val web = view as WebView
- menu.findItem(R.id.action_forward).isVisible = web.canGoForward()
- }
-
- override fun onOptionsItemSelected(item: MenuItem): Boolean {
- when (item.itemId) {
- R.id.action_forward -> {
- val web = view as WebView
- if (web.canGoForward()) web.goForward()
- }
- R.id.action_refresh -> {
- val web = view as WebView
- web.reload()
- }
- R.id.action_close -> router.popController(this)
- else -> return super.onOptionsItemSelected(item)
- }
- return true
- }
-
- override fun handleBack(): Boolean {
- val web = view as WebView
- if (web.canGoBack()) {
- web.goBack()
- return true
- }
- return super.handleBack()
- }
-
- override fun onDestroyView(view: View) {
- val web = view as WebView
- web.stopLoading()
- web.destroy()
- super.onDestroyView(view)
- }
-
- private companion object {
- const val SOURCE_KEY = "source_key"
- const val URL_KEY = "url_key"
- }
-
-}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt
new file mode 100644
index 0000000000..c3f394e1c9
--- /dev/null
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt
@@ -0,0 +1,115 @@
+package eu.kanade.tachiyomi.ui.webview
+
+import android.content.Context
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.Color
+import android.os.Bundle
+import android.view.Menu
+import android.view.MenuItem
+import android.webkit.WebView
+import androidx.core.graphics.ColorUtils
+import eu.kanade.tachiyomi.R
+import eu.kanade.tachiyomi.source.SourceManager
+import eu.kanade.tachiyomi.source.online.HttpSource
+import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
+import eu.kanade.tachiyomi.util.WebViewClientCompat
+import kotlinx.android.synthetic.main.webview_activity.toolbar
+import kotlinx.android.synthetic.main.webview_activity.webview
+import uy.kohesive.injekt.injectLazy
+
+
+class WebViewActivity : BaseActivity() {
+
+ private val sourceManager by injectLazy()
+
+ private var bundle: Bundle? = null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.webview_activity)
+
+ title = intent.extras?.getString(TITLE_KEY)
+ setSupportActionBar(toolbar)
+ supportActionBar?.setDisplayHomeAsUpEnabled(true)
+ toolbar.setNavigationOnClickListener {
+ super.onBackPressed()
+ }
+
+ if (bundle == null) {
+ val source = sourceManager.get(intent.extras!!.getLong(SOURCE_KEY)) as? HttpSource ?: return
+ val url = intent.extras!!.getString(URL_KEY) ?: return
+ val headers = source.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: "" }
+
+ webview.webViewClient = object : WebViewClientCompat() {
+ override fun shouldOverrideUrlCompat(view: WebView, url: String): Boolean {
+ view.loadUrl(url)
+ return true
+ }
+
+ override fun onPageFinished(view: WebView?, url: String?) {
+ super.onPageFinished(view, url)
+ invalidateOptionsMenu()
+ title = view?.title
+ }
+
+ override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
+ super.onPageStarted(view, url, favicon)
+ invalidateOptionsMenu()
+ }
+ }
+ webview.settings.javaScriptEnabled = true
+ webview.settings.userAgentString = source.headers["User-Agent"]
+ webview.loadUrl(url, headers)
+ } else {
+ webview.restoreState(bundle)
+ }
+ }
+
+ override fun onCreateOptionsMenu(menu: Menu): Boolean {
+ menuInflater.inflate(R.menu.webview, menu)
+ return true
+ }
+
+ override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
+ val backItem = toolbar.menu.findItem(R.id.action_web_back)
+ val forwardItem = toolbar.menu.findItem(R.id.action_web_forward)
+ backItem?.isEnabled = webview.canGoBack()
+ forwardItem?.isEnabled = webview.canGoForward()
+
+ val translucentWhite = ColorUtils.setAlphaComponent(Color.WHITE, 127)
+ backItem.icon?.setTint(if (webview.canGoBack()) Color.WHITE else translucentWhite)
+ forwardItem?.icon?.setTint(if (webview.canGoForward()) Color.WHITE else translucentWhite)
+
+ return super.onPrepareOptionsMenu(menu)
+ }
+
+ override fun onBackPressed() {
+ if (webview.canGoBack()) webview.goBack()
+ else super.onBackPressed()
+ }
+
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ when (item.itemId) {
+ R.id.action_web_back -> webview.goBack()
+ R.id.action_web_forward -> webview.goForward()
+ R.id.action_web_refresh -> webview.reload()
+ }
+ return super.onOptionsItemSelected(item)
+ }
+
+ companion object {
+ private const val SOURCE_KEY = "source_key"
+ private const val URL_KEY = "url_key"
+ private const val TITLE_KEY = "title_key"
+
+ fun newIntent(context: Context, sourceId: Long, url: String, title: String?): Intent {
+ val intent = Intent(context, WebViewActivity::class.java)
+ intent.putExtra(SOURCE_KEY, sourceId)
+ intent.putExtra(URL_KEY, url)
+ intent.putExtra(TITLE_KEY, title)
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
+ return intent
+ }
+ }
+}
diff --git a/app/src/main/res/drawable/ic_arrow_back_white_24dp.xml b/app/src/main/res/drawable/ic_arrow_back_white_24dp.xml
new file mode 100644
index 0000000000..38fbc261b7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_arrow_back_white_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_arrow_forward_white_24dp.xml b/app/src/main/res/drawable/ic_arrow_forward_white_24dp.xml
new file mode 100644
index 0000000000..5304b93e18
--- /dev/null
+++ b/app/src/main/res/drawable/ic_arrow_forward_white_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_white_24dp.xml b/app/src/main/res/drawable/ic_close_white_24dp.xml
new file mode 100644
index 0000000000..d11cc5c9c4
--- /dev/null
+++ b/app/src/main/res/drawable/ic_close_white_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/main_activity.xml b/app/src/main/res/layout/main_activity.xml
index b0b21d102b..23310e5190 100644
--- a/app/src/main/res/layout/main_activity.xml
+++ b/app/src/main/res/layout/main_activity.xml
@@ -20,7 +20,6 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/menu/web_view.xml b/app/src/main/res/menu/web_view.xml
deleted file mode 100644
index 1e4056460b..0000000000
--- a/app/src/main/res/menu/web_view.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
diff --git a/app/src/main/res/menu/webview.xml b/app/src/main/res/menu/webview.xml
new file mode 100644
index 0000000000..ca02d3dfe1
--- /dev/null
+++ b/app/src/main/res/menu/webview.xml
@@ -0,0 +1,23 @@
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index cbbe837623..fba4d407fa 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -95,8 +95,9 @@
Restore
Open
Log in
- Forward
- Refresh
+ Back
+ Forward
+ Refresh
Deleting…
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 1ef10a8d4f..4f2f48b969 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -44,7 +44,7 @@
@@ -67,7 +67,7 @@
- @drawable/line_divider_dark
- true
- - @android:color/transparent
+ - @color/colorDarkPrimaryDark
- @color/colorDarkPrimaryDark
@@ -97,7 +97,7 @@
- @color/colorPrimaryDark
- true
- - @android:color/transparent
+ - @color/colorPrimaryDark
- @color/colorDarkPrimaryDark