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:name=".extension.util.ExtensionInstallActivity"
|
||||||
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
|
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name="exh.ui.login.EhLoginActivity"
|
||||||
|
android:label="EHentaiLogin" />
|
||||||
|
|
||||||
<provider
|
<provider
|
||||||
android:name="androidx.core.content.FileProvider"
|
android:name="androidx.core.content.FileProvider"
|
||||||
android:authorities="${applicationId}.provider"
|
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.TAG_TYPE_VIRTUAL
|
||||||
import exh.metadata.metadata.base.RaisedSearchMetadata.Companion.toGenreString
|
import exh.metadata.metadata.base.RaisedSearchMetadata.Companion.toGenreString
|
||||||
import exh.metadata.metadata.base.RaisedTag
|
import exh.metadata.metadata.base.RaisedTag
|
||||||
import exh.ui.login.LoginController
|
import exh.ui.login.EhLoginActivity
|
||||||
import exh.ui.metadata.adapters.EHentaiDescriptionAdapter
|
import exh.ui.metadata.adapters.EHentaiDescriptionAdapter
|
||||||
import exh.util.UriFilter
|
import exh.util.UriFilter
|
||||||
import exh.util.UriGroup
|
import exh.util.UriGroup
|
||||||
@ -725,9 +725,9 @@ class EHentai(
|
|||||||
private fun rawCookies(sp: Int): Map<String, String> {
|
private fun rawCookies(sp: Int): Map<String, String> {
|
||||||
val cookies: MutableMap<String, String> = mutableMapOf()
|
val cookies: MutableMap<String, String> = mutableMapOf()
|
||||||
if (preferences.enableExhentai().get()) {
|
if (preferences.enableExhentai().get()) {
|
||||||
cookies[LoginController.MEMBER_ID_COOKIE] = preferences.memberIdVal().get()
|
cookies[EhLoginActivity.MEMBER_ID_COOKIE] = preferences.memberIdVal().get()
|
||||||
cookies[LoginController.PASS_HASH_COOKIE] = preferences.passHashVal().get()
|
cookies[EhLoginActivity.PASS_HASH_COOKIE] = preferences.passHashVal().get()
|
||||||
cookies[LoginController.IGNEOUS_COOKIE] = preferences.igneousVal().get()
|
cookies[EhLoginActivity.IGNEOUS_COOKIE] = preferences.igneousVal().get()
|
||||||
cookies["sp"] = sp.toString()
|
cookies["sp"] = sp.toString()
|
||||||
|
|
||||||
val sessionKey = preferences.exhSettingsKey().get()
|
val sessionKey = preferences.exhSettingsKey().get()
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package eu.kanade.tachiyomi.ui.setting
|
package eu.kanade.tachiyomi.ui.setting
|
||||||
|
|
||||||
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.text.InputType
|
import android.text.InputType
|
||||||
import android.widget.Toast
|
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.data.preference.asImmediateFlow
|
||||||
import eu.kanade.tachiyomi.databinding.EhDialogCategoriesBinding
|
import eu.kanade.tachiyomi.databinding.EhDialogCategoriesBinding
|
||||||
import eu.kanade.tachiyomi.databinding.EhDialogLanguagesBinding
|
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.ui.webview.WebViewActivity
|
||||||
import eu.kanade.tachiyomi.util.preference.defaultValue
|
import eu.kanade.tachiyomi.util.preference.defaultValue
|
||||||
import eu.kanade.tachiyomi.util.preference.entriesRes
|
import eu.kanade.tachiyomi.util.preference.entriesRes
|
||||||
@ -43,7 +44,7 @@ import exh.metadata.metadata.EHentaiSearchMetadata
|
|||||||
import exh.metadata.metadata.base.getFlatMetadataForManga
|
import exh.metadata.metadata.base.getFlatMetadataForManga
|
||||||
import exh.source.isEhBasedManga
|
import exh.source.isEhBasedManga
|
||||||
import exh.uconfig.WarnConfigureDialogController
|
import exh.uconfig.WarnConfigureDialogController
|
||||||
import exh.ui.login.LoginController
|
import exh.ui.login.EhLoginActivity
|
||||||
import exh.util.executeOnIO
|
import exh.util.executeOnIO
|
||||||
import exh.util.floor
|
import exh.util.floor
|
||||||
import exh.util.nullIfBlank
|
import exh.util.nullIfBlank
|
||||||
@ -111,7 +112,7 @@ class SettingsEhController : SettingsController() {
|
|||||||
preferences.enableExhentai().set(false)
|
preferences.enableExhentai().set(false)
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
router.pushController(LoginController().withFadeTransaction())
|
startActivityForResult(EhLoginActivity.newIntent(activity!!), LOGIN_RESULT)
|
||||||
false
|
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)
|
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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
106
app/src/main/java/exh/ui/login/LoginController.kt → app/src/main/java/exh/ui/login/EhLoginActivity.kt
Executable file → Normal file
106
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
|
package exh.ui.login
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.content.pm.ApplicationInfo
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.view.LayoutInflater
|
import android.os.Bundle
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.webkit.CookieManager
|
import android.webkit.CookieManager
|
||||||
|
import android.webkit.WebChromeClient
|
||||||
import android.webkit.WebView
|
import android.webkit.WebView
|
||||||
import android.webkit.WebViewClient
|
import android.webkit.WebViewClient
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.core.view.isInvisible
|
||||||
import androidx.core.view.isVisible
|
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.data.preference.PreferencesHelper
|
||||||
import eu.kanade.tachiyomi.databinding.EhActivityLoginBinding
|
import eu.kanade.tachiyomi.databinding.EhActivityLoginBinding
|
||||||
import eu.kanade.tachiyomi.source.SourceManager
|
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.lang.launchUI
|
||||||
|
import eu.kanade.tachiyomi.util.system.WebViewUtil
|
||||||
import eu.kanade.tachiyomi.util.system.setDefaultSettings
|
import eu.kanade.tachiyomi.util.system.setDefaultSettings
|
||||||
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
import exh.log.xLogD
|
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 uy.kohesive.injekt.injectLazy
|
||||||
import java.net.HttpCookie
|
import java.net.HttpCookie
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
@ -24,24 +35,72 @@ import java.util.Locale
|
|||||||
* LoginController
|
* LoginController
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class LoginController : NucleusController<EhActivityLoginBinding, LoginPresenter>() {
|
class EhLoginActivity : BaseViewBindingActivity<EhActivityLoginBinding>() {
|
||||||
val preferenceManager: PreferencesHelper by injectLazy()
|
val preferenceManager: PreferencesHelper by injectLazy()
|
||||||
|
|
||||||
val sourceManager: SourceManager 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 {
|
if (!WebViewUtil.supportsWebView(this)) {
|
||||||
binding = EhActivityLoginBinding.inflate(inflater)
|
toast(R.string.information_webview_required, Toast.LENGTH_LONG)
|
||||||
return binding.root
|
finish()
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View) {
|
try {
|
||||||
super.onViewCreated(view)
|
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
|
||||||
|
}
|
||||||
|
|
||||||
binding.btnCancel.setOnClickListener { router.popCurrentController() }
|
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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun onViewCreated() {
|
||||||
|
binding.btnCancel.setOnClickListener { finish() }
|
||||||
|
|
||||||
binding.btnAdvanced.setOnClickListener {
|
binding.btnAdvanced.setOnClickListener {
|
||||||
binding.advancedOptions.isVisible = true
|
binding.advancedOptions.isVisible = true
|
||||||
@ -71,10 +130,12 @@ class LoginController : NucleusController<EhActivityLoginBinding, LoginPresenter
|
|||||||
|
|
||||||
CookieManager.getInstance().removeAllCookies {
|
CookieManager.getInstance().removeAllCookies {
|
||||||
launchUI {
|
launchUI {
|
||||||
|
if (bundle == null) {
|
||||||
startWebview()
|
startWebview()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun hideAdvancedOptions() {
|
private fun hideAdvancedOptions() {
|
||||||
binding.advancedOptions.isVisible = false
|
binding.advancedOptions.isVisible = false
|
||||||
@ -107,18 +168,17 @@ class LoginController : NucleusController<EhActivityLoginBinding, LoginPresenter
|
|||||||
// At ExHentai, check that everything worked out...
|
// At ExHentai, check that everything worked out...
|
||||||
if (applyExHentaiCookies(url)) {
|
if (applyExHentaiCookies(url)) {
|
||||||
preferenceManager.enableExhentai().set(true)
|
preferenceManager.enableExhentai().set(true)
|
||||||
finishLogin()
|
setResult(RESULT_OK)
|
||||||
|
finish()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun finishLogin() {
|
override fun onDestroy() {
|
||||||
router.popCurrentController()
|
binding.webview?.destroy()
|
||||||
|
super.onDestroy()
|
||||||
// Upload settings
|
|
||||||
WarnConfigureDialogController.uploadSettings(router)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -216,5 +276,11 @@ class LoginController : NucleusController<EhActivityLoginBinding, LoginPresenter
|
|||||||
if(pc != null) pc.style.color = "#26353F";
|
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
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
android:id="@+id/appbar"
|
android:id="@+id/appbar"
|
||||||
android:layout_width="match_parent"
|
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
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:animateLayoutChanges="true">
|
android:animateLayoutChanges="true">
|
||||||
@ -89,7 +100,13 @@
|
|||||||
app:layout_constraintBottom_toTopOf="@+id/linearLayout"
|
app:layout_constraintBottom_toTopOf="@+id/linearLayout"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
app:layout_constraintRight_toRightOf="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
|
<LinearLayout
|
||||||
android:id="@+id/linearLayout"
|
android:id="@+id/linearLayout"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user