enum moved to constants and comments clean up
This commit is contained in:
parent
ba7c1f0cef
commit
5fd8519c6c
|
@ -816,17 +816,17 @@ public class ComposeMessageActivity
|
|||
};
|
||||
}
|
||||
|
||||
private void onConnectivityEvent(VerifyConnection.ConnectionState connectivity) {
|
||||
private void onConnectivityEvent(Constants.ConnectionState connectivity) {
|
||||
Timber.v("onConnectivityEvent hasConnectivity:%s DoHOngoing:%s", connectivity.name(), isDohOngoing);
|
||||
if (!isDohOngoing) {
|
||||
if (connectivity != VerifyConnection.ConnectionState.CONNECTED) {
|
||||
if (connectivity != Constants.ConnectionState.CONNECTED) {
|
||||
networkSnackBarUtil.getNoConnectionSnackBar(
|
||||
mSnackLayout,
|
||||
mUserManager.getUser(),
|
||||
this,
|
||||
null,
|
||||
null,
|
||||
connectivity == VerifyConnection.ConnectionState.NO_INTERNET
|
||||
connectivity == Constants.ConnectionState.NO_INTERNET
|
||||
).show();
|
||||
} else {
|
||||
networkSnackBarUtil.hideAllSnackBars();
|
||||
|
|
|
@ -565,16 +565,16 @@ public class CreateAccountActivity extends BaseConnectivityActivity implements
|
|||
}
|
||||
}
|
||||
|
||||
private void onConnectivityEvent(VerifyConnection.ConnectionState connectivity) {
|
||||
private void onConnectivityEvent(Constants.ConnectionState connectivity) {
|
||||
Timber.v("onConnectivityEvent hasConnectivity:%s", connectivity.name());
|
||||
if (connectivity.equals(VerifyConnection.ConnectionState.NO_INTERNET)) {
|
||||
if (connectivity.equals(Constants.ConnectionState.NO_INTERNET)) {
|
||||
networkSnackBarUtil.getNoConnectionSnackBar(
|
||||
mSnackLayout,
|
||||
mUserManager.getUser(),
|
||||
this,
|
||||
onConnectivityCheckRetry(),
|
||||
null,
|
||||
connectivity == VerifyConnection.ConnectionState.NO_INTERNET
|
||||
connectivity == Constants.ConnectionState.NO_INTERNET
|
||||
).show();
|
||||
} else {
|
||||
if (captchaFragment != null && captchaFragment.isAdded()) {
|
||||
|
@ -634,7 +634,7 @@ public class CreateAccountActivity extends BaseConnectivityActivity implements
|
|||
break;
|
||||
case NO_NETWORK:
|
||||
checkDirectEnabled();
|
||||
onConnectivityEvent(VerifyConnection.ConnectionState.NO_INTERNET);
|
||||
onConnectivityEvent(Constants.ConnectionState.NO_INTERNET);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -218,16 +218,16 @@ public class LoginActivity extends BaseLoginActivity {
|
|||
};
|
||||
}
|
||||
|
||||
private void onConnectivityEvent(VerifyConnection.ConnectionState connectivity) {
|
||||
private void onConnectivityEvent(Constants.ConnectionState connectivity) {
|
||||
Timber.v("onConnectivityEvent hasConnectivity:%s", connectivity.name());
|
||||
if (connectivity != VerifyConnection.ConnectionState.CONNECTED) {
|
||||
if (connectivity != Constants.ConnectionState.CONNECTED) {
|
||||
networkSnackBarUtil.getNoConnectionSnackBar(
|
||||
mSnackLayout,
|
||||
mUserManager.getUser(),
|
||||
this,
|
||||
null,
|
||||
null,
|
||||
connectivity == VerifyConnection.ConnectionState.NO_INTERNET
|
||||
connectivity == Constants.ConnectionState.NO_INTERNET
|
||||
).show();
|
||||
} else {
|
||||
networkSnackBarUtil.hideAllSnackBars();
|
||||
|
|
|
@ -37,6 +37,7 @@ import com.squareup.otto.Subscribe;
|
|||
import butterknife.BindView;
|
||||
import butterknife.OnClick;
|
||||
import ch.protonmail.android.R;
|
||||
import ch.protonmail.android.core.Constants;
|
||||
import ch.protonmail.android.core.ProtonMailApplication;
|
||||
import ch.protonmail.android.events.LogoutEvent;
|
||||
import ch.protonmail.android.events.MailboxLoginEvent;
|
||||
|
@ -198,16 +199,16 @@ public class MailboxLoginActivity extends BaseLoginActivity {
|
|||
};
|
||||
}
|
||||
|
||||
private void onConnectivityEvent(VerifyConnection.ConnectionState connectivity) {
|
||||
private void onConnectivityEvent(Constants.ConnectionState connectivity) {
|
||||
Timber.v("onConnectivityEvent hasConnectivity:%s", connectivity.name());
|
||||
if (connectivity != VerifyConnection.ConnectionState.CONNECTED) {
|
||||
if (connectivity != Constants.ConnectionState.CONNECTED) {
|
||||
networkSnackBarUtil.getNoConnectionSnackBar(
|
||||
mSnackLayout,
|
||||
mUserManager.getUser(),
|
||||
this,
|
||||
null,
|
||||
null,
|
||||
connectivity == VerifyConnection.ConnectionState.NO_INTERNET
|
||||
connectivity == Constants.ConnectionState.NO_INTERNET
|
||||
).show();
|
||||
} else {
|
||||
networkSnackBarUtil.hideAllSnackBars();
|
||||
|
|
|
@ -426,7 +426,7 @@ internal class MessageDetailsActivity :
|
|||
buttonsVisibilityHandler.removeCallbacks(buttonsVisibilityRunnable)
|
||||
}
|
||||
|
||||
private fun showNoConnSnackExtended(connectivity: VerifyConnection.ConnectionState) {
|
||||
private fun showNoConnSnackExtended(connectivity: Constants.ConnectionState) {
|
||||
Timber.v("Show no connection")
|
||||
networkSnackBarUtil.hideAllSnackBars()
|
||||
networkSnackBarUtil.getNoConnectionSnackBar(
|
||||
|
@ -435,7 +435,7 @@ internal class MessageDetailsActivity :
|
|||
this,
|
||||
{ onConnectivityCheckRetry() },
|
||||
anchorViewId = R.id.action_buttons,
|
||||
isOffline = connectivity == VerifyConnection.ConnectionState.NO_INTERNET
|
||||
isOffline = connectivity == Constants.ConnectionState.NO_INTERNET
|
||||
).show()
|
||||
invalidateOptionsMenu()
|
||||
}
|
||||
|
@ -460,7 +460,7 @@ internal class MessageDetailsActivity :
|
|||
this,
|
||||
{ isConnectionActive ->
|
||||
Timber.v("isConnectionActive:${isConnectionActive.name}")
|
||||
if (isConnectionActive == VerifyConnection.ConnectionState.CONNECTED) {
|
||||
if (isConnectionActive == Constants.ConnectionState.CONNECTED) {
|
||||
hideNoConnSnackExtended()
|
||||
viewModel.fetchMessageDetails(false)
|
||||
} else {
|
||||
|
|
|
@ -475,15 +475,15 @@ abstract class BaseSettingsActivity : BaseConnectivityActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun onConnectivityEvent(connectivity: VerifyConnection.ConnectionState) {
|
||||
private fun onConnectivityEvent(connectivity: Constants.ConnectionState) {
|
||||
Timber.v("onConnectivityEvent hasConnection:${connectivity.name}")
|
||||
if (connectivity != VerifyConnection.ConnectionState.CONNECTED) {
|
||||
if (connectivity != Constants.ConnectionState.CONNECTED) {
|
||||
networkSnackBarUtil.getNoConnectionSnackBar(
|
||||
mSnackLayout,
|
||||
mUserManager.user,
|
||||
this,
|
||||
{ onConnectivityCheckRetry() },
|
||||
isOffline = connectivity == VerifyConnection.ConnectionState.NO_INTERNET
|
||||
isOffline = connectivity == Constants.ConnectionState.NO_INTERNET
|
||||
).show()
|
||||
} else {
|
||||
networkSnackBarUtil.hideAllSnackBars()
|
||||
|
|
|
@ -45,10 +45,10 @@ import ch.protonmail.android.contacts.list.search.OnSearchClose
|
|||
import ch.protonmail.android.contacts.list.search.SearchExpandListener
|
||||
import ch.protonmail.android.contacts.list.search.SearchViewQueryListener
|
||||
import ch.protonmail.android.core.Constants
|
||||
import ch.protonmail.android.core.Constants.ConnectionState
|
||||
import ch.protonmail.android.events.LogoutEvent
|
||||
import ch.protonmail.android.events.user.MailSettingsEvent
|
||||
import ch.protonmail.android.permissions.PermissionHelper
|
||||
import ch.protonmail.android.usecase.VerifyConnection
|
||||
import ch.protonmail.android.utils.AppUtil
|
||||
import ch.protonmail.android.utils.extensions.showToast
|
||||
import ch.protonmail.android.utils.moveToLogin
|
||||
|
@ -184,16 +184,16 @@ class ContactsActivity :
|
|||
contactsViewModel.checkConnectivityDelayed()
|
||||
}
|
||||
|
||||
private fun onConnectivityEvent(connectivity: VerifyConnection.ConnectionState) {
|
||||
private fun onConnectivityEvent(connectivity: ConnectionState) {
|
||||
Timber.v("onConnectivityEvent hasConnection:${connectivity.name}")
|
||||
networkSnackBarUtil.hideAllSnackBars()
|
||||
if (connectivity != VerifyConnection.ConnectionState.CONNECTED) {
|
||||
if (connectivity != ConnectionState.CONNECTED) {
|
||||
networkSnackBarUtil.getNoConnectionSnackBar(
|
||||
mSnackLayout,
|
||||
mUserManager.user,
|
||||
this,
|
||||
{ onConnectivityCheckRetry() },
|
||||
isOffline = connectivity == VerifyConnection.ConnectionState.NO_INTERNET
|
||||
isOffline = connectivity == ConnectionState.NO_INTERNET
|
||||
).show()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -780,16 +780,16 @@ public class EditContactDetailsActivity extends BaseConnectivityActivity {
|
|||
return new ContactAddressView(this, titleText, optionTitleText, standardOptionUIValues, standardOptionValues, rootView);
|
||||
}
|
||||
|
||||
private void onConnectivityEvent(VerifyConnection.ConnectionState connectivity) {
|
||||
private void onConnectivityEvent(Constants.ConnectionState connectivity) {
|
||||
Timber.v("onConnectivityEvent hasConnectivity:%s", connectivity.name());
|
||||
if (connectivity != VerifyConnection.ConnectionState.CONNECTED) {
|
||||
if (connectivity != Constants.ConnectionState.CONNECTED) {
|
||||
networkSnackBarUtil.getNoConnectionSnackBar(
|
||||
mSnackLayout,
|
||||
mUserManager.getUser(),
|
||||
this,
|
||||
null,
|
||||
null,
|
||||
connectivity == VerifyConnection.ConnectionState.NO_INTERNET
|
||||
connectivity == Constants.ConnectionState.NO_INTERNET
|
||||
).show();
|
||||
} else {
|
||||
networkSnackBarUtil.hideAllSnackBars();
|
||||
|
|
|
@ -33,6 +33,7 @@ import ch.protonmail.android.api.models.room.contacts.ContactLabel
|
|||
import ch.protonmail.android.api.rx.ThreadSchedulers
|
||||
import ch.protonmail.android.api.utils.ParseUtils
|
||||
import ch.protonmail.android.contacts.details.ContactDetailsViewModel
|
||||
import ch.protonmail.android.core.Constants
|
||||
import ch.protonmail.android.core.UserManager
|
||||
import ch.protonmail.android.domain.usecase.DownloadFile
|
||||
import ch.protonmail.android.usecase.VerifyConnection
|
||||
|
@ -112,7 +113,7 @@ class EditContactDetailsViewModel @ViewModelInject constructor(
|
|||
get() = _setupConvertContactFlow
|
||||
val freeUserEvent: LiveData<Unit>
|
||||
get() = _freeUserEvent
|
||||
val hasConnectivity: LiveData<VerifyConnection.ConnectionState> =
|
||||
val hasConnectivity: LiveData<Constants.ConnectionState> =
|
||||
_verifyConnectionTrigger.switchMap { verifyConnection().asLiveData() }
|
||||
val createContactResult: MutableLiveData<Int> = MutableLiveData()
|
||||
// endregion
|
||||
|
|
|
@ -390,4 +390,10 @@ object Constants {
|
|||
SIGNED(2),
|
||||
SIGNED_ENCRYPTED(3);
|
||||
}
|
||||
|
||||
enum class ConnectionState {
|
||||
CONNECTED,
|
||||
NO_INTERNET,
|
||||
CANT_REACH_SERVER;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,7 +26,6 @@ import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET
|
|||
import android.net.NetworkRequest
|
||||
import android.os.Build
|
||||
import androidx.annotation.RequiresApi
|
||||
import ch.protonmail.android.usecase.VerifyConnection
|
||||
import kotlinx.coroutines.channels.awaitClose
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
@ -62,7 +61,7 @@ class NetworkConnectivityManager @Inject constructor(
|
|||
/**
|
||||
* Flow of boolean connection events. True when internet connection is established, false when it is lost.
|
||||
*/
|
||||
fun isConnectionAvailableFlow(): Flow<VerifyConnection.ConnectionState> = callbackFlow {
|
||||
fun isConnectionAvailableFlow(): Flow<Constants.ConnectionState> = callbackFlow {
|
||||
val callback = object : ConnectivityManager.NetworkCallback() {
|
||||
override fun onAvailable(network: Network) {
|
||||
Timber.v("Network $network available")
|
||||
|
@ -70,10 +69,10 @@ class NetworkConnectivityManager @Inject constructor(
|
|||
|
||||
override fun onLost(network: Network) {
|
||||
launch {
|
||||
delay(3.seconds)
|
||||
delay(2.seconds)
|
||||
Timber.d("Network $network lost isInternetPossible: ${isInternetConnectionPossible()}")
|
||||
if (!isInternetConnectionPossible()) {
|
||||
offer(VerifyConnection.ConnectionState.NO_INTERNET)
|
||||
offer(Constants.ConnectionState.NO_INTERNET)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -85,7 +84,7 @@ class NetworkConnectivityManager @Inject constructor(
|
|||
override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
|
||||
if (networkCapabilities.hasCapability(NET_CAPABILITY_INTERNET)) {
|
||||
Timber.v("Network $network has internet capability")
|
||||
offer(VerifyConnection.ConnectionState.CONNECTED)
|
||||
offer(Constants.ConnectionState.CONNECTED)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,7 +31,6 @@ import kotlinx.coroutines.flow.MutableStateFlow
|
|||
import kotlinx.coroutines.flow.StateFlow
|
||||
import timber.log.Timber
|
||||
import java.net.SocketTimeoutException
|
||||
import java.net.UnknownHostException
|
||||
import java.security.GeneralSecurityException
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
@ -53,10 +52,10 @@ class QueueNetworkUtil @Inject constructor(
|
|||
* Flow that emits false when backend replies with an error, or true when
|
||||
* a correct reply is received.
|
||||
*/
|
||||
val isBackendRespondingWithoutErrorFlow: StateFlow<VerifyConnection.ConnectionState>
|
||||
val isBackendRespondingWithoutErrorFlow: StateFlow<Constants.ConnectionState>
|
||||
get() = backendExceptionFlow
|
||||
|
||||
private val backendExceptionFlow = MutableStateFlow(VerifyConnection.ConnectionState.CONNECTED)
|
||||
private val backendExceptionFlow = MutableStateFlow(Constants.ConnectionState.CONNECTED)
|
||||
|
||||
init {
|
||||
updateRealConnectivity(true) // initially we assume there is connectivity
|
||||
|
@ -84,7 +83,7 @@ class QueueNetworkUtil @Inject constructor(
|
|||
isServerAccessible = serverAccessible
|
||||
|
||||
if (serverAccessible) {
|
||||
backendExceptionFlow.value = VerifyConnection.ConnectionState.CONNECTED
|
||||
backendExceptionFlow.value = Constants.ConnectionState.CONNECTED
|
||||
} else {
|
||||
// to prevent consecutive series of disconnection emissions we introduce a disconnection
|
||||
// emission buffer below
|
||||
|
@ -94,7 +93,7 @@ class QueueNetworkUtil @Inject constructor(
|
|||
val mayEmit = emissionTimeDelta > DISCONNECTION_EMISSION_WINDOW_MS
|
||||
if (mayEmit) {
|
||||
lastEmissionTime = currentTime
|
||||
backendExceptionFlow.value = VerifyConnection.ConnectionState.CANT_REACH_SERVER
|
||||
backendExceptionFlow.value = Constants.ConnectionState.CANT_REACH_SERVER
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ import androidx.lifecycle.LiveData
|
|||
import androidx.lifecycle.asFlow
|
||||
import androidx.lifecycle.map
|
||||
import androidx.work.WorkInfo
|
||||
import ch.protonmail.android.core.Constants
|
||||
import ch.protonmail.android.core.NetworkConnectivityManager
|
||||
import ch.protonmail.android.core.QueueNetworkUtil
|
||||
import ch.protonmail.android.worker.PingWorker
|
||||
|
@ -56,14 +57,14 @@ class VerifyConnection @Inject constructor(
|
|||
private val queueNetworkUtil: QueueNetworkUtil
|
||||
) {
|
||||
|
||||
operator fun invoke(): Flow<ConnectionState> {
|
||||
operator fun invoke(): Flow<Constants.ConnectionState> {
|
||||
|
||||
val connectivityManagerFlow = flowOf(
|
||||
connectivityManager.isConnectionAvailableFlow(),
|
||||
queueNetworkUtil.isBackendRespondingWithoutErrorFlow
|
||||
)
|
||||
.flattenMerge()
|
||||
.filter { it != ConnectionState.CONNECTED } // observe only disconnections
|
||||
.filter { it != Constants.ConnectionState.CONNECTED } // observe only disconnections
|
||||
.onEach {
|
||||
Timber.v("connectivityManagerFlow value: ${it.name}")
|
||||
pingWorkerEnqueuer.enqueue() // re-schedule ping
|
||||
|
@ -78,21 +79,21 @@ class VerifyConnection @Inject constructor(
|
|||
pingWorkerEnqueuer.enqueue()
|
||||
emit(
|
||||
if (connectivityManager.isInternetConnectionPossible())
|
||||
ConnectionState.CONNECTED else ConnectionState.NO_INTERNET
|
||||
Constants.ConnectionState.CONNECTED else Constants.ConnectionState.NO_INTERNET
|
||||
) // start with current net state
|
||||
}
|
||||
}
|
||||
|
||||
private fun getPingStateList(workInfoLiveData: LiveData<List<WorkInfo>?>): Flow<ConnectionState> {
|
||||
private fun getPingStateList(workInfoLiveData: LiveData<List<WorkInfo>?>): Flow<Constants.ConnectionState> {
|
||||
return workInfoLiveData
|
||||
.map { workInfoList ->
|
||||
val hasSucceededEvents = mutableListOf<ConnectionState>()
|
||||
val hasSucceededEvents = mutableListOf<Constants.ConnectionState>()
|
||||
workInfoList?.forEach { info ->
|
||||
if (info.state.isFinished) {
|
||||
if (info.state == WorkInfo.State.FAILED) {
|
||||
hasSucceededEvents.add(ConnectionState.CANT_REACH_SERVER)
|
||||
hasSucceededEvents.add(Constants.ConnectionState.CANT_REACH_SERVER)
|
||||
} else {
|
||||
hasSucceededEvents.add(ConnectionState.CONNECTED)
|
||||
hasSucceededEvents.add(Constants.ConnectionState.CONNECTED)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -105,8 +106,4 @@ class VerifyConnection @Inject constructor(
|
|||
.filter { it.isNotEmpty() }
|
||||
.map { it[0] }
|
||||
}
|
||||
|
||||
enum class ConnectionState {
|
||||
CONNECTED, NO_INTERNET, CANT_REACH_SERVER
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,8 +44,6 @@ import javax.inject.Inject
|
|||
class NetworkSnackBarUtil @Inject constructor() {
|
||||
|
||||
private var noConnectionSnackBar: Snackbar? = null
|
||||
|
||||
// private var serverNotReachableSnackBar: Snackbar? = null
|
||||
private var checkingConnectionSnackBar: Snackbar? = null
|
||||
|
||||
/**
|
||||
|
|
|
@ -27,6 +27,7 @@ import androidx.lifecycle.asLiveData
|
|||
import androidx.lifecycle.switchMap
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import ch.protonmail.android.api.NetworkConfigurator
|
||||
import ch.protonmail.android.core.Constants
|
||||
import ch.protonmail.android.usecase.VerifyConnection
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
|
@ -46,12 +47,12 @@ open class ConnectivityBaseViewModel @ViewModelInject constructor(
|
|||
|
||||
private val verifyConnectionTrigger: MutableLiveData<Unit> = MutableLiveData()
|
||||
|
||||
val hasConnectivity: LiveData<VerifyConnection.ConnectionState> =
|
||||
val hasConnectivity: LiveData<Constants.ConnectionState> =
|
||||
verifyConnectionTrigger.switchMap {
|
||||
verifyConnection()
|
||||
.distinctUntilChanged()
|
||||
.onEach { isConnected ->
|
||||
if (isConnected != VerifyConnection.ConnectionState.CONNECTED) {
|
||||
if (isConnected != Constants.ConnectionState.CONNECTED) {
|
||||
retryWithDoh()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue