Unverified Commit 12db177e authored by Rafael Kellermann Streit's avatar Rafael Kellermann Streit Committed by GitHub

Merge pull request #1932 from RocketChat/develop

[RELEASE] Merge DEVELOP into BETA
parents 59bff799 ac4ffd53
...@@ -16,7 +16,7 @@ android { ...@@ -16,7 +16,7 @@ android {
applicationId "chat.rocket.android" applicationId "chat.rocket.android"
minSdkVersion versions.minSdk minSdkVersion versions.minSdk
targetSdkVersion versions.targetSdk targetSdkVersion versions.targetSdk
versionCode 2052 versionCode 2055
versionName "3.2.0" versionName "3.2.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true multiDexEnabled true
......
...@@ -19,7 +19,6 @@ import chat.rocket.android.dagger.scope.PerFragment ...@@ -19,7 +19,6 @@ import chat.rocket.android.dagger.scope.PerFragment
import chat.rocket.android.db.DatabaseManager import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.emoji.EmojiParser import chat.rocket.android.emoji.EmojiParser
import chat.rocket.android.emoji.EmojiRepository import chat.rocket.android.emoji.EmojiRepository
import chat.rocket.android.emoji.internal.isCustom
import chat.rocket.android.helper.MessageHelper import chat.rocket.android.helper.MessageHelper
import chat.rocket.android.helper.MessageParser import chat.rocket.android.helper.MessageParser
import chat.rocket.android.helper.UserHelper import chat.rocket.android.helper.UserHelper
...@@ -32,7 +31,7 @@ import chat.rocket.android.server.domain.messageReadReceiptEnabled ...@@ -32,7 +31,7 @@ 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.infraestructure.ConnectionManagerFactory
import chat.rocket.android.util.extension.orFalse 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
import chat.rocket.android.util.extensions.isNotNullNorEmpty import chat.rocket.android.util.extensions.isNotNullNorEmpty
...@@ -127,7 +126,12 @@ class UiModelMapper @Inject constructor( ...@@ -127,7 +126,12 @@ class UiModelMapper @Inject constructor(
getChatRoomAsync(message.roomId)?.let { chatRoom -> getChatRoomAsync(message.roomId)?.let { chatRoom ->
message.urls?.forEach { url -> message.urls?.forEach { url ->
mapUrl(message, url, chatRoom)?.let { list.add(it) } if (url.url.isImage()) {
val attachment = Attachment(imageUrl = url.url)
mapAttachment(message, attachment, chatRoom)?.let { list.add(it) }
} else {
mapUrl(message, url, chatRoom)?.let { list.add(it) }
}
} }
message.attachments?.mapNotNull { attachment -> message.attachments?.mapNotNull { attachment ->
...@@ -164,7 +168,7 @@ class UiModelMapper @Inject constructor( ...@@ -164,7 +168,7 @@ class UiModelMapper @Inject constructor(
// TODO: move this to new interactor or FetchChatRoomsInteractor? // TODO: move this to new interactor or FetchChatRoomsInteractor?
private suspend fun getChatRoomAsync(roomId: String): ChatRoom? = withContext(CommonPool) { private suspend fun getChatRoomAsync(roomId: String): ChatRoom? = withContext(CommonPool) {
return@withContext dbManager.chatRoomDao().getSync(roomId)?.let { return@withContext dbManager.getRoom(id = roomId)?.let {
with(it.chatRoom) { with(it.chatRoom) {
ChatRoom( ChatRoom(
id = id, id = id,
......
...@@ -36,6 +36,8 @@ import chat.rocket.android.helper.SharedPreferenceHelper ...@@ -36,6 +36,8 @@ import chat.rocket.android.helper.SharedPreferenceHelper
import chat.rocket.android.util.extension.onQueryTextListener import chat.rocket.android.util.extension.onQueryTextListener
import chat.rocket.android.util.extensions.fadeIn import chat.rocket.android.util.extensions.fadeIn
import chat.rocket.android.util.extensions.fadeOut import chat.rocket.android.util.extensions.fadeOut
import chat.rocket.android.util.extensions.ifNotNullNorEmpty
import chat.rocket.android.util.extensions.ifNotNullNotEmpty
import chat.rocket.android.util.extensions.inflate import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.extensions.showToast import chat.rocket.android.util.extensions.showToast
import chat.rocket.android.util.extensions.ui import chat.rocket.android.util.extensions.ui
...@@ -83,8 +85,8 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView { ...@@ -83,8 +85,8 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
val bundle = arguments val bundle = arguments
if (bundle != null) { if (bundle != null) {
chatRoomId = bundle.getString(BUNDLE_CHAT_ROOM_ID) chatRoomId = bundle.getString(BUNDLE_CHAT_ROOM_ID)
chatRoomId?.let { chatRoomId.ifNotNullNotEmpty { roomId ->
presenter.loadChatRoom(it) presenter.loadChatRoom(roomId)
chatRoomId = null chatRoomId = null
} }
} }
...@@ -237,7 +239,7 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView { ...@@ -237,7 +239,7 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
AlertDialog.Builder(context) AlertDialog.Builder(context)
.setTitle(R.string.dialog_sort_title) .setTitle(R.string.dialog_sort_title)
.setView(dialogLayout) .setView(dialogLayout)
.setPositiveButton(R.string.dialog_button_done) { dialog, _ -> .setPositiveButton(R.string.msg_sort) { dialog, _ ->
invalidateQueryOnSearch() invalidateQueryOnSearch()
updateSort() updateSort()
dialog.dismiss() dialog.dismiss()
......
...@@ -64,6 +64,7 @@ import chat.rocket.common.internal.ISO8601Date ...@@ -64,6 +64,7 @@ import chat.rocket.common.internal.ISO8601Date
import chat.rocket.common.model.TimestampAdapter import chat.rocket.common.model.TimestampAdapter
import chat.rocket.common.util.CalendarISO8601Converter import chat.rocket.common.util.CalendarISO8601Converter
import chat.rocket.common.util.Logger import chat.rocket.common.util.Logger
import chat.rocket.common.util.NoOpLogger
import chat.rocket.common.util.PlatformLogger import chat.rocket.common.util.PlatformLogger
import chat.rocket.core.internal.AttachmentAdapterFactory import chat.rocket.core.internal.AttachmentAdapterFactory
import chat.rocket.core.internal.ReactionsAdapter import chat.rocket.core.internal.ReactionsAdapter
...@@ -231,7 +232,7 @@ class AppModule { ...@@ -231,7 +232,7 @@ class AppModule {
return Moshi.Builder() return Moshi.Builder()
.add(FallbackSealedClassJsonAdapter.ADAPTER_FACTORY) .add(FallbackSealedClassJsonAdapter.ADAPTER_FACTORY)
.add(AppJsonAdapterFactory.INSTANCE) .add(AppJsonAdapterFactory.INSTANCE)
.add(AttachmentAdapterFactory(Logger(logger, url))) .add(AttachmentAdapterFactory(NoOpLogger))
.add( .add(
java.lang.Long::class.java, java.lang.Long::class.java,
ISO8601Date::class.java, ISO8601Date::class.java,
......
...@@ -14,6 +14,7 @@ import chat.rocket.common.internal.ISO8601Date ...@@ -14,6 +14,7 @@ import chat.rocket.common.internal.ISO8601Date
import chat.rocket.common.model.TimestampAdapter import chat.rocket.common.model.TimestampAdapter
import chat.rocket.common.util.CalendarISO8601Converter import chat.rocket.common.util.CalendarISO8601Converter
import chat.rocket.common.util.Logger import chat.rocket.common.util.Logger
import chat.rocket.common.util.NoOpLogger
import chat.rocket.common.util.PlatformLogger import chat.rocket.common.util.PlatformLogger
import chat.rocket.core.internal.AttachmentAdapterFactory import chat.rocket.core.internal.AttachmentAdapterFactory
import chat.rocket.core.internal.ReactionsAdapter import chat.rocket.core.internal.ReactionsAdapter
...@@ -47,7 +48,7 @@ class LocalModule { ...@@ -47,7 +48,7 @@ class LocalModule {
return Moshi.Builder() return Moshi.Builder()
.add(FallbackSealedClassJsonAdapter.ADAPTER_FACTORY) .add(FallbackSealedClassJsonAdapter.ADAPTER_FACTORY)
.add(AppJsonAdapterFactory.INSTANCE) .add(AppJsonAdapterFactory.INSTANCE)
.add(AttachmentAdapterFactory(Logger(logger, url))) .add(AttachmentAdapterFactory(NoOpLogger))
.add( .add(
java.lang.Long::class.java, java.lang.Long::class.java,
ISO8601Date::class.java, ISO8601Date::class.java,
...@@ -67,8 +68,6 @@ class LocalModule { ...@@ -67,8 +68,6 @@ class LocalModule {
return context.getSharedPreferences("rocket.chat", Context.MODE_PRIVATE) return context.getSharedPreferences("rocket.chat", Context.MODE_PRIVATE)
} }
@Provides @Provides
@Singleton @Singleton
fun provideLocalRepository(sharedPreferences: SharedPreferences, moshi: Moshi): LocalRepository { fun provideLocalRepository(sharedPreferences: SharedPreferences, moshi: Moshi): LocalRepository {
......
...@@ -27,7 +27,7 @@ interface LocalRepository { ...@@ -27,7 +27,7 @@ interface LocalRepository {
const val SETTINGS_KEY = "settings_" const val SETTINGS_KEY = "settings_"
const val PERMISSIONS_KEY = "permissions_" const val PERMISSIONS_KEY = "permissions_"
const val USER_KEY = "user_" const val USER_KEY = "user_"
const val UNFINISHED_MSG_KEY = "unfinished_msg_" const val DRAFT_KEY = "draft"
const val CURRENT_USERNAME_KEY = "username_" const val CURRENT_USERNAME_KEY = "username_"
const val LAST_CHATROOMS_REFRESH = "_chatrooms_refresh" const val LAST_CHATROOMS_REFRESH = "_chatrooms_refresh"
} }
......
...@@ -110,6 +110,7 @@ class MainPresenter @Inject constructor( ...@@ -110,6 +110,7 @@ class MainPresenter @Inject constructor(
} }
fun loadCurrentInfo() { fun loadCurrentInfo() {
setupConnectionInfo(currentServer)
checkServerInfo(currentServer) checkServerInfo(currentServer)
launchUI(strategy) { launchUI(strategy) {
try { try {
......
...@@ -30,6 +30,7 @@ class RocketChatClientFactory @Inject constructor( ...@@ -30,6 +30,7 @@ class RocketChatClientFactory @Inject constructor(
userAgent = "RC Mobile; Android ${Build.VERSION.RELEASE}; v${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})" userAgent = "RC Mobile; Android ${Build.VERSION.RELEASE}; v${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})"
tokenRepository = repository tokenRepository = repository
platformLogger = logger platformLogger = logger
enableLogger = false
} }
Timber.d("Returning NEW client for: $url") Timber.d("Returning NEW client for: $url")
......
...@@ -2,13 +2,14 @@ package chat.rocket.android.settings.password.presentation ...@@ -2,13 +2,14 @@ package chat.rocket.android.settings.password.presentation
import chat.rocket.android.analytics.AnalyticsManager 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.server.domain.GetCurrentServerInteractor import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infraestructure.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
import chat.rocket.common.util.ifNull
import chat.rocket.core.RocketChatClient import chat.rocket.core.RocketChatClient
import chat.rocket.core.internal.rest.me
import chat.rocket.core.internal.rest.updateProfile import chat.rocket.core.internal.rest.updateProfile
import javax.inject.Inject import javax.inject.Inject
...@@ -16,6 +17,7 @@ class PasswordPresenter @Inject constructor( ...@@ -16,6 +17,7 @@ class PasswordPresenter @Inject constructor(
private val view: PasswordView, private val view: PasswordView,
private val strategy: CancelStrategy, private val strategy: CancelStrategy,
private val analyticsManager: AnalyticsManager, private val analyticsManager: AnalyticsManager,
private val userHelp: UserHelper,
serverInteractor: GetCurrentServerInteractor, serverInteractor: GetCurrentServerInteractor,
factory: RocketChatClientFactory factory: RocketChatClientFactory
) { ) {
...@@ -26,17 +28,18 @@ class PasswordPresenter @Inject constructor( ...@@ -26,17 +28,18 @@ class PasswordPresenter @Inject constructor(
launchUI(strategy) { launchUI(strategy) {
try { try {
view.showLoading() view.showLoading()
userHelp.user()?.id?.let { userId ->
val me = retryIO("me") { client.me() } retryIO("updateProfile()") {
retryIO("updateProfile(${me.id})") { client.updateProfile(userId, null, null, password, null)
client.updateProfile(me.id, null, null, password, null) }
analyticsManager.logResetPassword(true)
view.showPasswordSuccessfullyUpdatedMessage()
} }
analyticsManager.logResetPassword(true)
view.showPasswordSuccessfullyUpdatedMessage()
} catch (exception: RocketChatException) { } catch (exception: RocketChatException) {
analyticsManager.logResetPassword(false) analyticsManager.logResetPassword(false)
view.showPasswordFailsUpdateMessage(exception.message) exception.message?.let { errorMessage ->
view.showPasswordFailsUpdateMessage(errorMessage)
}
} finally { } finally {
view.hideLoading() view.hideLoading()
} }
......
...@@ -12,5 +12,5 @@ interface PasswordView: LoadingView { ...@@ -12,5 +12,5 @@ interface PasswordView: LoadingView {
* Shows a message when the user's password fails to update * Shows a message when the user's password fails to update
* @param error is a String containing the failure message * @param error is a String containing the failure message
*/ */
fun showPasswordFailsUpdateMessage(error : String?) fun showPasswordFailsUpdateMessage(error : String)
} }
...@@ -6,7 +6,6 @@ import android.view.Menu ...@@ -6,7 +6,6 @@ import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast
import androidx.appcompat.view.ActionMode import androidx.appcompat.view.ActionMode
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import chat.rocket.android.R import chat.rocket.android.R
...@@ -16,6 +15,7 @@ import chat.rocket.android.settings.password.presentation.PasswordPresenter ...@@ -16,6 +15,7 @@ import chat.rocket.android.settings.password.presentation.PasswordPresenter
import chat.rocket.android.settings.password.presentation.PasswordView import chat.rocket.android.settings.password.presentation.PasswordView
import chat.rocket.android.util.extension.asObservable import chat.rocket.android.util.extension.asObservable
import chat.rocket.android.util.extensions.inflate import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.extensions.showToast
import chat.rocket.android.util.extensions.textContent import chat.rocket.android.util.extensions.textContent
import chat.rocket.android.util.extensions.ui import chat.rocket.android.util.extensions.ui
import dagger.android.support.AndroidSupportInjection import dagger.android.support.AndroidSupportInjection
...@@ -33,7 +33,7 @@ class PasswordFragment : Fragment(), PasswordView, ActionMode.Callback { ...@@ -33,7 +33,7 @@ class PasswordFragment : Fragment(), PasswordView, ActionMode.Callback {
@Inject @Inject
lateinit var analyticsManager: AnalyticsManager lateinit var analyticsManager: AnalyticsManager
private var actionMode: ActionMode? = null private var actionMode: ActionMode? = null
private val disposables = CompositeDisposable() private val compositeDisposable = CompositeDisposable()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
AndroidSupportInjection.inject(this) AndroidSupportInjection.inject(this)
...@@ -48,14 +48,12 @@ class PasswordFragment : Fragment(), PasswordView, ActionMode.Callback { ...@@ -48,14 +48,12 @@ class PasswordFragment : Fragment(), PasswordView, ActionMode.Callback {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
compositeDisposable.add(listenToChanges())
disposables.add(listenToChanges())
analyticsManager.logScreenView(ScreenViewEvent.Password) analyticsManager.logScreenView(ScreenViewEvent.Password)
} }
override fun onDestroyView() { override fun onDestroyView() {
disposables.clear() compositeDisposable.clear()
super.onDestroyView() super.onDestroyView()
} }
...@@ -74,21 +72,19 @@ class PasswordFragment : Fragment(), PasswordView, ActionMode.Callback { ...@@ -74,21 +72,19 @@ class PasswordFragment : Fragment(), PasswordView, ActionMode.Callback {
mode.finish() mode.finish()
return true return true
} }
else -> { else -> false
false
}
} }
} }
override fun onCreateActionMode(mode: ActionMode, menu: Menu?): Boolean { override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
mode.menuInflater.inflate(R.menu.password, menu) mode.menuInflater.inflate(R.menu.password, menu)
mode.title = resources.getString(R.string.action_confirm_password) mode.title = resources.getString(R.string.action_confirm_password)
return true return true
} }
override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean = false override fun onPrepareActionMode(mode: ActionMode, menu: Menu?): Boolean = false
override fun onDestroyActionMode(mode: ActionMode?) { override fun onDestroyActionMode(mode: ActionMode) {
actionMode = null actionMode = null
} }
...@@ -100,12 +96,12 @@ class PasswordFragment : Fragment(), PasswordView, ActionMode.Callback { ...@@ -100,12 +96,12 @@ class PasswordFragment : Fragment(), PasswordView, ActionMode.Callback {
} }
} }
override fun showPasswordFailsUpdateMessage(error: String?) { override fun showPasswordFailsUpdateMessage(error: String) {
showToast("Password fails to update: " + error) showToast(getString(R.string.msg_unable_to_update_password, error))
} }
override fun showPasswordSuccessfullyUpdatedMessage() { override fun showPasswordSuccessfullyUpdatedMessage() {
showToast("Password was successfully updated!") showToast(R.string.msg_password_updated_successfully)
} }
private fun finishActionMode() = actionMode?.finish() private fun finishActionMode() = actionMode?.finish()
...@@ -115,22 +111,13 @@ class PasswordFragment : Fragment(), PasswordView, ActionMode.Callback { ...@@ -115,22 +111,13 @@ class PasswordFragment : Fragment(), PasswordView, ActionMode.Callback {
text_new_password.asObservable(), text_new_password.asObservable(),
text_confirm_password.asObservable() text_confirm_password.asObservable()
).subscribe { ).subscribe {
val textPassword = text_new_password.textContent val newPassword = it.first.toString()
val textConfirmPassword = text_confirm_password.textContent val newPasswordConfirmation = it.second.toString()
if (newPassword.length > 5 && newPassword == newPasswordConfirmation) {
if (textPassword.length > 5 && textConfirmPassword.length > 5 && textPassword.equals(
textConfirmPassword
)
)
startActionMode() startActionMode()
else } else {
finishActionMode() finishActionMode()
} }
}
private fun showToast(msg: String?) {
ui {
Toast.makeText(it, msg, Toast.LENGTH_LONG).show()
} }
} }
......
package chat.rocket.android.userdetails.presentation package chat.rocket.android.userdetails.presentation
import chat.rocket.android.chatrooms.domain.FetchChatRoomsInteractor
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.db.model.ChatRoomEntity
import chat.rocket.android.server.domain.GetConnectingServerInteractor import chat.rocket.android.server.domain.GetConnectingServerInteractor
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
...@@ -27,6 +29,7 @@ class UserDetailsPresenter @Inject constructor( ...@@ -27,6 +29,7 @@ class UserDetailsPresenter @Inject constructor(
private var currentServer = serverInteractor.get()!! private var currentServer = serverInteractor.get()!!
private val manager = factory.create(currentServer) private val manager = factory.create(currentServer)
private val client = manager.client private val client = manager.client
private val interactor = FetchChatRoomsInteractor(client,dbManager)
fun loadUserDetails(userId: String) { fun loadUserDetails(userId: String) {
launchUI(strategy) { launchUI(strategy) {
...@@ -39,37 +42,7 @@ class UserDetailsPresenter @Inject constructor( ...@@ -39,37 +42,7 @@ class UserDetailsPresenter @Inject constructor(
val openedChatRooms = chatRoomByName(name = u.name) val openedChatRooms = chatRoomByName(name = u.name)
val avatarUrl = u.username?.let { currentServer.avatarUrl(avatar = it) } val avatarUrl = u.username?.let { currentServer.avatarUrl(avatar = it) }
val chatRoom: ChatRoom? = if (openedChatRooms.isEmpty()) { val chatRoom: ChatRoom? = openedChatRooms.firstOrNull()
ChatRoom(
id = "",
type = roomTypeOf(RoomType.DIRECT_MESSAGE),
name = u.username ?: u.name.orEmpty(),
fullName = u.name,
favorite = false,
open = false,
alert = false,
status = userStatusOf(u.status),
client = client,
broadcast = false,
archived = false,
default = false,
description = null,
groupMentions = null,
userMentions = null,
lastMessage = null,
lastSeen = null,
topic = null,
announcement = null,
roles = null,
unread = 0,
readonly = false,
muted = null,
subscriptionId = "",
timestamp = null,
updatedAt = null,
user = null
)
} else openedChatRooms.firstOrNull()
view.showUserDetails( view.showUserDetails(
avatarUrl = avatarUrl, avatarUrl = avatarUrl,
...@@ -92,48 +65,63 @@ class UserDetailsPresenter @Inject constructor( ...@@ -92,48 +65,63 @@ class UserDetailsPresenter @Inject constructor(
client.createDirectMessage(username = id) client.createDirectMessage(username = id)
} }
interactor.refreshChatRooms()
val userEntity = withContext(CommonPool) { val userEntity = withContext(CommonPool) {
dbManager.userDao().getUser(id = id) dbManager.userDao().getUser(id = id)
} }
if (userEntity != null) { if (userEntity != null) {
view.toDirectMessage( val chatRoom = ChatRoom(
chatRoom = ChatRoom( id = result.id,
id = result.id, type = roomTypeOf(RoomType.DIRECT_MESSAGE),
type = roomTypeOf(RoomType.DIRECT_MESSAGE), name = userEntity.username ?: userEntity.name.orEmpty(),
name = userEntity.username ?: userEntity.name.orEmpty(), fullName = userEntity.name,
fullName = userEntity.name, favorite = false,
favorite = false, open = false,
open = false, alert = false,
alert = false, status = userStatusOf(userEntity.status),
status = userStatusOf(userEntity.status), client = client,
client = client, broadcast = false,
broadcast = false, archived = false,
archived = false, default = false,
default = false, description = null,
description = null, groupMentions = null,
groupMentions = null, userMentions = null,
userMentions = null, lastMessage = null,
lastMessage = null, lastSeen = null,
lastSeen = null, topic = null,
topic = null, announcement = null,
announcement = null, roles = null,
roles = null, unread = 0,
unread = 0, readonly = false,
readonly = false, muted = null,
muted = null, subscriptionId = "",
subscriptionId = "", timestamp = null,
timestamp = null, updatedAt = result.updatedAt,
updatedAt = result.updatedAt, user = null
user = null
)
) )
withContext(CommonPool + strategy.jobs) {
dbManager.chatRoomDao().insertOrReplace(chatRoom = ChatRoomEntity(
id = chatRoom.id,
name = chatRoom.name,
description = chatRoom.description,
type = chatRoom.type.toString(),
fullname = chatRoom.fullName,
subscriptionId = chatRoom.subscriptionId,
updatedAt = chatRoom.updatedAt
))
}
view.toDirectMessage(chatRoom = chatRoom)
} }
} catch (ex: Exception) { } catch (ex: Exception) {
Timber.e(ex) Timber.e(ex)
view.onOpenDirectMessageError() view.onOpenDirectMessageError()
} }
} }
private suspend fun chatRoomByName(name: String? = null): List<ChatRoom> = withContext(CommonPool) { private suspend fun chatRoomByName(name: String? = null): List<ChatRoom> = withContext(CommonPool) {
return@withContext dbManager.chatRoomDao().getAllSync().filter { return@withContext dbManager.chatRoomDao().getAllSync().filter {
if (name == null) { if (name == null) {
......
...@@ -9,7 +9,7 @@ import timber.log.Timber ...@@ -9,7 +9,7 @@ import timber.log.Timber
import kotlin.coroutines.experimental.coroutineContext import kotlin.coroutines.experimental.coroutineContext
const val DEFAULT_RETRY = 3 const val DEFAULT_RETRY = 3
private const val DEFAULT_DB_RETRY = 5 private const val DEFAULT_DB_RETRY = 15
suspend fun <T> retryIO( suspend fun <T> retryIO(
description: String = "<missing description>", description: String = "<missing description>",
...@@ -42,7 +42,7 @@ suspend fun <T> retryDB( ...@@ -42,7 +42,7 @@ suspend fun <T> retryDB(
description: String = "<missing description>", description: String = "<missing description>",
times: Int = DEFAULT_DB_RETRY, times: Int = DEFAULT_DB_RETRY,
initialDelay: Long = 100, // 0.1 second initialDelay: Long = 100, // 0.1 second
maxDelay: Long = 500, // 0.5 second maxDelay: Long = 1500, // 1.5 second
factor: Double = 1.2, factor: Double = 1.2,
block: suspend () -> T): T block: suspend () -> T): T
{ {
......
...@@ -76,4 +76,10 @@ fun String.lowercaseUrl(): String? { ...@@ -76,4 +76,10 @@ fun String.lowercaseUrl(): String? {
return httpUrl?.newBuilder()?.scheme(newScheme)?.build()?.toString() return httpUrl?.newBuilder()?.scheme(newScheme)?.build()?.toString()
} }
fun String?.isNotNullNorEmpty(): Boolean = this != null && this.isNotEmpty() fun String?.isNotNullNorEmpty(): Boolean = this != null && this.isNotEmpty()
\ No newline at end of file
inline fun String?.ifNotNullNotEmpty(block: (String) -> Unit) {
if (this != null && this.isNotEmpty()) {
block(this)
}
}
\ No newline at end of file
...@@ -7,13 +7,7 @@ ...@@ -7,13 +7,7 @@
<path <path
android:fillColor="#000000" android:fillColor="#000000"
android:pathData="M20,5 L4,5 C2.9,5,2.01,5.9,2.01,7 L2,17 C2,18.1,2.9,19,4,19 L20,19 android:pathData="M20,5 L4,5 C2.9,5,2.01,5.9,2.01,7 L2,17 C2,18.1,2.9,19,4,19 L20,19 C21.1,19,22,18.1,22,17 L22,7 C22,5.9,21.1,5,20,5 Z M11,8 L13,8 L13,10 L11,10 L11,8 Z M11,11 L13,11 L13,13 L11,13 L11,11 Z M8,8 L10,8 L10,10 L8,10 L8,8 Z M8,11 L10,11 L10,13 L8,13 L8,11 Z M7,13 L5,13 L5,11 L7,11 L7,13 Z M7,10 L5,10 L5,8 L7,8 L7,10 Z M16,17 L8,17 L8,15 L16,15 L16,17 Z M16,13 L14,13 L14,11 L16,11 L16,13 Z M16,10 L14,10 L14,8 L16,8 L16,10 Z M19,13 L17,13 L17,11 L19,11 L19,13 Z M19,10 L17,10 L17,8 L19,8 L19,10 Z" />
C21.1,19,22,18.1,22,17 L22,7 C22,5.9,21.1,5,20,5 Z M11,8 L13,8 L13,10 L11,10
L11,8 Z M11,11 L13,11 L13,13 L11,13 L11,11 Z M8,8 L10,8 L10,10 L8,10 L8,8 Z <path android:pathData="M0,0 L24,0 L24,24 L0,24 Z M-24,0 L0,0 L0,24 L0,24 Z" />
M8,11 L10,11 L10,13 L8,13 L8,11 Z M7,13 L5,13 L5,11 L7,11 L7,13 Z M7,10 L5,10
L5,8 L7,8 L7,10 Z M16,17 L8,17 L8,15 L16,15 L16,17 Z M16,13 L14,13 L14,11 L16,11
L16,13 Z M16,10 L14,10 L14,8 L16,8 L16,10 Z M19,13 L17,13 L17,11 L19,11 L19,13 Z
M19,10 L17,10 L17,8 L19,8 L19,10 Z" />
<path
android:pathData="M0,0 L24,0 L24,24 L0,24 Z M-24,0 L0,0 L0,24 L0,24 Z" />
</vector> </vector>
\ No newline at end of file
...@@ -113,7 +113,7 @@ ...@@ -113,7 +113,7 @@
app:layout_constraintTop_toBottomOf="@+id/edit_text_description" app:layout_constraintTop_toBottomOf="@+id/edit_text_description"
tools:visibility="visible" /> tools:visibility="visible" />
<Button <android.widget.Button
android:id="@+id/button_send_report" android:id="@+id/button_send_report"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
......
...@@ -79,7 +79,7 @@ ...@@ -79,7 +79,7 @@
android:layout_margin="16dp" android:layout_margin="16dp"
android:hint="@string/msg_file_description" /> android:hint="@string/msg_file_description" />
<Button <android.widget.Button
android:id="@+id/button_send" android:id="@+id/button_send"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
android:text="@string/msg_send" android:text="@string/msg_send"
android:textColor="@color/colorWhite" /> android:textColor="@color/colorWhite" />
<Button <android.widget.Button
android:id="@+id/button_cancel" android:id="@+id/button_cancel"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_username_or_email" /> app:layout_constraintTop_toBottomOf="@+id/text_username_or_email" />
<Button <android.widget.Button
android:id="@+id/button_log_in" android:id="@+id/button_log_in"
style="@style/Authentication.Button" style="@style/Authentication.Button"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_password" /> app:layout_constraintTop_toBottomOf="@id/text_password" />
<Button <android.widget.Button
android:id="@+id/button_forgot_your_password" android:id="@+id/button_forgot_your_password"
style="@style/Authentication.Button.Borderless" style="@style/Authentication.Button.Borderless"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible"> tools:visibility="visible">
<Button <android.widget.Button
android:id="@+id/button_facebook" android:id="@+id/button_facebook"
style="?borderlessButtonStyle" style="?borderlessButtonStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
android:visibility="gone" android:visibility="gone"
tools:visibility="visible" /> tools:visibility="visible" />
<Button <android.widget.Button
android:id="@+id/button_github" android:id="@+id/button_github"
style="?borderlessButtonStyle" style="?borderlessButtonStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
android:visibility="gone" android:visibility="gone"
tools:visibility="visible" /> tools:visibility="visible" />
<Button <android.widget.Button
android:id="@+id/button_google" android:id="@+id/button_google"
style="?borderlessButtonStyle" style="?borderlessButtonStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
android:visibility="gone" android:visibility="gone"
tools:visibility="visible" /> tools:visibility="visible" />
<Button <android.widget.Button
android:id="@+id/button_linkedin" android:id="@+id/button_linkedin"
style="?borderlessButtonStyle" style="?borderlessButtonStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -96,7 +96,7 @@ ...@@ -96,7 +96,7 @@
android:visibility="gone" android:visibility="gone"
tools:visibility="visible" /> tools:visibility="visible" />
<Button <android.widget.Button
android:id="@+id/button_gitlab" android:id="@+id/button_gitlab"
style="?borderlessButtonStyle" style="?borderlessButtonStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -115,7 +115,7 @@ ...@@ -115,7 +115,7 @@
android:visibility="gone" android:visibility="gone"
tools:visibility="visible" /> tools:visibility="visible" />
<Button <android.widget.Button
android:id="@+id/button_wordpress" android:id="@+id/button_wordpress"
style="?borderlessButtonStyle" style="?borderlessButtonStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -179,7 +179,7 @@ ...@@ -179,7 +179,7 @@
app:layout_constraintTop_toTopOf="@+id/button_expand_collapse_accounts" /> app:layout_constraintTop_toTopOf="@+id/button_expand_collapse_accounts" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<Button <android.widget.Button
android:id="@+id/button_login_with_email" android:id="@+id/button_login_with_email"
style="@style/Authentication.Button" style="@style/Authentication.Button"
android:layout_marginTop="32dp" android:layout_marginTop="32dp"
...@@ -190,7 +190,7 @@ ...@@ -190,7 +190,7 @@
app:layout_constraintTop_toBottomOf="@+id/expand_more_accounts_container" app:layout_constraintTop_toBottomOf="@+id/expand_more_accounts_container"
tools:visibility="visible" /> tools:visibility="visible" />
<Button <android.widget.Button
android:id="@+id/button_create_an_account" android:id="@+id/button_create_an_account"
style="@style/Authentication.Button.Borderless" style="@style/Authentication.Button.Borderless"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_sign_in_to_your_server" /> app:layout_constraintTop_toBottomOf="@id/text_sign_in_to_your_server" />
<Button <android.widget.Button
android:id="@+id/button_use_this_username" android:id="@+id/button_use_this_username"
style="@style/Authentication.Button" style="@style/Authentication.Button"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_reset_password" /> app:layout_constraintTop_toBottomOf="@id/text_reset_password" />
<Button <android.widget.Button
android:id="@+id/button_reset_password" android:id="@+id/button_reset_password"
style="@style/Authentication.Button" style="@style/Authentication.Button"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
android:inputType="text|textUri" /> android:inputType="text|textUri" />
</RelativeLayout> </RelativeLayout>
<Button <android.widget.Button
android:id="@+id/button_connect" android:id="@+id/button_connect"
style="@style/Authentication.Button" style="@style/Authentication.Button"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
......
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_password" /> app:layout_constraintTop_toBottomOf="@+id/text_password" />
<Button <android.widget.Button
android:id="@+id/button_register" android:id="@+id/button_register"
style="@style/Authentication.Button" style="@style/Authentication.Button"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_two_factor_authentication" /> app:layout_constraintTop_toBottomOf="@+id/text_two_factor_authentication" />
<Button <android.widget.Button
android:id="@+id/button_confirm" android:id="@+id/button_confirm"
style="@style/Authentication.Button" style="@style/Authentication.Button"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".settings.password.ui.PasswordFragment"> tools:context=".settings.password.ui.PasswordFragment">
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_new_password" android:id="@+id/layout_new_password"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp"
android:theme="@style/EditText.Password" android:theme="@style/EditText.Password"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
android:layout_margin="16dp" app:layout_constraintTop_toTopOf="parent">
>
<EditText <EditText
android:id="@+id/text_new_password" android:id="@+id/text_new_password"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="@string/msg_new_password" android:hint="@string/msg_new_password"
android:inputType="textPassword" android:inputType="textPassword" />
/>
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_confirm_password" android:id="@+id/layout_confirm_password"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp"
android:theme="@style/EditText.Password" android:theme="@style/EditText.Password"
app:layout_constraintTop_toBottomOf="@+id/layout_new_password"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
android:layout_margin="16dp" app:layout_constraintStart_toStartOf="parent"
> app:layout_constraintTop_toBottomOf="@+id/layout_new_password">
<EditText <EditText
android:id="@+id/text_confirm_password" android:id="@+id/text_confirm_password"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -47,12 +46,13 @@ ...@@ -47,12 +46,13 @@
android:id="@+id/view_loading" android:id="@+id/view_loading"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:visibility="visible"
android:visibility="gone" android:visibility="gone"
app:indicatorColor="@color/colorBlack" app:indicatorColor="@color/colorBlack"
app:indicatorName="BallPulseIndicator" app:indicatorName="BallPulseIndicator"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/> tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
android:paddingEnd="@dimen/screen_edge_left_and_right_padding" android:paddingEnd="@dimen/screen_edge_left_and_right_padding"
android:paddingBottom="@dimen/message_item_top_and_bottom_padding"> android:paddingBottom="@dimen/message_item_top_and_bottom_padding">
<Button <android.widget.Button
android:id="@+id/button_message_reply" android:id="@+id/button_message_reply"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
android:background="@drawable/style_attachment_options" android:background="@drawable/style_attachment_options"
android:orientation="vertical"> android:orientation="vertical">
<Button <android.widget.Button
android:id="@+id/button_take_a_photo" android:id="@+id/button_take_a_photo"
style="?android:attr/borderlessButtonStyle" style="?android:attr/borderlessButtonStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
android:gravity="start|center" android:gravity="start|center"
android:text="@string/action_take_a_photo" /> android:text="@string/action_take_a_photo" />
<Button <android.widget.Button
android:id="@+id/button_attach_a_file" android:id="@+id/button_attach_a_file"
style="?android:attr/borderlessButtonStyle" style="?android:attr/borderlessButtonStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
android:gravity="start|center" android:gravity="start|center"
android:text="@string/action_attach_a_files" /> android:text="@string/action_attach_a_files" />
<Button <android.widget.Button
android:id="@+id/button_drawing" android:id="@+id/button_drawing"
style="?android:attr/borderlessButtonStyle" style="?android:attr/borderlessButtonStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/divider" /> app:layout_constraintTop_toBottomOf="@+id/divider" />
<Button <android.widget.Button
android:id="@+id/button_join_chat" android:id="@+id/button_join_chat"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="45dp" android:layout_height="45dp"
...@@ -59,13 +59,12 @@ ...@@ -59,13 +59,12 @@
app:layout_constraintTop_toBottomOf="@+id/divider"> app:layout_constraintTop_toBottomOf="@+id/divider">
<ImageButton <ImageButton
android:id="@+id/button_add_reaction" android:id="@+id/button_add_reaction_or_show_keyboard"
android:layout_width="32dp" android:layout_width="32dp"
android:layout_height="32dp" android:layout_height="32dp"
android:layout_gravity="bottom" android:layout_gravity="bottom"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
android:background="?attr/selectableItemBackgroundBorderless" android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/msg_content_description_show_attachment_options"
android:src="@drawable/ic_reaction_24dp" /> android:src="@drawable/ic_reaction_24dp" />
<chat.rocket.android.emoji.ComposerEditText <chat.rocket.android.emoji.ComposerEditText
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
android:background="@drawable/style_attachment_options" android:background="@drawable/style_attachment_options"
android:orientation="vertical"> android:orientation="vertical">
<Button <android.widget.Button
android:id="@+id/button_open_gallery" android:id="@+id/button_open_gallery"
style="?android:attr/borderlessButtonStyle" style="?android:attr/borderlessButtonStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
android:gravity="start|center" android:gravity="start|center"
android:text="@string/action_select_photo_from_gallery" /> android:text="@string/action_select_photo_from_gallery" />
<Button <android.widget.Button
android:id="@+id/button_take_a_photo" android:id="@+id/button_take_a_photo"
style="?android:attr/borderlessButtonStyle" style="?android:attr/borderlessButtonStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
android:gravity="start|center" android:gravity="start|center"
android:text="@string/action_take_a_photo" /> android:text="@string/action_take_a_photo" />
<Button <android.widget.Button
android:id="@+id/button_reset_avatar" android:id="@+id/button_reset_avatar"
style="?android:attr/borderlessButtonStyle" style="?android:attr/borderlessButtonStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
<item <item
android:id="@+id/action_sort" android:id="@+id/action_sort"
android:icon="@drawable/ic_sort" android:icon="@drawable/ic_sort"
android:title="@string/menu_chatroom_sort" android:title="@string/msg_sort"
app:showAsAction="ifRoom" /> app:showAsAction="ifRoom" />
</menu> </menu>
This diff is collapsed.
...@@ -146,7 +146,7 @@ ...@@ -146,7 +146,7 @@
<string name="msg_delete_description">Seguro que quieres borrar este mensaje</string> <string name="msg_delete_description">Seguro que quieres borrar este mensaje</string>
<string name="msg_no_search_found">No se han encontrado resultados</string> <string name="msg_no_search_found">No se han encontrado resultados</string>
<string name="msg_welcome_to_rocket_chat">Welcome to Rocket.Chat</string> <!-- TODO Add translation --> <string name="msg_welcome_to_rocket_chat">Welcome to Rocket.Chat</string> <!-- TODO Add translation -->
<string name="msg_team_communication">Open Source Communication</string> <!-- TODO Add translation --> <string name="msg_team_communication">Team Communication</string> <!-- TODO Translate -->
<string name="msg_login_with_email">Login with <b>e-mail</b></string> <!-- TODO Add translation --> <string name="msg_login_with_email">Login with <b>e-mail</b></string> <!-- TODO Add translation -->
<string name="msg_create_account">Create an account</string> <!-- TODO Add translation --> <string name="msg_create_account">Create an account</string> <!-- TODO Add translation -->
<string name="msg_continue_with_facebook">Continue with <b>Facebook</b></string> <!-- TODO Add translation --> <string name="msg_continue_with_facebook">Continue with <b>Facebook</b></string> <!-- TODO Add translation -->
...@@ -178,7 +178,8 @@ ...@@ -178,7 +178,8 @@
<string name="msg_no_topic">No topic added</string> <!-- TODO Add translation --> <string name="msg_no_topic">No topic added</string> <!-- TODO Add translation -->
<string name="msg_no_announcement">No announcement added</string> <!-- TODO Add translation --> <string name="msg_no_announcement">No announcement added</string> <!-- TODO Add translation -->
<string name="msg_no_description">No description added</string> <!-- TODO Add translation --> <string name="msg_no_description">No description added</string> <!-- TODO Add translation -->
<string name="msg_unable_to_update_password">Unable to update password. Error message: %1$s</string> <!-- TODO - Add proper translation -->
<string name="msg_password_updated_successfully">Password updated successfully</string> <!-- TODO - Add proper translation -->
<plurals name="msg_reacted_with_"> <plurals name="msg_reacted_with_">
<item quantity="one">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation --> <item quantity="one">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation -->
<item quantity="other">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation --> <item quantity="other">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation -->
...@@ -304,13 +305,12 @@ ...@@ -304,13 +305,12 @@
<string name="alert_title_default_skin_tone">Tono de piel predeterminado</string> <string name="alert_title_default_skin_tone">Tono de piel predeterminado</string>
<!-- Sorting and grouping--> <!-- Sorting and grouping-->
<string name="menu_chatroom_sort">Ordenar</string> <string name="msg_sort">Ordenar</string>
<string name="dialog_sort_title">Ordenar por</string> <string name="dialog_sort_title">Ordenar por</string>
<string name="dialog_sort_by_alphabet">Alfabético</string> <string name="dialog_sort_by_alphabet">Alfabético</string>
<string name="dialog_sort_by_activity">Actividad</string> <string name="dialog_sort_by_activity">Actividad</string>
<string name="dialog_group_by_type">Agrupar por tipo</string> <string name="dialog_group_by_type">Agrupar por tipo</string>
<string name="dialog_group_favourites">Agrupar favoritos</string> <string name="dialog_group_favourites">Agrupar favoritos</string>
<string name="dialog_button_done">Done</string><!-- TODO Add translation -->
<string name="chatroom_header">Cabezazo</string> <string name="chatroom_header">Cabezazo</string>
<!--ChatRooms Headers--> <!--ChatRooms Headers-->
......
...@@ -150,7 +150,7 @@ ...@@ -150,7 +150,7 @@
<string name="msg_delete_message">Supprimer Message</string> <string name="msg_delete_message">Supprimer Message</string>
<string name="msg_delete_description">Êtes-vous sûr de vouloir supprimer ce message</string> <string name="msg_delete_description">Êtes-vous sûr de vouloir supprimer ce message</string>
<string name="msg_welcome_to_rocket_chat">Welcome to Rocket.Chat</string> <!-- TODO Add translation --> <string name="msg_welcome_to_rocket_chat">Welcome to Rocket.Chat</string> <!-- TODO Add translation -->
<string name="msg_team_communication">Open Source Communication</string> <!-- TODO Add translation --> <string name="msg_team_communication">Team Communication</string> <!-- TODO Translate -->
<string name="msg_login_with_email">Login with <b>e-mail</b></string> <!-- TODO Add translation --> <string name="msg_login_with_email">Login with <b>e-mail</b></string> <!-- TODO Add translation -->
<string name="msg_create_account">Create an account</string> <!-- TODO Add translation --> <string name="msg_create_account">Create an account</string> <!-- TODO Add translation -->
<string name="msg_continue_with_facebook">Continue with <b>Facebook</b></string> <!-- TODO Add translation --> <string name="msg_continue_with_facebook">Continue with <b>Facebook</b></string> <!-- TODO Add translation -->
...@@ -170,7 +170,8 @@ ...@@ -170,7 +170,8 @@
<string name="msg_no_topic">No topic added</string> <!-- TODO Add translation --> <string name="msg_no_topic">No topic added</string> <!-- TODO Add translation -->
<string name="msg_no_announcement">No announcement added</string> <!-- TODO Add translation --> <string name="msg_no_announcement">No announcement added</string> <!-- TODO Add translation -->
<string name="msg_no_description">No description added</string> <!-- TODO Add translation --> <string name="msg_no_description">No description added</string> <!-- TODO Add translation -->
<string name="msg_unable_to_update_password">Unable to update password. Error message: %1$s</string> <!-- TODO - Add proper translation -->
<string name="msg_password_updated_successfully">Password updated successfully</string> <!-- TODO - Add proper translation -->
<plurals name="msg_reacted_with_"> <plurals name="msg_reacted_with_">
<item quantity="one">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation --> <item quantity="one">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation -->
<item quantity="other">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation --> <item quantity="other">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation -->
...@@ -309,13 +310,12 @@ ...@@ -309,13 +310,12 @@
<string name="alert_title_default_skin_tone">Tonalité de peau par défaut</string> <string name="alert_title_default_skin_tone">Tonalité de peau par défaut</string>
<!-- Sorting and grouping--> <!-- Sorting and grouping-->
<string name="menu_chatroom_sort">Trier</string> <string name="msg_sort">Trier</string>
<string name="dialog_sort_title">Trier par</string> <string name="dialog_sort_title">Trier par</string>
<string name="dialog_sort_by_alphabet">Alphabétique</string> <string name="dialog_sort_by_alphabet">Alphabétique</string>
<string name="dialog_sort_by_activity">Activité</string> <string name="dialog_sort_by_activity">Activité</string>
<string name="dialog_group_by_type">Grouper par type</string> <string name="dialog_group_by_type">Grouper par type</string>
<string name="dialog_group_favourites">Grouper favoris</string> <string name="dialog_group_favourites">Grouper favoris</string>
<string name="dialog_button_done">Ok</string>
<string name="chatroom_header">Entête</string> <string name="chatroom_header">Entête</string>
<!--ChatRooms Headers--> <!--ChatRooms Headers-->
......
...@@ -152,7 +152,7 @@ ...@@ -152,7 +152,7 @@
<string name="msg_delete_message">संदेश को हटाएं</string> <string name="msg_delete_message">संदेश को हटाएं</string>
<string name="msg_delete_description">क्या आप निश्चित रूप से यह संदेश हटाना चाहते हैं</string> <string name="msg_delete_description">क्या आप निश्चित रूप से यह संदेश हटाना चाहते हैं</string>
<string name="msg_welcome_to_rocket_chat">Rocket.Chat में आपका स्वागत है</string> <string name="msg_welcome_to_rocket_chat">Rocket.Chat में आपका स्वागत है</string>
<string name="msg_team_communication">ओपन सोर्स कम्युनिकेशन</string> <string name="msg_team_communication">Team Communication</string> <!-- TODO Translate -->
<string name="msg_login_with_email">ई-मेल के साथ लॉगिन करें</string> <string name="msg_login_with_email">ई-मेल के साथ लॉगिन करें</string>
<string name="msg_create_account">खाता बनाएं</string> <string name="msg_create_account">खाता बनाएं</string>
<string name="msg_continue_with_facebook"><b>Facebook</b> के साथ जारी रखें</string> <string name="msg_continue_with_facebook"><b>Facebook</b> के साथ जारी रखें</string>
...@@ -184,11 +184,12 @@ ...@@ -184,11 +184,12 @@
<string name="msg_no_topic">कोई विषय नहीं जोड़ा गया</string> <string name="msg_no_topic">कोई विषय नहीं जोड़ा गया</string>
<string name="msg_no_announcement">कोई घोषणा नहीं जोड़ा गया</string> <string name="msg_no_announcement">कोई घोषणा नहीं जोड़ा गया</string>
<string name="msg_no_description">कोई विवरण नहीं जोड़ा गया</string> <string name="msg_no_description">कोई विवरण नहीं जोड़ा गया</string>
<string name="msg_unable_to_update_password">पासवर्ड अपडेट करने में असमर्थ। त्रुटि संदेश: %1$s</string>
<string name="msg_password_updated_successfully">पासवर्ड सफलतापूर्वक अपडेट किया गया</string>
<plurals name="msg_reacted_with_"> <plurals name="msg_reacted_with_">
<item quantity="one">% 1 $ s ने% 2 $ %d s के साथ प्रतिक्रिया व्यक्त की</item> <item quantity="one">%1$s ने %2$s के साथ प्रतिक्रिया व्यक्त की</item>
<item quantity="few">% 1 $ s ने% 2 $ s के साथ प्रतिक्रिया व्यक्त की</item> <item quantity="few">%1$s ने %2$s के साथ प्रतिक्रिया व्यक्त की</item>
<item quantity="many">% 1 $ s ने% 2 $ s के साथ प्रतिक्रिया व्यक्त की</item> <item quantity="many">%1$s ने %2$s के साथ प्रतिक्रिया व्यक्त की</item>
</plurals> </plurals>
<!-- Preferences messages --> <!-- Preferences messages -->
...@@ -227,8 +228,7 @@ ...@@ -227,8 +228,7 @@
<string name="action_title_editing">संपादन संदेश</string> <string name="action_title_editing">संपादन संदेश</string>
<string name="action_msg_add_reaction">प्रतिक्रिया जोड़ें</string> <string name="action_msg_add_reaction">प्रतिक्रिया जोड़ें</string>
<string name="action_msg_copy_permalink">परमालिंक कॉपी करें</string> <string name="action_msg_copy_permalink">परमालिंक कॉपी करें</string>
<!-- TODO - Add proper translation --> <string name="action_msg_report">रिपोर्ट</string>
<string name="action_msg_report">Report</string>
<!-- Permission messages --> <!-- Permission messages -->
<string name="permission_editing_not_allowed">संपादन की अनुमति नहीं है</string> <string name="permission_editing_not_allowed">संपादन की अनुमति नहीं है</string>
...@@ -310,13 +310,12 @@ ...@@ -310,13 +310,12 @@
<string name="alert_title_default_skin_tone">डिफ़ॉल्ट त्वचा टोन</string> <string name="alert_title_default_skin_tone">डिफ़ॉल्ट त्वचा टोन</string>
<!-- Sorting and grouping--> <!-- Sorting and grouping-->
<string name="menu_chatroom_sort">क्रम</string> <string name="msg_sort">क्रम</string>
<string name="dialog_sort_title">द्वारा सॉर्ट करें</string> <string name="dialog_sort_title">द्वारा सॉर्ट करें</string>
<string name="dialog_sort_by_alphabet">वर्णानुक्रम</string> <string name="dialog_sort_by_alphabet">वर्णानुक्रम</string>
<string name="dialog_sort_by_activity">गतिविधि</string> <string name="dialog_sort_by_activity">गतिविधि</string>
<string name="dialog_group_by_type">प्रकार के आधार पर समूह</string> <string name="dialog_group_by_type">प्रकार के आधार पर समूह</string>
<string name="dialog_group_favourites">पसंदीदा समूह</string> <string name="dialog_group_favourites">पसंदीदा समूह</string>
<string name="dialog_button_done">पूर्ण</string>
<string name="chatroom_header">हैडर</string> <string name="chatroom_header">हैडर</string>
<!--ChatRooms Headers--> <!--ChatRooms Headers-->
...@@ -337,13 +336,13 @@ ...@@ -337,13 +336,13 @@
<string name="message_room_changed_privacy">%2$s ने रूम का प्रकार बदलकर %1$s किया </string> <string name="message_room_changed_privacy">%2$s ने रूम का प्रकार बदलकर %1$s किया </string>
<!-- User Details --> <!-- User Details -->
<string name="message">Message</string> <!-- TODO - Add proper translation --> <string name="message">संदेश</string>
<string name="timezone">Timezone</string> <!-- TODO - Add proper translation --> <string name="timezone">समय क्षेत्र</string>
<string name="error_opening_dm">Something went wrong while we were creating this conversation…</string> <!-- TODO - Add proper translation --> <string name="error_opening_dm">जब हम इस बातचीत को बना रहे थे तो कुछ गड़बड़ हुई …</string>
<string name="retry">Retry</string> <!-- TODO - Add proper translation --> <string name="retry">पुन: प्रयास करें</string>
<!-- Report --> <!-- Report -->
<string name="submit">Submit</string> <!-- TODO - Add proper translation --> <string name="submit">जमा करें</string>
<string name="required">*required</string> <!-- TODO - Add proper translation --> <string name="required">* आवश्यक</string>
<string name="report_sent">Your report has been sent!</string> <string name="report_sent">आपकी रिपोर्ट भेज दी गई है!</string>
</resources> </resources>
...@@ -22,9 +22,9 @@ ...@@ -22,9 +22,9 @@
<string name="title_update_profile">Aggiorna Profilo</string> <string name="title_update_profile">Aggiorna Profilo</string>
<string name="title_about">Informazioni</string> <string name="title_about">Informazioni</string>
<string name="title_create_channel">Crea Canale</string> <string name="title_create_channel">Crea Canale</string>
<string name="title_licence">Licence</string> <!-- TODO ADD translation --> <string name="title_licence">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">Channel Details</string> <!-- TODO add translation --> <string name="title_channel_details">Allegare un file</string>
<string name="title_topic">Argomento</string> <string name="title_topic">Argomento</string>
<string name="title_announcement">Annuncio</string> <string name="title_announcement">Annuncio</string>
<string name="title_description">Descrizione</string> <string name="title_description">Descrizione</string>
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
<string name="action_create_channel">Crea canale</string> <string name="action_create_channel">Crea canale</string>
<string name="action_create">Crea</string> <string name="action_create">Crea</string>
<string name="action_logout">Disconnettersi</string> <string name="action_logout">Disconnettersi</string>
<string name="action_attach_a_files">Attach a file</string> <!-- TODO ADD translation --> <string name="action_attach_a_files">Ceangail comhad</string>
<string name="action_confirm_password">Conferma Cambio Password</string> <string name="action_confirm_password">Conferma Cambio Password</string>
<string name="action_join_chat">Iscriviti alla stanza</string> <string name="action_join_chat">Iscriviti alla stanza</string>
<string name="action_add_account">Aggiungi utente</string> <string name="action_add_account">Aggiungi utente</string>
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
<string name="action_drawing">Disegno</string> <string name="action_drawing">Disegno</string>
<string name="action_save_to_gallery">Salva in galleria</string> <string name="action_save_to_gallery">Salva in galleria</string>
<string name="action_select_photo_from_gallery">Seleziona foto dalla galleria</string> <string name="action_select_photo_from_gallery">Seleziona foto dalla galleria</string>
<string name="action_take_a_photo">Take a photo</string> <!-- TODO ADD translation --> <string name="action_take_a_photo">Scatta una foto</string>
<string name="action_reset_avatar">Reimposta avatar</string> <string name="action_reset_avatar">Reimposta avatar</string>
<string name="action_connect_server">Collegati a un server</string> <string name="action_connect_server">Collegati a un server</string>
<string name="action_join_community">Entra nella community</string> <string name="action_join_community">Entra nella community</string>
...@@ -62,13 +62,13 @@ ...@@ -62,13 +62,13 @@
<!-- Settings List --> <!-- Settings List -->
<string-array name="settings_actions"> <string-array name="settings_actions">
<item name="item_preferences">Preferences</item> <!-- TODO Add translation --> <item name="item_preferences">Preferenze</item>
<item name="item_password">Change password</item> <!-- TODO Add translation --> <item name="item_password">Cambia password</item>
<item name="item_share_app">Share app</item> <!-- TODO Add translation --> <item name="item_share_app">Condividi app</item>
<item name="item_rate_us">Rate us</item> <!-- TODO Add translation --> <item name="item_rate_us">Votaci</item>
<item name="item_contact_us">Contact us</item> <!-- TODO Add translation --> <item name="item_contact_us">Contattaci</item>
<item name="item_licence">Licence</item> <!-- TODO Add translation --> <item name="item_licence">Licenza</item>
<item name="item_about">About</item> <!-- TODO Add translation --> <item name="item_about">Di</item>
</string-array> </string-array>
<!-- Regular information messages --> <!-- Regular information messages -->
...@@ -146,7 +146,7 @@ ...@@ -146,7 +146,7 @@
<string name="msg_send">Inviare</string> <string name="msg_send">Inviare</string>
<string name="msg_sent_attachment">Inviato allegato</string> <string name="msg_sent_attachment">Inviato allegato</string>
<string name="msg_welcome_to_rocket_chat">Benvenuto in Rocket.Chat </string> <string name="msg_welcome_to_rocket_chat">Benvenuto in Rocket.Chat </string>
<string name="msg_team_communication">Team Communication</string> <string name="msg_team_communication">Team Communication</string> <!-- TODO Translate -->
<string name="msg_login_with_email">Accedi con <b>e-mail</b></string> <string name="msg_login_with_email">Accedi con <b>e-mail</b></string>
<string name="msg_create_account">Crea un utente</string> <string name="msg_create_account">Crea un utente</string>
<string name="msg_continue_with_facebook">Continua con <b>Facebook</b></string> <string name="msg_continue_with_facebook">Continua con <b>Facebook</b></string>
...@@ -158,12 +158,13 @@ ...@@ -158,12 +158,13 @@
<string name="msg_two_factor_authentication">Autenticazione a 2 fattori (2FA)</string> <string name="msg_two_factor_authentication">Autenticazione a 2 fattori (2FA)</string>
<string name="msg__your_2fa_code">Qual è il tuo codice 2FA ?</string> <string name="msg__your_2fa_code">Qual è il tuo codice 2FA ?</string>
<string name="msg_permalink_copied">Permalink copiato</string> <string name="msg_permalink_copied">Permalink copiato</string>
<string name="msg_no_topic">No topic added</string> <!-- TODO Add translation --> <string name="msg_no_topic">Nessun argomento aggiunto</string>
<string name="msg_no_announcement">No announcement added</string> <!-- TODO Add translation --> <string name="msg_no_announcement">Nessun annuncio aggiunto</string>
<string name="msg_no_description">No description added</string> <!-- TODO Add translation --> <string name="msg_no_description">Nessuna descrizione aggiunta</string>
<string name="msg_send_email">Send email</string> <string name="msg_send_email">Invia una email</string>
<string name="msg_android_app_support">Android app support</string> <string name="msg_android_app_support">Supporto per le app Android</string>
<string name="msg_unable_to_update_password">Unable to update password. Error message: %1$s</string> <!-- TODO - Add proper translation -->
<string name="msg_password_updated_successfully">Password updated successfully</string> <!-- TODO - Add proper translation -->
<plurals name="msg_reacted_with_"> <plurals name="msg_reacted_with_">
<item quantity="one">%1$s ha reagito con %2$s</item> <item quantity="one">%1$s ha reagito con %2$s</item>
<item quantity="other">%1$s ha reagito con %2$s</item> <item quantity="other">%1$s ha reagito con %2$s</item>
...@@ -223,8 +224,7 @@ ...@@ -223,8 +224,7 @@
<string name="action_title_editing">Modifica messaggio</string> <string name="action_title_editing">Modifica messaggio</string>
<string name="action_msg_add_reaction">Aggiungi reazione</string> <string name="action_msg_add_reaction">Aggiungi reazione</string>
<string name="action_msg_copy_permalink">Copia permalink</string> <string name="action_msg_copy_permalink">Copia permalink</string>
<!-- TODO - Add proper translation --> <string name="action_msg_report">Resoconto</string>
<string name="action_msg_report">Report</string>
<!-- Permission messages --> <!-- Permission messages -->
<string name="permission_editing_not_allowed">La modifica non è consentita</string> <string name="permission_editing_not_allowed">La modifica non è consentita</string>
...@@ -306,13 +306,12 @@ ...@@ -306,13 +306,12 @@
<string name="alert_title_default_skin_tone">Default skin tone</string> <string name="alert_title_default_skin_tone">Default skin tone</string>
<!-- Sorting and grouping--> <!-- Sorting and grouping-->
<string name="menu_chatroom_sort">Ordinare</string> <string name="msg_sort">Ordinare</string>
<string name="dialog_sort_title">Ordinare per</string> <string name="dialog_sort_title">Ordinare per</string>
<string name="dialog_sort_by_alphabet">Alfabeto</string> <string name="dialog_sort_by_alphabet">Alfabeto</string>
<string name="dialog_sort_by_activity">Attività</string> <string name="dialog_sort_by_activity">Attività</string>
<string name="dialog_group_by_type">Raggruppa per tipo</string> <string name="dialog_group_by_type">Raggruppa per tipo</string>
<string name="dialog_group_favourites">Raggruppa preferiti</string> <string name="dialog_group_favourites">Raggruppa preferiti</string>
<string name="dialog_button_done">Fatto</string>
<string name="chatroom_header">Intestazione</string> <string name="chatroom_header">Intestazione</string>
<!--ChatRooms Headers--> <!--ChatRooms Headers-->
...@@ -332,13 +331,13 @@ ...@@ -332,13 +331,13 @@
<string name="message_room_changed_privacy">Il tipo di stanza è cambiato in: %1$s da %2$s</string> <string name="message_room_changed_privacy">Il tipo di stanza è cambiato in: %1$s da %2$s</string>
<!-- User Details --> <!-- User Details -->
<string name="message">Message</string> <!-- TODO - Add proper translation --> <string name="message">Messaggio</string>
<string name="timezone">Timezone</string> <!-- TODO - Add proper translation --> <string name="timezone">Fuso Orario</string>
<string name="error_opening_dm">Something went wrong while we were creating this conversation…</string> <!-- TODO - Add proper translation --> <string name="error_opening_dm">È successo qualcosa di sbagliato durante la creazione di questa conversazione...</string>
<string name="retry">Retry</string> <!-- TODO - Add proper translation --> <string name="retry">Riprova</string>
<!-- Report --> <!-- Report -->
<string name="submit">Submit</string> <!-- TODO - Add proper translation --> <string name="submit">Invia</string>
<string name="required">*required</string> <!-- TODO - Add proper translation --> <string name="required">*necessario</string>
<string name="report_sent">Your report has been sent!</string> <!-- TODO - Add proper translation --> <string name="report_sent">Il tuo resoconto è stato inviato!</string>
</resources> </resources>
...@@ -151,7 +151,7 @@ ...@@ -151,7 +151,7 @@
<string name="msg_send">送信</string> <string name="msg_send">送信</string>
<string name="msg_sent_attachment">添付ファイルを送信しました</string> <string name="msg_sent_attachment">添付ファイルを送信しました</string>
<string name="msg_welcome_to_rocket_chat">Rocket.Chatへようこそ</string> <string name="msg_welcome_to_rocket_chat">Rocket.Chatへようこそ</string>
<string name="msg_team_communication">チームコミュニケーション</string> <string name="msg_team_communication">Team Communication</string> <!-- TODO Translate -->
<string name="msg_login_with_email"><b>e-mail</b>でログイン</string> <string name="msg_login_with_email"><b>e-mail</b>でログイン</string>
<string name="msg_create_account">アカウントを作成</string> <string name="msg_create_account">アカウントを作成</string>
<string name="msg_continue_with_facebook"><b>Facebook</b>でログイン</string> <string name="msg_continue_with_facebook"><b>Facebook</b>でログイン</string>
...@@ -168,10 +168,11 @@ ...@@ -168,10 +168,11 @@
<string name="msg_no_topic">No topic added</string> <!-- TODO Add translation --> <string name="msg_no_topic">No topic added</string> <!-- TODO Add translation -->
<string name="msg_no_announcement">No announcement added</string> <!-- TODO Add translation --> <string name="msg_no_announcement">No announcement added</string> <!-- TODO Add translation -->
<string name="msg_no_description">No description added</string> <!-- TODO Add translation --> <string name="msg_no_description">No description added</string> <!-- TODO Add translation -->
<!-- TODO - Add proper translation --> <string name="msg_unable_to_update_password">Unable to update password. Error message: %1$s</string> <!-- TODO - Add proper translation -->
<string name="msg_password_updated_successfully">Password updated successfully</string> <!-- TODO - Add proper translation -->
<plurals name="msg_reacted_with_"> <plurals name="msg_reacted_with_">
<item quantity="one">%1$s reacted with %2$s</item> <item quantity="one">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation -->
<item quantity="other">%1$s reacted with %2$s</item> <item quantity="other">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation -->
</plurals> </plurals>
<!-- Create channel messages --> <!-- Create channel messages -->
...@@ -311,14 +312,13 @@ ...@@ -311,14 +312,13 @@
<string name="alert_title_default_skin_tone">デフォルトスキントークン</string> <string name="alert_title_default_skin_tone">デフォルトスキントークン</string>
<!-- Sorting and grouping--> <!-- Sorting and grouping-->
<string name="menu_chatroom_sort">ソート</string> <string name="msg_sort">ソート</string>
<string name="dialog_sort_title">ソート</string> <string name="dialog_sort_title">ソート</string>
<string name="dialog_sort_by_alphabet">アルファベット順</string> <string name="dialog_sort_by_alphabet">アルファベット順</string>
<string name="dialog_sort_by_activity">アクティビティ順</string> <string name="dialog_sort_by_activity">アクティビティ順</string>
<string name="dialog_group_by_type">グループ別</string> <string name="dialog_group_by_type">グループ別</string>
<string name="dialog_group_favourites">お気に入りのグループ</string> <string name="dialog_group_favourites">お気に入りのグループ</string>
<string name="chatroom_header">ヘッダ</string> <string name="chatroom_header">ヘッダ</string>
<string name="dialog_button_done">完了</string>
<!--ChatRooms Headers--> <!--ChatRooms Headers-->
......
...@@ -22,9 +22,9 @@ ...@@ -22,9 +22,9 @@
<string name="title_update_profile">Editar perfil</string> <string name="title_update_profile">Editar perfil</string>
<string name="title_about">Sobre</string> <string name="title_about">Sobre</string>
<string name="title_create_channel">Criar chat</string> <string name="title_create_channel">Criar chat</string>
<string name="title_licence">Licença</string> <!-- TODO Add translation --> <string name="title_licence">Licença</string>
<string name="title_are_you_sure">Você tem certeza?</string> <string name="title_are_you_sure">Você tem certeza?</string>
<string name="title_channel_details">Channel Details</string> <!-- TODO add translation --> <string name="title_channel_details">Detalhes do canal</string>
<string name="title_topic">Tópico</string> <string name="title_topic">Tópico</string>
<string name="title_announcement">Anúncio</string> <string name="title_announcement">Anúncio</string>
<string name="title_description">Descrição</string> <string name="title_description">Descrição</string>
...@@ -150,27 +150,30 @@ ...@@ -150,27 +150,30 @@
<string name="msg_send">Enviar</string> <string name="msg_send">Enviar</string>
<string name="msg_delete_message">Remove mensagem</string> <string name="msg_delete_message">Remove mensagem</string>
<string name="msg_delete_description">Tem certeza que quer apagar esta mensagem?</string> <string name="msg_delete_description">Tem certeza que quer apagar esta mensagem?</string>
<string name="msg_welcome_to_rocket_chat">Welcome to Rocket.Chat</string> <!-- TODO Add translation --> <string name="msg_welcome_to_rocket_chat">Bem-vindo ao Rocket.Chat</string>
<string name="msg_team_communication">Open Source Communication</string> <!-- TODO Add translation --> <string name="msg_team_communication">Comunicação para equipes</string>
<string name="msg_login_with_email">Login with <b>e-mail</b></string> <!-- TODO Add translation --> <string name="msg_login_with_email">Fazer login com <b>e-mail</b></string>
<string name="msg_create_account">Create an account</string> <!-- TODO Add translation --> <string name="msg_create_account">Criar conta</string>
<string name="msg_continue_with_facebook">Continue with <b>Facebook</b></string> <!-- TODO Add translation --> <string name="msg_continue_with_facebook">Continuar com <b>Facebook</b></string>
<string name="msg_continue_with_github">Continue with <b>Github</b></string> <!-- TODO Add translation --> <string name="msg_continue_with_github">Continuar com <b>Github</b></string>
<string name="msg_continue_with_google">Continue with <b>Google</b></string> <!-- TODO Add translation --> <string name="msg_continue_with_google">Continuar com <b>Google</b></string>
<string name="msg_continue_with_linkedin">Continue with <b>Linkedin</b></string> <!-- TODO Add translation --> <string name="msg_continue_with_linkedin">Continuar com <b>Linkedin</b></string>
<string name="msg_continue_with_gitlab">Continue with <b>GitLab</b></string> <!-- TODO Add translation --> <string name="msg_continue_with_gitlab">Continuar com <b>GitLab</b></string>
<string name="msg_continue_with_wordpress">Continue with <b>WordPress</b></string> <!-- TODO Add translation --> <string name="msg_continue_with_wordpress">Continuar com <b>WordPress</b></string>
<string name="msg_two_factor_authentication">Two-factor Authentication</string> <!-- TODO Add translation --> <string name="msg_two_factor_authentication">Autenticação de dois fatores</string>
<string name="msg__your_2fa_code">What’s your 2FA code?</string> <!-- TODO Add translation --> <string name="msg__your_2fa_code">Qual é o seu código da autenticação de dois fatores?</string>
<string name="msg_view_more">visualizar mais</string> <string name="msg_view_more">visualizar mais</string>
<string name="msg_view_less">visualizar menos</string> <string name="msg_view_less">visualizar menos</string>
<string name="msg_permalink_copied">Permalink copiado</string> <string name="msg_permalink_copied">Permalink copiado</string>
<string name="msg_send_email">Enviar e-mail</string> <string name="msg_send_email">Enviar e-mail</string>
<string name="msg_android_app_support">Suporte ao aplicativo Android</string> <string name="msg_android_app_support">Suporte ao aplicativo Android</string>
<string name="msg_muted_on_this_channel">Você está silenciado neste canal</string> <string name="msg_muted_on_this_channel">Você está silenciado neste canal</string>
<string name="msg_no_topic">No topic added</string> <!-- TODO Add translation --> <string name="msg_no_topic">Nenhum tópico adicionado</string>
<string name="msg_no_announcement">No announcement added</string> <!-- TODO Add translation --> <string name="msg_no_announcement">Nenhum anúncio adicionado</string>
<string name="msg_no_description">No description added</string> <!-- TODO Add translation --> <string name="msg_no_description">Nenhuma descrição adicionada</string>
<string name="msg_unable_to_update_password">Não foi possível atualizar a senha. Mensagem de erro: %1$s</string>
<string name="msg_password_updated_successfully">Senha alterada com sucesso</string>
<string name="msg_sort">Ordenar</string>
<plurals name="msg_reacted_with_"> <plurals name="msg_reacted_with_">
<item quantity="one">%1$s reagiu com %2$s</item> <item quantity="one">%1$s reagiu com %2$s</item>
<item quantity="other">%1$s reagiram com %2$s</item> <item quantity="other">%1$s reagiram com %2$s</item>
...@@ -192,7 +195,7 @@ ...@@ -192,7 +195,7 @@
<string name="msg_analytics_tracking">Rastreamento de análises</string> <string name="msg_analytics_tracking">Rastreamento de análises</string>
<string name="msg_send_analytics_tracking">Envie estatísticas anônimas para ajudar a melhorar este app</string> <string name="msg_send_analytics_tracking">Envie estatísticas anônimas para ajudar a melhorar este app</string>
<string name="msg_do_not_send_analytics_tracking">Não envie estatísticas anônimas para ajudar a melhorar este app</string> <string name="msg_do_not_send_analytics_tracking">Não envie estatísticas anônimas para ajudar a melhorar este app</string>
<string name="msg_not_applicable_since_it_is_a_foss_version">Not aplicável devido a versão do aplicativo ser FOSS</string> <!-- TODO Add translation --> <string name="msg_not_applicable_since_it_is_a_foss_version">Não aplicável devido a versão do aplicativo ser FOSS</string>
<!-- System messages --> <!-- System messages -->
<string name="message_room_name_changed">Nome da sala alterado para: %1$s por %2$s</string> <string name="message_room_name_changed">Nome da sala alterado para: %1$s por %2$s</string>
...@@ -217,29 +220,28 @@ ...@@ -217,29 +220,28 @@
<string name="action_msg_copy">Copiar</string> <string name="action_msg_copy">Copiar</string>
<string name="action_msg_quote">Citar</string> <string name="action_msg_quote">Citar</string>
<string name="action_msg_delete">Remover</string> <string name="action_msg_delete">Remover</string>
<string name="action_msg_pin">Pinar mensagem</string> <string name="action_msg_pin">Fixar mensagem</string>
<string name="action_msg_unpin">Despinar mensagem</string> <string name="action_msg_unpin">Desfixar mensagem</string>
<string name="action_msg_star">Favoritar mensagem</string> <string name="action_msg_star">Marcar como favorita</string>
<string name="action_msg_unstar">Desfavoritar messagem</string> <string name="action_msg_unstar">Desmarcar como favorita</string>
<string name="action_msg_share">Compartilhar</string> <string name="action_msg_share">Compartilhar</string>
<string name="action_title_editing">Editando mensagem</string> <string name="action_title_editing">Editando mensagem</string>
<string name="action_msg_add_reaction">Adicionar reação</string> <string name="action_msg_add_reaction">Adicionar reação</string>
<string name="action_msg_copy_permalink">Copiar permalink</string> <string name="action_msg_copy_permalink">Copiar permalink</string>
<!-- TODO - Add proper translation -->
<string name="action_msg_report">Reportar</string> <string name="action_msg_report">Reportar</string>
<!-- Permission messages --> <!-- Permission messages -->
<string name="permission_editing_not_allowed">Edição não permitida</string> <string name="permission_editing_not_allowed">Edição não permitida</string>
<string name="permission_deleting_not_allowed">Remoção não permitida</string> <string name="permission_deleting_not_allowed">Remoção não permitida</string>
<string name="permission_pinning_not_allowed">Pinagem não permitida</string> <string name="permission_pinning_not_allowed">Pinagem não permitida</string>
<string name="permission_starring_not_allowed">Favoritar não permitido</string> <string name="permission_starring_not_allowed">Marcar como favorita não permitido</string>
<!-- Search message --> <!-- Search message -->
<string name="title_search_message">Procurar mensagem</string> <string name="title_search_message">Procurar mensagem</string>
<!-- Favorite/Unfavorite chat room --> <!-- Favorite/Unfavorite chat room -->
<string name="title_favorite_chat">Favoritar canal</string> <string name="title_favorite_chat">Marcar canal como favorito</string>
<string name="title_unfavorite_chat">Desfavoritar canal</string> <string name="title_unfavorite_chat">Desmarcar canal como favorito</string>
<!-- Members List --> <!-- Members List -->
<string name="title_members_list">Membros</string> <string name="title_members_list">Membros</string>
...@@ -308,13 +310,11 @@ ...@@ -308,13 +310,11 @@
<string name="alert_title_default_skin_tone">Tom de pele padrão</string> <string name="alert_title_default_skin_tone">Tom de pele padrão</string>
<!-- Sorting and grouping--> <!-- Sorting and grouping-->
<string name="menu_chatroom_sort">Ordenar</string>
<string name="dialog_sort_title">Ordenar por</string> <string name="dialog_sort_title">Ordenar por</string>
<string name="dialog_sort_by_alphabet">Alfabeticamente</string> <string name="dialog_sort_by_alphabet">Alfabeticamente</string>
<string name="dialog_sort_by_activity">Atividade</string> <string name="dialog_sort_by_activity">Atividade</string>
<string name="dialog_group_by_type">Agrupar por tipo</string> <string name="dialog_group_by_type">Agrupar por tipo</string>
<string name="dialog_group_favourites">Grupos favoritos</string> <string name="dialog_group_favourites">Grupos favoritos</string>
<string name="dialog_button_done">Done</string><!-- TODO Add translation -->
<string name="chatroom_header">Cabeçalho</string> <string name="chatroom_header">Cabeçalho</string>
<!--ChatRooms Headers--> <!--ChatRooms Headers-->
......
...@@ -149,7 +149,7 @@ ...@@ -149,7 +149,7 @@
<string name="msg_channel_name">Название канала</string> <string name="msg_channel_name">Название канала</string>
<string name="msg_search">Поиск</string> <string name="msg_search">Поиск</string>
<string name="msg_welcome_to_rocket_chat">Rocket.Chat</string> <string name="msg_welcome_to_rocket_chat">Rocket.Chat</string>
<string name="msg_team_communication">Чат с открытым исходным кодом</string> <string name="msg_team_communication">Team Communication</string> <!-- TODO Translate -->
<string name="msg_login_with_email">Войти с помощью <b>e-mail</b></string> <string name="msg_login_with_email">Войти с помощью <b>e-mail</b></string>
<string name="msg_create_account">Создать аккаунт</string> <string name="msg_create_account">Создать аккаунт</string>
<string name="msg_continue_with_facebook">Войти с помощью <b>Facebook</b></string> <string name="msg_continue_with_facebook">Войти с помощью <b>Facebook</b></string>
...@@ -169,7 +169,8 @@ ...@@ -169,7 +169,8 @@
<string name="msg_send_email">Отправить e-mail</string> <string name="msg_send_email">Отправить e-mail</string>
<string name="msg_android_app_support">Поддержка Android-приложения</string> <string name="msg_android_app_support">Поддержка Android-приложения</string>
<string name="msg_muted_on_this_channel">Вы лишены дара речи на этом канале</string> <string name="msg_muted_on_this_channel">Вы лишены дара речи на этом канале</string>
<string name="msg_unable_to_update_password">Невозможно обновить пароль. Ошибка: %1$s</string>
<string name="msg_password_updated_successfully">Пароль успешно обновлен</string>
<plurals name="msg_reacted_with_"> <plurals name="msg_reacted_with_">
<item quantity="one">%1$s реагирует с %2$s</item> <item quantity="one">%1$s реагирует с %2$s</item>
<item quantity="few">%1$s реагируют с %2$s</item> <item quantity="few">%1$s реагируют с %2$s</item>
...@@ -189,7 +190,7 @@ ...@@ -189,7 +190,7 @@
<string name="msg_channel_created_successfully">Канал создан успешно</string> <string name="msg_channel_created_successfully">Канал создан успешно</string>
<!-- Preferences messages --> <!-- Preferences messages -->
<string name="msg_analytics_tracking">Отслеживание Analytics</string> <string name="msg_analytics_tracking">Отслеживание аналитики</string>
<string name="msg_send_analytics_tracking">Отправлять анонимную статистику для улучшения приложения.</string> <string name="msg_send_analytics_tracking">Отправлять анонимную статистику для улучшения приложения.</string>
<string name="msg_do_not_send_analytics_tracking">Не отправлять анонимную статистику для улучшения приложения</string> <string name="msg_do_not_send_analytics_tracking">Не отправлять анонимную статистику для улучшения приложения</string>
<string name="msg_not_applicable_since_it_is_a_foss_version">Не применимо, так как это FOSS версия</string> <string name="msg_not_applicable_since_it_is_a_foss_version">Не применимо, так как это FOSS версия</string>
...@@ -224,8 +225,7 @@ ...@@ -224,8 +225,7 @@
<string name="action_title_editing">Редактирование сообщения</string> <string name="action_title_editing">Редактирование сообщения</string>
<string name="action_msg_add_reaction">Отреагировать</string> <string name="action_msg_add_reaction">Отреагировать</string>
<string name="action_msg_copy_permalink">Копировать ссылку</string> <string name="action_msg_copy_permalink">Копировать ссылку</string>
<!-- TODO - Add proper translation --> <string name="action_msg_report">Пожаловаться</string>
<string name="action_msg_report">Report</string>
<!-- Permission messages --> <!-- Permission messages -->
<string name="permission_editing_not_allowed">Редактирование запрещено</string> <string name="permission_editing_not_allowed">Редактирование запрещено</string>
...@@ -307,13 +307,12 @@ ...@@ -307,13 +307,12 @@
<string name="alert_title_default_skin_tone">Тон кожи по умолчанию</string> <string name="alert_title_default_skin_tone">Тон кожи по умолчанию</string>
<!-- Sorting and grouping--> <!-- Sorting and grouping-->
<string name="menu_chatroom_sort">Сортировать</string> <string name="msg_sort">Сортировать</string>
<string name="dialog_sort_title">Сортировать по</string> <string name="dialog_sort_title">Сортировать по</string>
<string name="dialog_sort_by_alphabet">По алфавиту</string> <string name="dialog_sort_by_alphabet">По алфавиту</string>
<string name="dialog_sort_by_activity">По активности</string> <string name="dialog_sort_by_activity">По активности</string>
<string name="dialog_group_by_type">Группировать по типу</string> <string name="dialog_group_by_type">Группировать по типу</string>
<string name="dialog_group_favourites">Группировать избранное</string> <string name="dialog_group_favourites">Группировать избранное</string>
<string name="dialog_button_done">Ок</string>
<string name="chatroom_header">Заголовок</string> <string name="chatroom_header">Заголовок</string>
<!--ChatRooms Headers--> <!--ChatRooms Headers-->
...@@ -334,13 +333,13 @@ ...@@ -334,13 +333,13 @@
<string name="message_room_changed_privacy">Тип канала изменен на: %1$s пользователем %2$s</string> <string name="message_room_changed_privacy">Тип канала изменен на: %1$s пользователем %2$s</string>
<!-- User Details --> <!-- User Details -->
<string name="message">Message</string> <!--TODO - Add proper translation--> <string name="message">Сообщение</string>
<string name="timezone">Timezone</string> <!--TODO - Add proper translation--> <string name="timezone">Часовой поясe</string>
<string name="error_opening_dm">Something went wrong while we were creating this conversation…</string> <!-- TODO - Add proper translation --> <string name="error_opening_dm">При создании этого диалога что-то пошло не так...</string>
<string name="retry">Retry</string> <!-- TODO - Add proper translation --> <string name="retry">Повторить</string>
<!-- Report --> <!-- Report -->
<string name="submit">Submit</string> <!--TODO - Add proper translation--> <string name="submit">Отправить</string>
<string name="required">*required</string> <!--TODO - Add proper translation--> <string name="required">*требуется</string>
<string name="report_sent">Your report has been sent!</string> <!--TODO - Add proper translation--> <string name="report_sent">Ваша жалоба была отправлена!</string>
</resources> </resources>
...@@ -150,7 +150,7 @@ ...@@ -150,7 +150,7 @@
<string name="msg_send">Gönder</string> <string name="msg_send">Gönder</string>
<string name="msg_sent_attachment">Bir dosya eki gönderildi</string> <string name="msg_sent_attachment">Bir dosya eki gönderildi</string>
<string name="msg_welcome_to_rocket_chat">Welcome to Rocket.Chat</string> <!-- TODO Add translation --> <string name="msg_welcome_to_rocket_chat">Welcome to Rocket.Chat</string> <!-- TODO Add translation -->
<string name="msg_team_communication">Team Communication</string> <!-- TODO Add translation --> <string name="msg_team_communication">Team Communication</string> <!-- TODO Translate -->
<string name="msg_login_with_email">Login with <b>e-mail</b></string> <!-- TODO Add translation --> <string name="msg_login_with_email">Login with <b>e-mail</b></string> <!-- TODO Add translation -->
<string name="msg_create_account">Create an account</string> <!-- TODO Add translation --> <string name="msg_create_account">Create an account</string> <!-- TODO Add translation -->
<string name="msg_continue_with_facebook">Continue with <b>Facebook</b></string> <!-- TODO Add translation --> <string name="msg_continue_with_facebook">Continue with <b>Facebook</b></string> <!-- TODO Add translation -->
...@@ -185,7 +185,8 @@ ...@@ -185,7 +185,8 @@
<string name="msg_no_topic">No topic added</string> <!-- TODO Add translation --> <string name="msg_no_topic">No topic added</string> <!-- TODO Add translation -->
<string name="msg_no_announcement">No announcement added</string> <!-- TODO Add translation --> <string name="msg_no_announcement">No announcement added</string> <!-- TODO Add translation -->
<string name="msg_no_description">No description added</string> <!-- TODO Add translation --> <string name="msg_no_description">No description added</string> <!-- TODO Add translation -->
<string name="msg_unable_to_update_password">Unable to update password. Error message: %1$s</string> <!-- TODO - Add proper translation -->
<string name="msg_password_updated_successfully">Password updated successfully</string> <!-- TODO - Add proper translation -->
<plurals name="msg_reacted_with_"> <plurals name="msg_reacted_with_">
<item quantity="one">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation --> <item quantity="one">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation -->
<item quantity="other">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation --> <item quantity="other">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation -->
...@@ -311,13 +312,12 @@ ...@@ -311,13 +312,12 @@
<string name="alert_title_default_skin_tone">Varsayılan tasarım tonu</string> <string name="alert_title_default_skin_tone">Varsayılan tasarım tonu</string>
<!-- Sorting and grouping--> <!-- Sorting and grouping-->
<string name="menu_chatroom_sort">Sırala</string> <string name="msg_sort">Sırala</string>
<string name="dialog_sort_title">Sırala</string> <string name="dialog_sort_title">Sırala</string>
<string name="dialog_sort_by_alphabet">Alfabetik</string> <string name="dialog_sort_by_alphabet">Alfabetik</string>
<string name="dialog_sort_by_activity">Aktiviteye Göre</string> <string name="dialog_sort_by_activity">Aktiviteye Göre</string>
<string name="dialog_group_by_type">Türüne göre grupla</string> <string name="dialog_group_by_type">Türüne göre grupla</string>
<string name="dialog_group_favourites">Favorileri grupla</string> <string name="dialog_group_favourites">Favorileri grupla</string>
<string name="dialog_button_done">Tamam</string>
<string name="chatroom_header">Başlık</string> <string name="chatroom_header">Başlık</string>
<!--ChatRooms Headers--> <!--ChatRooms Headers-->
......
...@@ -168,7 +168,8 @@ ...@@ -168,7 +168,8 @@
<string name="msg_no_topic">No topic added</string> <!-- TODO Add translation --> <string name="msg_no_topic">No topic added</string> <!-- TODO Add translation -->
<string name="msg_no_announcement">No announcement added</string> <!-- TODO Add translation --> <string name="msg_no_announcement">No announcement added</string> <!-- TODO Add translation -->
<string name="msg_no_description">No description added</string> <!-- TODO Add translation --> <string name="msg_no_description">No description added</string> <!-- TODO Add translation -->
<string name="msg_unable_to_update_password">Unable to update password. Error message: %1$s</string> <!-- TODO - Add proper translation -->
<string name="msg_password_updated_successfully">Password updated successfully</string> <!-- TODO - Add proper translation -->
<plurals name="msg_reacted_with_"> <plurals name="msg_reacted_with_">
<item quantity="one">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation --> <item quantity="one">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation -->
<item quantity="few">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation --> <item quantity="few">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation -->
...@@ -307,13 +308,12 @@ ...@@ -307,13 +308,12 @@
<string name="alert_title_default_skin_tone">Тон шкіри за замовчуванням</string> <string name="alert_title_default_skin_tone">Тон шкіри за замовчуванням</string>
<!-- Sorting and grouping--> <!-- Sorting and grouping-->
<string name="menu_chatroom_sort">Сортувати</string> <string name="msg_sort">Сортувати</string>
<string name="dialog_sort_title">Сортувати за</string> <string name="dialog_sort_title">Сортувати за</string>
<string name="dialog_sort_by_alphabet">За алфавітом</string> <string name="dialog_sort_by_alphabet">За алфавітом</string>
<string name="dialog_sort_by_activity">За активністю</string> <string name="dialog_sort_by_activity">За активністю</string>
<string name="dialog_group_by_type">Групувати за типом</string> <string name="dialog_group_by_type">Групувати за типом</string>
<string name="dialog_group_favourites">Групувати обране</string> <string name="dialog_group_favourites">Групувати обране</string>
<string name="dialog_button_done">Ок</string>
<string name="chatroom_header">Заголовок</string> <string name="chatroom_header">Заголовок</string>
<!--ChatRooms Headers--> <!--ChatRooms Headers-->
......
...@@ -180,7 +180,8 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin ...@@ -180,7 +180,8 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string name="msg_no_description">No description added</string> <string name="msg_no_description">No description added</string>
<string name="msg_send_email">Send email</string> <string name="msg_send_email">Send email</string>
<string name="msg_android_app_support">Android app support</string> <string name="msg_android_app_support">Android app support</string>
<string name="msg_unable_to_update_password">Unable to update password. Error message: %1$s</string>
<string name="msg_password_updated_successfully">Password updated successfully</string>
<plurals name="msg_reacted_with_"> <plurals name="msg_reacted_with_">
<item quantity="one">%1$s reacted with %2$s</item> <item quantity="one">%1$s reacted with %2$s</item>
<item quantity="other">%1$s reacted with %2$s</item> <item quantity="other">%1$s reacted with %2$s</item>
...@@ -322,13 +323,12 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin ...@@ -322,13 +323,12 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string name="alert_title_default_skin_tone">Default skin tone</string> <string name="alert_title_default_skin_tone">Default skin tone</string>
<!-- Sorting and grouping--> <!-- Sorting and grouping-->
<string name="menu_chatroom_sort">Sort</string> <string name="msg_sort">Sort</string>
<string name="dialog_sort_title">Sort by</string> <string name="dialog_sort_title">Sort by</string>
<string name="dialog_sort_by_alphabet">Alphabetical</string> <string name="dialog_sort_by_alphabet">Alphabetical</string>
<string name="dialog_sort_by_activity">Activity</string> <string name="dialog_sort_by_activity">Activity</string>
<string name="dialog_group_by_type">Group by type</string> <string name="dialog_group_by_type">Group by type</string>
<string name="dialog_group_favourites">Group favourites</string> <string name="dialog_group_favourites">Group favourites</string>
<string name="dialog_button_done">Done</string>
<string name="chatroom_header">Header</string> <string name="chatroom_header">Header</string>
<!--ChatRooms Headers--> <!--ChatRooms Headers-->
......
<resources> <resources>
<!-- Base application theme. --> <!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- Customize your theme here. --> <!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
......
...@@ -25,9 +25,7 @@ import kotlinx.android.synthetic.main.dialog_skin_tone_chooser.view.* ...@@ -25,9 +25,7 @@ import kotlinx.android.synthetic.main.dialog_skin_tone_chooser.view.*
import kotlinx.coroutines.experimental.android.UI import kotlinx.coroutines.experimental.android.UI
import kotlinx.coroutines.experimental.launch import kotlinx.coroutines.experimental.launch
class EmojiKeyboardPopup(context: Context, view: View) : OverKeyboardPopupWindow(context, view) { class EmojiKeyboardPopup(context: Context, view: View) : OverKeyboardPopupWindow(context, view) {
private lateinit var viewPager: ViewPager private lateinit var viewPager: ViewPager
private lateinit var tabLayout: TabLayout private lateinit var tabLayout: TabLayout
private lateinit var searchView: View private lateinit var searchView: View
...@@ -84,7 +82,7 @@ class EmojiKeyboardPopup(context: Context, view: View) : OverKeyboardPopupWindow ...@@ -84,7 +82,7 @@ class EmojiKeyboardPopup(context: Context, view: View) : OverKeyboardPopupWindow
.setCancelable(true) .setCancelable(true)
.create() .create()
with (view) { with(view) {
image_view_default_tone.setOnClickListener { image_view_default_tone.setOnClickListener {
dialog.dismiss() dialog.dismiss()
changeSkinTone(Fitzpatrick.Default) changeSkinTone(Fitzpatrick.Default)
...@@ -138,7 +136,10 @@ class EmojiKeyboardPopup(context: Context, view: View) : OverKeyboardPopupWindow ...@@ -138,7 +136,10 @@ class EmojiKeyboardPopup(context: Context, view: View) : OverKeyboardPopupWindow
return when (tone) { return when (tone) {
Fitzpatrick.Default -> ContextCompat.getColor(context, R.color.tone_default) Fitzpatrick.Default -> ContextCompat.getColor(context, R.color.tone_default)
Fitzpatrick.LightTone -> ContextCompat.getColor(context, R.color.tone_light) Fitzpatrick.LightTone -> ContextCompat.getColor(context, R.color.tone_light)
Fitzpatrick.MediumLightTone -> ContextCompat.getColor(context, R.color.tone_medium_light) Fitzpatrick.MediumLightTone -> ContextCompat.getColor(
context,
R.color.tone_medium_light
)
Fitzpatrick.MediumTone -> ContextCompat.getColor(context, R.color.tone_medium) Fitzpatrick.MediumTone -> ContextCompat.getColor(context, R.color.tone_medium)
Fitzpatrick.MediumDarkTone -> ContextCompat.getColor(context, R.color.tone_medium_dark) Fitzpatrick.MediumDarkTone -> ContextCompat.getColor(context, R.color.tone_medium_dark)
Fitzpatrick.DarkTone -> ContextCompat.getColor(context, R.color.tone_dark) Fitzpatrick.DarkTone -> ContextCompat.getColor(context, R.color.tone_dark)
...@@ -151,7 +152,7 @@ class EmojiKeyboardPopup(context: Context, view: View) : OverKeyboardPopupWindow ...@@ -151,7 +152,7 @@ class EmojiKeyboardPopup(context: Context, view: View) : OverKeyboardPopupWindow
is EmojiKeyboardListener -> it is EmojiKeyboardListener -> it
else -> { else -> {
val fragments = (it as AppCompatActivity).supportFragmentManager.fragments val fragments = (it as AppCompatActivity).supportFragmentManager.fragments
if (fragments.size == 0 || !(fragments[0] is EmojiKeyboardListener)) { if (fragments.size == 0 || fragments[0] !is EmojiKeyboardListener) {
// Since the app can arrive in an inconsistent state at this point, do not throw // Since the app can arrive in an inconsistent state at this point, do not throw
// throw IllegalStateException("activity/fragment should implement Listener interface") // throw IllegalStateException("activity/fragment should implement Listener interface")
null null
...@@ -190,7 +191,6 @@ class EmojiKeyboardPopup(context: Context, view: View) : OverKeyboardPopupWindow ...@@ -190,7 +191,6 @@ class EmojiKeyboardPopup(context: Context, view: View) : OverKeyboardPopupWindow
} }
class EmojiTextWatcher(private val editor: EditText) : TextWatcher { class EmojiTextWatcher(private val editor: EditText) : TextWatcher {
@Volatile @Volatile
private var emojiToRemove = mutableListOf<EmojiTypefaceSpan>() private var emojiToRemove = mutableListOf<EmojiTypefaceSpan>()
......
...@@ -21,7 +21,6 @@ package chat.rocket.android.emoji ...@@ -21,7 +21,6 @@ package chat.rocket.android.emoji
import android.content.Context import android.content.Context
import android.graphics.Point import android.graphics.Point
import android.graphics.Rect import android.graphics.Rect
import android.os.Build
import android.view.Gravity import android.view.Gravity
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
......
...@@ -29,6 +29,9 @@ abstract class SuggestionsAdapter<VH : BaseSuggestionViewHolder>( ...@@ -29,6 +29,9 @@ abstract class SuggestionsAdapter<VH : BaseSuggestionViewHolder>(
notifyDataSetChanged() notifyDataSetChanged()
} }
private var currentCount = 0;
private var currentItems = listOf<SuggestionModel>()
init { init {
setHasStableIds(true) setHasStableIds(true)
} }
...@@ -41,10 +44,10 @@ abstract class SuggestionsAdapter<VH : BaseSuggestionViewHolder>( ...@@ -41,10 +44,10 @@ abstract class SuggestionsAdapter<VH : BaseSuggestionViewHolder>(
holder.bind(getItem(position), itemClickListener) holder.bind(getItem(position), itemClickListener)
} }
override fun getItemCount() = strategy.autocompleteItems(currentTerm).size override fun getItemCount() = currentCount
private fun getItem(position: Int): SuggestionModel { private fun getItem(position: Int): SuggestionModel {
return strategy.autocompleteItems(currentTerm)[position] return currentItems[position]
} }
/** /**
...@@ -58,12 +61,15 @@ abstract class SuggestionsAdapter<VH : BaseSuggestionViewHolder>( ...@@ -58,12 +61,15 @@ abstract class SuggestionsAdapter<VH : BaseSuggestionViewHolder>(
fun autocomplete(newTerm: String) { fun autocomplete(newTerm: String) {
this.currentTerm = newTerm.toLowerCase().trim() this.currentTerm = newTerm.toLowerCase().trim()
currentItems = strategy.autocompleteItems(currentTerm)
currentCount = currentItems.size
} }
fun addItems(list: List<SuggestionModel>) { fun addItems(list: List<SuggestionModel>) {
strategy.addAll(list) strategy.addAll(list)
// Since we've just added new items we should check for possible new completion suggestions. // Since we've just added new items we should check for possible new completion suggestions.
strategy.autocompleteItems(currentTerm) //strategy.autocompleteItems(currentTerm)
autocomplete(currentTerm)
notifyDataSetChanged() notifyDataSetChanged()
} }
......
...@@ -10,6 +10,7 @@ import android.text.TextWatcher ...@@ -10,6 +10,7 @@ import android.text.TextWatcher
import android.transition.Slide import android.transition.Slide
import android.transition.TransitionManager import android.transition.TransitionManager
import android.util.AttributeSet import android.util.AttributeSet
import android.util.Log
import android.view.Gravity import android.view.Gravity
import android.view.View import android.view.View
import android.widget.EditText import android.widget.EditText
...@@ -24,6 +25,7 @@ import chat.rocket.android.suggestions.model.SuggestionModel ...@@ -24,6 +25,7 @@ import chat.rocket.android.suggestions.model.SuggestionModel
import chat.rocket.android.suggestions.ui.SuggestionsAdapter.Companion.CONSTRAINT_BOUND_TO_START import chat.rocket.android.suggestions.ui.SuggestionsAdapter.Companion.CONSTRAINT_BOUND_TO_START
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicInteger
import kotlin.system.measureTimeMillis
// This is a special index that means we're not at an autocompleting state. // This is a special index that means we're not at an autocompleting state.
private const val NO_STATE_INDEX = 0 private const val NO_STATE_INDEX = 0
...@@ -101,22 +103,32 @@ class SuggestionsView : FrameLayout, TextWatcher { ...@@ -101,22 +103,32 @@ class SuggestionsView : FrameLayout, TextWatcher {
return return
} }
val prefixEndIndex = this.editor?.get()?.selectionStart ?: NO_STATE_INDEX if (completionOffset.get() == NO_STATE_INDEX) {
if (prefixEndIndex == NO_STATE_INDEX || prefixEndIndex < completionOffset.get()) return return
val prefix = s.subSequence(completionOffset.get(), this.editor?.get()?.selectionStart
?: completionOffset.get()).toString()
recyclerView.adapter?.let {
it as SuggestionsAdapter
// we need to look up only after the '@'
it.autocomplete(prefix)
val cacheMap = localProvidersByToken[it.token]
if (cacheMap != null && cacheMap[prefix] != null) {
it.addItems(cacheMap[prefix]!!)
} else {
// fetch more suggestions from an external source if any
externalProvidersByToken[it.token]?.invoke(prefix)
}
} }
measureTimeMillis {
val prefixEndIndex = this.editor?.get()?.selectionStart ?: NO_STATE_INDEX
if (prefixEndIndex == NO_STATE_INDEX || prefixEndIndex < completionOffset.get()) return
val prefix = s.subSequence(completionOffset.get(), this.editor?.get()?.selectionStart
?: completionOffset.get()).toString()
recyclerView.adapter?.also {
it as SuggestionsAdapter
// we need to look up only after the '@'
measureTimeMillis { it.autocomplete(prefix) }.let { time ->
Log.d("SuggestionsView", "autocomplete($prefix) in $time ms")
}
val cacheMap = localProvidersByToken[it.token]
if (cacheMap != null && cacheMap[prefix] != null) {
if (it.itemCount == 0) {
it.addItems(cacheMap[prefix]!!)
}
} else {
// fetch more suggestions from an external source if any
externalProvidersByToken[it.token]?.invoke(prefix)
}
}
}.let { Log.d("SuggestionsView", "whole prefix in $it ms") }
} }
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
......
package chat.rocket.android.util.extension
/**
* This purely checks if an url link ends with a image format.
*/
fun String.isImage() = endsWith(".gif") || endsWith(".png") || endsWith(".jpg") || endsWith("jpeg")
\ No newline at end of file
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