From 6c4d7e68f61253f0104939f7c0ac5fecce0646c7 Mon Sep 17 00:00:00 2001 From: lunaticbum Date: Mon, 25 Aug 2025 09:45:58 +0900 Subject: [PATCH] .. --- app/build.gradle.kts | 2 +- .../bums/lunatic/launcher/LunaticLauncher.kt | 2 +- .../bums/lunatic/launcher/home/RssHome.kt | 21 ++- .../lunatic/launcher/home/WebBottomSheet.kt | 4 +- .../launcher/settings/SettingsActivity.kt | 34 ++-- .../lunatic/launcher/settings/childs/Apps.kt | 56 +++---- .../launcher/settings/childs/HomeSettings.kt | 28 ++-- .../lunatic/launcher/settings/childs/Misc.kt | 43 ++++- .../settings/childs/WeatherSettings.kt | 29 +--- app/src/main/res/layout/settings_activity.xml | 69 ++++---- app/src/main/res/layout/settings_apps.xml | 154 +++++++++--------- .../res/layout/settings_privit_service.xml | 18 ++ app/src/main/res/layout/settings_todo.xml | 154 +++++++++--------- app/src/main/res/layout/settings_weather.xml | 76 ++++----- app/src/main/res/values/strings.xml | 2 +- 15 files changed, 369 insertions(+), 323 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ced53b4f..8b14b718 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -94,7 +94,7 @@ dependencies { implementation ("com.ibm.icu:icu4j:68.1") implementation (kotlin("stdlib", version = kotlinVersion)) implementation ("com.github.cachapa:ExpandableLayout:2.9.2") - implementation ("com.squareup.picasso:picasso:2.71828") + implementation ("androidx.work:work-runtime:2.10.0") implementation ("com.google.code.gson:gson:2.11.0") implementation ("io.realm.kotlin:library-base:2.1.0") diff --git a/app/src/main/kotlin/bums/lunatic/launcher/LunaticLauncher.kt b/app/src/main/kotlin/bums/lunatic/launcher/LunaticLauncher.kt index 8cb4d5e8..b9f0cbb6 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/LunaticLauncher.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/LunaticLauncher.kt @@ -82,7 +82,7 @@ internal class LunaticLauncher : Application() { .downloader(OkHttp3Downloader(okHttpClient)) .build() -// 앱 전체에 해당 인스턴스를 사용하려면 + // 앱 전체에 해당 인스턴스를 사용하려면 Picasso.setSingletonInstance(picasso) } diff --git a/app/src/main/kotlin/bums/lunatic/launcher/home/RssHome.kt b/app/src/main/kotlin/bums/lunatic/launcher/home/RssHome.kt index 1ca14544..f15c0b9b 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/home/RssHome.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/home/RssHome.kt @@ -27,6 +27,7 @@ import android.net.Uri import android.os.Bundle import android.os.Handler import android.os.Looper +import android.util.Log import android.view.LayoutInflater import android.view.MotionEvent import android.view.PointerIcon @@ -447,13 +448,31 @@ internal class RssHome : Fragment() { binding.layoutRssSummary.scrollView.scrollTo(0,0) var vote = it.vote var read = it.read + var keyword = "" it.title?.let { Blog.LOGE(it) + keyword = it binding.layoutRssSummary.title.text = it.replace(Regex("[\\r\\n]+"), " ").plus( "\n[V:${if (vote) { "O" }else { "X" }} , R:${read + 1}]") + + val regex = Regex("[A-Za-z0-9-]+") + val pattern = Regex("^(?=[A-Za-z0-9-]*$)(?=.*[A-Za-z])(?=.*\\d)(?=.*-)[A-Za-z0-9-]+$") + val results = regex.findAll(it) + .map { + Blog.LOGE("Regex:map >>> ${it.value}") + it.value } + .filter { + Blog.LOGE("Regex:filter >>> ${it.matches(pattern)}") + Blog.LOGE("Regex:filter >>> ${!it.contains(" ")}") + it.matches(pattern) && !it.contains(" ") } + .toList() + if (results.isNotEmpty()) { + keyword = results.first() + } + Blog.LOGE("Regex:results >>> ${results}") } it.pubDate()?.let { @@ -485,7 +504,7 @@ internal class RssHome : Fragment() { binding.layoutRssSummary.screenLink.text = it } if (it.getMagnet().length < 10) { - binding.layoutRssSummary.smallg.loadUrl("https://btsearch.love/en/search?keyword=${it.title}") + binding.layoutRssSummary.smallg.loadUrl("https://btsearch.love/en/search?keyword=${keyword}") } else { binding.layoutRssSummary.smallg.visibility = View.GONE } diff --git a/app/src/main/kotlin/bums/lunatic/launcher/home/WebBottomSheet.kt b/app/src/main/kotlin/bums/lunatic/launcher/home/WebBottomSheet.kt index 2bd0737f..42b39f65 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/home/WebBottomSheet.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/home/WebBottomSheet.kt @@ -115,10 +115,10 @@ class WebBottomSheet : BottomSheetDialogFragment() { inputKeyword.setOnEditorActionListener { _, actionId, _ -> if (actionId == EditorInfo.IME_ACTION_SEARCH) { val keyword = inputKeyword.text.toString() - if (keyword.isNotEmpty()) { +// if (keyword.isNotEmpty()) { triggerSearchWithDebounce(keyword) dismiss() // 필요 시 닫기 - } +// } true } else { false diff --git a/app/src/main/kotlin/bums/lunatic/launcher/settings/SettingsActivity.kt b/app/src/main/kotlin/bums/lunatic/launcher/settings/SettingsActivity.kt index 864b3feb..e7848547 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/settings/SettingsActivity.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/settings/SettingsActivity.kt @@ -75,13 +75,13 @@ internal class SettingsActivity : CommonActivity() { settingsPrefs = this.getSharedPreferences(PREFS_SETTINGS, 0) /* launch child settings dialogs on button clicks */ - binding.timeDate.setOnClickListener { - TopInfos().show(supportFragmentManager, BOTTOM_SHEET_TAG) - } +// binding.timeDate.setOnClickListener { +// TopInfos().show(supportFragmentManager, BOTTOM_SHEET_TAG) +// } - binding.weather.setOnClickListener { - WeatherSettings().show(supportFragmentManager, BOTTOM_SHEET_TAG) - } +// binding.weather.setOnClickListener { +// WeatherSettings().show(supportFragmentManager, BOTTOM_SHEET_TAG) +// } binding.todo.setOnClickListener { HomeSettings().show(supportFragmentManager, BOTTOM_SHEET_TAG) @@ -91,17 +91,17 @@ internal class SettingsActivity : CommonActivity() { Apps().show(supportFragmentManager, BOTTOM_SHEET_TAG) } - binding.appearances.setOnClickListener { - Appearances().show(supportFragmentManager, BOTTOM_SHEET_TAG) - } +// binding.appearances.setOnClickListener { +// Appearances().show(supportFragmentManager, BOTTOM_SHEET_TAG) +// } binding.misc.setOnClickListener { Misc().show(supportFragmentManager, BOTTOM_SHEET_TAG) } - binding.advance.setOnClickListener { - Advance().show(supportFragmentManager, BOTTOM_SHEET_TAG) - } +// binding.advance.setOnClickListener { +// Advance().show(supportFragmentManager, BOTTOM_SHEET_TAG) +// } /* about and support dialogs */ binding.about.setOnClickListener { aboutDialog() } @@ -172,17 +172,17 @@ internal class SettingsActivity : CommonActivity() { if (path.exists() == false) { path.mkdirs() } - saveObjToJson(path,"prefSettings.txt",PrefHelper.getSettings()) + saveObjToJson(path,"prefSettings.json",PrefHelper.getSettings()) WorkersDb.getRealm().apply { val foundAppInfo = query().find() Blog.LOGE("foundAppInfo >>> ${foundAppInfo}") val apps = arrayListOf().apply { addAll((copyFromRealm(foundAppInfo))) } Blog.LOGE("foundAppInfo >>> ${apps.size}") - saveObjToJson(path,"appInfos.txt",apps) + saveObjToJson(path,"appInfos.json",apps) val foundSimpleContact = query().find() Blog.LOGE("foundSimpleContact >>> ${foundSimpleContact.size}") val contacts = arrayListOf().apply { addAll(copyFromRealm(foundSimpleContact)) } - saveObjToJson(path,"contactInfos.txt",contacts) + saveObjToJson(path,"contactInfos.json",contacts) } } /* affiliate button */ @@ -203,12 +203,12 @@ internal class SettingsActivity : CommonActivity() { val file = File(path, fileName) if (path.exists() && file.exists()) { val retMap = readMap(file) - decodeString(File(path, "appInfos.txt"))?.let { + decodeString(File(path, "appInfos.json"))?.let { val appInfos = Gson().fromJson(it, object : TypeToken?>() {}.type) as ArrayList Blog.LOGE("appInfos >>>> ${appInfos.size}") WorkersDb.getRealm().writeBlocking { appInfos.forEach { copyToRealm(it,UpdatePolicy.ALL) } } } - decodeString(File(path,"contactInfos.txt"))?.let { + decodeString(File(path,"contactInfos.json"))?.let { val contacts = Gson().fromJson(it, object : TypeToken?>() {}.type) as ArrayList Blog.LOGE("contacts >>>> ${contacts.size}") WorkersDb.getRealm().writeBlocking { contacts.forEach { copyToRealm(it,UpdatePolicy.ALL) } } diff --git a/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/Apps.kt b/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/Apps.kt index 4e58dc3a..758645a7 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/Apps.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/Apps.kt @@ -63,29 +63,29 @@ internal class Apps : BottomSheetDialogFragment() { packageManager = requireActivity().packageManager - binding.keyboardAutoGroup.isChecked = PrefBoolean.openWithKayboard.get() - binding.keyboardAutoGroup.setOnCheckedChangeListener { c,v -> - settingsChanged = true - PrefBoolean.openWithKayboard.set(v) - } - - binding.quickLaunchGroup.isChecked = PrefBoolean.useQuickLaunch.get() - binding.quickLaunchGroup.setOnCheckedChangeListener { c,v -> - settingsChanged = true - PrefBoolean.useQuickLaunch.get(v) - } - - binding.appsCountGroup.isChecked = PrefBoolean.showAppResultCount.get() - binding.appsCountGroup.setOnCheckedChangeListener { c,v -> - settingsChanged = true - PrefBoolean.showAppResultCount.set(v) - } - - - ((PrefLong.maxQueryCount.get(18L) as? Long)?.toFloat() ?: 18F).let { - binding.columnsCountTitle.text = getString(R.string.grid_columns_count) +" [${it.toInt()}]" - binding.columnsCount.value = it - } +// binding.keyboardAutoGroup.isChecked = PrefBoolean.openWithKayboard.get() +// binding.keyboardAutoGroup.setOnCheckedChangeListener { c,v -> +// settingsChanged = true +// PrefBoolean.openWithKayboard.set(v) +// } +// +// binding.quickLaunchGroup.isChecked = PrefBoolean.useQuickLaunch.get() +// binding.quickLaunchGroup.setOnCheckedChangeListener { c,v -> +// settingsChanged = true +// PrefBoolean.useQuickLaunch.get(v) +// } +// +// binding.appsCountGroup.isChecked = PrefBoolean.showAppResultCount.get() +// binding.appsCountGroup.setOnCheckedChangeListener { c,v -> +// settingsChanged = true +// PrefBoolean.showAppResultCount.set(v) +// } +// +// +// ((PrefLong.maxQueryCount.get(18L) as? Long)?.toFloat() ?: 18F).let { +// binding.columnsCountTitle.text = getString(R.string.grid_columns_count) +" [${it.toInt()}]" +// binding.columnsCount.value = it +// } PrefLong.shortTimePeriod.get(20L).let { binding.shortTimeTitle.text = getString(R.string.shortTimeTitle) +" [${it.toInt()}분 마다]" @@ -122,11 +122,11 @@ internal class Apps : BottomSheetDialogFragment() { (requireDialog() as BottomSheetDialog).dismissWithAnimation = true - binding.columnsCount.addOnChangeListener(Slider.OnChangeListener { _, value, _ -> - settingsChanged = true - PrefLong.maxQueryCount.set(value.toLong()) - binding.columnsCountTitle.text = getString(R.string.grid_columns_count) +" [${value.toInt()}]" - }) +// binding.columnsCount.addOnChangeListener(Slider.OnChangeListener { _, value, _ -> +// settingsChanged = true +// PrefLong.maxQueryCount.set(value.toLong()) +// binding.columnsCountTitle.text = getString(R.string.grid_columns_count) +" [${value.toInt()}]" +// }) binding.shortTime.addOnChangeListener(Slider.OnChangeListener { _, value, _ -> settingsChanged = true diff --git a/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/HomeSettings.kt b/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/HomeSettings.kt index 63a5c019..25a1364d 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/HomeSettings.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/HomeSettings.kt @@ -52,20 +52,20 @@ internal class HomeSettings : BottomSheetDialogFragment() { setTableItem(binding.normal04) - binding.callInfo.isChecked = PrefBoolean.showCallHistory.get(false) - binding.callInfo.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.showCallHistory.set(isChecked) - settingsChanged = true} - binding.smsInfos.isChecked = PrefBoolean.showSMSHistory.get(false) - binding.smsInfos.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.showSMSHistory.set(isChecked) - settingsChanged = true} - binding.notificationInfos.isChecked = PrefBoolean.showNotificationHistory.get(false) - binding.notificationInfos.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.showNotificationHistory.set(isChecked) - settingsChanged = true} - binding.nowPlaying.isChecked = PrefBoolean.showNowPlaying.get(false) - binding.nowPlaying.setOnCheckedChangeListener { buttonView, isChecked -> - PrefBoolean.showNowPlaying.set(isChecked) - settingsChanged = true - } +// binding.callInfo.isChecked = PrefBoolean.showCallHistory.get(false) +// binding.callInfo.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.showCallHistory.set(isChecked) +// settingsChanged = true} +// binding.smsInfos.isChecked = PrefBoolean.showSMSHistory.get(false) +// binding.smsInfos.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.showSMSHistory.set(isChecked) +// settingsChanged = true} +// binding.notificationInfos.isChecked = PrefBoolean.showNotificationHistory.get(false) +// binding.notificationInfos.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.showNotificationHistory.set(isChecked) +// settingsChanged = true} +// binding.nowPlaying.isChecked = PrefBoolean.showNowPlaying.get(false) +// binding.nowPlaying.setOnCheckedChangeListener { buttonView, isChecked -> +// PrefBoolean.showNowPlaying.set(isChecked) +// settingsChanged = true +// } diff --git a/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/Misc.kt b/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/Misc.kt index 785a274f..556974f3 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/Misc.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/Misc.kt @@ -24,6 +24,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.doOnTextChanged +import bums.lunatic.launcher.R import bums.lunatic.launcher.databinding.SettingsPrivitServiceBinding import bums.lunatic.launcher.helpers.Constants.Companion.KEY_RSS_URL import bums.lunatic.launcher.helpers.Constants.Companion.KEY_RSS_URL2 @@ -31,10 +32,28 @@ import bums.lunatic.launcher.helpers.PrefString import bums.lunatic.launcher.settings.SettingsActivity.Companion.settingsPrefs import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import com.google.android.material.dialog.MaterialAlertDialogBuilder import java.util.Objects +import kotlin.system.exitProcess -internal class Misc : BottomSheetDialogFragment() { +open class SettingChild : BottomSheetDialogFragment() { + protected var settingsChanged: Boolean = false + override fun onDismiss(dialog: DialogInterface) { + super.onDismiss(dialog) + if (settingsChanged) { + MaterialAlertDialogBuilder(requireActivity()) + .setTitle(R.string.restart_now) + .setMessage(R.string.restart_message) + .setPositiveButton(R.string.restart) { _, _ -> + exitProcess(0) + } + .setNeutralButton(R.string.later, null) + .show() + } + } +} +internal class Misc : SettingChild() { private lateinit var binding : SettingsPrivitServiceBinding @@ -43,26 +62,32 @@ internal class Misc : BottomSheetDialogFragment() { /* initialize views according to the saved values */ - - binding.inputFeedUrl.setText(PrefString.telegramBotApi.get("")) binding.inputFeedUrl.doOnTextChanged { t,s,b,l -> PrefString.telegramBotApi.set(t.toString()) - + settingsChanged = true } binding.inputFeedUrl2.setText(PrefString.telegramMyId.get("")) binding.inputFeedUrl2.doOnTextChanged { t,s,b,l -> PrefString.telegramMyId.set(t.toString()) - + settingsChanged = true } binding.inputFeedUrl3.setText(PrefString.telegramSendTarget.get("")) binding.inputFeedUrl3.doOnTextChanged { t,s,b,l -> PrefString.telegramSendTarget.set(t.toString()) - + settingsChanged = true } binding.inputFeedUrl4.setText(PrefString.locationApi.get("")) - binding.inputFeedUrl4.doOnTextChanged { t,s,b,l -> PrefString.locationApi.set(t.toString())} + binding.inputFeedUrl4.doOnTextChanged { t,s,b,l -> PrefString.locationApi.set(t.toString()) + settingsChanged = true + } binding.inputFeedUrl5.setText(PrefString.carName.get("")) - binding.inputFeedUrl5.doOnTextChanged { t,s,b,l -> PrefString.carName.set(t.toString())} - + binding.inputFeedUrl5.doOnTextChanged { t,s,b,l -> PrefString.carName.set(t.toString()) + settingsChanged = true + } + binding.inputOwm.setText(PrefString.weatherApiKey.get("")) + binding.inputOwm.doOnTextChanged { text, start, before, count -> + PrefString.weatherApiKey.set(text.toString()) + settingsChanged = true + } return binding.root } diff --git a/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/WeatherSettings.kt b/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/WeatherSettings.kt index fa7439a8..90395315 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/WeatherSettings.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/settings/childs/WeatherSettings.kt @@ -33,23 +33,6 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlin.system.exitProcess -open class SettingChild : BottomSheetDialogFragment() { - protected var settingsChanged: Boolean = false - override fun onDismiss(dialog: DialogInterface) { - super.onDismiss(dialog) - if (settingsChanged) { - MaterialAlertDialogBuilder(requireActivity()) - .setTitle(R.string.restart_now) - .setMessage(R.string.restart_message) - .setPositiveButton(R.string.restart) { _, _ -> - exitProcess(0) - } - .setNeutralButton(R.string.later, null) - .show() - } - } -} - internal class WeatherSettings : SettingChild() { private lateinit var binding : SettingsWeatherBinding @@ -64,12 +47,12 @@ internal class WeatherSettings : SettingChild() { PrefString.weatherApiKey.set(text.toString()) settingsChanged = true } - binding.dress.isChecked = PrefBoolean.weatherDress.get(false) - binding.weather.isChecked = PrefBoolean.weatherState.get(false) - binding.weather.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.weatherState.set(isChecked) - settingsChanged = true} - binding.dress.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.weatherDress.set(isChecked) - settingsChanged = true} +// binding.dress.isChecked = PrefBoolean.weatherDress.get(false) +// binding.weather.isChecked = PrefBoolean.weatherState.get(false) +// binding.weather.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.weatherState.set(isChecked) +// settingsChanged = true} +// binding.dress.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.weatherDress.set(isChecked) +// settingsChanged = true} return binding.root } diff --git a/app/src/main/res/layout/settings_activity.xml b/app/src/main/res/layout/settings_activity.xml index 24699e48..c784e171 100644 --- a/app/src/main/res/layout/settings_activity.xml +++ b/app/src/main/res/layout/settings_activity.xml @@ -19,14 +19,15 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/lunar_settings" - android:textColor="?attr/colorControlNormal" /> + android:textStyle="bold" + android:textColor="@color/white" /> - + + + + + + + + - + + + + + + + + - + + + + + + + + - + + + + + + + + - + + + + + + + + + - + + + + + + + + + - + + + + + + + + + + - + + + + + + + + + - + + + + + + + + + + - + + + + + + + + + - + + + + + + + + + + - + + + + + + + + + + + app:layout_constraintTop_toTopOf="parent" /> + + + diff --git a/app/src/main/res/layout/settings_todo.xml b/app/src/main/res/layout/settings_todo.xml index cc292403..ef2e2177 100644 --- a/app/src/main/res/layout/settings_todo.xml +++ b/app/src/main/res/layout/settings_todo.xml @@ -5,26 +5,26 @@ android:layout_height="wrap_content" android:padding="@dimen/twelve"> - + + + + + + + + + - + + + + + + + + + + + app:layout_constraintTop_toTopOf="parent" /> - + + + + + + + + + - + + + + + + + + + + - + + + + + + + + + - + + + + + + + + + + - + + + + + + + + + - + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/settings_weather.xml b/app/src/main/res/layout/settings_weather.xml index 937558db..2733aca1 100644 --- a/app/src/main/res/layout/settings_weather.xml +++ b/app/src/main/res/layout/settings_weather.xml @@ -27,47 +27,47 @@ - + + + + + + + + + - + + + + + + + + + + - + + + + + + + + + - + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 60d9a42f..18591341 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -79,7 +79,7 @@ Light List List with Icon - Lunar Settings + Bum\'s Settings Misc Device Uptime\nSystem Active\nMemory Threshold\nBattery Temperature\nBattery Voltage