Convert EHentai Login controller to a activity
This commit is contained in:
parent
67cb42ff30
commit
5df0eb7ed1
@ -150,6 +150,10 @@
|
||||
android:name=".extension.util.ExtensionInstallActivity"
|
||||
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
|
||||
|
||||
<activity
|
||||
android:name="exh.ui.login.EhLoginActivity"
|
||||
android:label="EHentaiLogin" />
|
||||
|
||||
<provider
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
android:authorities="${applicationId}.provider"
|
||||
|
@ -40,7 +40,7 @@ import exh.metadata.metadata.EHentaiSearchMetadata.Companion.TAG_TYPE_WEAK
|
||||
import exh.metadata.metadata.base.RaisedSearchMetadata.Companion.TAG_TYPE_VIRTUAL
|
||||
import exh.metadata.metadata.base.RaisedSearchMetadata.Companion.toGenreString
|
||||
import exh.metadata.metadata.base.RaisedTag
|
||||
import exh.ui.login.LoginController
|
||||
import exh.ui.login.EhLoginActivity
|
||||
import exh.ui.metadata.adapters.EHentaiDescriptionAdapter
|
||||
import exh.util.UriFilter
|
||||
import exh.util.UriGroup
|
||||
@ -725,9 +725,9 @@ class EHentai(
|
||||
private fun rawCookies(sp: Int): Map<String, String> {
|
||||
val cookies: MutableMap<String, String> = 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()
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
110
app/src/main/java/exh/ui/login/LoginController.kt → app/src/main/java/exh/ui/login/EhLoginActivity.kt
Executable file → Normal file
110
app/src/main/java/exh/ui/login/LoginController.kt → app/src/main/java/exh/ui/login/EhLoginActivity.kt
Executable file → Normal file
@ -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<EhActivityLoginBinding, LoginPresenter>() {
|
||||
class EhLoginActivity : BaseViewBindingActivity<EhActivityLoginBinding>() {
|
||||
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<EhActivityLoginBinding, LoginPresenter
|
||||
|
||||
CookieManager.getInstance().removeAllCookies {
|
||||
launchUI {
|
||||
startWebview()
|
||||
if (bundle == null) {
|
||||
startWebview()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -107,18 +168,17 @@ class LoginController : NucleusController<EhActivityLoginBinding, LoginPresenter
|
||||
// At ExHentai, check that everything worked out...
|
||||
if (applyExHentaiCookies(url)) {
|
||||
preferenceManager.enableExhentai().set(true)
|
||||
finishLogin()
|
||||
setResult(RESULT_OK)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun finishLogin() {
|
||||
router.popCurrentController()
|
||||
|
||||
// Upload settings
|
||||
WarnConfigureDialogController.uploadSettings(router)
|
||||
override fun onDestroy() {
|
||||
binding.webview?.destroy()
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
/**
|
||||
@ -216,5 +276,11 @@ class LoginController : NucleusController<EhActivityLoginBinding, LoginPresenter
|
||||
if(pc != null) pc.style.color = "#26353F";
|
||||
})()
|
||||
"""
|
||||
|
||||
fun newIntent(context: Context): Intent {
|
||||
return Intent(context, EhLoginActivity::class.java).apply {
|
||||
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
package exh.ui.login
|
||||
|
||||
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
|
||||
|
||||
class LoginPresenter : BasePresenter<LoginController>()
|
@ -13,9 +13,20 @@
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
android:id="@+id/appbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
android:layout_height="wrap_content" >
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:background="?attr/colorPrimary"
|
||||
android:theme="?attr/actionBarTheme"
|
||||
app:navigationIcon="@drawable/ic_close_24dp" />
|
||||
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:animateLayoutChanges="true">
|
||||
@ -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" >
|
||||
|
||||
<com.google.android.material.progressindicator.LinearProgressIndicator
|
||||
android:id="@+id/progress_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
</WebView>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/linearLayout"
|
||||
|
Loading…
x
Reference in New Issue
Block a user