From 33d0a930fddafc2af01e26c5a0fd61e11d0f5086 Mon Sep 17 00:00:00 2001 From: lunaticbum Date: Wed, 27 Nov 2024 17:04:51 +0900 Subject: [PATCH] ... --- .../bums/lunatic/launcher/LauncherActivity.kt | 96 +++++++++++++----- .../lunatic/launcher/common/CommonActivity.kt | 1 + .../lunatic/launcher/home/LauncherHome.kt | 12 +++ .../launcher/home/RssViewerActivity.kt | 21 +++- .../launcher/home/adapters/RssFeedsParser.kt | 2 +- .../launcher/home/adapters/RssItemAdapter.kt | 18 +++- .../bums/lunatic/launcher/model/NewsData.kt | 3 +- .../launcher/model/RssDataInterface.kt | 4 + .../lunatic/launcher/workers/WorkersDb.kt | 2 +- .../main/res/layout/item_hourly_weather.xml | 1 + .../main/res/layout/item_rec_hourly_dress.xml | 1 + library/build.gradle.kts | 2 + library/src/main/AndroidManifest.xml | 3 +- .../awesomewebview/AwesomeWebViewActivity.kt | 99 ++++++++++++++++--- .../src/main/res/layout/awesome_web_view.xml | 5 +- 15 files changed, 221 insertions(+), 49 deletions(-) diff --git a/app/src/main/kotlin/bums/lunatic/launcher/LauncherActivity.kt b/app/src/main/kotlin/bums/lunatic/launcher/LauncherActivity.kt index 1f43f17..20570b9 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/LauncherActivity.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/LauncherActivity.kt @@ -44,8 +44,11 @@ import android.support.v4.media.MediaBrowserCompat import android.telephony.TelephonyManager import android.view.KeyEvent 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_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_LEFT 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.adapters.RssItemAdapter.Companion.rssList import bums.lunatic.launcher.model.RssData +import bums.lunatic.launcher.model.RssDataType import bums.lunatic.launcher.receiver.NLService 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.ArcaGetter 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.dialog.MaterialAlertDialogBuilder 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 java.text.SimpleDateFormat +import java.util.Base64 import java.util.Calendar import java.util.Date import java.util.Locale @@ -323,26 +333,26 @@ internal class LauncherActivity : CommonActivity() { override fun dispatchKeyEvent(ev: KeyEvent): Boolean { Blog.LOGE("dispatch ev?.device?.name >>> ${ev?.device?.name}") if (ev?.device?.name?.contains("SM-031N Mouse") == true) { - Blog.LOGE("dispatch dispatchKeyEvent>>> ${ev}") + when(ev.action) { ACTION_UP -> { + Blog.LOGE("dispatch dispatchKeyEvent>>> ${ev}") 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)} } + } + CoroutineScope(Dispatchers.IO).launch { + String.format(String(Base64.getMimeDecoder().decode("aHR0cHM6Ly9qYXZtb3N0LnRvL3NlYXJjaC9tb3ZpZS8lcw==".toByteArray())),"").getJ().let { doc -> FeedParseManager.parse(doc){Blog.LOGE(it)} } + } + CoroutineScope(Dispatchers.IO).launch { + String.format(String(Base64.getMimeDecoder().decode("aHR0cHM6Ly9rcjcxLnNvZ2lybC5zby8/cz0lcw==".toByteArray())),"").getJ().let { doc -> FeedParseManager.parse(doc){Blog.LOGE(it)} } + } } - KEYCODE_DPAD_RIGHT->{ - - } - KEYCODE_DPAD_DOWN->{ - - } - KEYCODE_DPAD_UP->{ - - } - KEYCODE_BUTTON_START->{ + KEYCODE_BUTTON_X->{ WorkersDb.getRealm().apply { 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() RssViewBuilder(lActivity!!) .setRssList(arrayListOf().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().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->{ WorkersDb.getRealm().apply { writeBlocking { var ddd = copyFromRealm(WorkersDb.getVotedRss().limit(100).find()).map { it.originPage() } var origin = ddd.first() RssViewBuilder(lActivity!!) - .setRssList(arrayListOf().apply { this.addAll(ddd) }) + .setRssList(arrayListOf().apply { + var jjjj = hashSetOf() + jjjj.addAll(ddd) + this.addAll(jjjj)} + ) .setRssId(origin) .showIconClose(true).showIconBack(false).showProgressBar(true).backPressToClose(false).webViewMixedContentMode(1) .show(origin) @@ -374,6 +410,24 @@ internal class LauncherActivity : CommonActivity() { } 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().apply { + var jjjj = hashSetOf() + 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 { // Blog.LOGE("dispatchKeyEvent ev?.device?.name >>> ${ev?.device?.name}") /// || ev?.device?.name?.contains("SM-031N Mouse") == true @@ -409,17 +463,7 @@ internal class LauncherActivity : CommonActivity() { Blog.LOGE("DisplayUtil.width >>> ${DisplayUtil.height} ${actionButtonPressY}") if(actionButtonPressX.toInt() == 480 && actionButtonPressY < 2000) { Blog.LOGE("Arrow Center Click") - WorkersDb.getRealm().apply { - writeBlocking { - var ddd = copyFromRealm(WorkersDb.getRssQuery("", arrayListOf(),false).find()).map { it.originPage() } - var origin = ddd.first() - RssViewBuilder(lActivity!!) - .setRssList(arrayListOf().apply { this.addAll(ddd) }) - .setRssId(origin) - .showIconClose(true).showIconBack(false).showProgressBar(true).backPressToClose(false).webViewMixedContentMode(1) - .show(origin) - } - } + onClickCenterButton() } else if(ev.y > 2000) { } diff --git a/app/src/main/kotlin/bums/lunatic/launcher/common/CommonActivity.kt b/app/src/main/kotlin/bums/lunatic/launcher/common/CommonActivity.kt index ec23f4b..acb60ea 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/common/CommonActivity.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/common/CommonActivity.kt @@ -3,6 +3,7 @@ package bums.lunatic.launcher.common import android.content.Intent import android.os.Environment import androidx.appcompat.app.AppCompatActivity +import androidx.core.app.ComponentActivity import bums.lunatic.launcher.R import bums.lunatic.launcher.apps.SearchMenu import bums.lunatic.launcher.helpers.PrefBoolean diff --git a/app/src/main/kotlin/bums/lunatic/launcher/home/LauncherHome.kt b/app/src/main/kotlin/bums/lunatic/launcher/home/LauncherHome.kt index 8796142..4e6bb21 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/home/LauncherHome.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/home/LauncherHome.kt @@ -391,6 +391,18 @@ internal class LauncherHome : Fragment() { it.notifyDataSetChanged() } 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 = if (hours.isNotEmpty()) WeatherInfoManager.getShowingInfo(hours.first()).textLocation else "도시 / 나라" it.notifyDataSetChanged() diff --git a/app/src/main/kotlin/bums/lunatic/launcher/home/RssViewerActivity.kt b/app/src/main/kotlin/bums/lunatic/launcher/home/RssViewerActivity.kt index 2e1fdef..3fcd9cf 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/home/RssViewerActivity.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/home/RssViewerActivity.kt @@ -211,7 +211,7 @@ class RssViewerActivity : AwesomeWebViewActivity(), View.OnGenericMotionListene fun rightClick() { if (currentIdx < rssList.size - 1) { currentIdx += 1 - rssId = rssList.get(currentIdx) + rssId = rssList.removeAt(currentIdx) Blog.LOGE("Arrow Right Click ${currentIdx} ${rssId}") load(rssId) registCancelSearch() @@ -224,7 +224,7 @@ class RssViewerActivity : AwesomeWebViewActivity(), View.OnGenericMotionListene fun leftClick() { if (currentIdx > 0) { currentIdx -= 1 - rssId = rssList.get(currentIdx) + rssId = rssList.removeAt(currentIdx) Blog.LOGE("Arrow Left Click ${currentIdx} ${rssId}") load(rssId) registCancelSearch() @@ -315,6 +315,18 @@ class RssViewerActivity : AwesomeWebViewActivity(), View.OnGenericMotionListene registCancelSearch() } 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) { webView!!.loadUrl(newUrl!!) } else { @@ -340,6 +352,9 @@ class RssViewerActivity : AwesomeWebViewActivity(), View.OnGenericMotionListene } override fun webviewOnPageFinished() { double = false + if(hasYoutubePlayer) { + LogUtil.e("hasYoutubePlayer >>> ${hasYoutubePlayer}") + } WorkersDb.getRealm().apply { writeBlocking { val result = @@ -347,6 +362,8 @@ class RssViewerActivity : AwesomeWebViewActivity(), View.OnGenericMotionListene .find() if (result.size == 1) { result.first().read += 1 + } else { + result.forEach { it.read += 1 } } } } diff --git a/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/RssFeedsParser.kt b/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/RssFeedsParser.kt index d58cad6..b3243f7 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/RssFeedsParser.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/RssFeedsParser.kt @@ -119,7 +119,7 @@ object RssFeedsParser { 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) item.pubDate = date item.source = source diff --git a/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/RssItemAdapter.kt b/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/RssItemAdapter.kt index 57191e3..54c8a89 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/RssItemAdapter.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/home/adapters/RssItemAdapter.kt @@ -94,7 +94,11 @@ internal class RssItemAdapter ( openReddit(rss.originPage()) } else { RssViewBuilder(lActivity!!) - .setRssList(rssList) + .setRssList(arrayListOf().apply { + var jjjj = hashSetOf() + jjjj.addAll(rssList) + this.addAll(jjjj) + }) .setRssId(rss.originPage()) .showIconClose(true).showIconBack(false).showProgressBar(true).backPressToClose(false).webViewMixedContentMode(1) .show(rss.originPage!!) @@ -107,7 +111,11 @@ internal class RssItemAdapter ( } RssDataType.DOTAX -> { RssViewBuilder(lActivity!!) - .setRssList(rssList) + .setRssList(arrayListOf().apply { + var jjjj = hashSetOf() + jjjj.addAll(rssList) + this.addAll(jjjj) + }) .setRssId(rss.originPage()) .showIconClose(true).showIconBack(false).showProgressBar(true).webViewMixedContentMode(0) .show(rss.originPage!!) @@ -119,7 +127,11 @@ internal class RssItemAdapter ( } else -> { RssViewBuilder(lActivity!!) - .setRssList(rssList) + .setRssList(arrayListOf().apply { + var jjjj = hashSetOf() + jjjj.addAll(rssList) + this.addAll(jjjj) + }) .setRssId(rss.originPage()) .showIconClose(true).showIconBack(false).showProgressBar(true).webViewMixedContentMode(0) .show(rss.originPage!!) diff --git a/app/src/main/kotlin/bums/lunatic/launcher/model/NewsData.kt b/app/src/main/kotlin/bums/lunatic/launcher/model/NewsData.kt index 1bba3a3..d2fa89c 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/model/NewsData.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/model/NewsData.kt @@ -40,6 +40,7 @@ class NewsData : RssDataInterface { return RssDataType.NEWSFEED } override fun getCho(): String? { - return JamoUtils.split(title()).joinToString("") + var cho = JamoUtils.split(title()).joinToString("") + return if(cho.length > 0 ) cho else title() } } \ No newline at end of file diff --git a/app/src/main/kotlin/bums/lunatic/launcher/model/RssDataInterface.kt b/app/src/main/kotlin/bums/lunatic/launcher/model/RssDataInterface.kt index 77864aa..a432706 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/model/RssDataInterface.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/model/RssDataInterface.kt @@ -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 { diff --git a/app/src/main/kotlin/bums/lunatic/launcher/workers/WorkersDb.kt b/app/src/main/kotlin/bums/lunatic/launcher/workers/WorkersDb.kt index 2acf52c..2637819 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/workers/WorkersDb.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/workers/WorkersDb.kt @@ -198,7 +198,7 @@ object WorkersDb { fun getVotedRss() = getRealm().query().query("vote == $0", true) fun getRssQuery(keyword: String?, - category: ArrayList? = arrayListOf(), + category: Collection? = arrayListOf(), noLimit: Boolean = false) : RealmQuery{ var rQ = getRealm().query() if (!noLimit) rQ.query("pubDate > $0", beforeDay(Date(), 3)) diff --git a/app/src/main/res/layout/item_hourly_weather.xml b/app/src/main/res/layout/item_hourly_weather.xml index e9113fd..e6552c4 100644 --- a/app/src/main/res/layout/item_hourly_weather.xml +++ b/app/src/main/res/layout/item_hourly_weather.xml @@ -59,6 +59,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textDress" + android:maxLines="2" style="@style/small" android:text="@{info.textCondition}" android:gravity="center" diff --git a/app/src/main/res/layout/item_rec_hourly_dress.xml b/app/src/main/res/layout/item_rec_hourly_dress.xml index 4e24fd4..1dbf8df 100644 --- a/app/src/main/res/layout/item_rec_hourly_dress.xml +++ b/app/src/main/res/layout/item_rec_hourly_dress.xml @@ -58,6 +58,7 @@ android:includeFontPadding="false" android:layout_width="match_parent" android:layout_height="wrap_content" + android:maxWidth="80dp" android:id="@+id/textDress" style="@style/small" android:text="@{info.textCondition}" diff --git a/library/build.gradle.kts b/library/build.gradle.kts index 491e5bb..892b769 100644 --- a/library/build.gradle.kts +++ b/library/build.gradle.kts @@ -35,6 +35,8 @@ android { } 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 ("androidx.annotation:annotation:1.9.1") implementation ("androidx.appcompat:appcompat:1.7.0") diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml index 2313e8c..cfd19ef 100644 --- a/library/src/main/AndroidManifest.xml +++ b/library/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ - + > ${url!!.toUri().authority}") - LogUtil.e("url!!.toUri(). >> ${url!!.toUri().encodedFragment}") if (extraHeaders == null) { webView!!.loadUrl(url!!) } else { @@ -1390,8 +1396,9 @@ LogUtil.e("url!!.toUri(). >> ${url!!.toUri().authority}") + @SuppressLint("MissingSuperCall") 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()) { return } @@ -1833,27 +1840,75 @@ LogUtil.e("onBackPressed ${webChromeClient} && ${binding.menus.menuLayout.visibi Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) return File.createTempFile(new_name, if (isVideo) ".mp4" else ".jpg", sd_directory) } + var hasYoutubePlayer = false open fun webviewOnPageFinished(){} inner class MyWebViewClient : WebViewClient() { override fun shouldInterceptRequest( view: WebView, request: WebResourceRequest ): WebResourceResponse? { -// LogUtil.e("shouldInterceptRequest request >>> ${request.url.toString()}") - if (request.url.toString().contains("gif") && request.url.toString().contains("sogirl")) { + var skipResource = + (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( "text/plain", "utf-8", 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? { -// LogUtil.e("shouldInterceptRequest String >>> $url") -// if (url.contains("gif")) { -// return null -// } // 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")) { 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) { @@ -1899,7 +1967,12 @@ LogUtil.e("onBackPressed ${webChromeClient} && ${binding.menus.menuLayout.visibi override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { 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.endsWith(".mp4")) { val intent = Intent(Intent.ACTION_VIEW) diff --git a/library/src/main/res/layout/awesome_web_view.xml b/library/src/main/res/layout/awesome_web_view.xml index 621fc88..1c96e60 100644 --- a/library/src/main/res/layout/awesome_web_view.xml +++ b/library/src/main/res/layout/awesome_web_view.xml @@ -10,7 +10,10 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/finestWhite"> - +