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