diff --git a/app/src/main/java/chat/rocket/android/chatroom/adapter/ChatRoomAdapter.kt b/app/src/main/java/chat/rocket/android/chatroom/adapter/ChatRoomAdapter.kt
index 1bd1efccae..c982cb34f0 100644
--- a/app/src/main/java/chat/rocket/android/chatroom/adapter/ChatRoomAdapter.kt
+++ b/app/src/main/java/chat/rocket/android/chatroom/adapter/ChatRoomAdapter.kt
@@ -45,7 +45,11 @@ class ChatRoomAdapter(
view,
actionsListener,
reactionListener
- ) { userId -> navigator?.toUserDetails(userId) }
+ ) { userId ->
+ if (roomId != null) {
+ navigator?.toUserDetails(userId,roomId)
+ }
+ }
}
BaseUiModel.ViewType.URL_PREVIEW -> {
val view = parent.inflate(R.layout.message_url_preview)
diff --git a/app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomNavigator.kt b/app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomNavigator.kt
index 734feebc50..54b5317163 100644
--- a/app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomNavigator.kt
+++ b/app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomNavigator.kt
@@ -16,9 +16,9 @@ import chat.rocket.android.util.extensions.addFragmentBackStack
class ChatRoomNavigator(internal val activity: ChatRoomActivity) {
- fun toUserDetails(userId: String) {
+ fun toUserDetails(userId: String,chatRoomId: String) {
activity.addFragmentBackStack(TAG_USER_DETAILS_FRAGMENT, R.id.fragment_container) {
- chat.rocket.android.userdetails.ui.newInstance(userId)
+ chat.rocket.android.userdetails.ui.newInstance(userId,chatRoomId)
}
}
@@ -69,9 +69,9 @@ class ChatRoomNavigator(internal val activity: ChatRoomActivity) {
}
}
- fun toMemberDetails(userId: String) {
+ fun toMemberDetails(userId: String, chatRoomId: String) {
activity.addFragmentBackStack(TAG_USER_DETAILS_FRAGMENT, R.id.fragment_container) {
- chat.rocket.android.userdetails.ui.newInstance(userId)
+ chat.rocket.android.userdetails.ui.newInstance(userId,chatRoomId)
}
}
diff --git a/app/src/main/java/chat/rocket/android/members/presentation/MembersPresenter.kt b/app/src/main/java/chat/rocket/android/members/presentation/MembersPresenter.kt
index d84f18df5a..a1ac7de2e5 100644
--- a/app/src/main/java/chat/rocket/android/members/presentation/MembersPresenter.kt
+++ b/app/src/main/java/chat/rocket/android/members/presentation/MembersPresenter.kt
@@ -58,7 +58,7 @@ class MembersPresenter @Inject constructor(
}
}
- fun toMemberDetails(memberUiModel: MemberUiModel) {
- navigator.toMemberDetails(memberUiModel.userId)
+ fun toMemberDetails(memberUiModel: MemberUiModel, chatRoomId: String) {
+ navigator.toMemberDetails(memberUiModel.userId,chatRoomId)
}
}
diff --git a/app/src/main/java/chat/rocket/android/members/ui/MembersFragment.kt b/app/src/main/java/chat/rocket/android/members/ui/MembersFragment.kt
index 8177fa9b55..a770e9e5b1 100644
--- a/app/src/main/java/chat/rocket/android/members/ui/MembersFragment.kt
+++ b/app/src/main/java/chat/rocket/android/members/ui/MembersFragment.kt
@@ -44,7 +44,7 @@ class MembersFragment : Fragment(), MembersView {
@Inject
lateinit var analyticsManager: AnalyticsManager
private val adapter: MembersAdapter =
- MembersAdapter { memberUiModel -> presenter.toMemberDetails(memberUiModel) }
+ MembersAdapter { memberUiModel -> presenter.toMemberDetails(memberUiModel,chatRoomId) }
private val linearLayoutManager = LinearLayoutManager(context)
private lateinit var chatRoomId: String
diff --git a/app/src/main/java/chat/rocket/android/userdetails/presentation/UserDetailsPresenter.kt b/app/src/main/java/chat/rocket/android/userdetails/presentation/UserDetailsPresenter.kt
index 004778e654..22581b15f1 100644
--- a/app/src/main/java/chat/rocket/android/userdetails/presentation/UserDetailsPresenter.kt
+++ b/app/src/main/java/chat/rocket/android/userdetails/presentation/UserDetailsPresenter.kt
@@ -12,8 +12,12 @@ import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl
import chat.rocket.android.util.retryIO
import chat.rocket.common.model.RoomType
+import chat.rocket.common.model.of
+import chat.rocket.common.model.roomTypeOf
import chat.rocket.common.util.ifNull
import chat.rocket.core.internal.rest.createDirectMessage
+import chat.rocket.core.internal.rest.kickUser
+import kotlinx.coroutines.experimental.CommonPool
import kotlinx.coroutines.experimental.DefaultDispatcher
import kotlinx.coroutines.experimental.withContext
import timber.log.Timber
@@ -71,6 +75,46 @@ class UserDetailsPresenter @Inject constructor(
}
}
+ fun kickUser(userId: String,chatRoomId:String){
+ launchUI(strategy){
+ try {
+ view.showLoading()
+ dbManager.getRoom(chatRoomId)?.let {
+ val result = retryIO ("kickUser($userId,$chatRoomId,${roomTypeOf(it.chatRoom.type)})"){
+ client.kickUser(chatRoomId, roomTypeOf(it.chatRoom.type),userId)
+ }
+ if(result){
+ view.showKickedUserSuccessfullyMessage()
+ }
+ }.ifNull {
+ Timber.e("Couldn't find a room with id: $chatRoomId at current server.")
+ }
+ }catch (exception: Exception){
+ Timber.e(exception)
+ exception.message?.let {
+ view.showMessage(it)
+ }.ifNull {
+ view.showGenericErrorMessage()
+ }
+ }finally {
+ view.hideLoading()
+ }
+ }
+ }
+
+ fun checkDirectMessageRoomType(chatRoomId: String) {
+ launchUI(strategy){
+ dbManager.getRoom(chatRoomId)?.let {
+ when(roomTypeOf(it.chatRoom.type)){
+ is RoomType.DirectMessage -> view.disableKickButton()
+ else -> view.enableKickButton()
+ }
+ }.ifNull {
+ Timber.e("Couldn't find a room with id: $chatRoomId at current server.")
+ }
+ }
+ }
+
fun createDirectMessage(username: String) {
launchUI(strategy) {
try {
diff --git a/app/src/main/java/chat/rocket/android/userdetails/presentation/UserDetailsView.kt b/app/src/main/java/chat/rocket/android/userdetails/presentation/UserDetailsView.kt
index 1492c5152f..67eaf62686 100644
--- a/app/src/main/java/chat/rocket/android/userdetails/presentation/UserDetailsView.kt
+++ b/app/src/main/java/chat/rocket/android/userdetails/presentation/UserDetailsView.kt
@@ -21,4 +21,17 @@ interface UserDetailsView : LoadingView, MessageView {
status: String,
utcOffset: String
)
+ /**
+ * Disable Kick Button
+ */
+ fun disableKickButton()
+ /**
+ * Enable Kick Button
+ */
+ fun enableKickButton()
+
+ /**
+ * Shows a message that a channel was successfully created.
+ */
+ fun showKickedUserSuccessfullyMessage()
}
diff --git a/app/src/main/java/chat/rocket/android/userdetails/ui/UserDetailsFragment.kt b/app/src/main/java/chat/rocket/android/userdetails/ui/UserDetailsFragment.kt
index 346784b40c..baab89c64f 100644
--- a/app/src/main/java/chat/rocket/android/userdetails/ui/UserDetailsFragment.kt
+++ b/app/src/main/java/chat/rocket/android/userdetails/ui/UserDetailsFragment.kt
@@ -29,14 +29,16 @@ import kotlinx.android.synthetic.main.app_bar_chat_room.*
import kotlinx.android.synthetic.main.fragment_user_details.*
import javax.inject.Inject
-fun newInstance(userId: String): Fragment {
+fun newInstance(userId: String,chatRoomId: String): Fragment {
return UserDetailsFragment().apply {
- arguments = Bundle(1).apply {
+ arguments = Bundle(2).apply {
putString(BUNDLE_USER_ID, userId)
+ putString(BUNDLE_USER_CHATROOM_ID,chatRoomId)
}
}
}
+private const val BUNDLE_USER_CHATROOM_ID = "user_chat_room_id"
internal const val TAG_USER_DETAILS_FRAGMENT = "UserDetailsFragment"
private const val BUNDLE_USER_ID = "user_id"
@@ -46,6 +48,7 @@ class UserDetailsFragment : Fragment(), UserDetailsView {
@Inject
lateinit var analyticsManager: AnalyticsManager
private lateinit var userId: String
+ private lateinit var chatRoomId: String
private val handler = Handler()
override fun onCreate(savedInstanceState: Bundle?) {
@@ -55,6 +58,7 @@ class UserDetailsFragment : Fragment(), UserDetailsView {
val bundle = arguments
if (bundle != null) {
userId = bundle.getString(BUNDLE_USER_ID)
+ chatRoomId = bundle.getString(BUNDLE_USER_CHATROOM_ID)
} else {
requireNotNull(bundle) { "no arguments supplied when the fragment was instantiated" }
}
@@ -72,7 +76,8 @@ class UserDetailsFragment : Fragment(), UserDetailsView {
setupToolbar()
setupListeners()
presenter.loadUserDetails(userId)
-
+ presenter.checkDirectMessageRoomType(chatRoomId)
+ button_kick.setOnClickListener { presenter.kickUser(userId,chatRoomId) }
analyticsManager.logScreenView(ScreenViewEvent.UserDetails)
}
@@ -107,15 +112,23 @@ class UserDetailsFragment : Fragment(), UserDetailsView {
}
override fun showLoading() {
- group_user_details.isVisible = false
view_loading.isVisible = true
}
override fun hideLoading() {
- group_user_details.isVisible = true
view_loading.isVisible = false
}
+ override fun enableKickButton() {
+ button_kick.isVisible = true
+ }
+
+ override fun disableKickButton() {
+ button_kick.isVisible = false
+ }
+
+ override fun showKickedUserSuccessfullyMessage() = showMessage(getString(R.string.msg_kick_user_successfully))
+
override fun showMessage(resId: Int) {
ui { showToast(resId) }
}
diff --git a/app/src/main/res/layout/fragment_user_details.xml b/app/src/main/res/layout/fragment_user_details.xml
index f52cbeeeb3..0c94dde196 100644
--- a/app/src/main/res/layout/fragment_user_details.xml
+++ b/app/src/main/res/layout/fragment_user_details.xml
@@ -126,5 +126,21 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="image_blur, image_avatar, text_name, text_username, text_message, text_title_status, text_description_status, text_title_timezone, text_description_timezone" />
+
+
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index f9c7a89b77..6243a47ad0 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -62,6 +62,7 @@
Registrieren
Bestätigen
Konto löschen
+ Kick user
@@ -76,6 +77,7 @@
+ Kicked user successfully
Entschuldigung, ein Fehler ist aufgetreten, bitte versuchen Sie es noch einmal.
Keine Anzeigedaten vorhanden
Schau dir das an
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 29ac6264db..b5b8bc063b 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -59,6 +59,7 @@
Register
Confirm
Delete account
+ Kick user
@@ -73,6 +74,7 @@
+ Kicked user successfully
Lo sentimos, ha ocurrido un error, por favor intente de nuevo
No hay información para mostrar
Mira esto
diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml
index 9d589770f2..b34bc76814 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -59,6 +59,7 @@
ثبتنام
تایید
حذف حساب کاربری
+ Kick user
@@ -73,6 +74,7 @@
+ Kicked user successfully
متاسفانه مشکلی رخ داد، لطفا دوباره تلاش کنید
اطلاعاتی برای نمایش وجود نداد
اینجا را ببینید
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index cfdb2aa744..4b9a1f8c8a 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -59,6 +59,7 @@
Register
Confirm
Delete account
+ Kick user
@@ -73,6 +74,7 @@
+ Kicked user successfully
Désolé, une erreur s\'est produite. Veuillez réessayer
Aucune donnée à afficher
regarde ça
diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml
index 4333576c24..68a11a96a6 100644
--- a/app/src/main/res/values-hi-rIN/strings.xml
+++ b/app/src/main/res/values-hi-rIN/strings.xml
@@ -59,6 +59,7 @@
रजिस्टर
पुष्टि करें
खाता हटा दो
+ Kick user
@@ -73,6 +74,7 @@
+ Kicked user successfully
क्षमा करें, एक त्रुटि हुई है, कृपया पुनः प्रयास करें
डेटा प्रदर्शित करने के लिए उपलब्ध नहीं हैं
इसकी जांच करें
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index fd003c2954..e1f4f2d022 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -59,6 +59,7 @@
Registra
Conferma
Elimina utente
+ Kick user
@@ -73,6 +74,7 @@
+ Kicked user successfully
Mi dispiace, si è verificato un errore, per favore riprova
Nessun dato da visualizzare
Controllalo
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 3b8c7fad2b..c86d2588c4 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -59,6 +59,7 @@
登録
確認
アカウントを削除する
+ Kick user
@@ -73,6 +74,7 @@
+ Kicked user successfully
エラーが発生しました。もう一度お試しください。
表示するデータがありません
これをチェックする
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 88f7f249fa..d11326526e 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -59,6 +59,7 @@
Registrar
Confirmar
Deletar conta
+ Kick user
@@ -73,6 +74,7 @@
+ Kicked user successfully
Desculpe, ocorreu um erro, tente novamente
Nenhum dado para exibir
Veja isso
diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml
index 75c6c9ccb0..7a116b3465 100644
--- a/app/src/main/res/values-ru-rRU/strings.xml
+++ b/app/src/main/res/values-ru-rRU/strings.xml
@@ -59,6 +59,7 @@
Зарегистрировать
Подтвердить
Удалить аккаунт
+ Kick user
@@ -73,6 +74,7 @@
+ Kicked user successfully
Произошла ошибка, повторите попытку.
Нет данных для отображения
Проверь это
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 5a9b5bdc21..8af4b1a950 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -59,6 +59,7 @@
Register
Confirm
Delete account
+ Kick user
@@ -73,6 +74,7 @@
+ Kicked user successfully
Üzgünüz! bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.
Görüntülenecek veri bulunmamaktadır.
bunu kontrol et
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index dafeb9b375..2e9e457231 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -59,6 +59,7 @@
Register
Confirm
Delete account
+ Kick user
@@ -73,6 +74,7 @@
+ Kicked user successfully
Сталася помилка, спробуйте ще раз.
Немає даних для відображення
Перевір це
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 01abe2f498..58aa8417af 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -59,6 +59,7 @@
注册
确定
删除账户
+ Kick user
@@ -73,6 +74,7 @@
+ Kicked user successfully
对不起发生了错误,请重试
没有数据显示
检查这里
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0ac4208de4..9f5cfee32f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -71,6 +71,7 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
Register
Confirm
Delete account
+ Kick user
@@ -85,6 +86,7 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
+ Kicked user successfully
Sorry, an error has occurred, please try again
No data to display
Check this out