diff --git a/app/src/main/java/chat/rocket/android/chatdetails/presentation/ChatDetailsNavigator.kt b/app/src/main/java/chat/rocket/android/chatdetails/presentation/ChatDetailsNavigator.kt
index 36ffb2316f..048882860e 100644
--- a/app/src/main/java/chat/rocket/android/chatdetails/presentation/ChatDetailsNavigator.kt
+++ b/app/src/main/java/chat/rocket/android/chatdetails/presentation/ChatDetailsNavigator.kt
@@ -8,6 +8,9 @@ import chat.rocket.android.members.ui.TAG_MEMBERS_FRAGMENT
import chat.rocket.android.mentions.ui.TAG_MENTIONS_FRAGMENT
import chat.rocket.android.pinnedmessages.ui.TAG_PINNED_MESSAGES_FRAGMENT
import chat.rocket.android.util.extensions.addFragmentBackStack
+import android.content.Intent
+import chat.rocket.android.main.ui.MainActivity
+
class ChatDetailsNavigator(internal val activity: ChatDetailsActivity) {
@@ -40,4 +43,12 @@ class ChatDetailsNavigator(internal val activity: ChatDetailsActivity) {
chat.rocket.android.files.ui.newInstance(chatRoomId)
}
}
+
+ fun toChatList() {
+ val intent = Intent(activity.applicationContext, MainActivity::class.java).apply {
+ addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
+ }
+ activity.startActivity(intent)
+ activity.finish()
+ }
}
diff --git a/app/src/main/java/chat/rocket/android/chatdetails/presentation/ChatDetailsPresenter.kt b/app/src/main/java/chat/rocket/android/chatdetails/presentation/ChatDetailsPresenter.kt
index 5a1518b10f..56f22ea76c 100644
--- a/app/src/main/java/chat/rocket/android/chatdetails/presentation/ChatDetailsPresenter.kt
+++ b/app/src/main/java/chat/rocket/android/chatdetails/presentation/ChatDetailsPresenter.kt
@@ -6,8 +6,10 @@ import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.retryIO
+import chat.rocket.common.RocketChatException
import chat.rocket.common.model.roomTypeOf
import chat.rocket.common.util.ifNull
+import chat.rocket.core.internal.rest.deleteChannel
import chat.rocket.core.internal.rest.getInfo
import chat.rocket.core.model.Room
import javax.inject.Inject
@@ -61,6 +63,27 @@ class ChatDetailsPresenter @Inject constructor(
navigator.toFavoriteMessageList(chatRoomId)
}
+ fun deleteChannel(chatRoomType: String, chatRoomId: String) {
+ launchUI(strategy) {
+ view.showLoading()
+ try {
+ retryIO(description = "deleteChannel(${roomTypeOf(chatRoomType)},$chatRoomId") {
+ client.deleteChannel(roomTypeOf(chatRoomType),chatRoomId)
+ }
+ navigator.toChatList()
+
+ } catch (exception: RocketChatException) {
+ exception.message?.let {
+ view.showMessage(it)
+ }.ifNull {
+ view.showGenericErrorMessage()
+ }
+ } finally {
+ view.hideLoading()
+ }
+ }
+ }
+
private fun roomToChatDetails(room: Room): ChatDetails {
return with(room) {
ChatDetails(
diff --git a/app/src/main/java/chat/rocket/android/chatdetails/presentation/ChatDetailsView.kt b/app/src/main/java/chat/rocket/android/chatdetails/presentation/ChatDetailsView.kt
index ede8290e30..3b4f4b83a9 100644
--- a/app/src/main/java/chat/rocket/android/chatdetails/presentation/ChatDetailsView.kt
+++ b/app/src/main/java/chat/rocket/android/chatdetails/presentation/ChatDetailsView.kt
@@ -4,6 +4,6 @@ import chat.rocket.android.chatdetails.domain.ChatDetails
import chat.rocket.android.core.behaviours.LoadingView
import chat.rocket.android.core.behaviours.MessageView
-interface ChatDetailsView: MessageView {
+interface ChatDetailsView: LoadingView, MessageView {
fun displayDetails(room: ChatDetails)
}
\ No newline at end of file
diff --git a/app/src/main/java/chat/rocket/android/chatdetails/ui/ChatDetailsActivity.kt b/app/src/main/java/chat/rocket/android/chatdetails/ui/ChatDetailsActivity.kt
index f2cc66d5c2..4814b8c341 100644
--- a/app/src/main/java/chat/rocket/android/chatdetails/ui/ChatDetailsActivity.kt
+++ b/app/src/main/java/chat/rocket/android/chatdetails/ui/ChatDetailsActivity.kt
@@ -18,13 +18,15 @@ fun Context.chatDetailsIntent(
chatRoomId: String,
chatRoomType: String,
isSubscribed: Boolean = true,
- isMenuDisabled: Boolean = false
+ isMenuDisabled: Boolean = false,
+ isOwner: Boolean = false
): Intent {
return Intent(this, ChatDetailsActivity::class.java).apply {
putExtra(INTENT_CHAT_ROOM_ID, chatRoomId)
putExtra(INTENT_CHAT_ROOM_TYPE, chatRoomType)
putExtra(INTENT_CHAT_IS_SUBSCRIBED, isSubscribed)
putExtra(INTENT_CHAT_DISABLED_MENU, isMenuDisabled)
+ putExtra(INTENT_CHAT_IS_OWNER, isOwner)
}
}
@@ -32,6 +34,7 @@ private const val INTENT_CHAT_ROOM_ID = "chat_room_id"
private const val INTENT_CHAT_ROOM_TYPE = "chat_room_type"
private const val INTENT_CHAT_IS_SUBSCRIBED = "is_chat_room_subscribed"
private const val INTENT_CHAT_DISABLED_MENU = "is_menu_disabled"
+private const val INTENT_CHAT_IS_OWNER = "is_owner"
class ChatDetailsActivity: AppCompatActivity(), HasSupportFragmentInjector {
@Inject
@@ -51,10 +54,11 @@ class ChatDetailsActivity: AppCompatActivity(), HasSupportFragmentInjector {
val isSubscribed = intent.getBooleanExtra(INTENT_CHAT_IS_SUBSCRIBED, true)
val disableMenu = intent.getBooleanExtra(INTENT_CHAT_DISABLED_MENU, false)
+ val isOwner = intent.getBooleanExtra(INTENT_CHAT_IS_OWNER,false)
if (supportFragmentManager.findFragmentByTag(TAG_CHAT_DETAILS_FRAGMENT) == null) {
addFragment(TAG_CHAT_DETAILS_FRAGMENT, R.id.fragment_container) {
- newInstance(chatRoomId, chatRoomType, isSubscribed, disableMenu)
+ newInstance(chatRoomId, chatRoomType, isSubscribed, disableMenu, isOwner)
}
}
}
diff --git a/app/src/main/java/chat/rocket/android/chatdetails/ui/ChatDetailsFragment.kt b/app/src/main/java/chat/rocket/android/chatdetails/ui/ChatDetailsFragment.kt
index 43ffd17da9..f1e7f51833 100644
--- a/app/src/main/java/chat/rocket/android/chatdetails/ui/ChatDetailsFragment.kt
+++ b/app/src/main/java/chat/rocket/android/chatdetails/ui/ChatDetailsFragment.kt
@@ -1,9 +1,11 @@
package chat.rocket.android.chatdetails.ui
+import android.app.AlertDialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
@@ -29,7 +31,8 @@ fun newInstance(
chatRoomId: String,
chatRoomType: String,
isSubscribed: Boolean,
- disableMenu: Boolean
+ disableMenu: Boolean,
+ isOwner: Boolean
): ChatDetailsFragment {
return ChatDetailsFragment().apply {
arguments = Bundle(1).apply {
@@ -37,6 +40,7 @@ fun newInstance(
putString(BUNDLE_CHAT_ROOM_TYPE, chatRoomType)
putBoolean(BUNDLE_IS_SUBSCRIBED, isSubscribed)
putBoolean(BUNDLE_DISABLE_MENU, disableMenu)
+ putBoolean(BUNDLE_IS_OWNER, isOwner)
}
}
}
@@ -47,6 +51,7 @@ private const val BUNDLE_CHAT_ROOM_ID = "BUNDLE_CHAT_ROOM_ID"
private const val BUNDLE_CHAT_ROOM_TYPE = "BUNDLE_CHAT_ROOM_TYPE"
private const val BUNDLE_IS_SUBSCRIBED = "BUNDLE_IS_SUBSCRIBED"
private const val BUNDLE_DISABLE_MENU = "BUNDLE_DISABLE_MENU"
+private const val BUNDLE_IS_OWNER = "BUNDLE_IS_OWNER"
class ChatDetailsFragment: Fragment(), ChatDetailsView {
@Inject
@@ -62,6 +67,7 @@ class ChatDetailsFragment: Fragment(), ChatDetailsView {
private var chatRoomType: String? = null
private var isSubscribed: Boolean = true
private var disableMenu: Boolean = false
+ private var isOwner: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -72,6 +78,7 @@ class ChatDetailsFragment: Fragment(), ChatDetailsView {
chatRoomType = bundle.getString(BUNDLE_CHAT_ROOM_TYPE)
isSubscribed = bundle.getBoolean(BUNDLE_IS_SUBSCRIBED)
disableMenu = bundle.getBoolean(BUNDLE_DISABLE_MENU)
+ isOwner = bundle.getBoolean(BUNDLE_IS_OWNER)
}
}
@@ -87,6 +94,22 @@ class ChatDetailsFragment: Fragment(), ChatDetailsView {
setupOptions()
setupToolbar()
getDetails()
+
+ button_delete.setOnClickListener {
+ ui {
+ val builder = AlertDialog.Builder(it)
+ builder.setTitle(it.getString(R.string.action_delete_channel))
+ .setMessage(it.getString(R.string.msg_delete_description))
+ .setPositiveButton(it.getString(R.string.msg_ok)) { _, _ ->
+ presenter.deleteChannel(
+ chatRoomType!!,
+ chatRoomId!!
+ )
+ }
+ .setNegativeButton(it.getString(R.string.msg_cancel)) { _, _ -> }
+ .show()
+ }
+ }
}
override fun displayDetails(room: ChatDetails) {
@@ -97,11 +120,25 @@ class ChatDetailsFragment: Fragment(), ChatDetailsView {
content_topic.text = if (room.topic.isNullOrEmpty()) getString(R.string.msg_no_topic) else room.topic
content_announcement.text = if (room.announcement.isNullOrEmpty()) getString(R.string.msg_no_announcement) else room.announcement
content_description.text = if (room.description.isNullOrEmpty()) getString(R.string.msg_no_description) else room.description
+ button_delete.isVisible = isOwner and (chatRoomType != RoomType.DIRECT_MESSAGE)
}
}
override fun showGenericErrorMessage() = showMessage(R.string.msg_generic_error)
+ override fun showLoading() {
+ ui {
+ view_loading.isVisible = true
+ }
+ }
+
+ override fun hideLoading() {
+ ui {
+ view_loading.isVisible = false
+ }
+ }
+
+
override fun showMessage(resId: Int) {
ui {
showToast(resId)
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 53ea424f56..bf34ba24e8 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
@@ -18,14 +18,16 @@ class ChatRoomNavigator(internal val activity: ChatRoomActivity) {
chatRoomId: String,
chatRoomType: String,
isChatRoomSubscribed: Boolean,
- isMenuDisabled: Boolean
+ isMenuDisabled: Boolean,
+ isOwner: Boolean
) {
activity.startActivity(
activity.chatDetailsIntent(
chatRoomId,
chatRoomType,
isChatRoomSubscribed,
- isMenuDisabled
+ isMenuDisabled,
+ isOwner
)
)
}
diff --git a/app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomPresenter.kt b/app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomPresenter.kt
index ad9615e20a..5c18e16bb7 100644
--- a/app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomPresenter.kt
+++ b/app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomPresenter.kt
@@ -147,12 +147,16 @@ class ChatRoomPresenter @Inject constructor(
} finally {
// User has at least an 'owner' or 'moderator' role.
val canModerate = isOwnerOrMod()
+
+ val isOwner = isOwner()
+
// Can post anyway if has the 'post-readonly' permission on server.
val room = dbManager.getRoom(roomId)
room?.let {
chatIsBroadcast = it.chatRoom.broadcast ?: false
val roomUiModel = roomMapper.map(it, true)
launchUI(strategy) {
+ view.onIsOwnerUpdated(isOwner = isOwner)
view.onRoomUpdated(roomUiModel = roomUiModel.copy(
broadcast = chatIsBroadcast,
canModerate = canModerate,
@@ -200,6 +204,12 @@ class ChatRoomPresenter @Inject constructor(
} ?: false
}
+ private fun isOwner(): Boolean {
+ return chatRoles.firstOrNull { it.user.username == currentLoggedUsername }?.roles?.any {
+ it == "owner"
+ } ?: false
+ }
+
fun loadMessages(
chatRoomId: String,
chatRoomType: String,
@@ -912,9 +922,10 @@ class ChatRoomPresenter @Inject constructor(
chatRoomId: String,
chatRoomType: String,
isSubscribed: Boolean,
- isMenuDisabled: Boolean
+ isMenuDisabled: Boolean,
+ isOwner: Boolean
) {
- navigator.toChatDetails(chatRoomId, chatRoomType, isSubscribed, isMenuDisabled)
+ navigator.toChatDetails(chatRoomId, chatRoomType, isSubscribed, isMenuDisabled, isOwner)
}
fun loadChatRoomsSuggestions() {
diff --git a/app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomView.kt b/app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomView.kt
index 15f241b2cb..6b72b176b8 100644
--- a/app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomView.kt
+++ b/app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomView.kt
@@ -145,4 +145,6 @@ interface ChatRoomView : LoadingView, MessageView {
fun onRoomUpdated(roomUiModel: RoomUiModel)
+ fun onIsOwnerUpdated(isOwner: Boolean)
+
}
diff --git a/app/src/main/java/chat/rocket/android/chatroom/ui/ChatRoomFragment.kt b/app/src/main/java/chat/rocket/android/chatroom/ui/ChatRoomFragment.kt
index 246cc76705..2fb0188c4e 100644
--- a/app/src/main/java/chat/rocket/android/chatroom/ui/ChatRoomFragment.kt
+++ b/app/src/main/java/chat/rocket/android/chatroom/ui/ChatRoomFragment.kt
@@ -169,6 +169,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
internal var citation: String? = null
private var editingMessageId: String? = null
internal var disableMenu: Boolean = false
+ internal var isOwner: Boolean = false
private val compositeDisposable = CompositeDisposable()
private var playComposeMessageButtonsAnimation = true
@@ -1168,4 +1169,8 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
setReactionButtonIcon(R.drawable.ic_reaction_24dp)
}
}
+
+ override fun onIsOwnerUpdated (isOwner: Boolean) {
+ this.isOwner = isOwner
+ }
}
diff --git a/app/src/main/java/chat/rocket/android/chatroom/ui/Menu.kt b/app/src/main/java/chat/rocket/android/chatroom/ui/Menu.kt
index 1024bd6947..f89c34e10e 100644
--- a/app/src/main/java/chat/rocket/android/chatroom/ui/Menu.kt
+++ b/app/src/main/java/chat/rocket/android/chatroom/ui/Menu.kt
@@ -25,7 +25,8 @@ internal fun ChatRoomFragment.setOnMenuItemClickListener(item: MenuItem) {
chatRoomId,
chatRoomType,
isSubscribed,
- disableMenu
+ disableMenu,
+ isOwner
)
}
}
diff --git a/app/src/main/res/layout/fragment_chat_details.xml b/app/src/main/res/layout/fragment_chat_details.xml
index 4fe60a735b..88676eace7 100644
--- a/app/src/main/res/layout/fragment_chat_details.xml
+++ b/app/src/main/res/layout/fragment_chat_details.xml
@@ -1,75 +1,121 @@
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
-
-
-
+ android:layout_margin="5dp"
+ android:background="#f5455c"
+ android:fontFamily="sans-serif"
+ android:text="@string/action_delete_channel"
+ android:textColor="@color/color_white"
+ android:textSize="17sp"
+ android:visibility="gone"
+ tools:visibility="visible"/>
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 796aa664c9..8619e4fc67 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -59,6 +59,7 @@
Registrieren
Bestätigen
Konto löschen
+ Delete Channel
@@ -187,6 +188,7 @@
Permalink kopiert
E-Mail senden
Android App-Unterstützung
+ Are you sure you want to delete this channel
Analytics tracking
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index ee7c2b76e4..54ef04cad2 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -58,6 +58,7 @@
Register
Confirm
Delete account
+ Delete channel
@@ -157,6 +158,7 @@
Continue with WordPress
Two-factor Authentication
What’s your 2FA code?
+ Are you sure you want to delete this channel
Privado
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 9e047cc769..eaec0a987b 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
+ Supprimer le canal
@@ -149,6 +150,7 @@
envoyer
Supprimer Message
Êtes-vous sûr de vouloir supprimer ce message
+ Êtes-vous sûr de vouloir supprimer ce canal?
Welcome to Rocket.Chat
Team Communication
Login with e-mail
diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml
index 8d2940fd88..187875dce9 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 @@
रजिस्टर
पुष्टि करें
खाता हटा दो
+ चैनल हटाएं
@@ -164,6 +165,7 @@
WordPress के साथ जारी रखें
दो तरीकों से प्रमाणीकरण
आपका 2FA कोड क्या है?
+ क्या आप वाकई इस चैनल को हटाना चाहते हैं?
प्राइवेट
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 435a5fc32c..b138ec496b 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
+ Elimina canale
@@ -188,6 +189,7 @@
vedere di più
vedere di meno
Sei disattivato su questo canale
+ Sei sicuro di voler eliminare questo canale
Tracciamento Analitico
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index ffe09229ab..f505cd4032 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -61,6 +61,7 @@
登録
確認
アカウントを削除する
+ チャンネルを削除
@@ -193,6 +194,7 @@
パーマリンクのコピー
Send email
Android app support
+ このチャンネルを削除してもよろしいですか
トラッキングの分析
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index de57e7bcb3..471d6d84e4 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
+ Excluir canal
@@ -174,6 +175,7 @@
Não foi possível atualizar a senha. Mensagem de erro: %1$s
Senha alterada com sucesso
Ordenar
+ Tem certeza de que deseja excluir este canal?
- %1$s reagiu com %2$s
- %1$s reagiram com %2$s
diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml
index 99418c4691..3799f3fc92 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 @@
Зарегистрировать
Подтвердить
Удалить аккаунт
+ Удалить канал
@@ -172,6 +173,7 @@
Вы лишены дара речи на этом канале
Невозможно обновить пароль. Ошибка: %1$s
Пароль успешно обновлен
+ Вы уверены, что хотите удалить этот канал?
- %1$s реагирует с %2$s
- %1$s реагируют с %2$s
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 2a0a4aed48..e4be5151ee 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
+ Kanalı sil
@@ -178,6 +179,7 @@
Bu mesajı silmek istediğinizden emin misiniz
Daha fazla göster
Daha az göster
+ Bu kanalı silmek istediğinden emin misin?
Permalink copied
Send email
Android app support
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 19881aafe6..1809d8eded 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
+ Видалити канал
@@ -147,6 +148,7 @@
Надіслати
Видалити повідомлення
Ви впевнені, що хочете видалити це повідомлення?
+ Дійсно видалити цей канал
Welcome to Rocket.Chat
Team Communication
Login with e-mail
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ee039bcb3d..210839ab46 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
+ Delete Channel
@@ -205,6 +206,7 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
view more
view less
You are muted on this channel
+ Are you sure you want to delete this channel
Analytics tracking