diff --git a/app/src/main/kotlin/bums/lunatic/launcher/LauncherActivity.kt b/app/src/main/kotlin/bums/lunatic/launcher/LauncherActivity.kt index f00ee07a..0e2b3ff4 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/LauncherActivity.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/LauncherActivity.kt @@ -930,6 +930,18 @@ open class LauncherActivity : CommonActivity() { } } + var resumeCount = 0 + get() = field + set(value) { + if (value % 10 == 0) { + val intent = Intent(this@LauncherActivity, ForeGroundService::class.java).apply { + action = ForeGroundService.ACTION_WALLPAPER + } + startService(intent) + } + field = value + } + @RequiresApi(Build.VERSION_CODES.O_MR1) override fun onResume() { super.onResume() @@ -939,6 +951,7 @@ open class LauncherActivity : CommonActivity() { } else { requestPermission() } + resumeCount += 1 } private fun openSearch() { diff --git a/app/src/main/kotlin/bums/lunatic/launcher/helpers/ForeGroundService.kt b/app/src/main/kotlin/bums/lunatic/launcher/helpers/ForeGroundService.kt index 2e17e9c5..9dce9a9e 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/helpers/ForeGroundService.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/helpers/ForeGroundService.kt @@ -69,31 +69,48 @@ class WallpaperAutoChangeWorker(private val context: Context, params: WorkerPara override suspend fun doWork(): Result { val folderPath = inputData.getString("FOLDER_PATH") ?: return Result.failure() val folder = File(folderPath) + val trashFolder = File(folder, "low_res_backup") + if (!trashFolder.exists()) trashFolder.mkdirs() + val wm = WallpaperManager.getInstance(context) val minWidth = wm.desiredMinimumWidth val minHeight = wm.desiredMinimumHeight + // 가로, 세로 중 더 큰 값을 기준으로 삼으려면 다음과 같이 정의합니다. - val requiredSize = Math.max(minWidth, minHeight) + val requiredSize = Math.max(minWidth, minHeight).times(0.6) - // 1. 이미지 파일 목록 가져오기 + 크기 조건 필터링 - val validImages = folder.listFiles { file -> - val isImage = file.isFile && (file.extension.equals("jpg", true) || - file.extension.equals("png", true) || - file.extension.equals("jpeg", true)) + val allFiles = folder.listFiles() ?: return Result.failure() + + val validImages = mutableListOf() + val invalidImages = mutableListOf() + + // 1. 파일 전수 조사 및 분류 + for (file in allFiles) { + + if (file.isFile && (file.extension.equals("jpg", true) || + file.extension.equals("png", true) || + file.extension.equals("jpeg", true) || + file.extension.equals("bmp", true) || // BMP 추가 + file.extension.equals("webp", true))) { - if (isImage) { - // 비트맵을 실제로 로드하지 않고 크기만 체크 (메모리 절약) val options = BitmapFactory.Options().apply { inJustDecodeBounds = true } BitmapFactory.decodeFile(file.absolutePath, options) - - // 조건: 이미지의 가로와 세로가 모두 기기 기준 해상도(requiredSize)보다 커야 함 - options.outWidth >= requiredSize && options.outHeight >= requiredSize - } else { - false + Blog.LOGE("requiredSize ${requiredSize} w :${options.outWidth} , h : ${options.outHeight}") + if (options.outWidth >= requiredSize && options.outHeight >= requiredSize) { + validImages.add(file) + } else { + invalidImages.add(file) // 조건 미달 + } } } + // 2. 부적합 이미지 이동 처리 (Job 밖에서 따로 돌려도 무방) + invalidImages.forEach { file -> + val targetFile = File(trashFolder, file.name) + file.renameTo(targetFile) // 파일 이동 + } + if (validImages.isNullOrEmpty()) { // 조건에 맞는 이미지가 하나도 없을 경우 처리 return Result.failure() @@ -165,7 +182,7 @@ class ForeGroundService : Service() { val EXTRA_TARGET_URL = "ACTION_SEND_TO_LOVE" val ACTION_SIT_DOWN = "ACTION_SIT_DOWN" val ACTION_COPY_COMPLETE = "ACTION_COPY_COMPLETE" - + val ACTION_WALLPAPER = "ACTION_WALLPAPER" val targetUrls = arrayListOf>() } @@ -192,24 +209,26 @@ class ForeGroundService : Service() { private fun startWallpaperTimer() { serviceScope.launch { while (true) { - // 실행하고자 하는 폴더 경로 (본인 경로로 수정) - val myFolderPath = File(File(getExternalFilesDir(null), "completed_torrents"),"이미지").absolutePath - - val workRequest = OneTimeWorkRequestBuilder() - .setInputData(workDataOf("FOLDER_PATH" to myFolderPath)) - .build() - - workmanager()?.enqueueUniqueWork( - "SingleWallpaperChange", - ExistingWorkPolicy.REPLACE, - workRequest - ) - + changeWallPaper() delay(TimeUnit.MINUTES.toMillis(10)) // 10분 대기 } } } + private fun changeWallPaper() { + val myFolderPath = File(File(getExternalFilesDir(null), "completed_torrents"),"이미지").absolutePath + + val workRequest = OneTimeWorkRequestBuilder() + .setInputData(workDataOf("FOLDER_PATH" to myFolderPath)) + .build() + + workmanager()?.enqueueUniqueWork( + "SingleWallpaperChange", + ExistingWorkPolicy.REPLACE, + workRequest + ) + } + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { Blog.LOGE("intent?.action >> ${intent?.action}") when(intent?.action) { @@ -241,9 +260,13 @@ class ForeGroundService : Service() { ACTION_COPY_COMPLETE -> { startForeGround(max = 100, progress = intent?.getIntExtra(EXTRA_PROGRESS,0) ?: 0, str = intent?.getStringExtra(EXTRA_MSGKEY)) } + ACTION_WALLPAPER -> { + changeWallPaper() + } else -> { } + }.apply { if(intent?.action?.equals(ACTION_SIT_DOWN) == false) { startForeGround() diff --git a/app/src/main/kotlin/bums/lunatic/launcher/home/NeoRssActivity.kt b/app/src/main/kotlin/bums/lunatic/launcher/home/NeoRssActivity.kt index a490dbb2..dd249409 100644 --- a/app/src/main/kotlin/bums/lunatic/launcher/home/NeoRssActivity.kt +++ b/app/src/main/kotlin/bums/lunatic/launcher/home/NeoRssActivity.kt @@ -545,6 +545,7 @@ open class NeoRssActivity : CommonActivity() { R.id.zzalbang -> BookmarkPagerFragment() R.id.btn_x -> TokiFragment.newInstanceX() R.id.btn_i -> TokiFragment.newInstanceI() + R.id.btn_btsearch -> TokiFragment.newInstanceMagnet() R.id.btn_torrent -> TorrentListFragment() R.id.btn_info -> SystemStatusFragment() R.id.btn_completed_files -> CompletedFilesFragment() diff --git a/app/src/main/res/layout/rss_activity.xml b/app/src/main/res/layout/rss_activity.xml index 43d161f6..44297e8e 100644 --- a/app/src/main/res/layout/rss_activity.xml +++ b/app/src/main/res/layout/rss_activity.xml @@ -79,7 +79,12 @@ android:visibility="gone" style="@style/CommonFabStyle" android:id="@+id/btn_i"/> - +