This commit is contained in:
lunaticbum 2024-11-27 17:04:51 +09:00
parent 897992f914
commit 33d0a930fd
15 changed files with 221 additions and 49 deletions

View File

@ -44,8 +44,11 @@ import android.support.v4.media.MediaBrowserCompat
import android.telephony.TelephonyManager import android.telephony.TelephonyManager
import android.view.KeyEvent import android.view.KeyEvent
import android.view.KeyEvent.ACTION_UP import android.view.KeyEvent.ACTION_UP
import android.view.KeyEvent.KEYCODE_BUTTON_A
import android.view.KeyEvent.KEYCODE_BUTTON_SELECT import android.view.KeyEvent.KEYCODE_BUTTON_SELECT
import android.view.KeyEvent.KEYCODE_BUTTON_START import android.view.KeyEvent.KEYCODE_BUTTON_START
import android.view.KeyEvent.KEYCODE_BUTTON_X
import android.view.KeyEvent.KEYCODE_BUTTON_Y
import android.view.KeyEvent.KEYCODE_DPAD_DOWN import android.view.KeyEvent.KEYCODE_DPAD_DOWN
import android.view.KeyEvent.KEYCODE_DPAD_LEFT import android.view.KeyEvent.KEYCODE_DPAD_LEFT
import android.view.KeyEvent.KEYCODE_DPAD_RIGHT import android.view.KeyEvent.KEYCODE_DPAD_RIGHT
@ -87,8 +90,11 @@ import bums.lunatic.launcher.home.LauncherHome
import bums.lunatic.launcher.home.RssViewBuilder import bums.lunatic.launcher.home.RssViewBuilder
import bums.lunatic.launcher.home.adapters.RssItemAdapter.Companion.rssList import bums.lunatic.launcher.home.adapters.RssItemAdapter.Companion.rssList
import bums.lunatic.launcher.model.RssData import bums.lunatic.launcher.model.RssData
import bums.lunatic.launcher.model.RssDataType
import bums.lunatic.launcher.receiver.NLService import bums.lunatic.launcher.receiver.NLService
import bums.lunatic.launcher.utils.Blog import bums.lunatic.launcher.utils.Blog
import bums.lunatic.launcher.utils.FeedParseManager
import bums.lunatic.launcher.utils.getJ
import bums.lunatic.launcher.workers.AppInfoGetter import bums.lunatic.launcher.workers.AppInfoGetter
import bums.lunatic.launcher.workers.ArcaGetter import bums.lunatic.launcher.workers.ArcaGetter
import bums.lunatic.launcher.workers.CalendarGetter import bums.lunatic.launcher.workers.CalendarGetter
@ -116,8 +122,12 @@ import bums.lunatic.launcher.workers.YoutubeGetter.Companion.YT_WORK_TAG
import com.google.android.material.color.DynamicColors import com.google.android.material.color.DynamicColors
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import io.realm.kotlin.ext.query import io.realm.kotlin.ext.query
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kr.lunaticbum.utils.ui.DisplayUtil import kr.lunaticbum.utils.ui.DisplayUtil
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Base64
import java.util.Calendar import java.util.Calendar
import java.util.Date import java.util.Date
import java.util.Locale import java.util.Locale
@ -323,26 +333,26 @@ internal class LauncherActivity : CommonActivity() {
override fun dispatchKeyEvent(ev: KeyEvent): Boolean { override fun dispatchKeyEvent(ev: KeyEvent): Boolean {
Blog.LOGE("dispatch ev?.device?.name >>> ${ev?.device?.name}") Blog.LOGE("dispatch ev?.device?.name >>> ${ev?.device?.name}")
if (ev?.device?.name?.contains("SM-031N Mouse") == true) { if (ev?.device?.name?.contains("SM-031N Mouse") == true) {
Blog.LOGE("dispatch dispatchKeyEvent>>> ${ev}")
when(ev.action) { when(ev.action) {
ACTION_UP -> { ACTION_UP -> {
Blog.LOGE("dispatch dispatchKeyEvent>>> ${ev}")
when(ev.keyCode) { when(ev.keyCode) {
KEYCODE_DPAD_LEFT->{ KEYCODE_BUTTON_Y->{
CoroutineScope(Dispatchers.IO).launch {
String(Base64.getMimeDecoder().decode("aHR0cHM6Ly9qYXZtb3N0LnRvL2xhdGVzdC11cGRhdGVzCg==".toByteArray())).getJ().let { doc -> FeedParseManager.parse(doc){Blog.LOGE(it)} }
} }
KEYCODE_DPAD_RIGHT->{ CoroutineScope(Dispatchers.IO).launch {
String.format(String(Base64.getMimeDecoder().decode("aHR0cHM6Ly9qYXZtb3N0LnRvL3NlYXJjaC9tb3ZpZS8lcw==".toByteArray())),"").getJ().let { doc -> FeedParseManager.parse(doc){Blog.LOGE(it)} }
} }
KEYCODE_DPAD_DOWN->{ CoroutineScope(Dispatchers.IO).launch {
String.format(String(Base64.getMimeDecoder().decode("aHR0cHM6Ly9rcjcxLnNvZ2lybC5zby8/cz0lcw==".toByteArray())),"").getJ().let { doc -> FeedParseManager.parse(doc){Blog.LOGE(it)} }
} }
KEYCODE_DPAD_UP->{
} }
KEYCODE_BUTTON_START->{ KEYCODE_BUTTON_X->{
WorkersDb.getRealm().apply { WorkersDb.getRealm().apply {
writeBlocking { writeBlocking {
var ddd = copyFromRealm(WorkersDb.getRssQuery(null, null,false).limit(100).find()).map { it.originPage() } var ddd = copyFromRealm(WorkersDb.getRssQuery("", RssDataType.getAdts(),false).limit(100).find()).map { it.originPage() }
var origin = ddd.first() var origin = ddd.first()
RssViewBuilder(lActivity!!) RssViewBuilder(lActivity!!)
.setRssList(arrayListOf<String>().apply { this.addAll(ddd) }) .setRssList(arrayListOf<String>().apply { this.addAll(ddd) })
@ -352,13 +362,39 @@ internal class LauncherActivity : CommonActivity() {
} }
} }
} }
KEYCODE_BUTTON_A->{
WorkersDb.getRealm().apply {
writeBlocking {
var ddd = copyFromRealm(WorkersDb.getRssQuery("", arrayListOf(),false).limit(100).query("read == $0", 0).query("vote != $0", true).find()).map { it.originPage() }
var origin = ddd.first()
RssViewBuilder(lActivity!!)
.setRssList(arrayListOf<String>().apply { this.addAll(ddd) })
.setRssId(origin)
.showIconClose(true).showIconBack(false).showProgressBar(true).backPressToClose(false).webViewMixedContentMode(1)
.show(origin)
}
}
}
KEYCODE_DPAD_DOWN->{
}
KEYCODE_DPAD_UP->{
}
KEYCODE_BUTTON_START->{
onClickCenterButton()
}
KEYCODE_BUTTON_SELECT->{ KEYCODE_BUTTON_SELECT->{
WorkersDb.getRealm().apply { WorkersDb.getRealm().apply {
writeBlocking { writeBlocking {
var ddd = copyFromRealm(WorkersDb.getVotedRss().limit(100).find()).map { it.originPage() } var ddd = copyFromRealm(WorkersDb.getVotedRss().limit(100).find()).map { it.originPage() }
var origin = ddd.first() var origin = ddd.first()
RssViewBuilder(lActivity!!) RssViewBuilder(lActivity!!)
.setRssList(arrayListOf<String>().apply { this.addAll(ddd) }) .setRssList(arrayListOf<String>().apply {
var jjjj = hashSetOf<String>()
jjjj.addAll(ddd)
this.addAll(jjjj)}
)
.setRssId(origin) .setRssId(origin)
.showIconClose(true).showIconBack(false).showProgressBar(true).backPressToClose(false).webViewMixedContentMode(1) .showIconClose(true).showIconBack(false).showProgressBar(true).backPressToClose(false).webViewMixedContentMode(1)
.show(origin) .show(origin)
@ -374,6 +410,24 @@ internal class LauncherActivity : CommonActivity() {
} }
return super.dispatchKeyEvent(ev) return super.dispatchKeyEvent(ev)
} }
fun onClickCenterButton() {
WorkersDb.getRealm().apply {
writeBlocking {
var ddd = copyFromRealm(WorkersDb.getRssQuery("", RssDataType.getExcAdt(),false).limit(100).query("read == $0", 0).query("vote != $0", true).find()).map { it.originPage() }
var origin = ddd.first()
RssViewBuilder(lActivity!!)
.setRssList(arrayListOf<String>().apply {
var jjjj = hashSetOf<String>()
jjjj.addAll(ddd)
this.addAll(jjjj) })
.setRssId(origin)
.showIconClose(true).showIconBack(false).showProgressBar(true).backPressToClose(false).webViewMixedContentMode(1)
.show(origin)
}
}
}
override fun dispatchGenericMotionEvent(ev: MotionEvent?): Boolean { override fun dispatchGenericMotionEvent(ev: MotionEvent?): Boolean {
// Blog.LOGE("dispatchKeyEvent ev?.device?.name >>> ${ev?.device?.name}") // Blog.LOGE("dispatchKeyEvent ev?.device?.name >>> ${ev?.device?.name}")
/// || ev?.device?.name?.contains("SM-031N Mouse") == true /// || ev?.device?.name?.contains("SM-031N Mouse") == true
@ -409,17 +463,7 @@ internal class LauncherActivity : CommonActivity() {
Blog.LOGE("DisplayUtil.width >>> ${DisplayUtil.height} ${actionButtonPressY}") Blog.LOGE("DisplayUtil.width >>> ${DisplayUtil.height} ${actionButtonPressY}")
if(actionButtonPressX.toInt() == 480 && actionButtonPressY < 2000) { if(actionButtonPressX.toInt() == 480 && actionButtonPressY < 2000) {
Blog.LOGE("Arrow Center Click") Blog.LOGE("Arrow Center Click")
WorkersDb.getRealm().apply { onClickCenterButton()
writeBlocking {
var ddd = copyFromRealm(WorkersDb.getRssQuery("", arrayListOf(),false).find()).map { it.originPage() }
var origin = ddd.first()
RssViewBuilder(lActivity!!)
.setRssList(arrayListOf<String>().apply { this.addAll(ddd) })
.setRssId(origin)
.showIconClose(true).showIconBack(false).showProgressBar(true).backPressToClose(false).webViewMixedContentMode(1)
.show(origin)
}
}
} else if(ev.y > 2000) { } else if(ev.y > 2000) {
} }

View File

@ -3,6 +3,7 @@ package bums.lunatic.launcher.common
import android.content.Intent import android.content.Intent
import android.os.Environment import android.os.Environment
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ComponentActivity
import bums.lunatic.launcher.R import bums.lunatic.launcher.R
import bums.lunatic.launcher.apps.SearchMenu import bums.lunatic.launcher.apps.SearchMenu
import bums.lunatic.launcher.helpers.PrefBoolean import bums.lunatic.launcher.helpers.PrefBoolean

View File

@ -391,6 +391,18 @@ internal class LauncherHome : Fragment() {
it.notifyDataSetChanged() it.notifyDataSetChanged()
} }
mWeatherAdapter?.let { mWeatherAdapter?.let {
fun onclick() {
requireContext().startActivity(Intent().apply {
action = Intent.ACTION_VIEW
setData(Uri.parse("https://www.accuweather.com/ko/search-locations?query=${LocationGetter.latitude},${LocationGetter.longitude}"))
})
}
binding.weathers.weatherViewPager.setOnTouchListener { v, event ->
onclick()
true
}
binding.weathers.weatherViewPager.setOnClickListener { onclick() }
binding.weathers.root.setOnClickListener { onclick() }
binding.weathers.textLocation = binding.weathers.textLocation =
if (hours.isNotEmpty()) WeatherInfoManager.getShowingInfo(hours.first()).textLocation else "도시 / 나라" if (hours.isNotEmpty()) WeatherInfoManager.getShowingInfo(hours.first()).textLocation else "도시 / 나라"
it.notifyDataSetChanged() it.notifyDataSetChanged()

View File

@ -211,7 +211,7 @@ class RssViewerActivity : AwesomeWebViewActivity(), View.OnGenericMotionListene
fun rightClick() { fun rightClick() {
if (currentIdx < rssList.size - 1) { if (currentIdx < rssList.size - 1) {
currentIdx += 1 currentIdx += 1
rssId = rssList.get(currentIdx) rssId = rssList.removeAt(currentIdx)
Blog.LOGE("Arrow Right Click ${currentIdx} ${rssId}") Blog.LOGE("Arrow Right Click ${currentIdx} ${rssId}")
load(rssId) load(rssId)
registCancelSearch() registCancelSearch()
@ -224,7 +224,7 @@ class RssViewerActivity : AwesomeWebViewActivity(), View.OnGenericMotionListene
fun leftClick() { fun leftClick() {
if (currentIdx > 0) { if (currentIdx > 0) {
currentIdx -= 1 currentIdx -= 1
rssId = rssList.get(currentIdx) rssId = rssList.removeAt(currentIdx)
Blog.LOGE("Arrow Left Click ${currentIdx} ${rssId}") Blog.LOGE("Arrow Left Click ${currentIdx} ${rssId}")
load(rssId) load(rssId)
registCancelSearch() registCancelSearch()
@ -315,6 +315,18 @@ class RssViewerActivity : AwesomeWebViewActivity(), View.OnGenericMotionListene
registCancelSearch() registCancelSearch()
} }
protected fun load(newUrl: String) { protected fun load(newUrl: String) {
newUrl.toUri().host?.let {
val splits = it.replace("http://","").replace("https://","").split(".")
when(splits.size) {
1-> host = splits[0]
2-> host = splits[0]
3-> host = splits[1]
4-> host = splits[2]
else -> {
host = null
}
}
}
if (extraHeaders == null) { if (extraHeaders == null) {
webView!!.loadUrl(newUrl!!) webView!!.loadUrl(newUrl!!)
} else { } else {
@ -340,6 +352,9 @@ class RssViewerActivity : AwesomeWebViewActivity(), View.OnGenericMotionListene
} }
override fun webviewOnPageFinished() { override fun webviewOnPageFinished() {
double = false double = false
if(hasYoutubePlayer) {
LogUtil.e("hasYoutubePlayer >>> ${hasYoutubePlayer}")
}
WorkersDb.getRealm().apply { WorkersDb.getRealm().apply {
writeBlocking { writeBlocking {
val result = val result =
@ -347,6 +362,8 @@ class RssViewerActivity : AwesomeWebViewActivity(), View.OnGenericMotionListene
.find() .find()
if (result.size == 1) { if (result.size == 1) {
result.first().read += 1 result.first().read += 1
} else {
result.forEach { it.read += 1 }
} }
} }
} }

View File

@ -119,7 +119,7 @@ object RssFeedsParser {
if (date > limitDateTime && title != null && link != null) { if (date > limitDateTime && title != null && link != null) {
Blog.LOGE("date ${date} title ${title} link ${link}") // Blog.LOGE("date ${date} title ${title} link ${link}")
val item = NewsData(title, link) val item = NewsData(title, link)
item.pubDate = date item.pubDate = date
item.source = source item.source = source

View File

@ -94,7 +94,11 @@ internal class RssItemAdapter (
openReddit(rss.originPage()) openReddit(rss.originPage())
} else { } else {
RssViewBuilder(lActivity!!) RssViewBuilder(lActivity!!)
.setRssList(rssList) .setRssList(arrayListOf<String>().apply {
var jjjj = hashSetOf<String>()
jjjj.addAll(rssList)
this.addAll(jjjj)
})
.setRssId(rss.originPage()) .setRssId(rss.originPage())
.showIconClose(true).showIconBack(false).showProgressBar(true).backPressToClose(false).webViewMixedContentMode(1) .showIconClose(true).showIconBack(false).showProgressBar(true).backPressToClose(false).webViewMixedContentMode(1)
.show(rss.originPage!!) .show(rss.originPage!!)
@ -107,7 +111,11 @@ internal class RssItemAdapter (
} }
RssDataType.DOTAX -> { RssDataType.DOTAX -> {
RssViewBuilder(lActivity!!) RssViewBuilder(lActivity!!)
.setRssList(rssList) .setRssList(arrayListOf<String>().apply {
var jjjj = hashSetOf<String>()
jjjj.addAll(rssList)
this.addAll(jjjj)
})
.setRssId(rss.originPage()) .setRssId(rss.originPage())
.showIconClose(true).showIconBack(false).showProgressBar(true).webViewMixedContentMode(0) .showIconClose(true).showIconBack(false).showProgressBar(true).webViewMixedContentMode(0)
.show(rss.originPage!!) .show(rss.originPage!!)
@ -119,7 +127,11 @@ internal class RssItemAdapter (
} }
else -> { else -> {
RssViewBuilder(lActivity!!) RssViewBuilder(lActivity!!)
.setRssList(rssList) .setRssList(arrayListOf<String>().apply {
var jjjj = hashSetOf<String>()
jjjj.addAll(rssList)
this.addAll(jjjj)
})
.setRssId(rss.originPage()) .setRssId(rss.originPage())
.showIconClose(true).showIconBack(false).showProgressBar(true).webViewMixedContentMode(0) .showIconClose(true).showIconBack(false).showProgressBar(true).webViewMixedContentMode(0)
.show(rss.originPage!!) .show(rss.originPage!!)

View File

@ -40,6 +40,7 @@ class NewsData : RssDataInterface {
return RssDataType.NEWSFEED return RssDataType.NEWSFEED
} }
override fun getCho(): String? { override fun getCho(): String? {
return JamoUtils.split(title()).joinToString("") var cho = JamoUtils.split(title()).joinToString("")
return if(cho.length > 0 ) cho else title()
} }
} }

View File

@ -50,6 +50,10 @@ enum class RssDataType {
} }
} }
companion object {
fun getExcAdt() = arrayListOf(NEWSFEED, REDDIT, DOTAX, FMKORAE, DCINSIDE, RULIWEB, CLIEN, THEQOO, ARCA).map { it.name }
fun getAdts() = arrayListOf( REDDIT_NSFW, MOST,GURU).map { it.name }
}
} }
interface RssDataInterface { interface RssDataInterface {

View File

@ -198,7 +198,7 @@ object WorkersDb {
fun getVotedRss() = getRealm().query<RssData>().query("vote == $0", true) fun getVotedRss() = getRealm().query<RssData>().query("vote == $0", true)
fun getRssQuery(keyword: String?, fun getRssQuery(keyword: String?,
category: ArrayList<String>? = arrayListOf(), category: Collection<String>? = arrayListOf(),
noLimit: Boolean = false) : RealmQuery<RssData>{ noLimit: Boolean = false) : RealmQuery<RssData>{
var rQ = getRealm().query<RssData>() var rQ = getRealm().query<RssData>()
if (!noLimit) rQ.query("pubDate > $0", beforeDay(Date(), 3)) if (!noLimit) rQ.query("pubDate > $0", beforeDay(Date(), 3))

View File

@ -59,6 +59,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/textDress" android:id="@+id/textDress"
android:maxLines="2"
style="@style/small" style="@style/small"
android:text="@{info.textCondition}" android:text="@{info.textCondition}"
android:gravity="center" android:gravity="center"

View File

@ -58,6 +58,7 @@
android:includeFontPadding="false" android:includeFontPadding="false"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:maxWidth="80dp"
android:id="@+id/textDress" android:id="@+id/textDress"
style="@style/small" style="@style/small"
android:text="@{info.textCondition}" android:text="@{info.textCondition}"

View File

@ -35,6 +35,8 @@ android {
} }
dependencies { dependencies {
implementation( "com.github.bumptech.glide:glide:4.11.0")
annotationProcessor ("com.github.bumptech.glide:compiler:4.11.0")
// implementation fileTree(dir: 'libs', include: ['*.jar']) // implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation ("androidx.annotation:annotation:1.9.1") implementation ("androidx.annotation:annotation:1.9.1")
implementation ("androidx.appcompat:appcompat:1.7.0") implementation ("androidx.appcompat:appcompat:1.7.0")

View File

@ -1,6 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application> <application
android:usesCleartextTraffic="true">
<provider <provider
android:name="kr.lunaticbum.awesomewebview.helpers.FileProvider4WebView" android:name="kr.lunaticbum.awesomewebview.helpers.FileProvider4WebView"
android:authorities="${applicationId}.awesome_web_view.file_provider" android:authorities="${applicationId}.awesome_web_view.file_provider"

View File

@ -63,6 +63,8 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import androidx.core.net.toUri import androidx.core.net.toUri
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import kr.lunaticbum.awesomewebview.databinding.AwesomeWebViewBinding import kr.lunaticbum.awesomewebview.databinding.AwesomeWebViewBinding
import kr.lunaticbum.awesomewebview.enums.Position import kr.lunaticbum.awesomewebview.enums.Position
@ -86,11 +88,14 @@ import kr.lunaticbum.utils.service.ClipboardManagerUtil
import kr.lunaticbum.utils.ui.DisplayUtil import kr.lunaticbum.utils.ui.DisplayUtil
import kr.lunaticbum.utils.ui.ViewUtil import kr.lunaticbum.utils.ui.ViewUtil
import java.io.ByteArrayInputStream import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.io.File import java.io.File
import java.io.IOException import java.io.IOException
import java.io.InputStream
import java.net.URL import java.net.URL
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Date import java.util.Date
import java.util.Locale
import kotlin.math.abs import kotlin.math.abs
@ -564,7 +569,11 @@ open class AwesomeWebViewActivity : AppCompatActivity(), View.OnClickListener,
val chechHandler = Handler(Looper.getMainLooper()) val chechHandler = Handler(Looper.getMainLooper())
val cancelSearch = Runnable { val cancelSearch = Runnable {
if(!hasYoutubePlayer) {
finish() finish()
} else {
registCancelSearch()
}
} }
fun fast() { fun fast() {
@ -1305,9 +1314,6 @@ open class AwesomeWebViewActivity : AppCompatActivity(), View.OnClickListener,
if (data != null) { if (data != null) {
webView!!.loadData(data!!, mimeType, encoding) webView!!.loadData(data!!, mimeType, encoding)
} else if (url != null) { } else if (url != null) {
// host = url!!.toUri().host?.replace("www.","")?.replace("m.","")
LogUtil.e("url!!.toUri(). >> ${url!!.toUri().authority}")
LogUtil.e("url!!.toUri(). >> ${url!!.toUri().encodedFragment}")
if (extraHeaders == null) { if (extraHeaders == null) {
webView!!.loadUrl(url!!) webView!!.loadUrl(url!!)
} else { } else {
@ -1390,8 +1396,9 @@ LogUtil.e("url!!.toUri(). >> ${url!!.toUri().authority}")
@SuppressLint("MissingSuperCall")
override fun onBackPressed() { override fun onBackPressed() {
LogUtil.e("onBackPressed ${webChromeClient} && ${binding.menus.menuLayout.visibility}") LogUtil.e("onBackPressed ${webChromeClient} && ${binding.menus.menuLayout.visibility}")
if (webChromeClient is MyWebChromeClient && (webChromeClient as MyWebChromeClient).onBackPressed()) { if (webChromeClient is MyWebChromeClient && (webChromeClient as MyWebChromeClient).onBackPressed()) {
return return
} }
@ -1833,27 +1840,75 @@ LogUtil.e("onBackPressed ${webChromeClient} && ${binding.menus.menuLayout.visibi
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
return File.createTempFile(new_name, if (isVideo) ".mp4" else ".jpg", sd_directory) return File.createTempFile(new_name, if (isVideo) ".mp4" else ".jpg", sd_directory)
} }
var hasYoutubePlayer = false
open fun webviewOnPageFinished(){} open fun webviewOnPageFinished(){}
inner class MyWebViewClient : WebViewClient() { inner class MyWebViewClient : WebViewClient() {
override fun shouldInterceptRequest( override fun shouldInterceptRequest(
view: WebView, view: WebView,
request: WebResourceRequest request: WebResourceRequest
): WebResourceResponse? { ): WebResourceResponse? {
// LogUtil.e("shouldInterceptRequest request >>> ${request.url.toString()}") var skipResource =
if (request.url.toString().contains("gif") && request.url.toString().contains("sogirl")) { (host != null) && ((request.url?.host?.contains(host!!) ?: true) == false)
if (skipResource && request.url.toString().contains("gif")) {
LogUtil.e("shouldInterceptRequest request block gif resource >>> ${request.url.toString()}")
return WebResourceResponse( return WebResourceResponse(
"text/plain", "utf-8", "text/plain", "utf-8",
ByteArrayInputStream("".toByteArray()) ByteArrayInputStream("".toByteArray())
) )
} }
return super.shouldInterceptRequest(view, request) val url = request.url.toString()
if(!hasYoutubePlayer) {
hasYoutubePlayer = url.toLowerCase(Locale.ROOT)
.contains("https://www.youtube.com/s/player".toLowerCase(Locale.ROOT))
}
if (url.toLowerCase(Locale.ROOT)
.contains("ads".toLowerCase(Locale.ROOT))) {
LogUtil.e("shouldInterceptRequest request url contains ads >>> ${request.url.toString()}")
}
var adblockKeyWords = arrayOf("adcr.naver.com","daumcdn.net/biz/ui/ad/adcm","imgad","ad.daum.net","cr.adsappier.com","ar-adview","adtrafficquality","criteo","adlib.nhnace.com","google.com/ads","googleads.","/pagead","/adpost/","ads/search")
val adblock = adblockKeyWords.filter { url.toLowerCase(Locale.ROOT).contains(it.toLowerCase(Locale.ROOT)) }.size > 0
return if(adblock) {
try {
LogUtil.e("shouldInterceptRequest request block adblockKeyWords resource >>> ${request.url.toString()}")
WebResourceResponse("text/plain", "utf-8", ByteArrayInputStream("".toByteArray()))
} catch (e : Exception) {
super.shouldInterceptRequest(view, url)
}
}else if(url.toLowerCase(Locale.ROOT).contains(".jpg") || url.toLowerCase(Locale.ROOT).contains(".jpeg")){
try {
val bitmap = Glide.with(this@AwesomeWebViewActivity).asBitmap().timeout(30000).diskCacheStrategy(DiskCacheStrategy.ALL).load(url).submit().get()
WebResourceResponse("image/jpg", "UTF-8",getBitmapInputStream(bitmap,Bitmap.CompressFormat.JPEG))
} catch (e : Exception) {
super.shouldInterceptRequest(view, url)
}
}else if(url.toLowerCase(Locale.ROOT).contains(".png")){
try {
val bitmap = Glide.with(this@AwesomeWebViewActivity).asBitmap().timeout(30000).diskCacheStrategy(DiskCacheStrategy.ALL).load(url).submit().get()
WebResourceResponse("image/png", "UTF-8",getBitmapInputStream(bitmap,Bitmap.CompressFormat.PNG))
} catch (e : Exception) {
super.shouldInterceptRequest(view, url)
}
}else if(url.toLowerCase(Locale.ROOT).contains(".webp")){
try {
val bitmap = Glide.with(this@AwesomeWebViewActivity).asBitmap().timeout(30000).diskCacheStrategy(DiskCacheStrategy.ALL).load(url).submit().get()
WebResourceResponse("image/webp", "UTF-8",getBitmapInputStream(bitmap,Bitmap.CompressFormat.WEBP))
} catch (e : Exception) {
super.shouldInterceptRequest(view, url)
}
}else{
super.shouldInterceptRequest(view, url)
}
}
private fun getBitmapInputStream(bitmap: Bitmap, compressFormat: Bitmap.CompressFormat): InputStream {
val byteArrayOutputStream = ByteArrayOutputStream()
bitmap.compress(compressFormat, 80, byteArrayOutputStream)
val bitmapData: ByteArray = byteArrayOutputStream.toByteArray()
return ByteArrayInputStream(bitmapData)
} }
// override fun shouldInterceptRequest(view: WebView, url: String): WebResourceResponse? { // override fun shouldInterceptRequest(view: WebView, url: String): WebResourceResponse? {
// LogUtil.e("shouldInterceptRequest String >>> $url")
// if (url.contains("gif")) {
// return null
// }
// return super.shouldInterceptRequest(view, url) // return super.shouldInterceptRequest(view, url)
// } // }
@ -1862,6 +1917,19 @@ LogUtil.e("onBackPressed ${webChromeClient} && ${binding.menus.menuLayout.visibi
if (!url.contains("docs.google.com") && url.endsWith(".pdf")) { if (!url.contains("docs.google.com") && url.endsWith(".pdf")) {
webView!!.loadUrl("http://docs.google.com/gview?embedded=true&url=$url") webView!!.loadUrl("http://docs.google.com/gview?embedded=true&url=$url")
} }
url.toUri().host?.let {
val splits = it.replace("http://","").replace("https://","").split(".")
when(splits.size) {
1-> host = splits[0]
2-> host = splits[0]
3-> host = splits[1]
4-> host = splits[2]
else -> {
host = null
}
}
}
hasYoutubePlayer = false
} }
override fun onPageFinished(view: WebView, url: String) { override fun onPageFinished(view: WebView, url: String) {
@ -1899,7 +1967,12 @@ LogUtil.e("onBackPressed ${webChromeClient} && ${binding.menus.menuLayout.visibi
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
handler.sendEmptyMessage(MSG_CLICK_ON_URL) handler.sendEmptyMessage(MSG_CLICK_ON_URL)
// LogUtil.e("host >>> ${host} , url >>> ${url}")
var skipResource = host!= null && ((url.contains(host!!) ?: true) == false) && (host!!.contains("google") == false)
if (skipResource) {
LogUtil.e("shouldOverrideUrlLoading block url $url , host >>>> $host ")
return true
}
if (url.contains("coupang") == false && url.contains("aliex") == false) { if (url.contains("coupang") == false && url.contains("aliex") == false) {
if (url.endsWith(".mp4")) { if (url.endsWith(".mp4")) {
val intent = Intent(Intent.ACTION_VIEW) val intent = Intent(Intent.ACTION_VIEW)

View File

@ -10,7 +10,10 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/finestWhite"> android:background="@color/finestWhite">
<ImageView
android:id="@+id/dummy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<FrameLayout <FrameLayout
android:id="@+id/webLayout" android:id="@+id/webLayout"
android:layout_width="match_parent" android:layout_width="match_parent"