checking for firebase inclusion or play services availability and removing FCM option if it's missing
This commit is contained in:
parent
d01451e3e9
commit
477ac52d16
|
@ -56,7 +56,7 @@ import app.dapk.st.olm.OlmPersistenceWrapper
|
||||||
import app.dapk.st.olm.OlmWrapper
|
import app.dapk.st.olm.OlmWrapper
|
||||||
import app.dapk.st.profile.ProfileModule
|
import app.dapk.st.profile.ProfileModule
|
||||||
import app.dapk.st.push.PushModule
|
import app.dapk.st.push.PushModule
|
||||||
import app.dapk.st.push.firebase.MessagingServiceAdapter
|
import app.dapk.st.push.messaging.MessagingServiceAdapter
|
||||||
import app.dapk.st.settings.SettingsModule
|
import app.dapk.st.settings.SettingsModule
|
||||||
import app.dapk.st.share.ShareEntryModule
|
import app.dapk.st.share.ShareEntryModule
|
||||||
import app.dapk.st.tracking.TrackingModule
|
import app.dapk.st.tracking.TrackingModule
|
||||||
|
|
|
@ -8,8 +8,7 @@ import app.dapk.st.core.extensions.unsafeLazy
|
||||||
import app.dapk.st.domain.Preferences
|
import app.dapk.st.domain.Preferences
|
||||||
import app.dapk.st.domain.push.PushTokenRegistrarPreferences
|
import app.dapk.st.domain.push.PushTokenRegistrarPreferences
|
||||||
import app.dapk.st.firebase.messaging.Messaging
|
import app.dapk.st.firebase.messaging.Messaging
|
||||||
import app.dapk.st.firebase.messaging.MessagingModule
|
import app.dapk.st.push.messaging.MessagingPushTokenRegistrar
|
||||||
import app.dapk.st.push.firebase.FirebasePushTokenRegistrar
|
|
||||||
import app.dapk.st.push.unifiedpush.UnifiedPushRegistrar
|
import app.dapk.st.push.unifiedpush.UnifiedPushRegistrar
|
||||||
|
|
||||||
class PushModule(
|
class PushModule(
|
||||||
|
@ -24,7 +23,7 @@ class PushModule(
|
||||||
private val registrars by unsafeLazy {
|
private val registrars by unsafeLazy {
|
||||||
PushTokenRegistrars(
|
PushTokenRegistrars(
|
||||||
context,
|
context,
|
||||||
FirebasePushTokenRegistrar(
|
MessagingPushTokenRegistrar(
|
||||||
errorTracker,
|
errorTracker,
|
||||||
pushHandler,
|
pushHandler,
|
||||||
messaging,
|
messaging,
|
||||||
|
|
|
@ -2,7 +2,7 @@ package app.dapk.st.push
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import app.dapk.st.domain.push.PushTokenRegistrarPreferences
|
import app.dapk.st.domain.push.PushTokenRegistrarPreferences
|
||||||
import app.dapk.st.push.firebase.FirebasePushTokenRegistrar
|
import app.dapk.st.push.messaging.MessagingPushTokenRegistrar
|
||||||
import app.dapk.st.push.unifiedpush.UnifiedPushRegistrar
|
import app.dapk.st.push.unifiedpush.UnifiedPushRegistrar
|
||||||
import org.unifiedpush.android.connector.UnifiedPush
|
import org.unifiedpush.android.connector.UnifiedPush
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ private val NONE = Registrar("None")
|
||||||
|
|
||||||
class PushTokenRegistrars(
|
class PushTokenRegistrars(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
private val firebasePushTokenRegistrar: FirebasePushTokenRegistrar,
|
private val messagingPushTokenRegistrar: MessagingPushTokenRegistrar,
|
||||||
private val unifiedPushRegistrar: UnifiedPushRegistrar,
|
private val unifiedPushRegistrar: UnifiedPushRegistrar,
|
||||||
private val pushTokenStore: PushTokenRegistrarPreferences,
|
private val pushTokenStore: PushTokenRegistrarPreferences,
|
||||||
) : PushTokenRegistrar {
|
) : PushTokenRegistrar {
|
||||||
|
@ -19,27 +19,36 @@ class PushTokenRegistrars(
|
||||||
private var selection: Registrar? = null
|
private var selection: Registrar? = null
|
||||||
|
|
||||||
fun options(): List<Registrar> {
|
fun options(): List<Registrar> {
|
||||||
return listOf(NONE, FIREBASE_OPTION) + UnifiedPush.getDistributors(context).map { Registrar(it) }
|
val messagingOption = when (messagingPushTokenRegistrar.isAvailable()) {
|
||||||
|
true -> FIREBASE_OPTION
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
return listOfNotNull(NONE, messagingOption) + UnifiedPush.getDistributors(context).map { Registrar(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun currentSelection() = selection ?: (pushTokenStore.currentSelection()?.let { Registrar(it) } ?: FIREBASE_OPTION).also { selection = it }
|
suspend fun currentSelection() = selection ?: (pushTokenStore.currentSelection()?.let { Registrar(it) } ?: defaultSelection()).also { selection = it }
|
||||||
|
|
||||||
|
private fun defaultSelection() = when (messagingPushTokenRegistrar.isAvailable()) {
|
||||||
|
true -> FIREBASE_OPTION
|
||||||
|
else -> NONE
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun makeSelection(option: Registrar) {
|
suspend fun makeSelection(option: Registrar) {
|
||||||
selection = option
|
selection = option
|
||||||
pushTokenStore.store(option.id)
|
pushTokenStore.store(option.id)
|
||||||
when (option) {
|
when (option) {
|
||||||
NONE -> {
|
NONE -> {
|
||||||
firebasePushTokenRegistrar.unregister()
|
messagingPushTokenRegistrar.unregister()
|
||||||
unifiedPushRegistrar.unregister()
|
unifiedPushRegistrar.unregister()
|
||||||
}
|
}
|
||||||
|
|
||||||
FIREBASE_OPTION -> {
|
FIREBASE_OPTION -> {
|
||||||
unifiedPushRegistrar.unregister()
|
unifiedPushRegistrar.unregister()
|
||||||
firebasePushTokenRegistrar.registerCurrentToken()
|
messagingPushTokenRegistrar.registerCurrentToken()
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
firebasePushTokenRegistrar.unregister()
|
messagingPushTokenRegistrar.unregister()
|
||||||
unifiedPushRegistrar.registerSelection(option)
|
unifiedPushRegistrar.registerSelection(option)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,7 +56,7 @@ class PushTokenRegistrars(
|
||||||
|
|
||||||
override suspend fun registerCurrentToken() {
|
override suspend fun registerCurrentToken() {
|
||||||
when (selection) {
|
when (selection) {
|
||||||
FIREBASE_OPTION -> firebasePushTokenRegistrar.registerCurrentToken()
|
FIREBASE_OPTION -> messagingPushTokenRegistrar.registerCurrentToken()
|
||||||
NONE -> {
|
NONE -> {
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
@ -58,10 +67,10 @@ class PushTokenRegistrars(
|
||||||
|
|
||||||
override fun unregister() {
|
override fun unregister() {
|
||||||
when (selection) {
|
when (selection) {
|
||||||
FIREBASE_OPTION -> firebasePushTokenRegistrar.unregister()
|
FIREBASE_OPTION -> messagingPushTokenRegistrar.unregister()
|
||||||
NONE -> {
|
NONE -> {
|
||||||
runCatching {
|
runCatching {
|
||||||
firebasePushTokenRegistrar.unregister()
|
messagingPushTokenRegistrar.unregister()
|
||||||
unifiedPushRegistrar.unregister()
|
unifiedPushRegistrar.unregister()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package app.dapk.st.push.firebase
|
package app.dapk.st.push.messaging
|
||||||
|
|
||||||
import app.dapk.st.core.AppLogTag
|
import app.dapk.st.core.AppLogTag
|
||||||
import app.dapk.st.core.extensions.CrashScope
|
import app.dapk.st.core.extensions.CrashScope
|
||||||
|
@ -11,7 +11,7 @@ import app.dapk.st.push.PushTokenRegistrar
|
||||||
|
|
||||||
private const val SYGNAL_GATEWAY = "https://sygnal.dapk.app/_matrix/push/v1/notify"
|
private const val SYGNAL_GATEWAY = "https://sygnal.dapk.app/_matrix/push/v1/notify"
|
||||||
|
|
||||||
class FirebasePushTokenRegistrar(
|
class MessagingPushTokenRegistrar(
|
||||||
override val errorTracker: ErrorTracker,
|
override val errorTracker: ErrorTracker,
|
||||||
private val pushHandler: PushHandler,
|
private val pushHandler: PushHandler,
|
||||||
private val messaging: Messaging,
|
private val messaging: Messaging,
|
||||||
|
@ -43,4 +43,6 @@ class FirebasePushTokenRegistrar(
|
||||||
messaging.disable()
|
messaging.disable()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun isAvailable() = messaging.isAvailable()
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package app.dapk.st.push.firebase
|
package app.dapk.st.push.messaging
|
||||||
|
|
||||||
import app.dapk.st.core.AppLogTag
|
import app.dapk.st.core.AppLogTag
|
||||||
import app.dapk.st.core.log
|
import app.dapk.st.core.log
|
|
@ -2,6 +2,8 @@ package app.dapk.st.firebase.messaging
|
||||||
|
|
||||||
class Messaging {
|
class Messaging {
|
||||||
|
|
||||||
|
fun isAvailable() = false
|
||||||
|
|
||||||
fun enable() {
|
fun enable() {
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,8 @@ import android.content.ComponentName
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
|
import com.google.android.gms.common.ConnectionResult
|
||||||
|
import com.google.android.gms.common.GoogleApiAvailabilityLight
|
||||||
import com.google.firebase.messaging.FirebaseMessaging
|
import com.google.firebase.messaging.FirebaseMessaging
|
||||||
import kotlin.coroutines.resume
|
import kotlin.coroutines.resume
|
||||||
import kotlin.coroutines.suspendCoroutine
|
import kotlin.coroutines.suspendCoroutine
|
||||||
|
@ -13,6 +15,8 @@ class Messaging(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
fun isAvailable() = GoogleApiAvailabilityLight.getInstance().isGooglePlayServicesAvailable(context) == ConnectionResult.SUCCESS
|
||||||
|
|
||||||
fun enable() {
|
fun enable() {
|
||||||
context.packageManager.setComponentEnabledSetting(
|
context.packageManager.setComponentEnabledSetting(
|
||||||
ComponentName(context, FirebasePushServiceDelegate::class.java),
|
ComponentName(context, FirebasePushServiceDelegate::class.java),
|
||||||
|
|
Loading…
Reference in New Issue