...
This commit is contained in:
parent
897992f914
commit
33d0a930fd
@ -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) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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()
|
||||||
|
|||||||
@ -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 }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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!!)
|
||||||
|
|||||||
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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 {
|
||||||
|
|||||||
@ -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))
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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}"
|
||||||
|
|||||||
@ -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")
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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,6 +1396,7 @@ 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()) {
|
||||||
@ -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)
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user