Skip to content

Commit

Permalink
refactor: migrate DialogUtils to ProgressBarDialogIndeterminate
Browse files Browse the repository at this point in the history
  • Loading branch information
WhiredPlanck committed Dec 27, 2024
1 parent 86ad046 commit abfc41a
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 168 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/*
* SPDX-FileCopyrightText: 2015 - 2024 Rime community
* SPDX-License-Identifier: GPL-3.0-or-later
*/

package com.osfans.trime.ui.components

import android.content.Context
import androidx.annotation.StringRes
import androidx.appcompat.app.AlertDialog
import androidx.lifecycle.LifecycleCoroutineScope
import com.osfans.trime.R
import kotlinx.coroutines.cancelAndJoin
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import splitties.dimensions.dp
import splitties.views.dsl.core.add
import splitties.views.dsl.core.horizontalMargin
import splitties.views.dsl.core.lParams
import splitties.views.dsl.core.matchParent
import splitties.views.dsl.core.styles.AndroidStyles
import splitties.views.dsl.core.verticalLayout
import splitties.views.dsl.core.verticalMargin

@Suppress("FunctionName")
fun Context.ProgressBarDialogIndeterminate(
@StringRes title: Int,
): AlertDialog.Builder {
val androidStyles = AndroidStyles(this)
return AlertDialog
.Builder(this)
.setTitle(title)
.setView(
verticalLayout {
add(
androidStyles.progressBar.horizontal {
isIndeterminate = true
},
lParams {
width = matchParent
verticalMargin = dp(20)
horizontalMargin = dp(26)
},
)
},
).setCancelable(false)
}

fun LifecycleCoroutineScope.withLoadingDialog(
context: Context,
@StringRes title: Int = R.string.loading,
threshold: Long = 200L,
action: suspend () -> Unit,
) {
var loadingDialog: AlertDialog? = null
val loadingJob =
launch {
delay(threshold)
loadingDialog = context.ProgressBarDialogIndeterminate(title).show()
}
launch {
action()
loadingJob.cancelAndJoin()
loadingDialog?.dismiss()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,12 @@ import com.osfans.trime.data.prefs.AppPrefs
import com.osfans.trime.ui.components.FolderPickerPreference
import com.osfans.trime.ui.components.PaddingPreferenceFragment
import com.osfans.trime.ui.components.TimePickerPreference
import com.osfans.trime.ui.components.withLoadingDialog
import com.osfans.trime.ui.main.MainViewModel
import com.osfans.trime.util.ResourceUtils
import com.osfans.trime.util.appContext
import com.osfans.trime.util.formatDateTime
import com.osfans.trime.util.rimeActionWithResultDialog
import com.osfans.trime.util.toast
import com.osfans.trime.util.withLoadingDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
Expand Down Expand Up @@ -70,11 +69,8 @@ class ProfileFragment :
}
get<Preference>("profile_sync_user_data")?.setOnPreferenceClickListener {
lifecycleScope.launch {
this@ProfileFragment.context?.rimeActionWithResultDialog("rime.trime", "W", 1) {
Rime.syncRimeUserData()
RimeDaemon.restartRime(true)
true
}
Rime.syncRimeUserData()
RimeDaemon.restartRime(true)
}
true
}
Expand Down
35 changes: 10 additions & 25 deletions app/src/main/java/com/osfans/trime/ui/main/PrefMainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

package com.osfans.trime.ui.main

import android.app.AlertDialog
import android.content.Intent
import android.os.Build
import android.os.Bundle
Expand All @@ -14,6 +13,7 @@ import android.view.MenuItem
import android.view.ViewGroup
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.view.ViewCompat
Expand All @@ -35,10 +35,9 @@ import com.osfans.trime.daemon.RimeDaemon
import com.osfans.trime.data.prefs.AppPrefs
import com.osfans.trime.data.sound.SoundEffectManager
import com.osfans.trime.databinding.ActivityPrefBinding
import com.osfans.trime.ui.components.ProgressBarDialogIndeterminate
import com.osfans.trime.ui.setup.SetupActivity
import com.osfans.trime.util.isStorageAvailable
import com.osfans.trime.util.progressBarDialogIndeterminate
import com.osfans.trime.util.rimeActionWithResultDialog
import kotlinx.coroutines.launch
import splitties.systemservices.alarmManager
import splitties.views.topPadding
Expand Down Expand Up @@ -128,14 +127,13 @@ class PrefMainActivity : AppCompatActivity() {
viewModel.rime.run { stateFlow }.collect { state ->
when (state) {
RimeLifecycle.State.STARTING -> {
loadingDialog = ProgressBarDialogIndeterminate(R.string.deploy_progress).show()
}
RimeLifecycle.State.READY -> {
loadingDialog?.dismiss()
loadingDialog =
progressBarDialogIndeterminate(R.string.deploy_progress).create().apply {
show()
}
loadingDialog = null
}
RimeLifecycle.State.READY -> loadingDialog?.dismiss()
else -> return@collect
else -> {}
}
}
}
Expand All @@ -153,7 +151,9 @@ class PrefMainActivity : AppCompatActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean =
when (item.itemId) {
R.id.preference__menu_deploy -> {
deploy()
lifecycleScope.launch {
RimeDaemon.restartRime(true)
}
true
}
R.id.preference__menu_about -> {
Expand All @@ -163,28 +163,13 @@ class PrefMainActivity : AppCompatActivity() {
else -> super.onOptionsItemSelected(item)
}

private fun deploy() {
lifecycleScope.launch {
rimeActionWithResultDialog("rime.trime", "W", 1) {
RimeDaemon.restartRime(true)
true
}
}
}

override fun onResume() {
super.onResume()
if (isStorageAvailable()) {
SoundEffectManager.init()
}
}

override fun onDestroy() {
super.onDestroy()
loadingDialog?.dismiss()
loadingDialog = null
}

private fun checkScheduleExactAlarmPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && !alarmManager.canScheduleExactAlarms()) {
AlertDialog
Expand Down
136 changes: 0 additions & 136 deletions app/src/main/java/com/osfans/trime/util/DialogUtils.kt

This file was deleted.

0 comments on commit abfc41a

Please sign in to comment.