From 5df0eb7ed1a444425bd3d6fb67baf5c98199ce51 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Sun, 11 Apr 2021 20:43:21 -0400 Subject: [PATCH] Convert EHentai Login controller to a activity --- app/src/main/AndroidManifest.xml | 4 + .../tachiyomi/source/online/all/EHentai.kt | 8 +- .../ui/setting/SettingsEhController.kt | 20 +++- ...{LoginController.kt => EhLoginActivity.kt} | 110 ++++++++++++++---- .../main/java/exh/ui/login/LoginPresenter.kt | 5 - app/src/main/res/layout/eh_activity_login.xml | 21 +++- 6 files changed, 132 insertions(+), 36 deletions(-) rename app/src/main/java/exh/ui/login/{LoginController.kt => EhLoginActivity.kt} (68%) mode change 100755 => 100644 delete mode 100644 app/src/main/java/exh/ui/login/LoginPresenter.kt 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" > + + +