diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f2df4623c..9c3b87f8d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -210,6 +210,10 @@ android:name=".settings.SettingsActivity" android:theme="@style/AppTheme" /> + + diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index c42dbbaa1..4fa5c195d 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -126,6 +126,7 @@ import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.callbacks.MentionAutocompleteCallback import com.nextcloud.talk.controllers.base.BaseController import com.nextcloud.talk.controllers.util.viewBinding +import com.nextcloud.talk.conversation.info.ConversationInfoActivity import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.databinding.ControllerChatBinding import com.nextcloud.talk.events.UserMentionClickEvent @@ -1778,11 +1779,10 @@ class ChatController(args: Bundle) : bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, conversationUser) bundle.putString(KEY_ROOM_TOKEN, roomToken) bundle.putBoolean(BundleKeys.KEY_ROOM_ONE_TO_ONE, isOneToOneConversation()) - router.pushController( - RouterTransaction.with(ConversationInfoController(bundle)) - .pushChangeHandler(HorizontalChangeHandler()) - .popChangeHandler(HorizontalChangeHandler()) - ) + + val intent = Intent(activity, ConversationInfoActivity::class.java) + intent.putExtras(bundle) + activity!!.startActivity(intent) } private fun setupMentionAutocomplete() { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt b/app/src/main/java/com/nextcloud/talk/conversation/info/ConversationInfoActivity.kt similarity index 81% rename from app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt rename to app/src/main/java/com/nextcloud/talk/conversation/info/ConversationInfoActivity.kt index 701a644c8..58c10d32d 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt +++ b/app/src/main/java/com/nextcloud/talk/conversation/info/ConversationInfoActivity.kt @@ -5,7 +5,7 @@ * @author Andy Scherzinger * @author Tim Krüger * @author Marcel Hibbe - * Copyright (C) 2022 Marcel Hibbe (dev@mhibbe.de) + * Copyright (C) 2022-2023 Marcel Hibbe (dev@mhibbe.de) * Copyright (C) 2021-2022 Tim Krüger * Copyright (C) 2021 Andy Scherzinger (info@andy-scherzinger.de) * Copyright (C) 2017-2018 Mario Danic @@ -24,21 +24,22 @@ * along with this program. If not, see . */ -package com.nextcloud.talk.controllers +package com.nextcloud.talk.conversation.info import android.annotation.SuppressLint import android.content.Intent +import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.os.Parcelable import android.text.TextUtils import android.util.Log -import android.view.MenuItem import android.view.View import android.view.View.GONE import android.view.View.VISIBLE import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.appcompat.widget.SwitchCompat +import androidx.core.content.res.ResourcesCompat import androidx.work.Data import androidx.work.OneTimeWorkRequest import androidx.work.WorkManager @@ -47,18 +48,14 @@ import com.afollestad.materialdialogs.LayoutMode.WRAP_CONTENT import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.bottomsheets.BottomSheet import com.afollestad.materialdialogs.datetime.dateTimePicker -import com.bluelinelabs.conductor.RouterTransaction -import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.nextcloud.talk.R +import com.nextcloud.talk.activities.BaseActivity import com.nextcloud.talk.adapters.items.ParticipantItem import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.application.NextcloudTalkApplication -import com.nextcloud.talk.controllers.base.BaseController import com.nextcloud.talk.controllers.bottomsheet.items.BasicListItemWithImage import com.nextcloud.talk.controllers.bottomsheet.items.listItemsWithImage -import com.nextcloud.talk.controllers.util.viewBinding -import com.nextcloud.talk.conversation.info.GuestAccessHelper import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.databinding.ControllerConversationInfoBinding import com.nextcloud.talk.events.EventStatus @@ -82,6 +79,7 @@ import com.nextcloud.talk.shareditems.activities.SharedItemsActivity import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.DateConstants import com.nextcloud.talk.utils.DateUtils +import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.bundle.BundleKeys import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew import com.nextcloud.talk.utils.preferences.preferencestorage.DatabaseStorageModule @@ -91,7 +89,6 @@ import io.reactivex.Observer import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers -import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode import java.util.Calendar @@ -100,14 +97,11 @@ import java.util.Locale import javax.inject.Inject @AutoInjector(NextcloudTalkApplication::class) -class ConversationInfoController(args: Bundle) : - BaseController( - R.layout.controller_conversation_info, - args - ), +class ConversationInfoActivity() : + BaseActivity(), FlexibleAdapter.OnItemClickListener { - private val binding: ControllerConversationInfoBinding? by viewBinding(ControllerConversationInfoBinding::bind) + private lateinit var binding: ControllerConversationInfoBinding @Inject lateinit var ncApi: NcApi @@ -115,16 +109,13 @@ class ConversationInfoController(args: Bundle) : @Inject lateinit var conversationsRepository: ConversationsRepository - @Inject - lateinit var eventBus: EventBus - @Inject lateinit var dateUtils: DateUtils - private val conversationToken: String? - private val conversationUser: User? - private val hasAvatarSpacing: Boolean - private val credentials: String? + private lateinit var conversationToken: String + private lateinit var conversationUser: User + private var hasAvatarSpacing: Boolean = false + private lateinit var credentials: String private var roomDisposable: Disposable? = null private var participantsDisposable: Disposable? = null @@ -146,68 +137,120 @@ class ConversationInfoController(args: Bundle) : return null } - init { - setHasOptionsMenu(true) - NextcloudTalkApplication.sharedApplication?.componentApplication?.inject(this) - conversationUser = args.getParcelable(BundleKeys.KEY_USER_ENTITY) - conversationToken = args.getString(BundleKeys.KEY_ROOM_TOKEN) - hasAvatarSpacing = args.getBoolean(BundleKeys.KEY_ROOM_ONE_TO_ONE, false) - credentials = ApiUtils.getCredentials(conversationUser!!.username, conversationUser.token) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this) + + binding = ControllerConversationInfoBinding.inflate(layoutInflater) + setupActionBar() + setupSystemColors() + setContentView(binding.root) + + conversationUser = intent.getParcelableExtra(BundleKeys.KEY_USER_ENTITY)!! + conversationToken = intent.getStringExtra(BundleKeys.KEY_ROOM_TOKEN)!! + hasAvatarSpacing = intent.getBooleanExtra(BundleKeys.KEY_ROOM_ONE_TO_ONE, false) + credentials = ApiUtils.getCredentials(conversationUser.username, conversationUser.token) } - override fun onOptionsItemSelected(item: MenuItem): Boolean { - when (item.itemId) { - android.R.id.home -> { - router.popCurrentController() - return true - } - else -> return super.onOptionsItemSelected(item) - } - } - - override fun onAttach(view: View) { - super.onAttach(view) - eventBus.register(this) + override fun onResume() { + super.onResume() if (databaseStorageModule == null) { - databaseStorageModule = DatabaseStorageModule(conversationUser!!, conversationToken) + databaseStorageModule = DatabaseStorageModule(conversationUser, conversationToken) } - binding?.notificationSettingsView?.notificationSettings?.setStorageModule(databaseStorageModule) - binding?.webinarInfoView?.webinarSettings?.setStorageModule(databaseStorageModule) - binding?.guestAccessView?.guestAccessSettings?.setStorageModule(databaseStorageModule) + binding.notificationSettingsView.notificationSettings.setStorageModule(databaseStorageModule) + binding.webinarInfoView.webinarSettings.setStorageModule(databaseStorageModule) + binding.guestAccessView.guestAccessSettings.setStorageModule(databaseStorageModule) - binding?.deleteConversationAction?.setOnClickListener { showDeleteConversationDialog() } - binding?.leaveConversationAction?.setOnClickListener { leaveConversation() } - binding?.clearConversationHistory?.setOnClickListener { showClearHistoryDialog() } - binding?.addParticipantsAction?.setOnClickListener { addParticipants() } + binding.deleteConversationAction.setOnClickListener { showDeleteConversationDialog() } + binding.leaveConversationAction.setOnClickListener { leaveConversation() } + binding.clearConversationHistory.setOnClickListener { showClearHistoryDialog() } + binding.addParticipantsAction.setOnClickListener { addParticipants() } if (CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "rich-object-list-media")) { - binding?.showSharedItemsAction?.setOnClickListener { showSharedItems() } + binding.showSharedItemsAction.setOnClickListener { showSharedItems() } } else { - binding?.categorySharedItems?.visibility = GONE + binding.categorySharedItems.visibility = GONE } fetchRoomInfo() themeCategories() themeSwitchPreferences() + + binding.addParticipantsAction.visibility = GONE + + binding.progressBar.let { viewThemeUtils.platform.colorCircularProgressBar(it) } } + private fun setupActionBar() { + setSupportActionBar(binding.conversationInfoToolbar) + binding.conversationInfoToolbar.setNavigationOnClickListener { + onBackPressed() + } + supportActionBar?.setDisplayHomeAsUpEnabled(true) + supportActionBar?.setDisplayShowHomeEnabled(true) + supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(android.R.color.transparent))) + supportActionBar?.title = if (hasAvatarSpacing) { + " " + resources!!.getString(R.string.nc_conversation_menu_conversation_info) + } else { + resources!!.getString(R.string.nc_conversation_menu_conversation_info) + } + } + + private fun setupSystemColors() { + DisplayUtils.applyColorToStatusBar( + this, + ResourcesCompat.getColor( + resources, + R.color.appbar, + null + ) + ) + DisplayUtils.applyColorToNavigationBar( + this.window, + ResourcesCompat.getColor(resources, R.color.bg_default, null) + ) + } + + // override fun onCreateOptionsMenu(menu: Menu): Boolean { + // super.onCreateOptionsMenu(menu) + // menuInflater.inflate(R.menu.menu_locationpicker, menu) + // return true + // } + // + // override fun onPrepareOptionsMenu(menu: Menu): Boolean { + // super.onPrepareOptionsMenu(menu) + // // searchItem = menu.findItem(R.id.location_action_search) + // // initSearchView() + // return true + // } + + // override fun onOptionsItemSelected(item: MenuItem): Boolean { + // when (item.itemId) { + // android.R.id.home -> { + // finish() + // return true + // } + // else -> return super.onOptionsItemSelected(item) + // } + // } + private fun themeSwitchPreferences() { - binding?.run { + binding.run { listOf( - binding?.webinarInfoView?.conversationInfoLobby!!, - binding?.notificationSettingsView?.callNotifications!!, - binding?.notificationSettingsView?.conversationInfoPriorityConversation!!, - binding?.guestAccessView?.guestAccessAllowSwitch!!, - binding?.guestAccessView?.guestAccessPasswordSwitch!! + binding.webinarInfoView.conversationInfoLobby, + binding.notificationSettingsView.callNotifications, + binding.notificationSettingsView.conversationInfoPriorityConversation, + binding.guestAccessView.guestAccessAllowSwitch, + binding.guestAccessView.guestAccessPasswordSwitch ).forEach(viewThemeUtils.talk::colorSwitchPreference) } } private fun themeCategories() { - binding?.run { + binding.run { listOf( conversationInfoName, conversationDescription, @@ -216,30 +259,22 @@ class ConversationInfoController(args: Bundle) : ownOptions, categorySharedItems, categoryConversationSettings, - binding?.guestAccessView?.guestAccessCategory!!, - binding?.webinarInfoView?.conversationInfoWebinar!!, - binding?.notificationSettingsView?.notificationSettingsCategory!! + binding.guestAccessView.guestAccessCategory, + binding.webinarInfoView.conversationInfoWebinar, + binding.notificationSettingsView.notificationSettingsCategory ).forEach(viewThemeUtils.talk::colorPreferenceCategory) } } private fun showSharedItems() { - val intent = Intent(activity, SharedItemsActivity::class.java) + val intent = Intent(this, SharedItemsActivity::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) intent.putExtra(BundleKeys.KEY_CONVERSATION_NAME, conversation?.displayName) intent.putExtra(BundleKeys.KEY_ROOM_TOKEN, conversationToken) intent.putExtra(BundleKeys.KEY_USER_ENTITY, conversationUser as Parcelable) intent.putExtra(SharedItemsActivity.KEY_USER_IS_OWNER_OR_MODERATOR, conversation?.isParticipantOwnerOrModerator) - activity!!.startActivity(intent) - } - - override fun onViewBound(view: View) { - super.onViewBound(view) - - binding?.addParticipantsAction?.visibility = GONE - - binding?.progressBar?.let { viewThemeUtils.platform.colorCircularProgressBar(it) } + startActivity(intent) } private fun setupWebinaryView() { @@ -257,7 +292,7 @@ class ConversationInfoController(args: Bundle) : reconfigureLobbyTimerView() binding?.webinarInfoView?.startTimePreferences?.setOnClickListener { - MaterialDialog(activity!!, BottomSheet(WRAP_CONTENT)).show { + MaterialDialog(this, BottomSheet(WRAP_CONTENT)).show { val currentTimeCalendar = Calendar.getInstance() if (conversation!!.lobbyTimer != null && conversation!!.lobbyTimer != 0L) { currentTimeCalendar.timeInMillis = conversation!!.lobbyTimer!! * DateConstants.SECOND_DIVIDER @@ -345,7 +380,7 @@ class ConversationInfoController(args: Bundle) : val apiVersion = ApiUtils.getConversationApiVersion(conversationUser, intArrayOf(ApiUtils.APIv4, 1)) ncApi.setLobbyForConversation( - ApiUtils.getCredentials(conversationUser!!.username, conversationUser.token), + ApiUtils.getCredentials(conversationUser.username, conversationUser.token), ApiUtils.getUrlForRoomWebinaryLobby(apiVersion, conversationUser.baseUrl, conversation!!.token), state, conversation!!.lobbyTimer @@ -376,54 +411,45 @@ class ConversationInfoController(args: Bundle) : getListOfParticipants() } - override fun onDetach(view: View) { - super.onDetach(view) - eventBus.unregister(this) - } - private fun showDeleteConversationDialog() { - if (activity != null) { - binding?.conversationInfoName?.let { - val dialogBuilder = MaterialAlertDialogBuilder(it.context) - .setIcon( - viewThemeUtils.dialog.colorMaterialAlertDialogIcon( - context, - R.drawable.ic_delete_black_24dp - ) + binding.conversationInfoName.let { + val dialogBuilder = MaterialAlertDialogBuilder(it.context) + .setIcon( + viewThemeUtils.dialog.colorMaterialAlertDialogIcon( + context, + R.drawable.ic_delete_black_24dp ) - .setTitle(R.string.nc_delete_call) - .setMessage(R.string.nc_delete_conversation_more) - .setPositiveButton(R.string.nc_delete) { _, _ -> - deleteConversation() - } - .setNegativeButton(R.string.nc_cancel) { _, _ -> - // unused atm - } - - viewThemeUtils.dialog - .colorMaterialAlertDialogBackground(it.context, dialogBuilder) - val dialog = dialogBuilder.show() - viewThemeUtils.platform.colorTextButtons( - dialog.getButton(AlertDialog.BUTTON_POSITIVE), - dialog.getButton(AlertDialog.BUTTON_NEGATIVE) ) - } + .setTitle(R.string.nc_delete_call) + .setMessage(R.string.nc_delete_conversation_more) + .setPositiveButton(R.string.nc_delete) { _, _ -> + deleteConversation() + } + .setNegativeButton(R.string.nc_cancel) { _, _ -> + // unused atm + } + + viewThemeUtils.dialog + .colorMaterialAlertDialogBackground(it.context, dialogBuilder) + val dialog = dialogBuilder.show() + viewThemeUtils.platform.colorTextButtons( + dialog.getButton(AlertDialog.BUTTON_POSITIVE), + dialog.getButton(AlertDialog.BUTTON_NEGATIVE) + ) } } private fun setupAdapter() { - if (activity != null) { - if (adapter == null) { - adapter = FlexibleAdapter(userItems, activity, true) - } - - val layoutManager = SmoothScrollLinearLayoutManager(activity) - binding?.recyclerView?.layoutManager = layoutManager - binding?.recyclerView?.setHasFixedSize(true) - binding?.recyclerView?.adapter = adapter - - adapter!!.addListener(this) + if (adapter == null) { + adapter = FlexibleAdapter(userItems, this, true) } + + val layoutManager = SmoothScrollLinearLayoutManager(this) + binding.recyclerView.layoutManager = layoutManager + binding.recyclerView.setHasFixedSize(true) + binding.recyclerView.adapter = adapter + + adapter!!.addListener(this) } private fun handleParticipants(participants: List) { @@ -435,7 +461,7 @@ class ConversationInfoController(args: Bundle) : for (i in participants.indices) { participant = participants[i] - userItem = ParticipantItem(router.activity, participant, conversationUser, viewThemeUtils) + userItem = ParticipantItem(this, participant, conversationUser, viewThemeUtils) if (participant.sessionId != null) { userItem.isOnline = !participant.sessionId.equals("0") } else { @@ -461,18 +487,10 @@ class ConversationInfoController(args: Bundle) : setupAdapter() - binding?.participantsListCategory?.visibility = VISIBLE + binding.participantsListCategory?.visibility = VISIBLE adapter!!.updateDataSet(userItems) } - override val title: String - get() = - if (hasAvatarSpacing) { - " " + resources!!.getString(R.string.nc_conversation_menu_conversation_info) - } else { - resources!!.getString(R.string.nc_conversation_menu_conversation_info) - } - private fun getListOfParticipants() { var apiVersion = 1 // FIXME Fix API checking with guests? @@ -528,19 +546,20 @@ class ConversationInfoController(args: Bundle) : bundle.putStringArrayList(BundleKeys.KEY_EXISTING_PARTICIPANTS, existingParticipantsId) bundle.putString(BundleKeys.KEY_TOKEN, conversation!!.token) - router.pushController( - ( - RouterTransaction.with( - ContactsController(bundle) - ) - .pushChangeHandler( - HorizontalChangeHandler() - ) - .popChangeHandler( - HorizontalChangeHandler() - ) - ) - ) + // TODO fix to open Contacts + // router.pushController( + // ( + // RouterTransaction.with( + // ContactsController(bundle) + // ) + // .pushChangeHandler( + // HorizontalChangeHandler() + // ) + // .popChangeHandler( + // HorizontalChangeHandler() + // ) + // ) + // ) } private fun leaveConversation() { @@ -551,37 +570,37 @@ class ConversationInfoController(args: Bundle) : .java ).setInputData(it).build() ) - router.popToRoot() + + // TODO: fix to open ConversationList + // router.popToRoot() } } private fun showClearHistoryDialog() { - if (activity != null) { - binding?.conversationInfoName?.context?.let { - val dialogBuilder = MaterialAlertDialogBuilder(it) - .setIcon( - viewThemeUtils.dialog.colorMaterialAlertDialogIcon( - context, - R.drawable.ic_delete_black_24dp - ) + binding.conversationInfoName.context.let { + val dialogBuilder = MaterialAlertDialogBuilder(it) + .setIcon( + viewThemeUtils.dialog.colorMaterialAlertDialogIcon( + context, + R.drawable.ic_delete_black_24dp ) - .setTitle(R.string.nc_clear_history) - .setMessage(R.string.nc_clear_history_warning) - .setPositiveButton(R.string.nc_delete_all) { _, _ -> - clearHistory() - } - .setNegativeButton(R.string.nc_cancel) { _, _ -> - // unused atm - } - - viewThemeUtils.dialog - .colorMaterialAlertDialogBackground(it, dialogBuilder) - val dialog = dialogBuilder.show() - viewThemeUtils.platform.colorTextButtons( - dialog.getButton(AlertDialog.BUTTON_POSITIVE), - dialog.getButton(AlertDialog.BUTTON_NEGATIVE) ) - } + .setTitle(R.string.nc_clear_history) + .setMessage(R.string.nc_clear_history_warning) + .setPositiveButton(R.string.nc_delete_all) { _, _ -> + clearHistory() + } + .setNegativeButton(R.string.nc_cancel) { _, _ -> + // unused atm + } + + viewThemeUtils.dialog + .colorMaterialAlertDialogBackground(it, dialogBuilder) + val dialog = dialogBuilder.show() + viewThemeUtils.platform.colorTextButtons( + dialog.getButton(AlertDialog.BUTTON_POSITIVE), + dialog.getButton(AlertDialog.BUTTON_NEGATIVE) + ) } } @@ -590,7 +609,7 @@ class ConversationInfoController(args: Bundle) : ncApi.clearChatHistory( credentials, - ApiUtils.getUrlForChat(apiVersion, conversationUser!!.baseUrl, conversationToken) + ApiUtils.getUrlForChat(apiVersion, conversationUser.baseUrl, conversationToken) ) ?.subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) @@ -622,7 +641,8 @@ class ConversationInfoController(args: Bundle) : DeleteConversationWorker::class.java ).setInputData(it).build() ) - router.popToRoot() + // TODO: fix to open ConversationList + // router.popToRoot() } } @@ -659,7 +679,7 @@ class ConversationInfoController(args: Bundle) : binding?.clearConversationHistory?.visibility = GONE } - if (isAttached && (!isBeingDestroyed || !isDestroyed)) { + if (!isDestroyed) { binding?.ownOptions?.visibility = VISIBLE setupWebinaryView() @@ -706,7 +726,7 @@ class ConversationInfoController(args: Bundle) : binding?.let { GuestAccessHelper( - this@ConversationInfoController, + this@ConversationInfoActivity, it, conversation!!, conversationUser @@ -882,7 +902,7 @@ class ConversationInfoController(args: Bundle) : credentials, ApiUtils.getUrlForRoomModerators( apiVersion, - conversationUser!!.baseUrl, + conversationUser.baseUrl, conversation!!.token ), participant.userId @@ -895,7 +915,7 @@ class ConversationInfoController(args: Bundle) : credentials, ApiUtils.getUrlForRoomModerators( apiVersion, - conversationUser!!.baseUrl, + conversationUser.baseUrl, conversation!!.token ), participant.userId @@ -912,7 +932,7 @@ class ConversationInfoController(args: Bundle) : credentials, ApiUtils.getUrlForAttendees( apiVersion, - conversationUser!!.baseUrl, + conversationUser.baseUrl, conversation!!.token ), participant.attendeeId @@ -944,7 +964,7 @@ class ConversationInfoController(args: Bundle) : ncApi.removeParticipantFromConversation( credentials, ApiUtils.getUrlForRemovingParticipantFromConversation( - conversationUser!!.baseUrl, + conversationUser.baseUrl, conversation!!.token, true ), @@ -974,7 +994,7 @@ class ConversationInfoController(args: Bundle) : ncApi.removeParticipantFromConversation( credentials, ApiUtils.getUrlForRemovingParticipantFromConversation( - conversationUser!!.baseUrl, + conversationUser.baseUrl, conversation!!.token, false ), @@ -1005,7 +1025,7 @@ class ConversationInfoController(args: Bundle) : } override fun onItemClick(view: View?, position: Int): Boolean { - if (!conversation!!.canModerate(conversationUser!!)) { + if (!conversation!!.canModerate(conversationUser)) { return true } @@ -1022,7 +1042,7 @@ class ConversationInfoController(args: Bundle) : context.getString(R.string.nc_attendee_pin, participant.attendeePin) ) ) - MaterialDialog(activity!!, BottomSheet(WRAP_CONTENT)).show { + MaterialDialog(this, BottomSheet(WRAP_CONTENT)).show { cornerRadius(res = R.dimen.corner_radius) title(text = participant.displayName) @@ -1048,7 +1068,7 @@ class ConversationInfoController(args: Bundle) : context.getString(R.string.nc_remove_group_and_members) ) ) - MaterialDialog(activity!!, BottomSheet(WRAP_CONTENT)).show { + MaterialDialog(this, BottomSheet(WRAP_CONTENT)).show { cornerRadius(res = R.dimen.corner_radius) title(text = participant.displayName) @@ -1068,7 +1088,7 @@ class ConversationInfoController(args: Bundle) : context.getString(R.string.nc_remove_circle_and_members) ) ) - MaterialDialog(activity!!, BottomSheet(WRAP_CONTENT)).show { + MaterialDialog(this, BottomSheet(WRAP_CONTENT)).show { cornerRadius(res = R.dimen.corner_radius) title(text = participant.displayName) @@ -1119,7 +1139,7 @@ class ConversationInfoController(args: Bundle) : } if (items.isNotEmpty()) { - MaterialDialog(activity!!, BottomSheet(WRAP_CONTENT)).show { + MaterialDialog(this, BottomSheet(WRAP_CONTENT)).show { cornerRadius(res = R.dimen.corner_radius) title(text = participant.displayName) diff --git a/app/src/main/java/com/nextcloud/talk/conversation/info/GuestAccessHelper.kt b/app/src/main/java/com/nextcloud/talk/conversation/info/GuestAccessHelper.kt index c82d524c9..a1eefd704 100644 --- a/app/src/main/java/com/nextcloud/talk/conversation/info/GuestAccessHelper.kt +++ b/app/src/main/java/com/nextcloud/talk/conversation/info/GuestAccessHelper.kt @@ -10,7 +10,6 @@ import androidx.appcompat.app.AlertDialog import androidx.appcompat.widget.SwitchCompat import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.nextcloud.talk.R -import com.nextcloud.talk.controllers.ConversationInfoController import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.databinding.ControllerConversationInfoBinding import com.nextcloud.talk.databinding.DialogPasswordBinding @@ -24,16 +23,15 @@ import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers class GuestAccessHelper( - controller: ConversationInfoController, + private val activity: ConversationInfoActivity, private val binding: ControllerConversationInfoBinding, private val conversation: Conversation, private val conversationUser: User ) { - private val activity = controller.activity!! - private val conversationsRepository = controller.conversationsRepository - private val viewThemeUtils = controller.viewThemeUtils - private val context = controller.context + private val conversationsRepository = activity.conversationsRepository + private val viewThemeUtils = activity.viewThemeUtils + private val context = activity.context fun setupGuestAccess() { val guestAccessAllowSwitch = ( diff --git a/app/src/main/res/layout/controller_conversation_info.xml b/app/src/main/res/layout/controller_conversation_info.xml index fbd75b6fa..2f3016360 100644 --- a/app/src/main/res/layout/controller_conversation_info.xml +++ b/app/src/main/res/layout/controller_conversation_info.xml @@ -6,7 +6,7 @@ ~ @author Marcel Hibbe ~ @author Tim Krüger ~ Copyright (C) 2022 Tim Krüger - ~ Copyright (C) 2022 Marcel Hibbe + ~ Copyright (C) 2022-2023 Marcel Hibbe ~ Copyright (C) 2021 Andy Scherzinger ~ Copyright (C) 2017-2018 Mario Danic ~ @@ -24,13 +24,31 @@ ~ along with this program. If not, see . --> - + android:orientation="vertical"> + + + + - +