..
This commit is contained in:
parent
466a819800
commit
b0dbaa50df
@ -70,31 +70,49 @@ class WallpaperAutoChangeWorker(private val context: Context, params: WorkerPara
|
|||||||
val folderPath = inputData.getString("FOLDER_PATH") ?: return Result.failure()
|
val folderPath = inputData.getString("FOLDER_PATH") ?: return Result.failure()
|
||||||
val folder = File(folderPath)
|
val folder = File(folderPath)
|
||||||
|
|
||||||
// 1. 이미지 파일 목록 가져오기
|
val wm = WallpaperManager.getInstance(context)
|
||||||
val images = folder.listFiles { file ->
|
val minWidth = wm.desiredMinimumWidth
|
||||||
file.isFile && (file.extension.equals("jpg", true) || file.extension.equals("png", true) || file.extension.equals("jpeg", true))
|
val minHeight = wm.desiredMinimumHeight
|
||||||
|
// 가로, 세로 중 더 큰 값을 기준으로 삼으려면 다음과 같이 정의합니다.
|
||||||
|
val requiredSize = Math.max(minWidth, minHeight)
|
||||||
|
|
||||||
|
// 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))
|
||||||
|
|
||||||
|
if (isImage) {
|
||||||
|
// 비트맵을 실제로 로드하지 않고 크기만 체크 (메모리 절약)
|
||||||
|
val options = BitmapFactory.Options().apply { inJustDecodeBounds = true }
|
||||||
|
BitmapFactory.decodeFile(file.absolutePath, options)
|
||||||
|
|
||||||
|
// 조건: 이미지의 가로와 세로가 모두 기기 기준 해상도(requiredSize)보다 커야 함
|
||||||
|
options.outWidth >= requiredSize && options.outHeight >= requiredSize
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (images.isNullOrEmpty()) return Result.failure()
|
if (validImages.isNullOrEmpty()) {
|
||||||
|
// 조건에 맞는 이미지가 하나도 없을 경우 처리
|
||||||
|
return Result.failure()
|
||||||
|
}
|
||||||
|
|
||||||
// 2. 랜덤 이미지 선택 및 비트맵 로드
|
// 2. 필터링된 이미지 중 랜덤 선택 및 비트맵 로드
|
||||||
val randomImage = images.random()
|
val randomImage = validImages.random()
|
||||||
val options = BitmapFactory.Options().apply { inJustDecodeBounds = false }
|
val originalBitmap = BitmapFactory.decodeFile(randomImage.absolutePath) ?: return Result.failure()
|
||||||
val originalBitmap = BitmapFactory.decodeFile(randomImage.absolutePath, options) ?: return Result.failure()
|
|
||||||
|
|
||||||
return try {
|
return try {
|
||||||
val wm = WallpaperManager.getInstance(context)
|
// 3. 비율 유지하며 Center Crop 처리 (기존 로직 유지)
|
||||||
val targetWidth = wm.desiredMinimumWidth
|
val finalBitmap = Bitmap.createBitmap(minWidth, minHeight, Bitmap.Config.ARGB_8888)
|
||||||
val targetHeight = wm.desiredMinimumHeight
|
|
||||||
|
|
||||||
// 3. 비율 유지하며 Center Crop 처리
|
|
||||||
val finalBitmap = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.ARGB_8888)
|
|
||||||
val canvas = Canvas(finalBitmap)
|
val canvas = Canvas(finalBitmap)
|
||||||
val scale = Math.max(targetWidth.toFloat() / originalBitmap.width, targetHeight.toFloat() / originalBitmap.height)
|
|
||||||
|
val scale = Math.max(minWidth.toFloat() / originalBitmap.width, minHeight.toFloat() / originalBitmap.height)
|
||||||
val scaledWidth = scale * originalBitmap.width
|
val scaledWidth = scale * originalBitmap.width
|
||||||
val scaledHeight = scale * originalBitmap.height
|
val scaledHeight = scale * originalBitmap.height
|
||||||
val left = (targetWidth - scaledWidth) / 2f
|
val left = (minWidth - scaledWidth) / 2f
|
||||||
val top = (targetHeight - scaledHeight) / 2f
|
val top = (minHeight - scaledHeight) / 2f
|
||||||
|
|
||||||
canvas.drawBitmap(originalBitmap, null, RectF(left, top, left + scaledWidth, top + scaledHeight), Paint(Paint.FILTER_BITMAP_FLAG))
|
canvas.drawBitmap(originalBitmap, null, RectF(left, top, left + scaledWidth, top + scaledHeight), Paint(Paint.FILTER_BITMAP_FLAG))
|
||||||
|
|
||||||
|
|||||||
@ -37,6 +37,7 @@ import androidx.core.view.ViewCompat
|
|||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
import androidx.core.view.marginTop
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import bums.lunatic.launcher.LunaticLauncher
|
import bums.lunatic.launcher.LunaticLauncher
|
||||||
import bums.lunatic.launcher.R
|
import bums.lunatic.launcher.R
|
||||||
@ -461,10 +462,13 @@ open class NeoRssActivity : CommonActivity() {
|
|||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
|
||||||
HeadsetActionButtonReceiver.register(this)
|
HeadsetActionButtonReceiver.register(this)
|
||||||
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, windowInsets ->
|
// ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, windowInsets ->
|
||||||
|
// WindowInsetsCompat.CONSUMED
|
||||||
|
// }
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(binding.fragmentContainer) { view, windowInsets ->
|
||||||
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
|
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
|
||||||
view.setPadding(insets.left, insets.top, insets.right, insets.bottom)
|
view.setPadding(insets.left, insets.top, insets.right, insets.bottom)
|
||||||
WindowInsetsCompat.CONSUMED
|
windowInsets
|
||||||
}
|
}
|
||||||
|
|
||||||
handleBackPress()
|
handleBackPress()
|
||||||
|
|||||||
@ -599,10 +599,6 @@ class TokiFragment : RemoteGestureFragment(), PagedTextViewInterface,KeyEventHan
|
|||||||
|
|
||||||
// 💡 1. Toki용 레이아웃 설정
|
// 💡 1. Toki용 레이아웃 설정
|
||||||
binding.lunaticBrowser.setupForToki()
|
binding.lunaticBrowser.setupForToki()
|
||||||
originalVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
|
|
||||||
|
|
||||||
// 미디어 볼륨을 0으로 설정 (FLAG_SHOW_UI를 0으로 주면 볼륨 바가 뜨지 않음)
|
|
||||||
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0)
|
|
||||||
// 💡 2. GeckoWeb 접근 및 설정
|
// 💡 2. GeckoWeb 접근 및 설정
|
||||||
val geckoWeb = binding.lunaticBrowser.geckoWeb
|
val geckoWeb = binding.lunaticBrowser.geckoWeb
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,6 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:clipChildren="false"
|
android:clipChildren="false"
|
||||||
android:visibility="visible"
|
android:visibility="visible"
|
||||||
android:layout_marginBottom="15dp"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user