Commit e463622d authored by Filipe de Lima Brito's avatar Filipe de Lima Brito

Shows server view

parent 8dc117d8
......@@ -50,31 +50,12 @@ class ChatRoomsPresenter @Inject constructor(
fun toCreateChannel() = navigator.toCreateChannel()
fun toSettings() = navigator.toSettings()
fun getCurrentServerName() {
view.setupToolbar(currentServer)
}
fun getAllServers() {
launchUI(strategy) {
try {
view.setupServerListView(getAccountsInteractor.get())
} catch (exception: Exception) {
Timber.e(exception, "Error while getting all servers")
when (exception) {
// is RocketChatAuthException -> logout()
else -> {
exception.message?.let {
view.showMessage(it)
}.ifNull {
view.showGenericErrorMessage()
}
}
}
}
}
}
fun loadChatRoom(roomId: String) {
launchUI(strategy) {
view.showLoadingRoom("")
......
......@@ -13,13 +13,6 @@ interface ChatRoomsView : LoadingView, MessageView {
*/
fun setupToolbar(serverName: String)
/**
* Setups the server list view with all server list.
*
* @param serverList The server list to show on server list.
*/
fun setupServerListView(serverList: List<Account>)
fun showLoadingRoom(name: CharSequence)
fun hideLoadingRoom()
......
......@@ -30,7 +30,7 @@ import chat.rocket.android.chatrooms.viewmodel.Query
import chat.rocket.android.helper.ChatRoomsSortOrder
import chat.rocket.android.helper.Constants
import chat.rocket.android.helper.SharedPreferenceHelper
import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.servers.ui.ServersBottomSheetFragment
import chat.rocket.android.util.extension.onQueryTextListener
import chat.rocket.android.util.extensions.ifNotNullNotEmpty
import chat.rocket.android.util.extensions.inflate
......@@ -104,11 +104,6 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
analyticsManager.logScreenView(ScreenViewEvent.ChatRooms)
}
override fun setupServerListView(serverList: List<Account>) {
// TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
private fun subscribeUi() {
ui {
val adapter = RoomsAdapter { room ->
......@@ -284,18 +279,28 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
}
override fun setupToolbar(serverName: String) {
(activity as AppCompatActivity).setSupportActionBar(toolbar)
with((activity as AppCompatActivity)) {
with(toolbar) {
setSupportActionBar(this)
setNavigationOnClickListener { presenter.toSettings() }
}
}
text_server_name.text = serverName
}
private fun setupListeners() {
text_server_name.setOnClickListener {
// TO DO
ServersBottomSheetFragment().show(
activity?.supportFragmentManager,
chat.rocket.android.servers.ui.TAG
)
}
text_sort_by.setOnClickListener {
SortByBottomSheetFragment()
.show(activity?.supportFragmentManager, TAG)
SortByBottomSheetFragment().show(
activity?.supportFragmentManager,
chat.rocket.android.chatrooms.ui.TAG
)
}
}
......
......@@ -11,7 +11,7 @@ import chat.rocket.android.R
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import kotlinx.android.synthetic.main.bottom_sheet_fragment_sort_by.*
internal const val TAG = "SortByBottomSheetFragment"
const val TAG = "SortByBottomSheetFragment"
class SortByBottomSheetFragment : BottomSheetDialogFragment() {
private var isSortByName = false
......
......@@ -182,7 +182,7 @@ class CreateChannelFragment : Fragment(), CreateChannelView, ActionMode.Callback
private fun setupToolBar() {
with((activity as AppCompatActivity)) {
with(toolbar) {
setSupportActionBar(toolbar)
setSupportActionBar(this)
title = getString(R.string.title_create_channel)
setNavigationIcon(R.drawable.ic_arrow_back_white_24dp)
setNavigationOnClickListener { activity?.onBackPressed() }
......
......@@ -33,6 +33,7 @@ import chat.rocket.android.preferences.di.PreferencesFragmentProvider
import chat.rocket.android.profile.di.ProfileFragmentProvider
import chat.rocket.android.server.di.ChangeServerModule
import chat.rocket.android.server.ui.ChangeServerActivity
import chat.rocket.android.servers.di.ServersBottomSheetFragmentProvider
import chat.rocket.android.settings.di.SettingsFragmentProvider
import chat.rocket.android.settings.password.di.PasswordFragmentProvider
import chat.rocket.android.settings.password.ui.PasswordActivity
......@@ -65,6 +66,7 @@ abstract class ActivityBuilder {
@ContributesAndroidInjector(
modules = [MainModule::class,
ChatRoomsFragmentProvider::class,
ServersBottomSheetFragmentProvider::class,
CreateChannelProvider::class,
ProfileFragmentProvider::class,
SettingsFragmentProvider::class,
......
package chat.rocket.android.main.adapter
import androidx.recyclerview.widget.RecyclerView
import android.view.View
import chat.rocket.common.model.UserStatus
import kotlinx.android.synthetic.main.item_change_status.view.*
class StatusViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(listener: (UserStatus) -> Unit) {
with(itemView) {
text_online.setOnClickListener { listener(UserStatus.Online()) }
text_away.setOnClickListener { listener(UserStatus.Away()) }
text_busy.setOnClickListener { listener(UserStatus.Busy()) }
text_invisible.setOnClickListener { listener(UserStatus.Offline()) }
}
}
}
\ No newline at end of file
package chat.rocket.android.main.adapter
package chat.rocket.android.servers.adapter
import androidx.recyclerview.widget.RecyclerView
import android.view.View
import androidx.recyclerview.widget.RecyclerView
class AddAccountViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
\ No newline at end of file
class AddNewServerViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
\ No newline at end of file
package chat.rocket.android.main.adapter
package chat.rocket.android.servers.adapter
import androidx.recyclerview.widget.RecyclerView
import android.view.View
import androidx.core.view.isInvisible
import androidx.recyclerview.widget.RecyclerView
import chat.rocket.android.server.domain.model.Account
import kotlinx.android.synthetic.main.item_account.view.*
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.item_server.view.*
class AccountViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
class ServerViewHolder(itemView: View, private val currentServerUrl: String) :
RecyclerView.ViewHolder(itemView) {
fun bind(account: Account) {
with(itemView) {
server_logo.setImageURI(account.serverLogo)
Glide.with(context).load(account.serverLogo).into(image_server)
text_server_name.text = account.serverUrl
text_server_url.text = account.serverUrl
text_username.text = account.userName
image_check.isInvisible = currentServerUrl != account.serverUrl
}
}
}
\ No newline at end of file
package chat.rocket.android.main.adapter
package chat.rocket.android.servers.adapter
import androidx.recyclerview.widget.RecyclerView
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import chat.rocket.android.R
import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.util.extensions.inflate
import chat.rocket.common.model.UserStatus
private const val VIEW_TYPE_CHANGE_STATUS = 0
private const val VIEW_TYPE_ACCOUNT = 1
private const val VIEW_TYPE_ADD_ACCOUNT = 2
private const val VIEW_TYPE_SERVER = 0
private const val VIEW_TYPE_ADD_NEW_SERVER = 1
class AccountsAdapter(
private val accounts: List<Account>,
class ServersAdapter(
private val servers: List<Account>,
private val currentServerUrl: String,
private val selector: Selector
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return when (viewType) {
VIEW_TYPE_CHANGE_STATUS -> StatusViewHolder(parent.inflate(R.layout.item_change_status))
VIEW_TYPE_ACCOUNT -> AccountViewHolder(parent.inflate(R.layout.item_account))
else -> AddAccountViewHolder(parent.inflate(R.layout.item_add_account))
VIEW_TYPE_SERVER -> ServerViewHolder(
parent.inflate(R.layout.item_server), currentServerUrl
)
else -> AddNewServerViewHolder(parent.inflate(R.layout.item_add_new_server))
}
}
override fun getItemCount() = accounts.size + 2
override fun getItemCount() = servers.size + 1
override fun getItemViewType(position: Int): Int {
return when {
position == 0 -> VIEW_TYPE_CHANGE_STATUS
position <= accounts.size -> VIEW_TYPE_ACCOUNT
else -> VIEW_TYPE_ADD_ACCOUNT
position < servers.size -> VIEW_TYPE_SERVER
else -> VIEW_TYPE_ADD_NEW_SERVER
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is StatusViewHolder -> bindStatusViewHolder(holder)
is AccountViewHolder -> bindAccountViewHolder(holder, position)
is AddAccountViewHolder -> bindAddAccountViewHolder(holder)
is ServerViewHolder -> bindServerViewHolder(holder, position)
is AddNewServerViewHolder -> bindAddNewServerViewHolder(holder)
}
}
private fun bindStatusViewHolder(holder: StatusViewHolder) {
holder.bind { userStatus -> selector.onStatusSelected(userStatus) }
}
private fun bindAccountViewHolder(holder: AccountViewHolder, position: Int) {
val account = accounts[position - 1]
private fun bindServerViewHolder(holder: ServerViewHolder, position: Int) {
val account = servers[position]
holder.bind(account)
holder.itemView.setOnClickListener {
selector.onAccountSelected(account.serverUrl)
}
holder.itemView.setOnClickListener { selector.onServerSelected(account.serverUrl) }
}
private fun bindAddAccountViewHolder(holder: AddAccountViewHolder) {
holder.itemView.setOnClickListener {
selector.onAddedAccountSelected()
}
private fun bindAddNewServerViewHolder(holder: AddNewServerViewHolder) {
holder.itemView.setOnClickListener { selector.onAddNewServerSelected() }
}
}
interface Selector {
fun onStatusSelected(userStatus: UserStatus)
fun onAccountSelected(serverUrl: String)
fun onAddedAccountSelected()
fun onServerSelected(serverUrl: String)
fun onAddNewServerSelected()
}
\ No newline at end of file
package chat.rocket.android.servers.di
import chat.rocket.android.dagger.scope.PerFragment
import chat.rocket.android.servers.presentation.ServersView
import chat.rocket.android.servers.ui.ServersBottomSheetFragment
import dagger.Module
import dagger.Provides
@Module
class ServersBottomSheetFragmentModule {
@Provides
@PerFragment
fun membersView(frag: ServersBottomSheetFragment): ServersView = frag
}
\ No newline at end of file
package chat.rocket.android.servers.di
import chat.rocket.android.dagger.scope.PerFragment
import chat.rocket.android.servers.ui.ServersBottomSheetFragment
import dagger.Module
import dagger.android.ContributesAndroidInjector
@Module
abstract class ServersBottomSheetFragmentProvider {
@ContributesAndroidInjector(modules = [ServersBottomSheetFragmentModule::class])
@PerFragment
abstract fun provideServersBottomSheetFragment(): ServersBottomSheetFragment
}
\ No newline at end of file
package chat.rocket.android.servers.presentation
import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.main.presentation.MainNavigator
import chat.rocket.android.server.domain.GetAccountsInteractor
import chat.rocket.android.util.extension.launchUI
import chat.rocket.common.util.ifNull
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Named
class ServersPresenter @Inject constructor(
private val view: ServersView,
private val navigator: MainNavigator,
private val strategy: CancelStrategy,
private val getAccountsInteractor: GetAccountsInteractor,
@Named("currentServer") private val currentServerUrl: String
) {
fun getAllServers() {
launchUI(strategy) {
try {
view.showServerList(getAccountsInteractor.get(), currentServerUrl)
} catch (exception: Exception) {
Timber.e(exception, "Error loading servers")
exception.message?.let {
view.showMessage(it)
}.ifNull {
view.showGenericErrorMessage()
}
}
}
}
fun changeServer(serverUrl: String) {
if (currentServerUrl != serverUrl) {
navigator.switchOrAddNewServer(serverUrl)
} else {
view.hideServerView()
}
}
fun addNewServer() {
view.hideServerView()
navigator.toServerScreen()
}
}
\ No newline at end of file
package chat.rocket.android.servers.presentation
import chat.rocket.android.core.behaviours.MessageView
import chat.rocket.android.server.domain.model.Account
interface ServersView : MessageView {
/**
* Shows the server list.
*
* @param serverList The list of server to show.
* @param currentServerUrl The current logged in server url.
*/
fun showServerList(serverList: List<Account>, currentServerUrl: String)
/**
* Hides the servers view.
*/
fun hideServerView()
}
\ No newline at end of file
package chat.rocket.android.servers.ui
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import chat.rocket.android.R
import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.servers.adapter.Selector
import chat.rocket.android.servers.adapter.ServersAdapter
import chat.rocket.android.servers.presentation.ServersPresenter
import chat.rocket.android.servers.presentation.ServersView
import chat.rocket.android.util.extensions.showToast
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import dagger.android.support.AndroidSupportInjection
import kotlinx.android.synthetic.main.bottom_sheet_fragment_servers.*
import javax.inject.Inject
const val TAG = "ServersBottomSheetFragment"
class ServersBottomSheetFragment : BottomSheetDialogFragment(), ServersView {
@Inject
lateinit var presenter: ServersPresenter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
AndroidSupportInjection.inject(this)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? =
inflater.inflate(R.layout.bottom_sheet_fragment_servers, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
presenter.getAllServers()
}
override fun showServerList(serverList: List<Account>, currentServerUrl: String) {
recycler_view.layoutManager = LinearLayoutManager(context)
recycler_view.adapter = ServersAdapter(serverList, currentServerUrl, object : Selector {
override fun onServerSelected(serverUrl: String) {
presenter.changeServer(serverUrl)
}
override fun onAddNewServerSelected() {
presenter.addNewServer()
}
})
}
override fun hideServerView() = dismiss()
override fun showMessage(resId: Int) {
showToast(resId)
}
override fun showMessage(message: String) {
showToast(message)
}
override fun showGenericErrorMessage() = showMessage(getString(R.string.msg_generic_error))
}
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:fillColor="#00000000"
android:fillType="evenOdd"
android:pathData="M4.5,0.5L43.5,0.5A4,4 0,0 1,47.5 4.5L47.5,43.5A4,4 0,0 1,43.5 47.5L4.5,47.5A4,4 0,0 1,0.5 43.5L0.5,4.5A4,4 0,0 1,4.5 0.5z"
android:strokeWidth="1"
android:strokeColor="#CBCED1" />
<path
android:fillColor="#00000000"
android:fillType="evenOdd"
android:pathData="M33.0625,23.5625L24.4375,23.5625L24.4375,14.9375C24.4375,14.6959 24.2416,14.5 24,14.5C23.7584,14.5 23.5625,14.6959 23.5625,14.9375L23.5625,23.5625L14.9375,23.5625C14.6959,23.5625 14.5,23.7584 14.5,24C14.5,24.2416 14.6959,24.4375 14.9375,24.4375L23.5625,24.4375L23.5625,33.0625C23.5625,33.3041 23.7584,33.5 24,33.5C24.2416,33.5 24.4375,33.3041 24.4375,33.0625L24.4375,24.4375L33.0625,24.4375C33.3041,24.4375 33.5,24.2416 33.5,24C33.5,23.7584 33.3041,23.5625 33.0625,23.5625Z"
android:strokeWidth="1"
android:strokeColor="#9EA2A8" />
</vector>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context=".servers.ui.ServersBottomSheetFragment">
<TextView
android:id="@+id/text_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:text="@string/msg_server"
android:textColor="#9EA2A8"
android:textSize="17sp"
android:textStyle="normal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="16dp"
android:background="#1F000000"
app:layout_constraintTop_toBottomOf="@+id/text_server" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@+id/view_divider" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:orientation="vertical"
android:padding="16dp">
<ImageView
android:id="@+id/server_logo"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/ic_add_24dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="0dp"
android:id="@+id/text_add_new_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@string/action_add_account"
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/server_logo"
app:layout_constraintTop_toTopOf="parent" />
android:drawableStart="@drawable/ic_add_new_server_48dp"
android:drawablePadding="12dp"
android:fontFamily="sans-serif"
android:gravity="center"
android:text="@string/msg_add_new_server"
android:textColor="#9ea2a8"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recycler_view" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
</LinearLayout>
\ No newline at end of file
......@@ -4,43 +4,58 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingEnd="16dp"
android:background="?selectableItemBackground"
android:paddingStart="16dp"
android:paddingTop="16dp"
android:background="?selectableItemBackground">
android:paddingEnd="16dp">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/server_logo"
android:layout_width="40dp"
android:layout_height="40dp"
app:actualImageScaleType="centerInside"
app:layout_constraintBottom_toBottomOf="parent"
<ImageView
android:id="@+id/image_server"
android:layout_width="48dp"
android:layout_height="48dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
tools:src="@tools:sample/avatars" />
<TextView
android:id="@+id/text_server_url"
android:layout_width="0dp"
android:id="@+id/text_server_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:ellipsize="end"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:fontFamily="sans-serif-medium"
android:maxLines="1"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/server_logo"
app:layout_constraintTop_toTopOf="@id/server_logo"
tools:text="https://open.rocket.chat" />
android:textColor="#DE000000"
android:textSize="16sp"
android:textStyle="normal"
app:layout_constraintStart_toEndOf="@+id/image_server"
app:layout_constraintTop_toTopOf="@+id/image_server"
tools:text="Hyper Ledger" />
<TextView
android:id="@+id/text_username"
android:layout_width="0dp"
android:id="@+id/text_server_url"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:ellipsize="end"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:fontFamily="sans-serif"
android:maxLines="1"
app:layout_constraintBottom_toBottomOf="@id/server_logo"
android:textColor="#99000000"
android:textSize="14sp"
android:textStyle="normal"
app:layout_constraintStart_toEndOf="@+id/image_server"
app:layout_constraintTop_toBottomOf="@+id/text_server_name"
tools:text="chat.hyperledger.org" />
<ImageView
android:id="@+id/image_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_check"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@+id/image_server"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/server_logo"
tools:text="Lucio Maciel" />
app:layout_constraintTop_toTopOf="@+id/image_server"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/server_logo"
android:layout_width="0dp"
android:layout_height="0dp"
android:foreground="@drawable/black_gradient"
app:actualImageScaleType="centerCrop"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@tools:sample/backgrounds/scenic" />
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/image_avatar"
android:layout_width="60dp"
android:layout_height="60dp"
android:background="@drawable/bg_empty_user_avatar"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:roundedCornerRadius="3dp"
tools:src="@tools:sample/avatars" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/account_container"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="?selectableItemBackground"
android:elevation="2dp"
android:paddingStart="12dp"
android:paddingTop="4dp"
android:paddingEnd="12dp"
android:paddingBottom="4dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/image_avatar">
<ImageView
android:id="@+id/image_user_status"
android:layout_width="12dp"
android:layout_height="12dp"
app:layout_constraintBottom_toTopOf="@+id/text_user_name"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/text_user_name"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/text_user_name"
style="@style/Sender.Name.TextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:textColor="@color/colorWhite"
app:layout_constraintBottom_toBottomOf="@+id/image_user_status"
app:layout_constraintEnd_toStartOf="@+id/image_account_expand"
app:layout_constraintStart_toEndOf="@+id/image_user_status"
app:layout_constraintTop_toTopOf="@+id/image_user_status"
tools:text="Lucio Maciel" />
<TextView
android:id="@+id/text_server_url"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:ellipsize="end"
android:maxLines="1"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="@color/colorWhite"
app:layout_constraintEnd_toStartOf="@+id/image_account_expand"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_user_name"
tools:text="https://open.rocket.chat" />
<ImageView
android:id="@+id/image_account_expand"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_expand_more_black_24dp"
android:tint="@color/colorWhite"
app:layout_constraintBottom_toBottomOf="@+id/text_server_url"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -45,7 +45,6 @@
<string name="action_attach_a_files">إضافة ملف</string>
<string name="action_confirm_password">تأكيد تغيير كلمة السر</string>
<string name="action_join_chat">إنضم للمحادثة</string>
<string name="action_add_account">إضافة حساب</string>
<string name="action_online">متصل</string>
<string name="action_away">بعيد</string>
<string name="action_busy">مشغول</string>
......@@ -183,6 +182,8 @@
<item quantity="two">%1$s reacted with %2$s</item>
</plurals>
<string name="msg_credentials_saved_successfully">Credentials saved successfully</string> <!-- TODO Translate -->
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">خاص</string>
......
......@@ -47,7 +47,6 @@
<string name="action_attach_a_files">Eine Datei anhängen</string>
<string name="action_confirm_password">Bestätige Passwort Änderung</string>
<string name="action_join_chat">Trete Chat bei</string>
<string name="action_add_account">Erstelle Account</string>
<string name="action_online">Online</string>
<string name="action_away">Abwesend</string>
<string name="action_busy">Beschäftigt</string>
......@@ -179,7 +178,8 @@
<item quantity="other">%1$s reagierte mit %2$s</item>
</plurals>
<string name="msg_credentials_saved_successfully">Login-Daten erfolgreich gespeichert</string>
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">Privat</string>
......
......@@ -44,7 +44,6 @@
<string name="action_attach_a_files">Attach a file</string> <!-- TODO Add translation -->
<string name="action_confirm_password">Confirmar cambio de contraseña</string>
<string name="action_join_chat">Unirse al chat</string>
<string name="action_add_account">Añadir cuenta</string>
<string name="action_online">Conectado(s)</string>
<string name="action_away">Ausente</string>
<string name="action_busy">Ocupado</string>
......@@ -163,6 +162,8 @@
<string name="msg_continue_with_wordpress">Continue with <b>WordPress</b></string> <!-- TODO Add translation -->
<string name="msg_two_factor_authentication">Two-factor Authentication</string> <!-- TODO Add translation -->
<string name="msg__your_2fa_code">What’s your 2FA code?</string> <!-- TODO Add translation -->
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">Privado</string>
......
......@@ -44,7 +44,6 @@
<string name="action_attach_a_files">ضمیمه کردن پرونده</string>
<string name="action_confirm_password">موافقت با تغییر گذرواژه</string>
<string name="action_join_chat">به گفت‌وگو بپیوندید</string>
<string name="action_add_account">اضافه کردن حساب کاربری</string>
<string name="action_online">آنلاین</string>
<string name="action_away">Away</string> <!-- TODO Add translation -->
<string name="action_busy">مشغول</string>
......@@ -178,6 +177,8 @@
<item quantity="other">%1$s reacted with %2$s</item>
</plurals> <!-- TODO Add translation -->
<string name="msg_credentials_saved_successfully">اختیارها با موفقیت ذخیره شد</string>
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">خصوصی</string>
......
......@@ -44,7 +44,6 @@
<string name="action_attach_a_files">Joindre un fichier</string>
<string name="action_confirm_password">Confirmer le mot de passe</string>
<string name="action_join_chat">Rejoignez le chat</string>
<string name="action_add_account">Ajouter un compte</string>
<string name="action_online">En ligne</string>
<string name="action_away">Loin</string>
<string name="action_busy">Occupé</string>
......@@ -182,6 +181,8 @@
<item quantity="other">%1$s a réagi avec %2$s</item>
</plurals>
<string name="msg_credentials_saved_successfully">Certificats sauvegardés</string>
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">Privé</string>
......
......@@ -44,7 +44,6 @@
<string name="action_attach_a_files">एक फ़ाइल जोडो</string>
<string name="action_confirm_password">पासवर्ड परिवर्तन की पुष्टि करें</string>
<string name="action_join_chat">चैट में शामिल हों</string>
<string name="action_add_account">खाता जोड़ो</string>
<string name="action_online">ऑनलाइन</string>
<string name="action_away">दूर</string>
<string name="action_busy">व्यस्त</string>
......@@ -197,6 +196,8 @@
<item quantity="many">%1$s ने %2$s के साथ प्रतिक्रिया व्यक्त की</item>
</plurals>
<string name="msg_credentials_saved_successfully">प्रमाण पत्र सफलतापूर्वक सहेजे गए</string>
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<!-- Preferences messages -->
<string name="msg_analytics_tracking">एनालिटिक्स ट्रैकिंग</string>
......
......@@ -44,7 +44,6 @@
<string name="action_attach_a_files">Ceangail comhad</string>
<string name="action_confirm_password">Conferma Cambio Password</string>
<string name="action_join_chat">Iscriviti alla stanza</string>
<string name="action_add_account">Aggiungi utente</string>
<string name="action_online">In linea</string>
<string name="action_away">Lontano</string>
<string name="action_busy">Occupato</string>
......@@ -175,6 +174,8 @@
<item quantity="other">%1$s ha reagito con %2$s</item>
</plurals>
<string name="msg_credentials_saved_successfully">Credenziali salvate con successo</string>
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">Privato</string>
......
......@@ -44,7 +44,6 @@
<string name="action_attach_a_files">Attach a file</string> <!-- TODO Add translation -->
<string name="action_confirm_password">変更したパスワードの確認</string>
<string name="action_join_chat">チャットに参加</string>
<string name="action_add_account">サーバーの追加</string>
<string name="action_online">オンライン</string>
<string name="action_away">離席中</string>
<string name="action_busy">取り込み中</string>
......@@ -178,6 +177,8 @@
<item quantity="other">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation -->
</plurals>
<string name="msg_credentials_saved_successfully">資格情報を正常に保存しました</string>
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">プライベート</string>
......
......@@ -44,7 +44,6 @@
<string name="action_attach_a_files">Anexar um arquivo</string>
<string name="action_confirm_password">Confirme a nova senha</string>
<string name="action_join_chat">Entrar no Chat</string>
<string name="action_add_account">Adicionar conta</string>
<string name="action_online">Online</string>
<string name="action_away">Ausente</string>
<string name="action_busy">Ocupado</string>
......@@ -178,12 +177,13 @@
<string name="msg_no_description">Nenhuma descrição</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_">
<item quantity="one">%1$s reagiu com %2$s</item>
<item quantity="other">%1$s reagiram com %2$s</item>
</plurals>
<string name="msg_credentials_saved_successfully">Credenciais salvas com sucesso</string>
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">Privado</string>
......
......@@ -44,7 +44,6 @@
<string name="action_attach_a_files">Enviar um ficheiro</string>
<string name="action_confirm_password">Confirme a alteração da palavra-passe</string>
<string name="action_join_chat">Entre no chat</string>
<string name="action_add_account">Adicionar conta</string>
<string name="action_online">Online</string>
<string name="action_away">Ausente</string>
<string name="action_busy">Ocupado</string>
......@@ -174,6 +173,8 @@
<item quantity="one">%1$s reagiu com %2$s</item>
<item quantity="other">%1$s reagiram com %2$s</item>
</plurals>
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">Privado</string>
......
......@@ -44,7 +44,6 @@
<string name="action_attach_a_files">Прикрепить файл</string>
<string name="action_confirm_password">Подтверждение изменения пароля</string>
<string name="action_join_chat">Присоединиться к чату</string>
<string name="action_add_account">Добавить аккаунт</string>
<string name="action_online">Онлайн</string>
<string name="action_away">Отошел</string>
<string name="action_busy">Занят</string>
......@@ -181,6 +180,8 @@
<item quantity="many">%1$s реагируют с %2$s</item>
</plurals>
<string name="msg_credentials_saved_successfully">Учетные данные успешно сохранены</string>
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">Приватный</string>
......
......@@ -44,7 +44,6 @@
<string name="action_attach_a_files">Attach a file</string> <!-- TODO Add translation -->
<string name="action_confirm_password">Şifre Değişikliğini Onaylayın</string>
<string name="action_join_chat">Sohbete Bağlan</string>
<string name="action_add_account">Hesap Ekle</string>
<string name="action_online">Çevrimiçi</string>
<string name="action_away">Uzakta</string>
<string name="action_busy">Meşgul</string>
......@@ -196,6 +195,8 @@
<item quantity="other">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation -->
</plurals>
<string name="msg_credentials_saved_successfully">Kimlik bilgileri başarıyla kaydedildi</string>
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<!-- Preferences messages -->
<string name="msg_analytics_tracking">İstatistik takibi</string>
......
......@@ -44,7 +44,6 @@
<string name="action_attach_a_files">Attach a file</string> <!-- TODO Add translation -->
<string name="action_confirm_password">Підтвердження зміни пароля</string>
<string name="action_join_chat">Приєднатися до чату</string>
<string name="action_add_account">Додати аккаунт</string>
<string name="action_online">Онлайн</string>
<string name="action_away">Відійшов</string>
<string name="action_busy">Зайнятий</string>
......@@ -180,6 +179,8 @@
<item quantity="many">%1$s reacted with %2$s</item> <!-- TODO - Add proper translation -->
</plurals>
<string name="msg_credentials_saved_successfully">Облікові дані було успішно збережено</string>
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">Приватний</string>
......
......@@ -44,7 +44,6 @@
<string name="action_attach_a_files">添加附件</string>
<string name="action_confirm_password">确认修改密码</string>
<string name="action_join_chat">加入聊天</string>
<string name="action_add_account">添加账户</string>
<string name="action_online">在线</string>
<string name="action_away">离开</string>
<string name="action_busy">忙碌</string>
......@@ -175,6 +174,8 @@
<item quantity="other">%1$s 使用了 %2$s</item>
</plurals>
<string name="msg_credentials_saved_successfully">凭证成功保存</string>
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">隐私</string>
......
......@@ -44,7 +44,6 @@
<string name="action_attach_a_files">添加檔案</string>
<string name="action_confirm_password">確認修改密碼</string>
<string name="action_join_chat">加入聊天</string>
<string name="action_add_account">新增帳戶</string>
<string name="action_online">線上</string>
<string name="action_away">離線</string>
<string name="action_busy">忙碌</string>
......@@ -175,6 +174,8 @@
<item quantity="other">%1$s 使用了 %2$s</item>
</plurals>
<string name="msg_credentials_saved_successfully">憑證保存成功</string>
<string name="msg_server">Server</string> <!-- TODO Translate -->
<string name="msg_add_new_server">Add New Server</string> <!-- TODO Translate -->
<!-- Create channel messages -->
<string name="msg_private_channel">隱私</string>
......
......@@ -56,7 +56,6 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string name="action_attach_a_files">Attach a file</string>
<string name="action_confirm_password">Confirm Password Change</string>
<string name="action_join_chat">Join Chat</string>
<string name="action_add_account">Add account</string>
<string name="action_online">Online</string>
<string name="action_away">Away</string>
<string name="action_busy">Busy</string>
......@@ -191,6 +190,8 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<item quantity="other">%1$s reacted with %2$s</item>
</plurals>
<string name="msg_credentials_saved_successfully">Credentials saved successfully</string>
<string name="msg_server">Server</string>
<string name="msg_add_new_server">Add New Server</string>
<!-- Create channel messages -->
<string name="msg_private_channel">Private</string>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment