mirror of
https://github.com/element-hq/element-android
synced 2024-11-24 10:25:35 +03:00
Add UnifiedPush settings
This commit is contained in:
parent
04b297b261
commit
848adc415f
6 changed files with 66 additions and 26 deletions
|
@ -24,7 +24,10 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import im.vector.app.BuildConfig
|
import im.vector.app.BuildConfig
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.di.DefaultSharedPreferences
|
import im.vector.app.core.di.DefaultSharedPreferences
|
||||||
|
import im.vector.app.features.settings.BackgroundSyncMode
|
||||||
|
import im.vector.app.features.settings.VectorPreferences
|
||||||
import im.vector.app.push.fcm.FcmHelper
|
import im.vector.app.push.fcm.FcmHelper
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
import org.unifiedpush.android.connector.UnifiedPush
|
import org.unifiedpush.android.connector.UnifiedPush
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
|
@ -81,7 +84,10 @@ object UnifiedPushHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun register(context: Context, force: Boolean = false, onDoneRunnable: Runnable? = null) {
|
fun register(context: Context,
|
||||||
|
force: Boolean = false,
|
||||||
|
pushersManager: PushersManager? = null,
|
||||||
|
onDoneRunnable: Runnable? = null) {
|
||||||
if (!BuildConfig.ALLOW_EXTERNAL_UNIFIEDPUSH_DISTRIB) {
|
if (!BuildConfig.ALLOW_EXTERNAL_UNIFIEDPUSH_DISTRIB) {
|
||||||
up.saveDistributor(context, context.packageName)
|
up.saveDistributor(context, context.packageName)
|
||||||
up.registerApp(context)
|
up.registerApp(context)
|
||||||
|
@ -90,14 +96,21 @@ object UnifiedPushHelper {
|
||||||
}
|
}
|
||||||
if (force) {
|
if (force) {
|
||||||
// Un-register first
|
// Un-register first
|
||||||
|
runBlocking {
|
||||||
|
pushersManager?.unregisterPusher(getEndpointOrToken(context) ?: "")
|
||||||
|
}
|
||||||
up.unregisterApp(context)
|
up.unregisterApp(context)
|
||||||
storeUpEndpoint(context, null)
|
storeUpEndpoint(context, null)
|
||||||
storePushGateway(context, null)
|
storePushGateway(context, null)
|
||||||
} else if (up.getDistributor(context).isNotEmpty()) {
|
}
|
||||||
|
if (up.getDistributor(context).isNotEmpty()) {
|
||||||
up.registerApp(context)
|
up.registerApp(context)
|
||||||
onDoneRunnable?.run()
|
onDoneRunnable?.run()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// By default, use internal solution (fcm/background sync)
|
||||||
|
up.saveDistributor(context, context.packageName)
|
||||||
val distributors = up.getDistributors(context).toMutableList()
|
val distributors = up.getDistributors(context).toMutableList()
|
||||||
|
|
||||||
val internalDistributorName = if (!FcmHelper.isPushSupported()) {
|
val internalDistributorName = if (!FcmHelper.isPushSupported()) {
|
||||||
|
@ -148,7 +161,20 @@ object UnifiedPushHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun unregister(context: Context) {
|
fun unregister(
|
||||||
|
context: Context,
|
||||||
|
pushersManager: PushersManager? = null,
|
||||||
|
vectorPreferences: VectorPreferences? = null
|
||||||
|
) {
|
||||||
|
val mode = BackgroundSyncMode.FDROID_BACKGROUND_SYNC_MODE_FOR_REALTIME
|
||||||
|
vectorPreferences?.setFdroidSyncBackgroundMode(mode)
|
||||||
|
runBlocking {
|
||||||
|
try {
|
||||||
|
pushersManager?.unregisterPusher(getEndpointOrToken(context) ?: "")
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Timber.d("Probably unregistering a non existant pusher")
|
||||||
|
}
|
||||||
|
}
|
||||||
up.unregisterApp(context)
|
up.unregisterApp(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -176,7 +176,7 @@ class VectorMessagingReceiver : MessagingReceiver() {
|
||||||
|
|
||||||
override fun onUnregistered(context: Context, instance: String) {
|
override fun onUnregistered(context: Context, instance: String) {
|
||||||
Timber.tag(loggerTag.value).d("Unifiedpush: Unregistered")
|
Timber.tag(loggerTag.value).d("Unifiedpush: Unregistered")
|
||||||
val mode = BackgroundSyncMode.FDROID_BACKGROUND_SYNC_MODE_FOR_BATTERY
|
val mode = BackgroundSyncMode.FDROID_BACKGROUND_SYNC_MODE_FOR_REALTIME
|
||||||
vectorPreferences.setFdroidSyncBackgroundMode(mode)
|
vectorPreferences.setFdroidSyncBackgroundMode(mode)
|
||||||
runBlocking {
|
runBlocking {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -141,6 +141,9 @@ class VectorPreferences @Inject constructor(
|
||||||
const val SETTINGS_SET_SYNC_TIMEOUT_PREFERENCE_KEY = "SETTINGS_SET_SYNC_TIMEOUT_PREFERENCE_KEY"
|
const val SETTINGS_SET_SYNC_TIMEOUT_PREFERENCE_KEY = "SETTINGS_SET_SYNC_TIMEOUT_PREFERENCE_KEY"
|
||||||
const val SETTINGS_SET_SYNC_DELAY_PREFERENCE_KEY = "SETTINGS_SET_SYNC_DELAY_PREFERENCE_KEY"
|
const val SETTINGS_SET_SYNC_DELAY_PREFERENCE_KEY = "SETTINGS_SET_SYNC_DELAY_PREFERENCE_KEY"
|
||||||
|
|
||||||
|
// notification method
|
||||||
|
const val SETTINGS_UNIFIED_PUSH_RE_REGISTER_KEY = "SETTINGS_UNIFIED_PUSH_RE_REGISTER_KEY"
|
||||||
|
|
||||||
// Calls
|
// Calls
|
||||||
const val SETTINGS_CALL_PREVENT_ACCIDENTAL_CALL_KEY = "SETTINGS_CALL_PREVENT_ACCIDENTAL_CALL_KEY"
|
const val SETTINGS_CALL_PREVENT_ACCIDENTAL_CALL_KEY = "SETTINGS_CALL_PREVENT_ACCIDENTAL_CALL_KEY"
|
||||||
const val SETTINGS_CALL_RINGTONE_USE_RIOT_PREFERENCE_KEY = "SETTINGS_CALL_RINGTONE_USE_RIOT_PREFERENCE_KEY"
|
const val SETTINGS_CALL_RINGTONE_USE_RIOT_PREFERENCE_KEY = "SETTINGS_CALL_RINGTONE_USE_RIOT_PREFERENCE_KEY"
|
||||||
|
|
|
@ -30,6 +30,7 @@ import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.lifecycle.map
|
import androidx.lifecycle.map
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.SwitchPreference
|
import androidx.preference.SwitchPreference
|
||||||
|
import im.vector.app.BuildConfig
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.di.ActiveSessionHolder
|
import im.vector.app.core.di.ActiveSessionHolder
|
||||||
import im.vector.app.core.extensions.registerStartForActivityResult
|
import im.vector.app.core.extensions.registerStartForActivityResult
|
||||||
|
@ -58,7 +59,6 @@ import org.matrix.android.sdk.api.session.identity.ThreePid
|
||||||
import org.matrix.android.sdk.api.session.pushers.Pusher
|
import org.matrix.android.sdk.api.session.pushers.Pusher
|
||||||
import org.matrix.android.sdk.api.session.pushrules.RuleIds
|
import org.matrix.android.sdk.api.session.pushrules.RuleIds
|
||||||
import org.matrix.android.sdk.api.session.pushrules.RuleKind
|
import org.matrix.android.sdk.api.session.pushrules.RuleKind
|
||||||
import timber.log.Timber
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
// Referenced in vector_settings_preferences_root.xml
|
// Referenced in vector_settings_preferences_root.xml
|
||||||
|
@ -98,7 +98,16 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor(
|
||||||
|
|
||||||
findPreference<SwitchPreference>(VectorPreferences.SETTINGS_ENABLE_THIS_DEVICE_PREFERENCE_KEY)?.let {
|
findPreference<SwitchPreference>(VectorPreferences.SETTINGS_ENABLE_THIS_DEVICE_PREFERENCE_KEY)?.let {
|
||||||
it.setTransactionalSwitchChangeListener(lifecycleScope) { isChecked ->
|
it.setTransactionalSwitchChangeListener(lifecycleScope) { isChecked ->
|
||||||
updateEnabledForDevice(isChecked)
|
if (isChecked) {
|
||||||
|
UnifiedPushHelper.register(requireContext())
|
||||||
|
} else {
|
||||||
|
UnifiedPushHelper.unregister(
|
||||||
|
requireContext(),
|
||||||
|
pushManager,
|
||||||
|
vectorPreferences
|
||||||
|
)
|
||||||
|
session.pushersService().refreshPushers()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,6 +149,22 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
findPreference<VectorPreference>(VectorPreferences.SETTINGS_UNIFIED_PUSH_RE_REGISTER_KEY)?.let {
|
||||||
|
if (BuildConfig.ALLOW_EXTERNAL_UNIFIEDPUSH_DISTRIB) {
|
||||||
|
it.onPreferenceClickListener = Preference.OnPreferenceClickListener {
|
||||||
|
UnifiedPushHelper.register(
|
||||||
|
requireContext(),
|
||||||
|
force = true,
|
||||||
|
pushManager
|
||||||
|
)
|
||||||
|
true
|
||||||
|
}
|
||||||
|
session.pushersService().refreshPushers()
|
||||||
|
} else {
|
||||||
|
it.isVisible = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bindEmailNotifications()
|
bindEmailNotifications()
|
||||||
refreshBackgroundSyncPrefs()
|
refreshBackgroundSyncPrefs()
|
||||||
|
|
||||||
|
@ -356,26 +381,6 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun updateEnabledForDevice(enabled: Boolean) {
|
|
||||||
if (enabled) {
|
|
||||||
UnifiedPushHelper.register(requireContext())
|
|
||||||
} else {
|
|
||||||
UnifiedPushHelper.getEndpointOrToken(requireContext())?.let {
|
|
||||||
try {
|
|
||||||
pushManager.unregisterPusher(it)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Timber.d("Probably unregistering a non existant pusher")
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
UnifiedPushHelper.unregister(requireContext())
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Timber.d("Probably unregistering to a non-saved distributor")
|
|
||||||
}
|
|
||||||
session.pushersService().refreshPushers()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateEnabledForAccount(preference: Preference?) {
|
private fun updateEnabledForAccount(preference: Preference?) {
|
||||||
val pushRuleService = session.pushRuleService()
|
val pushRuleService = session.pushRuleService()
|
||||||
val switchPref = preference as SwitchPreference
|
val switchPref = preference as SwitchPreference
|
||||||
|
|
|
@ -3067,4 +3067,5 @@
|
||||||
<string name="unifiedpush_getdistributors_dialog_title">Choose how to receive notifications</string>
|
<string name="unifiedpush_getdistributors_dialog_title">Choose how to receive notifications</string>
|
||||||
<string name="unifiedpush_getdistributors_dialog_fcm_fallback">Google Services</string>
|
<string name="unifiedpush_getdistributors_dialog_fcm_fallback">Google Services</string>
|
||||||
<string name="unifiedpush_getdistributors_dialog_background_sync">Background synchronization</string>
|
<string name="unifiedpush_getdistributors_dialog_background_sync">Background synchronization</string>
|
||||||
|
<string name="settings_unifiedpush_reregister">Notification method</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -77,6 +77,11 @@
|
||||||
android:summary="@string/settings_system_preferences_summary"
|
android:summary="@string/settings_system_preferences_summary"
|
||||||
android:title="@string/settings_call_notifications_preferences" />
|
android:title="@string/settings_call_notifications_preferences" />
|
||||||
|
|
||||||
|
<im.vector.app.core.preference.VectorPreference
|
||||||
|
android:persistent="false"
|
||||||
|
android:key="SETTINGS_UNIFIED_PUSH_RE_REGISTER_KEY"
|
||||||
|
android:title="@string/settings_unifiedpush_reregister" />
|
||||||
|
|
||||||
</im.vector.app.core.preference.VectorPreferenceCategory>
|
</im.vector.app.core.preference.VectorPreferenceCategory>
|
||||||
|
|
||||||
<im.vector.app.core.preference.VectorPreferenceCategory
|
<im.vector.app.core.preference.VectorPreferenceCategory
|
||||||
|
|
Loading…
Reference in a new issue