diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml
index 417577f..165c0a7 100644
--- a/.github/workflows/dev.yml
+++ b/.github/workflows/dev.yml
@@ -43,11 +43,8 @@ jobs:
- name: Build app
run: ./gradlew assembleDebug
- - name: Rename apk
- run: mv app/build/outputs/apk/debug/app-universal-debug.apk hviewer-debug.apk
-
- name: Upload APK artifact
uses: actions/upload-artifact@v7
with:
name: app
- path: hviewer-debug.apk
+ path: app/build/outputs/apk/foss/debug/*universal*.apk
diff --git a/.github/workflows/publish-playstore.yml b/.github/workflows/publish-playstore.yml
index a61f904..4a0aab2 100644
--- a/.github/workflows/publish-playstore.yml
+++ b/.github/workflows/publish-playstore.yml
@@ -21,6 +21,13 @@ jobs:
- name: Checkout repo
uses: actions/checkout@v4
+ - name: Generate key.properties
+ run: |
+ echo "$KEY_PROPERTIES" > key.properties
+ chmod 600 key.properties
+ env:
+ KEY_PROPERTIES: ${{ secrets.KEY_PROPERTIES }}
+
- name: Setup JDK
uses: actions/setup-java@v4
with:
@@ -33,30 +40,20 @@ jobs:
PLAY_STORE_JSON_KEY: ${{ secrets.PLAY_STORE_JSON_KEY }}
- name: Build Release AAB
- run: ./gradlew bundleRelease
-
- - name: Sign APK
- id: sign_app
- uses: ilharp/sign-android-release@nightly
- with:
- releaseDir: app/build/outputs/bundle/release
- signingKey: ${{ secrets.SIGNING_KEY }}
- keyAlias: ${{ secrets.ALIAS }}
- keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
- keyPassword: ${{ secrets.KEY_PASSWORD }}
- buildToolsVersion: ${{ env.ANDROID_BUILD_TOOLS_VERSION }}
+ run: ./gradlew bundleGplayRelease
- name: Upload APK artifact
uses: actions/upload-artifact@v7
with:
- name: app-release.aab
- path: app/build/outputs/bundle/release/*signed.aab
+ name: gplay-release.aab
+ path: app/build/outputs/bundle/gplayRelease/*.aab
- name: Upload to Play Store
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJson: play-store-key.json
packageName: com.paulcoding.hviewer
- releaseFiles: app/build/outputs/bundle/release/*signed.aab
- track: ${{ github.event.inputs.track }}
\ No newline at end of file
+ releaseFiles: app/build/outputs/bundle/gplayRelease/*.aab
+ track: ${{ github.event.inputs.track }}
+ status: draft
\ No newline at end of file
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 46d99b0..c81ef1e 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -19,6 +19,13 @@ jobs:
- name: Checkout code
uses: actions/checkout@v6
+ - name: Generate key.properties
+ run: |
+ echo "$KEY_PROPERTIES" > key.properties
+ chmod 600 key.properties
+ env:
+ KEY_PROPERTIES: ${{ secrets.KEY_PROPERTIES }}
+
- name: Set up JDK
uses: actions/setup-java@v5
with:
@@ -30,26 +37,7 @@ jobs:
- name: Build app
run: |
- ./gradlew assembleRelease
-
- - name: Sign APK
- id: sign_app
- uses: ilharp/sign-android-release@nightly
- with:
- releaseDir: app/build/outputs/apk/release
- signingKey: ${{ secrets.SIGNING_KEY }}
- keyAlias: ${{ secrets.ALIAS }}
- keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
- keyPassword: ${{ secrets.KEY_PASSWORD }}
- buildToolsVersion: ${{ env.ANDROID_BUILD_TOOLS_VERSION }}
-
- - name: Rename apks
- run: |
- mv app/build/outputs/apk/release/app-arm64-v8a-release-unsigned-signed.apk hviewer-${{ github.ref_name }}-arm64-v8a-release.apk
- mv app/build/outputs/apk/release/app-armeabi-v7a-release-unsigned-signed.apk hviewer-${{ github.ref_name }}-armeabi-v7a-release.apk
- mv app/build/outputs/apk/release/app-universal-release-unsigned-signed.apk hviewer-${{ github.ref_name }}-universal-release.apk
- mv app/build/outputs/apk/release/app-x86-release-unsigned-signed.apk hviewer-${{ github.ref_name }}-x86-release.apk
- mv app/build/outputs/apk/release/app-x86_64-release-unsigned-signed.apk hviewer-${{ github.ref_name }}-x86_64-release.apk
+ ./gradlew assembleFossRelease
- name: Create changelog
id: changelog
@@ -64,12 +52,7 @@ jobs:
with:
draft: true
body: ${{ steps.changelog.outputs.changes }}
- files: |
- hviewer-${{ github.ref_name }}-arm64-v8a-release.apk
- hviewer-${{ github.ref_name }}-armeabi-v7a-release.apk
- hviewer-${{ github.ref_name }}-universal-release.apk
- hviewer-${{ github.ref_name }}-x86-release.apk
- hviewer-${{ github.ref_name }}-x86_64-release.apk
+ files: app/build/outputs/apk/*/release/*universal*.apk
fail_on_unmatched_files: true
make_latest: true
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index a73b056..e5672de 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -75,6 +75,22 @@ android {
}
}
+ flavorDimensions.add("version")
+
+ productFlavors {
+ create("foss") {
+ dimension = "version"
+ // The info block is encrypted and can only be read by google
+ dependenciesInfo {
+ includeInApk = false
+ includeInBundle = false
+ }
+ }
+ create("gplay") {
+ dimension = "version"
+ }
+ }
+
buildTypes {
debug {
applicationIdSuffix = ".dev"
@@ -97,6 +113,20 @@ android {
isCoreLibraryDesugaringEnabled = true
}
+ kotlinOptions {
+ jvmTarget = "17"
+ freeCompilerArgs = freeCompilerArgs + listOf(
+ "-opt-in=kotlin.ExperimentalStdlibApi",
+ "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
+ "-opt-in=kotlinx.coroutines.FlowPreview",
+ "-opt-in=kotlin.time.ExperimentalTime",
+ "-opt-in=kotlin.RequiresOptIn",
+ "-opt-in=kotlin.ExperimentalUnsignedTypes",
+ "-opt-in=androidx.compose.material3.ExperimentalMaterial3Api",
+ "-Xannotation-default-target=param-property"
+ )
+ }
+
buildFeatures {
compose = true
buildConfig = true
diff --git a/app/src/foss/AndroidManifest.xml b/app/src/foss/AndroidManifest.xml
new file mode 100644
index 0000000..ac7a67a
--- /dev/null
+++ b/app/src/foss/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/foss/java/com/paulcoding/hviewer/di/FlavorModule.kt b/app/src/foss/java/com/paulcoding/hviewer/di/FlavorModule.kt
new file mode 100644
index 0000000..02025a0
--- /dev/null
+++ b/app/src/foss/java/com/paulcoding/hviewer/di/FlavorModule.kt
@@ -0,0 +1,20 @@
+package com.paulcoding.hviewer.di
+
+import com.paulcoding.hviewer.repository.UpdateAppRepository
+import com.paulcoding.hviewer.repository.UpdateAppRepositoryImpl
+import com.paulcoding.hviewer.worker.ScheduleWorker
+import com.paulcoding.hviewer.worker.ScheduleWorkerImpl
+import com.paulcoding.hviewer.worker.UpdateApkWorker
+import org.koin.androidx.workmanager.dsl.workerOf
+import org.koin.core.module.dsl.singleOf
+import org.koin.dsl.module
+
+val flavorModule = module {
+ single {
+ ScheduleWorkerImpl()
+ }
+
+ single { UpdateAppRepositoryImpl(get(), get()) }
+
+ workerOf(::UpdateApkWorker)
+}
\ No newline at end of file
diff --git a/app/src/foss/java/com/paulcoding/hviewer/repository/UpdateAppRepositoryImpl.kt b/app/src/foss/java/com/paulcoding/hviewer/repository/UpdateAppRepositoryImpl.kt
new file mode 100644
index 0000000..0484739
--- /dev/null
+++ b/app/src/foss/java/com/paulcoding/hviewer/repository/UpdateAppRepositoryImpl.kt
@@ -0,0 +1,17 @@
+package com.paulcoding.hviewer.repository
+
+import com.paulcoding.hviewer.helper.Downloader
+import com.paulcoding.hviewer.network.GithubRemoteDatasource
+import java.io.File
+
+class UpdateAppRepositoryImpl(
+ private val githubRemoteDatasource: GithubRemoteDatasource, private val downloader: Downloader
+) : UpdateAppRepository {
+ override suspend fun getLatestAppRelease() = runCatching {
+ githubRemoteDatasource.getLatestAppRelease()
+ }
+
+ override suspend fun downloadApk(downloadUrl: String, destination: File) = runCatching {
+ downloader.download(downloadUrl, destination)
+ }
+}
\ No newline at end of file
diff --git a/app/src/foss/java/com/paulcoding/hviewer/worker/ScheduleWorkerImpl.kt b/app/src/foss/java/com/paulcoding/hviewer/worker/ScheduleWorkerImpl.kt
new file mode 100644
index 0000000..a620945
--- /dev/null
+++ b/app/src/foss/java/com/paulcoding/hviewer/worker/ScheduleWorkerImpl.kt
@@ -0,0 +1,33 @@
+package com.paulcoding.hviewer.worker
+
+import android.content.Context
+import androidx.work.Constraints
+import androidx.work.ExistingPeriodicWorkPolicy
+import androidx.work.NetworkType
+import androidx.work.PeriodicWorkRequestBuilder
+import androidx.work.WorkManager
+import com.paulcoding.hviewer.helper.calculateDelayUntilMidnight
+import java.util.concurrent.TimeUnit
+
+class ScheduleWorkerImpl() : ScheduleWorker {
+ override fun schedule(context: Context) {
+ scheduleScriptsUpdate(context)
+ scheduleApkUpdate(context)
+ }
+
+ private fun scheduleApkUpdate(context: Context) {
+ val constraints = Constraints.Builder()
+ .setRequiredNetworkType(NetworkType.CONNECTED)
+ .build()
+ val updateScriptsWorkRequest =
+ PeriodicWorkRequestBuilder(1, TimeUnit.DAYS)
+ .setConstraints(constraints)
+ .setInitialDelay(calculateDelayUntilMidnight(), TimeUnit.MILLISECONDS)
+ .build()
+ WorkManager.getInstance(context).enqueueUniquePeriodicWork(
+ "updateApk",
+ ExistingPeriodicWorkPolicy.KEEP,
+ updateScriptsWorkRequest
+ )
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/paulcoding/hviewer/worker/UpdateApkWork.kt b/app/src/foss/java/com/paulcoding/hviewer/worker/UpdateApkWork.kt
similarity index 100%
rename from app/src/main/java/com/paulcoding/hviewer/worker/UpdateApkWork.kt
rename to app/src/foss/java/com/paulcoding/hviewer/worker/UpdateApkWork.kt
diff --git a/app/src/gplay/java/com/paulcoding/hviewer/di/FlavorModule.kt b/app/src/gplay/java/com/paulcoding/hviewer/di/FlavorModule.kt
new file mode 100644
index 0000000..0693e2a
--- /dev/null
+++ b/app/src/gplay/java/com/paulcoding/hviewer/di/FlavorModule.kt
@@ -0,0 +1,15 @@
+package com.paulcoding.hviewer.di
+
+import UpdateAppRepositoryImpl
+import com.paulcoding.hviewer.repository.UpdateAppRepository
+import com.paulcoding.hviewer.worker.ScheduleWorker
+import com.paulcoding.hviewer.worker.ScheduleWorkerImpl
+import org.koin.dsl.module
+
+val flavorModule = module {
+ single {
+ ScheduleWorkerImpl()
+ }
+
+ single { UpdateAppRepositoryImpl() }
+}
\ No newline at end of file
diff --git a/app/src/gplay/java/com/paulcoding/hviewer/repository/UpdateAppRepositoryImpl.kt b/app/src/gplay/java/com/paulcoding/hviewer/repository/UpdateAppRepositoryImpl.kt
new file mode 100644
index 0000000..7aad14e
--- /dev/null
+++ b/app/src/gplay/java/com/paulcoding/hviewer/repository/UpdateAppRepositoryImpl.kt
@@ -0,0 +1,12 @@
+import com.paulcoding.hviewer.model.HRelease
+import com.paulcoding.hviewer.repository.UpdateAppRepository
+import java.io.File
+
+
+class UpdateAppRepositoryImpl(
+) : UpdateAppRepository {
+ override suspend fun getLatestAppRelease() = Result.failure(Exception("Not implemented"))
+
+ override suspend fun downloadApk(downloadUrl: String, destination: File) =
+ Result.failure(Exception("Not implemented"))
+}
\ No newline at end of file
diff --git a/app/src/gplay/java/com/paulcoding/hviewer/worker/ScheduleWorkerImpl.kt b/app/src/gplay/java/com/paulcoding/hviewer/worker/ScheduleWorkerImpl.kt
new file mode 100644
index 0000000..bf34973
--- /dev/null
+++ b/app/src/gplay/java/com/paulcoding/hviewer/worker/ScheduleWorkerImpl.kt
@@ -0,0 +1,9 @@
+package com.paulcoding.hviewer.worker
+
+import android.content.Context
+
+class ScheduleWorkerImpl() : ScheduleWorker {
+ override fun schedule(context: Context) {
+ scheduleScriptsUpdate(context)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c003ec2..232b1f5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,6 @@
-
-
+ android:theme="@style/Theme.HViewer" />
-`
- `
+
\ No newline at end of file
diff --git a/app/src/main/java/com/paulcoding/hviewer/MainApp.kt b/app/src/main/java/com/paulcoding/hviewer/MainApp.kt
index 61cedd1..3dcd81e 100644
--- a/app/src/main/java/com/paulcoding/hviewer/MainApp.kt
+++ b/app/src/main/java/com/paulcoding/hviewer/MainApp.kt
@@ -5,15 +5,16 @@ import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import com.paulcoding.hviewer.di.appModule
+import com.paulcoding.hviewer.di.flavorModule
import com.paulcoding.hviewer.di.repositoryModule
import com.paulcoding.hviewer.di.viewModelModule
import com.paulcoding.hviewer.helper.CrashHandler
import com.paulcoding.hviewer.helper.setupPaths
import com.paulcoding.hviewer.network.networkModule
-import com.paulcoding.hviewer.worker.scheduleApkUpdate
-import com.paulcoding.hviewer.worker.scheduleScriptsUpdate
+import com.paulcoding.hviewer.worker.ScheduleWorker
import com.paulcoding.js.JS
import com.tencent.mmkv.MMKV
+import org.koin.android.ext.android.get
import org.koin.android.ext.koin.androidContext
import org.koin.android.ext.koin.androidLogger
import org.koin.androidx.workmanager.koin.workManagerFactory
@@ -42,12 +43,12 @@ class MainApp : Application() {
modules(viewModelModule)
modules(repositoryModule)
modules(appModule)
+ modules(flavorModule)
}
}
private fun setupWorkers() {
- scheduleScriptsUpdate(this)
- scheduleApkUpdate(this)
+ get().schedule(this)
}
private fun setupNotificationChannels() {
diff --git a/app/src/main/java/com/paulcoding/hviewer/di/AppModule.kt b/app/src/main/java/com/paulcoding/hviewer/di/AppModule.kt
index e17e3f7..771159b 100644
--- a/app/src/main/java/com/paulcoding/hviewer/di/AppModule.kt
+++ b/app/src/main/java/com/paulcoding/hviewer/di/AppModule.kt
@@ -11,7 +11,6 @@ import com.paulcoding.hviewer.repository.FavoriteRepository
import com.paulcoding.hviewer.repository.HistoryRepository
import com.paulcoding.hviewer.repository.SiteConfigsRepository
import com.paulcoding.hviewer.repository.TabsRepository
-import com.paulcoding.hviewer.repository.UpdateAppRepository
import com.paulcoding.hviewer.ui.page.editor.EditorViewModel
import com.paulcoding.hviewer.ui.page.editor.ListScriptViewModel
import com.paulcoding.hviewer.ui.page.favorite.FavoriteViewModel
@@ -24,7 +23,6 @@ import com.paulcoding.hviewer.ui.page.sites.post.PostViewModel
import com.paulcoding.hviewer.ui.page.sites.site.PostsViewModel
import com.paulcoding.hviewer.ui.page.sites.site.SiteViewModel
import com.paulcoding.hviewer.ui.page.tabs.TabsViewModel
-import com.paulcoding.hviewer.worker.UpdateApkWorker
import com.paulcoding.hviewer.worker.UpdateScriptsWorker
import com.tencent.mmkv.MMKV
import kotlinx.coroutines.CoroutineScope
@@ -68,7 +66,6 @@ val viewModelModule = module {
val repositoryModule = module {
singleOf(::SiteConfigsRepository)
- singleOf(::UpdateAppRepository)
singleOf(::FavoriteRepository)
singleOf(::HistoryRepository)
singleOf(::TabsRepository)
@@ -114,6 +111,5 @@ val appModule = module {
CoroutineScope(SupervisorJob() + Dispatchers.IO)
}
- workerOf(::UpdateApkWorker)
workerOf(::UpdateScriptsWorker)
}
diff --git a/app/src/main/java/com/paulcoding/hviewer/helper/Time.kt b/app/src/main/java/com/paulcoding/hviewer/helper/Time.kt
new file mode 100644
index 0000000..338351a
--- /dev/null
+++ b/app/src/main/java/com/paulcoding/hviewer/helper/Time.kt
@@ -0,0 +1,15 @@
+package com.paulcoding.hviewer.helper
+
+import java.util.Calendar
+
+fun calculateDelayUntilMidnight(): Long {
+ val now = Calendar.getInstance()
+ val midnight = Calendar.getInstance().apply {
+ set(Calendar.HOUR_OF_DAY, 0)
+ set(Calendar.MINUTE, 0)
+ set(Calendar.SECOND, 0)
+ set(Calendar.MILLISECOND, 0)
+ add(Calendar.DAY_OF_MONTH, 1)
+ }
+ return midnight.timeInMillis - now.timeInMillis
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/paulcoding/hviewer/repository/UpdateAppRepository.kt b/app/src/main/java/com/paulcoding/hviewer/repository/UpdateAppRepository.kt
index 2806f8b..603a95c 100644
--- a/app/src/main/java/com/paulcoding/hviewer/repository/UpdateAppRepository.kt
+++ b/app/src/main/java/com/paulcoding/hviewer/repository/UpdateAppRepository.kt
@@ -1,18 +1,9 @@
package com.paulcoding.hviewer.repository
-import com.paulcoding.hviewer.helper.Downloader
-import com.paulcoding.hviewer.network.GithubRemoteDatasource
+import com.paulcoding.hviewer.model.HRelease
import java.io.File
-class UpdateAppRepository(
- private val githubRemoteDatasource: GithubRemoteDatasource,
- private val downloader: Downloader
-) {
- suspend fun getLatestAppRelease() = runCatching {
- githubRemoteDatasource.getLatestAppRelease()
- }
-
- suspend fun downloadApk(downloadUrl: String, destination: File) = runCatching {
- downloader.download(downloadUrl, destination)
- }
+interface UpdateAppRepository {
+ suspend fun getLatestAppRelease(): Result
+ suspend fun downloadApk(downloadUrl: String, destination: File): Result
}
\ No newline at end of file
diff --git a/app/src/main/java/com/paulcoding/hviewer/ui/page/settings/SettingsPage.kt b/app/src/main/java/com/paulcoding/hviewer/ui/page/settings/SettingsPage.kt
index ba6b2d1..c924e99 100644
--- a/app/src/main/java/com/paulcoding/hviewer/ui/page/settings/SettingsPage.kt
+++ b/app/src/main/java/com/paulcoding/hviewer/ui/page/settings/SettingsPage.kt
@@ -43,6 +43,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
+import com.paulcoding.hviewer.BuildConfig
import com.paulcoding.hviewer.R
import com.paulcoding.hviewer.extensions.setSecureScreen
import com.paulcoding.hviewer.model.ListScriptType
@@ -58,6 +59,7 @@ import org.koin.androidx.compose.koinViewModel
fun SettingsPage(
viewModel: SettingsViewModel = koinViewModel(),
navToListScript: (ListScriptType) -> Unit,
+ showCheckUpdateIcon: Boolean = BuildConfig.FLAVOR == "foss",
goBack: () -> Boolean,
) {
val context = LocalContext.current
@@ -166,11 +168,13 @@ fun SettingsPage(
modifier = Modifier.align(Alignment.CenterHorizontally),
verticalAlignment = Alignment.CenterVertically
) {
- H7Tap() {
+ H7Tap(onDevModeChange = {
viewModel.dispatch(SettingsViewModel.Action.SetDevMode(true))
- }
- HIcon(Icons.Outlined.Update) {
- viewModel.dispatch(SettingsViewModel.Action.CheckForAppUpdate(showToast = true))
+ })
+ if (showCheckUpdateIcon) {
+ HIcon(Icons.Outlined.Update) {
+ viewModel.dispatch(SettingsViewModel.Action.CheckForAppUpdate(showToast = true))
+ }
}
}
}
diff --git a/app/src/main/java/com/paulcoding/hviewer/worker/Schedule.kt b/app/src/main/java/com/paulcoding/hviewer/worker/Schedule.kt
index 4ab9be5..836dfde 100644
--- a/app/src/main/java/com/paulcoding/hviewer/worker/Schedule.kt
+++ b/app/src/main/java/com/paulcoding/hviewer/worker/Schedule.kt
@@ -6,49 +6,25 @@ import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.NetworkType
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager
-import java.util.Calendar
+import com.paulcoding.hviewer.helper.calculateDelayUntilMidnight
import java.util.concurrent.TimeUnit
-fun scheduleScriptsUpdate(context: Context) {
- val constraints = Constraints.Builder()
- .setRequiredNetworkType(NetworkType.CONNECTED)
- .build()
- val updateScriptsWorkRequest =
- PeriodicWorkRequestBuilder(1, TimeUnit.DAYS)
- .setConstraints(constraints)
- .setInitialDelay(calculateDelayUntilMidnight(), TimeUnit.MILLISECONDS)
- .build()
- WorkManager.getInstance(context).enqueueUniquePeriodicWork(
- "updateScripts",
- ExistingPeriodicWorkPolicy.KEEP,
- updateScriptsWorkRequest
- )
-}
+interface ScheduleWorker {
+ fun schedule(context: Context)
-fun scheduleApkUpdate(context: Context) {
- val constraints = Constraints.Builder()
- .setRequiredNetworkType(NetworkType.CONNECTED)
- .build()
- val updateScriptsWorkRequest =
- PeriodicWorkRequestBuilder(1, TimeUnit.DAYS)
- .setConstraints(constraints)
- .setInitialDelay(calculateDelayUntilMidnight(), TimeUnit.MILLISECONDS)
+ fun scheduleScriptsUpdate(context: Context) {
+ val constraints = Constraints.Builder()
+ .setRequiredNetworkType(NetworkType.CONNECTED)
.build()
- WorkManager.getInstance(context).enqueueUniquePeriodicWork(
- "updateApk",
- ExistingPeriodicWorkPolicy.KEEP,
- updateScriptsWorkRequest
- )
-}
-
-fun calculateDelayUntilMidnight(): Long {
- val now = Calendar.getInstance()
- val midnight = Calendar.getInstance().apply {
- set(Calendar.HOUR_OF_DAY, 0)
- set(Calendar.MINUTE, 0)
- set(Calendar.SECOND, 0)
- set(Calendar.MILLISECOND, 0)
- add(Calendar.DAY_OF_MONTH, 1)
+ val updateScriptsWorkRequest =
+ PeriodicWorkRequestBuilder(1, TimeUnit.DAYS)
+ .setConstraints(constraints)
+ .setInitialDelay(calculateDelayUntilMidnight(), TimeUnit.MILLISECONDS)
+ .build()
+ WorkManager.getInstance(context).enqueueUniquePeriodicWork(
+ "updateScripts",
+ ExistingPeriodicWorkPolicy.KEEP,
+ updateScriptsWorkRequest
+ )
}
- return midnight.timeInMillis - now.timeInMillis
}
\ No newline at end of file