Compare commits

...

2 Commits

Author SHA1 Message Date
e646a72418 ... 2025-08-25 15:20:30 +09:00
6c4d7e68f6 .. 2025-08-25 09:45:58 +09:00
26 changed files with 490 additions and 436 deletions

View File

@ -94,7 +94,7 @@ dependencies {
implementation ("com.ibm.icu:icu4j:68.1") implementation ("com.ibm.icu:icu4j:68.1")
implementation (kotlin("stdlib", version = kotlinVersion)) implementation (kotlin("stdlib", version = kotlinVersion))
implementation ("com.github.cachapa:ExpandableLayout:2.9.2") implementation ("com.github.cachapa:ExpandableLayout:2.9.2")
implementation ("com.squareup.picasso:picasso:2.71828")
implementation ("androidx.work:work-runtime:2.10.0") implementation ("androidx.work:work-runtime:2.10.0")
implementation ("com.google.code.gson:gson:2.11.0") implementation ("com.google.code.gson:gson:2.11.0")
implementation ("io.realm.kotlin:library-base:2.1.0") implementation ("io.realm.kotlin:library-base:2.1.0")

View File

@ -26,7 +26,6 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
import android.content.res.Configuration import android.content.res.Configuration
import android.graphics.Color
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
@ -485,14 +484,24 @@ open class LauncherActivity : CommonActivity() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
lActivity = this lActivity = this
DynamicColors.applyToActivityIfAvailable(this) // DynamicColors.applyToActivityIfAvailable(this)
settingsPrefs = getSharedPreferences(PREFS_SETTINGS, 0) settingsPrefs = getSharedPreferences(PREFS_SETTINGS, 0)
binding = LauncherActivityBinding.inflate(layoutInflater) binding = LauncherActivityBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
HeadsetActionButtonReceiver.register(this) HeadsetActionButtonReceiver.register(this)
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, windowInsets ->
// 시스템바 인셋 가져오기 (상단 상태바 + 하단 네비게이션바)
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
// 뷰에 패딩 적용 (겹치지 않도록)
view.setPadding(insets.left, insets.top, insets.right, insets.bottom)
// 변경된 인셋 반환
WindowInsetsCompat.CONSUMED
}
/* handle navigation back events */ /* handle navigation back events */
handleBackPress() handleBackPress()
@ -502,6 +511,13 @@ open class LauncherActivity : CommonActivity() {
showContents(binding.feeds.id) showContents(binding.feeds.id)
binding.floatingActionMenu.setOnTouchListener { v,e->
if (binding.floatingActionMenu.isOpened) {
binding.floatingActionMenu.close(true)
return@setOnTouchListener true
}
return@setOnTouchListener false
}
binding.floatingActionMenu.setOnMenuButtonClickListener { v-> binding.floatingActionMenu.setOnMenuButtonClickListener { v->
Blog.LOGE("v >> ${v}") Blog.LOGE("v >> ${v}")
showContents(v.id) showContents(v.id)
@ -614,16 +630,10 @@ open class LauncherActivity : CommonActivity() {
super.onDestroy() super.onDestroy()
} }
// var blutoothManager : BluetoothManager? = null
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
// blutoothManager = BluetoothManager(this)
// blutoothManager?.register()
// blutoothManager?.initBluetoothAdapter()
// blutoothManager?.blueToothState()
// blutoothManager?.getPairedDevices()
statusBarView()
setBgColor()
} }
@RequiresApi(Build.VERSION_CODES.O_MR1) @RequiresApi(Build.VERSION_CODES.O_MR1)
@ -647,42 +657,6 @@ open class LauncherActivity : CommonActivity() {
} }
val appDrawer by lazy { AppDrawer() }
fun switchAppDrawer() {
startActivity(Intent(this,AppDrawer::class.java))
}
private fun setBgColor() {
binding.root.setBackgroundColor(Color.parseColor("#22000000"))
}
private fun statusBarView() {
if (settingsPrefs.getBoolean(KEY_STATUS_BAR, false)) {
/* hide status bar */
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
window.insetsController?.hide(WindowInsets.Type.statusBars())
} else {
@Suppress("DEPRECATION")
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
topPadding(false)
} else {
/* show status bar */
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
window.insetsController?.show(WindowInsets.Type.statusBars())
} else {
@Suppress("DEPRECATION")
window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
topPadding(true)
}
}
/* alternative of deprecated onBackPressed method */ /* alternative of deprecated onBackPressed method */
private fun handleBackPress() { private fun handleBackPress() {
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {

View File

@ -20,8 +20,8 @@ package bums.lunatic.launcher
import android.app.Application import android.app.Application
import android.content.ComponentCallbacks2 import android.content.ComponentCallbacks2
import android.content.Context
import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteDatabase
import android.net.Uri
import bums.lunatic.launcher.helpers.HourlyLogWriter import bums.lunatic.launcher.helpers.HourlyLogWriter
import bums.lunatic.launcher.helpers.PrefHelper import bums.lunatic.launcher.helpers.PrefHelper
import bums.lunatic.launcher.utils.Blog import bums.lunatic.launcher.utils.Blog
@ -30,12 +30,9 @@ import com.squareup.picasso.Picasso
import kr.lunaticbum.Base import kr.lunaticbum.Base
import okhttp3.Cache import okhttp3.Cache
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import org.json.JSONObject
import org.mozilla.geckoview.ExperimentDelegate
import org.mozilla.geckoview.GeckoResult
import org.mozilla.geckoview.GeckoRuntime
import org.mozilla.geckoview.GeckoRuntimeSettings
import java.io.File import java.io.File
import java.io.IOException
import java.net.HttpURLConnection
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@ -64,16 +61,17 @@ internal class LunaticLauncher : Application() {
.cache(cache) .cache(cache)
.addInterceptor { chain -> .addInterceptor { chain ->
val newRequest = chain.request().newBuilder() val newRequest = chain.request().newBuilder()
.addHeader("Host","images.ijavtorrent.com") .addHeader("Host",chain.request().url().host())
.addHeader("User-Agent","Mozilla/5.0 (Android 15; Mobile; rv:139.0) Gecko/139.0 Firefox/139.0") .addHeader("User-Agent","Mozilla/5.0 (Android 15; Mobile; rv:139.0) Gecko/139.0 Firefox/139.0")
.addHeader("Accept","image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5") .addHeader("Accept","image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5")
.addHeader("Accept-Language","ko-KR,en-US;q=0.5") .addHeader("Accept-Language","ko-KR,en-US;q=0.5")
.addHeader("Accept-Encoding","gzip, deflate, br, zstd") .addHeader("Accept-Encoding","gzip, deflate, br, zstd")
.addHeader("Referer","https://ijavtorrent.com/") .addHeader("Referer",chain.request().url().host())
.build() .build()
Blog.LOGE("chain.request().url() >>> ${chain.request().url()}")
chain.proceed(newRequest) chain.proceed(newRequest)
} }
.connectTimeout(10, TimeUnit.SECONDS) // 연결 타임아웃 .connectTimeout(30, TimeUnit.SECONDS) // 연결 타임아웃
.readTimeout(30, TimeUnit.SECONDS) // 읽기 타임아웃 .readTimeout(30, TimeUnit.SECONDS) // 읽기 타임아웃
.writeTimeout(30, TimeUnit.SECONDS) // 쓰기 타임아웃 .writeTimeout(30, TimeUnit.SECONDS) // 쓰기 타임아웃
.build() .build()

View File

@ -1,8 +1,16 @@
package bums.lunatic.launcher.common package bums.lunatic.launcher.common
import android.content.Intent import android.content.Intent
import android.graphics.Color
import android.os.Build
import android.os.Bundle
import android.os.Environment import android.os.Environment
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import bums.lunatic.launcher.apps.SearchMenu import bums.lunatic.launcher.apps.SearchMenu
import bums.lunatic.launcher.helpers.PrefBoolean import bums.lunatic.launcher.helpers.PrefBoolean
import bums.lunatic.launcher.utils.Blog import bums.lunatic.launcher.utils.Blog
@ -23,6 +31,29 @@ import java.util.Base64
abstract class CommonActivity : AppCompatActivity() { abstract class CommonActivity : AppCompatActivity() {
@RequiresApi(Build.VERSION_CODES.R)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
val insetsController = WindowInsetsControllerCompat(window, window.decorView)
var forWhite = false
if (forWhite) {
insetsController.isAppearanceLightStatusBars = true
insetsController.isAppearanceLightNavigationBars = true
window.statusBarColor = Color.WHITE
window.navigationBarColor = Color.WHITE
} else {
insetsController.isAppearanceLightStatusBars = false
insetsController.isAppearanceLightNavigationBars = false
window.statusBarColor = Color.BLACK
window.navigationBarColor = Color.BLACK
}
}
fun openSearchMenus(keyword : String, dismissCalback: DismissCalback) { fun openSearchMenus(keyword : String, dismissCalback: DismissCalback) {
SearchMenu().show(supportFragmentManager,keyword) {dismissCalback.invoke()} SearchMenu().show(supportFragmentManager,keyword) {dismissCalback.invoke()}
} }

View File

@ -27,6 +27,7 @@ import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.MotionEvent import android.view.MotionEvent
import android.view.PointerIcon import android.view.PointerIcon
@ -436,7 +437,6 @@ internal class RssHome : Fragment() {
} }
} }
appendReadCount(it, 1, false) appendReadCount(it, 1, false)
Blog.LOGE("removeFirst >>> ${Gson().toJson(it)}")
binding.layoutRssSummary.title.setOnLongClickListener { binding.layoutRssSummary.title.setOnLongClickListener {
currentRss?.originPage?.let { binding.geckoWeb.loadUrl(it)} currentRss?.originPage?.let { binding.geckoWeb.loadUrl(it)}
binding.layoutRssSummary.root.visibility = View.GONE binding.layoutRssSummary.root.visibility = View.GONE
@ -447,13 +447,25 @@ internal class RssHome : Fragment() {
binding.layoutRssSummary.scrollView.scrollTo(0,0) binding.layoutRssSummary.scrollView.scrollTo(0,0)
var vote = it.vote var vote = it.vote
var read = it.read var read = it.read
var keyword = ""
it.title?.let { it.title?.let {
Blog.LOGE(it) Blog.LOGE(it)
keyword = it
binding.layoutRssSummary.title.text = it.replace(Regex("[\\r\\n]+"), " ").plus( "\n[V:${if (vote) { binding.layoutRssSummary.title.text = it.replace(Regex("[\\r\\n]+"), " ").plus( "\n[V:${if (vote) {
"O" "O"
}else { }else {
"X" "X"
}} , R:${read + 1}]") }} , 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 { it.value }
.filter { it.matches(pattern) && !it.contains(" ") }
.toList()
if (results.isNotEmpty()) {
keyword = results.first()
}
} }
it.pubDate()?.let { it.pubDate()?.let {
@ -485,7 +497,7 @@ internal class RssHome : Fragment() {
binding.layoutRssSummary.screenLink.text = it binding.layoutRssSummary.screenLink.text = it
} }
if (it.getMagnet().length < 10) { 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 { } else {
binding.layoutRssSummary.smallg.visibility = View.GONE binding.layoutRssSummary.smallg.visibility = View.GONE
} }
@ -573,12 +585,13 @@ internal class RssHome : Fragment() {
} }
binding.home.setOnClickListener { binding.home.setOnClickListener {
if (binding.geckoWeb.isVisible) { if (binding.geckoWeb.isVisible || binding.layoutRssSummary.root.isVisible) {
binding.geckoWeb.visibility = View.GONE binding.geckoWeb.visibility = View.GONE
}
binding.layoutRssSummary.root.visibility = View.GONE binding.layoutRssSummary.root.visibility = View.GONE
} else {
queryInfos() queryInfos()
} }
}
binding.bookmark.setOnClickListener { binding.bookmark.setOnClickListener {

View File

@ -115,10 +115,10 @@ class WebBottomSheet : BottomSheetDialogFragment() {
inputKeyword.setOnEditorActionListener { _, actionId, _ -> inputKeyword.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_SEARCH) { if (actionId == EditorInfo.IME_ACTION_SEARCH) {
val keyword = inputKeyword.text.toString() val keyword = inputKeyword.text.toString()
if (keyword.isNotEmpty()) { // if (keyword.isNotEmpty()) {
triggerSearchWithDebounce(keyword) triggerSearchWithDebounce(keyword)
dismiss() // 필요 시 닫기 dismiss() // 필요 시 닫기
} // }
true true
} else { } else {
false false

View File

@ -209,14 +209,18 @@ internal class RssItemAdapter (
holder.view.circlePreview.visibility = rssData.category().getDefaultVisibiliy() holder.view.circlePreview.visibility = rssData.category().getDefaultVisibiliy()
Picasso.get().cancelRequest(holder.view.circlePreview) Picasso.get().cancelRequest(holder.view.circlePreview)
if (rssData.category().getResId() > 0) {
holder.view.circlePreview.setImageResource(rssData.category().getResId())
}
if (rssData.thumbnailUrl()?.length ?: 0 > 6) { if (rssData.thumbnailUrl()?.length ?: 0 > 6) {
Blog.LOGE("rssData.thumbnailUrl() >>> ${rssData.thumbnailUrl()}")
Picasso.get().load(rssData.thumbnailUrl().replace("&amp;", "&").toUri()) Picasso.get().load(rssData.thumbnailUrl().replace("&amp;", "&").toUri())
.into(holder.view.circlePreview) .into(holder.view.circlePreview)
} else if (rssData.category().getResId() > 0) {
holder.view.circlePreview.setImageResource(rssData.category().getResId())
} else {
holder.view.circlePreview.setImageDrawable(null)
} }
// else {
// holder.view.circlePreview.setImageDrawable(null)
// }
holder.itemView.tag = rssData holder.itemView.tag = rssData
holder.itemView.setOnClickListener(dateViewClick) holder.itemView.setOnClickListener(dateViewClick)

View File

@ -34,21 +34,20 @@ enum class RssDataType {
DCINSIDE -> R.drawable.dcinside DCINSIDE -> R.drawable.dcinside
ARCA -> R.drawable.arca ARCA -> R.drawable.arca
else -> { else -> {
0 R.drawable.ic_news
} }
} }
fun defaultImgSize() = when (this) { fun defaultImgSize() = when (this) {
YOUTUBE -> 200 YOUTUBE -> 200
REDDIT_NSFW,PRIVATE -> 360 REDDIT_NSFW,PRIVATE -> 240
//,GURU,MOST else -> { 160 }
else -> { 120 }
} }
fun getDefaultVisibiliy() = when (this) { fun getDefaultVisibiliy() = when (this) {
//,GURU,MOST // REDDIT_NSFW,PRIVATE -> View.INVISIBLE
REDDIT_NSFW,PRIVATE -> View.GONE
else -> { View.VISIBLE } else -> { View.VISIBLE }
} }
fun isOn(block : ()->Unit) { fun isOn(block : ()->Unit) {

View File

@ -75,13 +75,13 @@ internal class SettingsActivity : CommonActivity() {
settingsPrefs = this.getSharedPreferences(PREFS_SETTINGS, 0) settingsPrefs = this.getSharedPreferences(PREFS_SETTINGS, 0)
/* launch child settings dialogs on button clicks */ /* launch child settings dialogs on button clicks */
binding.timeDate.setOnClickListener { // binding.timeDate.setOnClickListener {
TopInfos().show(supportFragmentManager, BOTTOM_SHEET_TAG) // TopInfos().show(supportFragmentManager, BOTTOM_SHEET_TAG)
} // }
binding.weather.setOnClickListener { // binding.weather.setOnClickListener {
WeatherSettings().show(supportFragmentManager, BOTTOM_SHEET_TAG) // WeatherSettings().show(supportFragmentManager, BOTTOM_SHEET_TAG)
} // }
binding.todo.setOnClickListener { binding.todo.setOnClickListener {
HomeSettings().show(supportFragmentManager, BOTTOM_SHEET_TAG) HomeSettings().show(supportFragmentManager, BOTTOM_SHEET_TAG)
@ -91,17 +91,17 @@ internal class SettingsActivity : CommonActivity() {
Apps().show(supportFragmentManager, BOTTOM_SHEET_TAG) Apps().show(supportFragmentManager, BOTTOM_SHEET_TAG)
} }
binding.appearances.setOnClickListener { // binding.appearances.setOnClickListener {
Appearances().show(supportFragmentManager, BOTTOM_SHEET_TAG) // Appearances().show(supportFragmentManager, BOTTOM_SHEET_TAG)
} // }
binding.misc.setOnClickListener { binding.misc.setOnClickListener {
Misc().show(supportFragmentManager, BOTTOM_SHEET_TAG) Misc().show(supportFragmentManager, BOTTOM_SHEET_TAG)
} }
binding.advance.setOnClickListener { // binding.advance.setOnClickListener {
Advance().show(supportFragmentManager, BOTTOM_SHEET_TAG) // Advance().show(supportFragmentManager, BOTTOM_SHEET_TAG)
} // }
/* about and support dialogs */ /* about and support dialogs */
binding.about.setOnClickListener { aboutDialog() } binding.about.setOnClickListener { aboutDialog() }
@ -172,17 +172,17 @@ internal class SettingsActivity : CommonActivity() {
if (path.exists() == false) { if (path.exists() == false) {
path.mkdirs() path.mkdirs()
} }
saveObjToJson(path,"prefSettings.txt",PrefHelper.getSettings()) saveObjToJson(path,"prefSettings.json",PrefHelper.getSettings())
WorkersDb.getRealm().apply { WorkersDb.getRealm().apply {
val foundAppInfo = query<AppInfo>().find() val foundAppInfo = query<AppInfo>().find()
Blog.LOGE("foundAppInfo >>> ${foundAppInfo}") Blog.LOGE("foundAppInfo >>> ${foundAppInfo}")
val apps = arrayListOf<AppInfo>().apply { addAll((copyFromRealm(foundAppInfo))) } val apps = arrayListOf<AppInfo>().apply { addAll((copyFromRealm(foundAppInfo))) }
Blog.LOGE("foundAppInfo >>> ${apps.size}") Blog.LOGE("foundAppInfo >>> ${apps.size}")
saveObjToJson(path,"appInfos.txt",apps) saveObjToJson(path,"appInfos.json",apps)
val foundSimpleContact = query<SimpleContact>().find() val foundSimpleContact = query<SimpleContact>().find()
Blog.LOGE("foundSimpleContact >>> ${foundSimpleContact.size}") Blog.LOGE("foundSimpleContact >>> ${foundSimpleContact.size}")
val contacts = arrayListOf<SimpleContact>().apply { addAll(copyFromRealm(foundSimpleContact)) } val contacts = arrayListOf<SimpleContact>().apply { addAll(copyFromRealm(foundSimpleContact)) }
saveObjToJson(path,"contactInfos.txt",contacts) saveObjToJson(path,"contactInfos.json",contacts)
} }
} }
/* affiliate button */ /* affiliate button */
@ -203,12 +203,12 @@ internal class SettingsActivity : CommonActivity() {
val file = File(path, fileName) val file = File(path, fileName)
if (path.exists() && file.exists()) { if (path.exists() && file.exists()) {
val retMap = readMap(file) 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> val appInfos = Gson().fromJson(it, object : TypeToken<ArrayList<AppInfo?>?>() {}.type) as ArrayList<AppInfo>
Blog.LOGE("appInfos >>>> ${appInfos.size}") Blog.LOGE("appInfos >>>> ${appInfos.size}")
WorkersDb.getRealm().writeBlocking { appInfos.forEach { copyToRealm(it,UpdatePolicy.ALL) } } 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> val contacts = Gson().fromJson(it, object : TypeToken<ArrayList<SimpleContact?>?>() {}.type) as ArrayList<SimpleContact>
Blog.LOGE("contacts >>>> ${contacts.size}") Blog.LOGE("contacts >>>> ${contacts.size}")
WorkersDb.getRealm().writeBlocking { contacts.forEach { copyToRealm(it,UpdatePolicy.ALL) } } WorkersDb.getRealm().writeBlocking { contacts.forEach { copyToRealm(it,UpdatePolicy.ALL) } }

View File

@ -63,29 +63,29 @@ internal class Apps : BottomSheetDialogFragment() {
packageManager = requireActivity().packageManager packageManager = requireActivity().packageManager
binding.keyboardAutoGroup.isChecked = PrefBoolean.openWithKayboard.get() // binding.keyboardAutoGroup.isChecked = PrefBoolean.openWithKayboard.get()
binding.keyboardAutoGroup.setOnCheckedChangeListener { c,v -> // binding.keyboardAutoGroup.setOnCheckedChangeListener { c,v ->
settingsChanged = true // settingsChanged = true
PrefBoolean.openWithKayboard.set(v) // PrefBoolean.openWithKayboard.set(v)
} // }
//
binding.quickLaunchGroup.isChecked = PrefBoolean.useQuickLaunch.get() // binding.quickLaunchGroup.isChecked = PrefBoolean.useQuickLaunch.get()
binding.quickLaunchGroup.setOnCheckedChangeListener { c,v -> // binding.quickLaunchGroup.setOnCheckedChangeListener { c,v ->
settingsChanged = true // settingsChanged = true
PrefBoolean.useQuickLaunch.get(v) // PrefBoolean.useQuickLaunch.get(v)
} // }
//
binding.appsCountGroup.isChecked = PrefBoolean.showAppResultCount.get() // binding.appsCountGroup.isChecked = PrefBoolean.showAppResultCount.get()
binding.appsCountGroup.setOnCheckedChangeListener { c,v -> // binding.appsCountGroup.setOnCheckedChangeListener { c,v ->
settingsChanged = true // settingsChanged = true
PrefBoolean.showAppResultCount.set(v) // PrefBoolean.showAppResultCount.set(v)
} // }
//
//
((PrefLong.maxQueryCount.get(18L) as? Long)?.toFloat() ?: 18F).let { // ((PrefLong.maxQueryCount.get(18L) as? Long)?.toFloat() ?: 18F).let {
binding.columnsCountTitle.text = getString(R.string.grid_columns_count) +" [${it.toInt()}]" // binding.columnsCountTitle.text = getString(R.string.grid_columns_count) +" [${it.toInt()}]"
binding.columnsCount.value = it // binding.columnsCount.value = it
} // }
PrefLong.shortTimePeriod.get(20L).let { PrefLong.shortTimePeriod.get(20L).let {
binding.shortTimeTitle.text = getString(R.string.shortTimeTitle) +" [${it.toInt()}분 마다]" binding.shortTimeTitle.text = getString(R.string.shortTimeTitle) +" [${it.toInt()}분 마다]"
@ -122,11 +122,11 @@ internal class Apps : BottomSheetDialogFragment() {
(requireDialog() as BottomSheetDialog).dismissWithAnimation = true (requireDialog() as BottomSheetDialog).dismissWithAnimation = true
binding.columnsCount.addOnChangeListener(Slider.OnChangeListener { _, value, _ -> // binding.columnsCount.addOnChangeListener(Slider.OnChangeListener { _, value, _ ->
settingsChanged = true // settingsChanged = true
PrefLong.maxQueryCount.set(value.toLong()) // PrefLong.maxQueryCount.set(value.toLong())
binding.columnsCountTitle.text = getString(R.string.grid_columns_count) +" [${value.toInt()}]" // binding.columnsCountTitle.text = getString(R.string.grid_columns_count) +" [${value.toInt()}]"
}) // })
binding.shortTime.addOnChangeListener(Slider.OnChangeListener { _, value, _ -> binding.shortTime.addOnChangeListener(Slider.OnChangeListener { _, value, _ ->
settingsChanged = true settingsChanged = true

View File

@ -52,20 +52,20 @@ internal class HomeSettings : BottomSheetDialogFragment() {
setTableItem(binding.normal04) setTableItem(binding.normal04)
binding.callInfo.isChecked = PrefBoolean.showCallHistory.get(false) // binding.callInfo.isChecked = PrefBoolean.showCallHistory.get(false)
binding.callInfo.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.showCallHistory.set(isChecked) // binding.callInfo.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.showCallHistory.set(isChecked)
settingsChanged = true} // settingsChanged = true}
binding.smsInfos.isChecked = PrefBoolean.showSMSHistory.get(false) // binding.smsInfos.isChecked = PrefBoolean.showSMSHistory.get(false)
binding.smsInfos.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.showSMSHistory.set(isChecked) // binding.smsInfos.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.showSMSHistory.set(isChecked)
settingsChanged = true} // settingsChanged = true}
binding.notificationInfos.isChecked = PrefBoolean.showNotificationHistory.get(false) // binding.notificationInfos.isChecked = PrefBoolean.showNotificationHistory.get(false)
binding.notificationInfos.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.showNotificationHistory.set(isChecked) // binding.notificationInfos.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.showNotificationHistory.set(isChecked)
settingsChanged = true} // settingsChanged = true}
binding.nowPlaying.isChecked = PrefBoolean.showNowPlaying.get(false) // binding.nowPlaying.isChecked = PrefBoolean.showNowPlaying.get(false)
binding.nowPlaying.setOnCheckedChangeListener { buttonView, isChecked -> // binding.nowPlaying.setOnCheckedChangeListener { buttonView, isChecked ->
PrefBoolean.showNowPlaying.set(isChecked) // PrefBoolean.showNowPlaying.set(isChecked)
settingsChanged = true // settingsChanged = true
} // }

View File

@ -24,6 +24,7 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.widget.doOnTextChanged import androidx.core.widget.doOnTextChanged
import bums.lunatic.launcher.R
import bums.lunatic.launcher.databinding.SettingsPrivitServiceBinding 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_URL
import bums.lunatic.launcher.helpers.Constants.Companion.KEY_RSS_URL2 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 bums.lunatic.launcher.settings.SettingsActivity.Companion.settingsPrefs
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.util.Objects 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 private lateinit var binding : SettingsPrivitServiceBinding
@ -43,26 +62,32 @@ internal class Misc : BottomSheetDialogFragment() {
/* initialize views according to the saved values */ /* initialize views according to the saved values */
binding.inputFeedUrl.setText(PrefString.telegramBotApi.get("")) binding.inputFeedUrl.setText(PrefString.telegramBotApi.get(""))
binding.inputFeedUrl.doOnTextChanged { t,s,b,l -> PrefString.telegramBotApi.set(t.toString()) binding.inputFeedUrl.doOnTextChanged { t,s,b,l -> PrefString.telegramBotApi.set(t.toString())
settingsChanged = true
} }
binding.inputFeedUrl2.setText(PrefString.telegramMyId.get("")) binding.inputFeedUrl2.setText(PrefString.telegramMyId.get(""))
binding.inputFeedUrl2.doOnTextChanged { t,s,b,l -> PrefString.telegramMyId.set(t.toString()) binding.inputFeedUrl2.doOnTextChanged { t,s,b,l -> PrefString.telegramMyId.set(t.toString())
settingsChanged = true
} }
binding.inputFeedUrl3.setText(PrefString.telegramSendTarget.get("")) binding.inputFeedUrl3.setText(PrefString.telegramSendTarget.get(""))
binding.inputFeedUrl3.doOnTextChanged { t,s,b,l -> PrefString.telegramSendTarget.set(t.toString()) binding.inputFeedUrl3.doOnTextChanged { t,s,b,l -> PrefString.telegramSendTarget.set(t.toString())
settingsChanged = true
} }
binding.inputFeedUrl4.setText(PrefString.locationApi.get("")) 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.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 return binding.root
} }

View File

@ -33,23 +33,6 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import kotlin.system.exitProcess 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() { internal class WeatherSettings : SettingChild() {
private lateinit var binding : SettingsWeatherBinding private lateinit var binding : SettingsWeatherBinding
@ -64,12 +47,12 @@ internal class WeatherSettings : SettingChild() {
PrefString.weatherApiKey.set(text.toString()) PrefString.weatherApiKey.set(text.toString())
settingsChanged = true settingsChanged = true
} }
binding.dress.isChecked = PrefBoolean.weatherDress.get(false) // binding.dress.isChecked = PrefBoolean.weatherDress.get(false)
binding.weather.isChecked = PrefBoolean.weatherState.get(false) // binding.weather.isChecked = PrefBoolean.weatherState.get(false)
binding.weather.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.weatherState.set(isChecked) // binding.weather.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.weatherState.set(isChecked)
settingsChanged = true} // settingsChanged = true}
binding.dress.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.weatherDress.set(isChecked) // binding.dress.setOnCheckedChangeListener { buttonView, isChecked -> PrefBoolean.weatherDress.set(isChecked)
settingsChanged = true} // settingsChanged = true}
return binding.root return binding.root
} }

View File

@ -109,6 +109,7 @@ abstract class BaseToki : Fragment(), PagedTextViewInterface {
var lastInfo: LastInfo? = null var lastInfo: LastInfo? = null
var currentPage: ContentsPageInfo? = null var currentPage: ContentsPageInfo? = null
var saveContinuation = false var saveContinuation = false
open var isPrivateMode = false
val handle = object : Handler(Looper.getMainLooper()) { val handle = object : Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) { override fun handleMessage(msg: Message) {
if (msg.what == 0) { if (msg.what == 0) {
@ -614,8 +615,9 @@ abstract class BaseToki : Fragment(), PagedTextViewInterface {
goToHome() goToHome()
} }
getRuntime()?.apply { getRuntime()?.apply {
val sessionSettings = GeckoSessionSettings.Builder() val sessionSettings = GeckoSessionSettings.Builder()
.usePrivateMode(true) .usePrivateMode(isPrivateMode)
.allowJavascript(true) .allowJavascript(true)
.screenId(Random(Int.MAX_VALUE).nextInt()) .screenId(Random(Int.MAX_VALUE).nextInt())
.build() .build()

View File

@ -12,6 +12,8 @@ class YouTube : BaseToki(){
override var lastNumber : Int = 143 override var lastNumber : Int = 143
override val webcontentsName : String = "youtube" override val webcontentsName : String = "youtube"
override val afterDot = "com" override val afterDot = "com"
override var isPrivateMode: Boolean = true
override fun getLastedDoamin(): String { override fun getLastedDoamin(): String {
return String.format("https://%s.%s", webcontentsName, afterDot) return String.format("https://%s.%s", webcontentsName, afterDot)
} }

View File

@ -9,6 +9,7 @@ import android.util.AttributeSet
import android.view.MotionEvent import android.view.MotionEvent
import android.view.PointerIcon import android.view.PointerIcon
import android.view.View import android.view.View
import androidx.core.net.toUri
import androidx.core.view.isVisible import androidx.core.view.isVisible
import bums.lunatic.launcher.R import bums.lunatic.launcher.R
import bums.lunatic.launcher.helpers.ForeGroundService import bums.lunatic.launcher.helpers.ForeGroundService
@ -102,7 +103,24 @@ open class BWebview : GeckoView {
var request = YoutubeDLRequest(url) var request = YoutubeDLRequest(url)
(mGKCookie?.COOKIES)?.let{ (mGKCookie?.COOKIES)?.let{
Blog.LOGE(it) Blog.LOGE(it)
// request.addOption("--cookies-from-browser", "$it") val cookies = it.split(";")
.map { it.trim() }
.mapNotNull {
val parts = it.split("=", limit = 2)
if (parts.size == 2) parts[0] to parts[1] else null
}
.toMap()
val expires = (System.currentTimeMillis() / 1000) + 3600 * 24 * 7 // 일주일 후 만료 예시
val cookieFileContent = buildString {
appendLine("# Netscape HTTP Cookie File")
for ((name, value) in cookies) {
appendLine(".${url.toUri().host}\tTRUE\t/\tTRUE\t$expires\t$name\t$value")
}
}
val cookieFile = File(context.filesDir, "cookies.txt")
cookieFile.writeText(cookieFileContent)
request.addOption("--cookies", cookieFile.absolutePath)
} }
val videoInfo = YoutubeDL.getInstance().getInfo(request) val videoInfo = YoutubeDL.getInstance().getInfo(request)
@ -121,6 +139,7 @@ open class BWebview : GeckoView {
} }
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace()
Blog.LOGE("checkIfDownloadable ${url} ${e}") Blog.LOGE("checkIfDownloadable ${url} ${e}")
CoroutineScope(Dispatchers.Main).launch { CoroutineScope(Dispatchers.Main).launch {
runOnUiThread { runOnUiThread {

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@drawable/base_bg" android:background="@android:color/transparent"
android:orientation="vertical" android:orientation="vertical"
android:id="@+id/mainFragmentsContainer" android:id="@+id/mainFragmentsContainer"
> >
@ -26,31 +26,17 @@
app:layout_constraintTop_toBottomOf="@id/fragment_container" app:layout_constraintTop_toBottomOf="@id/fragment_container"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
android:id="@+id/back" android:id="@+id/back"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
android:visibility="visible"
android:background="@null"
android:src="@drawable/back_vector" android:src="@drawable/back_vector"
android:tint="@color/white"
android:foregroundTint="@color/white"
android:layout_width="@dimen/main_top_height"
tools:ignore="ContentDescription" tools:ignore="ContentDescription"
android:layout_height="@dimen/main_top_height" /> style="@style/CommonBottom" />
<ImageButton <ImageButton
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/fragment_container" app:layout_constraintTop_toBottomOf="@id/fragment_container"
app:layout_constraintLeft_toRightOf="@id/back" app:layout_constraintLeft_toRightOf="@id/back"
android:id="@+id/reload" android:id="@+id/reload"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
android:visibility="visible"
android:background="@null"
android:src="@drawable/ic_refresh" android:src="@drawable/ic_refresh"
android:tint="@color/white"
android:foregroundTint="@color/white"
android:layout_width="@dimen/main_top_height"
tools:ignore="ContentDescription" tools:ignore="ContentDescription"
android:layout_height="@dimen/main_top_height" /> style="@style/CommonBottom"/>
<TextView <TextView
android:text="asdasdsadasd" android:text="asdasdsadasd"
android:id="@+id/current_address" android:id="@+id/current_address"
@ -64,38 +50,25 @@
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="@dimen/main_top_height"/> android:layout_height="@dimen/main_top_height"/>
"/>
<ImageButton <ImageButton
app:layout_constraintTop_toTopOf="@id/back" app:layout_constraintTop_toTopOf="@id/back"
app:layout_constraintRight_toLeftOf="@id/share" app:layout_constraintRight_toLeftOf="@id/share"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
android:id="@+id/dl_video" android:id="@+id/dl_video"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
android:visibility="gone"
android:background="@null"
android:tint="@color/white"
android:foregroundTint="@color/white"
android:src="@drawable/dl_vid" android:src="@drawable/dl_vid"
android:layout_width="@dimen/main_top_height"
tools:ignore="ContentDescription" tools:ignore="ContentDescription"
android:layout_height="@dimen/main_top_height" /> style="@style/CommonBottom"/>
<ImageButton <ImageButton
app:layout_constraintTop_toTopOf="@id/back" app:layout_constraintTop_toTopOf="@id/back"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginRight="60dp" android:layout_marginRight="60dp"
android:id="@+id/share" android:id="@+id/share"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
android:visibility="visible"
android:background="@null"
android:tint="@color/white"
android:foregroundTint="@color/white" android:foregroundTint="@color/white"
android:src="@drawable/ic_share" android:src="@drawable/ic_share"
android:layout_width="@dimen/main_top_height"
tools:ignore="ContentDescription" tools:ignore="ContentDescription"
android:layout_height="@dimen/main_top_height" /> style="@style/CommonBottom"/>
<bums.lunatic.launcher.view.FloatingActionMenu <bums.lunatic.launcher.view.FloatingActionMenu
android:id="@+id/floating_action_menu" android:id="@+id/floating_action_menu"
android:layout_margin="5dp" android:layout_margin="5dp"

View File

@ -19,14 +19,15 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/lunar_settings" android:text="@string/lunar_settings"
android:textColor="?attr/colorControlNormal" /> android:textStyle="bold"
android:textColor="@color/white" />
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<ScrollView <ScrollView
android:layout_width="@dimen/zero" android:layout_width="@dimen/zero"
android:layout_height="@dimen/zero" android:layout_height="@dimen/zero"
android:background="@drawable/rounded_bg_top" android:background="@drawable/rounded_bg_top"
android:backgroundTint="?attr/colorSurface" android:backgroundTint="@color/black"
android:paddingHorizontal="@dimen/thirtySix" android:paddingHorizontal="@dimen/thirtySix"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@ -40,23 +41,23 @@
app:singleSelection="true" app:singleSelection="true"
android:layout_gravity="center"> android:layout_gravity="center">
<com.google.android.material.button.MaterialButton <!-- <com.google.android.material.button.MaterialButton-->
android:id="@+id/timeDate" <!-- android:id="@+id/timeDate"-->
style="@style/Widget.Material3.Button.ElevatedButton" <!-- style="@style/Widget.Material3.Button.ElevatedButton"-->
android:layout_width="match_parent" <!-- android:layout_width="match_parent"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:text="Display Info" <!-- android:text="Display Info"-->
android:textAllCaps="true" <!-- android:textAllCaps="true"-->
android:textStyle="bold" /> <!-- android:textStyle="bold" />-->
<com.google.android.material.button.MaterialButton <!-- <com.google.android.material.button.MaterialButton-->
android:id="@+id/weather" <!-- android:id="@+id/weather"-->
style="@style/Widget.Material3.Button.ElevatedButton" <!-- style="@style/Widget.Material3.Button.ElevatedButton"-->
android:layout_width="match_parent" <!-- android:layout_width="match_parent"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:text="@string/weather" <!-- android:text="@string/weather"-->
android:textAllCaps="true" <!-- android:textAllCaps="true"-->
android:textStyle="bold" /> <!-- android:textStyle="bold" />-->
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/todo" android:id="@+id/todo"
@ -76,14 +77,14 @@
android:textAllCaps="true" android:textAllCaps="true"
android:textStyle="bold" /> android:textStyle="bold" />
<com.google.android.material.button.MaterialButton <!-- <com.google.android.material.button.MaterialButton-->
android:id="@+id/appearances" <!-- android:id="@+id/appearances"-->
style="@style/Widget.Material3.Button.ElevatedButton" <!-- style="@style/Widget.Material3.Button.ElevatedButton"-->
android:layout_width="match_parent" <!-- android:layout_width="match_parent"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:text="@string/appearances" <!-- android:text="@string/appearances"-->
android:textAllCaps="true" <!-- android:textAllCaps="true"-->
android:textStyle="bold" /> <!-- android:textStyle="bold" />-->
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/misc" android:id="@+id/misc"
@ -94,14 +95,14 @@
android:textAllCaps="true" android:textAllCaps="true"
android:textStyle="bold" /> android:textStyle="bold" />
<com.google.android.material.button.MaterialButton <!-- <com.google.android.material.button.MaterialButton-->
android:id="@+id/advance" <!-- android:id="@+id/advance"-->
style="@style/Widget.Material3.Button.ElevatedButton" <!-- style="@style/Widget.Material3.Button.ElevatedButton"-->
android:layout_width="match_parent" <!-- android:layout_width="match_parent"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:text="@string/advance" <!-- android:text="@string/advance"-->
android:textAllCaps="true" <!-- android:textAllCaps="true"-->
android:textStyle="bold" /> <!-- android:textStyle="bold" />-->
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/about" android:id="@+id/about"

View File

@ -13,94 +13,94 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="@dimen/twelve"> android:padding="@dimen/twelve">
<com.google.android.material.textview.MaterialTextView <!-- <com.google.android.material.textview.MaterialTextView-->
android:id="@+id/searchWithKeyboard" <!-- android:id="@+id/searchWithKeyboard"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:text="@string/search_with_keyboard" <!-- android:text="@string/search_with_keyboard"-->
android:textSize="@dimen/normalText" <!-- android:textSize="@dimen/normalText"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toTopOf="parent" /> <!-- app:layout_constraintTop_toTopOf="parent" />-->
<com.google.android.material.switchmaterial.SwitchMaterial <!-- <com.google.android.material.switchmaterial.SwitchMaterial-->
android:id="@+id/keyboardAutoGroup" <!-- android:id="@+id/keyboardAutoGroup"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/searchWithKeyboard" <!-- app:layout_constraintTop_toBottomOf="@+id/searchWithKeyboard"-->
app:selectionRequired="true" <!-- app:selectionRequired="true"-->
app:singleSelection="true"/> <!-- app:singleSelection="true"/>-->
<com.google.android.material.textview.MaterialTextView <!-- <com.google.android.material.textview.MaterialTextView-->
android:id="@+id/quickLaunch" <!-- android:id="@+id/quickLaunch"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:layout_marginTop="@dimen/twelve" <!-- android:layout_marginTop="@dimen/twelve"-->
android:text="@string/quick_launch" <!-- android:text="@string/quick_launch"-->
android:textSize="@dimen/normalText" <!-- android:textSize="@dimen/normalText"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/keyboardAutoGroup" /> <!-- app:layout_constraintTop_toBottomOf="@+id/keyboardAutoGroup" />-->
<com.google.android.material.switchmaterial.SwitchMaterial <!-- <com.google.android.material.switchmaterial.SwitchMaterial-->
android:id="@+id/quickLaunchGroup" <!-- android:id="@+id/quickLaunchGroup"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/quickLaunch" <!-- app:layout_constraintTop_toBottomOf="@+id/quickLaunch"-->
app:selectionRequired="true" <!-- app:selectionRequired="true"-->
app:singleSelection="true"/> <!-- app:singleSelection="true"/>-->
<com.google.android.material.textview.MaterialTextView <!-- <com.google.android.material.textview.MaterialTextView-->
android:id="@+id/appsCount" <!-- android:id="@+id/appsCount"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:layout_marginTop="@dimen/twelve" <!-- android:layout_marginTop="@dimen/twelve"-->
android:text="@string/apps_count" <!-- android:text="@string/apps_count"-->
android:textSize="@dimen/normalText" <!-- android:textSize="@dimen/normalText"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/quickLaunchGroup" /> <!-- app:layout_constraintTop_toBottomOf="@+id/quickLaunchGroup" />-->
<com.google.android.material.switchmaterial.SwitchMaterial <!-- <com.google.android.material.switchmaterial.SwitchMaterial-->
android:id="@+id/appsCountGroup" <!-- android:id="@+id/appsCountGroup"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/appsCount" <!-- app:layout_constraintTop_toBottomOf="@+id/appsCount"-->
app:selectionRequired="true" <!-- app:selectionRequired="true"-->
app:singleSelection="true"/> <!-- app:singleSelection="true"/>-->
<com.google.android.material.textview.MaterialTextView <!-- <com.google.android.material.textview.MaterialTextView-->
android:id="@+id/columnsCountTitle" <!-- android:id="@+id/columnsCountTitle"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:layout_marginTop="@dimen/twelve" <!-- android:layout_marginTop="@dimen/twelve"-->
android:textSize="@dimen/normalText" <!-- android:textSize="@dimen/normalText"-->
android:text="@string/grid_columns_count" <!-- android:text="@string/grid_columns_count"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/appsCountGroup" /> <!-- app:layout_constraintTop_toBottomOf="@+id/appsCountGroup" />-->
<com.google.android.material.slider.Slider <!-- <com.google.android.material.slider.Slider-->
android:id="@+id/columnsCount" <!-- android:id="@+id/columnsCount"-->
android:layout_width="@dimen/zero" <!-- android:layout_width="@dimen/zero"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:valueFrom="5" <!-- android:valueFrom="5"-->
android:valueTo="40" <!-- android:valueTo="40"-->
android:stepSize="1" <!-- android:stepSize="1"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/columnsCountTitle" /> <!-- app:layout_constraintTop_toBottomOf="@+id/columnsCountTitle" />-->
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/shortTimeTitle" android:id="@+id/shortTimeTitle"
@ -111,7 +111,7 @@
android:textSize="@dimen/normalText" android:textSize="@dimen/normalText"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/columnsCount" /> app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.slider.Slider <com.google.android.material.slider.Slider
android:id="@+id/shortTime" android:id="@+id/shortTime"

View File

@ -114,7 +114,25 @@
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/owmInputLayout"
android:layout_width="@dimen/threeTwentyFour"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/twelve"
android:hint="@string/owm_key"
app:endIconMode="clear_text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/feedInputLayout5">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/inputOwm"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:imeOptions="actionDone"
android:singleLine="true" />
</com.google.android.material.textfield.TextInputLayout>
<!-- <com.google.android.material.textview.MaterialTextView--> <!-- <com.google.android.material.textview.MaterialTextView-->
<!-- android:id="@+id/doubleTapLock"--> <!-- android:id="@+id/doubleTapLock"-->

View File

@ -5,26 +5,26 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="@dimen/twelve"> android:padding="@dimen/twelve">
<com.google.android.material.textview.MaterialTextView <!-- <com.google.android.material.textview.MaterialTextView-->
android:id="@+id/phoneTitle" <!-- android:id="@+id/phoneTitle"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:text="통화목록" <!-- android:text="통화목록"-->
android:textSize="@dimen/normalText" <!-- android:textSize="@dimen/normalText"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toTopOf="parent" /> <!-- app:layout_constraintTop_toTopOf="parent" />-->
<com.google.android.material.switchmaterial.SwitchMaterial <!-- <com.google.android.material.switchmaterial.SwitchMaterial-->
android:id="@+id/callInfo" <!-- android:id="@+id/callInfo"-->
android:text="사용 여부" <!-- android:text="사용 여부"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/phoneTitle" <!-- app:layout_constraintTop_toBottomOf="@+id/phoneTitle"-->
app:selectionRequired="true" <!-- app:selectionRequired="true"-->
app:singleSelection="true"/> <!-- app:singleSelection="true"/>-->
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/newsTitle" android:id="@+id/newsTitle"
@ -34,7 +34,7 @@
android:textSize="@dimen/normalText" android:textSize="@dimen/normalText"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/callInfo" /> app:layout_constraintTop_toTopOf="parent" />
<TableLayout <TableLayout
android:id="@+id/contentsTypes" android:id="@+id/contentsTypes"
@ -142,67 +142,67 @@
</TableRow> </TableRow>
</TableLayout> </TableLayout>
<com.google.android.material.textview.MaterialTextView <!-- <com.google.android.material.textview.MaterialTextView-->
android:id="@+id/smsTitle" <!-- android:id="@+id/smsTitle"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:text="문자 내역" <!-- android:text="문자 내역"-->
android:textSize="@dimen/normalText" <!-- android:textSize="@dimen/normalText"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@id/contentsTypes" /> <!-- app:layout_constraintTop_toBottomOf="@id/contentsTypes" />-->
<com.google.android.material.switchmaterial.SwitchMaterial <!-- <com.google.android.material.switchmaterial.SwitchMaterial-->
android:id="@+id/smsInfos" <!-- android:id="@+id/smsInfos"-->
android:text="사용 여부" <!-- android:text="사용 여부"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/smsTitle" <!-- app:layout_constraintTop_toBottomOf="@+id/smsTitle"-->
app:selectionRequired="true" <!-- app:selectionRequired="true"-->
app:singleSelection="true"/> <!-- app:singleSelection="true"/>-->
<com.google.android.material.textview.MaterialTextView <!-- <com.google.android.material.textview.MaterialTextView-->
android:id="@+id/notificationTitle" <!-- android:id="@+id/notificationTitle"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:text="알림 내역" <!-- android:text="알림 내역"-->
android:textSize="@dimen/normalText" <!-- android:textSize="@dimen/normalText"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@id/smsInfos" /> <!-- app:layout_constraintTop_toBottomOf="@id/smsInfos" />-->
<com.google.android.material.switchmaterial.SwitchMaterial <!-- <com.google.android.material.switchmaterial.SwitchMaterial-->
android:id="@+id/notificationInfos" <!-- android:id="@+id/notificationInfos"-->
android:text="표시 여부" <!-- android:text="표시 여부"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/notificationTitle" <!-- app:layout_constraintTop_toBottomOf="@+id/notificationTitle"-->
app:selectionRequired="true" <!-- app:selectionRequired="true"-->
app:singleSelection="true"/> <!-- app:singleSelection="true"/>-->
<com.google.android.material.textview.MaterialTextView <!-- <com.google.android.material.textview.MaterialTextView-->
android:id="@+id/nowPlayingTitle" <!-- android:id="@+id/nowPlayingTitle"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:text="재생중인 곡" <!-- android:text="재생중인 곡"-->
android:textSize="@dimen/normalText" <!-- android:textSize="@dimen/normalText"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@id/notificationInfos" /> <!-- app:layout_constraintTop_toBottomOf="@id/notificationInfos" />-->
<com.google.android.material.switchmaterial.SwitchMaterial <!-- <com.google.android.material.switchmaterial.SwitchMaterial-->
android:id="@+id/nowPlaying" <!-- android:id="@+id/nowPlaying"-->
android:text="사용 여부" <!-- android:text="사용 여부"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/nowPlayingTitle" <!-- app:layout_constraintTop_toBottomOf="@+id/nowPlayingTitle"-->
app:selectionRequired="true" <!-- app:selectionRequired="true"-->
app:singleSelection="true"/> <!-- app:singleSelection="true"/>-->
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -27,47 +27,47 @@
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textview.MaterialTextView <!-- <com.google.android.material.textview.MaterialTextView-->
android:id="@+id/dressTitle" <!-- android:id="@+id/dressTitle"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:text="옷차림 보기" <!-- android:text="옷차림 보기"-->
android:textSize="@dimen/normalText" <!-- android:textSize="@dimen/normalText"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@id/owmInputLayout" /> <!-- app:layout_constraintTop_toBottomOf="@id/owmInputLayout" />-->
<com.google.android.material.switchmaterial.SwitchMaterial <!-- <com.google.android.material.switchmaterial.SwitchMaterial-->
android:id="@+id/dress" <!-- android:id="@+id/dress"-->
android:text="사용 여부" <!-- android:text="사용 여부"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/dressTitle" <!-- app:layout_constraintTop_toBottomOf="@+id/dressTitle"-->
app:selectionRequired="true" <!-- app:selectionRequired="true"-->
app:singleSelection="true"/> <!-- app:singleSelection="true"/>-->
<com.google.android.material.textview.MaterialTextView <!-- <com.google.android.material.textview.MaterialTextView-->
android:id="@+id/weatherTitle" <!-- android:id="@+id/weatherTitle"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
android:text="날씨 보기" <!-- android:text="날씨 보기"-->
android:textSize="@dimen/normalText" <!-- android:textSize="@dimen/normalText"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@id/dress" /> <!-- app:layout_constraintTop_toBottomOf="@id/dress" />-->
<com.google.android.material.switchmaterial.SwitchMaterial <!-- <com.google.android.material.switchmaterial.SwitchMaterial-->
android:id="@+id/weather" <!-- android:id="@+id/weather"-->
android:text="사용 여부" <!-- android:text="사용 여부"-->
android:layout_width="wrap_content" <!-- android:layout_width="wrap_content"-->
android:layout_height="wrap_content" <!-- android:layout_height="wrap_content"-->
app:layout_constraintEnd_toEndOf="parent" <!-- app:layout_constraintEnd_toEndOf="parent"-->
app:layout_constraintStart_toStartOf="parent" <!-- app:layout_constraintStart_toStartOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/weatherTitle" <!-- app:layout_constraintTop_toBottomOf="@+id/weatherTitle"-->
app:selectionRequired="true" <!-- app:selectionRequired="true"-->
app:singleSelection="true"/> <!-- app:singleSelection="true"/>-->
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -79,7 +79,7 @@
<string name="light_theme">Light</string> <string name="light_theme">Light</string>
<string name="list">List</string> <string name="list">List</string>
<string name="list_with_icon">List with Icon</string> <string name="list_with_icon">List with Icon</string>
<string name="lunar_settings">Lunar Settings</string> <string name="lunar_settings">Bum\'s Settings</string>
<string name="misc">Misc</string> <string name="misc">Misc</string>
<string name="misc_info_titles"> <string name="misc_info_titles">
Device Uptime\nSystem Active\nMemory Threshold\nBattery Temperature\nBattery Voltage Device Uptime\nSystem Active\nMemory Threshold\nBattery Temperature\nBattery Voltage

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.LunarLauncher.Starting" parent="Theme.SplashScreen"> <style name="Theme.LunarLauncher.Starting" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">@color/ic_launcher_primary</item> <item name="windowSplashScreenBackground">@color/ic_launcher_secondary</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_launcher</item> <item name="windowSplashScreenAnimatedIcon">@drawable/ic_launcher</item>
<item name="windowSplashScreenAnimationDuration">1000</item> <item name="windowSplashScreenAnimationDuration">1000</item>
<item name="postSplashScreenTheme">@style/Theme.LunarLauncher</item> <item name="postSplashScreenTheme">@style/Theme.LunarLauncher</item>
@ -117,4 +117,15 @@
</style> </style>
<style name="CommonBottom">
<item name="android:scaleType">fitCenter</item>
<item name="android:adjustViewBounds">true</item>
<item name="android:visibility">visible</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:tint">@color/white</item>
<item name="android:foregroundTint">@color/white</item>
<item name="android:layout_width">@dimen/main_top_height</item>
<item name="android:layout_height">@dimen/main_top_height</item>
</style>
</resources> </resources>

View File

@ -1,14 +1,15 @@
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. --> <!-- Base application theme. -->
<style name="Theme.LunarLauncher" parent="Theme.Material3.Light.NoActionBar">
<style name="Theme.LunarLauncher" parent="Theme.Material3.DynamicColors.DayNight.NoActionBar">
<!-- Background --> <!-- Background -->
<item name="android:windowShowWallpaper">true</item> <item name="android:windowShowWallpaper">true</item>
<!-- System bars --> <!-- System bars -->
<item name="android:windowDrawsSystemBarBackgrounds">true</item> <!-- <item name="android:windowDrawsSystemBarBackgrounds">true</item>-->
<item name="android:statusBarColor">@android:color/transparent</item> <!-- <item name="android:statusBarColor">@android:color/transparent</item>-->
<item name="android:navigationBarColor">@color/navigation_bar</item> <!-- <item name="android:navigationBarColor">@color/navigation_bar</item>-->
<item name="android:windowLightStatusBar">true</item> <!-- <item name="android:windowLightStatusBar">false</item>-->
<item name="android:windowLightNavigationBar" tools:targetApi="27">true</item> <!-- <item name="android:windowLightNavigationBar" tools:targetApi="27">false</item>-->
<item name="android:windowIsTranslucent">true</item> <item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item>
<!-- Widgets --> <!-- Widgets -->