Commit 0161e7c7 authored by Filipe de Lima Brito's avatar Filipe de Lima Brito

Remove the check for internet connection.

parent 48d1e77a
...@@ -2,7 +2,6 @@ package chat.rocket.android.authentication.login.presentation ...@@ -2,7 +2,6 @@ package chat.rocket.android.authentication.login.presentation
import chat.rocket.android.authentication.presentation.AuthenticationNavigator import chat.rocket.android.authentication.presentation.AuthenticationNavigator
import chat.rocket.android.core.lifecycle.CancelStrategy import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.helper.NetworkHelper
import chat.rocket.android.helper.OauthHelper import chat.rocket.android.helper.OauthHelper
import chat.rocket.android.infrastructure.LocalRepository import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.server.domain.* import chat.rocket.android.server.domain.*
...@@ -190,64 +189,60 @@ class LoginPresenter @Inject constructor(private val view: LoginView, ...@@ -190,64 +189,60 @@ class LoginPresenter @Inject constructor(private val view: LoginView,
private fun doAuthentication(loginType: Int) { private fun doAuthentication(loginType: Int) {
launchUI(strategy) { launchUI(strategy) {
if (NetworkHelper.hasInternetAccess()) { view.disableUserInput()
view.disableUserInput() view.showLoading()
view.showLoading() try {
try { val token = retryIO("login") {
val token = retryIO("login") { when (loginType) {
when (loginType) { TYPE_LOGIN_USER_EMAIL -> {
TYPE_LOGIN_USER_EMAIL -> { if (usernameOrEmail.isEmail()) {
if (usernameOrEmail.isEmail()) { client.loginWithEmail(usernameOrEmail, password)
client.loginWithEmail(usernameOrEmail, password) } else {
if (settings.isLdapAuthenticationEnabled()) {
client.loginWithLdap(usernameOrEmail, password)
} else { } else {
if (settings.isLdapAuthenticationEnabled()) { client.login(usernameOrEmail, password)
client.loginWithLdap(usernameOrEmail, password)
} else {
client.login(usernameOrEmail, password)
}
} }
} }
TYPE_LOGIN_CAS -> {
delay(3, TimeUnit.SECONDS)
client.loginWithCas(credentialToken)
}
TYPE_LOGIN_OAUTH -> {
client.loginWithOauth(credentialToken, credentialSecret)
}
else -> {
throw IllegalStateException("Expected TYPE_LOGIN_USER_EMAIL, TYPE_LOGIN_CAS or TYPE_LOGIN_OAUTH")
}
} }
} TYPE_LOGIN_CAS -> {
val username = retryIO("me()") { client.me().username } delay(3, TimeUnit.SECONDS)
if (username != null) { client.loginWithCas(credentialToken)
localRepository.save(LocalRepository.CURRENT_USERNAME_KEY, username) }
saveAccount(username) TYPE_LOGIN_OAUTH -> {
saveToken(token) client.loginWithOauth(credentialToken, credentialSecret)
registerPushToken()
navigator.toChatList()
} else if (loginType == TYPE_LOGIN_OAUTH) {
navigator.toRegisterUsername(token.userId, token.authToken)
}
} catch (exception: RocketChatException) {
when (exception) {
is RocketChatTwoFactorException -> {
navigator.toTwoFA(usernameOrEmail, password)
} }
else -> { else -> {
exception.message?.let { throw IllegalStateException("Expected TYPE_LOGIN_USER_EMAIL, TYPE_LOGIN_CAS or TYPE_LOGIN_OAUTH")
view.showMessage(it) }
}.ifNull { }
view.showGenericErrorMessage() }
} val username = retryIO("me()") { client.me().username }
if (username != null) {
localRepository.save(LocalRepository.CURRENT_USERNAME_KEY, username)
saveAccount(username)
saveToken(token)
registerPushToken()
navigator.toChatList()
} else if (loginType == TYPE_LOGIN_OAUTH) {
navigator.toRegisterUsername(token.userId, token.authToken)
}
} catch (exception: RocketChatException) {
when (exception) {
is RocketChatTwoFactorException -> {
navigator.toTwoFA(usernameOrEmail, password)
}
else -> {
exception.message?.let {
view.showMessage(it)
}.ifNull {
view.showGenericErrorMessage()
} }
} }
} finally {
view.hideLoading()
view.enableUserInput()
} }
} else { } finally {
view.showNoInternetConnection() view.hideLoading()
view.enableUserInput()
} }
} }
} }
......
package chat.rocket.android.authentication.login.presentation package chat.rocket.android.authentication.login.presentation
import chat.rocket.android.authentication.server.presentation.VersionCheckView import chat.rocket.android.authentication.server.presentation.VersionCheckView
import chat.rocket.android.core.behaviours.InternetView
import chat.rocket.android.core.behaviours.LoadingView import chat.rocket.android.core.behaviours.LoadingView
import chat.rocket.android.core.behaviours.MessageView import chat.rocket.android.core.behaviours.MessageView
interface LoginView : LoadingView, MessageView, InternetView, VersionCheckView { interface LoginView : LoadingView, MessageView, VersionCheckView {
/** /**
* Shows the form view (i.e the username/email and password fields) if it is enabled by the server settings. * Shows the form view (i.e the username/email and password fields) if it is enabled by the server settings.
......
...@@ -105,10 +105,6 @@ class LoginFragment : Fragment(), LoginView { ...@@ -105,10 +105,6 @@ class LoginFragment : Fragment(), LoginView {
view_loading.setVisible(false) view_loading.setVisible(false)
} }
override fun showNoInternetConnection() {
showMessage(R.string.msg_no_internet_connection)
}
override fun showMessage(resId: Int) { override fun showMessage(resId: Int) {
showToast(resId) showToast(resId)
} }
......
...@@ -2,7 +2,6 @@ package chat.rocket.android.authentication.registerusername.presentation ...@@ -2,7 +2,6 @@ package chat.rocket.android.authentication.registerusername.presentation
import chat.rocket.android.authentication.presentation.AuthenticationNavigator import chat.rocket.android.authentication.presentation.AuthenticationNavigator
import chat.rocket.android.core.lifecycle.CancelStrategy import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.helper.NetworkHelper
import chat.rocket.android.infrastructure.LocalRepository import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.server.domain.* import chat.rocket.android.server.domain.*
import chat.rocket.android.server.domain.model.Account import chat.rocket.android.server.domain.model.Account
...@@ -40,30 +39,26 @@ class RegisterUsernamePresenter @Inject constructor( ...@@ -40,30 +39,26 @@ class RegisterUsernamePresenter @Inject constructor(
view.alertBlankUsername() view.alertBlankUsername()
} else { } else {
launchUI(strategy) { launchUI(strategy) {
if (NetworkHelper.hasInternetAccess()) { view.showLoading()
view.showLoading() try {
try { val me = retryIO("updateOwnBasicInformation(username = $username)") {
val me = retryIO("updateOwnBasicInformation(username = $username)") { client.updateOwnBasicInformation(username = username)
client.updateOwnBasicInformation(username = username)
}
val registeredUsername = me.username
if (registeredUsername != null) {
saveAccount(registeredUsername)
tokenRepository.save(currentServer, Token(userId, authToken))
registerPushToken()
navigator.toChatList()
}
} catch (exception: RocketChatException) {
exception.message?.let {
view.showMessage(it)
}.ifNull {
view.showGenericErrorMessage()
}
} finally {
view.hideLoading()
} }
} else { val registeredUsername = me.username
view.showNoInternetConnection() if (registeredUsername != null) {
saveAccount(registeredUsername)
tokenRepository.save(currentServer, Token(userId, authToken))
registerPushToken()
navigator.toChatList()
}
} catch (exception: RocketChatException) {
exception.message?.let {
view.showMessage(it)
}.ifNull {
view.showGenericErrorMessage()
}
} finally {
view.hideLoading()
} }
} }
} }
......
package chat.rocket.android.authentication.registerusername.presentation package chat.rocket.android.authentication.registerusername.presentation
import chat.rocket.android.core.behaviours.InternetView
import chat.rocket.android.core.behaviours.LoadingView import chat.rocket.android.core.behaviours.LoadingView
import chat.rocket.android.core.behaviours.MessageView import chat.rocket.android.core.behaviours.MessageView
interface RegisterUsernameView : LoadingView, MessageView, InternetView { interface RegisterUsernameView : LoadingView, MessageView {
/** /**
* Alerts the user about a blank username. * Alerts the user about a blank username.
......
...@@ -85,10 +85,6 @@ class RegisterUsernameFragment : Fragment(), RegisterUsernameView { ...@@ -85,10 +85,6 @@ class RegisterUsernameFragment : Fragment(), RegisterUsernameView {
showMessage(getString(R.string.msg_generic_error)) showMessage(getString(R.string.msg_generic_error))
} }
override fun showNoInternetConnection() {
showMessage(getString(R.string.msg_no_internet_connection))
}
private fun tintEditTextDrawableStart() { private fun tintEditTextDrawableStart() {
activity?.apply { activity?.apply {
val atDrawable = DrawableHelper.getDrawableFromId(R.drawable.ic_at_black_24dp, this) val atDrawable = DrawableHelper.getDrawableFromId(R.drawable.ic_at_black_24dp, this)
......
...@@ -2,7 +2,6 @@ package chat.rocket.android.authentication.server.presentation ...@@ -2,7 +2,6 @@ package chat.rocket.android.authentication.server.presentation
import chat.rocket.android.authentication.presentation.AuthenticationNavigator import chat.rocket.android.authentication.presentation.AuthenticationNavigator
import chat.rocket.android.core.lifecycle.CancelStrategy import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.helper.NetworkHelper
import chat.rocket.android.server.domain.GetAccountsInteractor import chat.rocket.android.server.domain.GetAccountsInteractor
import chat.rocket.android.server.domain.RefreshSettingsInteractor import chat.rocket.android.server.domain.RefreshSettingsInteractor
import chat.rocket.android.server.domain.SaveCurrentServerInteractor import chat.rocket.android.server.domain.SaveCurrentServerInteractor
...@@ -29,23 +28,19 @@ class ServerPresenter @Inject constructor(private val view: ServerView, ...@@ -29,23 +28,19 @@ class ServerPresenter @Inject constructor(private val view: ServerView,
return@launchUI return@launchUI
} }
if (NetworkHelper.hasInternetAccess()) { view.showLoading()
view.showLoading() try {
try { refreshSettingsInteractor.refresh(server)
refreshSettingsInteractor.refresh(server) serverInteractor.save(server)
serverInteractor.save(server) navigator.toLogin()
navigator.toLogin() } catch (ex: Exception) {
} catch (ex: Exception) { ex.message?.let {
ex.message?.let { view.showMessage(it)
view.showMessage(it) }.ifNull {
}.ifNull { view.showGenericErrorMessage()
view.showGenericErrorMessage()
}
} finally {
view.hideLoading()
} }
} else { } finally {
view.showNoInternetConnection() view.hideLoading()
} }
} }
} }
......
package chat.rocket.android.authentication.server.presentation package chat.rocket.android.authentication.server.presentation
import chat.rocket.android.core.behaviours.InternetView
import chat.rocket.android.core.behaviours.LoadingView import chat.rocket.android.core.behaviours.LoadingView
import chat.rocket.android.core.behaviours.MessageView import chat.rocket.android.core.behaviours.MessageView
interface ServerView : LoadingView, MessageView, InternetView { interface ServerView : LoadingView, MessageView {
/** /**
* Shows an invalid server URL message. * Shows an invalid server URL message.
......
...@@ -68,10 +68,6 @@ class ServerFragment : Fragment(), ServerView { ...@@ -68,10 +68,6 @@ class ServerFragment : Fragment(), ServerView {
showMessage(getString(R.string.msg_generic_error)) showMessage(getString(R.string.msg_generic_error))
} }
override fun showNoInternetConnection() {
showMessage(getString(R.string.msg_no_internet_connection))
}
private fun enableUserInput(value: Boolean) { private fun enableUserInput(value: Boolean) {
button_connect.isEnabled = value button_connect.isEnabled = value
text_server_url.isEnabled = value text_server_url.isEnabled = value
......
...@@ -2,7 +2,6 @@ package chat.rocket.android.authentication.signup.presentation ...@@ -2,7 +2,6 @@ package chat.rocket.android.authentication.signup.presentation
import chat.rocket.android.authentication.presentation.AuthenticationNavigator import chat.rocket.android.authentication.presentation.AuthenticationNavigator
import chat.rocket.android.core.lifecycle.CancelStrategy import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.helper.NetworkHelper
import chat.rocket.android.infrastructure.LocalRepository import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.server.domain.* import chat.rocket.android.server.domain.*
import chat.rocket.android.server.domain.model.Account import chat.rocket.android.server.domain.model.Account
...@@ -57,31 +56,26 @@ class SignupPresenter @Inject constructor(private val view: SignupView, ...@@ -57,31 +56,26 @@ class SignupPresenter @Inject constructor(private val view: SignupView,
else -> { else -> {
val client = factory.create(server) val client = factory.create(server)
launchUI(strategy) { launchUI(strategy) {
if (NetworkHelper.hasInternetAccess()) { view.showLoading()
view.showLoading() try {
// TODO This function returns a user so should we save it?
try { retryIO("signup") { client.signup(email, name, username, password) }
// TODO This function returns a user so should we save it? // TODO This function returns a user token so should we save it?
retryIO("signup") { client.signup(email, name, username, password) } retryIO("login") { client.login(username, password) }
// TODO This function returns a user token so should we save it? val me = retryIO("me") { client.me() }
retryIO("login") { client.login(username, password) } localRepository.save(LocalRepository.CURRENT_USERNAME_KEY, me.username)
val me = retryIO("me") { client.me() } saveAccount(me)
localRepository.save(LocalRepository.CURRENT_USERNAME_KEY, me.username) registerPushToken()
saveAccount(me) navigator.toChatList()
registerPushToken() } catch (exception: RocketChatException) {
navigator.toChatList() exception.message?.let {
} catch (exception: RocketChatException) { view.showMessage(it)
exception.message?.let { }.ifNull {
view.showMessage(it) view.showGenericErrorMessage()
}.ifNull {
view.showGenericErrorMessage()
}
} finally {
view.hideLoading()
} }
} else { } finally {
view.showNoInternetConnection() view.hideLoading()
} }
} }
} }
......
package chat.rocket.android.authentication.signup.presentation package chat.rocket.android.authentication.signup.presentation
import chat.rocket.android.core.behaviours.InternetView
import chat.rocket.android.core.behaviours.LoadingView import chat.rocket.android.core.behaviours.LoadingView
import chat.rocket.android.core.behaviours.MessageView import chat.rocket.android.core.behaviours.MessageView
interface SignupView : LoadingView, MessageView, InternetView { interface SignupView : LoadingView, MessageView {
/** /**
* Alerts the user about a blank name. * Alerts the user about a blank name.
......
...@@ -109,10 +109,6 @@ class SignupFragment : Fragment(), SignupView { ...@@ -109,10 +109,6 @@ class SignupFragment : Fragment(), SignupView {
showMessage(getString(R.string.msg_generic_error)) showMessage(getString(R.string.msg_generic_error))
} }
override fun showNoInternetConnection() {
Toast.makeText(activity, getString(R.string.msg_no_internet_connection), Toast.LENGTH_SHORT).show()
}
private fun tintEditTextDrawableStart() { private fun tintEditTextDrawableStart() {
activity?.apply { activity?.apply {
val personDrawable = DrawableHelper.getDrawableFromId(R.drawable.ic_person_black_24dp, this) val personDrawable = DrawableHelper.getDrawableFromId(R.drawable.ic_person_black_24dp, this)
......
...@@ -2,7 +2,6 @@ package chat.rocket.android.authentication.twofactor.presentation ...@@ -2,7 +2,6 @@ package chat.rocket.android.authentication.twofactor.presentation
import chat.rocket.android.authentication.presentation.AuthenticationNavigator import chat.rocket.android.authentication.presentation.AuthenticationNavigator
import chat.rocket.android.core.lifecycle.CancelStrategy import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.helper.NetworkHelper
import chat.rocket.android.infrastructure.LocalRepository import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.server.domain.* import chat.rocket.android.server.domain.*
import chat.rocket.android.server.domain.model.Account import chat.rocket.android.server.domain.model.Account
...@@ -48,33 +47,29 @@ class TwoFAPresenter @Inject constructor(private val view: TwoFAView, ...@@ -48,33 +47,29 @@ class TwoFAPresenter @Inject constructor(private val view: TwoFAView,
else -> { else -> {
launchUI(strategy) { launchUI(strategy) {
val client = factory.create(server) val client = factory.create(server)
if (NetworkHelper.hasInternetAccess()) { view.showLoading()
view.showLoading() try {
try { // The token is saved via the client TokenProvider
// The token is saved via the client TokenProvider val token = retryIO("login") {
val token = retryIO("login") { client.login(usernameOrEmail, password, twoFactorAuthenticationCode)
client.login(usernameOrEmail, password, twoFactorAuthenticationCode) }
} val me = retryIO("me") { client.me() }
val me = retryIO("me") { client.me() } saveAccount(me)
saveAccount(me) tokenRepository.save(server, token)
tokenRepository.save(server, token) registerPushToken()
registerPushToken() navigator.toChatList()
navigator.toChatList() } catch (exception: RocketChatException) {
} catch (exception: RocketChatException) { if (exception is RocketChatAuthException) {
if (exception is RocketChatAuthException) { view.alertInvalidTwoFactorAuthenticationCode()
view.alertInvalidTwoFactorAuthenticationCode() } else {
} else { exception.message?.let {
exception.message?.let { view.showMessage(it)
view.showMessage(it) }.ifNull {
}.ifNull { view.showGenericErrorMessage()
view.showGenericErrorMessage()
}
} }
} finally {
view.hideLoading()
} }
} else { } finally {
view.showNoInternetConnection() view.hideLoading()
} }
} }
} }
......
package chat.rocket.android.authentication.twofactor.presentation package chat.rocket.android.authentication.twofactor.presentation
import chat.rocket.android.core.behaviours.InternetView
import chat.rocket.android.core.behaviours.LoadingView import chat.rocket.android.core.behaviours.LoadingView
import chat.rocket.android.core.behaviours.MessageView import chat.rocket.android.core.behaviours.MessageView
interface TwoFAView : LoadingView, MessageView, InternetView { interface TwoFAView : LoadingView, MessageView {
/** /**
* Alerts the user about a blank Two Factor Authentication code. * Alerts the user about a blank Two Factor Authentication code.
......
...@@ -91,8 +91,6 @@ class TwoFAFragment : Fragment(), TwoFAView { ...@@ -91,8 +91,6 @@ class TwoFAFragment : Fragment(), TwoFAView {
override fun showGenericErrorMessage() = showMessage(getString(R.string.msg_generic_error)) override fun showGenericErrorMessage() = showMessage(getString(R.string.msg_generic_error))
override fun showNoInternetConnection() = showMessage(getString(R.string.msg_no_internet_connection))
private fun tintEditTextDrawableStart() { private fun tintEditTextDrawableStart() {
activity?.apply { activity?.apply {
val lockDrawable = DrawableHelper.getDrawableFromId(R.drawable.ic_vpn_key_black_24dp, this) val lockDrawable = DrawableHelper.getDrawableFromId(R.drawable.ic_vpn_key_black_24dp, this)
......
package chat.rocket.android.core.behaviours
interface InternetView {
fun showNoInternetConnection()
}
\ No newline at end of file
package chat.rocket.android.helper
import kotlinx.coroutines.experimental.CommonPool
import kotlinx.coroutines.experimental.withContext
import java.io.IOException
import java.net.InetSocketAddress
import java.net.Socket
object NetworkHelper {
/**
* Checks whether there is internet access.
*
* The original author of this code is Levit and you can see his answer here: https://stackoverflow.com/a/27312494/4744263
*
* @return true if there is internet access, false otherwise.
*/
suspend fun hasInternetAccess(): Boolean = withContext(CommonPool) {
try {
val socket = Socket()
val inetSocketAddress = InetSocketAddress("8.8.8.8", 53)
socket.connect(inetSocketAddress, 1500)
socket.close()
true
} catch (e: IOException) {
false
}
}
}
\ No newline at end of file
...@@ -41,7 +41,6 @@ ...@@ -41,7 +41,6 @@
</string-array> </string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<string name="msg_no_internet_connection">कोई इंटरनेट कनेक्शन नहीं है</string>
<string name="msg_generic_error">क्षमा करें, एक त्रुटि हुई है, कृपया पुनः प्रयास करें</string> <string name="msg_generic_error">क्षमा करें, एक त्रुटि हुई है, कृपया पुनः प्रयास करें</string>
<string name="msg_no_data_to_display">डेटा प्रदर्शित करने के लिए उपलब्ध नहीं हैं</string> <string name="msg_no_data_to_display">डेटा प्रदर्शित करने के लिए उपलब्ध नहीं हैं</string>
<string name="msg_profile_update_successfully">प्रोफ़ाइल सफलतापूर्वक अपडेट हो गया है</string> <string name="msg_profile_update_successfully">प्रोफ़ाइल सफलतापूर्वक अपडेट हो गया है</string>
......
...@@ -41,7 +41,6 @@ ...@@ -41,7 +41,6 @@
</string-array> </string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<string name="msg_no_internet_connection">Sem conexão à internet</string>
<string name="msg_generic_error">Desculpe, ocorreu um erro, tente novamente</string> <string name="msg_generic_error">Desculpe, ocorreu um erro, tente novamente</string>
<string name="msg_no_data_to_display">Nenhum dado para exibir</string> <string name="msg_no_data_to_display">Nenhum dado para exibir</string>
<string name="msg_profile_update_successfully">Perfil atualizado com sucesso</string> <string name="msg_profile_update_successfully">Perfil atualizado com sucesso</string>
......
...@@ -42,7 +42,6 @@ ...@@ -42,7 +42,6 @@
</string-array> </string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<string name="msg_no_internet_connection">No internet connection</string>
<string name="msg_generic_error">Sorry, an error has occurred, please try again</string> <string name="msg_generic_error">Sorry, an error has occurred, please try again</string>
<string name="msg_no_data_to_display">No data to display</string> <string name="msg_no_data_to_display">No data to display</string>
<string name="msg_profile_update_successfully">Profile update successfully</string> <string name="msg_profile_update_successfully">Profile update successfully</string>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment