Compare commits
No commits in common. "a6d54b7f1758643c3595e042a208a659a6867554" and "90e28a9b45754920a51c0953b8062896b475deb3" have entirely different histories.
a6d54b7f17
...
90e28a9b45
@ -64,7 +64,7 @@ dependencies {
|
||||
implementation 'com.google.code.gson:gson:2.10.1'
|
||||
|
||||
// implementation files('libs/DualScreen.jar')
|
||||
implementation ("org.jsoup:jsoup:1.18.1")
|
||||
|
||||
implementation 'io.realm.kotlin:library-base:2.0.0'
|
||||
|
||||
|
||||
|
||||
BIN
app/libs/DualScreen.jar
Normal file
BIN
app/libs/DualScreen.jar
Normal file
Binary file not shown.
@ -0,0 +1,24 @@
|
||||
package com.mime.dualscreenview
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
import org.junit.Assert.*
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* See [testing documentation](http://d.android.com/tools/testing).
|
||||
*/
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class ExampleInstrumentedTest {
|
||||
@Test
|
||||
fun useAppContext() {
|
||||
// Context of the app under test.
|
||||
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
|
||||
assertEquals("com.mime.dualscreenview", appContext.packageName)
|
||||
}
|
||||
}
|
||||
@ -14,7 +14,6 @@
|
||||
android:usesCleartextTraffic="true"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:largeHeap="true"
|
||||
android:theme="@style/Theme.DualScreenView"
|
||||
tools:targetApi="31" >
|
||||
|
||||
|
||||
@ -15,7 +15,6 @@ import android.view.KeyEvent.KEYCODE_MEDIA_REWIND
|
||||
import android.view.KeyEvent.KEYCODE_VOLUME_DOWN
|
||||
import android.view.KeyEvent.KEYCODE_VOLUME_MUTE
|
||||
import android.view.KeyEvent.KEYCODE_VOLUME_UP
|
||||
import android.view.MotionEvent
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.mime.dualscreenview.common.Blog
|
||||
@ -58,55 +57,6 @@ open class Base : AppCompatActivity() {
|
||||
}
|
||||
|
||||
|
||||
var actionButtonPressX = 0f
|
||||
var actionButtonPressY = 0f
|
||||
override fun dispatchGenericMotionEvent(ev: MotionEvent?): Boolean {
|
||||
if (ev?.device?.name?.contains("BLE-M3") == true) {
|
||||
Blog.LOGE("keyEvent >>>>> dispatchGenericMotionEvent ${ev}")
|
||||
ev?.action?.let { action ->
|
||||
when(action) {
|
||||
MotionEvent.ACTION_HOVER_ENTER -> {
|
||||
return false
|
||||
}
|
||||
MotionEvent.ACTION_HOVER_MOVE ->{return false}
|
||||
MotionEvent.ACTION_BUTTON_PRESS ->{
|
||||
if (actionButtonPressX * actionButtonPressY == 0f) {
|
||||
actionButtonPressX = ev.x ?: 0f
|
||||
actionButtonPressY = ev.y ?: 0f
|
||||
}
|
||||
return true
|
||||
}
|
||||
MotionEvent.ACTION_BUTTON_RELEASE ->{
|
||||
|
||||
if (actionButtonPressY == ev.y) {
|
||||
if (actionButtonPressX.minus(ev.x ?: 0f) > 0f) {
|
||||
Blog.LOGE("Arrow Right Click")
|
||||
onKeyClick(KeyEvent.KEYCODE_VOLUME_DOWN)
|
||||
} else {
|
||||
Blog.LOGE("Arrow Left Click")
|
||||
onKeyClick(KeyEvent.KEYCODE_VOLUME_UP)
|
||||
}
|
||||
} else {
|
||||
if (actionButtonPressY.minus(ev.y ?: 0f) > 0f) {
|
||||
Blog.LOGE("Arrow Down Click")
|
||||
} else {
|
||||
Blog.LOGE("Arrow Up Click")
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
MotionEvent.ACTION_HOVER_EXIT ->{
|
||||
actionButtonPressX = 0f
|
||||
actionButtonPressY = 0f
|
||||
return false
|
||||
}
|
||||
else -> {return false}
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.dispatchGenericMotionEvent(ev)
|
||||
}
|
||||
|
||||
|
||||
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
|
||||
Blog.LOGD(log = "keyCode : ${keyCode}, event : ${event}")
|
||||
|
||||
@ -5,6 +5,7 @@ import android.content.Intent
|
||||
import android.content.pm.ActivityInfo
|
||||
import android.content.res.Configuration
|
||||
import android.graphics.Bitmap
|
||||
import android.net.ConnectivityManager
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
@ -15,12 +16,11 @@ import android.text.InputType
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.text.style.RelativeSizeSpan
|
||||
import android.util.Log
|
||||
import android.view.Gravity
|
||||
import android.view.KeyEvent
|
||||
import android.view.View
|
||||
import android.view.View.GONE
|
||||
import android.view.View.VISIBLE
|
||||
import android.view.View.inflate
|
||||
import android.webkit.JavascriptInterface
|
||||
import android.webkit.WebSettings
|
||||
import android.webkit.WebView
|
||||
import android.webkit.WebViewClient
|
||||
@ -55,12 +55,11 @@ import com.mime.dualscreenview.view.PagedTextViewInterface
|
||||
import com.mime.dualscreenview.view.TouchArea
|
||||
import com.mime.dualscreenview.webcontents.BaseWebContentsViewer
|
||||
import com.mime.dualscreenview.webcontents.MainControllInterface
|
||||
import com.mime.dualscreenview.webcontents.contentsinfo.Booktoki
|
||||
import com.mime.dualscreenview.webcontents.contentsinfo.GotoSomeWhere
|
||||
import com.mime.dualscreenview.webcontents.contentsinfo.NewtokiOne
|
||||
import io.realm.kotlin.UpdatePolicy
|
||||
import io.realm.kotlin.ext.copyFromRealm
|
||||
import io.realm.kotlin.ext.query
|
||||
import org.jsoup.Jsoup
|
||||
import java.lang.System.currentTimeMillis
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Date
|
||||
@ -89,7 +88,7 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
fun getCurrentUrl() : String {
|
||||
var currentPath = currentBooinfo?.pathUrl ?: mBaseWebContentsViewer.webview.url?.toUri()?.path ?: ""
|
||||
var domain = PrefManager.getLastDomain()
|
||||
return domain.plus(if (currentPath.length > 4) currentPath else "")
|
||||
return domain.plus("/").plus(if (currentPath.length > 4) currentPath else "")
|
||||
}
|
||||
|
||||
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||
@ -120,10 +119,7 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
mBaseWebContentsViewer?.webview?.url?.let {
|
||||
Uri.parse(it).path?.let {
|
||||
HistoryManager.getBookInfos(it, {
|
||||
it?.let {
|
||||
it.pages.sortBy { it.pathUrl }
|
||||
showList(it)
|
||||
}
|
||||
it?.let { showList(it) }
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -131,10 +127,6 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
binding.hiddenWeb?.let { v->
|
||||
contentsSaver = v
|
||||
contentsSaver?.webViewClient = saveClient
|
||||
try {
|
||||
contentsSaver?.removeJavascriptInterface("MyJavaScriptInterface")
|
||||
} catch (e:Exception) {e.printStackTrace()}
|
||||
contentsSaver?.addJavascriptInterface(SaveHelper(),"MyJavaScriptInterface")
|
||||
contentsSaver?.settings?.textZoom = 100
|
||||
contentsSaver?.settings?.javaScriptEnabled = true
|
||||
contentsSaver?.settings?.javaScriptCanOpenWindowsAutomatically = false
|
||||
@ -163,7 +155,7 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
|
||||
binding.btnHome.setOnClickListener { v->
|
||||
paged_layer.visibility = GONE
|
||||
mBaseWebContentsViewer.loadContents(NewtokiOne)
|
||||
mBaseWebContentsViewer.loadContents(Booktoki)
|
||||
}
|
||||
|
||||
loadLastInfo()
|
||||
@ -177,6 +169,7 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
HistoryManager.getBookPageInfo(Uri.parse(lastInfo!!.pageUrl!!).path!!) {
|
||||
it?.let {
|
||||
currentBooinfo = it
|
||||
paged_layer.text = it!!.contents!!
|
||||
paged_layer.visibility = VISIBLE
|
||||
if(it?.pathUrl?.length ?: 0 > 0) {
|
||||
HistoryManager.save(historyItem = HistoryItem().putHistory(it,mBaseWebContentsViewer.webview.url!!))
|
||||
@ -185,8 +178,8 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
Blog.LOGE("HistoryManager.getNextPage(${lastInfo?.pageUrl})")
|
||||
mBaseWebContentsViewer.webview.loadUrl(lastInfo!!.pageUrl!!.replace(Uri.parse(lastInfo!!.pageUrl)!!.path!!,it?.pathUrl!!))
|
||||
} else {
|
||||
Blog.LOGE("HistoryManager.getNextPage(${NewtokiOne.getLastedDoamin()})")
|
||||
mBaseWebContentsViewer.webview.loadUrl(NewtokiOne.getLastedDoamin() + it?.pathUrl!!)
|
||||
Blog.LOGE("HistoryManager.getNextPage(${Booktoki.getLastedDoamin()})")
|
||||
mBaseWebContentsViewer.webview.loadUrl(Booktoki.getLastedDoamin() + it?.pathUrl!!)
|
||||
}
|
||||
it?.pathUrl?.let {
|
||||
HistoryManager.getBookInfos(it) {
|
||||
@ -198,11 +191,26 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
HistoryManager.openRealm.query<ReaderConfig>()?.find()?.let {
|
||||
if (it.size > 0) {
|
||||
realm.copyFromRealm(it.first()).let {
|
||||
applyReaderConfig()
|
||||
runOnUiThread {
|
||||
paged_layer.setTextSize(it.textSize?.toFloat()?: 14f)
|
||||
paged_layer.setLineSpacing(it.lineSpace?.toFloat() ?: 1f)
|
||||
paged_layer.setLetterSpacing(it.letterSpace?.toFloat() ?: 1f)
|
||||
paged_layer.setPadding(
|
||||
it.padding ?: 1,
|
||||
it.padding ?: 1,
|
||||
it.padding ?: 1,
|
||||
it.padding ?: 1)
|
||||
|
||||
var typeface = typesfacez.get(getIndex(typesfacez as PairArray<Any>,it.font ?: ""))
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
paged_layer.setTypeface(resources.getFont(typeface.second))
|
||||
}
|
||||
val color = colorz.get(it.style ?: 0)
|
||||
paged_layer.setColorStyle(color.second)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
paged_layer.text = it!!.contents!!
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -219,15 +227,8 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBookInfos(aInfos: BookPageInfos) {
|
||||
Blog.LOGE("onBookInfos(aInfos: ${aInfos})")
|
||||
runOnUiThread {
|
||||
showList(aInfos)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBookInfos(jsonString: String) {
|
||||
Blog.LOGE("onBookInfos" , "jsonString >> ${jsonString}")
|
||||
Blog.LOGE("onBookInfos" , "onBookInfos >> ${jsonString}")
|
||||
val realm = openRealm()
|
||||
var infos : BookPageInfos? = null
|
||||
realm.writeBlocking {
|
||||
@ -266,7 +267,7 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
infos?.bookPageUrl?.let {
|
||||
HistoryManager.getBookInfos(it){
|
||||
it?.let {
|
||||
Blog.LOGE(s(), "onBookInfos it >> ${it}")
|
||||
Blog.LOGE("onBookInfos" , "onBookInfos it >> ${it}")
|
||||
runOnUiThread {
|
||||
showList(it)
|
||||
}
|
||||
@ -277,14 +278,12 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
}
|
||||
}
|
||||
|
||||
private fun s() = "onBookInfos"
|
||||
|
||||
fun reloadTo(lastInfo: LastInfo?) {
|
||||
findViewById<WebView>(R.id.menu_web)?.postDelayed({
|
||||
if (lastInfo != null) {
|
||||
mBaseWebContentsViewer.loadLastInfo(lastInfo!!)
|
||||
} else {
|
||||
mBaseWebContentsViewer.loadContents(NewtokiOne)
|
||||
mBaseWebContentsViewer.loadContents(Booktoki)
|
||||
}
|
||||
},200L)
|
||||
}
|
||||
@ -378,18 +377,16 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
}
|
||||
|
||||
fun showList(infos: BookPageInfos) {
|
||||
Blog.LOGE("showList infos >>>>${infos}")
|
||||
|
||||
if (infos != null && infos.pages.size ?: 0 > 0) {
|
||||
var items : ArrayList<BookPageInfo> = arrayListOf()
|
||||
for (item in infos.pages) {
|
||||
items.add(item)
|
||||
}
|
||||
|
||||
items.sortBy { it.chapterID }
|
||||
|
||||
items.sortBy { it.chapterNum }
|
||||
DefaultList.showDefaultList(
|
||||
this@Intro,
|
||||
"현제는 ${currentTitle} - ${currentChapter} -> 다른화를 골라",
|
||||
"현제는 ${currentTitle} - ${(infos.pages.size ?: 0) - currentChapter} -> 다른화를 골라",
|
||||
items,
|
||||
currentChapter,
|
||||
{ position ->
|
||||
@ -420,77 +417,69 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
|
||||
var isLoading = false
|
||||
var saveClient = object : WebViewClient() {
|
||||
|
||||
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
|
||||
super.onPageStarted(view, url, favicon)
|
||||
isLoading = true
|
||||
Blog.LOGE("saveClient >>> ${isLoading} ${url}")
|
||||
}
|
||||
|
||||
override fun onPageFinished(webView: WebView?, url: String?) {
|
||||
super.onPageFinished(webView, url)
|
||||
// val delayed = 3500L + Math.abs(Random.nextLong().rem(9999L))
|
||||
finishedUrl = url ?: ""
|
||||
webView?.postDelayed({
|
||||
webView?.evaluateJavascript(
|
||||
"function getAll() {\n" +
|
||||
" MyJavaScriptInterface.sendValueFromHtml(document.getElementsByTagName('html')[0].innerHTML)" +
|
||||
" };getAll()"
|
||||
) { result ->
|
||||
(result as? String)?.let {
|
||||
|
||||
}
|
||||
isLoading = false
|
||||
}
|
||||
}, delayed)
|
||||
isLoading = false
|
||||
webView?.postDelayed({ autoScrollDown(webView, url) },(1300L + Random(System.currentTimeMillis()).nextLong().rem(1286L)))
|
||||
}
|
||||
fun showToast(origin: String) {
|
||||
runOnUiThread {
|
||||
val biggerText = SpannableStringBuilder(origin)
|
||||
biggerText.setSpan(RelativeSizeSpan(1.6f), 0, origin.length, 0)
|
||||
Toast.makeText(
|
||||
baseContext,
|
||||
biggerText,
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
fun showToast(origin: String) {
|
||||
runOnUiThread {
|
||||
val toast = Toast(this)
|
||||
toast.duration = Toast.LENGTH_SHORT
|
||||
val biggerText = SpannableStringBuilder(origin)
|
||||
biggerText.setSpan(RelativeSizeSpan(1.6f), 0, origin.length, 0)
|
||||
val view: View = inflate(this, com.mime.dualscreenview.R.layout.simple_toast,null)
|
||||
view.findViewById<TextView>(com.mime.dualscreenview.R.id.text).text = biggerText
|
||||
toast.setView(view)
|
||||
toast.show()
|
||||
// Toast.makeText(
|
||||
// baseContext,
|
||||
// biggerText,
|
||||
// Toast.LENGTH_SHORT
|
||||
// ).show()
|
||||
}
|
||||
}
|
||||
var delayed = 3500L + Math.abs(Random.nextLong().rem(9999L))
|
||||
var finishedUrl : String? = null
|
||||
inner class SaveHelper {
|
||||
@JavascriptInterface
|
||||
fun sendValueFromHtml(string: String) {
|
||||
Jsoup.parse(string)?.let { html ->
|
||||
val view_padding = html.getElementsByClass("view-padding")
|
||||
if (view_padding.size > 0){
|
||||
// Blog.LOGE("finishedUrl >>> ${finishedUrl} :::: ${html.title()}")
|
||||
val contents = view_padding.get(0).children().html().replace("<p>"," ").replace("</p>","\n\n")
|
||||
// Blog.LOGE("finishedUrl >>> ${finishedUrl} :::: view_padding.get(0)\n${contents}")
|
||||
if (contents.length > 20) {
|
||||
Uri.parse(finishedUrl).path?.let {
|
||||
delayed = 3500L + Math.abs(Random.nextLong().rem(9999L))
|
||||
HistoryManager.getBooPageInfoContentsSave(it, contents).apply {
|
||||
HistoryManager.getBookPageInfo(it) { book ->
|
||||
showToast("saved ${book?.getTitleItem()} \n:: lenght = ${contents.length} \n:: saveTarget = ${saveTarget.size}\n:: delayed >> ${delayed}")
|
||||
fun autoScrollDown(webView: WebView?, url: String?) {
|
||||
webView?.let { webView ->
|
||||
val ramdomTimeSec =
|
||||
800L.plus(Random(System.currentTimeMillis()).nextLong().rem(789L))
|
||||
Blog.LOGE("ramdomTime >>> ${ramdomTimeSec}")
|
||||
if (((webView?.scrollY ?: 0) + (webView?.height
|
||||
?: 0)) < webView?.contentHeight ?: 0
|
||||
) {
|
||||
webView?.postDelayed({
|
||||
webView?.pageDown(false)
|
||||
autoScrollDown(webView, url)
|
||||
}, ramdomTimeSec)
|
||||
} else {
|
||||
webView?.postDelayed({
|
||||
var findContents = Booktoki.getFindContentsJs()
|
||||
webView?.evaluateJavascript(findContents) { result: String? ->
|
||||
result?.let { string: String ->
|
||||
if (string.length > 10) {
|
||||
val contents = string.replace("\\\"", "\"")
|
||||
.replace("\\n", System.getProperty("line.separator"))
|
||||
.replace("\\n", System.getProperty("line.separator"))
|
||||
Uri.parse(url)?.let {
|
||||
it.path?.let {
|
||||
HistoryManager.getBooPageInfoContentsSave(it, contents.replace(Char(0x20).toString(), " "))
|
||||
HistoryManager.getBookPageInfo(it) { info ->
|
||||
info?.let { showToast(info.getTitleItem()) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}.apply {
|
||||
HistoryManager.getBookInfos(it) { saveItem(it)}
|
||||
var ramdomTime = 2000L.plus(Random(System.currentTimeMillis()).nextLong().rem(1785L))
|
||||
Blog.LOGE("afterNextPageTime >>> ${ramdomTime}")
|
||||
contentsSaver?.postDelayed({ saveItem(null) }, ramdomTime)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
}, ramdomTimeSec)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var saveTarget : ArrayList<BookPageInfo> = arrayListOf()
|
||||
private fun saveItem(infos: BookPageInfos?) {
|
||||
Blog.LOGE("saveItem >>> infos?.pages ${infos?.pages?.size ?: 0}")
|
||||
@ -517,9 +506,10 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Blog.LOGE("saveItem >>> saveTarget ${saveTarget.count()}")
|
||||
try {
|
||||
if (isLoading == false) {
|
||||
if (isLoading == false) {
|
||||
try {
|
||||
saveTarget.removeFirst().let {
|
||||
Blog.LOGE("saveItem >>> ${it.pathUrl}")
|
||||
runOnUiThread {
|
||||
@ -532,10 +522,11 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch ( e : Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
} catch ( e : Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun moveTo(item: BookPageInfo?) {
|
||||
@ -601,27 +592,22 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
|
||||
fun contentsLoad(pathUrl : String) {
|
||||
HistoryManager.getBookPageInfo(pathUrl) {
|
||||
Blog.LOGE("contentsLoad :::: pathUrl >> ${pathUrl}")
|
||||
it?.pathUrl?.let {
|
||||
Blog.LOGE("contentsLoad :::: pathUrl >> ${it}")
|
||||
HistoryManager.getBookInfos(it) {
|
||||
Blog.LOGE("contentsLoad :::: getBookInfos >> ${it}")
|
||||
saveItem(it)
|
||||
}
|
||||
HistoryManager.getBookInfos(it) { saveItem(it) }
|
||||
}
|
||||
if (it != null) currentBooinfo = it
|
||||
if (it != null && (it?.contents?.length ?: 0) > 10) {
|
||||
paged_layer.visibility = VISIBLE
|
||||
paged_layer.text = it!!.contents!!
|
||||
if((it?.pathUrl?.length ?: 0) > 0) {
|
||||
if (lastInfo?.pageUrl?.length ?: 0 > 0 && lastInfo?.pageUrl!!.startsWith("http")) {
|
||||
mBaseWebContentsViewer.webview.loadUrl(lastInfo!!.pageUrl!!.replace(Uri.parse(lastInfo!!.pageUrl)!!.path!!,it?.pathUrl!!))
|
||||
} else {
|
||||
mBaseWebContentsViewer.webview.loadUrl(NewtokiOne.getLastedDoamin() + it?.pathUrl!!)
|
||||
mBaseWebContentsViewer.webview.loadUrl(Booktoki.getLastedDoamin() + it?.pathUrl!!)
|
||||
}
|
||||
HistoryManager.save(historyItem = HistoryItem().putHistory(it,mBaseWebContentsViewer.webview.url!!))
|
||||
}
|
||||
applyReaderConfig()
|
||||
paged_layer.text = it!!.contents!!
|
||||
} else {
|
||||
if(it?.pathUrl?.length ?: 0 > 0) {
|
||||
if (lastInfo?.pageUrl?.length ?: 0 > 0 && lastInfo?.pageUrl!!.startsWith("http")) {
|
||||
@ -629,7 +615,7 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
mBaseWebContentsViewer.webview.loadUrl(lastInfo!!.pageUrl!!.replace(Uri.parse(lastInfo!!.pageUrl)!!.path!!,it?.pathUrl!!))
|
||||
} else {
|
||||
paged_layer.visibility = GONE
|
||||
mBaseWebContentsViewer.webview.loadUrl(NewtokiOne.getLastedDoamin() + it?.pathUrl!!)
|
||||
mBaseWebContentsViewer.webview.loadUrl(Booktoki.getLastedDoamin() + it?.pathUrl!!)
|
||||
}
|
||||
HistoryManager.save(historyItem = HistoryItem().putHistory(it,mBaseWebContentsViewer.webview.url!!))
|
||||
}
|
||||
@ -670,18 +656,16 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
paged_layer?.setTypeface(resources.getFont(typeface.second))
|
||||
}
|
||||
|
||||
val color = colorz.get(it.style ?: 0)
|
||||
paged_layer?.setColorStyle(color.second)
|
||||
paged_layer.setTextSize(it.textSize?.toFloat()?: 14f)
|
||||
paged_layer.setLineSpacing(it.lineSpace?.toFloat() ?: 1f)
|
||||
paged_layer.setLetterSpacing(it.letterSpace?.toFloat() ?: 1f)
|
||||
paged_layer.setPadding(
|
||||
it.padding ?: 1,
|
||||
it.padding ?: 1,
|
||||
it.padding ?: 1,
|
||||
it.padding ?: 1)
|
||||
paged_layer.invalidate()
|
||||
val color = colorz.get(it.style ?: 0)
|
||||
paged_layer?.setColorStyle(color.second)
|
||||
paged_layer.setTextSize(it.textSize?.toFloat()?: 14f)
|
||||
paged_layer.setLineSpacing(it.lineSpace?.toFloat() ?: 1f)
|
||||
paged_layer.setLetterSpacing(it.letterSpace?.toFloat() ?: 1f)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -737,41 +721,34 @@ class Intro : Base() , MainControllInterface, PagedTextViewInterface {
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
override fun onLoadedContents(aContents: String) {
|
||||
paged_layer.apply {
|
||||
paged_layer.post {
|
||||
if (aContents != null && aContents.length > 10) {
|
||||
var contents = aContents.replace("\\\"", "\"")
|
||||
contents = (contents.replace("\\n", System.getProperty("line.separator")))
|
||||
contents = (contents.replace("\\n", System.getProperty("line.separator")))
|
||||
mPagedTextViewInterface = this@Intro
|
||||
if (lastInfo != null && mBaseWebContentsViewer.webview.url?.endsWith(lastInfo!!.pageUrl) ?: false) {
|
||||
binding.progress.visibility = VISIBLE
|
||||
paged_layer.postDelayed({
|
||||
binding.progress.visibility = GONE
|
||||
}, 1000)
|
||||
}
|
||||
applyReaderConfig()
|
||||
runOnUiThread {
|
||||
text = contents
|
||||
visibility = VISIBLE
|
||||
}
|
||||
forceUpdateUI()
|
||||
mBaseWebContentsViewer.webview.url?.let {
|
||||
Uri.parse(it)?.let {
|
||||
it.path?.let {
|
||||
HistoryManager.getBookPageInfo(it) {
|
||||
currentBooinfo = it
|
||||
currentChapter = it?.chapterNum ?: 0
|
||||
currentPage = it?.chapterNum ?: 0
|
||||
HistoryManager.save(
|
||||
historyItem = HistoryItem().putHistory(
|
||||
it,
|
||||
mBaseWebContentsViewer.webview.url!!
|
||||
)
|
||||
)
|
||||
}
|
||||
if (aContents != null && aContents.length > 10) {
|
||||
var contents = aContents.replace("\\\"","\"")
|
||||
contents = (contents.replace("\\n", System.getProperty("line.separator")))
|
||||
contents = (contents.replace("\\n", System.getProperty("line.separator")))
|
||||
mPagedTextViewInterface = this@Intro
|
||||
if(lastInfo != null && mBaseWebContentsViewer.webview.url?.endsWith(lastInfo!!.pageUrl) ?: false) {
|
||||
binding.progress.visibility = VISIBLE
|
||||
paged_layer.postDelayed({
|
||||
binding.progress.visibility = GONE
|
||||
},1000)
|
||||
}
|
||||
applyReaderConfig()
|
||||
runOnUiThread {
|
||||
text = contents
|
||||
visibility = VISIBLE
|
||||
}
|
||||
forceUpdateUI()
|
||||
mBaseWebContentsViewer.webview.url?.let {
|
||||
Uri.parse(it)?.let {
|
||||
it.path?.let {
|
||||
HistoryManager.getBookPageInfo(it){
|
||||
currentBooinfo = it
|
||||
currentChapter = it?.chapterNum ?: 0
|
||||
currentPage = it?.chapterNum ?: 0
|
||||
HistoryManager.save(historyItem = HistoryItem().putHistory(it,mBaseWebContentsViewer.webview.url!!))
|
||||
}
|
||||
HistoryManager.getBooPageInfoContentsSave(it!!.path!!, contents)
|
||||
}
|
||||
HistoryManager.getBooPageInfoContentsSave(it!!.path!!,contents)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,21 +13,7 @@ val colorz : PairArray<Array<String>> = arrayOf<Pair<String,Array<String>>>(
|
||||
Pair("color set 07",arrayOf<String>("#F8BBD0", "#263238")),
|
||||
Pair("color set 08",arrayOf<String>("#E6EE9C", "#455A64")),
|
||||
Pair("color set 09",arrayOf<String>("#CFD8DC", "#455A64")),
|
||||
Pair("color set 10",arrayOf<String>("#FFF59D", "#37474F")),
|
||||
Pair("color set 21",arrayOf<String>("#263238","#E1F5FE")),
|
||||
Pair("color set 22",arrayOf<String>("#37474F","#F0F4C3")),
|
||||
Pair("color set 23",arrayOf<String>("#455A64","#ECEFF1")),
|
||||
Pair("color set 24",arrayOf<String>("#263238","#E0F7FA")),
|
||||
Pair("color set 25",arrayOf<String>("#263238","#F5F5F5")),
|
||||
Pair("color set 26",arrayOf<String>("#263238","#ECEFF1")),
|
||||
Pair("color set 27",arrayOf<String>("#263238","#F8BBD0")),
|
||||
Pair("color set 28",arrayOf<String>("#455A64","#E6EE9C")),
|
||||
Pair("color set 29",arrayOf<String>("#455A64","#CFD8DC")),
|
||||
Pair("color set 30",arrayOf<String>("#37474F","#FFF59D")),
|
||||
Pair("color set 31",arrayOf<String>("#FFFFFF","#1C1B1B")),
|
||||
Pair("color set 32",arrayOf<String>("#272727","#FFFFFF")),
|
||||
Pair("color set 33",arrayOf<String>("#1C1B1B","#FFFFFF")),
|
||||
Pair("color set 34",arrayOf<String>("#FFFFFF","#272727"))
|
||||
Pair("color set 10",arrayOf<String>("#FFF59D", "#37474F"))
|
||||
)
|
||||
val typesfacez : PairArray<Int> = arrayOf<Pair<String,Int>>(
|
||||
Pair("정선 아리랑 혼", R.font.jsarirang_hon),
|
||||
@ -36,37 +22,6 @@ val typesfacez : PairArray<Int> = arrayOf<Pair<String,Int>>(
|
||||
Pair("손기정체", R.font.kcc_sonkeechung),
|
||||
Pair("교보 손글씨", R.font.kyobo_handwriting_2021sjy),
|
||||
Pair("태백 은하수", R.font.taebaek_milkyway),
|
||||
Pair("taebaek_milkyway",R.font.taebaek_milkyway),
|
||||
Pair("kccahnjunggeun",R.font.kccahnjunggeun),
|
||||
Pair("kotra_songeulssi",R.font.kotra_songeulssi),
|
||||
Pair("kotra_bold",R.font.kotra_bold),
|
||||
Pair("cafe24oneprettynight",R.font.cafe24oneprettynight),
|
||||
Pair("nnsgc_wsjidyp",R.font.nnsgc_wsjidyp),
|
||||
Pair("nnsgc_yjc",R.font.nnsgc_yjc),
|
||||
Pair("nnsgc_brhp",R.font.nnsgc_brhp),
|
||||
Pair("nnsgc_md",R.font.nnsgc_md),
|
||||
Pair("nnsgc_gd_an_gd",R.font.nnsgc_gd_an_gd),
|
||||
Pair("dovemayo",R.font.dovemayo),
|
||||
Pair("gabia_solmee",R.font.gabia_solmee),
|
||||
Pair("ylee_mortal_heart_immortal_memory",R.font.ylee_mortal_heart_immortal_memory),
|
||||
Pair("kcc_kimhoon",R.font.kcc_kimhoon),
|
||||
Pair("taefont_tsthlml",R.font.taefont_tsthlml),
|
||||
Pair("ssshinb7",R.font.ssshinb7),
|
||||
Pair("godomaum",R.font.godomaum),
|
||||
Pair("tvn_jguiyg_medium",R.font.tvn_jguiyg_medium),
|
||||
Pair("tvn_jguiyg_light",R.font.tvn_jguiyg_light),
|
||||
Pair("on_jsuhr",R.font.on_jsuhr),
|
||||
Pair("on_jsuhl",R.font.on_jsuhl),
|
||||
Pair("on_ychyuhr",R.font.on_ychyuhr),
|
||||
Pair("on_ychyuhl",R.font.on_ychyuhl),
|
||||
Pair("on_treeususimgul_r",R.font.on_treeususimgul_r),
|
||||
Pair("on_treeususimgul",R.font.on_treeususimgul),
|
||||
Pair("on_wibsr",R.font.on_wibsr),
|
||||
Pair("on_wisbl",R.font.on_wisbl),
|
||||
Pair("on_sbsjl",R.font.on_sbsjl),
|
||||
Pair("on_sbsjr",R.font.on_sbsjr),
|
||||
Pair("wandohoper",R.font.wandohoper),
|
||||
Pair("ebs_r",R.font.ebs_r),
|
||||
)
|
||||
|
||||
@JvmName("getIndexAny")
|
||||
|
||||
@ -3,7 +3,6 @@ package com.mime.dualscreenview.common
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import com.mime.dualscreenview.webcontents.contentsinfo.Booktoki
|
||||
import com.mime.dualscreenview.webcontents.contentsinfo.NewtokiOne
|
||||
|
||||
object PrefManager {
|
||||
private val mainName = "Main_Pref_"
|
||||
@ -21,7 +20,7 @@ object PrefManager {
|
||||
}
|
||||
|
||||
fun getLastDomain() : String {
|
||||
return main.getString(domainKey, NewtokiOne.getLastedDoamin()) ?: NewtokiOne.getLastedDoamin()
|
||||
return main.getString(domainKey, Booktoki.getLastedDoamin()) ?: Booktoki.getLastedDoamin()
|
||||
}
|
||||
fun putLastDomain(domain : String) {
|
||||
Blog.LOGE("domain >>> ${domain}")
|
||||
|
||||
@ -61,17 +61,12 @@ object HistoryManager {
|
||||
url = url.replace("//","/").trim()
|
||||
}
|
||||
}
|
||||
Blog.LOGE("aUrl >>> ${aUrl}")
|
||||
Blog.LOGE("aUrl >>> ${aUrl}")
|
||||
var bookPageInfo = this.query(BookPageInfo::class).query("pathUrl == $0 || bookPageUrl == $0","${url}").find()
|
||||
var bookPageInfo = this.query(BookPageInfo::class).query("pathUrl == $0 || bookPageUrl == $1","${url}","${url}").find()
|
||||
if (bookPageInfo != null && bookPageInfo.count() > 0) {
|
||||
Blog.LOGE("get ${bookPageInfo}" )
|
||||
var pgs = this.query(BookPageInfos::class,"bookPageUrl == $0", bookPageInfo.first().bookPageUrl).find()
|
||||
if (pgs.size > 0) {
|
||||
pgs.first().let {
|
||||
Blog.LOGE("get ${it} , ${it?.pages}")
|
||||
callback.invoke(this.copyFromRealm(it))
|
||||
}
|
||||
this.query(BookPageInfos::class,"bookPageUrl == $0",bookPageInfo.first().bookPageUrl).find().first().let {
|
||||
Blog.LOGE("get ${it} , ${it?.pages}" )
|
||||
callback.invoke(this.copyFromRealm(it))
|
||||
}
|
||||
} else {
|
||||
callback.invoke(null)
|
||||
|
||||
@ -286,7 +286,9 @@ class PagedTextLayout : ConstraintLayout , PagedTextGenerateInterface {
|
||||
}
|
||||
|
||||
fun forceUpdateUI() {
|
||||
// mPagedTextViewInterface?.onTouch(TouchArea.Center)
|
||||
hiddenTextView?.doUpdate()
|
||||
// hanler?.postDelayed(touchTimeover, 3000L)
|
||||
}
|
||||
|
||||
override fun setPadding(left: Int, top: Int, right: Int, bottom: Int) {
|
||||
|
||||
@ -162,7 +162,7 @@ class PagedTextView : AppCompatTextView {
|
||||
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
|
||||
super.onSizeChanged(w, h, oldw, oldh)
|
||||
Blog.LOGD(log = "onSizeChanged>> ${this::class.java.name}")
|
||||
pageHeight = ((h - (marginTop + marginBottom + paddingTop + paddingBottom)) * 1f).toInt()
|
||||
pageHeight = ((h - (marginTop + marginBottom + paddingTop + paddingBottom)) * 0.8f).toInt()
|
||||
}
|
||||
|
||||
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
|
||||
@ -190,7 +190,7 @@ class PagedTextView : AppCompatTextView {
|
||||
val layout = from(layout)
|
||||
val lines = if(min(maxLines, layout.lineCount) > 10) {min(maxLines, layout.lineCount) - 1} else {min(maxLines, layout.lineCount)}
|
||||
var startOffset = 0
|
||||
val heightWithoutPaddings = pageHeight //- (marginTop + marginBottom + paddingTop + paddingBottom)
|
||||
val heightWithoutPaddings = pageHeight - (marginTop + marginBottom + paddingTop + paddingBottom)
|
||||
var height = heightWithoutPaddings
|
||||
|
||||
for (i in 0 until lines) {
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
package com.mime.dualscreenview.webcontents
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.AlertDialog
|
||||
import android.graphics.Bitmap
|
||||
import android.net.Uri
|
||||
@ -8,22 +7,15 @@ import android.net.http.SslError
|
||||
import android.util.Log
|
||||
import android.webkit.*
|
||||
import androidx.core.net.toUri
|
||||
import com.google.gson.Gson
|
||||
import com.mime.dualscreenview.common.Blog
|
||||
import com.mime.dualscreenview.common.PrefManager
|
||||
import com.mime.dualscreenview.data.HistoryManager
|
||||
import com.mime.dualscreenview.data.model.BookPageInfo
|
||||
import com.mime.dualscreenview.data.model.BookPageInfos
|
||||
import com.mime.dualscreenview.data.model.LastInfo
|
||||
import com.mime.dualscreenview.webcontents.contentsinfo.Booktoki
|
||||
import com.mime.dualscreenview.webcontents.contentsinfo.DidFindContents
|
||||
import io.realm.kotlin.UpdatePolicy
|
||||
import io.realm.kotlin.ext.realmListOf
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import org.json.JSONObject
|
||||
import org.jsoup.Jsoup
|
||||
import org.jsoup.select.Elements
|
||||
|
||||
|
||||
open class BaseWebContentsViewer {
|
||||
@ -46,7 +38,6 @@ open class BaseWebContentsViewer {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("JavascriptInterface")
|
||||
constructor(webview : WebView, mainControllInterface : MainControllInterface ) {
|
||||
this.webview = webview
|
||||
this.mainControllInterface = mainControllInterface
|
||||
@ -60,10 +51,6 @@ open class BaseWebContentsViewer {
|
||||
webview.settings.setPluginState(WebSettings.PluginState.ON)
|
||||
webview.settings.domStorageEnabled = true
|
||||
webview.clearCache(true);
|
||||
try {
|
||||
webview.removeJavascriptInterface("MyJavaScriptInterface")
|
||||
}catch (e :Exception){e.printStackTrace()}
|
||||
webview.addJavascriptInterface( BookHelper(),"MyJavaScriptInterface")
|
||||
webview.clearHistory();
|
||||
webview.clearSslPreferences();
|
||||
WebView.setWebContentsDebuggingEnabled(true)
|
||||
@ -96,7 +83,7 @@ open class BaseWebContentsViewer {
|
||||
webview.loadUrl(last.pageUrl)
|
||||
} else {
|
||||
try {
|
||||
webview.loadUrl(PrefManager.getLastDomain().plus(last.pageUrl))
|
||||
webview.loadUrl(PrefManager.getLastDomain().plus("/").plus(last.pageUrl))
|
||||
} catch (e : Exception) {
|
||||
webview.loadUrl(PrefManager.getLastDomain())
|
||||
}
|
||||
@ -105,20 +92,21 @@ open class BaseWebContentsViewer {
|
||||
}
|
||||
|
||||
val rootWebViewClient = object : WebViewClient() {
|
||||
// override fun shouldInterceptRequest(
|
||||
// view: WebView?,
|
||||
// request: WebResourceRequest?
|
||||
// ): WebResourceResponse? {
|
||||
// Log.e("shouldInterceptRequest", " >>>> ${request?.url?.toString()} , ${request?.url?.toString()?.contains("gif")}")
|
||||
//
|
||||
// if(request?.url?.toString()?.contains("gif") ?: false) {
|
||||
|
||||
override fun shouldInterceptRequest(
|
||||
view: WebView?,
|
||||
request: WebResourceRequest?
|
||||
): WebResourceResponse? {
|
||||
Log.e("shouldInterceptRequest", " >>>> ${request?.url?.toString()} , ${request?.url?.toString()?.contains("gif")}")
|
||||
|
||||
if(request?.url?.toString()?.contains("gif") ?: false) {
|
||||
return WebResourceResponse("text/javascript", "UTF-8", null);
|
||||
}
|
||||
// if(request?.url?.toString()?.contains(currentContentsProvider?.acccceptResourceKeyword() ?: "") == false && request?.url?.toString()?.contains(currentContentsProvider?.getLastedDoamin() ?: "") == false) {
|
||||
// return WebResourceResponse("text/javascript", "UTF-8", null);
|
||||
// }
|
||||
//// if(request?.url?.toString()?.contains(currentContentsProvider?.acccceptResourceKeyword() ?: "") == false && request?.url?.toString()?.contains(currentContentsProvider?.getLastedDoamin() ?: "") == false) {
|
||||
//// return WebResourceResponse("text/javascript", "UTF-8", null);
|
||||
//// }
|
||||
// return super.shouldInterceptRequest(view, request)
|
||||
// }
|
||||
return super.shouldInterceptRequest(view, request)
|
||||
}
|
||||
|
||||
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
|
||||
super.onPageStarted(view, url, favicon)
|
||||
@ -143,10 +131,8 @@ open class BaseWebContentsViewer {
|
||||
// super.onReceivedHttpError(view, request, errorResponse)
|
||||
}
|
||||
|
||||
|
||||
override fun onPageFinished(view: WebView?, url: String?) {
|
||||
super.onPageFinished(view, url)
|
||||
finishedUrl = url ?: ""
|
||||
view?.let {
|
||||
url?.toUri()?.let {
|
||||
PrefManager.putLastDomain(it.scheme.plus("::/").plus(it.host))
|
||||
@ -157,22 +143,11 @@ open class BaseWebContentsViewer {
|
||||
Blog.LOGE("onPageFinished", url ?: "")
|
||||
}
|
||||
} else if (url?.contains("booktoki") ?: false){
|
||||
// findListItem {
|
||||
// Blog.LOGE("onPageFinished", url ?: "")
|
||||
// }
|
||||
}
|
||||
view?.postDelayed({
|
||||
view?.evaluateJavascript(
|
||||
"function getAll() {\n" +
|
||||
" MyJavaScriptInterface.sendValueFromHtml(document.getElementsByTagName('html')[0].innerHTML)" +
|
||||
" };getAll()"
|
||||
) { result ->
|
||||
(result as? String)?.let {
|
||||
|
||||
}
|
||||
findListItem {
|
||||
Blog.LOGE("onPageFinished", url ?: "")
|
||||
}
|
||||
}, 500L)
|
||||
|
||||
}
|
||||
|
||||
currentContentsProvider?.doOnloaded(it , { result ->
|
||||
result?.let { mainControllInterface.onLoadedContents(it) }
|
||||
} , { complete ->
|
||||
@ -187,71 +162,4 @@ open class BaseWebContentsViewer {
|
||||
}
|
||||
}
|
||||
}
|
||||
var finishedUrl : String = ""
|
||||
inner class BookHelper {
|
||||
@JavascriptInterface
|
||||
fun sendValueFromHtml(string: String) {
|
||||
|
||||
Jsoup.parse(string)?.let { html ->
|
||||
|
||||
val toon_intro = html.getElementsByClass("toon_index")?.first()
|
||||
val view_padding = html.select("#bo_v_con")
|
||||
if (toon_intro != null) {
|
||||
Blog.LOGE("finishedUrl >>> ${finishedUrl} :::: ${html.title()}")
|
||||
val bookPageInfos = BookPageInfos()
|
||||
bookPageInfos.bookPageUrl = Uri.parse(finishedUrl).path
|
||||
bookPageInfos.bookTitle = if (toon_intro.getElementsByTag("h3").size > 0) toon_intro.getElementsByTag("h3").get(0).text() else ""
|
||||
bookPageInfos.pages = realmListOf<BookPageInfo>()
|
||||
|
||||
Blog.LOGE("finishedUrl >>> ${finishedUrl} :::: bookPageInfos >>>> ${Gson().toJson(bookPageInfos)}")
|
||||
val listParent = toon_intro.getElementsByTag("ul").first()
|
||||
if (listParent != null) {
|
||||
listParent.getElementsByTag("li").reversed().forEachIndexed { idx, bookitem ->
|
||||
Blog.LOGE("finishedUrl >>> ${finishedUrl} :::: bookItemInfo ${bookitem.html()}")
|
||||
try {
|
||||
val bookPageInfo = BookPageInfo()
|
||||
bookPageInfo.bookTitle = bookPageInfos.bookTitle
|
||||
bookPageInfo.chapterNum = idx + 1
|
||||
bookPageInfo.chapterID = idx + 1
|
||||
bookPageInfo.chapterTitle = bookitem.getElementsByTag("a").getT()
|
||||
bookPageInfo.bookPageUrl = bookPageInfos.bookPageUrl
|
||||
val href = bookitem.getElementsByTag("a").get(0).attr("href")
|
||||
bookPageInfo.pathUrl = Uri.parse(href).path
|
||||
bookPageInfos.pages.add(bookPageInfo)
|
||||
}catch (nfe : NumberFormatException) {
|
||||
nfe.printStackTrace()
|
||||
}
|
||||
}.apply {
|
||||
|
||||
HistoryManager.openRealm.writeBlocking {
|
||||
copyToRealm(bookPageInfos, UpdatePolicy.ALL)
|
||||
// Blog.LOGE("finishedUrl >>> ${finishedUrl} :::: bookPageInfos saved >>>> ${bookPageInfos.bookPageUrl}")
|
||||
}
|
||||
mainControllInterface.onBookInfos(bookPageInfos)
|
||||
}
|
||||
}
|
||||
}else if (view_padding.size > 0){
|
||||
// Blog.LOGE("finishedUrl >>> ${finishedUrl} :::: ${html.title()}")
|
||||
val contents = StringBuffer()
|
||||
view_padding.get(0).getElementsByTag("P").forEach {
|
||||
it.text().apply {
|
||||
contents.append(this).append("\n")
|
||||
}
|
||||
|
||||
}
|
||||
if (contents.length > 20) {
|
||||
Uri.parse(finishedUrl).path?.let {
|
||||
HistoryManager.getBooPageInfoContentsSave(it, contents.toString())
|
||||
mainControllInterface.onLoadedContents(contents.toString())
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Blog.LOGE("finishedUrl >>> ${finishedUrl} :::: ${html.title()}")
|
||||
// Blog.LOGE("finishedUrl >>> ${finishedUrl} :::: whole body ${html}")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun Elements.getT() = if (size > 0) get(0).text() else ""
|
||||
}
|
||||
@ -1,6 +1,5 @@
|
||||
package com.mime.dualscreenview.webcontents
|
||||
|
||||
import com.mime.dualscreenview.data.model.BookPageInfos
|
||||
import com.mime.dualscreenview.data.model.LastInfo
|
||||
import com.mime.dualscreenview.webcontents.contentsinfo.GotoSomeWhere
|
||||
|
||||
@ -17,6 +16,5 @@ interface MainControllInterface {
|
||||
fun onFindTitle(contents :String)
|
||||
|
||||
fun onBookInfos(jsonString : String)
|
||||
fun onBookInfos(infos : BookPageInfos)
|
||||
|
||||
}
|
||||
@ -2,10 +2,9 @@ package com.mime.dualscreenview.webcontents
|
||||
|
||||
import com.mime.dualscreenview.webcontents.contentsinfo.Agit
|
||||
import com.mime.dualscreenview.webcontents.contentsinfo.Booktoki
|
||||
import com.mime.dualscreenview.webcontents.contentsinfo.NewtokiOne
|
||||
|
||||
object WebContentsManger {
|
||||
val allContentsList : ArrayList<BaseWebContents> = arrayListOf(NewtokiOne)
|
||||
val allContentsList : ArrayList<BaseWebContents> = arrayListOf(Booktoki)
|
||||
|
||||
fun getBaseWebContentsBy(name : String) : BaseWebContents {
|
||||
var correctContents : BaseWebContents = Booktoki
|
||||
|
||||
@ -4,7 +4,7 @@ import com.mime.dualscreenview.webcontents.BaseWebContents
|
||||
|
||||
object Booktoki : BaseWebContents() {
|
||||
|
||||
override var lastNumber : Int = 351
|
||||
override var lastNumber : Int = 350
|
||||
|
||||
override fun getWebcontentsName(): String {
|
||||
return "Booktoki"
|
||||
|
||||
@ -1,95 +0,0 @@
|
||||
package com.mime.dualscreenview.webcontents.contentsinfo
|
||||
|
||||
import com.mime.dualscreenview.webcontents.BaseWebContents
|
||||
|
||||
object NewtokiOne : BaseWebContents() {
|
||||
|
||||
override var lastNumber : Int = 351
|
||||
|
||||
override fun getWebcontentsName(): String {
|
||||
return "newtokione"
|
||||
}
|
||||
|
||||
override fun getLastedDoamin(): String {
|
||||
return "https://newtoki.biz"
|
||||
}
|
||||
|
||||
override fun getContentsList(): String {
|
||||
return "function getList() {\n" +
|
||||
" const contentsArray = [];\n" +
|
||||
" var children = document.getElementsByClassName('list-body')[0].children;\n" +
|
||||
" var maxCount = children.length;\n" +
|
||||
" for (i= 0; i < maxCount; i++) {\n" +
|
||||
" var chapterNum = children[i].getElementsByClassName('wr-num')[0].textContent;\n" +
|
||||
" var pageUrl = children[i].getElementsByClassName('wr-subject')[0].getElementsByTagName('a')[0].href;\n" +
|
||||
" if (pageUrl != null && pageUrl.length > 0 && pageUrl.startsWith(\"http\")) {\n" +
|
||||
" pageUrl = new URL(pageUrl).pathname;\n" +
|
||||
" }\n" +
|
||||
" var chapterTitle = children[i].getElementsByClassName('wr-subject')[0].getElementsByTagName('a')[0].innerText;\n" +
|
||||
" if(chapterTitle.split('\\n').length > 1) {\n" +
|
||||
" chapterTitle = chapterTitle.split('\\n')[1];\n" +
|
||||
" }\n" +
|
||||
"\n" +
|
||||
" var bookPageUrl = location.pathname;\n" +
|
||||
" var bookTitle = document.getElementsByClassName('view-title')[0].getElementsByTagName('span')[0].innerText;\n" +
|
||||
" var data = {\n" +
|
||||
" 'chapterID': Number(chapterNum),\n" +
|
||||
" 'chapterNum': Number(chapterNum),\n" +
|
||||
" 'pathUrl': pageUrl,\n" +
|
||||
" 'bookPageUrl': bookPageUrl,\n" +
|
||||
" 'chapterTitle': chapterTitle,\n" +
|
||||
" 'bookTitle': bookTitle,\n" +
|
||||
" };\n" +
|
||||
" contentsArray.push(\n" +
|
||||
" data\n" +
|
||||
" );\n" +
|
||||
" }\n" +
|
||||
" \n" +
|
||||
" if(contentsArray.length > 0) {\n" +
|
||||
" PAgit.onBookInfo(JSON.stringify({\n" +
|
||||
" 'bookTitle': bookTitle,\n" +
|
||||
" 'bookPageUrl': new URL(location.href).pathname,\n" +
|
||||
" 'pages': contentsArray ,\n" +
|
||||
" }));\n" +
|
||||
" }\n" +
|
||||
"}\n" +
|
||||
"getList()\n" +
|
||||
""
|
||||
}
|
||||
|
||||
override fun acccceptResourceKeyword(): String {
|
||||
return "toki"
|
||||
}
|
||||
|
||||
override fun getNextButtonJs(): String {
|
||||
return "goNextBtn"
|
||||
}
|
||||
|
||||
override fun getPrevButtonJs(): String {
|
||||
return "goPrevBtn"
|
||||
}
|
||||
|
||||
override fun getTitleJs(): String {
|
||||
return "document.getElementsByClassName(\"toon-title\").length > 0 ? document.getElementsByClassName(\"toon-title\")[0].title : null"
|
||||
}
|
||||
|
||||
override fun getFindContentsJs(): String {
|
||||
return "document.getElementById(\"novel_content\") != null ? document.getElementById(\"novel_content\").innerText : null"
|
||||
}
|
||||
|
||||
override fun checkCorrectContents(contents: String): String {
|
||||
return if (contents != null && !contents.isNullOrEmpty()) {
|
||||
contents
|
||||
} else {
|
||||
"fail load"
|
||||
}
|
||||
}
|
||||
// "if(document.getElementsByClassName(\"hd_pops\") != null && document.getElementsByClassName(\"hd_pops\").length > 0) document.getElementsByClassName(\"hd_pops\")[0].remove();" +
|
||||
// "if(document.getElementsByClassName(\"hd_pops\") != null && document.getElementsByClassName(\"hd_pops\").length > 0) document.getElementsByClassName(\"hd_pops\")[0].remove();" +
|
||||
// "if(document.getElementById(\"main-banner-view\") != null) document.getElementById(\"main-banner-view\").remove();" +
|
||||
// "if(document.getElementsByClassName(\"board-tail-banner\") != null && document.getElementsByClassName(\"board-tail-banner\").length > 0)document.getElementsByClassName(\"board-tail-banner\")[0].remove();" +
|
||||
// "if(document.getElementById(\"id_mbv\") != null)document.getElementById(\"id_mbv\").remove();"
|
||||
override fun onLoadedJs(): String {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
|
||||
<corners android:radius="10dp"/>
|
||||
<solid android:color="#44ffffff"/>
|
||||
<stroke android:color="@color/white" android:width="1dp"/>
|
||||
</shape>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:background="@drawable/simple_bg"
|
||||
android:layout_height="wrap_content">
|
||||
<TextView
|
||||
android:layout_gravity="center"
|
||||
android:gravity="left"
|
||||
android:id="@+id/text"
|
||||
android:textColor="@color/black"
|
||||
android:background="@null"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
</FrameLayout>
|
||||
17
app/src/test/java/com/mime/dualscreenview/ExampleUnitTest.kt
Normal file
17
app/src/test/java/com/mime/dualscreenview/ExampleUnitTest.kt
Normal file
@ -0,0 +1,17 @@
|
||||
package com.mime.dualscreenview
|
||||
|
||||
import org.junit.Test
|
||||
|
||||
import org.junit.Assert.*
|
||||
|
||||
/**
|
||||
* Example local unit test, which will execute on the development machine (host).
|
||||
*
|
||||
* See [testing documentation](http://d.android.com/tools/testing).
|
||||
*/
|
||||
class ExampleUnitTest {
|
||||
@Test
|
||||
fun addition_isCorrect() {
|
||||
assertEquals(4, 2 + 2)
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user