Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit df98e561 authored by Arnau Mora's avatar Arnau Mora Committed by GitHub
Browse files

Moved service initialization to Compose (#261)



* Moved service initialization to Compose

Signed-off-by: default avatarArnau Mora Gras <arnyminerz@proton.me>

* Fixed issue with preferences initialization

Signed-off-by: default avatarArnau Mora Gras <arnyminerz@proton.me>

* Add explanation

---------

Signed-off-by: default avatarArnau Mora Gras <arnyminerz@proton.me>
Co-authored-by: default avatarSunik Kupfer <kupfer@bitfire.at>
parent 8b8457d8
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -76,10 +76,10 @@ import at.bitfire.icsdroid.ui.partials.CalendarListItem
import at.bitfire.icsdroid.ui.partials.ExtendedTopAppBar
import at.bitfire.icsdroid.ui.partials.SyncIntervalDialog
import at.bitfire.icsdroid.ui.theme.setContentThemed
import java.util.ServiceLoader
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.util.ServiceLoader

@OptIn(ExperimentalFoundationApi::class)
class CalendarListActivity: AppCompatActivity() {
@@ -201,7 +201,9 @@ class CalendarListActivity: AppCompatActivity() {
                .nestedScroll(pullRefreshState.nestedScrollConnection)
        ) {
            PullToRefreshContainer(
                modifier = Modifier.align(Alignment.TopCenter).zIndex(1f),
                modifier = Modifier
                    .align(Alignment.TopCenter)
                    .zIndex(1f),
                state = pullRefreshState,
                containerColor = MaterialTheme.colorScheme.primary,
                contentColor = MaterialTheme.colorScheme.onPrimary
+18 −7
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.stringResource
import androidx.lifecycle.LiveData
@@ -47,13 +48,20 @@ class DonateDialogService: ComposableStartupService {
        const val SHOW_EVERY_MILLIS_DISMISS = ONE_DAY_MILLIS * 14
    }

    private lateinit var preferences: SharedPreferences
    private var preferences: SharedPreferences? = null

    override fun initialize(activity: AppCompatActivity) {
        if (this::preferences.isInitialized) return
        preferences = activity.getPreferences(0)
        if (preferences != null) return
        preferences = getPreferences(activity)
    }

    // Note: Workaround for Android 6 (API 23) devices with low memory (1GB)
    private fun getPreferences(activity: AppCompatActivity): SharedPreferences =
        preferences ?: activity.getPreferences(0).also { preferences = it }

    @Composable
    private fun getActivity(): AppCompatActivity? = LocalContext.current as? AppCompatActivity

    /**
     * Whether [Content] should be displayed or not.
     *
@@ -62,6 +70,7 @@ class DonateDialogService: ComposableStartupService {
     */
    @Composable
    override fun shouldShow(): LiveData<Boolean> = remember { MutableLiveData(false) }.also {
        val activity = getActivity() ?: return@also
        DisposableEffect(it) {
            val listener = OnSharedPreferenceChangeListener { sharedPreferences, key ->
                // Receive updates only for PREF_NEXT_REMINDER
@@ -70,6 +79,7 @@ class DonateDialogService: ComposableStartupService {
                val nextReminderTime = sharedPreferences.getLong(PREF_NEXT_REMINDER, 0)
                it.postValue(nextReminderTime < System.currentTimeMillis())
            }
            val preferences = getPreferences(activity)
            preferences.registerOnSharedPreferenceChangeListener(listener)
            listener.onSharedPreferenceChanged(preferences, PREF_NEXT_REMINDER)

@@ -82,25 +92,26 @@ class DonateDialogService: ComposableStartupService {
    /**
     * Dismisses the dialog for the given amount of milliseconds by updating the preference.
     */
    private fun dismissDialogForMillis(millis: Long) =
        preferences
    private fun dismissDialogForMillis(activity: AppCompatActivity, millis: Long) =
        getPreferences(activity)
            .edit()
            .putLong(PREF_NEXT_REMINDER, System.currentTimeMillis() + millis)
            .apply()

    @Composable
    override fun Content() {
        val activity = getActivity()
        val uriHandler = LocalUriHandler.current
        GenericAlertDialog(
            onDismissRequest = { /* Cannot be dismissed */ },
            title = stringResource(R.string.donate_title),
            content = { Text(stringResource(R.string.donate_message)) },
            confirmButton = Pair(stringResource(R.string.donate_now).uppercase()) {
                dismissDialogForMillis(SHOW_EVERY_MILLIS_DONATE)
                dismissDialogForMillis(activity!!, SHOW_EVERY_MILLIS_DONATE)
                uriHandler.openUri(DONATION_URI)
            },
            dismissButton = Pair(stringResource(R.string.donate_later).uppercase()) {
                dismissDialogForMillis(SHOW_EVERY_MILLIS_DISMISS)
                dismissDialogForMillis(activity!!, SHOW_EVERY_MILLIS_DISMISS)
            }
        )
    }