diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d24d15642..c10bdc580 100755
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -150,6 +150,10 @@
android:name=".extension.util.ExtensionInstallActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
+
+
{
val cookies: MutableMap = mutableMapOf()
if (preferences.enableExhentai().get()) {
- cookies[LoginController.MEMBER_ID_COOKIE] = preferences.memberIdVal().get()
- cookies[LoginController.PASS_HASH_COOKIE] = preferences.passHashVal().get()
- cookies[LoginController.IGNEOUS_COOKIE] = preferences.igneousVal().get()
+ cookies[EhLoginActivity.MEMBER_ID_COOKIE] = preferences.memberIdVal().get()
+ cookies[EhLoginActivity.PASS_HASH_COOKIE] = preferences.passHashVal().get()
+ cookies[EhLoginActivity.IGNEOUS_COOKIE] = preferences.igneousVal().get()
cookies["sp"] = sp.toString()
val sessionKey = preferences.exhSettingsKey().get()
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsEhController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsEhController.kt
index d1d4f77c0..64e1e4b18 100755
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsEhController.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsEhController.kt
@@ -1,6 +1,8 @@
package eu.kanade.tachiyomi.ui.setting
+import android.app.Activity
import android.content.Context
+import android.content.Intent
import android.os.Handler
import android.text.InputType
import android.widget.Toast
@@ -19,7 +21,6 @@ import eu.kanade.tachiyomi.data.preference.PreferenceKeys
import eu.kanade.tachiyomi.data.preference.asImmediateFlow
import eu.kanade.tachiyomi.databinding.EhDialogCategoriesBinding
import eu.kanade.tachiyomi.databinding.EhDialogLanguagesBinding
-import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
import eu.kanade.tachiyomi.util.preference.defaultValue
import eu.kanade.tachiyomi.util.preference.entriesRes
@@ -43,7 +44,7 @@ import exh.metadata.metadata.EHentaiSearchMetadata
import exh.metadata.metadata.base.getFlatMetadataForManga
import exh.source.isEhBasedManga
import exh.uconfig.WarnConfigureDialogController
-import exh.ui.login.LoginController
+import exh.ui.login.EhLoginActivity
import exh.util.executeOnIO
import exh.util.floor
import exh.util.nullIfBlank
@@ -111,7 +112,7 @@ class SettingsEhController : SettingsController() {
preferences.enableExhentai().set(false)
true
} else {
- router.pushController(LoginController().withFadeTransaction())
+ startActivityForResult(EhLoginActivity.newIntent(activity!!), LOGIN_RESULT)
false
}
}
@@ -751,4 +752,17 @@ class SettingsEhController : SettingsController() {
}
data class RelativeTime(var years: Int? = null, var months: Int? = null, var weeks: Int? = null, var days: Int? = null, var hours: Int? = null, var minutes: Int? = null, var seconds: Int? = null, var milliseconds: Int? = null)
+
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ if (resultCode == Activity.RESULT_OK) {
+ if (requestCode == LOGIN_RESULT) {
+ // Upload settings
+ WarnConfigureDialogController.uploadSettings(router)
+ }
+ }
+ }
+
+ companion object {
+ const val LOGIN_RESULT = 500
+ }
}
diff --git a/app/src/main/java/exh/ui/login/LoginController.kt b/app/src/main/java/exh/ui/login/EhLoginActivity.kt
old mode 100755
new mode 100644
similarity index 68%
rename from app/src/main/java/exh/ui/login/LoginController.kt
rename to app/src/main/java/exh/ui/login/EhLoginActivity.kt
index 5f4c151d7..105b61784
--- a/app/src/main/java/exh/ui/login/LoginController.kt
+++ b/app/src/main/java/exh/ui/login/EhLoginActivity.kt
@@ -1,21 +1,32 @@
package exh.ui.login
+import android.content.Context
+import android.content.Intent
+import android.content.pm.ApplicationInfo
import android.net.Uri
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
+import android.os.Bundle
import android.webkit.CookieManager
+import android.webkit.WebChromeClient
import android.webkit.WebView
import android.webkit.WebViewClient
+import android.widget.Toast
+import androidx.core.view.isInvisible
import androidx.core.view.isVisible
+import androidx.lifecycle.lifecycleScope
+import eu.kanade.tachiyomi.BuildConfig
+import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.databinding.EhActivityLoginBinding
import eu.kanade.tachiyomi.source.SourceManager
-import eu.kanade.tachiyomi.ui.base.controller.NucleusController
+import eu.kanade.tachiyomi.ui.base.activity.BaseViewBindingActivity
import eu.kanade.tachiyomi.util.lang.launchUI
+import eu.kanade.tachiyomi.util.system.WebViewUtil
import eu.kanade.tachiyomi.util.system.setDefaultSettings
+import eu.kanade.tachiyomi.util.system.toast
import exh.log.xLogD
-import exh.uconfig.WarnConfigureDialogController
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import reactivecircus.flowbinding.appcompat.navigationClicks
import uy.kohesive.injekt.injectLazy
import java.net.HttpCookie
import java.util.Locale
@@ -24,24 +35,72 @@ import java.util.Locale
* LoginController
*/
-class LoginController : NucleusController() {
+class EhLoginActivity : BaseViewBindingActivity() {
val preferenceManager: PreferencesHelper by injectLazy()
val sourceManager: SourceManager by injectLazy()
- override fun getTitle() = "ExHentai login"
+ private var bundle: Bundle? = null
- override fun createPresenter() = LoginPresenter()
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
- override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View {
- binding = EhActivityLoginBinding.inflate(inflater)
- return binding.root
+ if (!WebViewUtil.supportsWebView(this)) {
+ toast(R.string.information_webview_required, Toast.LENGTH_LONG)
+ finish()
+ return
+ }
+
+ try {
+ binding = EhActivityLoginBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+ } catch (e: Throwable) {
+ // Potentially throws errors like "Error inflating class android.webkit.WebView"
+ toast(R.string.information_webview_required, Toast.LENGTH_LONG)
+ finish()
+ return
+ }
+
+ title = "ExHentai login"
+
+ setSupportActionBar(binding.toolbar)
+ supportActionBar?.setDisplayHomeAsUpEnabled(true)
+
+ binding.toolbar.navigationClicks()
+ .onEach { finish() }
+ .launchIn(lifecycleScope)
+
+ onViewCreated()
+
+ if (bundle == null) {
+ binding.webview.setDefaultSettings()
+
+ // Debug mode (chrome://inspect/#devices)
+ if (BuildConfig.DEBUG && 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE) {
+ WebView.setWebContentsDebuggingEnabled(true)
+ }
+
+ binding.webview.webChromeClient = object : WebChromeClient() {
+ override fun onProgressChanged(view: WebView?, newProgress: Int) {
+ binding.progressBar.isVisible = true
+ binding.progressBar.progress = newProgress
+ if (newProgress == 100) {
+ binding.progressBar.isInvisible = true
+ }
+ super.onProgressChanged(view, newProgress)
+ }
+ }
+ } else {
+ binding.webview.restoreState(bundle)
+ }
+
+ if (bundle == null) {
+ startWebview()
+ }
}
- override fun onViewCreated(view: View) {
- super.onViewCreated(view)
-
- binding.btnCancel.setOnClickListener { router.popCurrentController() }
+ fun onViewCreated() {
+ binding.btnCancel.setOnClickListener { finish() }
binding.btnAdvanced.setOnClickListener {
binding.advancedOptions.isVisible = true
@@ -71,7 +130,9 @@ class LoginController : NucleusController()
diff --git a/app/src/main/res/layout/eh_activity_login.xml b/app/src/main/res/layout/eh_activity_login.xml
index ac9dbb5c8..2bc0bbb67 100755
--- a/app/src/main/res/layout/eh_activity_login.xml
+++ b/app/src/main/res/layout/eh_activity_login.xml
@@ -13,9 +13,20 @@
+ android:layout_height="wrap_content" >
+
+
+
+
@@ -89,7 +100,13 @@
app:layout_constraintBottom_toTopOf="@+id/linearLayout"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toTopOf="parent" >
+
+
+