From b96dc0117c7adf49fb21c166bac99bbf50f266f0 Mon Sep 17 00:00:00 2001 From: rapterjet2004 Date: Mon, 13 May 2024 11:06:43 -0500 Subject: [PATCH] WIP Fixes + UI improvements Signed-off-by: rapterjet2004 --- .../java/com/nextcloud/talk/api/NcApi.java | 2 +- .../ConversationInfoActivity.kt | 63 +++++++---- .../talk/models/json/participants/TalkBan.kt | 4 +- .../talk/ui/dialog/DialogBanListFragment.kt | 18 +-- .../main/res/drawable/baseline_block_24.xml | 19 ++++ .../res/layout/activity_conversation_info.xml | 2 +- app/src/main/res/layout/ban_item_list.xml | 2 +- app/src/main/res/layout/dialog_ban_actor.xml | 107 ++++++++++++++++++ app/src/main/res/values/dimens.xml | 1 + app/src/main/res/values/strings.xml | 3 + 10 files changed, 185 insertions(+), 36 deletions(-) create mode 100644 app/src/main/res/drawable/baseline_block_24.xml create mode 100644 app/src/main/res/layout/dialog_ban_actor.xml diff --git a/app/src/main/java/com/nextcloud/talk/api/NcApi.java b/app/src/main/java/com/nextcloud/talk/api/NcApi.java index 66ba1b93ff..cbd17d3461 100644 --- a/app/src/main/java/com/nextcloud/talk/api/NcApi.java +++ b/app/src/main/java/com/nextcloud/talk/api/NcApi.java @@ -727,5 +727,5 @@ Observable banActor(@Header("Authorization") String authorization, @DELETE Observable unbanActor(@Header("Authorization") String authorization, @Url String url, - @Field("banId") int banId); + @Query("banId") int banId); } \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt index 4bad5a2c50..f0800bcfa3 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt @@ -11,7 +11,6 @@ package com.nextcloud.talk.conversationinfo import android.annotation.SuppressLint -import android.content.DialogInterface import android.content.Intent import android.graphics.drawable.ColorDrawable import android.os.Bundle @@ -35,7 +34,6 @@ import com.afollestad.materialdialogs.bottomsheets.BottomSheet import com.afollestad.materialdialogs.datetime.dateTimePicker import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.snackbar.Snackbar -import com.google.android.material.textfield.TextInputEditText import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.talk.R import com.nextcloud.talk.activities.BaseActivity @@ -50,6 +48,7 @@ import com.nextcloud.talk.conversationinfo.viewmodel.ConversationInfoViewModel import com.nextcloud.talk.conversationinfoedit.ConversationInfoEditActivity import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.databinding.ActivityConversationInfoBinding +import com.nextcloud.talk.databinding.DialogBanActorBinding import com.nextcloud.talk.events.EventStatus import com.nextcloud.talk.extensions.loadConversationAvatar import com.nextcloud.talk.extensions.loadNoteToSelfAvatar @@ -753,6 +752,13 @@ class ConversationInfoActivity : binding.notificationSettingsView.callNotificationsSwitch.visibility = GONE } + binding.listBansButton.visibility = + if (ConversationUtils.canModerate(conversationCopy, spreedCapabilities) && + ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL != conversation!!.type + ) { + VISIBLE + } else GONE + if (conversation!!.notificationCalls === null) { binding.notificationSettingsView.callNotificationsSwitch.visibility = GONE } else { @@ -1290,9 +1296,9 @@ class ConversationInfoActivity : if (CapabilitiesUtil.isBanningAvailable(conversationUser.capabilities?.spreedCapability!!)) { items.add( BasicListItemWithImage( - R.drawable.ic_baseline_do_not_touch_24, - "Ban Participant" - ) + R.drawable.baseline_block_24, + "Ban Participant" + ) ) } @@ -1343,24 +1349,7 @@ class ConversationInfoActivity : } 3 -> { // Ban from conversation - val editText = TextInputEditText(context) - val actorTypeConverter = EnumActorTypeConverter() - MaterialAlertDialogBuilder(context) - .setTitle("Include Note") - .setView(editText) - .setPositiveButton("Ok") { _: DialogInterface, _: Int -> - - banActor( - actorTypeConverter.convertToString(participant.actorType!!), - participant.actorId!!, - editText.text.toString() - ) - dismiss() - } - .setNegativeButton("Cancel") { _: DialogInterface, _: Int -> - dismiss() - } - .show() + handleBan(participant) } else -> {} } @@ -1370,6 +1359,34 @@ class ConversationInfoActivity : return true } + private fun MaterialDialog.handleBan(participant: Participant) { + val binding = DialogBanActorBinding.inflate(layoutInflater) + val actorTypeConverter = EnumActorTypeConverter() + val dialog = MaterialAlertDialogBuilder(context) + .setView(binding.root) + .create() + binding.avatarImage.loadUserAvatar( + conversationUser, + participant.actorId!!, + true, + false + ) + binding.displayNameText.text = participant.actorId + binding.buttonBan.setOnClickListener { + banActor( + actorTypeConverter.convertToString(participant.actorType!!), + participant.actorId!!, + binding.banActorEdit.text.toString() + ) + dialog.dismiss() + } + binding.buttonClose.setOnClickListener { dialog.dismiss() } + viewThemeUtils.material.colorTextInputLayout(binding.banActorEditLayout) + viewThemeUtils.material.colorMaterialButtonPrimaryFilled(binding.buttonBan) + viewThemeUtils.material.colorMaterialButtonText(binding.buttonClose) + dialog.show() + } + private fun setUpNotificationSettings(module: DatabaseStorageModule) { binding.notificationSettingsView.notificationSettingsImportantConversation.setOnClickListener { val isChecked = binding.notificationSettingsView.importantConversationSwitch.isChecked diff --git a/app/src/main/java/com/nextcloud/talk/models/json/participants/TalkBan.kt b/app/src/main/java/com/nextcloud/talk/models/json/participants/TalkBan.kt index d419dc114a..1b9b6ea595 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/participants/TalkBan.kt +++ b/app/src/main/java/com/nextcloud/talk/models/json/participants/TalkBan.kt @@ -23,11 +23,13 @@ class TalkBan( var actorId: String?, @JsonField(name = ["bannedType"]) var bannedType: String?, + @JsonField(name = ["bannedId"]) + var bannedId: String?, @JsonField(name = ["bannedTime"]) var bannedTime: Int?, @JsonField(name = ["internalNote"]) var internalNote: String?, ) : Parcelable { // This constructor is added to work with the 'com.bluelinelabs.logansquare.annotation.JsonObject' - constructor() : this(null, null, null, null, null, null) + constructor() : this(null, null, null, null, null, null, null) } diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/DialogBanListFragment.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/DialogBanListFragment.kt index 183436a8ee..a143820c0f 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/DialogBanListFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/DialogBanListFragment.kt @@ -6,8 +6,8 @@ */ package com.nextcloud.talk.ui.dialog -import android.content.res.Resources import android.os.Bundle +import android.text.format.DateUtils import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -23,8 +23,6 @@ import com.nextcloud.talk.databinding.FragmentDialogBanListBinding import com.nextcloud.talk.models.json.participants.TalkBan import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew -import java.text.SimpleDateFormat -import java.util.Date import javax.inject.Inject @AutoInjector(NextcloudTalkApplication::class) @@ -65,12 +63,14 @@ class DialogBanListFragment(val roomToken: String) : DialogFragment() { override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { val binding = BanItemListBinding.inflate(LayoutInflater.from(context)) - binding.banActorName.text = bans[position].actorId - - // TODO get this to work across time zones - val locale = Resources.getSystem().configuration.locale - binding.banTime.text = SimpleDateFormat("MM/dd/yyyy", locale).format( Date(bans[position].bannedTime!! - .toLong())) + binding.banActorName.text = bans[position].bannedId + // TODO check if unban works + val time = bans[position].bannedTime!!.toLong() + binding.banTime.text = DateUtils.formatDateTime( + requireContext(), + time, + DateUtils.FORMAT_SHOW_DATE + ) binding.banReason.text = bans[position].internalNote binding.unbanBtn.setOnClickListener { unBanActor(bans[position].id!!.toInt()) } return binding.root diff --git a/app/src/main/res/drawable/baseline_block_24.xml b/app/src/main/res/drawable/baseline_block_24.xml new file mode 100644 index 0000000000..920379cb37 --- /dev/null +++ b/app/src/main/res/drawable/baseline_block_24.xml @@ -0,0 +1,19 @@ + + + + + + + diff --git a/app/src/main/res/layout/activity_conversation_info.xml b/app/src/main/res/layout/activity_conversation_info.xml index f05fc84d2f..63738ce3d8 100644 --- a/app/src/main/res/layout/activity_conversation_info.xml +++ b/app/src/main/res/layout/activity_conversation_info.xml @@ -371,7 +371,7 @@ android:layout_height="40dp" android:layout_marginEnd="@dimen/standard_margin" android:contentDescription="@null" - android:src="@drawable/ic_baseline_do_not_touch_24" + android:src="@drawable/baseline_block_24" app:tint="@color/grey_600" /> @@ -34,6 +33,7 @@ android:id="@+id/ban_time" android:layout_width="wrap_content" android:layout_height="match_parent" + android:textSize="@dimen/sm_text_size" tools:text="11th August, 2023" /> diff --git a/app/src/main/res/layout/dialog_ban_actor.xml b/app/src/main/res/layout/dialog_ban_actor.xml new file mode 100644 index 0000000000..0bcf22574a --- /dev/null +++ b/app/src/main/res/layout/dialog_ban_actor.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 3e7f741711..9b878c0d0c 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -83,6 +83,7 @@ 24dp 24dp 21dp + 12sp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a5a4879e92..b824292f3c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -788,4 +788,7 @@ How to translate with transifex: Show Banned Participants Bans List Unban + Internal Note + Ban Actor + Ban