..
This commit is contained in:
@@ -82,7 +82,7 @@ internal class LunaticLauncher : Application() {
|
||||
.downloader(OkHttp3Downloader(okHttpClient))
|
||||
.build()
|
||||
|
||||
// 앱 전체에 해당 인스턴스를 사용하려면
|
||||
// 앱 전체에 해당 인스턴스를 사용하려면
|
||||
Picasso.setSingletonInstance(picasso)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<AppInfo>().find()
|
||||
Blog.LOGE("foundAppInfo >>> ${foundAppInfo}")
|
||||
val apps = arrayListOf<AppInfo>().apply { addAll((copyFromRealm(foundAppInfo))) }
|
||||
Blog.LOGE("foundAppInfo >>> ${apps.size}")
|
||||
saveObjToJson(path,"appInfos.txt",apps)
|
||||
saveObjToJson(path,"appInfos.json",apps)
|
||||
val foundSimpleContact = query<SimpleContact>().find()
|
||||
Blog.LOGE("foundSimpleContact >>> ${foundSimpleContact.size}")
|
||||
val contacts = arrayListOf<SimpleContact>().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<ArrayList<AppInfo?>?>() {}.type) as ArrayList<AppInfo>
|
||||
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<ArrayList<SimpleContact?>?>() {}.type) as ArrayList<SimpleContact>
|
||||
Blog.LOGE("contacts >>>> ${contacts.size}")
|
||||
WorkersDb.getRealm().writeBlocking { contacts.forEach { copyToRealm(it,UpdatePolicy.ALL) } }
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user