diff --git a/app/src/main/kotlin/rasel/lunar/launcher/LauncherActivity.kt b/app/src/main/kotlin/rasel/lunar/launcher/LauncherActivity.kt index 25949880..bbde7380 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/LauncherActivity.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/LauncherActivity.kt @@ -33,7 +33,6 @@ import android.content.pm.PackageManager import android.content.res.Configuration import android.graphics.Bitmap import android.graphics.Color -import android.location.Location import android.net.Uri import android.net.http.SslError import android.os.Build @@ -91,6 +90,7 @@ import rasel.lunar.launcher.helpers.Constants.Companion.KEY_STATUS_BAR import rasel.lunar.launcher.helpers.Constants.Companion.PREFS_FIRST_LAUNCH import rasel.lunar.launcher.helpers.Constants.Companion.PREFS_SETTINGS import rasel.lunar.launcher.helpers.Constants.Companion.widgetHostId +import rasel.lunar.launcher.helpers.PrefHelper import rasel.lunar.launcher.helpers.ViewPagerAdapter import rasel.lunar.launcher.home.LauncherHome import rasel.lunar.launcher.home.LauncherHome.Companion.lastedFinishedPageUrl @@ -113,17 +113,23 @@ import rasel.lunar.launcher.workers.ClienGetter import rasel.lunar.launcher.workers.ContactInfoGetter import rasel.lunar.launcher.workers.DCGetter import rasel.lunar.launcher.workers.DotaxGetter +import rasel.lunar.launcher.workers.DotaxGetter.Companion.COMIC2_WORK_TAG import rasel.lunar.launcher.workers.FmKoreaGetter +import rasel.lunar.launcher.workers.FmKoreaGetter.Companion.COMIC_WORK_TAG import rasel.lunar.launcher.workers.LocationGetter import rasel.lunar.launcher.workers.NewsFeedsGetter +import rasel.lunar.launcher.workers.NewsFeedsGetter.Companion.FEDDS_WORK_TAG import rasel.lunar.launcher.workers.OpenWeatherGetter import rasel.lunar.launcher.workers.RecentCallGetter import rasel.lunar.launcher.workers.RecentSmsGetter +import rasel.lunar.launcher.workers.RecentSmsGetter.Companion.SMS_WORK_TAG import rasel.lunar.launcher.workers.RedditGetter +import rasel.lunar.launcher.workers.RedditGetter.Companion.REDDIT_WORK_TAG import rasel.lunar.launcher.workers.RuliWebGetter import rasel.lunar.launcher.workers.TheQooGetter import rasel.lunar.launcher.workers.WorkersDb import rasel.lunar.launcher.workers.YoutubeGetter +import rasel.lunar.launcher.workers.YoutubeGetter.Companion.YT_WORK_TAG import java.io.File import java.io.IOException import java.text.SimpleDateFormat @@ -142,18 +148,8 @@ internal class LauncherActivity : AppCompatActivity() { lateinit var viewPager: ViewPager2 companion object { - private var mWorkManager: WorkManager? = null - val SMS_WORK_TAG = "RecentSmsGetter" - val CALL_WORK_TAG = "MissedCallGetter" - val FEDDS_WORK_TAG = "NewsFeedsGetter" - val YT_WORK_TAG = "YoutubeGetter" - val COMIC_WORK_TAG = "ComicGetter" - val COMIC2_WORK_TAG = "ComicGetter2" - val REDDIT_WORK_TAG = "RedditGetter" - val shortTimePeriod = 20L - val longTimePeriod = 60L - val midTimePeriod = 30L + var isOpendFold = false val qDayPeriod = 60L * 8L @@ -167,7 +163,7 @@ internal class LauncherActivity : AppCompatActivity() { mWorkManager?.enqueueUniquePeriodicWork( SMS_WORK_TAG, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, - PeriodicWorkRequestBuilder(longTimePeriod, TimeUnit.MINUTES) + PeriodicWorkRequestBuilder(PrefHelper.longTimePeriod, TimeUnit.MINUTES) .addTag(SMS_WORK_TAG) .build()) }, 500, TimeUnit.MILLISECONDS) @@ -176,7 +172,7 @@ internal class LauncherActivity : AppCompatActivity() { mWorkManager?.enqueueUniquePeriodicWork( RecentCallGetter.TAG, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, - PeriodicWorkRequestBuilder(longTimePeriod, TimeUnit.MINUTES) + PeriodicWorkRequestBuilder(PrefHelper.longTimePeriod, TimeUnit.MINUTES) .addTag(RecentCallGetter.TAG) .build()) }, 500, TimeUnit.MILLISECONDS) @@ -205,10 +201,10 @@ internal class LauncherActivity : AppCompatActivity() { }, 5, TimeUnit.SECONDS) } - fun doGetWheaterByLocationInfo() { + fun runWeatherGetter() { Executors.newSingleThreadScheduledExecutor().schedule({ mWorkManager?.enqueue(OneTimeWorkRequest.from(OpenWeatherGetter::class.java)) - }, 5, TimeUnit.SECONDS) + }, 200L, TimeUnit.MILLISECONDS) } fun getCal() { @@ -223,7 +219,7 @@ internal class LauncherActivity : AppCompatActivity() { mWorkManager?.cancelAllWorkByTag(FEDDS_WORK_TAG) mWorkManager?.enqueueUniquePeriodicWork( FEDDS_WORK_TAG, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, - PeriodicWorkRequestBuilder(shortTimePeriod, TimeUnit.MINUTES) + PeriodicWorkRequestBuilder(PrefHelper.shortTimePeriod, TimeUnit.MINUTES) .addTag(FEDDS_WORK_TAG) .build()) }, delay, TimeUnit.SECONDS) @@ -232,7 +228,7 @@ internal class LauncherActivity : AppCompatActivity() { mWorkManager?.cancelAllWorkByTag(YT_WORK_TAG) mWorkManager?.enqueueUniquePeriodicWork( YT_WORK_TAG, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, - PeriodicWorkRequestBuilder(longTimePeriod, TimeUnit.MINUTES) + PeriodicWorkRequestBuilder(PrefHelper.longTimePeriod, TimeUnit.MINUTES) .addTag(YT_WORK_TAG) .build()) }, delay, TimeUnit.SECONDS) @@ -241,7 +237,7 @@ internal class LauncherActivity : AppCompatActivity() { mWorkManager?.cancelAllWorkByTag(REDDIT_WORK_TAG) mWorkManager?.enqueueUniquePeriodicWork( REDDIT_WORK_TAG, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, - PeriodicWorkRequestBuilder(midTimePeriod, TimeUnit.MINUTES) + PeriodicWorkRequestBuilder(PrefHelper.midTimePeriod, TimeUnit.MINUTES) .addTag(REDDIT_WORK_TAG) .build()) }, delay, TimeUnit.SECONDS) @@ -250,7 +246,7 @@ internal class LauncherActivity : AppCompatActivity() { mWorkManager?.cancelAllWorkByTag(COMIC_WORK_TAG) mWorkManager?.enqueueUniquePeriodicWork( COMIC_WORK_TAG, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, - PeriodicWorkRequestBuilder(midTimePeriod, TimeUnit.MINUTES) + PeriodicWorkRequestBuilder(PrefHelper.midTimePeriod, TimeUnit.MINUTES) .addTag(COMIC_WORK_TAG) .build()) }, delay, TimeUnit.SECONDS) @@ -259,7 +255,7 @@ internal class LauncherActivity : AppCompatActivity() { mWorkManager?.cancelAllWorkByTag(COMIC2_WORK_TAG) mWorkManager?.enqueueUniquePeriodicWork( COMIC2_WORK_TAG, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, - PeriodicWorkRequestBuilder(midTimePeriod, TimeUnit.MINUTES) + PeriodicWorkRequestBuilder(PrefHelper.midTimePeriod, TimeUnit.MINUTES) .addTag(COMIC2_WORK_TAG) .build()) }, delay, TimeUnit.SECONDS) @@ -268,7 +264,7 @@ internal class LauncherActivity : AppCompatActivity() { mWorkManager?.cancelAllWorkByTag(ClienGetter.TAG) mWorkManager?.enqueueUniquePeriodicWork( ClienGetter.TAG, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, - PeriodicWorkRequestBuilder(midTimePeriod, TimeUnit.MINUTES) + PeriodicWorkRequestBuilder(PrefHelper.midTimePeriod, TimeUnit.MINUTES) .addTag(ClienGetter.TAG) .build()) }, delay, TimeUnit.SECONDS) @@ -277,7 +273,7 @@ internal class LauncherActivity : AppCompatActivity() { mWorkManager?.cancelAllWorkByTag(DCGetter.TAG) mWorkManager?.enqueueUniquePeriodicWork( DCGetter.TAG, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, - PeriodicWorkRequestBuilder(midTimePeriod, TimeUnit.MINUTES) + PeriodicWorkRequestBuilder(PrefHelper.midTimePeriod, TimeUnit.MINUTES) .addTag(DCGetter.TAG) .build()) }, delay, TimeUnit.SECONDS) @@ -286,7 +282,7 @@ internal class LauncherActivity : AppCompatActivity() { mWorkManager?.cancelAllWorkByTag(RuliWebGetter.TAG) mWorkManager?.enqueueUniquePeriodicWork( RuliWebGetter.TAG, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, - PeriodicWorkRequestBuilder(midTimePeriod, TimeUnit.MINUTES) + PeriodicWorkRequestBuilder(PrefHelper.midTimePeriod, TimeUnit.MINUTES) .addTag(RuliWebGetter.TAG) .build()) }, delay, TimeUnit.SECONDS) @@ -295,7 +291,7 @@ internal class LauncherActivity : AppCompatActivity() { mWorkManager?.cancelAllWorkByTag(TheQooGetter.TAG) mWorkManager?.enqueueUniquePeriodicWork( TheQooGetter.TAG, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, - PeriodicWorkRequestBuilder(midTimePeriod, TimeUnit.MINUTES) + PeriodicWorkRequestBuilder(PrefHelper.midTimePeriod, TimeUnit.MINUTES) .addTag(TheQooGetter.TAG) .build()) }, delay, TimeUnit.SECONDS) @@ -304,7 +300,7 @@ internal class LauncherActivity : AppCompatActivity() { mWorkManager?.cancelAllWorkByTag(ArcaGetter.TAG) mWorkManager?.enqueueUniquePeriodicWork( ArcaGetter.TAG, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, - PeriodicWorkRequestBuilder(midTimePeriod, TimeUnit.MINUTES) + PeriodicWorkRequestBuilder(PrefHelper.midTimePeriod, TimeUnit.MINUTES) .addTag(ArcaGetter.TAG) .build()) @@ -316,7 +312,7 @@ internal class LauncherActivity : AppCompatActivity() { mWorkManager?.cancelAllWorkByTag(LocationGetter.TAG) mWorkManager?.enqueueUniquePeriodicWork( LocationGetter.TAG, ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, - PeriodicWorkRequestBuilder(midTimePeriod, TimeUnit.MINUTES) + PeriodicWorkRequestBuilder(PrefHelper.shortTimePeriod, TimeUnit.MINUTES) .addTag(LocationGetter.TAG) .build()) }, weatherDelay, TimeUnit.SECONDS) @@ -369,7 +365,7 @@ internal class LauncherActivity : AppCompatActivity() { // } } - @SuppressLint("NewApi") + @SuppressLint("NewApi", "MissingPermission") override fun onCreate(savedInstanceState: Bundle?) { installSplashScreen() mWorkManager = WorkManager.getInstance(this) @@ -627,137 +623,136 @@ internal class LauncherActivity : AppCompatActivity() { startActivity(mapIntent) } - fun doWebSavor(url : String, callBack :CommadCallabck?) { - if (true)return - this.callBack = callBack - - binding.searcher01.post { binding.searcher01.visibility = View.VISIBLE } - BLog.LOGE("binding.otherCheck before ThreadRun") - binding.searcher01.bringToFront() - binding.searcher01.alpha = 1f - binding.searcher01.webViewClient = object : WebViewClient() { - override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { - if (url?.contains("missav") == true && isF) { - BLog.LOGE("binding.otherCheck before reload") - view?.loadUrl(url!!) - isF = true - return false - } - return false - } - - override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { - BLog.LOGE("binding.otherCheck searcher01 in onPageStarted ${url}") - super.onPageStarted(view, url, favicon) - } - override fun onReceivedError( - view: WebView?, - request: WebResourceRequest?, - error: WebResourceError? - ) { - - } - override fun onReceivedSslError( - view: WebView?, - handler: SslErrorHandler?, - error: SslError? - ) { - handler?.proceed() - } - - override fun onPageFinished(view: WebView?, url: String?) { - super.onPageFinished(view, url) - autoScrollDown(view,url) - - } - } - - WebView.setWebContentsDebuggingEnabled(false) - binding.searcher01.apply { - setBackgroundColor(Color.WHITE) // 백그라운드 색상 설정 - setLayerType(View.LAYER_TYPE_SOFTWARE, null) // 랜더링 이슈 해결 - try { - settings.apply { - userAgentString = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36" - javaScriptEnabled = true // 자바스크립트 사용 가능하도록 설정 - loadWithOverviewMode = true // 전체 웹페이지를 화면에 맞게 로드 - useWideViewPort = true // 화면에 맞게 페이지 확대/축소 - domStorageEnabled = true // DOM 저장소 사용 가능하도록 설정 - setSupportMultipleWindows(true) - javaScriptCanOpenWindowsAutomatically = true // 팝업창 차단 해제 - cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK - textZoom = 100 // system 에 의한 글꼴 변형 방지 - defaultTextEncodingName = "UTF-8" // 인코딩 설정 - allowContentAccess = true // 웹뷰를 통해 content url에 접근할지 여부 - layoutAlgorithm = WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING // 웹페이지의 레이아웃을 화면에 맞게 자동으로 조정 - } - } catch (ignore: NoSuchMethodError) { - - }.apply { - loadUrl(url) // 웹페이지 연결 - } - } - } - - fun autoScrollDown(webView: WebView?, url: String?) { - webView?.let { webView -> - val ramdomTimeSec = - 800L.plus(Math.abs(Random(System.currentTimeMillis()).nextLong().rem(489L))) - BLog.LOGE("ramdomTime >>> ${ramdomTimeSec}") - if (((webView?.scrollY ?: 0) + (webView?.height - ?: 0)) < webView?.contentHeight ?: 0 - ) { - webView?.postDelayed({ - webView?.scrollY = (binding.searcher01.scrollY) + (binding.searcher01.height.toFloat() * 0.4).toInt() - autoScrollDown(webView, url) - }, ramdomTimeSec) - } else { - webView?.postDelayed({ - binding.viewPager.bringToFront() - binding.searcher01.alpha = 0f - if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) { - val fileName = url?.toUri()?.path?.replace("/","_")?.replace(".","_") - val path = File(Environment.getExternalStorageDirectory(),"bums") - if (path.exists() == false) { - path.mkdirs() - } - val file = File(path, fileName.plus(".pdf")) - - BLog.LOGE("file >>> ${file.absolutePath}") - try { - PDFPrint.generatePDFFromWebView(file,webView, object : PDFPrint.OnPDFPrintListener { - override fun onSuccess(file: File?) { - BLog.LOGE("file >>>> ${file!!.absolutePath}") - val shareIntent: Intent = Intent().apply { - action = Intent.ACTION_SEND - this.`package` = "com.synology.dsdrive" - val imageUri = FileProvider.getUriForFile( - this@LauncherActivity, - "rasel.lunar.launcher.debug.fileprovider", //(use your app signature + ".provider" ) - file - ) - putExtra(Intent.EXTRA_STREAM, imageUri) - type = "pdf" - } - this@LauncherActivity.startActivity(shareIntent) - } - - override fun onError(exception: java.lang.Exception?) { - Toast.makeText(this@LauncherActivity, - "Pdf Save Failk ${exception?.localizedMessage}", Toast.LENGTH_LONG).show() - exception?.printStackTrace() - } - } ) - } catch (e: IOException) { - e.printStackTrace() - } - } else { - - } - }, ramdomTimeSec) - } - } - } +// fun doWebSavor(url : String, callBack :CommadCallabck?) { +// if (true)return +// this.callBack = callBack +// +// binding.searcher01.post { binding.searcher01.visibility = View.VISIBLE } +// BLog.LOGE("binding.otherCheck before ThreadRun") +// binding.searcher01.bringToFront() +// binding.searcher01.alpha = 1f +// binding.searcher01.webViewClient = object : WebViewClient() { +// override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { +// if (url?.contains("missav") == true && isF) { +// BLog.LOGE("binding.otherCheck before reload") +// view?.loadUrl(url!!) +// isF = true +// return false +// } +// return false +// } +// +// override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { +// BLog.LOGE("binding.otherCheck searcher01 in onPageStarted ${url}") +// super.onPageStarted(view, url, favicon) +// } +// override fun onReceivedError( +// view: WebView?, +// request: WebResourceRequest?, +// error: WebResourceError? +// ) { +// +// } +// override fun onReceivedSslError( +// view: WebView?, +// handler: SslErrorHandler?, +// error: SslError? +// ) { +// handler?.proceed() +// } +// +// override fun onPageFinished(view: WebView?, url: String?) { +// super.onPageFinished(view, url) +// autoScrollDown(view,url) +// +// } +// } +// +// WebView.setWebContentsDebuggingEnabled(false) +// binding.searcher01.apply { +// setBackgroundColor(Color.WHITE) // 백그라운드 색상 설정 +// setLayerType(View.LAYER_TYPE_SOFTWARE, null) // 랜더링 이슈 해결 +// try { +// settings.apply { +// userAgentString = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36" +// javaScriptEnabled = true // 자바스크립트 사용 가능하도록 설정 +// loadWithOverviewMode = true // 전체 웹페이지를 화면에 맞게 로드 +// useWideViewPort = true // 화면에 맞게 페이지 확대/축소 +// domStorageEnabled = true // DOM 저장소 사용 가능하도록 설정 +// setSupportMultipleWindows(true) +// javaScriptCanOpenWindowsAutomatically = true // 팝업창 차단 해제 +// cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK +// textZoom = 100 // system 에 의한 글꼴 변형 방지 +// defaultTextEncodingName = "UTF-8" // 인코딩 설정 +// allowContentAccess = true // 웹뷰를 통해 content url에 접근할지 여부 +// layoutAlgorithm = WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING // 웹페이지의 레이아웃을 화면에 맞게 자동으로 조정 +// } +// } catch (ignore: NoSuchMethodError) { +// +// }.apply { +// loadUrl(url) // 웹페이지 연결 +// } +// } +// } +// fun autoScrollDown(webView: WebView?, url: String?) { +// webView?.let { webView -> +// val ramdomTimeSec = +// 800L.plus(Math.abs(Random(System.currentTimeMillis()).nextLong().rem(489L))) +// BLog.LOGE("ramdomTime >>> ${ramdomTimeSec}") +// if (((webView?.scrollY ?: 0) + (webView?.height +// ?: 0)) < webView?.contentHeight ?: 0 +// ) { +// webView?.postDelayed({ +// webView?.scrollY = (binding.searcher01.scrollY) + (binding.searcher01.height.toFloat() * 0.4).toInt() +// autoScrollDown(webView, url) +// }, ramdomTimeSec) +// } else { +// webView?.postDelayed({ +// binding.viewPager.bringToFront() +// binding.searcher01.alpha = 0f +// if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) { +// val fileName = url?.toUri()?.path?.replace("/","_")?.replace(".","_") +// val path = File(Environment.getExternalStorageDirectory(),"bums") +// if (path.exists() == false) { +// path.mkdirs() +// } +// val file = File(path, fileName.plus(".pdf")) +// +// BLog.LOGE("file >>> ${file.absolutePath}") +// try { +// PDFPrint.generatePDFFromWebView(file,webView, object : PDFPrint.OnPDFPrintListener { +// override fun onSuccess(file: File?) { +// BLog.LOGE("file >>>> ${file!!.absolutePath}") +// val shareIntent: Intent = Intent().apply { +// action = Intent.ACTION_SEND +// this.`package` = "com.synology.dsdrive" +// val imageUri = FileProvider.getUriForFile( +// this@LauncherActivity, +// "rasel.lunar.launcher.debug.fileprovider", //(use your app signature + ".provider" ) +// file +// ) +// putExtra(Intent.EXTRA_STREAM, imageUri) +// type = "pdf" +// } +// this@LauncherActivity.startActivity(shareIntent) +// } +// +// override fun onError(exception: java.lang.Exception?) { +// Toast.makeText(this@LauncherActivity, +// "Pdf Save Failk ${exception?.localizedMessage}", Toast.LENGTH_LONG).show() +// exception?.printStackTrace() +// } +// } ) +// } catch (e: IOException) { +// e.printStackTrace() +// } +// } else { +// +// } +// }, ramdomTimeSec) +// } +// } +// } var callBack : CommadCallabck? = null var isF = false @@ -796,8 +791,6 @@ internal class LauncherActivity : AppCompatActivity() { handler?.proceed() } - - override fun onPageFinished(view: WebView?, url: String?) { super.onPageFinished(view, url) lastedFinishedPageUrl = url ?: "" @@ -810,9 +803,7 @@ internal class LauncherActivity : AppCompatActivity() { " MyJavaScriptInterface.sendValueFromHtml(document.getElementsByTagName('html')[0].innerHTML)" + " };getAll()" ) { result -> - (result as? String)?.let { - - } + (result as? String)?.let {} } } else if(url?.contains("translate.google.com") == true) { binding.searcher01.postDelayed({ @@ -821,9 +812,7 @@ internal class LauncherActivity : AppCompatActivity() { " MyJavaScriptInterface.sendValueFromHtml(document.getElementsByTagName('html')[0].innerHTML)" + " };getAll()" ) { result -> - (result as? String)?.let { - - } + (result as? String)?.let {} } }, 6000L) } else { @@ -833,20 +822,10 @@ internal class LauncherActivity : AppCompatActivity() { " MyJavaScriptInterface.sendValueFromHtml(document.getElementsByTagName('html')[0].innerHTML)" + " };getAll()" ) { result -> - (result as? String)?.let { - - } + (result as? String)?.let {} } -// if (!isF) { -// binding.searcher01.post { -// binding.searcher01.loadUrl("https://missav.com/dm11/ko") -// isF = true -// } -// } } if (isF) this@LauncherActivity.callBack?.collectComplete() -// binding.searcher01.post { binding.searcher01.visibility = View.GONE } -// } } } WebView.setWebContentsDebuggingEnabled(false) @@ -919,7 +898,6 @@ internal class LauncherActivity : AppCompatActivity() { } } fun jGuruMain(doc: Document) { -// BLog.LOGE("SimpleDateFormat D MM yy => ${SimpleDateFormat("d MMM yy", Locale.US).format(Date())}") var temp = arrayListOf() val prevUrl = doc.getElementsByClass("prev").get(0).getElementsByAttribute("href").get(0).attr("href") doc.getElementsByClass("column").forEach { @@ -938,9 +916,6 @@ internal class LauncherActivity : AppCompatActivity() { var itemC = 0 WorkersDb.insertBulkInteface(temp) callBack?.onConsoleLog("Stored data :: ${simpldateFormat.format(Date(minDate))} ~ ${simpldateFormat.format(Date(maxDate))} set in ${itemC}") -// Toast.makeText(this@LauncherActivity, -// "Stored data :: ${listItem.size} items :: [${simpldateFormat.format(Date(minDate))} ~ ${simpldateFormat.format(Date(maxDate))}] \n set in ${itemC}", Toast.LENGTH_LONG).show() -//// } binding.searcher01?.post { binding.searcher01.loadData("",null,null) } this@LauncherActivity.callBack?.collectComplete() } @@ -960,39 +935,26 @@ internal class LauncherActivity : AppCompatActivity() { } } }.apply { -// listTags.sortByDescending { it.pubDate() } -// Toast.makeText(this@LauncherActivity, -// "Stored data :: ${listTags.size}tags", Toast.LENGTH_SHORT).show() binding.searcher01?.post { binding.searcher01.loadData("",null,null) } this@LauncherActivity.callBack?.collectComplete() } } inner class MyJavaScriptInterface(val webView: WebView) { - - @JavascriptInterface fun sendValueFromHtml(result: String) { -// BLog.LOGE("binding.otherCheck start with ${result}") if (lastedFinishedPageUrl.contains(jGuruMain)) { var htmlString = result.replace("\\u003","<") val doc: Document = Jsoup.parse(htmlString) - if (lastedFinishedPageUrl?.contains("page") == true || lastedFinishedPageUrl?.equals( - jGuruMain - ) == true - ) { + if (lastedFinishedPageUrl?.contains("page") == true || lastedFinishedPageUrl?.equals(jGuruMain) == true) { jGuruMain(doc) } else if (lastedFinishedPageUrl?.contains("/most-watched-rank") == true) { jGuruToday(doc) } else if (lastedFinishedPageUrl?.contains("/tags/") == true) { jGuruTag(doc) } - } else if (lastedFinishedPageUrl?.contains("youtube") == true) { -// val doc: Document = Jsoup.parse(result) -// ytChannel(doc) - } else if (lastedFinishedPageUrl?.contains("missav")==true) { + } else if (lastedFinishedPageUrl?.contains("missav")==true) { val doc: Document = Jsoup.parse(result) -// BLog.LOGE("missav >>> ${doc}") var temp = arrayListOf() doc.getElementsByClass("thumbnail group").forEach { miss_li -> if (miss_li.getElementsByTag("img").size > 0 && miss_li.getElementsByTag("img").get(0).attr("data-src").length > 10 && @@ -1012,32 +974,8 @@ internal class LauncherActivity : AppCompatActivity() { } }.apply { WorkersDb.insertBulkData(temp) -// BLog.LOGE("temp >>> ${temp.size}") -// binding.searcher01?.post { binding.searcher01.loadData("",null,null) } } - - } else if(lastedFinishedPageUrl?.contains("javmost")==true){ - val doc: Document = Jsoup.parse(result) - callBack?.onConsoleLog("${lastedFinishedPageUrl} >>> ${doc.title()}") - doc.getElementsByClass("card").forEach { card -> - callBack?.onConsoleLog("${lastedFinishedPageUrl}_card >>> ${card}") - var model = if(card.getElementsByTag("img").size > 0) card.getElementsByTag("img").get(0).attr("src") else "" - var thumb = if(card.getElementsByTag("img").size > 0) card.getElementsByTag("img").get(0).attr("alt") else "" - var title = "" - var date = "" - if(card.getElementsByClass("card-block").size > 0) if(card.getElementsByClass("card-block").size > 0) { - title = card.getElementsByClass("card-block").get(0).getElementsByTag("a").get(0).attr("title") - date = card.getElementsByTag("span").get(0).text() - } - - callBack?.onConsoleLog("" + - "model >>>>> ${model}\n" + - "thumb >>>>> ${thumb}\n" + - "title >>>>> ${title}\n" + - "date >>>>> ${date}" + - "") - } - } else if(lastedFinishedPageUrl?.contains("https://translate.google.com") == true){ + } else if(lastedFinishedPageUrl?.contains("https://translate.google.com") == true){ callBackHandler.removeCallbacks(postNext) val doc: Document = Jsoup.parse(result) doc.getElementsByTag("span").forEach { span -> diff --git a/app/src/main/kotlin/rasel/lunar/launcher/LunarLauncher.kt b/app/src/main/kotlin/rasel/lunar/launcher/LunarLauncher.kt index 8906b596..e130df1a 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/LunarLauncher.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/LunarLauncher.kt @@ -20,13 +20,21 @@ package rasel.lunar.launcher import android.app.Application import android.content.ComponentCallbacks2 +import android.content.Context +import android.content.SharedPreferences import android.database.sqlite.SQLiteDatabase +import rasel.lunar.launcher.helpers.PrefHelper internal class LunarLauncher : Application() { + companion object { + var appContext : Context? = null + } + override fun onCreate() { super.onCreate() -// Picasso.get().setIndicatorsEnabled(true) + appContext = this + PrefHelper.inject(getSharedPreferences(PrefHelper.D_PREFIX, Context.MODE_PRIVATE)) } override fun onTrimMemory(level: Int) { super.onTrimMemory(level) @@ -34,4 +42,4 @@ internal class LunarLauncher : Application() { if (level >= ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) SQLiteDatabase.releaseMemory() } -} +} \ No newline at end of file diff --git a/app/src/main/kotlin/rasel/lunar/launcher/apps/ContactAdapter.kt b/app/src/main/kotlin/rasel/lunar/launcher/apps/ContactAdapter.kt index 34581508..5711259b 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/apps/ContactAdapter.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/apps/ContactAdapter.kt @@ -26,14 +26,12 @@ import android.view.ViewGroup import androidx.fragment.app.FragmentManager import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView -import io.realm.kotlin.ext.query import io.realm.kotlin.types.RealmObject import io.realm.kotlin.types.annotations.PrimaryKey import rasel.lunar.launcher.databinding.ContactItemBinding import rasel.lunar.launcher.utils.BLog import rasel.lunar.launcher.utils.JamoUtils import rasel.lunar.launcher.workers.RecentCallGetter -import rasel.lunar.launcher.workers.WorkersDb import java.util.Date @@ -64,22 +62,11 @@ internal class ContactAdapter ( holder.view.root.apply { /* on click - open app */ setOnClickListener { - ContactMenu().show(fragmentManager, item.id.toString()) } /* on long click - open app menu */ setOnLongClickListener { - WorkersDb.getRealm().writeBlocking { - if (item.id!=null && item.id?.length ?: 0 > 0) { - val result = query().query("id == $0", item.id).find() - if(result.size > 0){ - var contact = result.first() - contact.touchCount = contact.touchCount + 1 - contact.lastedTouchDateTime = System.currentTimeMillis() - } - } - } // BLog.LOGE("item.id.toString() >> ${item.id.toString()}") ContactMenu().show(fragmentManager, item.id.toString()) true diff --git a/app/src/main/kotlin/rasel/lunar/launcher/feeds/Feeds.kt b/app/src/main/kotlin/rasel/lunar/launcher/feeds/Feeds.kt index d9ed7b6a..9ce75b39 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/feeds/Feeds.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/feeds/Feeds.kt @@ -50,6 +50,8 @@ import com.google.android.material.button.MaterialButtonToggleGroup import com.google.gson.Gson import io.realm.kotlin.ext.query import io.realm.kotlin.query.Sort +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.delay import kotlinx.coroutines.isActive @@ -63,6 +65,7 @@ import rasel.lunar.launcher.LauncherActivity.Companion.lActivity import rasel.lunar.launcher.LauncherActivity.Companion.refreshDeviceData import rasel.lunar.launcher.LauncherActivity.Companion.refreshFeeds import rasel.lunar.launcher.R +import rasel.lunar.launcher.apps.ContactMenu import rasel.lunar.launcher.databinding.FeedsBinding import rasel.lunar.launcher.feeds.rss.RssAdapter import rasel.lunar.launcher.helpers.Constants.Companion.KEY_WIDGET_HEIGHTS @@ -71,6 +74,7 @@ import rasel.lunar.launcher.helpers.Constants.Companion.PREFS_WIDGETS import rasel.lunar.launcher.helpers.Constants.Companion.SEPARATOR import rasel.lunar.launcher.helpers.Constants.Companion.requestCreateWidget import rasel.lunar.launcher.helpers.Constants.Companion.requestPickWidget +import rasel.lunar.launcher.helpers.PrefHelper import rasel.lunar.launcher.home.LauncherHome.Companion.home import rasel.lunar.launcher.home.LauncherHome.Companion.lastedFinishedPageUrl import rasel.lunar.launcher.home.LauncherHome.Companion.listTags @@ -83,6 +87,7 @@ import rasel.lunar.launcher.model.jGuruTag import rasel.lunar.launcher.model.dateFormat import rasel.lunar.launcher.model.getRssData import rasel.lunar.launcher.utils.BLog +import rasel.lunar.launcher.utils.FeedParseManager import rasel.lunar.launcher.utils.JamoUtils import rasel.lunar.launcher.utils.RssList.jGuruMain import rasel.lunar.launcher.utils.USAGT @@ -94,6 +99,7 @@ import rasel.lunar.launcher.workers.WorkersDb import java.net.URLEncoder import java.nio.charset.Charset import java.text.SimpleDateFormat +import java.util.Base64 import java.util.Date import java.util.concurrent.Executors import java.util.concurrent.TimeUnit @@ -176,11 +182,10 @@ internal class Feeds : Fragment() , CommadCallabck { mMainHandler.removeCallbacks(hideConsole) binding.consoleLog.post { binding.consoleLog.visibility = View.VISIBLE - binding.consoleLog.text = str + binding.consoleLog.text = binding.consoleLog.text.toString() + "\n" + str } mMainHandler.postDelayed(hideConsole,10000L) -// BLog.LOGE("consoleLog >>>> ${str}") - + BLog.LOGE("consoleLog >>>> ${str}") } fun openOpera(schemeString : String) { @@ -225,20 +230,39 @@ internal class Feeds : Fragment() , CommadCallabck { builder.setPositiveButton(android.R.string.ok, DialogInterface.OnClickListener { dialog, which -> dialog.dismiss() -// BLog.LOGE("input.text.toString() >>>> ${input.text.toString()}") + consoleLog("input.text.toString() >>>> ${input.text.toString()}") if (input.text.toString().trim().contains(" ")) { val cmd = input.text.toString().trim().split(" ") when(cmd[0]) { + "so"-> { + CoroutineScope(Dispatchers.IO).launch { + consoleLog("${cmd[0]} Start ${cmd[1]}") + String.format(String(Base64.getMimeDecoder().decode("aHR0cHM6Ly9rciVzLnNvZ2lybC5zby8=".toByteArray())),cmd[1]).getJ().let { doc -> FeedParseManager.parse(doc){consoleLog(it)} } + consoleLog("current j req() ${WorkersDb.getRealm().query("category == $0", RssDataType.GURU.name).find().size}") + consoleLog("${cmd[0]} END ${cmd[1]}") + } + } "s" -> { home?.queryInfos(keyword = cmd[1]) } "jf" -> { consoleLog("on Cmd JF") - GlobalScope.launch { excuteGetterMostByUrl("https://javmost.to/search/movie/${cmd[1]}") } + CoroutineScope(Dispatchers.IO).launch { + consoleLog("${cmd[0]} Start ${cmd[1]}") + String.format(String(Base64.getMimeDecoder().decode("aHR0cHM6Ly9qYXZtb3N0LnRvL3NlYXJjaC9tb3ZpZS8lcw==".toByteArray())),cmd[1]).getJ().let { doc -> FeedParseManager.parse(doc){consoleLog(it)} } + consoleLog("current j req() ${WorkersDb.getRealm().query("category == $0", RssDataType.GURU.name).find().size}") + consoleLog("${cmd[0]} END ${cmd[1]}") + } + CoroutineScope(Dispatchers.IO).launch { + consoleLog("on Cmd JF with SO") + consoleLog("${cmd[0]} Start ${cmd[1]}") + String.format(String(Base64.getMimeDecoder().decode("aHR0cHM6Ly9rcjcwLnNvZ2lybC5zby8/cz0lcw==".toByteArray())),cmd[1]).getJ().let { doc -> FeedParseManager.parse(doc){consoleLog(it)} } + consoleLog("current j req() ${WorkersDb.getRealm().query("category == $0", RssDataType.GURU.name).find().size}") + consoleLog("${cmd[0]} END ${cmd[1]}") + } } "mgn"-> { -// lActivity?.doWebParseStart("https://cili.site/search?q=${URLEncoder.encode(cmd[1], Charset.defaultCharset().name())}") {} - GlobalScope.launch { + CoroutineScope(Dispatchers.IO).launch { var temp = arrayListOf() consoleLog("this >>>> cili ${cmd[0]} -> ${cmd[1]}") Jsoup.connect("https://cili.site/search?q=${URLEncoder.encode(cmd[1], Charset.defaultCharset().name())}").get().let { cili -> @@ -254,8 +278,6 @@ internal class Feeds : Fragment() , CommadCallabck { if (mgn_Page.getElementsByClass("input-group magnet-box").size > 0) { mgn_Page.getElementsByClass("input-group magnet-box") .get(0)?.let { magnet_box -> -// BLog.LOGE("magnet_box >>> ${magnet_box}") -// if (magnet_box.getElementById("input-magnet").size > 0) { magnet_box.getElementById( "input-magnet" )?.let { input_magnet -> @@ -278,52 +300,20 @@ internal class Feeds : Fragment() , CommadCallabck { } }.start() } - } binding.expandRss.isChecked = false } else { when (input.text.toString()) { + "loc_ck" -> { + FeedsResult().show(parentFragmentManager, "") + } + "loc_on" -> { + PrefHelper.location(!PrefHelper.isLocationOn()) + consoleLog("PrefHelper.isLocationOn() >>> ${PrefHelper.isLocationOn()}") + } "cal" ->{ getCal() } - "so" -> GlobalScope.launch { - "https://kr69.sogirl.so".getJ().let { doc -> -// BLog.LOGE("ogirl >>> ${doc.title()}") - doc.getElementsByTag("article").forEach { article -> -// BLog.LOGE("ogirl article >>> ${article.text()}") - val title = article.getElementsByTag("a").get(0).attr("title") - val href = article.getElementsByTag("a").get(0).attr("href") - val img = article.getElementsByTag("img").get(0).attr("data-src") - WorkersDb.getRealm().writeBlocking { - if (query("originPage == $0", href).find().size == 0) { - RssData().apply { - this.originPage = href - this.title = title - this.description = "Sogirl" - this.thumbnail = img - this.pubDate = Date().time - this.category = RssDataType.GURU.name - this.chosung = - JamoUtils.split(title).joinToString("") - copyToRealm(this) - } - } - } - } - } - consoleLog("current j req() ${WorkersDb.getRealm() - .query("category == $0", RssDataType.GURU.name).find().size}") - val urls = arrayOf("https://javmost.to/latest-updates", - "https://javmost.to/latest-updates/page-2", - "https://javmost.to/latest-updates/page-3", - "https://javmost.to/latest-updates/page-4", - "https://javmost.to/latest-updates/page-5") - urls.forEach { mostUrl -> - GlobalScope.launch { - excuteGetterMostByUrl(mostUrl) - }.start() - } - } "ojs" -> home?.queryInfos(arrayListOf().apply { addAll(RssDataType.values()) remove(RssDataType.GURU) @@ -340,8 +330,6 @@ internal class Feeds : Fragment() , CommadCallabck { addAll(RssDataType.values()) remove(RssDataType.REDDIT) }) - - "req" -> { refreshFeeds() refreshDeviceData() @@ -379,7 +367,6 @@ internal class Feeds : Fragment() , CommadCallabck { refresh.visibility = View.GONE } } - "jjp" -> { // lActivity?.doWebParseStart("https://projectjav.com") {} } @@ -402,10 +389,6 @@ internal class Feeds : Fragment() , CommadCallabck { .query("category == $0", RssDataType.GURU.name).find().size}") } }) -// { -// consoleLog("excuted j req() ${WorkersDb.getRealm() -// .query("category == $0", RssDataType.GURU.name).find().size}") -// } } "jtag" -> { @@ -497,72 +480,6 @@ internal class Feeds : Fragment() , CommadCallabck { } } - var dmy = SimpleDateFormat("dd-MM-yyyy") - fun excuteGetterMostByUrl(mostUrl : String) { - Executors.newSingleThreadScheduledExecutor().schedule({ - Jsoup.connect(mostUrl).userAgent(USAGT).get().let { doc -> - onConsoleLog("$lastedFinishedPageUrl >>> ${doc.title()}") - doc.getElementsByClass("card").forEach { card -> - onConsoleLog("${lastedFinishedPageUrl}_card >>> ${card}") - var thumb = if(card.getElementsByTag("img").size > 0) card.getElementsByTag("img").get(0).attr("src") else "" - if (thumb.contains("No+Poster")) thumb = if(card.getElementsByTag("img").size > 0) card.getElementsByTag("img").get(0).attr("data-src") else thumb - var model = if(card.getElementsByTag("img").size > 0) card.getElementsByTag("img").get(0).attr("alt") else "" - var title = "" - var date = "" - var link = "" - if(card.getElementsByClass("card-block").size > 0) if(card.getElementsByClass("card-block").size > 0) { - link = card.getElementsByClass("card-block").get(0).getElementsByTag("a").get(0).attr("href") - title = card.getElementsByClass("card-block").get(0).getElementsByTag("a").get(0).attr("title") - date = card.getElementsByTag("span").get(0).text() - } - - - MostItem().let { ms -> - ms.model = model - ms.image = thumb - ms.pageLink = link - ms.title = title - try { - ms.date = dmy.parse(date).time - consoleLog("dateFormat.format(Date(ms.date)) ${dateFormat.format(Date(ms.date))}") - }catch (e : Exception) {e.printStackTrace()} - if (ms.isValid()) { - WorkersDb.insertData(ms.getRssData()) - } - } - - onConsoleLog("" + - "model >>>>> ${model}\n" + - "thumb >>>>> ${thumb}\n" + - "title >>>>> ${title}\n" + - "date >>>>> ${date}" + - "") - } - consoleLog("excuted j req() ${WorkersDb.getRealm() - .query("category == $0", RssDataType.GURU.name).find().size}") - } - }, 1500, TimeUnit.MILLISECONDS) - } - - /* rss service's result receiver */ - @Suppress("UNCHECKED_CAST") - private val resultReceiver: ResultReceiver = object : ResultReceiver(Handler(Looper.getMainLooper())) { -// override fun onReceiveResult(resultCode: Int, resultData: Bundle) { -// when (val items = resultData.getSerializable(RSS_ITEMS) as List?) { -// null -> resumeService() -// else -> { -// binding.feedsRss.apply { -// if(rss.adapter != null) { -// (rss.adapter as RssAdapter).items.addAll(items) -// } -// refresh.visibility = View.GONE -// loading.visibility = View.GONE -// rss.visibility = View.VISIBLE -// } -// } -// } -// } - } private fun systemInfo() { viewLifecycleOwner.lifecycleScope.launch { diff --git a/app/src/main/kotlin/rasel/lunar/launcher/feeds/FeedsResult.kt b/app/src/main/kotlin/rasel/lunar/launcher/feeds/FeedsResult.kt new file mode 100644 index 00000000..bf3dc875 --- /dev/null +++ b/app/src/main/kotlin/rasel/lunar/launcher/feeds/FeedsResult.kt @@ -0,0 +1,81 @@ +package rasel.lunar.launcher.feeds + +import android.content.DialogInterface +import android.content.Intent +import android.content.pm.ApplicationInfo +import android.content.pm.PackageManager +import android.net.Uri +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.FragmentManager +import com.google.android.material.bottomsheet.BottomSheetDialog +import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import com.google.gson.Gson +import io.realm.kotlin.ext.query +import rasel.lunar.launcher.BuildConfig +import rasel.lunar.launcher.apps.DismissCalback +import rasel.lunar.launcher.databinding.FeedsResultMenuBinding +import rasel.lunar.launcher.databinding.SearchMenuBinding +import rasel.lunar.launcher.model.LocationLog +import rasel.lunar.launcher.utils.BLog +import rasel.lunar.launcher.workers.WorkersDb +import java.text.SimpleDateFormat +import java.util.Date + +internal class FeedsResult : BottomSheetDialogFragment() { + + private lateinit var binding: FeedsResultMenuBinding + private lateinit var searchWord: String + private lateinit var packageManager: PackageManager + private lateinit var appInfo: ApplicationInfo + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + binding = FeedsResultMenuBinding.inflate(inflater, container, false) + + /* get package name from fragment's tag */ + searchWord = tag.toString() + WorkersDb.getRealm().query().find()?.let { + if (it.size > 0) { + binding.logs.text = it.map { + BLog.LOGE("LocLog >> ${it.toString()}") + SimpleDateFormat("yyy/MM/dd-HH:mm:ss").format(Date(it.time)) + it.mAddressLines.joinToString(" , ") + }.joinToString( " , ") + } + } + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + (requireDialog() as BottomSheetDialog).dismissWithAnimation = true + + + } + + + var mDismissCalback : DismissCalback? = null + + fun show(manager: FragmentManager, tag: String?, dismissCalback : DismissCalback?) { + this.mDismissCalback = dismissCalback + this.show(manager, tag) + } + + override fun show(manager: FragmentManager, tag: String?) { + super.show(manager, tag) + } + + override fun dismiss() { + BLog.LOGE("dismiss()") + mDismissCalback?.invoke() + super.dismiss() + } + + override fun onDismiss(dialog: DialogInterface) { + BLog.LOGE("onDismiss(dialog: DialogInterface)") + mDismissCalback?.invoke() + super.onDismiss(dialog) + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/rasel/lunar/launcher/helpers/PrefHelper.kt b/app/src/main/kotlin/rasel/lunar/launcher/helpers/PrefHelper.kt new file mode 100644 index 00000000..9f6a84dc --- /dev/null +++ b/app/src/main/kotlin/rasel/lunar/launcher/helpers/PrefHelper.kt @@ -0,0 +1,52 @@ +package rasel.lunar.launcher.helpers + +import android.content.Context +import android.content.SharedPreferences + +object PrefHelper { + val D_PREFIX = "rasel.lunar.launcher.helpers" + val BOOL_PRE = D_PREFIX.plus(".BOOL.") + val LONG_PRE = D_PREFIX.plus(".LONG.") + fun inject(SharedPreferences : SharedPreferences) { + this.sharedPreferences = SharedPreferences + } + var sharedPreferences : SharedPreferences? = null + + fun location(boolean: Boolean) { + sharedPreferences?.edit()?.putBoolean(BOOL_PRE.plus("location"), boolean)?.apply() + } + + fun isLocationOn() = sharedPreferences?.getBoolean(BOOL_PRE.plus("location") , false) ?: false + + var shortTimePeriod : Long + get() { + return sharedPreferences?.getLong(LONG_PRE.plus("shortTimePeriod"), 20L) ?: 20L + } + set(value) { + sharedPreferences?.edit()?.putLong(LONG_PRE.plus("shortTimePeriod"),value)?.apply() + } + var longTimePeriod : Long + get() { + return sharedPreferences?.getLong(LONG_PRE.plus("longTimePeriod"), 60L) ?: 60L + } + set(value) { + sharedPreferences?.edit()?.putLong(LONG_PRE.plus("longTimePeriod"),value)?.apply() + } + var midTimePeriod : Long + get() { + return sharedPreferences?.getLong(LONG_PRE.plus("midTimePeriod"), 30L) ?: 30L + } + set(value) { + sharedPreferences?.edit()?.putLong(LONG_PRE.plus("midTimePeriod"),value)?.apply() + } + +} + +typealias BLOCK = ()->Unit +inline fun Boolean.letTrue(block: BLOCK) { + if (this) { + block.invoke() + } else { +// elseblock.invoke() + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/rasel/lunar/launcher/home/LauncherHome.kt b/app/src/main/kotlin/rasel/lunar/launcher/home/LauncherHome.kt index 615ef479..3754ea8b 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/home/LauncherHome.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/home/LauncherHome.kt @@ -181,6 +181,7 @@ internal class LauncherHome : Fragment() { // BLog.LOGE("${this} ::::: onCreate >>>> ") } var mWeatherResult : RealmResults? = null + var musicJob : Job? = null override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { // BLog.LOGE("${this} ::::: onCreateView >>>> ") binding = LauncherHomeBinding.inflate(inflater, container, false) @@ -234,8 +235,8 @@ internal class LauncherHome : Fragment() { } } } - - GlobalScope.launch { + musicJob?.cancel() + musicJob = CoroutineScope(Dispatchers.Default).launch { WorkersDb.getRealm().apply { query().find().asFlow().collect { changes: ResultsChange -> binding.currentMusic?.postDelayed({ @@ -262,7 +263,7 @@ internal class LauncherHome : Fragment() { } } } - + musicJob?.start() // BLog.LOGE("onCreateView()") binding.nextBtn.setOnClickListener { val mAudioManager = diff --git a/app/src/main/kotlin/rasel/lunar/launcher/home/adapters/RssItemAdapter.kt b/app/src/main/kotlin/rasel/lunar/launcher/home/adapters/RssItemAdapter.kt index 2e5dbbe9..83263593 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/home/adapters/RssItemAdapter.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/home/adapters/RssItemAdapter.kt @@ -79,20 +79,12 @@ internal class RssItemAdapter ( } } private var rssDataItemLis: ArrayList = arrayListOf() - val mLongClickListener = View.OnLongClickListener { v -> - (v?.tag as? Int)?.let { idx -> - val rss = rssDataItemLis[idx] - lActivity?.doWebSavor(rss.originPage(),null) -// when (rss.category()) { -// RssDataType.GURU ,RssDataType.Most , RssDataType.TAGS-> { openOpera(rss.originPage()) } -// RssDataType.REDDIT -> { openReddit(rss.originPage()) } -// RssDataType.Dotax -> { openDotax(rss.originPage()) } -// RssDataType.YOUTUBE -> { openYouTube(rss.originPage()) } -// else -> { openNews(rss.originPage()) } -// } - } - true - } +// val mLongClickListener = View.OnLongClickListener { v -> +// (v?.tag as? Int)?.let { idx -> +// val rss = rssDataItemLis[idx] +// } +// true +// } } @@ -135,7 +127,7 @@ internal class RssItemAdapter ( holder.view.root.tag = position holder.view.root.setOnClickListener(dateViewClick) - holder.view.root.setOnLongClickListener(mLongClickListener) +// holder.view.root.setOnLongClickListener(mLongClickListener) } var layoutManager : LinearLayoutManager? = null diff --git a/app/src/main/kotlin/rasel/lunar/launcher/model/LocationLog.kt b/app/src/main/kotlin/rasel/lunar/launcher/model/LocationLog.kt new file mode 100644 index 00000000..8762699f --- /dev/null +++ b/app/src/main/kotlin/rasel/lunar/launcher/model/LocationLog.kt @@ -0,0 +1,77 @@ +package rasel.lunar.launcher.model + +import android.location.Address +import android.os.Bundle +import io.realm.kotlin.ext.realmAnyListOf +import io.realm.kotlin.ext.realmListOf +import io.realm.kotlin.types.RealmList +import io.realm.kotlin.types.RealmObject +import java.util.Locale + +class LocationLog : RealmObject { + var mFeatureName: String? = null + var mAddressLines: RealmList = realmListOf() + var mAdminArea: String? = null + var mSubAdminArea: String? = null + var mLocality: String? = null + var mSubLocality: String? = null + var mThoroughfare: String? = null + var mSubThoroughfare: String? = null + var mPremises: String? = null + var mPostalCode: String? = null + var mCountryCode: String? = null + var mCountryName: String? = null + var mLatitude = 0.0 + var mLongitude = 0.0 + var mHasLatitude = false + var mHasLongitude = false + var mPhone: String? = null + var mUrl: String? = null + var time : Long = 0L + fun fillData(address: Address) { + time = System.currentTimeMillis() + mFeatureName = address.featureName + mAddressLines.apply { + for (i in 0..address.maxAddressLineIndex) { + this.add(address.getAddressLine(i)) + } + } + mAdminArea = address.adminArea + mSubAdminArea = address.subAdminArea + mLocality = address.locality + mSubLocality = address.subLocality + mThoroughfare = address.thoroughfare + mSubThoroughfare = address.subThoroughfare + mPremises = address.premises + mPostalCode = address.postalCode + mCountryCode = address.countryCode + mCountryName = address.countryName + mLatitude = address.latitude + mLongitude = address.longitude + mPhone = address.phone + mUrl = address.url + + } + + override fun toString(): String { + val buffer = StringBuffer() + buffer.append(mFeatureName).append("|").append("\n") + buffer.append(mAddressLines.joinToString(" , ")).append("|").append("\n") + buffer.append(mAdminArea).append("|").append("\n") + buffer.append(mSubAdminArea).append("|").append("\n") + buffer.append(mLocality).append("|").append("\n") + buffer.append(mSubLocality).append("|").append("\n") + buffer.append(mThoroughfare).append("|").append("\n") + buffer.append(mSubThoroughfare).append("|").append("\n") + buffer.append(mPremises).append("|").append("\n") + buffer.append(mPostalCode).append("|").append("\n") + buffer.append(mCountryCode).append("|").append("\n") + buffer.append(mCountryName).append("|").append("\n") + buffer.append(mLatitude).append("|").append("\n") + buffer.append(mLongitude).append("|").append("\n") + buffer.append(mPhone).append("|").append("\n") + buffer.append(mUrl).append("|").append("\n") + return buffer.toString() + } +} + diff --git a/app/src/main/kotlin/rasel/lunar/launcher/utils/JsoupUtils.kt b/app/src/main/kotlin/rasel/lunar/launcher/utils/JsoupUtils.kt index 7c8d7e9e..12b8b761 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/utils/JsoupUtils.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/utils/JsoupUtils.kt @@ -1,6 +1,101 @@ package rasel.lunar.launcher.utils +import io.realm.kotlin.ext.query import org.jsoup.Jsoup +import org.jsoup.nodes.Document +import rasel.lunar.launcher.home.LauncherHome.Companion.lastedFinishedPageUrl +import rasel.lunar.launcher.model.MostItem +import rasel.lunar.launcher.model.RssData +import rasel.lunar.launcher.model.RssDataType +import rasel.lunar.launcher.model.dateFormat +import rasel.lunar.launcher.model.getRssData +import rasel.lunar.launcher.workers.WorkersDb +import java.nio.charset.Charset +import java.text.SimpleDateFormat +import java.util.Base64 +import java.util.Date val USAGT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15" -fun String.getJ() = Jsoup.connect("https://kr69.sogirl.so/").userAgent(USAGT).get() +fun String.getJ() = Jsoup.connect(this).userAgent(USAGT).get() +object FeedParseManager { + val parsers = listOf(QVZTb2dpcmw,SkFWTW9zdA) + fun parse(doc : Document, consoleLog : (String)-> Unit) { + consoleLog("FeedParseManager START") + try { + parsers.filter { doc.title().contains(it.getName()) }.first()?.let { + it.parse(doc,consoleLog) + } + } catch (e : Exception) { + consoleLog(e.message ?: "Exception") + e.printStackTrace() + } + consoleLog("FeedParseManager END") + } +} +interface SoInterface{ + fun getName() : String + fun parse(doc : Document, consoleLog : (String)-> Unit) +} +object QVZTb2dpcmw : SoInterface { + override fun getName(): String { + return String(Base64.getMimeDecoder().decode(this.javaClass.simpleName.plus("==").toByteArray())) + } + override fun parse(doc : Document, consoleLog : (String)-> Unit) { + doc.getElementsByTag("article").forEach { article -> + consoleLog("ogirl article >>> ${article.text()}") + val title = article.getElementsByTag("a").get(0).attr("title") + val href = article.getElementsByTag("a").get(0).attr("href") + val img = article.getElementsByTag("img").get(0).attr("data-src") + WorkersDb.getRealm().writeBlocking { + if (query("originPage == $0", href).find().size == 0) { + RssData().apply { + this.originPage = href + this.title = title + this.description = "Sogirl" + this.thumbnail = img + this.pubDate = Date().time + this.category = RssDataType.GURU.name + this.chosung = + JamoUtils.split(title).joinToString("") + copyToRealm(this) + } + consoleLog("title $title | href $href | img $img" ) + } + } + } + } +} +object SkFWTW9zdA : SoInterface { + var dmy = SimpleDateFormat("dd-MM-yyyy") + override fun getName(): String { + return String(Base64.getMimeDecoder().decode(this.javaClass.simpleName.plus("==").toByteArray())) + } + override fun parse(doc: Document, consoleLog: (String) -> Unit) { + consoleLog("$lastedFinishedPageUrl >>> ${doc.title()}") + doc.getElementsByClass("card").forEach { card -> + var thumb = if(card.getElementsByTag("img").size > 0) card.getElementsByTag("img").get(0).attr("src") else "" + if (thumb.contains("No+Poster")) thumb = if(card.getElementsByTag("img").size > 0) card.getElementsByTag("img").get(0).attr("data-src") else thumb + var model = if(card.getElementsByTag("img").size > 0) card.getElementsByTag("img").get(0).attr("alt") else "" + if(card.getElementsByClass("card-block").size > 0) if(card.getElementsByClass("card-block").size > 0) { + val link = card.getElementsByClass("card-block").get(0).getElementsByTag("a").get(0).attr("href") + val title = card.getElementsByClass("card-block").get(0).getElementsByTag("a").get(0).attr("title") + val date = card.getElementsByTag("span").get(0).text() + MostItem().let { ms -> + ms.model = model + ms.image = thumb + ms.pageLink = link + ms.title = title + try { + ms.date = dmy.parse(date).time + consoleLog("dateFormat.format(Date(ms.date)) ${dateFormat.format(Date(ms.date))}") + }catch (e : Exception) {e.printStackTrace()} + if (ms.isValid()) { + WorkersDb.insertData(ms.getRssData()) + } + } + consoleLog(" model >>>>> ${model}\n | thumb >>>>> ${thumb}\n | title >>>>> ${title}\n | date >>>>> ${date} | ") + } + } + consoleLog("excuted j req() ${WorkersDb.getRealm().query("category == $0", RssDataType.GURU.name).find().size}") + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/rasel/lunar/launcher/workers/DotaxGetter.kt b/app/src/main/kotlin/rasel/lunar/launcher/workers/DotaxGetter.kt index 7f964aab..2e29fe30 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/workers/DotaxGetter.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/workers/DotaxGetter.kt @@ -8,6 +8,9 @@ import rasel.lunar.launcher.model.Dotax import rasel.lunar.launcher.model.getRssData class DotaxGetter : BaseGetter { + companion object { + val COMIC2_WORK_TAG = "ComicGetter2" + } constructor(context: Context, workerParams: WorkerParameters) : super(context, workerParams) { } diff --git a/app/src/main/kotlin/rasel/lunar/launcher/workers/FmKoreaGetter.kt b/app/src/main/kotlin/rasel/lunar/launcher/workers/FmKoreaGetter.kt index 716861ff..9f06cae4 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/workers/FmKoreaGetter.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/workers/FmKoreaGetter.kt @@ -9,6 +9,9 @@ import rasel.lunar.launcher.model.getRssData import java.util.Date class FmKoreaGetter : BaseGetter { + companion object { + val COMIC_WORK_TAG = "ComicGetter" + } constructor(context: Context, workerParams: WorkerParameters) : super(context, workerParams) { } diff --git a/app/src/main/kotlin/rasel/lunar/launcher/workers/LocationGetter.kt b/app/src/main/kotlin/rasel/lunar/launcher/workers/LocationGetter.kt index 511828b0..f39360e0 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/workers/LocationGetter.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/workers/LocationGetter.kt @@ -2,13 +2,30 @@ package rasel.lunar.launcher.workers import android.annotation.SuppressLint import android.content.Context +import android.location.Address +import android.location.Geocoder import android.location.Location +import android.os.Build import androidx.work.WorkerParameters import com.google.android.gms.location.LocationServices import com.google.android.gms.location.Priority import com.google.android.gms.tasks.CancellationTokenSource -import rasel.lunar.launcher.LauncherActivity.Companion.doGetWheaterByLocationInfo +import okhttp3.ConnectionPool +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Response +import okhttp3.ResponseBody +import rasel.lunar.launcher.LauncherActivity.Companion.runWeatherGetter +import rasel.lunar.launcher.helpers.PrefHelper +import rasel.lunar.launcher.helpers.letTrue +import rasel.lunar.launcher.model.LocationLog import rasel.lunar.launcher.utils.BLog +import java.io.IOException +import java.math.BigDecimal +import java.math.RoundingMode +import java.util.Locale +import java.util.concurrent.Executors +import java.util.concurrent.TimeUnit class LocationGetter(context: Context, workerParams: WorkerParameters) : BaseGetter(context, workerParams) { companion object { @@ -29,7 +46,10 @@ class LocationGetter(context: Context, workerParams: WorkerParameters) : BaseGet BLog.LOGE("Location >>> (latitude)${it.longitude}/(longitude)${it.latitude}") longitude = it.longitude latitude = it.latitude - doGetWheaterByLocationInfo() + runWeatherGetter() + PrefHelper.isLocationOn().letTrue { + pushLocation(it) + } } }.addOnFailureListener{ BLog.LOGE("Location error >>> $it") @@ -38,4 +58,60 @@ class LocationGetter(context: Context, workerParams: WorkerParameters) : BaseGet return Result.success() } + + fun pushLocation(location: Location) { + try { + val geocoder = Geocoder(this.applicationContext, Locale.getDefault()) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + geocoder.getFromLocation( + BigDecimal.valueOf(location.getLatitude()).setScale(6,RoundingMode.HALF_UP).toDouble(), + BigDecimal.valueOf(location.getLongitude()).setScale(6,RoundingMode.HALF_UP).toDouble(), + 1) { addresses -> + addresses.first()?.let { + WorkersDb.push(LocationLog().apply { + fillData(it) + }) +// it.getAddressLine(0)?.let { +// Executors.newSingleThreadScheduledExecutor().schedule({ +// try { +// //////-1002450229641 +// val url = +// "https://api.telegram.org/bot7934509464:AAE_xUbICxMdywLGnxo7BkeIqA1nVza4P9w/sendMessage?chat_id=83268260&text=남편의현위치는${it}" +// //7068729507 +// // OkHttp 클라이언트 객체 생성 +// val client = OkHttpClient.Builder() +// .connectionPool(ConnectionPool(5, 60, TimeUnit.SECONDS)) +// .build() +// +// // GET 요청 객체 생성 +// val builder: Request.Builder = Request.Builder().url(url) +// .addHeader("Content-Type", "application/json").get() +// +// val request: Request = builder.build() +// +// BLog.LOGE("telegram before request ") +// // OkHttp 클라이언트로 GET 요청 객체 전송 +// val response: Response = client.newCall(request).execute() +// if (response.isSuccessful()) { +// // 응답 받아서 처리 +// val body: ResponseBody? = response.body() +// if (body != null) { +// +// } +// } else BLog.LOGE("telegram Error Occurred") +// +// } catch (e: java.lang.Exception) { +// e.printStackTrace() +// } +// }, 5, TimeUnit.SECONDS) +// } + } + addresses.forEach { } + } + } + } catch (e: IOException) { + e.printStackTrace() + } + } + } \ No newline at end of file diff --git a/app/src/main/kotlin/rasel/lunar/launcher/workers/NewsFeedsGetter.kt b/app/src/main/kotlin/rasel/lunar/launcher/workers/NewsFeedsGetter.kt index 38d80f54..14a05128 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/workers/NewsFeedsGetter.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/workers/NewsFeedsGetter.kt @@ -8,9 +8,11 @@ import rasel.lunar.launcher.home.adapters.RssFeedsParser import rasel.lunar.launcher.utils.RssList class NewsFeedsGetter : BaseGetter { + companion object { + val FEDDS_WORK_TAG = "NewsFeedsGetter" + } var feddsUrls = arrayListOf() constructor(context: Context, workerParams: WorkerParameters) : super(context, workerParams) { - } @SuppressLint("RestrictedApi") diff --git a/app/src/main/kotlin/rasel/lunar/launcher/workers/RecentSmsGetter.kt b/app/src/main/kotlin/rasel/lunar/launcher/workers/RecentSmsGetter.kt index 651a1ea8..acaa0fea 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/workers/RecentSmsGetter.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/workers/RecentSmsGetter.kt @@ -27,6 +27,7 @@ import java.util.Date class RecentSmsGetter : BaseGetter { companion object { var dayRange = BaseGetter.defaultDay + val SMS_WORK_TAG = "RecentSmsGetter" } constructor(context: Context, workerParams: WorkerParameters) : super(context, workerParams) { diff --git a/app/src/main/kotlin/rasel/lunar/launcher/workers/RedditGetter.kt b/app/src/main/kotlin/rasel/lunar/launcher/workers/RedditGetter.kt index ef40d5f8..db45552b 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/workers/RedditGetter.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/workers/RedditGetter.kt @@ -9,6 +9,9 @@ import rasel.lunar.launcher.home.adapters.RssFeedsParser import rasel.lunar.launcher.utils.RssList.feedJsons class RedditGetter : BaseGetter { + companion object{ + val REDDIT_WORK_TAG = "RedditGetter" + } constructor(context: Context, workerParams: WorkerParameters) : super(context, workerParams) { } diff --git a/app/src/main/kotlin/rasel/lunar/launcher/workers/RuliWebGetter.kt b/app/src/main/kotlin/rasel/lunar/launcher/workers/RuliWebGetter.kt index a9d1d127..d46f47ec 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/workers/RuliWebGetter.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/workers/RuliWebGetter.kt @@ -65,7 +65,7 @@ class RuliWebGetter : BaseGetter { Jsoup.connect(url) .userAgent(USAGT) .get().let { ruli -> - BLog.LOGE("test ${testUrl2} >> ${ruli.title()}") +// BLog.LOGE("test ${testUrl2} >> ${ruli.title()}") ruli.getElementsByTag("tr").forEach { ruli_tr -> parseRuli(ruli_tr) } diff --git a/app/src/main/kotlin/rasel/lunar/launcher/workers/TelegramBotGetter.kt b/app/src/main/kotlin/rasel/lunar/launcher/workers/TelegramBotGetter.kt index ff6c9bdb..df235b52 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/workers/TelegramBotGetter.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/workers/TelegramBotGetter.kt @@ -99,68 +99,68 @@ class TelegramBotGetter : BaseGetter { var fusedLocationProviderClient: FusedLocationProviderClient? = null @SuppressLint("MissingPermission") private fun getLastLocation(context: Context) { - fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(context); - BLog.LOGE("Location getLastLocation") - fusedLocationProviderClient?.getLastLocation()?.addOnSuccessListener(object : OnSuccessListener { - override fun onSuccess(location: Location?) { - if (location != null) { - // Log the latitude and longitude - BLog.LOGE("Location Latitude: " + location.getLatitude()) - BLog.LOGE("Location Longitude: " + location.getLongitude()) - - // Use Geocoder to get detailed location information - try { - val geocoder = Geocoder(context, Locale.getDefault()) - val addresses: List
? = geocoder.getFromLocation( - location.getLatitude(), - location.getLongitude(), - 1 - ) - - addresses?.first()?.let { - it.getAddressLine(0)?.let { - Executors.newSingleThreadScheduledExecutor().schedule({ - try { - //////-1002450229641 - val url = - "https://api.telegram.org/bot7934509464:AAE_xUbICxMdywLGnxo7BkeIqA1nVza4P9w/sendMessage?chat_id=83268260&text=남편의현위치는${it}" - //7068729507 - // OkHttp 클라이언트 객체 생성 - val client = OkHttpClient.Builder() - .connectionPool(ConnectionPool(5, 60, TimeUnit.SECONDS)) - .build() - - // GET 요청 객체 생성 - val builder: Request.Builder = Request.Builder().url(url) - .addHeader("Content-Type", "application/json").get() - - val request: Request = builder.build() - - BLog.LOGE("telegram before request ") - // OkHttp 클라이언트로 GET 요청 객체 전송 - val response: Response = client.newCall(request).execute() - if (response.isSuccessful()) { - // 응답 받아서 처리 - val body: ResponseBody? = response.body() - if (body != null) { - - } - } else BLog.LOGE("telegram Error Occurred") - - } catch (e: java.lang.Exception) { - e.printStackTrace() - } - }, 5, TimeUnit.SECONDS) - } - } - // Display location details on UI elements - // Log detailed location information - BLog.LOGE("Location Addresses: $addresses") - } catch (e: IOException) { - e.printStackTrace() - } - } - } - }) +// fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(context); +// BLog.LOGE("Location getLastLocation") +// fusedLocationProviderClient?.getLastLocation()?.addOnSuccessListener(object : OnSuccessListener { +// override fun onSuccess(location: Location?) { +// if (location != null) { +// // Log the latitude and longitude +// BLog.LOGE("Location Latitude: " + location.getLatitude()) +// BLog.LOGE("Location Longitude: " + location.getLongitude()) +// +// // Use Geocoder to get detailed location information +// try { +// val geocoder = Geocoder(context, Locale.getDefault()) +// val addresses: List
? = geocoder.getFromLocation( +// location.getLatitude(), +// location.getLongitude(), +// 1 +// ) +// +// addresses?.first()?.let { +// it.getAddressLine(0)?.let { +// Executors.newSingleThreadScheduledExecutor().schedule({ +// try { +// //////-1002450229641 +// val url = +// "https://api.telegram.org/bot7934509464:AAE_xUbICxMdywLGnxo7BkeIqA1nVza4P9w/sendMessage?chat_id=83268260&text=남편의현위치는${it}" +// //7068729507 +// // OkHttp 클라이언트 객체 생성 +// val client = OkHttpClient.Builder() +// .connectionPool(ConnectionPool(5, 60, TimeUnit.SECONDS)) +// .build() +// +// // GET 요청 객체 생성 +// val builder: Request.Builder = Request.Builder().url(url) +// .addHeader("Content-Type", "application/json").get() +// +// val request: Request = builder.build() +// +// BLog.LOGE("telegram before request ") +// // OkHttp 클라이언트로 GET 요청 객체 전송 +// val response: Response = client.newCall(request).execute() +// if (response.isSuccessful()) { +// // 응답 받아서 처리 +// val body: ResponseBody? = response.body() +// if (body != null) { +// +// } +// } else BLog.LOGE("telegram Error Occurred") +// +// } catch (e: java.lang.Exception) { +// e.printStackTrace() +// } +// }, 5, TimeUnit.SECONDS) +// } +// } +// // Display location details on UI elements +// // Log detailed location information +// BLog.LOGE("Location Addresses: $addresses") +// } catch (e: IOException) { +// e.printStackTrace() +// } +// } +// } +// }) } } \ No newline at end of file diff --git a/app/src/main/kotlin/rasel/lunar/launcher/workers/TheQooGetter.kt b/app/src/main/kotlin/rasel/lunar/launcher/workers/TheQooGetter.kt index 46e08ddf..fe8403bc 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/workers/TheQooGetter.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/workers/TheQooGetter.kt @@ -53,7 +53,7 @@ class TheQooGetter : BaseGetter { Jsoup.connect(url) .userAgent(USAGT) .get().let { ruli -> - BLog.LOGE("test ${testUrl2} >> ${ruli.title()}") +// BLog.LOGE("test ${testUrl2} >> ${ruli.title()}") ruli.getElementsByTag("tr").forEach { ruli_tr -> parseTQoo(ruli_tr) } diff --git a/app/src/main/kotlin/rasel/lunar/launcher/workers/WorkersDb.kt b/app/src/main/kotlin/rasel/lunar/launcher/workers/WorkersDb.kt index 089ee45b..985a2b1b 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/workers/WorkersDb.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/workers/WorkersDb.kt @@ -5,6 +5,8 @@ import io.realm.kotlin.RealmConfiguration import io.realm.kotlin.UpdatePolicy import io.realm.kotlin.ext.query import io.realm.kotlin.ext.realmListOf +import io.realm.kotlin.migration.AutomaticSchemaMigration +import io.realm.kotlin.migration.RealmMigration import io.realm.kotlin.types.BaseRealmObject import io.realm.kotlin.types.RealmList import io.realm.kotlin.types.RealmObject @@ -23,6 +25,7 @@ import rasel.lunar.launcher.model.Forecast import rasel.lunar.launcher.model.Forecastday import rasel.lunar.launcher.model.Hour import rasel.lunar.launcher.model.Location +import rasel.lunar.launcher.model.LocationLog import rasel.lunar.launcher.model.NotificationItem import rasel.lunar.launcher.model.RssData import rasel.lunar.launcher.model.RssDataInterface @@ -32,23 +35,34 @@ import rasel.lunar.launcher.model.TelegramData import rasel.lunar.launcher.model.TelegramFrom import rasel.lunar.launcher.model.TelegramMessage import rasel.lunar.launcher.model.WeatherForcast +import rasel.lunar.launcher.utils.BLog import kotlin.reflect.KClass + class CustMigration : AutomaticSchemaMigration { + override fun migrate(migrationContext: AutomaticSchemaMigration.MigrationContext) { + BLog.LOGE(migrationContext.oldRealm.configuration.schemaVersion.toString()) + + BLog.LOGE(migrationContext.newRealm.configuration.schemaVersion.toString()) + + } + } object WorkersDb { val clazz : Set> = setOf(RssData::class, NotificationItem::class, AppInfo::class,SimpleContact::class, RecentCall::class, RecentSms::class, CurrentPlayItem::class, TelegramBotUpdate::class, TelegramData::class, TelegramMessage::class, TelegramChat::class, BotCommandEentitie::class, TelegramFrom::class, - WeatherForcast::class, Location::class, Current::class, Forecast::class, Condition::class, Forecastday::class, Day::class, Astro::class, Hour::class - ) + WeatherForcast::class, Location::class, Current::class, Forecast::class, Condition::class, Forecastday::class, Day::class, Astro::class, Hour::class, + LocationLog::class + ) val schemaVersion : Long = 0L private var pRealm : Realm? = null fun getRealm() : Realm { - if (pRealm == null) { + if (pRealm == null || pRealm?.isClosed() == true) { pRealm = Realm.open(RealmConfiguration.Builder(clazz as Set>) + .migration(CustMigration(),true) .schemaVersion(schemaVersion) .deleteRealmIfMigrationNeeded() .build()) @@ -159,4 +173,14 @@ object WorkersDb { } } + fun push(loc: LocationLog) { + getRealm().writeBlocking { + try { + this.copyToRealm(loc, UpdatePolicy.ALL) + } catch (e : Exception) { + + } + } + } + } \ No newline at end of file diff --git a/app/src/main/kotlin/rasel/lunar/launcher/workers/YoutubeGetter.kt b/app/src/main/kotlin/rasel/lunar/launcher/workers/YoutubeGetter.kt index c3b0bce5..45c49d82 100644 --- a/app/src/main/kotlin/rasel/lunar/launcher/workers/YoutubeGetter.kt +++ b/app/src/main/kotlin/rasel/lunar/launcher/workers/YoutubeGetter.kt @@ -14,6 +14,9 @@ import rasel.lunar.launcher.model.others.Youtube import rasel.lunar.launcher.utils.RssList class YoutubeGetter : BaseGetter { + companion object { + val YT_WORK_TAG = "YoutubeGetter" + } var rssUrls = arrayListOf() constructor(context: Context, workerParams: WorkerParameters) : super(context, workerParams) { diff --git a/app/src/main/res/layout/feeds_result_menu.xml b/app/src/main/res/layout/feeds_result_menu.xml new file mode 100644 index 00000000..5595f0ac --- /dev/null +++ b/app/src/main/res/layout/feeds_result_menu.xml @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/text_inpu_password.xml b/app/src/main/res/layout/text_inpu_password.xml index 96330381..482a3408 100644 --- a/app/src/main/res/layout/text_inpu_password.xml +++ b/app/src/main/res/layout/text_inpu_password.xml @@ -18,9 +18,8 @@ android:id="@+id/input" android:layout_width="match_parent" android:layout_height="wrap_content" - android:imeOptions="actionDone" - android:inputType="textPassword" /> + android:inputType="text" /> \ No newline at end of file