Unverified Commit 67911d61 authored by Noor Binte Amir's avatar Noor Binte Amir Committed by GitHub

Merge branch 'develop' into 2254-nbamir

parents 6d2c19b5 521f0a8b
...@@ -4,7 +4,7 @@ import androidx.lifecycle.Lifecycle ...@@ -4,7 +4,7 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent import androidx.lifecycle.OnLifecycleEvent
import chat.rocket.android.server.domain.GetCurrentServerInteractor import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.common.model.UserStatus import chat.rocket.common.model.UserStatus
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
......
...@@ -24,7 +24,7 @@ import chat.rocket.android.server.domain.GetCurrentServerInteractor ...@@ -24,7 +24,7 @@ import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.domain.GetSettingsInteractor import chat.rocket.android.server.domain.GetSettingsInteractor
import chat.rocket.android.server.domain.SITE_URL import chat.rocket.android.server.domain.SITE_URL
import chat.rocket.android.server.domain.TokenRepository import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.retryIO import chat.rocket.android.util.retryIO
import chat.rocket.android.util.setupFabric import chat.rocket.android.util.setupFabric
import chat.rocket.common.RocketChatException import chat.rocket.common.RocketChatException
......
package chat.rocket.android.authentication.infraestructure package chat.rocket.android.authentication.infrastructure
import chat.rocket.android.authentication.domain.model.TokenModel import chat.rocket.android.authentication.domain.model.TokenModel
import chat.rocket.android.dagger.scope.PerActivity import chat.rocket.android.dagger.scope.PerActivity
......
package chat.rocket.android.authentication.infraestructure package chat.rocket.android.authentication.infrastructure
import android.content.SharedPreferences import android.content.SharedPreferences
import androidx.core.content.edit import androidx.core.content.edit
......
...@@ -16,7 +16,7 @@ import chat.rocket.android.server.domain.isLdapAuthenticationEnabled ...@@ -16,7 +16,7 @@ import chat.rocket.android.server.domain.isLdapAuthenticationEnabled
import chat.rocket.android.server.domain.isPasswordResetEnabled import chat.rocket.android.server.domain.isPasswordResetEnabled
import chat.rocket.android.server.domain.model.Account import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.server.domain.wideTile import chat.rocket.android.server.domain.wideTile
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.android.util.extensions.isEmail import chat.rocket.android.util.extensions.isEmail
......
...@@ -15,7 +15,7 @@ import chat.rocket.android.server.domain.TokenRepository ...@@ -15,7 +15,7 @@ import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.domain.favicon import chat.rocket.android.server.domain.favicon
import chat.rocket.android.server.domain.model.Account import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.server.domain.wideTile import chat.rocket.android.server.domain.wideTile
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.android.util.extensions.serverLogoUrl import chat.rocket.android.util.extensions.serverLogoUrl
......
package chat.rocket.android.authentication.loginoptions.ui package chat.rocket.android.authentication.loginoptions.ui
import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.animation.ValueAnimator
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.graphics.PorterDuff import android.graphics.PorterDuff
...@@ -7,10 +10,13 @@ import android.os.Bundle ...@@ -7,10 +10,13 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.widget.Button import android.widget.Button
import android.widget.LinearLayout import android.widget.LinearLayout
import androidx.appcompat.view.ContextThemeWrapper import androidx.appcompat.view.ContextThemeWrapper
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.view.marginTop
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import chat.rocket.android.R import chat.rocket.android.R
import chat.rocket.android.analytics.AnalyticsManager import chat.rocket.android.analytics.AnalyticsManager
...@@ -28,6 +34,7 @@ import chat.rocket.android.webview.sso.ui.ssoWebViewIntent ...@@ -28,6 +34,7 @@ import chat.rocket.android.webview.sso.ui.ssoWebViewIntent
import dagger.android.support.AndroidSupportInjection import dagger.android.support.AndroidSupportInjection
import kotlinx.android.synthetic.main.app_bar.* import kotlinx.android.synthetic.main.app_bar.*
import kotlinx.android.synthetic.main.fragment_authentication_login_options.* import kotlinx.android.synthetic.main.fragment_authentication_login_options.*
import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
private const val SERVER_NAME = "server_name" private const val SERVER_NAME = "server_name"
...@@ -61,6 +68,8 @@ internal const val REQUEST_CODE_FOR_OAUTH = 1 ...@@ -61,6 +68,8 @@ internal const val REQUEST_CODE_FOR_OAUTH = 1
internal const val REQUEST_CODE_FOR_CAS = 2 internal const val REQUEST_CODE_FOR_CAS = 2
internal const val REQUEST_CODE_FOR_SAML = 3 internal const val REQUEST_CODE_FOR_SAML = 3
private const val DEFAULT_ANIMATION_DURATION = 400L
fun newInstance( fun newInstance(
serverName: String, serverName: String,
state: String? = null, state: String? = null,
...@@ -238,7 +247,6 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView { ...@@ -238,7 +247,6 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
enableLoginByLinkedin() enableLoginByLinkedin()
} }
if (gitlabOauthUrl != null && state != null) { if (gitlabOauthUrl != null && state != null) {
setupGitlabButtonListener(gitlabOauthUrl.toString(), state.toString()) setupGitlabButtonListener(gitlabOauthUrl.toString(), state.toString())
enableLoginByGitlab() enableLoginByGitlab()
...@@ -390,11 +398,11 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView { ...@@ -390,11 +398,11 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
var isAccountsCollapsed = true var isAccountsCollapsed = true
button_expand_collapse_accounts.setOnClickListener { button_expand_collapse_accounts.setOnClickListener {
isAccountsCollapsed = if (isAccountsCollapsed) { isAccountsCollapsed = if (isAccountsCollapsed) {
button_expand_collapse_accounts.rotateBy(180F, 400) button_expand_collapse_accounts.rotateBy(180F, DEFAULT_ANIMATION_DURATION)
expandAccountsView() expandAccountsView()
false false
} else { } else {
button_expand_collapse_accounts.rotateBy(180F, 400) button_expand_collapse_accounts.rotateBy(180F, DEFAULT_ANIMATION_DURATION)
collapseAccountsView() collapseAccountsView()
true true
} }
...@@ -532,17 +540,73 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView { ...@@ -532,17 +540,73 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
} }
private fun expandAccountsView() { private fun expandAccountsView() {
(0..accounts_container.childCount) val buttons = (0..accounts_container.childCount)
.mapNotNull { accounts_container.getChildAt(it) as? Button } .mapNotNull { accounts_container.getChildAt(it) as? Button }
.filter { it.isClickable && !it.isVisible } .filter { it.isClickable && !it.isVisible }
.forEach { it.isVisible = true } val optionHeight = accounts_container.getChildAt(1).height +
accounts_container.getChildAt(1).marginTop
val collapsedHeight = accounts_container.height
val expandedHeight = collapsedHeight + optionHeight * buttons.size
with(ValueAnimator.ofInt(collapsedHeight, expandedHeight)) {
addUpdateListener {
val params = accounts_container.layoutParams
params.height = animatedValue as Int
accounts_container.layoutParams = params
}
addListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animator: Animator) {
buttons.forEach {
it.isVisible = true
val anim = AlphaAnimation(0.0f, 1.0f)
anim.duration = DEFAULT_ANIMATION_DURATION
it.startAnimation(anim)
}
}
})
setDuration(DEFAULT_ANIMATION_DURATION).start()
}
} }
private fun collapseAccountsView() { private fun collapseAccountsView() {
(0..accounts_container.childCount) val buttons = (0..accounts_container.childCount)
.mapNotNull { accounts_container.getChildAt(it) as? Button } .mapNotNull { accounts_container.getChildAt(it) as? Button }
.filter { it.isClickable && it.isVisible } .filter { it.isClickable && it.isVisible }
.drop(3) .drop(3)
.forEach { it.isVisible = false } val optionHeight = accounts_container.getChildAt(1).height +
accounts_container.getChildAt(1).marginTop
val expandedHeight = accounts_container.height
val collapsedHeight = expandedHeight - optionHeight * buttons.size
with(ValueAnimator.ofInt(expandedHeight, collapsedHeight)) {
addUpdateListener {
val params = accounts_container.layoutParams
params.height = animatedValue as Int
accounts_container.layoutParams = params
}
addListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animator: Animator) {
buttons.forEach {
val anim = AlphaAnimation(1.0f, 0.0f)
anim.duration = DEFAULT_ANIMATION_DURATION
anim.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation) {
Timber.d("Animation starts: $animation")
}
override fun onAnimationEnd(animation: Animation) {
it.isVisible = false
}
override fun onAnimationRepeat(animation: Animation) {
Timber.d("Animation repeats: $animation")
}
})
it.startAnimation(anim)
}
}
})
setDuration(DEFAULT_ANIMATION_DURATION).start()
}
} }
} }
...@@ -7,7 +7,7 @@ import chat.rocket.android.server.domain.GetAccountsInteractor ...@@ -7,7 +7,7 @@ import chat.rocket.android.server.domain.GetAccountsInteractor
import chat.rocket.android.server.domain.GetSettingsInteractor import chat.rocket.android.server.domain.GetSettingsInteractor
import chat.rocket.android.server.domain.RefreshSettingsInteractor import chat.rocket.android.server.domain.RefreshSettingsInteractor
import chat.rocket.android.server.domain.SaveConnectingServerInteractor import chat.rocket.android.server.domain.SaveConnectingServerInteractor
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.server.presentation.CheckServerPresenter import chat.rocket.android.server.presentation.CheckServerPresenter
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
......
...@@ -13,7 +13,7 @@ import chat.rocket.android.server.domain.TokenRepository ...@@ -13,7 +13,7 @@ import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.domain.favicon import chat.rocket.android.server.domain.favicon
import chat.rocket.android.server.domain.model.Account import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.server.domain.wideTile import chat.rocket.android.server.domain.wideTile
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.android.util.extensions.serverLogoUrl import chat.rocket.android.util.extensions.serverLogoUrl
......
...@@ -3,7 +3,7 @@ package chat.rocket.android.authentication.resetpassword.presentation ...@@ -3,7 +3,7 @@ package chat.rocket.android.authentication.resetpassword.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.server.domain.GetConnectingServerInteractor import chat.rocket.android.server.domain.GetConnectingServerInteractor
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.retryIO import chat.rocket.android.util.retryIO
import chat.rocket.common.RocketChatException import chat.rocket.common.RocketChatException
......
...@@ -8,7 +8,7 @@ import chat.rocket.android.server.domain.GetAccountsInteractor ...@@ -8,7 +8,7 @@ import chat.rocket.android.server.domain.GetAccountsInteractor
import chat.rocket.android.server.domain.GetSettingsInteractor import chat.rocket.android.server.domain.GetSettingsInteractor
import chat.rocket.android.server.domain.RefreshSettingsInteractor import chat.rocket.android.server.domain.RefreshSettingsInteractor
import chat.rocket.android.server.domain.SaveConnectingServerInteractor import chat.rocket.android.server.domain.SaveConnectingServerInteractor
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.server.presentation.CheckServerPresenter import chat.rocket.android.server.presentation.CheckServerPresenter
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.isValidUrl import chat.rocket.android.util.extensions.isValidUrl
......
...@@ -13,7 +13,7 @@ import chat.rocket.android.server.domain.SaveCurrentServerInteractor ...@@ -13,7 +13,7 @@ import chat.rocket.android.server.domain.SaveCurrentServerInteractor
import chat.rocket.android.server.domain.favicon import chat.rocket.android.server.domain.favicon
import chat.rocket.android.server.domain.model.Account import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.server.domain.wideTile import chat.rocket.android.server.domain.wideTile
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.android.util.extensions.privacyPolicyUrl import chat.rocket.android.util.extensions.privacyPolicyUrl
......
...@@ -14,7 +14,7 @@ import chat.rocket.android.server.domain.TokenRepository ...@@ -14,7 +14,7 @@ import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.domain.favicon import chat.rocket.android.server.domain.favicon
import chat.rocket.android.server.domain.model.Account import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.server.domain.wideTile import chat.rocket.android.server.domain.wideTile
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.android.util.extensions.isEmail import chat.rocket.android.util.extensions.isEmail
......
...@@ -4,7 +4,7 @@ import chat.rocket.android.chatdetails.domain.ChatDetails ...@@ -4,7 +4,7 @@ import chat.rocket.android.chatdetails.domain.ChatDetails
import chat.rocket.android.chatroom.presentation.ChatRoomNavigator import chat.rocket.android.chatroom.presentation.ChatRoomNavigator
import chat.rocket.android.core.lifecycle.CancelStrategy import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.server.domain.GetCurrentServerInteractor import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.retryIO import chat.rocket.android.util.retryIO
import chat.rocket.common.RocketChatException import chat.rocket.common.RocketChatException
......
...@@ -3,7 +3,7 @@ package chat.rocket.android.chatinformation.presentation ...@@ -3,7 +3,7 @@ package chat.rocket.android.chatinformation.presentation
import chat.rocket.android.chatroom.uimodel.UiModelMapper import chat.rocket.android.chatroom.uimodel.UiModelMapper
import chat.rocket.android.core.lifecycle.CancelStrategy import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.server.domain.GetCurrentServerInteractor import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.retryIO import chat.rocket.android.util.retryIO
import chat.rocket.common.RocketChatException import chat.rocket.common.RocketChatException
......
...@@ -33,8 +33,8 @@ import chat.rocket.android.server.domain.UsersRepository ...@@ -33,8 +33,8 @@ import chat.rocket.android.server.domain.UsersRepository
import chat.rocket.android.server.domain.uploadMaxFileSize import chat.rocket.android.server.domain.uploadMaxFileSize
import chat.rocket.android.server.domain.uploadMimeTypeFilter import chat.rocket.android.server.domain.uploadMimeTypeFilter
import chat.rocket.android.server.domain.useRealName import chat.rocket.android.server.domain.useRealName
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.server.infraestructure.state import chat.rocket.android.server.infrastructure.state
import chat.rocket.android.util.extension.getByteArray import chat.rocket.android.util.extension.getByteArray
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl import chat.rocket.android.util.extensions.avatarUrl
......
...@@ -4,9 +4,9 @@ import android.app.job.JobParameters ...@@ -4,9 +4,9 @@ import android.app.job.JobParameters
import android.app.job.JobService import android.app.job.JobService
import chat.rocket.android.db.DatabaseManagerFactory import chat.rocket.android.db.DatabaseManagerFactory
import chat.rocket.android.server.domain.GetAccountsInteractor import chat.rocket.android.server.domain.GetAccountsInteractor
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.server.infraestructure.DatabaseMessageMapper import chat.rocket.android.server.infrastructure.DatabaseMessageMapper
import chat.rocket.android.server.infraestructure.DatabaseMessagesRepository import chat.rocket.android.server.infrastructure.DatabaseMessagesRepository
import chat.rocket.core.internal.rest.sendMessage import chat.rocket.core.internal.rest.sendMessage
import chat.rocket.core.model.Message import chat.rocket.core.model.Message
import dagger.android.AndroidInjection import dagger.android.AndroidInjection
......
...@@ -10,7 +10,7 @@ import androidx.fragment.app.Fragment ...@@ -10,7 +10,7 @@ import androidx.fragment.app.Fragment
import chat.rocket.android.R import chat.rocket.android.R
import chat.rocket.android.chatroom.presentation.ChatRoomNavigator import chat.rocket.android.chatroom.presentation.ChatRoomNavigator
import chat.rocket.android.server.domain.GetCurrentServerInteractor import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.util.extensions.addFragment import chat.rocket.android.util.extensions.addFragment
import chat.rocket.android.util.extensions.textContent import chat.rocket.android.util.extensions.textContent
import dagger.android.AndroidInjection import dagger.android.AndroidInjection
......
...@@ -71,6 +71,7 @@ import chat.rocket.android.helper.AndroidPermissionsHelper.hasCameraPermission ...@@ -71,6 +71,7 @@ import chat.rocket.android.helper.AndroidPermissionsHelper.hasCameraPermission
import chat.rocket.android.helper.AndroidPermissionsHelper.hasWriteExternalStoragePermission import chat.rocket.android.helper.AndroidPermissionsHelper.hasWriteExternalStoragePermission
import chat.rocket.android.util.extension.asObservable import chat.rocket.android.util.extension.asObservable
import chat.rocket.android.util.extension.createImageFile import chat.rocket.android.util.extension.createImageFile
import chat.rocket.android.util.extension.orFalse
import chat.rocket.android.util.extensions.circularRevealOrUnreveal import chat.rocket.android.util.extensions.circularRevealOrUnreveal
import chat.rocket.android.util.extensions.clearLightStatusBar import chat.rocket.android.util.extensions.clearLightStatusBar
import chat.rocket.android.util.extensions.fadeIn import chat.rocket.android.util.extensions.fadeIn
...@@ -463,6 +464,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR ...@@ -463,6 +464,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
setupToolbar(roomUiModel.name.toString()) setupToolbar(roomUiModel.name.toString())
setupMessageComposer(roomUiModel) setupMessageComposer(roomUiModel)
isBroadcastChannel = roomUiModel.broadcast isBroadcastChannel = roomUiModel.broadcast
isFavorite = roomUiModel.favorite.orFalse()
if (isBroadcastChannel && !roomUiModel.canModerate) { if (isBroadcastChannel && !roomUiModel.canModerate) {
disableMenu = true disableMenu = true
activity?.invalidateOptionsMenu() activity?.invalidateOptionsMenu()
......
...@@ -30,7 +30,7 @@ import chat.rocket.android.server.domain.baseUrl ...@@ -30,7 +30,7 @@ import chat.rocket.android.server.domain.baseUrl
import chat.rocket.android.server.domain.messageReadReceiptEnabled import chat.rocket.android.server.domain.messageReadReceiptEnabled
import chat.rocket.android.server.domain.messageReadReceiptStoreUsers import chat.rocket.android.server.domain.messageReadReceiptStoreUsers
import chat.rocket.android.server.domain.useRealName import chat.rocket.android.server.domain.useRealName
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.util.extension.isImage import chat.rocket.android.util.extension.isImage
import chat.rocket.android.util.extensions.avatarUrl import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.android.util.extensions.ifNotNullNorEmpty import chat.rocket.android.util.extensions.ifNotNullNorEmpty
......
...@@ -15,9 +15,9 @@ import chat.rocket.android.server.domain.PermissionsInteractor ...@@ -15,9 +15,9 @@ import chat.rocket.android.server.domain.PermissionsInteractor
import chat.rocket.android.server.domain.PublicSettings import chat.rocket.android.server.domain.PublicSettings
import chat.rocket.android.server.domain.SettingsRepository import chat.rocket.android.server.domain.SettingsRepository
import chat.rocket.android.server.domain.TokenRepository import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.infraestructure.ConnectionManager import chat.rocket.android.server.infrastructure.ConnectionManager
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.core.RocketChatClient import chat.rocket.core.RocketChatClient
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
......
...@@ -13,7 +13,7 @@ import chat.rocket.android.server.domain.SettingsRepository ...@@ -13,7 +13,7 @@ import chat.rocket.android.server.domain.SettingsRepository
import chat.rocket.android.server.domain.SortingAndGroupingInteractor import chat.rocket.android.server.domain.SortingAndGroupingInteractor
import chat.rocket.android.server.domain.useRealName import chat.rocket.android.server.domain.useRealName
import chat.rocket.android.server.domain.useSpecialCharsOnRoom import chat.rocket.android.server.domain.useSpecialCharsOnRoom
import chat.rocket.android.server.infraestructure.ConnectionManager import chat.rocket.android.server.infrastructure.ConnectionManager
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.retryDB import chat.rocket.android.util.retryDB
import chat.rocket.android.util.retryIO import chat.rocket.android.util.retryIO
......
...@@ -9,7 +9,7 @@ import chat.rocket.android.chatrooms.adapter.LoadingItemHolder ...@@ -9,7 +9,7 @@ import chat.rocket.android.chatrooms.adapter.LoadingItemHolder
import chat.rocket.android.chatrooms.adapter.RoomUiModelMapper import chat.rocket.android.chatrooms.adapter.RoomUiModelMapper
import chat.rocket.android.chatrooms.domain.FetchChatRoomsInteractor import chat.rocket.android.chatrooms.domain.FetchChatRoomsInteractor
import chat.rocket.android.chatrooms.infrastructure.ChatRoomsRepository import chat.rocket.android.chatrooms.infrastructure.ChatRoomsRepository
import chat.rocket.android.server.infraestructure.ConnectionManager import chat.rocket.android.server.infrastructure.ConnectionManager
import chat.rocket.android.util.livedata.transform import chat.rocket.android.util.livedata.transform
import chat.rocket.android.util.livedata.wrap import chat.rocket.android.util.livedata.wrap
import chat.rocket.android.util.retryIO import chat.rocket.android.util.retryIO
......
...@@ -5,7 +5,7 @@ import androidx.lifecycle.ViewModelProvider ...@@ -5,7 +5,7 @@ import androidx.lifecycle.ViewModelProvider
import chat.rocket.android.chatrooms.adapter.RoomUiModelMapper import chat.rocket.android.chatrooms.adapter.RoomUiModelMapper
import chat.rocket.android.chatrooms.domain.FetchChatRoomsInteractor import chat.rocket.android.chatrooms.domain.FetchChatRoomsInteractor
import chat.rocket.android.chatrooms.infrastructure.ChatRoomsRepository import chat.rocket.android.chatrooms.infrastructure.ChatRoomsRepository
import chat.rocket.android.server.infraestructure.ConnectionManager import chat.rocket.android.server.infrastructure.ConnectionManager
import javax.inject.Inject import javax.inject.Inject
class ChatRoomsViewModelFactory @Inject constructor( class ChatRoomsViewModelFactory @Inject constructor(
......
package chat.rocket.android.core.behaviours
interface AppLanguageView {
/**
* Updates the app language
*
* @param language The app language to be updated.
* @param country Opcional. The country code to be updated.
*/
fun updateLanguage(language: String, country: String? = null)
}
\ No newline at end of file
...@@ -4,7 +4,7 @@ import chat.rocket.android.core.lifecycle.CancelStrategy ...@@ -4,7 +4,7 @@ import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.main.presentation.MainNavigator import chat.rocket.android.main.presentation.MainNavigator
import chat.rocket.android.members.uimodel.MemberUiModelMapper import chat.rocket.android.members.uimodel.MemberUiModelMapper
import chat.rocket.android.server.domain.GetCurrentServerInteractor import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.RocketChatException import chat.rocket.common.RocketChatException
import chat.rocket.common.model.RoomType import chat.rocket.common.model.RoomType
......
...@@ -14,9 +14,15 @@ import dagger.android.support.AndroidSupportInjectionModule ...@@ -14,9 +14,15 @@ import dagger.android.support.AndroidSupportInjectionModule
import javax.inject.Singleton import javax.inject.Singleton
@Singleton @Singleton
@Component(modules = [AndroidSupportInjectionModule::class, @Component(
AppModule::class, ActivityBuilder::class, ServiceBuilder::class, ReceiverBuilder::class, modules = [
AndroidWorkerInjectionModule::class]) AndroidSupportInjectionModule::class,
AppModule::class,
ActivityBuilder::class,
ServiceBuilder::class,
ReceiverBuilder::class,
AndroidWorkerInjectionModule::class]
)
interface AppComponent { interface AppComponent {
@Component.Builder @Component.Builder
......
...@@ -12,8 +12,8 @@ import chat.rocket.android.R ...@@ -12,8 +12,8 @@ import chat.rocket.android.R
import chat.rocket.android.analytics.AnalyticsManager import chat.rocket.android.analytics.AnalyticsManager
import chat.rocket.android.analytics.AnswersAnalytics import chat.rocket.android.analytics.AnswersAnalytics
import chat.rocket.android.analytics.GoogleAnalyticsForFirebase import chat.rocket.android.analytics.GoogleAnalyticsForFirebase
import chat.rocket.android.authentication.infraestructure.SharedPreferencesMultiServerTokenRepository import chat.rocket.android.authentication.infrastructure.SharedPreferencesMultiServerTokenRepository
import chat.rocket.android.authentication.infraestructure.SharedPreferencesTokenRepository import chat.rocket.android.authentication.infrastructure.SharedPreferencesTokenRepository
import chat.rocket.android.chatroom.service.MessageService import chat.rocket.android.chatroom.service.MessageService
import chat.rocket.android.dagger.qualifier.ForAuthentication import chat.rocket.android.dagger.qualifier.ForAuthentication
import chat.rocket.android.dagger.qualifier.ForMessages import chat.rocket.android.dagger.qualifier.ForMessages
...@@ -44,19 +44,21 @@ import chat.rocket.android.server.domain.SettingsRepository ...@@ -44,19 +44,21 @@ import chat.rocket.android.server.domain.SettingsRepository
import chat.rocket.android.server.domain.SortingAndGroupingRepository import chat.rocket.android.server.domain.SortingAndGroupingRepository
import chat.rocket.android.server.domain.TokenRepository import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.domain.UsersRepository import chat.rocket.android.server.domain.UsersRepository
import chat.rocket.android.server.infraestructure.DatabaseMessageMapper import chat.rocket.android.server.infrastructure.CurrentLanguageRepository
import chat.rocket.android.server.infraestructure.DatabaseMessagesRepository import chat.rocket.android.server.infrastructure.SharedPrefsCurrentLanguageRepository
import chat.rocket.android.server.infraestructure.JobSchedulerInteractorImpl import chat.rocket.android.server.infrastructure.DatabaseMessageMapper
import chat.rocket.android.server.infraestructure.MemoryChatRoomsRepository import chat.rocket.android.server.infrastructure.DatabaseMessagesRepository
import chat.rocket.android.server.infraestructure.MemoryUsersRepository import chat.rocket.android.server.infrastructure.JobSchedulerInteractorImpl
import chat.rocket.android.server.infraestructure.SharedPreferencesAccountsRepository import chat.rocket.android.server.infrastructure.MemoryChatRoomsRepository
import chat.rocket.android.server.infraestructure.SharedPreferencesPermissionsRepository import chat.rocket.android.server.infrastructure.MemoryUsersRepository
import chat.rocket.android.server.infraestructure.SharedPreferencesSettingsRepository import chat.rocket.android.server.infrastructure.SharedPreferencesAccountsRepository
import chat.rocket.android.server.infraestructure.SharedPrefsAnalyticsTrackingRepository import chat.rocket.android.server.infrastructure.SharedPreferencesPermissionsRepository
import chat.rocket.android.server.infraestructure.SharedPrefsBasicAuthRepository import chat.rocket.android.server.infrastructure.SharedPreferencesSettingsRepository
import chat.rocket.android.server.infraestructure.SharedPrefsConnectingServerRepository import chat.rocket.android.server.infrastructure.SharedPrefsAnalyticsTrackingRepository
import chat.rocket.android.server.infraestructure.SharedPrefsCurrentServerRepository import chat.rocket.android.server.infrastructure.SharedPrefsBasicAuthRepository
import chat.rocket.android.server.infraestructure.SharedPrefsSortingAndGroupingRepository import chat.rocket.android.server.infrastructure.SharedPrefsConnectingServerRepository
import chat.rocket.android.server.infrastructure.SharedPrefsCurrentServerRepository
import chat.rocket.android.server.infrastructure.SharedPrefsSortingAndGroupingRepository
import chat.rocket.android.util.AppJsonAdapterFactory import chat.rocket.android.util.AppJsonAdapterFactory
import chat.rocket.android.util.BasicAuthenticatorInterceptor import chat.rocket.android.util.BasicAuthenticatorInterceptor
import chat.rocket.android.util.HttpLoggingInterceptor import chat.rocket.android.util.HttpLoggingInterceptor
...@@ -175,7 +177,6 @@ class AppModule { ...@@ -175,7 +177,6 @@ class AppModule {
fun provideSharedPreferences(context: Application) = fun provideSharedPreferences(context: Application) =
context.getSharedPreferences("rocket.chat", Context.MODE_PRIVATE) context.getSharedPreferences("rocket.chat", Context.MODE_PRIVATE)
@Provides @Provides
@ForMessages @ForMessages
fun provideMessagesSharedPreferences(context: Application) = fun provideMessagesSharedPreferences(context: Application) =
...@@ -211,6 +212,12 @@ class AppModule { ...@@ -211,6 +212,12 @@ class AppModule {
return SharedPrefsConnectingServerRepository(prefs) return SharedPrefsConnectingServerRepository(prefs)
} }
@Provides
@Singleton
fun provideCurrentLanguageRepository(prefs: SharedPreferences): CurrentLanguageRepository {
return SharedPrefsCurrentLanguageRepository(prefs)
}
@Provides @Provides
@Singleton @Singleton
fun provideSettingsRepository(localRepository: LocalRepository): SettingsRepository { fun provideSettingsRepository(localRepository: LocalRepository): SettingsRepository {
......
...@@ -6,7 +6,7 @@ import chat.rocket.android.infrastructure.LocalRepository ...@@ -6,7 +6,7 @@ import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.infrastructure.SharedPreferencesLocalRepository import chat.rocket.android.infrastructure.SharedPreferencesLocalRepository
import chat.rocket.android.server.domain.CurrentServerRepository import chat.rocket.android.server.domain.CurrentServerRepository
import chat.rocket.android.server.domain.GetCurrentServerInteractor import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.SharedPrefsCurrentServerRepository import chat.rocket.android.server.infrastructure.SharedPrefsCurrentServerRepository
import chat.rocket.android.util.AppJsonAdapterFactory import chat.rocket.android.util.AppJsonAdapterFactory
import chat.rocket.android.util.TimberLogger import chat.rocket.android.util.TimberLogger
import chat.rocket.common.internal.FallbackSealedClassJsonAdapter import chat.rocket.common.internal.FallbackSealedClassJsonAdapter
......
...@@ -7,7 +7,7 @@ import chat.rocket.android.db.model.ChatRoomEntity ...@@ -7,7 +7,7 @@ import chat.rocket.android.db.model.ChatRoomEntity
import chat.rocket.android.directory.uimodel.DirectoryUiModelMapper import chat.rocket.android.directory.uimodel.DirectoryUiModelMapper
import chat.rocket.android.helper.UserHelper import chat.rocket.android.helper.UserHelper
import chat.rocket.android.main.presentation.MainNavigator import chat.rocket.android.main.presentation.MainNavigator
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.model.RoomType import chat.rocket.common.model.RoomType
import chat.rocket.common.model.roomTypeOf import chat.rocket.common.model.roomTypeOf
......
...@@ -3,7 +3,7 @@ package chat.rocket.android.favoritemessages.presentation ...@@ -3,7 +3,7 @@ package chat.rocket.android.favoritemessages.presentation
import chat.rocket.android.chatroom.uimodel.UiModelMapper import chat.rocket.android.chatroom.uimodel.UiModelMapper
import chat.rocket.android.core.lifecycle.CancelStrategy import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.db.DatabaseManager import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.RocketChatException import chat.rocket.common.RocketChatException
import chat.rocket.common.model.roomTypeOf import chat.rocket.common.model.roomTypeOf
......
...@@ -5,7 +5,7 @@ import chat.rocket.android.core.lifecycle.CancelStrategy ...@@ -5,7 +5,7 @@ import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.db.DatabaseManager import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.files.uimodel.FileUiModel import chat.rocket.android.files.uimodel.FileUiModel
import chat.rocket.android.files.uimodel.FileUiModelMapper import chat.rocket.android.files.uimodel.FileUiModelMapper
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.RocketChatException import chat.rocket.common.RocketChatException
import chat.rocket.common.model.roomTypeOf import chat.rocket.common.model.roomTypeOf
......
...@@ -3,7 +3,7 @@ package chat.rocket.android.helper ...@@ -3,7 +3,7 @@ package chat.rocket.android.helper
object JitsiHelper { object JitsiHelper {
/** /**
* Returns the for the Jitsi video conferencing URL. * Returns the Jitsi video conferencing URL.
* *
* @param isSecureProtocol True if using SSL, false otherwise - from the public settings. * @param isSecureProtocol True if using SSL, false otherwise - from the public settings.
* @param domain The Jitsi domain - from public settings. * @param domain The Jitsi domain - from public settings.
......
...@@ -94,10 +94,16 @@ class MessageParser @Inject constructor( ...@@ -94,10 +94,16 @@ class MessageParser @Inject constructor(
} }
private fun getMention(user: SimpleUser): String { private fun getMention(user: SimpleUser): String {
user.id?.let {
if (SYSTEM_MENTIONS.contains(it)) {
return "@$it"
}
}
return if (settings.useRealName()) { return if (settings.useRealName()) {
user.name ?: "@${user.username}" user.name ?: user.username.orEmpty()
} else { } else {
"@${user.username}" user.username.orEmpty()
} }
} }
...@@ -527,5 +533,7 @@ class MessageParser @Inject constructor( ...@@ -527,5 +533,7 @@ class MessageParser @Inject constructor(
*/ */
private val WEB_URL = Pattern.compile( private val WEB_URL = Pattern.compile(
"($WEB_URL_WITH_PROTOCOL|$WEB_URL_WITHOUT_PROTOCOL)") "($WEB_URL_WITH_PROTOCOL|$WEB_URL_WITHOUT_PROTOCOL)")
private val SYSTEM_MENTIONS = arrayOf("all", "here")
} }
} }
package chat.rocket.android.main.di package chat.rocket.android.main.di
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import chat.rocket.android.core.behaviours.AppLanguageView
import chat.rocket.android.core.lifecycle.CancelStrategy import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.dagger.scope.PerActivity import chat.rocket.android.dagger.scope.PerActivity
import chat.rocket.android.main.presentation.MainNavigator import chat.rocket.android.main.presentation.MainNavigator
...@@ -16,6 +17,12 @@ class MainModule { ...@@ -16,6 +17,12 @@ class MainModule {
@PerActivity @PerActivity
fun provideMainNavigator(activity: MainActivity) = MainNavigator(activity) fun provideMainNavigator(activity: MainActivity) = MainNavigator(activity)
@Provides
@PerActivity
fun appLanguageView(activity: MainActivity): AppLanguageView {
return activity
}
@Provides @Provides
@PerActivity @PerActivity
fun provideJob() = Job() fun provideJob() = Job()
......
package chat.rocket.android.main.presentation package chat.rocket.android.main.presentation
import chat.rocket.android.core.behaviours.AppLanguageView
import chat.rocket.android.push.GroupedPush import chat.rocket.android.push.GroupedPush
import chat.rocket.android.server.domain.GetCurrentLanguageInteractor
import chat.rocket.android.server.domain.RefreshPermissionsInteractor import chat.rocket.android.server.domain.RefreshPermissionsInteractor
import chat.rocket.android.server.domain.RefreshSettingsInteractor import chat.rocket.android.server.domain.RefreshSettingsInteractor
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Named import javax.inject.Named
class MainPresenter @Inject constructor( class MainPresenter @Inject constructor(
@Named("currentServer") private val currentServerUrl: String, @Named("currentServer") private val currentServerUrl: String,
private val mainNavigator: MainNavigator, private val mainNavigator: MainNavigator,
private val appLanguageView: AppLanguageView,
private val refreshSettingsInteractor: RefreshSettingsInteractor, private val refreshSettingsInteractor: RefreshSettingsInteractor,
private val refreshPermissionsInteractor: RefreshPermissionsInteractor, private val refreshPermissionsInteractor: RefreshPermissionsInteractor,
private val connectionManagerFactory: ConnectionManagerFactory, private val connectionManagerFactory: ConnectionManagerFactory,
private var getLanguageInteractor: GetCurrentLanguageInteractor,
private val groupedPush: GroupedPush private val groupedPush: GroupedPush
) { ) {
...@@ -31,4 +35,13 @@ class MainPresenter @Inject constructor( ...@@ -31,4 +35,13 @@ class MainPresenter @Inject constructor(
} }
fun showChatList(chatRoomId: String? = null) = mainNavigator.toChatList(chatRoomId) fun showChatList(chatRoomId: String? = null) = mainNavigator.toChatList(chatRoomId)
fun getAppLanguage() {
with(getLanguageInteractor) {
getLanguage()?.let { language ->
appLanguageView.updateLanguage(language, getCountry())
}
}
}
} }
\ No newline at end of file
...@@ -3,10 +3,14 @@ package chat.rocket.android.main.ui ...@@ -3,10 +3,14 @@ package chat.rocket.android.main.ui
import android.app.Activity import android.app.Activity
import android.app.NotificationManager import android.app.NotificationManager
import android.content.Context import android.content.Context
import android.content.res.Configuration
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.LocaleList
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import chat.rocket.android.R import chat.rocket.android.R
import chat.rocket.android.core.behaviours.AppLanguageView
import chat.rocket.android.main.presentation.MainPresenter import chat.rocket.android.main.presentation.MainPresenter
import chat.rocket.android.push.refreshPushToken import chat.rocket.android.push.refreshPushToken
import chat.rocket.android.server.ui.INTENT_CHAT_ROOM_ID import chat.rocket.android.server.ui.INTENT_CHAT_ROOM_ID
...@@ -15,10 +19,11 @@ import dagger.android.AndroidInjector ...@@ -15,10 +19,11 @@ import dagger.android.AndroidInjector
import dagger.android.DispatchingAndroidInjector import dagger.android.DispatchingAndroidInjector
import dagger.android.HasActivityInjector import dagger.android.HasActivityInjector
import dagger.android.support.HasSupportFragmentInjector import dagger.android.support.HasSupportFragmentInjector
import java.util.*
import javax.inject.Inject import javax.inject.Inject
class MainActivity : AppCompatActivity(), HasActivityInjector, class MainActivity : AppCompatActivity(), HasActivityInjector,
HasSupportFragmentInjector { HasSupportFragmentInjector, AppLanguageView {
@Inject @Inject
lateinit var activityDispatchingAndroidInjector: DispatchingAndroidInjector<Activity> lateinit var activityDispatchingAndroidInjector: DispatchingAndroidInjector<Activity>
@Inject @Inject
...@@ -30,11 +35,11 @@ class MainActivity : AppCompatActivity(), HasActivityInjector, ...@@ -30,11 +35,11 @@ class MainActivity : AppCompatActivity(), HasActivityInjector,
AndroidInjection.inject(this) AndroidInjection.inject(this)
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
refreshPushToken() refreshPushToken()
with(presenter) { with(presenter) {
connect() connect()
getAppLanguage()
intent.getStringExtra(INTENT_CHAT_ROOM_ID).let { intent.getStringExtra(INTENT_CHAT_ROOM_ID).let {
clearNotificationsForChatRoom(it) clearNotificationsForChatRoom(it)
showChatList(it) showChatList(it)
...@@ -53,6 +58,28 @@ class MainActivity : AppCompatActivity(), HasActivityInjector, ...@@ -53,6 +58,28 @@ class MainActivity : AppCompatActivity(), HasActivityInjector,
override fun supportFragmentInjector(): AndroidInjector<Fragment> = override fun supportFragmentInjector(): AndroidInjector<Fragment> =
fagmentDispatchingAndroidInjector fagmentDispatchingAndroidInjector
override fun updateLanguage(language: String, country: String?) {
val locale: Locale = if (country != null) {
Locale(language, country)
} else {
Locale(language)
}
Locale.setDefault(locale)
val config = Configuration()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
config.locales = LocaleList(locale)
} else {
config.locale = locale
}
// TODO We need to check out a better way to use createConfigurationContext
// instead of updateConfiguration here since it is deprecated.
resources.updateConfiguration(config, resources.displayMetrics)
}
private fun clearAppNotifications() = private fun clearAppNotifications() =
(getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager).cancelAll() (getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager).cancelAll()
} }
...@@ -6,7 +6,7 @@ import chat.rocket.android.db.DatabaseManager ...@@ -6,7 +6,7 @@ import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.helper.UserHelper import chat.rocket.android.helper.UserHelper
import chat.rocket.android.members.uimodel.MemberUiModel import chat.rocket.android.members.uimodel.MemberUiModel
import chat.rocket.android.members.uimodel.MemberUiModelMapper import chat.rocket.android.members.uimodel.MemberUiModelMapper
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.RocketChatException import chat.rocket.common.RocketChatException
import chat.rocket.common.model.roomTypeOf import chat.rocket.common.model.roomTypeOf
......
...@@ -2,7 +2,7 @@ package chat.rocket.android.mentions.presentention ...@@ -2,7 +2,7 @@ package chat.rocket.android.mentions.presentention
import chat.rocket.android.chatroom.uimodel.UiModelMapper import chat.rocket.android.chatroom.uimodel.UiModelMapper
import chat.rocket.android.core.lifecycle.CancelStrategy import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.RocketChatException import chat.rocket.common.RocketChatException
import chat.rocket.common.util.ifNull import chat.rocket.common.util.ifNull
......
...@@ -3,7 +3,7 @@ package chat.rocket.android.pinnedmessages.presentation ...@@ -3,7 +3,7 @@ package chat.rocket.android.pinnedmessages.presentation
import chat.rocket.android.chatroom.uimodel.UiModelMapper import chat.rocket.android.chatroom.uimodel.UiModelMapper
import chat.rocket.android.core.lifecycle.CancelStrategy import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.db.DatabaseManager import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.RocketChatException import chat.rocket.common.RocketChatException
import chat.rocket.common.model.roomTypeOf import chat.rocket.common.model.roomTypeOf
......
...@@ -11,8 +11,8 @@ import chat.rocket.android.main.presentation.MainNavigator ...@@ -11,8 +11,8 @@ import chat.rocket.android.main.presentation.MainNavigator
import chat.rocket.android.server.domain.GetCurrentServerInteractor import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.domain.RemoveAccountInteractor import chat.rocket.android.server.domain.RemoveAccountInteractor
import chat.rocket.android.server.domain.TokenRepository import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.server.presentation.CheckServerPresenter import chat.rocket.android.server.presentation.CheckServerPresenter
import chat.rocket.android.util.extension.compressImageAndGetByteArray import chat.rocket.android.util.extension.compressImageAndGetByteArray
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
......
...@@ -7,7 +7,7 @@ import android.content.Intent ...@@ -7,7 +7,7 @@ import android.content.Intent
import androidx.core.app.RemoteInput import androidx.core.app.RemoteInput
import android.widget.Toast import android.widget.Toast
import chat.rocket.android.R import chat.rocket.android.R
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.common.RocketChatException import chat.rocket.common.RocketChatException
import chat.rocket.core.internal.rest.sendMessage import chat.rocket.core.internal.rest.sendMessage
import dagger.android.AndroidInjection import dagger.android.AndroidInjection
......
package chat.rocket.android.server.domain
import chat.rocket.android.server.infrastructure.CurrentLanguageRepository
import javax.inject.Inject
class GetCurrentLanguageInteractor @Inject constructor(
private val repository: CurrentLanguageRepository
) {
fun getLanguage(): String? = repository.getLanguage()
fun getCountry(): String? = repository.getCountry()
}
\ No newline at end of file
package chat.rocket.android.server.domain package chat.rocket.android.server.domain
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.retryIO import chat.rocket.android.util.retryIO
import chat.rocket.core.internal.rest.permissions import chat.rocket.core.internal.rest.permissions
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
......
package chat.rocket.android.server.domain package chat.rocket.android.server.domain
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.retryIO import chat.rocket.android.util.retryIO
import chat.rocket.core.internal.rest.settings import chat.rocket.core.internal.rest.settings
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
......
package chat.rocket.android.server.domain
import chat.rocket.android.server.infrastructure.CurrentLanguageRepository
import javax.inject.Inject
class SaveCurrentLanguageInteractor @Inject constructor(
private val repository: CurrentLanguageRepository
) {
fun save(language: String, country: String?) = repository.save(language, country)
}
\ No newline at end of file
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import chat.rocket.android.db.DatabaseManager import chat.rocket.android.db.DatabaseManager
......
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import chat.rocket.android.db.DatabaseManagerFactory import chat.rocket.android.db.DatabaseManagerFactory
import timber.log.Timber import timber.log.Timber
......
package chat.rocket.android.server.infrastructure
interface CurrentLanguageRepository {
fun save(language: String, country: String? = null)
fun getLanguage(): String?
fun getCountry(): String?
}
\ No newline at end of file
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import chat.rocket.android.db.DatabaseManager import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.db.model.* import chat.rocket.android.db.model.*
......
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import chat.rocket.android.db.DatabaseManager import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.db.Operation import chat.rocket.android.db.Operation
......
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import android.app.job.JobInfo import android.app.job.JobInfo
import android.app.job.JobScheduler import android.app.job.JobScheduler
......
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import chat.rocket.android.server.domain.ChatRoomsRepository import chat.rocket.android.server.domain.ChatRoomsRepository
import chat.rocket.core.model.ChatRoom import chat.rocket.core.model.ChatRoom
......
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import chat.rocket.android.server.domain.UsersRepository import chat.rocket.android.server.domain.UsersRepository
import chat.rocket.android.server.domain.UsersRepository.Query import chat.rocket.android.server.domain.UsersRepository.Query
......
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import android.os.Build import android.os.Build
import chat.rocket.android.BuildConfig import chat.rocket.android.BuildConfig
......
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import android.content.SharedPreferences import android.content.SharedPreferences
import androidx.core.content.edit import androidx.core.content.edit
......
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import chat.rocket.android.infrastructure.LocalRepository import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.server.domain.PermissionsRepository import chat.rocket.android.server.domain.PermissionsRepository
......
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import chat.rocket.android.infrastructure.LocalRepository import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.infrastructure.LocalRepository.Companion.SETTINGS_KEY import chat.rocket.android.infrastructure.LocalRepository.Companion.SETTINGS_KEY
......
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import android.content.SharedPreferences import android.content.SharedPreferences
import chat.rocket.android.server.domain.AnalyticsTrackingRepository import chat.rocket.android.server.domain.AnalyticsTrackingRepository
......
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import android.content.SharedPreferences import android.content.SharedPreferences
import androidx.core.content.edit import androidx.core.content.edit
......
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import android.content.SharedPreferences import android.content.SharedPreferences
import chat.rocket.android.server.domain.CurrentServerRepository import chat.rocket.android.server.domain.CurrentServerRepository
......
package chat.rocket.android.server.infrastructure
import android.content.SharedPreferences
private const val CURRENT_LANGUAGE = "current_language"
private const val CURRENT_LANGUAGE_COUNTRY = "current_language_country"
class SharedPrefsCurrentLanguageRepository(private val preferences: SharedPreferences) :
CurrentLanguageRepository {
override fun save(language: String, country: String?) {
with(preferences) {
edit().putString(CURRENT_LANGUAGE, language).apply()
edit().putString(CURRENT_LANGUAGE_COUNTRY, country).apply()
}
}
override fun getLanguage(): String? {
return preferences.getString(CURRENT_LANGUAGE, "")
}
override fun getCountry(): String? {
return preferences.getString(CURRENT_LANGUAGE_COUNTRY, "")
}
}
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import android.content.SharedPreferences import android.content.SharedPreferences
import chat.rocket.android.server.domain.CurrentServerRepository import chat.rocket.android.server.domain.CurrentServerRepository
......
package chat.rocket.android.server.infraestructure package chat.rocket.android.server.infrastructure
import android.content.SharedPreferences import android.content.SharedPreferences
import chat.rocket.android.server.domain.SortingAndGroupingRepository import chat.rocket.android.server.domain.SortingAndGroupingRepository
......
...@@ -9,7 +9,7 @@ import chat.rocket.android.server.domain.GetCurrentServerInteractor ...@@ -9,7 +9,7 @@ import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.domain.SaveCurrentServerInteractor import chat.rocket.android.server.domain.SaveCurrentServerInteractor
import chat.rocket.android.server.domain.SettingsRepository import chat.rocket.android.server.domain.SettingsRepository
import chat.rocket.android.server.domain.TokenRepository import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.util.ifNull import chat.rocket.common.util.ifNull
import javax.inject.Inject import javax.inject.Inject
......
...@@ -26,9 +26,9 @@ import chat.rocket.android.server.domain.GetCurrentServerInteractor ...@@ -26,9 +26,9 @@ import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.domain.RemoveAccountInteractor import chat.rocket.android.server.domain.RemoveAccountInteractor
import chat.rocket.android.server.domain.TokenRepository import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.domain.RefreshSettingsInteractor import chat.rocket.android.server.domain.RefreshSettingsInteractor
import chat.rocket.android.server.infraestructure.ConnectionManager import chat.rocket.android.server.infrastructure.ConnectionManager
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.VersionInfo import chat.rocket.android.util.VersionInfo
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.casUrl import chat.rocket.android.util.extensions.casUrl
......
...@@ -4,7 +4,7 @@ import chat.rocket.android.analytics.AnalyticsManager ...@@ -4,7 +4,7 @@ import chat.rocket.android.analytics.AnalyticsManager
import chat.rocket.android.core.lifecycle.CancelStrategy import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.helper.UserHelper import chat.rocket.android.helper.UserHelper
import chat.rocket.android.server.domain.GetCurrentServerInteractor import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.retryIO import chat.rocket.android.util.retryIO
import chat.rocket.common.RocketChatException import chat.rocket.common.RocketChatException
......
...@@ -5,12 +5,14 @@ import chat.rocket.android.db.DatabaseManagerFactory ...@@ -5,12 +5,14 @@ import chat.rocket.android.db.DatabaseManagerFactory
import chat.rocket.android.helper.UserHelper import chat.rocket.android.helper.UserHelper
import chat.rocket.android.main.presentation.MainNavigator import chat.rocket.android.main.presentation.MainNavigator
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.server.domain.GetCurrentLanguageInteractor
import chat.rocket.android.server.domain.GetCurrentServerInteractor import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.domain.PermissionsInteractor import chat.rocket.android.server.domain.PermissionsInteractor
import chat.rocket.android.server.domain.RemoveAccountInteractor import chat.rocket.android.server.domain.RemoveAccountInteractor
import chat.rocket.android.server.domain.SaveCurrentLanguageInteractor
import chat.rocket.android.server.domain.TokenRepository import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.server.presentation.CheckServerPresenter import chat.rocket.android.server.presentation.CheckServerPresenter
import chat.rocket.android.util.extension.gethash import chat.rocket.android.util.extension.gethash
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
...@@ -41,7 +43,8 @@ class SettingsPresenter @Inject constructor( ...@@ -41,7 +43,8 @@ class SettingsPresenter @Inject constructor(
getCurrentServerInteractor: GetCurrentServerInteractor, getCurrentServerInteractor: GetCurrentServerInteractor,
removeAccountInteractor: RemoveAccountInteractor, removeAccountInteractor: RemoveAccountInteractor,
databaseManagerFactory: DatabaseManagerFactory, databaseManagerFactory: DatabaseManagerFactory,
connectionManagerFactory: ConnectionManagerFactory connectionManagerFactory: ConnectionManagerFactory,
private val saveLanguageInteractor: SaveCurrentLanguageInteractor
) : CheckServerPresenter( ) : CheckServerPresenter(
strategy = strategy, strategy = strategy,
factory = rocketChatClientFactory, factory = rocketChatClientFactory,
...@@ -123,6 +126,10 @@ class SettingsPresenter @Inject constructor( ...@@ -123,6 +126,10 @@ class SettingsPresenter @Inject constructor(
} }
} }
fun saveLocale(language: String, country: String? = null) {
saveLanguageInteractor.save(language, country)
}
fun toProfile() = navigator.toProfile() fun toProfile() = navigator.toProfile()
fun toAdmin() = tokenRepository.get(currentServer)?.let { fun toAdmin() = tokenRepository.get(currentServer)?.let {
......
...@@ -17,6 +17,7 @@ import chat.rocket.android.BuildConfig ...@@ -17,6 +17,7 @@ import chat.rocket.android.BuildConfig
import chat.rocket.android.R import chat.rocket.android.R
import chat.rocket.android.analytics.AnalyticsManager import chat.rocket.android.analytics.AnalyticsManager
import chat.rocket.android.analytics.event.ScreenViewEvent import chat.rocket.android.analytics.event.ScreenViewEvent
import chat.rocket.android.core.behaviours.AppLanguageView
import chat.rocket.android.helper.TextHelper.getDeviceAndAppInformation import chat.rocket.android.helper.TextHelper.getDeviceAndAppInformation
import chat.rocket.android.settings.presentation.SettingsPresenter import chat.rocket.android.settings.presentation.SettingsPresenter
import chat.rocket.android.settings.presentation.SettingsView import chat.rocket.android.settings.presentation.SettingsView
...@@ -33,7 +34,7 @@ internal const val TAG_SETTINGS_FRAGMENT = "SettingsFragment" ...@@ -33,7 +34,7 @@ internal const val TAG_SETTINGS_FRAGMENT = "SettingsFragment"
fun newInstance(): Fragment = SettingsFragment() fun newInstance(): Fragment = SettingsFragment()
class SettingsFragment : Fragment(), SettingsView { class SettingsFragment : Fragment(), SettingsView, AppLanguageView {
@Inject lateinit var analyticsManager: AnalyticsManager @Inject lateinit var analyticsManager: AnalyticsManager
@Inject lateinit var presenter: SettingsPresenter @Inject lateinit var presenter: SettingsPresenter
...@@ -74,7 +75,7 @@ class SettingsFragment : Fragment(), SettingsView { ...@@ -74,7 +75,7 @@ class SettingsFragment : Fragment(), SettingsView {
text_contact_us.setOnClickListener { contactSupport() } text_contact_us.setOnClickListener { contactSupport() }
text_language.setOnClickListener {} text_language.setOnClickListener { changeLanguage() }
text_review_this_app.setOnClickListener { showAppOnStore() } text_review_this_app.setOnClickListener { showAppOnStore() }
...@@ -109,6 +110,11 @@ class SettingsFragment : Fragment(), SettingsView { ...@@ -109,6 +110,11 @@ class SettingsFragment : Fragment(), SettingsView {
} }
} }
override fun updateLanguage(language: String, country: String?) {
presenter.saveLocale(language, country)
activity?.recreate()
}
override fun invalidateToken(token: String) = invalidateFirebaseToken(token) override fun invalidateToken(token: String) = invalidateFirebaseToken(token)
override fun showLoading() { override fun showLoading() {
...@@ -155,6 +161,38 @@ class SettingsFragment : Fragment(), SettingsView { ...@@ -155,6 +161,38 @@ class SettingsFragment : Fragment(), SettingsView {
} }
} }
private fun changeLanguage() {
context?.let {
AlertDialog.Builder(it)
.setTitle(R.string.title_choose_language)
.setSingleChoiceItems(
resources.getStringArray(R.array.languages), -1
) { dialog, option ->
when (option) {
0 -> updateLanguage("en")
1 -> updateLanguage("ar")
2 -> updateLanguage("de")
3 -> updateLanguage("es")
4 -> updateLanguage("fa")
5 -> updateLanguage("fr")
6 -> updateLanguage("hi", "IN")
7 -> updateLanguage("it")
8 -> updateLanguage("ja")
9 -> updateLanguage("pt", "BR")
10 -> updateLanguage("pt", "PT")
11 -> updateLanguage("ru", "RU")
12 -> updateLanguage("tr")
13 -> updateLanguage("uk")
14 -> updateLanguage("zh", "CN")
15 -> updateLanguage("zh", "TW")
}
dialog.dismiss()
}
.create()
.show()
}
}
private fun showAppOnStore() { private fun showAppOnStore() {
try { try {
startActivity(Intent(Intent.ACTION_VIEW, getString(R.string.market_link).toUri())) startActivity(Intent(Intent.ACTION_VIEW, getString(R.string.market_link).toUri()))
......
...@@ -9,7 +9,7 @@ import chat.rocket.android.db.model.UserEntity ...@@ -9,7 +9,7 @@ import chat.rocket.android.db.model.UserEntity
import chat.rocket.android.server.domain.CurrentServerRepository import chat.rocket.android.server.domain.CurrentServerRepository
import chat.rocket.android.server.domain.GetSettingsInteractor import chat.rocket.android.server.domain.GetSettingsInteractor
import chat.rocket.android.server.domain.isJitsiEnabled import chat.rocket.android.server.domain.isJitsiEnabled
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.android.util.retryIO import chat.rocket.android.util.retryIO
......
...@@ -2,7 +2,7 @@ package chat.rocket.android.util.extensions ...@@ -2,7 +2,7 @@ package chat.rocket.android.util.extensions
import chat.rocket.android.db.model.MessageEntity import chat.rocket.android.db.model.MessageEntity
import chat.rocket.android.server.domain.model.Account import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.retryIO import chat.rocket.android.util.retryIO
import chat.rocket.core.internal.rest.registerPushToken import chat.rocket.core.internal.rest.registerPushToken
import chat.rocket.core.model.Message import chat.rocket.core.model.Message
......
...@@ -6,7 +6,7 @@ import chat.rocket.android.core.lifecycle.CancelStrategy ...@@ -6,7 +6,7 @@ import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.helper.JitsiHelper import chat.rocket.android.helper.JitsiHelper
import chat.rocket.android.helper.UserHelper import chat.rocket.android.helper.UserHelper
import chat.rocket.android.server.domain.* import chat.rocket.android.server.domain.*
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.model.RoomType import chat.rocket.common.model.RoomType
import chat.rocket.common.model.roomTypeOf import chat.rocket.common.model.roomTypeOf
......
...@@ -13,14 +13,15 @@ ...@@ -13,14 +13,15 @@
<ScrollView <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="0dp"
android:layout_below="@+id/layout_app_bar" android:layout_below="@+id/layout_app_bar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/layout_app_bar"> app:layout_constraintTop_toBottomOf="@+id/layout_app_bar">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="20dp"> android:paddingTop="20dp">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/profile_container" android:id="@+id/profile_container"
......
...@@ -95,7 +95,7 @@ ...@@ -95,7 +95,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/screen_edge_left_and_right_margins" android:layout_marginStart="@dimen/screen_edge_left_and_right_margins"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
android:text="@string/status" android:text="@string/user_detail_status"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_message" /> app:layout_constraintTop_toBottomOf="@+id/text_message" />
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
<string name="title_password">تغيير كلمة السر</string> <string name="title_password">تغيير كلمة السر</string>
<string name="title_update_profile">تحديث الملف الشخصي</string> <string name="title_update_profile">تحديث الملف الشخصي</string>
<string name="title_create_channel">إنشاء قناة</string> <string name="title_create_channel">إنشاء قناة</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_license">الترخيص</string> <string name="title_license">الترخيص</string>
<string name="title_are_you_sure">هل أنت متأكد؟</string> <string name="title_are_you_sure">هل أنت متأكد؟</string>
<string name="title_channel_details">تفاصيل القناة</string> <string name="title_channel_details">تفاصيل القناة</string>
...@@ -74,6 +75,25 @@ ...@@ -74,6 +75,25 @@
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate --> <string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate --> <string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<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>
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
<string name="title_authentication">Login Daten prüfen</string> <string name="title_authentication">Login Daten prüfen</string>
<string name="title_legal_terms">Legal Terms</string> <string name="title_legal_terms">Legal Terms</string>
<string name="title_chats">Chats</string> <string name="title_chats">Chats</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_profile">Profil</string> <string name="title_profile">Profil</string>
<string name="title_members">Benutzer</string> <string name="title_members">Benutzer</string>
<string name="title_counted_members">Benutzer (%d)</string> <string name="title_counted_members">Benutzer (%d)</string>
...@@ -32,7 +33,7 @@ ...@@ -32,7 +33,7 @@
<string name="action_use_this_username">Benutze den Benutzernamen</string> <string name="action_use_this_username">Benutze den Benutzernamen</string>
<string name="action_terms_of_service">Nutzungsbedingungen</string> <string name="action_terms_of_service">Nutzungsbedingungen</string>
<string name="action_privacy_policy">Datenschutz</string> <string name="action_privacy_policy">Datenschutz</string>
<string name="action_new_channel">New channel</string> <!-- TODO Translate --> <string name="action_new_channel">Neuer Kanal</string>
<string name="action_search">Suche</string> <string name="action_search">Suche</string>
<string name="action_update">Updaten</string> <string name="action_update">Updaten</string>
<string name="action_settings">Einstellungen</string> <string name="action_settings">Einstellungen</string>
...@@ -60,18 +61,37 @@ ...@@ -60,18 +61,37 @@
<string name="action_remove_favorite">Favoriten entfernen</string> <string name="action_remove_favorite">Favoriten entfernen</string>
<!-- Settings messages --> <!-- Settings messages -->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate --> <string name="msg_contact_us">Kontaktiere uns</string>
<string name="msg_language">Language</string> <!-- TODO Translate --> <string name="msg_language">Sprache</string>
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate --> <string name="msg_review_this_app">Bewerte diese App</string>
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate --> <string name="msg_share_this_app">Teile diese App</string>
<string name="msg_administration">Administration</string> <!-- TODO Translate --> <string name="msg_administration">Administration</string>
<string name="msg_license">License</string> <!-- TODO Translate --> <string name="msg_license">Lizenz</string>
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate --> <string name="msg_app_version">Version: %1$s (%2$d)</string>
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate --> <string name="msg_server_version">Serverversion: %1$s</string>
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate --> <string name="msg_send_analytics">Analysesaten senden</string>
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate --> <string name="msg_logout_from_rocket_chat">Logout von Rocket.Chat</string>
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate --> <string name="msg_delete_account">Konto löschen</string>
<string name="msg_change_status">Change status</string> <!-- TODO Translate --> <string name="msg_change_status">Status ändern</string>
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<string name="msg_generic_error">Entschuldigung, ein Fehler ist aufgetreten, bitte versuchen Sie es noch einmal.</string> <string name="msg_generic_error">Entschuldigung, ein Fehler ist aufgetreten, bitte versuchen Sie es noch einmal.</string>
...@@ -172,11 +192,11 @@ ...@@ -172,11 +192,11 @@
<item quantity="other">%1$s reagierte mit %2$s</item> <item quantity="other">%1$s reagierte mit %2$s</item>
</plurals> </plurals>
<string name="msg_credentials_saved_successfully">Login-Daten erfolgreich gespeichert</string> <string name="msg_credentials_saved_successfully">Login-Daten erfolgreich gespeichert</string>
<string name="msg_camera_permission_denied">Camera permission is needed to open camera.</string> <!-- TODO Add translation --> <string name="msg_camera_permission_denied">Zum Öffnen der Kamera ist eine Kamera-Berechtigung erforderlich.</string>
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation --> <string name="msg_storage_permission_denied">Zum Öffnen der Zeichnung ist eine Speicher-Berechtigung erforderlich.</string>
<string name="msg_server">Server</string> <!-- TODO Translate --> <string name="msg_server">Server</string>
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate --> <string name="msg_add_new_server">Neuen Server hinzufügen</string>
<string name="msg_directory">Directory</string> <!-- TODO Translate --> <string name="msg_directory">Verzeichnis</string>
<!-- Create channel messages --> <!-- Create channel messages -->
<string name="msg_private_channel">Privat</string> <string name="msg_private_channel">Privat</string>
...@@ -314,20 +334,20 @@ ...@@ -314,20 +334,20 @@
<string name="alert_title_default_skin_tone">Standard Hautton</string> <string name="alert_title_default_skin_tone">Standard Hautton</string>
<!-- Sort and group --> <!-- Sort and group -->
<string name="msg_sort_by_placeholder">Sort by %1$s</string> <!-- TODO Translate --> <string name="msg_sort_by_placeholder">Sortiere nach %1$s</string>
<string name="msg_sort_by">Sort by</string> <!-- TODO Translate --> <string name="msg_sort_by">Sortiert nach</string>
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate --> <string name="msg_sort_by_activity">Aktivität</string>
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate --> <string name="msg_sort_by_name">Name</string>
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate --> <string name="msg_group_by_unread_on_top">Ungelesen oben</string>
<string name="msg_group_by_type">Group by type</string> <!-- TODO Translate --> <string name="msg_group_by_type">Gruppieren nach Typ</string>
<string name="msg_group_by_favorites">Group by favorites</string> <!-- TODO Translate --> <string name="msg_group_by_favorites">Gruppieren nach Favoriten</string>
<!--ChatRooms Headers--> <!--ChatRooms Headers-->
<string name="header_favorite">Favoriten</string> <string name="header_favorite">Favoriten</string>
<string name="msg_channels">Räume</string> <string name="msg_channels">Räume</string>
<string name="msg_users">Users</string> <!-- TODO Translate --> <string name="msg_users">Benutzer</string>
<string name="msg_search_for_global_users">Search for global users</string> <!-- TODO Translate --> <string name="msg_search_for_global_users">Suche nach globalen Benutzern</string>
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string> <!-- TODO Translate --> <string name="msg_search_for_global_users_description">Wenn Sie dies einschalten, können Sie nach Benutzern von anderen Unternehmen oder Servern suchen.</string>
<string name="header_private_groups">Private Räume</string> <string name="header_private_groups">Private Räume</string>
<string name="header_direct_messages">Direkt Nachrichten</string> <string name="header_direct_messages">Direkt Nachrichten</string>
<string name="header_live_chats">Live Chats</string> <string name="header_live_chats">Live Chats</string>
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
<string name="title_admin_panel">Admin panel</string> <!-- TODO Add translation --> <string name="title_admin_panel">Admin panel</string> <!-- TODO Add translation -->
<string name="title_password">Cambia la contraseña</string> <string name="title_password">Cambia la contraseña</string>
<string name="title_update_profile">Actualización del perfil</string> <string name="title_update_profile">Actualización del perfil</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_create_channel">Crear canal</string> <string name="title_create_channel">Crear canal</string>
<string name="title_license">License</string> <!-- TODO Add translation --> <string name="title_license">License</string> <!-- TODO Add translation -->
<string name="title_are_you_sure">Are you sure?</string> <!-- TODO Add translation --> <string name="title_are_you_sure">Are you sure?</string> <!-- TODO Add translation -->
...@@ -73,6 +74,25 @@ ...@@ -73,6 +74,25 @@
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate --> <string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate --> <string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<string name="msg_generic_error">Lo sentimos, ha ocurrido un error, por favor intente de nuevo</string> <string name="msg_generic_error">Lo sentimos, ha ocurrido un error, por favor intente de nuevo</string>
<string name="msg_no_data_to_display">No hay información para mostrar</string> <string name="msg_no_data_to_display">No hay información para mostrar</string>
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
<string name="title_rate_us">به ما امتیاز دهید</string> <string name="title_rate_us">به ما امتیاز دهید</string>
<string name="title_admin_panel">Admin panel</string> <!-- TODO Add translation --> <string name="title_admin_panel">Admin panel</string> <!-- TODO Add translation -->
<string name="title_password">تغییر گذرواژه</string> <string name="title_password">تغییر گذرواژه</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_update_profile">به روزرسانی نمایه</string> <string name="title_update_profile">به روزرسانی نمایه</string>
<string name="title_create_channel">ایجاد کانال</string> <string name="title_create_channel">ایجاد کانال</string>
<string name="title_license">مجوز</string> <string name="title_license">مجوز</string>
...@@ -73,6 +74,25 @@ ...@@ -73,6 +74,25 @@
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate --> <string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate --> <string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<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>
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
<string name="title_counted_members">Membres (%d)</string> <string name="title_counted_members">Membres (%d)</string>
<string name="title_settings">Paramètres</string> <string name="title_settings">Paramètres</string>
<string name="title_preferences">Préférences</string> <string name="title_preferences">Préférences</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_change_password">Changer le mot de passe</string> <string name="title_change_password">Changer le mot de passe</string>
<string name="title_rate_us">évaluez nous</string> <string name="title_rate_us">évaluez nous</string>
<string name="title_admin_panel">l\' administration</string> <string name="title_admin_panel">l\' administration</string>
...@@ -73,6 +74,25 @@ ...@@ -73,6 +74,25 @@
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate --> <string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate --> <string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<string name="msg_generic_error">Désolé, une erreur s\'est produite. Veuillez réessayer</string> <string name="msg_generic_error">Désolé, une erreur s\'est produite. Veuillez réessayer</string>
<string name="msg_no_data_to_display">Aucune donnée à afficher</string> <string name="msg_no_data_to_display">Aucune donnée à afficher</string>
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
<string name="title_admin_panel">एडमिन पैनल</string> <string name="title_admin_panel">एडमिन पैनल</string>
<string name="title_password">पासवर्ड बदलें</string> <string name="title_password">पासवर्ड बदलें</string>
<string name="title_update_profile">प्रोफ़ाइल अपडेट करें</string> <string name="title_update_profile">प्रोफ़ाइल अपडेट करें</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_create_channel">चैनल बनाएं</string> <string name="title_create_channel">चैनल बनाएं</string>
<string name="title_license">लाइसेंस</string> <string name="title_license">लाइसेंस</string>
<string name="title_are_you_sure">क्या आपको यकीन है?</string> <string name="title_are_you_sure">क्या आपको यकीन है?</string>
...@@ -73,6 +74,25 @@ ...@@ -73,6 +74,25 @@
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate --> <string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate --> <string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<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>
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
<string name="title_password">Password</string> <string name="title_password">Password</string>
<string name="title_update_profile">Aggiorna Profilo</string> <string name="title_update_profile">Aggiorna Profilo</string>
<string name="title_create_channel">Crea Canale</string> <string name="title_create_channel">Crea Canale</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_license">licenza</string> <string name="title_license">licenza</string>
<string name="title_are_you_sure">Sei sicuro che vuoi uscire?</string> <string name="title_are_you_sure">Sei sicuro che vuoi uscire?</string>
<string name="title_channel_details">Allegare un file</string> <string name="title_channel_details">Allegare un file</string>
...@@ -73,6 +74,25 @@ ...@@ -73,6 +74,25 @@
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate --> <string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate --> <string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<string name="msg_generic_error">Mi dispiace, si è verificato un errore, per favore riprova</string> <string name="msg_generic_error">Mi dispiace, si è verificato un errore, per favore riprova</string>
<string name="msg_no_data_to_display">Nessun dato da visualizzare</string> <string name="msg_no_data_to_display">Nessun dato da visualizzare</string>
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
<string name="title_admin_panel">管理パネル</string> <string name="title_admin_panel">管理パネル</string>
<string name="title_password">パスワードの変更</string> <string name="title_password">パスワードの変更</string>
<string name="title_update_profile">プロフィールの更新</string> <string name="title_update_profile">プロフィールの更新</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_license">License</string> <!-- TODO Add translation --> <string name="title_license">License</string> <!-- TODO Add translation -->
<string name="title_create_channel">新しいチャネルを作成</string> <string name="title_create_channel">新しいチャネルを作成</string>
<string name="title_are_you_sure">本気ですか?</string> <string name="title_are_you_sure">本気ですか?</string>
...@@ -73,6 +74,25 @@ ...@@ -73,6 +74,25 @@
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate --> <string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate --> <string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<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>
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
<string name="title_preferences">Preferencias</string> <string name="title_preferences">Preferencias</string>
<string name="title_change_password">Alterar senha</string> <string name="title_change_password">Alterar senha</string>
<string name="title_rate_us">nos avalie</string> <string name="title_rate_us">nos avalie</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_admin_panel">Painel administrativo</string> <string name="title_admin_panel">Painel administrativo</string>
<string name="title_password">Alterar senha</string> <string name="title_password">Alterar senha</string>
<string name="title_update_profile">Editar perfil</string> <string name="title_update_profile">Editar perfil</string>
...@@ -73,6 +74,25 @@ ...@@ -73,6 +74,25 @@
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate --> <string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate --> <string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<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>
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
<string name="title_preferences">Preferências</string> <string name="title_preferences">Preferências</string>
<string name="title_change_password">Alterar palavra-passe</string> <string name="title_change_password">Alterar palavra-passe</string>
<string name="title_rate_us">Avalie-nos</string> <string name="title_rate_us">Avalie-nos</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_admin_panel">Painel de Administração</string> <string name="title_admin_panel">Painel de Administração</string>
<string name="title_password">Alterar palavra-passe</string> <string name="title_password">Alterar palavra-passe</string>
<string name="title_update_profile">Actualizar perfil</string> <string name="title_update_profile">Actualizar perfil</string>
...@@ -71,6 +72,24 @@ ...@@ -71,6 +72,24 @@
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate --> <string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate --> <string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<string name="msg_generic_error">Lamentamos, ocorreu um erro, tente novamente</string> <string name="msg_generic_error">Lamentamos, ocorreu um erro, tente novamente</string>
<string name="msg_no_data_to_display">Sem dados para mostrar</string> <string name="msg_no_data_to_display">Sem dados para mostrar</string>
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
<string name="title_admin_panel">Панель админа</string> <string name="title_admin_panel">Панель админа</string>
<string name="title_password">Изменить пароль</string> <string name="title_password">Изменить пароль</string>
<string name="title_update_profile">Обновить профиль</string> <string name="title_update_profile">Обновить профиль</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_create_channel">Создать новый канал</string> <string name="title_create_channel">Создать новый канал</string>
<string name="title_channel_details">О канале</string> <string name="title_channel_details">О канале</string>
<string name="title_topic">Тема</string> <string name="title_topic">Тема</string>
...@@ -32,7 +33,7 @@ ...@@ -32,7 +33,7 @@
<string name="action_use_this_username">Использовать это имя</string> <string name="action_use_this_username">Использовать это имя</string>
<string name="action_terms_of_service">Условия использования</string> <string name="action_terms_of_service">Условия использования</string>
<string name="action_privacy_policy">Политика конфиденциальности</string> <string name="action_privacy_policy">Политика конфиденциальности</string>
<string name="action_new_channel">New channel</string> <!-- TODO Translate --> <string name="action_new_channel">Новый канал</string>
<string name="action_search">Поиск</string> <string name="action_search">Поиск</string>
<string name="action_update">Обновить</string> <string name="action_update">Обновить</string>
<string name="action_settings">Настройки</string> <string name="action_settings">Настройки</string>
...@@ -60,18 +61,37 @@ ...@@ -60,18 +61,37 @@
<string name="action_remove_favorite">Удалить из избранного</string> <string name="action_remove_favorite">Удалить из избранного</string>
<!-- Settings messages --> <!-- Settings messages -->
<string name="msg_contact_us">Contact us</string> <!-- TODO Translate --> <string name="msg_contact_us">Связаться с нами</string>
<string name="msg_language">Language</string> <!-- TODO Translate --> <string name="msg_language">Изменить язык</string>
<string name="msg_review_this_app">Review this app</string> <!-- TODO Translate --> <string name="msg_review_this_app">Оставить отзыв</string>
<string name="msg_share_this_app">Share this app</string> <!-- TODO Translate --> <string name="msg_share_this_app">Поделиться приложением</string>
<string name="msg_administration">Administration</string> <!-- TODO Translate --> <string name="msg_administration">Панель админа</string>
<string name="msg_license">License</string> <!-- TODO Translate --> <string name="msg_license">Лицензия</string>
<string name="msg_app_version">Version: %1$s (%2$d)</string> <!-- TODO Translate --> <string name="msg_app_version">Версия программы: %1$s (%2$d)</string>
<string name="msg_server_version">Server version: %1$s</string> <!-- TODO Translate --> <string name="msg_server_version">Версия сервера: %1$s</string>
<string name="msg_send_analytics">Send analytics</string> <!-- TODO Translate --> <string name="msg_send_analytics">Отправка аналитики</string>
<string name="msg_logout_from_rocket_chat">Logout from Rocket.Chat</string> <!-- TODO Translate --> <string name="msg_logout_from_rocket_chat">Выйти из Rocket.Chat</string>
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate --> <string name="msg_delete_account">Удалить аккаунт</string>
<string name="msg_change_status">Change status</string> <!-- TODO Translate --> <string name="msg_change_status">Изменить статус</string>
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<string name="msg_generic_error">Произошла ошибка, повторите попытку.</string> <string name="msg_generic_error">Произошла ошибка, повторите попытку.</string>
...@@ -179,11 +199,11 @@ ...@@ -179,11 +199,11 @@
<item quantity="many">%1$s реагируют с %2$s</item> <item quantity="many">%1$s реагируют с %2$s</item>
</plurals> </plurals>
<string name="msg_credentials_saved_successfully">Учетные данные успешно сохранены</string> <string name="msg_credentials_saved_successfully">Учетные данные успешно сохранены</string>
<string name="msg_camera_permission_denied">Camera permission is needed to open camera.</string> <!-- TODO Add translation --> <string name="msg_camera_permission_denied">Необходимо разрешение на использование камеры</string>
<string name="msg_storage_permission_denied">Storage permission is needed to open Drawing.</string> <!-- TODO Add translation --> <string name="msg_storage_permission_denied">Необходимо разрешение на использование хранилища</string>
<string name="msg_server">Server</string> <!-- TODO Translate --> <string name="msg_server">Сервер</string>
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate --> <string name="msg_add_new_server">Добавить новый сервер</string>
<string name="msg_directory">Directory</string> <!-- TODO Translate --> <string name="msg_directory">Директория</string>
<!-- Create channel messages --> <!-- Create channel messages -->
<string name="msg_private_channel">Приватный</string> <string name="msg_private_channel">Приватный</string>
...@@ -311,20 +331,20 @@ ...@@ -311,20 +331,20 @@
<string name="alert_title_default_skin_tone">Тон кожи по умолчанию</string> <string name="alert_title_default_skin_tone">Тон кожи по умолчанию</string>
<!-- Sort and group --> <!-- Sort and group -->
<string name="msg_sort_by_placeholder">Sort by %1$s</string> <!-- TODO Translate --> <string name="msg_sort_by_placeholder">Сортировать по %1$s</string>
<string name="msg_sort_by">Sort by</string> <!-- TODO Translate --> <string name="msg_sort_by">Сортировать по</string>
<string name="msg_sort_by_activity">Activity</string> <!-- TODO Translate --> <string name="msg_sort_by_activity">Активности</string>
<string name="msg_sort_by_name">Name</string> <!-- TODO Translate --> <string name="msg_sort_by_name">Имени</string>
<string name="msg_group_by_unread_on_top">Unread on top</string> <!-- TODO Translate --> <string name="msg_group_by_unread_on_top">Непрочитанные сверху</string>
<string name="msg_group_by_type">Group by type</string> <!-- TODO Translate --> <string name="msg_group_by_type">Группировать по типу</string>
<string name="msg_group_by_favorites">Group by favorites</string> <!-- TODO Translate --> <string name="msg_group_by_favorites">Группировать по избранному</string>
<!--ChatRooms Headers--> <!--ChatRooms Headers-->
<string name="header_favorite">Избранные</string> <string name="header_favorite">Избранные</string>
<string name="msg_channels">Каналы</string> <string name="msg_channels">Каналы</string>
<string name="msg_users">Users</string> <!-- TODO Translate --> <string name="msg_users">Пользователи</string>
<string name="msg_search_for_global_users">Search for global users</string> <!-- TODO Translate --> <string name="msg_search_for_global_users">Поиск глобальных пользователей</string>
<string name="msg_search_for_global_users_description">If you turn on, you can search for any user from others companies or servers.</string> <!-- TODO Translate --> <string name="msg_search_for_global_users_description">При активации станет возможен поиск любого пользователя из других компаний или серверов.</string>
<string name="header_private_groups">Приватные каналы</string> <string name="header_private_groups">Приватные каналы</string>
<string name="header_direct_messages">Личная переписка</string> <string name="header_direct_messages">Личная переписка</string>
<string name="header_live_chats">Живые чаты</string> <string name="header_live_chats">Живые чаты</string>
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
<string name="title_password">Şifrenizi Değiştirin</string> <string name="title_password">Şifrenizi Değiştirin</string>
<string name="title_update_profile">Profilinizi Düzenleyin</string> <string name="title_update_profile">Profilinizi Düzenleyin</string>
<string name="title_create_channel">Yeni Kanal Oluştur</string> <string name="title_create_channel">Yeni Kanal Oluştur</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_license">License</string> <!-- TODO Add translation --> <string name="title_license">License</string> <!-- TODO Add translation -->
<string name="title_are_you_sure">Are you sure?</string> <!-- TODO Add translation --> <string name="title_are_you_sure">Are you sure?</string> <!-- TODO Add translation -->
<string name="title_channel_details">Channel Details</string> <!-- TODO add translation --> <string name="title_channel_details">Channel Details</string> <!-- TODO add translation -->
...@@ -73,6 +74,25 @@ ...@@ -73,6 +74,25 @@
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate --> <string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate --> <string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<string name="msg_generic_error">Üzgünüz! bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.</string> <string name="msg_generic_error">Üzgünüz! bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.</string>
<string name="msg_no_data_to_display">Görüntülenecek veri bulunmamaktadır.</string> <string name="msg_no_data_to_display">Görüntülenecek veri bulunmamaktadır.</string>
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
<string name="title_password">Змінити пароль</string> <string name="title_password">Змінити пароль</string>
<string name="title_update_profile">Оновити профіль</string> <string name="title_update_profile">Оновити профіль</string>
<string name="title_create_channel">Створити новий канал</string> <string name="title_create_channel">Створити новий канал</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_license">License</string> <!-- TODO Add translation --> <string name="title_license">License</string> <!-- TODO Add translation -->
<string name="title_are_you_sure">Are you sure?</string> <!-- TODO Add translation --> <string name="title_are_you_sure">Are you sure?</string> <!-- TODO Add translation -->
<string name="title_channel_details">Channel Details</string> <!-- TODO add translation --> <string name="title_channel_details">Channel Details</string> <!-- TODO add translation -->
...@@ -73,6 +74,25 @@ ...@@ -73,6 +74,25 @@
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate --> <string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate --> <string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<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>
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
<string name="title_license">许可证</string> <string name="title_license">许可证</string>
<string name="title_are_you_sure">你确定?</string> <string name="title_are_you_sure">你确定?</string>
<string name="title_channel_details">频道信息</string> <string name="title_channel_details">频道信息</string>
<string name="title_choose_language">Choose Language</string> <!-- TODO Add translation -->
<string name="title_topic">主题</string> <string name="title_topic">主题</string>
<string name="title_announcement">公告</string> <string name="title_announcement">公告</string>
<string name="title_description">描述</string> <string name="title_description">描述</string>
...@@ -73,6 +74,25 @@ ...@@ -73,6 +74,25 @@
<string name="msg_delete_account">Delete account</string> <!-- TODO Translate --> <string name="msg_delete_account">Delete account</string> <!-- TODO Translate -->
<string name="msg_change_status">Change status</string> <!-- TODO Translate --> <string name="msg_change_status">Change status</string> <!-- TODO Translate -->
<string-array name="languages"> <!-- TODO Add translations -->
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<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>
......
...@@ -34,6 +34,7 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin ...@@ -34,6 +34,7 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string name="title_create_channel">Create Channel</string> <string name="title_create_channel">Create Channel</string>
<string name="title_license">License</string> <string name="title_license">License</string>
<string name="title_are_you_sure">Are you sure?</string> <string name="title_are_you_sure">Are you sure?</string>
<string name="title_choose_language">Choose Language</string>
<string name="title_channel_details">Channel Details</string> <string name="title_channel_details">Channel Details</string>
<string name="title_topic">Topic</string> <string name="title_topic">Topic</string>
<string name="title_announcement">Announcement</string> <string name="title_announcement">Announcement</string>
...@@ -85,6 +86,25 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin ...@@ -85,6 +86,25 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string name="msg_delete_account">Delete account</string> <string name="msg_delete_account">Delete account</string>
<string name="msg_change_status">Change status</string> <string name="msg_change_status">Change status</string>
<string-array name="languages">
<item>English</item>
<item>Arabic</item>
<item>German</item>
<item>Spanish</item>
<item>Persian</item>
<item>French</item>
<item>Hindi (IN)</item>
<item>Italian</item>
<item>Japanese</item>
<item>Portuguese (BR)</item>
<item>Portuguese (PT)</item>
<item>Russian (RU)</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Chinese (CN)</item>
<item>Chinese (TW)</item>
</string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
<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>
...@@ -360,9 +380,10 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin ...@@ -360,9 +380,10 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<!-- User Details --> <!-- User Details -->
<string name="timezone">Timezone</string> <string name="timezone">Timezone</string>
<string name="status" translatable="false">Status: %1$s</string> <string name="status" translatable="false">Status: %1$s</string>
<string name="user_detail_status" translatable="false">Status</string>
<!-- Report --> <!-- Report -->
<string name="submit">Submit</string> <string name="submit">Submit</string>
<string name="required">*required</string> <string name="required">*required</string>
<string name="report_sent">Your report has been sent!</string> <string name="report_sent">Your report has been sent!</string>
</resources> </resources>
\ No newline at end of file
...@@ -5,7 +5,7 @@ import chat.rocket.android.dagger.injector.AndroidWorkerInjection ...@@ -5,7 +5,7 @@ import chat.rocket.android.dagger.injector.AndroidWorkerInjection
import chat.rocket.android.extensions.await import chat.rocket.android.extensions.await
import chat.rocket.android.infrastructure.LocalRepository import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.server.domain.GetAccountsInteractor import chat.rocket.android.server.domain.GetAccountsInteractor
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.android.util.extensions.registerPushToken import chat.rocket.android.util.extensions.registerPushToken
import chat.rocket.common.util.ifNull import chat.rocket.common.util.ifNull
import com.google.firebase.iid.FirebaseInstanceId import com.google.firebase.iid.FirebaseInstanceId
......
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