Skip to content

Commit

Permalink
fix: wallpaper changer doesn't work reliably (closes #145)
Browse files Browse the repository at this point in the history
  • Loading branch information
Bnyro committed Oct 24, 2023
1 parent ba82f5c commit 57e953a
Show file tree
Hide file tree
Showing 7 changed files with 40 additions and 35 deletions.
2 changes: 1 addition & 1 deletion app/src/main/java/com/bnyro/wallpaper/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class App : Application(), ImageLoaderFactory {

Preferences.init(this)

DatabaseHolder().create(this)
DatabaseHolder.create(this)
}

override fun newImageLoader(): ImageLoader {
Expand Down
10 changes: 4 additions & 6 deletions app/src/main/java/com/bnyro/wallpaper/db/DatabaseHolder.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,15 @@ package com.bnyro.wallpaper.db
import android.content.Context
import androidx.room.Room

class DatabaseHolder {
object DatabaseHolder {
private const val DATABASE_NAME = "WallYouDb"
lateinit var Database: AppDatabase

fun create(applicationContext: Context) {
Database = Room.databaseBuilder(
applicationContext,
AppDatabase::class.java,
DATABASE_NAME
).build()
}

companion object {
const val DATABASE_NAME = "WallYouDb"
lateinit var Database: AppDatabase
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import com.bnyro.wallpaper.R
import com.bnyro.wallpaper.enums.WallpaperConfig
Expand All @@ -22,12 +21,9 @@ import com.bnyro.wallpaper.ui.components.prefs.SettingsCategory
import com.bnyro.wallpaper.ui.nav.DrawerScreens
import com.bnyro.wallpaper.util.LocalWallpaperHelper
import com.bnyro.wallpaper.util.PickFolderContract
import com.bnyro.wallpaper.util.WorkerHelper

@Composable
fun WallpaperChangerPref(config: WallpaperConfig, onChange: (WallpaperConfig) -> Unit) {
val context = LocalContext.current

val localWallpaperDirChooser = rememberLauncherForActivityResult(PickFolderContract()) {
val uri = it ?: return@rememberLauncherForActivityResult
config.localFolderUri = uri.toString()
Expand Down Expand Up @@ -55,7 +51,6 @@ fun WallpaperChangerPref(config: WallpaperConfig, onChange: (WallpaperConfig) ->
config.source = WallpaperSource.fromInt(newValue.toInt())
wallpaperSource = config.source
onChange(config)
WorkerHelper.enqueue(context, true)
}

Crossfade(targetState = wallpaperSource, label = "wallpaper_source") { state ->
Expand All @@ -75,7 +70,6 @@ fun WallpaperChangerPref(config: WallpaperConfig, onChange: (WallpaperConfig) ->
config.apiRoute = DrawerScreens.apiScreens[index].route
currentIndex = index
onChange(config)
WorkerHelper.enqueue(context, true)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage
import com.bnyro.wallpaper.db.DatabaseHolder.Companion.Database
import com.bnyro.wallpaper.db.DatabaseHolder.Database
import com.bnyro.wallpaper.db.obj.Wallpaper
import com.bnyro.wallpaper.ext.query

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import androidx.palette.graphics.Palette
import com.bnyro.wallpaper.R
import com.bnyro.wallpaper.db.DatabaseHolder.Companion.Database
import com.bnyro.wallpaper.db.DatabaseHolder.Database
import com.bnyro.wallpaper.db.obj.Wallpaper
import com.bnyro.wallpaper.enums.WallpaperTarget
import com.bnyro.wallpaper.ext.awaitQuery
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.bnyro.wallpaper.R
import com.bnyro.wallpaper.db.DatabaseHolder.Companion.Database
import com.bnyro.wallpaper.db.DatabaseHolder.Database
import com.bnyro.wallpaper.db.obj.Wallpaper
import com.bnyro.wallpaper.ext.query
import com.bnyro.wallpaper.ui.components.WallpaperGrid
Expand Down
51 changes: 32 additions & 19 deletions app/src/main/java/com/bnyro/wallpaper/util/WorkerHelper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,39 +12,52 @@ import java.util.concurrent.TimeUnit
object WorkerHelper {
private const val JOB_NAME = "WallpaperChanger"

private fun getWorkerConstraints(): Constraints {
val wallpaperConfigs = Preferences.getWallpaperConfigs()
// only require internet when the source is not local
val networkType = if (wallpaperConfigs.any { it.source != WallpaperSource.LOCAL }) {
NetworkType.CONNECTED
} else {
NetworkType.NOT_REQUIRED
}

return Constraints.Builder()
.setRequiredNetworkType(networkType)
.build()
}

fun enqueue(context: Context, forceUpdate: Boolean = false) {
if (!Preferences.getBoolean(Preferences.wallpaperChangerKey, false)) {
cancel(context)
WorkManager.getInstance(context)
.cancelUniqueWork(JOB_NAME)
return
}

val networkType = if (
Preferences.getWallpaperConfigs().any { it.source != WallpaperSource.LOCAL }
) {
NetworkType.NOT_REQUIRED
} else {
NetworkType.CONNECTED
}

val repeatIntervalMinutes = Preferences.getString(
Preferences.wallpaperChangerIntervalKey,
Preferences.defaultWallpaperChangeInterval.toString()
).toLong()
val job = PeriodicWorkRequestBuilder<BackgroundWorker>(
Preferences.getString(
Preferences.wallpaperChangerIntervalKey,
Preferences.defaultWallpaperChangeInterval.toString()
)?.toLong() ?: Preferences.defaultWallpaperChangeInterval,
repeatIntervalMinutes,
TimeUnit.MINUTES
).setConstraints(
Constraints.Builder()
.setRequiredNetworkType(networkType)
.build()
).build()
)
.setConstraints(getWorkerConstraints())
.build()

val policy = if (forceUpdate) ExistingPeriodicWorkPolicy.UPDATE else ExistingPeriodicWorkPolicy.KEEP
WorkManager.getInstance(context)
.enqueueUniquePeriodicWork(JOB_NAME, policy, job)
}

private fun cancel(context: Context) {
/**
fun enqueueTestWorker(context: Context) {
val job = OneTimeWorkRequestBuilder<BackgroundWorker>()
.setConstraints(getWorkerConstraints())
.build()
WorkManager.getInstance(context)
.cancelUniqueWork(JOB_NAME)
.enqueue(job)
}
**/
}

0 comments on commit 57e953a

Please sign in to comment.