From 278c1b4510c8281b210b1bdf340afacfcf9e05d9 Mon Sep 17 00:00:00 2001 From: lunaticbum Date: Thu, 9 Jul 2026 16:47:21 +0900 Subject: [PATCH] .. --- .../assets/extensions/my_extension/dddd.json | 0 .../bums/lunatic/launcher/LauncherActivity.kt | 9 ++-- .../launcher/home/CompletedFilesFragment.kt | 39 +++++++++++++++++ .../launcher/player/DocumentViewerActivity.kt | 43 +++++++++++-------- .../lunatic/launcher/player/PageIndexer.kt | 7 ++- app/src/main/res/layout/layout_textviewer.xml | 4 +- 6 files changed, 77 insertions(+), 25 deletions(-) create mode 100644 app/src/main/assets/extensions/my_extension/dddd.json diff --git a/app/src/main/assets/extensions/my_extension/dddd.json b/app/src/main/assets/extensions/my_extension/dddd.json new file mode 100644 index 00000000..e69de29b diff --git a/app/src/main/kotlin/bums/lunatic/launcher/LauncherActivity.kt b/app/src/main/kotlin/bums/lunatic/launcher/LauncherActivity.kt index dc1ee01a..3970f541 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/LauncherActivity.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/LauncherActivity.kt @@ -838,10 +838,13 @@ open class LauncherActivity : CommonActivity() { // } + try { + val widgets = WorkersDb.getRealm().query().find() + widgets.forEach { widgetData -> + createWidget(null, widgetData) + } + }catch (e : Exception) { - val widgets = WorkersDb.getRealm().query().find() - widgets.forEach { widgetData -> - createWidget(null, widgetData) } } lateinit var scaleDetector: android.view.ScaleGestureDetector diff --git a/app/src/main/kotlin/bums/lunatic/launcher/home/CompletedFilesFragment.kt b/app/src/main/kotlin/bums/lunatic/launcher/home/CompletedFilesFragment.kt index a3387214..cb62c335 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/home/CompletedFilesFragment.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/home/CompletedFilesFragment.kt @@ -499,6 +499,29 @@ class CompletedFilesFragment : Fragment() { FileViewMode.GRID_SMALL -> "apps" } } + + private fun saveFolderSortSetting(folderPath: String, sortType: FileSortType, isDesc: Boolean) { + val prefs = requireContext().getSharedPreferences("FolderSortPrefs", Context.MODE_PRIVATE) + prefs.edit() + .putString("${folderPath}_sort", sortType.name) + .putBoolean("${folderPath}_desc", isDesc) + .apply() + } + + // ๐Ÿ’ก ํด๋”๋ณ„๋กœ ์ €์žฅ๋œ ์ •๋ ฌ ๋ฐฉ์‹ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ (๊ธฐ๋ณธ๊ฐ’์€ ์ตœ์‹ ์ˆœ / ๋‚ด๋ฆผ์ฐจ์ˆœ) + private fun loadFolderSortSetting(folderPath: String) { + val prefs = requireContext().getSharedPreferences("FolderSortPrefs", Context.MODE_PRIVATE) + + val savedSortName = prefs.getString("${folderPath}_sort", FileSortType.LAST_USED.name) + currentSort = try { + FileSortType.valueOf(savedSortName ?: FileSortType.LAST_USED.name) + } catch (e: Exception) { + FileSortType.LAST_USED + } + + isDescending = prefs.getBoolean("${folderPath}_desc", true) + } + val MAX_COUNT = 9 private fun setupControls(view: View) { val layoutTitleDefault = view.findViewById(R.id.layoutTitleDefault) @@ -660,6 +683,7 @@ class CompletedFilesFragment : Fragment() { spinnerSort.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(p0: AdapterView<*>?, p1: View?, position: Int, p3: Long) { currentSort = FileSortType.values()[position] + saveFolderSortSetting(currentDir.absolutePath, currentSort, isDescending) applyFilterAndSort() } override fun onNothingSelected(p0: AdapterView<*>?) {} @@ -669,6 +693,7 @@ class CompletedFilesFragment : Fragment() { tvSortOrder.setOnClickListener { isDescending = !isDescending tvSortOrder.text = if (isDescending) "arrow_downward" else "arrow_upward" + saveFolderSortSetting(currentDir.absolutePath, currentSort, isDescending) applyFilterAndSort() } } @@ -954,6 +979,20 @@ class CompletedFilesFragment : Fragment() { private fun loadFiles() { allFiles = if (currentDir.exists()) currentDir.listFiles()?.toList() ?: emptyList() else emptyList() backPressedCallback.isEnabled = isSelectionMode || currentDir.absolutePath != rootDir.absolutePath + + // ๐Ÿ’ก 1. ํ˜„์žฌ ์ง„์ž…ํ•œ ํด๋”์˜ ์ •๋ ฌ ์„ค์ •์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. + loadFolderSortSetting(currentDir.absolutePath) + + // ๐Ÿ’ก 2. ๋ถˆ๋Ÿฌ์˜จ ์„ค์ •์— ๋งž๊ฒŒ UI ์ปดํฌ๋„ŒํŠธ(์Šคํ”ผ๋„ˆ, ํ™”์‚ดํ‘œ) ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. + view?.let { root -> + val spinnerSort = root.findViewById(R.id.spinnerSort) + val tvSortOrder = root.findViewById(R.id.tvSortOrder) + + // ์ •๋ ฌํƒ€์ž… ์Šคํ”ผ๋„ˆ ์ธ๋ฑ์Šค ์ฐพ์•„ ๋ฐ”๊พธ๊ธฐ (์„ ํƒ ์‹œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์œผ๋กœ applyFilterAndSort ์ž๋™ ํ˜ธ์ถœ ์ฐจ๋‹จ ์ฒ˜๋ฆฌ ํฌํ•จ) + spinnerSort.setSelection(currentSort.ordinal, false) + tvSortOrder.text = if (isDescending) "arrow_downward" else "arrow_upward" + } + applyFilterAndSort() } diff --git a/app/src/main/kotlin/bums/lunatic/launcher/player/DocumentViewerActivity.kt b/app/src/main/kotlin/bums/lunatic/launcher/player/DocumentViewerActivity.kt index ea2ab73c..b68a0e2c 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/player/DocumentViewerActivity.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/player/DocumentViewerActivity.kt @@ -15,7 +15,9 @@ import bums.lunatic.launcher.home.tokiz.TouchArea import bums.lunatic.launcher.home.tokiz.view.PagedTextLayout import bums.lunatic.launcher.home.tokiz.view.PagedTextViewInterface import bums.lunatic.launcher.utils.FileUtils.detectFileEncoding +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import java.io.File import java.io.RandomAccessFile import java.nio.charset.Charset @@ -212,31 +214,36 @@ class DocumentViewerActivity : AppCompatActivity(), PagedTextViewInterface { if (!::pageIndexer.isInitialized || pageIndex !in pageIndexer.pageOffsets.indices) return currentPageIndex = pageIndex - // ํŽ˜์ด์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ตœ์ข… ํŽ˜์ด์ง€ ์ธ๋ฑ์Šค๋ฅผ SharedPreferences์— ์ €์žฅ currentFile?.let { file -> sharedPreferences.edit().putInt(file.absolutePath, currentPageIndex).apply() } - val startOffset = pageIndexer.pageOffsets[pageIndex] - val endOffset = if (pageIndex + 1 < pageIndexer.pageOffsets.size) { - pageIndexer.pageOffsets[pageIndex + 1] - } else { - raf.length() - } + lifecycleScope.launch { + val pageText = withContext(Dispatchers.IO) { + val startOffset = pageIndexer.pageOffsets[pageIndex] + val endOffset = if (pageIndex + 1 < pageIndexer.pageOffsets.size) { + pageIndexer.pageOffsets[pageIndex + 1] + } else { + raf.length() + } - val pageSize = (endOffset - startOffset).toInt() - val buffer = ByteArray(pageSize) + val pageSize = (endOffset - startOffset).toInt() + val buffer = ByteArray(pageSize) - raf.seek(startOffset) - raf.read(buffer) + raf.seek(startOffset) + raf.read(buffer) + String(buffer, Charset.forName(encoding)) + } - val pageText = String(buffer, Charset.forName(encoding)) - pagedLayout.text = pageText - pagedLayout.currentPageTextView?.text = "${currentPageIndex + 1} / ${pageIndexer.pageOffsets.size}" - pagedLayout.currentChapter?.text = pageIndexer.getChapterForPage(currentPageIndex)?.title - pagedLayout.currentChapter?.setOnClickListener { - if (!::pageIndexer.isInitialized || pageIndexer.pageOffsets.isEmpty()) return@setOnClickListener - showChapterListDialog() + // ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ UI ์—…๋ฐ์ดํŠธ + pagedLayout.text = pageText + pagedLayout.currentPageTextView?.text = "${currentPageIndex + 1} / ${pageIndexer.pageOffsets.size}" + pagedLayout.currentChapter?.text = pageIndexer.getChapterForPage(currentPageIndex)?.title + + pagedLayout.currentChapter?.setOnClickListener { + if (!::pageIndexer.isInitialized || pageIndexer.pageOffsets.isEmpty()) return@setOnClickListener + showChapterListDialog() + } } } diff --git a/app/src/main/kotlin/bums/lunatic/launcher/player/PageIndexer.kt b/app/src/main/kotlin/bums/lunatic/launcher/player/PageIndexer.kt index 7431551a..8282246c 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/player/PageIndexer.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/player/PageIndexer.kt @@ -38,7 +38,7 @@ class PageIndexer( val raf = RandomAccessFile(file, "r") val fileLength = raf.length() var currentOffset = 0L - + var lastProgress = -1 pageOffsets.add(currentOffset) val bufferSize = 40000 @@ -137,7 +137,10 @@ class PageIndexer( } val progress = ((currentOffset * 100) / fileLength).toInt() - onProgress(progress) + if (progress != lastProgress) { + onProgress(progress) + lastProgress = progress + } startLine = endLine + 1 } diff --git a/app/src/main/res/layout/layout_textviewer.xml b/app/src/main/res/layout/layout_textviewer.xml index 7dff3cce..f65d6450 100644 --- a/app/src/main/res/layout/layout_textviewer.xml +++ b/app/src/main/res/layout/layout_textviewer.xml @@ -36,13 +36,13 @@