Welcome to mirror list, hosted at ThFree Co, Russian Federation.

DefaultsProvider.kt « settings « davdroid « bitfire « at « java « main « src « app - github.com/bitfireAT/davx5-ose.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 9484d41a577bb61bfc949d5bafa69c62d5468473 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/***************************************************************************************************
 * Copyright © All Contributors. See LICENSE and AUTHORS in the root directory for details.
 **************************************************************************************************/

package at.bitfire.davdroid.settings

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.net.ConnectivityManager
import android.os.Build
import androidx.core.content.getSystemService
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import dagger.multibindings.IntKey
import dagger.multibindings.IntoMap
import javax.inject.Inject

class DefaultsProvider(
    context: Context,
    settingsManager: SettingsManager
): BaseDefaultsProvider(context, settingsManager) {

    override val booleanDefaults = mutableMapOf(
        Pair(Settings.DISTRUST_SYSTEM_CERTIFICATES, false),
        Pair(Settings.SYNC_ALL_COLLECTIONS, false),
        Pair(Settings.FORCE_READ_ONLY_ADDRESSBOOKS, false)
    )

    override val intDefaults = mapOf(
        Pair(Settings.PROXY_TYPE, Settings.PROXY_TYPE_SYSTEM),
        Pair(Settings.PROXY_PORT, 9050)     // Orbot SOCKS
    )

    override val longDefaults = mapOf<String, Long>(
        Pair(Settings.DEFAULT_SYNC_INTERVAL, 4*3600)    /* 4 hours */
    )

    override val stringDefaults = mapOf(
        Pair(Settings.PROXY_HOST, "localhost")
    )

    val dataSaverChangedListener by lazy {
        object: BroadcastReceiver() {
            override fun onReceive(context: Context, intent: Intent) {
                evaluateDataSaver(true)
            }
        }
    }


    init {
        if (Build.VERSION.SDK_INT >= 24) {
            val dataSaverChangedFilter = IntentFilter(ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED)
            context.registerReceiver(dataSaverChangedListener, dataSaverChangedFilter)
            evaluateDataSaver()
        }
    }

    override fun forceReload() {
        evaluateDataSaver()
    }

    override fun close() {
        if (Build.VERSION.SDK_INT >= 24)
            context.unregisterReceiver(dataSaverChangedListener)
    }

    fun evaluateDataSaver(notify: Boolean = false) {
        if (Build.VERSION.SDK_INT >= 24) {
            context.getSystemService<ConnectivityManager>()?.let { connectivityManager ->
                if (connectivityManager.restrictBackgroundStatus == ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED)
                    booleanDefaults[AccountSettings.KEY_WIFI_ONLY] = true
                else
                    booleanDefaults -= AccountSettings.KEY_WIFI_ONLY
            }
            if (notify)
                settingsManager.onSettingsChanged()
        }
    }


    class Factory @Inject constructor(): SettingsProviderFactory {
        override fun getProviders(context: Context, settingsManager: SettingsManager) =
            listOf(DefaultsProvider(context, settingsManager))
    }

    @Module
    @InstallIn(SingletonComponent::class)
    abstract class DefaultsProviderFactoryModule {
        @Binds
        @IntoMap @IntKey(/* priority */ 0)
        abstract fun factory(impl: Factory): SettingsProviderFactory
    }

}