enum moved to constants and comments clean up

This commit is contained in:
Zorica Stojchevska 2021-02-24 17:26:52 +01:00
parent ba7c1f0cef
commit 5fd8519c6c
15 changed files with 54 additions and 52 deletions

View File

@ -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();

View File

@ -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;
}
}

View File

@ -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();

View File

@ -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();

View File

@ -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 {

View File

@ -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()

View File

@ -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()
}
}

View File

@ -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();

View File

@ -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

View File

@ -390,4 +390,10 @@ object Constants {
SIGNED(2),
SIGNED_ENCRYPTED(3);
}
enum class ConnectionState {
CONNECTED,
NO_INTERNET,
CANT_REACH_SERVER;
}
}

View File

@ -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)
}
}
}

View File

@ -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
}
}
}

View File

@ -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
}
}

View File

@ -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
/**

View File

@ -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()
}
}