diff --git a/.github/workflows/analysis.yml b/.github/workflows/analysis.yml index 403d94a6f..7c97ceb1c 100644 --- a/.github/workflows/analysis.yml +++ b/.github/workflows/analysis.yml @@ -49,7 +49,7 @@ jobs: repository: ${{ steps.get-vars.outputs.repo }} ref: ${{ steps.get-vars.outputs.branch }} - name: Set up JDK 17 - uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0 + uses: actions/setup-java@5896cecc08fd8a1fbdfaf517e29b571164b031f7 # v4.2.0 with: distribution: "temurin" java-version: 17 diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index c7b935209..6f2a3b6cb 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -39,11 +39,11 @@ jobs: with: swap-size-gb: 10 - name: Initialize CodeQL - uses: github/codeql-action/init@8a470fddafa5cbb6266ee11b37ef4d8aae19c571 # v3.24.6 + uses: github/codeql-action/init@3ab4101902695724f9365a384f86c1074d94e18c # v3.24.7 with: languages: ${{ matrix.language }} - name: Set up JDK 17 - uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0 + uses: actions/setup-java@5896cecc08fd8a1fbdfaf517e29b571164b031f7 # v4.2.0 with: distribution: "temurin" java-version: 17 @@ -53,4 +53,4 @@ jobs: echo "org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError" > "$HOME/.gradle/gradle.properties" ./gradlew assembleDebug - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@8a470fddafa5cbb6266ee11b37ef4d8aae19c571 # v3.24.6 + uses: github/codeql-action/analyze@3ab4101902695724f9365a384f86c1074d94e18c # v3.24.7 diff --git a/.github/workflows/pr-feedback.yml b/.github/workflows/pr-feedback.yml index 0e7359dec..4d365e6e4 100644 --- a/.github/workflows/pr-feedback.yml +++ b/.github/workflows/pr-feedback.yml @@ -3,6 +3,13 @@ # https://github.com/nextcloud/.github # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors +# SPDX-FileCopyrightText: 2023 Marcel Klehr +# SPDX-FileCopyrightText: 2023 Joas Schilling <213943+nickvergessen@users.noreply.github.com> +# SPDX-FileCopyrightText: 2023 Daniel Kesselberg +# SPDX-FileCopyrightText: 2023 Florian Steffens +# SPDX-License-Identifier: MIT + name: 'Ask for feedback on PRs' on: schedule: diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 0898b6e01..508de2c14 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -42,6 +42,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@8a470fddafa5cbb6266ee11b37ef4d8aae19c571 # v3.24.6 + uses: github/codeql-action/upload-sarif@3ab4101902695724f9365a384f86c1074d94e18c # v3.24.7 with: sarif_file: results.sarif diff --git a/CHANGELOG.md b/CHANGELOG.md index 048389a5c..c5342e6d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,37 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Types of changes can be: Added/Changed/Deprecated/Removed/Fixed/Security +## [18.1.0] - 2024-03-12 + +### Added +- Diagnosis screen (in advanced settings. incl. share option to create new issue) +- Show warnings if notification settings are not set correctly +- Grouping for upload notifications (@parneet-guraya) +- Stop media playback when switching output device (@parneet-guraya) +- Avoid multiple media playbacks (@parneet-guraya) +- Add "Add to notes" in message options +- Cursor position is saved in message drafts +- Share message text to other apps +- Support Android 14 +- Janus 1.x support + +### Fixed +- App permanently sends speaking data channel message +- Back button closes app when forwarding a message + +Minimum: Android 7.0 Nougat + +For a full list, please see https://github.com/nextcloud/talk-android/milestone/79?closed=1 + +## [18.0.1] - 2023-12-22 + +### Fixed +- Voice messages sometimes fail to playback + +Minimum: Android 7.0 Nougat + +For a full list, please see https://github.com/nextcloud/talk-android/milestone/75?closed=1 + ## [18.0.0] - 2023-12-11 ### Added diff --git a/app/build.gradle b/app/build.gradle index 98b3ade9b..65d3b8e53 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -141,7 +141,7 @@ android { } ext { - androidxCameraVersion = "1.3.1" + androidxCameraVersion = "1.3.2" coilKtVersion = "2.6.0" daggerVersion = "2.51" emojiVersion = "1.4.0" @@ -156,7 +156,7 @@ ext { roomVersion = "2.6.1" workVersion = "2.9.0" espressoVersion = "3.5.1" - media3_version = "1.2.1" + media3_version = "1.3.0" } configurations.configureEach { @@ -289,8 +289,8 @@ dependencies { implementation 'androidx.core:core-ktx:1.12.0' testImplementation 'junit:junit:4.13.2' - testImplementation 'org.mockito:mockito-core:5.10.0' - androidTestImplementation 'org.mockito:mockito-android:5.10.0' + testImplementation 'org.mockito:mockito-core:5.11.0' + androidTestImplementation 'org.mockito:mockito-android:5.11.0' testImplementation 'androidx.arch.core:core-testing:2.2.0' androidTestImplementation "androidx.test:core:1.5.0" @@ -312,7 +312,7 @@ dependencies { implementation 'androidx.activity:activity-ktx:1.8.2' - implementation 'com.github.nextcloud.android-common:ui:0.17.0' + implementation 'com.github.nextcloud.android-common:ui:0.18.0' implementation 'com.github.nextcloud-deps:android-talk-webrtc:121.6167.0' } diff --git a/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt index a33027f16..2f102db9a 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt @@ -105,7 +105,7 @@ open class BaseActivity : AppCompatActivity() { disableKeyboardPersonalisedLearning(viewGroup) } - if (appPreferences.isScreenSecured) { + if (appPreferences.isScreenSecured || appPreferences.isScreenLocked) { window.addFlags(WindowManager.LayoutParams.FLAG_SECURE) } else { window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt index 399d1871a..f8cf40944 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt @@ -50,10 +50,11 @@ import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.models.json.conversations.Conversation.ConversationType import com.nextcloud.talk.ui.StatusDrawable import com.nextcloud.talk.ui.theme.ViewThemeUtils +import com.nextcloud.talk.utils.CapabilitiesUtil.hasSpreedFeatureCapability import com.nextcloud.talk.utils.SpreedFeatures import com.nextcloud.talk.utils.ConversationUtils import com.nextcloud.talk.utils.DisplayUtils -import com.nextcloud.talk.utils.CapabilitiesUtil.hasSpreedFeatureCapability + import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.AbstractFlexibleItem import eu.davidea.flexibleadapter.items.IFilterable diff --git a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt index 0e061efc2..148205be7 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -194,7 +194,7 @@ import com.nextcloud.talk.ui.recyclerview.MessageSwipeActions import com.nextcloud.talk.ui.recyclerview.MessageSwipeCallback import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.AudioUtils -import com.nextcloud.talk.utils.SpreedFeatures +import com.nextcloud.talk.utils.CapabilitiesUtil import com.nextcloud.talk.utils.ContactUtils import com.nextcloud.talk.utils.ConversationUtils import com.nextcloud.talk.utils.DateConstants @@ -207,6 +207,7 @@ import com.nextcloud.talk.utils.MagicCharPolicy import com.nextcloud.talk.utils.Mimetype import com.nextcloud.talk.utils.NotificationUtils import com.nextcloud.talk.utils.ParticipantPermissions +import com.nextcloud.talk.utils.SpreedFeatures import com.nextcloud.talk.utils.UriUtils import com.nextcloud.talk.utils.VibrationUtils import com.nextcloud.talk.utils.bundle.BundleKeys @@ -221,7 +222,6 @@ import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_ID import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_START_CALL_AFTER_ROOM_SWITCH import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SWITCH_TO_ROOM -import com.nextcloud.talk.utils.CapabilitiesUtil import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil import com.nextcloud.talk.utils.rx.DisposableSet @@ -643,6 +643,7 @@ class ChatActivity : spreedCapabilities = state.spreedCapabilities chatApiVersion = ApiUtils.getChatApiVersion(spreedCapabilities, intArrayOf(1)) + invalidateOptionsMenu() initMessageInputView() if (conversationUser?.userId != "?" && @@ -874,11 +875,11 @@ class ChatActivity : when (state.response.code()) { HTTP_CODE_OK -> { Log.d(TAG, "lookIntoFuture: ${state.lookIntoFuture}") + val chatOverall = state.response.body() as ChatOverall? + var chatMessageList = chatOverall?.ocs!!.data!! processHeaderChatLastGiven(state.response, state.lookIntoFuture) - val chatOverall = state.response.body() as ChatOverall? - var chatMessageList = chatOverall?.ocs!!.data!! chatMessageList = handleSystemMessages(chatMessageList) if (chatMessageList.size == 0) { @@ -903,15 +904,7 @@ class ChatActivity : adapter?.notifyDataSetChanged() } - var lastAdapterId = 0 - if (adapter?.items?.size != 0) { - val item = adapter?.items?.get(0)?.item - if (item != null) { - lastAdapterId = (item as ChatMessage).jsonMessageId - } else { - lastAdapterId = 0 - } - } + var lastAdapterId = getLastAdapterId() if ( state.lookIntoFuture && @@ -940,24 +933,24 @@ class ChatActivity : } HTTP_CODE_NOT_MODIFIED -> { - processHeaderChatLastGiven(state.response, state.lookIntoFuture) chatViewModel.refreshChatParams( setupFieldsForPullChatMessages( - state.lookIntoFuture, + true, globalLastKnownFutureMessageId, true - ) + ), + true ) } HTTP_CODE_PRECONDITION_FAILED -> { - processHeaderChatLastGiven(state.response, state.lookIntoFuture) chatViewModel.refreshChatParams( setupFieldsForPullChatMessages( - state.lookIntoFuture, + true, globalLastKnownFutureMessageId, true - ) + ), + true ) } @@ -1268,6 +1261,19 @@ class ChatActivity : ) } + private fun getLastAdapterId(): Int { + var lastId = 0 + if (adapter?.items?.size != 0) { + val item = adapter?.items?.get(0)?.item + if (item != null) { + lastId = (item as ChatMessage).jsonMessageId + } else { + lastId = 0 + } + } + return lastId + } + private fun setEditUI() { binding.messageInputView.messageSendButton.visibility = View.GONE binding.messageInputView.recordAudioButton.visibility = View.GONE @@ -3752,8 +3758,7 @@ class ChatActivity : } private fun processMessagesFromTheFuture(chatMessageList: List) { - val shouldAddNewMessagesNotice = (adapter?.itemCount ?: 0) > 0 && chatMessageList.isNotEmpty() - + val shouldAddNewMessagesNotice = layoutManager?.findFirstVisibleItemPosition()!! > 0 if (shouldAddNewMessagesNotice) { val unreadChatMessage = ChatMessage() unreadChatMessage.jsonMessageId = -1 @@ -3764,10 +3769,6 @@ class ChatActivity : } addMessagesToAdapter(shouldAddNewMessagesNotice, chatMessageList) - - if (shouldAddNewMessagesNotice && adapter != null) { - scrollToFirstUnreadMessage() - } } private fun processMessagesNotFromTheFuture(chatMessageList: List) { @@ -3842,7 +3843,7 @@ class ChatActivity : } private fun modifyMessageCount(shouldAddNewMessagesNotice: Boolean, shouldScroll: Boolean) { - if (!shouldAddNewMessagesNotice && !shouldScroll) { + if (shouldAddNewMessagesNotice) { binding.popupBubbleView.isShown.let { if (it) { newMessagesCount++ @@ -4022,17 +4023,16 @@ class ChatActivity : val searchItem = menu.findItem(R.id.conversation_search) searchItem.isVisible = CapabilitiesUtil.isUnifiedSearchAvailable(spreedCapabilities) - if (CapabilitiesUtil.hasSpreedFeatureCapability( - spreedCapabilities, - SpreedFeatures.RICH_OBJECT_LIST_MEDIA - ) + if (currentConversation!!.remoteServer != null || + !CapabilitiesUtil.isSharedItemsAvailable(spreedCapabilities) ) { - conversationSharedItemsItem = menu.findItem(R.id.shared_items) - } else { menu.removeItem(R.id.shared_items) } - if (CapabilitiesUtil.isAbleToCall(spreedCapabilities)) { + if (currentConversation!!.remoteServer != null) { + menu.removeItem(R.id.conversation_video_call) + menu.removeItem(R.id.conversation_voice_call) + } else if (CapabilitiesUtil.isAbleToCall(spreedCapabilities)) { conversationVoiceCallMenuItem = menu.findItem(R.id.conversation_voice_call) conversationVideoMenuItem = menu.findItem(R.id.conversation_video_call) @@ -4358,12 +4358,7 @@ class ChatActivity : val chatApiVersion = ApiUtils.getChatApiVersion(spreedCapabilities, intArrayOf(ApiUtils.API_V1, 1)) - val newFragment: DialogFragment = DateTimePickerFragment.newInstance( - roomToken, - message!!.id, - chatViewModel, - chatApiVersion - ) + val newFragment: DialogFragment = DateTimePickerFragment.newInstance(roomToken, message!!.id, chatApiVersion) newFragment.show(supportFragmentManager, DateTimePickerFragment.TAG) } diff --git a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt index fadbe677b..df5be648c 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt @@ -178,8 +178,8 @@ class ChatViewModel @Inject constructor( val editMessageViewState: LiveData get() = _editMessageViewState - fun refreshChatParams(pullChatMessagesFieldMap: HashMap) { - if (pullChatMessagesFieldMap != _getFieldMapForChat.value) { + fun refreshChatParams(pullChatMessagesFieldMap: HashMap, overrideRefresh: Boolean = false) { + if (pullChatMessagesFieldMap != _getFieldMapForChat.value || overrideRefresh) { _getFieldMapForChat.postValue(pullChatMessagesFieldMap) Log.d(TAG, "FieldMap Refreshed with $pullChatMessagesFieldMap vs ${_getFieldMapForChat.value}") } 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 b3bb5f9f6..7405be5b5 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt @@ -1198,6 +1198,7 @@ class ConversationInfoActivity : cornerRadius(res = R.dimen.corner_radius) title(text = participant.displayName) + viewThemeUtils.material.colorBottomSheetBackground(this.view) listItemsWithImage(items = items) { _, index, _ -> if (index == 0) { removeAttendeeFromConversation(apiVersion, participant) diff --git a/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt b/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt index 858f77fb7..4df674671 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt @@ -322,7 +322,7 @@ class ConversationsListActivity : } is ConversationsListViewModel.GetFederationInvitationsErrorState -> { - Snackbar.make(binding.root, R.string.nc_common_error_sorry, Snackbar.LENGTH_LONG).show() + Snackbar.make(binding.root, R.string.get_invitations_error, Snackbar.LENGTH_LONG).show() } else -> {} @@ -754,15 +754,13 @@ class ConversationsListActivity : } private fun fetchPendingInvitations() { - binding.conversationListHintInclude.conversationListHintLayout.setOnClickListener { - val intent = Intent(this, InvitationsActivity::class.java) - startActivity(intent) + if (hasSpreedFeatureCapability(currentUser!!.capabilities!!.spreedCapability!!, SpreedFeatures.FEDERATION_V1)) { + binding.conversationListHintInclude.conversationListHintLayout.setOnClickListener { + val intent = Intent(this, InvitationsActivity::class.java) + startActivity(intent) + } + conversationsListViewModel.getFederationInvitations() } - - // TODO create mvvm, fetch pending invitations for all users and store in database for users, if current user - // has invitation -> show hint, if one or more other users have invitations -> show badge - - conversationsListViewModel.getFederationInvitations() } private fun initOverallLayout(isConversationListNotEmpty: Boolean) { @@ -978,10 +976,7 @@ class ConversationsListActivity : updateFilterConversationButtonColor() binding.filterConversationsButton.setOnClickListener { - val newFragment: DialogFragment = FilterConversationFragment.newInstance( - filterState, - this - ) + val newFragment = FilterConversationFragment.newInstance(filterState) newFragment.show(supportFragmentManager, FilterConversationFragment.TAG) } diff --git a/app/src/main/java/com/nextcloud/talk/ui/bottom/sheet/ProfileBottomSheet.kt b/app/src/main/java/com/nextcloud/talk/ui/bottom/sheet/ProfileBottomSheet.kt index 70e655c1f..a79289ef9 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/bottom/sheet/ProfileBottomSheet.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/bottom/sheet/ProfileBottomSheet.kt @@ -90,7 +90,7 @@ class ProfileBottomSheet(val ncApi: NcApi, val userModel: User, val viewThemeUti MaterialDialog(context, BottomSheet(LayoutMode.WRAP_CONTENT)).show { cornerRadius(res = R.dimen.corner_radius) - viewThemeUtils.platform.themeDialog(this.view) + viewThemeUtils.material.colorBottomSheetBackground(this.view) title(text = displayName) listItemsWithImage(items = items) { _, index, _ -> diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/AttachmentDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/AttachmentDialog.kt index 0db62cacf..31665aad5 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/AttachmentDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/AttachmentDialog.kt @@ -55,7 +55,8 @@ class AttachmentDialog(val activity: Activity, var chatActivity: ChatActivity) : setContentView(dialogAttachmentBinding.root) window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - viewThemeUtils.platform.themeDialog(dialogAttachmentBinding.root) + viewThemeUtils.material.colorBottomSheetBackground(dialogAttachmentBinding.root) + viewThemeUtils.material.colorBottomSheetDragHandle(dialogAttachmentBinding.bottomSheetDragHandle) initItemsStrings() initItemsVisibility() initItemsClickListeners() diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt index 0006a9bc1..473527418 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt @@ -47,6 +47,7 @@ import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN import com.nextcloud.talk.utils.CapabilitiesUtil +import com.nextcloud.talk.utils.SpreedFeatures import io.reactivex.Observer import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable @@ -81,7 +82,8 @@ class ConversationsListBottomDialog( setContentView(binding.root) window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - viewThemeUtils.platform.themeDialog(binding.root) + viewThemeUtils.material.colorBottomSheetBackground(binding.root) + viewThemeUtils.material.colorBottomSheetDragHandle(binding.bottomSheetDragHandle) initHeaderDescription() initItemsVisibility() initClickListeners() @@ -107,7 +109,7 @@ class ConversationsListBottomDialog( private fun initItemsVisibility() { val hasFavoritesCapability = CapabilitiesUtil.hasSpreedFeatureCapability( currentUser.capabilities?.spreedCapability!!, - "favorites" + SpreedFeatures.FAVORITES ) val canModerate = conversation.canModerate(currentUser) @@ -120,17 +122,15 @@ class ConversationsListBottomDialog( binding.conversationMarkAsRead.visibility = setVisibleIf( conversation.unreadMessages > 0 && CapabilitiesUtil.hasSpreedFeatureCapability( - currentUser - .capabilities?.spreedCapability!!, - "chat-read-marker" + currentUser.capabilities?.spreedCapability!!, + SpreedFeatures.CHAT_READ_MARKER ) ) binding.conversationMarkAsUnread.visibility = setVisibleIf( conversation.unreadMessages <= 0 && CapabilitiesUtil.hasSpreedFeatureCapability( - currentUser - .capabilities?.spreedCapability!!, - "chat-unread" + currentUser.capabilities?.spreedCapability!!, + SpreedFeatures.CHAT_UNREAD ) ) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimePickerFragment.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimePickerFragment.kt index 65afc1888..209bd3690 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimePickerFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimePickerFragment.kt @@ -37,6 +37,7 @@ import com.google.android.material.timepicker.TimeFormat import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.talk.R import com.nextcloud.talk.application.NextcloudTalkApplication +import com.nextcloud.talk.chat.ChatActivity import com.nextcloud.talk.chat.viewmodels.ChatViewModel import com.nextcloud.talk.databinding.DialogDateTimePickerBinding import com.nextcloud.talk.ui.theme.ViewThemeUtils @@ -47,18 +48,15 @@ import javax.inject.Inject @Suppress("TooManyFunctions") @AutoInjector(NextcloudTalkApplication::class) -class DateTimePickerFragment( - token: String, - id: String, - chatViewModel: ChatViewModel, - private val chatApiVersion: Int -) : DialogFragment() { +class DateTimePickerFragment : DialogFragment() { + lateinit var binding: DialogDateTimePickerBinding private var dialogView: View? = null - private var viewModel = chatViewModel + private lateinit var viewModel: ChatViewModel private var currentTimeStamp: Long? = null - private var roomToken = token - private var messageId = id + private lateinit var roomToken: String + private lateinit var messageId: String + private var chatApiVersion: Int = -1 private var laterTodayTimeStamp = 0L private var tomorrowTimeStamp = 0L private var weekendTimeStamp = 0L @@ -73,6 +71,12 @@ class DateTimePickerFragment( override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { binding = DialogDateTimePickerBinding.inflate(LayoutInflater.from(context)) dialogView = binding.root + viewModel = (requireActivity() as ChatActivity).chatViewModel + arguments?.let { + roomToken = it.getString(TOKEN_ARG, "") + messageId = it.getString(ID_ARG, "") + chatApiVersion = it.getInt(CHAT_API_VERSION_ARG) + } return MaterialAlertDialogBuilder(requireContext()).setView(dialogView).create() } @@ -304,14 +308,20 @@ class DateTimePickerFragment( private const val ONE_SEC = 1000 private const val HOUR_EIGHT_AM = 8 private const val HOUR_SIX_PM = 18 + private const val TOKEN_ARG = "TOKEN_ARG" + private const val ID_ARG = "ID_ARG" + private const val CHAT_API_VERSION_ARG = "CHAT_API_VERSION_ARG" @JvmStatic - fun newInstance(token: String, id: String, chatViewModel: ChatViewModel, chatApiVersion: Int) = - DateTimePickerFragment( - token, - id, - chatViewModel, - chatApiVersion - ) + fun newInstance(token: String, id: String, chatApiVersion: Int): DateTimePickerFragment { + val args = Bundle() + args.putString(TOKEN_ARG, token) + args.putString(ID_ARG, id) + args.putInt(CHAT_API_VERSION_ARG, chatApiVersion) + + val dateTimePickerFragment = DateTimePickerFragment() + dateTimePickerFragment.arguments = args + return dateTimePickerFragment + } } } diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/FilterConversationFragment.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/FilterConversationFragment.kt index a990a0c81..d4a61f9e5 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/FilterConversationFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/FilterConversationFragment.kt @@ -20,6 +20,7 @@ package com.nextcloud.talk.ui.dialog import android.app.Dialog +import android.os.Build import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -38,14 +39,10 @@ import com.nextcloud.talk.utils.UserIdUtils import javax.inject.Inject @AutoInjector(NextcloudTalkApplication::class) -class FilterConversationFragment( - savedFilterState: MutableMap, - conversationsListActivity: ConversationsListActivity -) : DialogFragment() { +class FilterConversationFragment : DialogFragment() { lateinit var binding: DialogFilterConversationBinding private var dialogView: View? = null - private var filterState = savedFilterState - private var conversationsList = conversationsListActivity + private lateinit var filterState: HashMap @Inject lateinit var userManager: UserManager @@ -58,7 +55,11 @@ class FilterConversationFragment( override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { binding = DialogFilterConversationBinding.inflate(LayoutInflater.from(context)) dialogView = binding.root - + filterState = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + arguments?.getSerializable(FILTER_STATE_ARG, HashMap::class.java) as HashMap + } else { + arguments?.getSerializable(FILTER_STATE_ARG) as HashMap + } return MaterialAlertDialogBuilder(requireContext()).setView(dialogView).create() } @@ -120,15 +121,21 @@ class FilterConversationFragment( arbitraryStorageManager.storeStorageSetting(accountId, MENTION, mentionValue.toString(), "") arbitraryStorageManager.storeStorageSetting(accountId, UNREAD, unreadValue.toString(), "") - conversationsList.filterConversation() + (requireActivity() as ConversationsListActivity).filterConversation() } companion object { + private const val FILTER_STATE_ARG = "FILTER_STATE_ARG" + @JvmStatic - fun newInstance( - savedFilterState: MutableMap, - conversationsListActivity: ConversationsListActivity - ) = FilterConversationFragment(savedFilterState, conversationsListActivity) + fun newInstance(savedFilterState: MutableMap): FilterConversationFragment { + val filterConversationFragment = FilterConversationFragment() + val args = Bundle() + args.putSerializable(FILTER_STATE_ARG, HashMap(savedFilterState)) + filterConversationFragment.arguments = args + return filterConversationFragment + } + val TAG: String = FilterConversationFragment::class.java.simpleName const val MENTION: String = "mention" const val UNREAD: String = "unread" diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt index b30099e81..3b7f509e5 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt @@ -106,7 +106,7 @@ class MessageActionsDialog( private val isMessageEditable = CapabilitiesUtil.hasSpreedFeatureCapability( spreedCapabilities, - "edit-messages" + SpreedFeatures.EDIT_MESSAGES ) && messageHasRegularText && !isOlderThanTwentyFourHours && isUserAllowedToEdit override fun onCreate(savedInstanceState: Bundle?) { @@ -117,7 +117,8 @@ class MessageActionsDialog( setContentView(dialogMessageActionsBinding.root) window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - viewThemeUtils.platform.themeDialog(dialogMessageActionsBinding.root) + viewThemeUtils.material.colorBottomSheetBackground(dialogMessageActionsBinding.root) + viewThemeUtils.material.colorBottomSheetDragHandle(dialogMessageActionsBinding.bottomSheetDragHandle) initEmojiBar(hasChatPermission) initMenuItemCopy(!message.isDeleted) val apiVersion = ApiUtils.getConversationApiVersion(user!!, intArrayOf(ApiUtils.API_V4, ApiUtils.API_V3, 1)) @@ -165,8 +166,9 @@ class MessageActionsDialog( !(message.isDeletedCommentMessage || message.isDeleted) ) initMenuRemindMessage( - !message.isDeleted && CapabilitiesUtil.hasSpreedFeatureCapability - (spreedCapabilities, "remind-me-later") + !message.isDeleted && + hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.REMIND_ME_LATER) && + currentConversation!!.remoteServer.isNullOrEmpty() ) initMenuMarkAsUnread( message.previousMessageId > NO_PREVIOUS_MESSAGE_ID && diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ShowReactionsDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/ShowReactionsDialog.kt index 72d691cda..a1c57f58d 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ShowReactionsDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ShowReactionsDialog.kt @@ -81,7 +81,8 @@ class ShowReactionsDialog( binding = DialogMessageReactionsBinding.inflate(layoutInflater) setContentView(binding.root) window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - viewThemeUtils.platform.themeDialog(binding.root) + viewThemeUtils.material.colorBottomSheetBackground(binding.root) + viewThemeUtils.material.colorBottomSheetDragHandle(binding.bottomSheetDragHandle) adapter = ReactionsAdapter(this, user) binding.reactionsList.adapter = adapter binding.reactionsList.layoutManager = LinearLayoutManager(context) diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/TalkSpecificViewThemeUtils.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/TalkSpecificViewThemeUtils.kt index 98794590b..ec9f2e2b2 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/TalkSpecificViewThemeUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/TalkSpecificViewThemeUtils.kt @@ -64,6 +64,7 @@ import com.nextcloud.talk.utils.DrawableUtils import com.nextcloud.talk.utils.message.MessageUtils import com.vanniktech.emoji.EmojiTextView import com.wooplr.spotlight.SpotlightView +import dynamiccolor.MaterialDynamicColors import eu.davidea.flexibleadapter.utils.FlexibleUtils import javax.inject.Inject import kotlin.math.roundToInt @@ -78,6 +79,7 @@ class TalkSpecificViewThemeUtils @Inject constructor( private val appcompat: AndroidXViewThemeUtils ) : ViewThemeUtilsBase(schemes) { + private val dynamicColor = MaterialDynamicColors() fun themeIncomingMessageBubble(bubble: View, grouped: Boolean, deleted: Boolean) { val resources = bubble.resources @@ -104,9 +106,9 @@ class TalkSpecificViewThemeUtils @Inject constructor( fun themeOutgoingMessageBubble(bubble: View, grouped: Boolean, deleted: Boolean) { withScheme(bubble) { scheme -> val bgBubbleColor = if (deleted) { - ColorUtils.setAlphaComponent(scheme.surfaceVariant, HALF_ALPHA_INT) + ColorUtils.setAlphaComponent(dynamicColor.surfaceVariant().getArgb(scheme), HALF_ALPHA_INT) } else { - scheme.surfaceVariant + dynamicColor.surfaceVariant().getArgb(scheme) } val layout = if (grouped) { @@ -126,31 +128,31 @@ class TalkSpecificViewThemeUtils @Inject constructor( fun colorOutgoingQuoteText(textView: TextView) { withScheme(textView) { scheme -> - textView.setTextColor(scheme.onSurfaceVariant) + textView.setTextColor(dynamicColor.onSurfaceVariant().getArgb(scheme)) } } fun colorOutgoingQuoteAuthorText(textView: TextView) { withScheme(textView) { scheme -> - ColorUtils.setAlphaComponent(scheme.onSurfaceVariant, ALPHA_80_INT) + ColorUtils.setAlphaComponent(dynamicColor.onSurfaceVariant().getArgb(scheme), ALPHA_80_INT) } } fun colorOutgoingQuoteBackground(view: View) { withScheme(view) { scheme -> - view.setBackgroundColor(scheme.onSurfaceVariant) + view.setBackgroundColor(dynamicColor.onSurfaceVariant().getArgb(scheme)) } } fun colorContactChatItemName(contactName: androidx.emoji2.widget.EmojiTextView) { withScheme(contactName) { scheme -> - contactName.setTextColor(scheme.onPrimaryContainer) + contactName.setTextColor(dynamicColor.onPrimaryContainer().getArgb(scheme)) } } fun colorContactChatItemBackground(card: MaterialCardView) { withScheme(card) { scheme -> - card.setCardBackgroundColor(scheme.primaryContainer) + card.setCardBackgroundColor(dynamicColor.primaryContainer().getArgb(scheme)) } } @@ -166,7 +168,7 @@ class TalkSpecificViewThemeUtils @Inject constructor( .mutate() DrawableCompat.setTintList( drawable, - ColorStateList.valueOf(scheme.primary) + ColorStateList.valueOf(dynamicColor.primary().getArgb(scheme)) ) emoji.background = drawable } @@ -178,7 +180,7 @@ class TalkSpecificViewThemeUtils @Inject constructor( .getDrawable(linearLayout.context, R.drawable.reaction_self_background)!! .mutate() val backgroundColor = if (incoming) { - scheme.primaryContainer + dynamicColor.primaryContainer().getArgb(scheme) } else { ContextCompat.getColor( linearLayout.context, @@ -207,7 +209,7 @@ class TalkSpecificViewThemeUtils @Inject constructor( private fun colorDrawable(context: Context, drawable: Drawable) { withScheme(context) { scheme -> - drawable.setTint(scheme.primary) + drawable.setTint(dynamicColor.primary().getArgb(scheme)) } } @@ -217,9 +219,9 @@ class TalkSpecificViewThemeUtils @Inject constructor( withScheme(avatar) { scheme -> val layers = arrayOfNulls(2) layers[0] = ContextCompat.getDrawable(avatar.context, R.drawable.ic_avatar_background) - layers[0]?.setTint(scheme.surfaceVariant) + layers[0]?.setTint(dynamicColor.surfaceVariant().getArgb(scheme)) layers[1] = ContextCompat.getDrawable(avatar.context, foreground) - layers[1]?.setTint(scheme.onSurfaceVariant) + layers[1]?.setTint(dynamicColor.onSurfaceVariant().getArgb(scheme)) drawable = LayerDrawable(layers) } @@ -231,10 +233,10 @@ class TalkSpecificViewThemeUtils @Inject constructor( // hacky as no default way is provided val editText = searchView.findViewById(R.id.search_src_text) val searchPlate = searchView.findViewById(R.id.search_plate) - editText.setHintTextColor(scheme.onSurfaceVariant) - editText.setTextColor(scheme.onSurface) - editText.setBackgroundColor(scheme.surface) - searchPlate.setBackgroundColor(scheme.surface) + editText.setHintTextColor(dynamicColor.onSurfaceVariant().getArgb(scheme)) + editText.setTextColor(dynamicColor.onSurface().getArgb(scheme)) + editText.setBackgroundColor(dynamicColor.surface().getArgb(scheme)) + searchPlate.setBackgroundColor(dynamicColor.surface().getArgb(scheme)) } } @@ -248,7 +250,7 @@ class TalkSpecificViewThemeUtils @Inject constructor( intArrayOf(-android.R.attr.state_checked) ), intArrayOf( - scheme.secondaryContainer, + dynamicColor.secondaryContainer().getArgb(scheme), background ) ) @@ -259,8 +261,8 @@ class TalkSpecificViewThemeUtils @Inject constructor( intArrayOf(-android.R.attr.state_checked) ), intArrayOf( - scheme.onSecondaryContainer, - scheme.surface + dynamicColor.onSecondaryContainer().getArgb(scheme), + dynamicColor.surface().getArgb(scheme) ) ) ) @@ -269,29 +271,33 @@ class TalkSpecificViewThemeUtils @Inject constructor( fun themeMicInputCloud(micInputCloud: MicInputCloud) { withScheme(micInputCloud) { scheme -> - micInputCloud.setColor(scheme.primary) + micInputCloud.setColor(dynamicColor.primary().getArgb(scheme)) } } fun themeWaveFormSeekBar(waveformSeekBar: WaveformSeekBar) { withScheme(waveformSeekBar) { scheme -> waveformSeekBar.thumb.colorFilter = - PorterDuffColorFilter(scheme.inversePrimary, PorterDuff.Mode.SRC_IN) - waveformSeekBar.setColors(scheme.inversePrimary, scheme.onPrimaryContainer) + PorterDuffColorFilter(dynamicColor.inversePrimary().getArgb(scheme), PorterDuff.Mode.SRC_IN) + waveformSeekBar.setColors( + dynamicColor.inversePrimary().getArgb(scheme), + dynamicColor.onPrimaryContainer().getArgb(scheme) + ) waveformSeekBar.progressDrawable?.colorFilter = - PorterDuffColorFilter(scheme.primary, PorterDuff.Mode.SRC_IN) + PorterDuffColorFilter(dynamicColor.primary().getArgb(scheme), PorterDuff.Mode.SRC_IN) } } fun themeForegroundColorSpan(context: Context): ForegroundColorSpan { return withScheme(context) { scheme -> - return@withScheme ForegroundColorSpan(scheme.primary) + return@withScheme ForegroundColorSpan(dynamicColor.primary().getArgb(scheme)) } } fun themeSpotlightView(context: Context, builder: SpotlightView.Builder): SpotlightView.Builder { return withScheme(context) { scheme -> - return@withScheme builder.headingTvColor(scheme.primary).lineAndArcColor(scheme.primary) + return@withScheme builder.headingTvColor(dynamicColor.primary().getArgb(scheme)) + .lineAndArcColor(dynamicColor.primary().getArgb(scheme)) } } @@ -305,7 +311,7 @@ class TalkSpecificViewThemeUtils @Inject constructor( do { val end = start + constraint.length spanText.setSpan( - ForegroundColorSpan(scheme.primary), + ForegroundColorSpan(dynamicColor.primary().getArgb(scheme)), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE @@ -323,34 +329,34 @@ class TalkSpecificViewThemeUtils @Inject constructor( fun themeSortButton(sortButton: MaterialButton) { withScheme(sortButton) { scheme -> - sortButton.iconTint = ColorStateList.valueOf(scheme.onSurface) - sortButton.setTextColor(scheme.onSurface) + sortButton.iconTint = ColorStateList.valueOf(dynamicColor.onSurface().getArgb(scheme)) + sortButton.setTextColor(dynamicColor.onSurface().getArgb(scheme)) } } fun themePathNavigationButton(navigationBtn: MaterialButton) { withScheme(navigationBtn) { scheme -> - navigationBtn.iconTint = ColorStateList.valueOf(scheme.onSurface) - navigationBtn.setTextColor(scheme.onSurface) + navigationBtn.iconTint = ColorStateList.valueOf(dynamicColor.onSurface().getArgb(scheme)) + navigationBtn.setTextColor(dynamicColor.onSurface().getArgb(scheme)) } } fun themeSortListButtonGroup(relativeLayout: RelativeLayout) { withScheme(relativeLayout) { scheme -> - relativeLayout.setBackgroundColor(scheme.surface) + relativeLayout.setBackgroundColor(dynamicColor.surface().getArgb(scheme)) } } fun themeStatusDrawable(context: Context, statusDrawable: StatusDrawable) { withScheme(context) { scheme -> - statusDrawable.colorStatusDrawable(scheme.surface) + statusDrawable.colorStatusDrawable(dynamicColor.surface().getArgb(scheme)) } } fun themeMessageCheckMark(imageView: ImageView) { withScheme(imageView) { scheme -> imageView.setColorFilter( - scheme.onSurfaceVariant, + dynamicColor.onSurfaceVariant().getArgb(scheme), PorterDuff.Mode.SRC_ATOP ) } @@ -365,7 +371,11 @@ class TalkSpecificViewThemeUtils @Inject constructor( context.getColor(R.color.nc_incoming_text_default) ) } else { - MessageUtils(context).getRenderedMarkdownText(context, message, scheme.onSurfaceVariant) + MessageUtils(context).getRenderedMarkdownText( + context, + message, + dynamicColor.onSurfaceVariant().getArgb(scheme) + ) } } } @@ -375,7 +385,7 @@ class TalkSpecificViewThemeUtils @Inject constructor( return@withScheme if (!isOutgoingMessage || isSelfReaction) { ContextCompat.getColor(binding.root.context, R.color.high_emphasis_text) } else { - scheme.onSurfaceVariant + dynamicColor.onSurfaceVariant().getArgb(scheme) } } } diff --git a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.kt index dc496b21d..82092a00c 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.kt @@ -156,17 +156,17 @@ object ApiUtils { val spreedCapabilities = user.capabilities!!.spreedCapability for (version in versions) { if (spreedCapabilities != null) { - if (hasSpreedFeatureCapability(spreedCapabilities, "signaling-v$version")) { + if (spreedCapabilities.features!!.contains("signaling-v$version")) { return version } if (version == API_V2 && - hasSpreedFeatureCapability(spreedCapabilities, "sip-support") && - !hasSpreedFeatureCapability(spreedCapabilities, "signaling-v3") + hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.SIP_SUPPORT) && + !hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.SIGNALING_V3) ) { return version } if (version == API_V1 && - !hasSpreedFeatureCapability(spreedCapabilities, "signaling-v3") + !hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.SIGNALING_V3) ) { // Has no capability, we just assume it is always there when there is no v3 or later return version @@ -180,7 +180,7 @@ object ApiUtils { @Throws(NoSupportedApiException::class) fun getChatApiVersion(spreedCapabilities: SpreedCapability, versions: IntArray): Int { for (version in versions) { - if (version == API_V1 && hasSpreedFeatureCapability(spreedCapabilities, "chat-v2")) { + if (version == API_V1 && hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.CHAT_V2)) { // Do not question that chat-v2 capability shows the availability of api/v1/ endpoint *see no evil* return version } diff --git a/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt b/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt index d58cf1bf5..45c1dab94 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt @@ -52,7 +52,21 @@ enum class SpreedFeatures(val value: String) { TEMP_USER_AVATAR_API("temp-user-avatar-api"), PHONEBOOK_SEARCH("phonebook-search"), GEO_LOCATION_SHARING("geo-location-sharing"), - TALK_POLLS("talk-polls") + TALK_POLLS("talk-polls"), + FAVORITES("favorites"), + CHAT_READ_MARKER("chat-read-marker"), + CHAT_UNREAD("chat-unread"), + EDIT_MESSAGES("edit-messages"), + REMIND_ME_LATER("remind-me-later"), + CHAT_V2("chat-v2"), + SIP_SUPPORT("sip-support"), + SIGNALING_V3("signaling-v3"), + ROOM_DESCRIPTION("room-description"), + UNIFIED_SEARCH("unified-search"), + LOCKED_ONE_TO_ONE("locked-one-to-one-rooms"), + CHAT_PERMISSION("chat-permission"), + CONVERSATION_PERMISSION("conversation-permissions"), + FEDERATION_V1("federation-v1") } @Suppress("TooManyFunctions") @@ -89,13 +103,8 @@ object CapabilitiesUtil { return false } - @JvmStatic - @Deprecated("Add your capability to Capability enums and use hasSpreedFeatureCapability with enum.") - fun hasSpreedFeatureCapability(spreedCapabilities: SpreedCapability, capabilityName: String): Boolean { - if (spreedCapabilities.features != null) { - return spreedCapabilities.features!!.contains(capabilityName) - } - return false + fun isSharedItemsAvailable(spreedCapabilities: SpreedCapability): Boolean { + return hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.RICH_OBJECT_LIST_MEDIA) } fun getMessageMaxLength(spreedCapabilities: SpreedCapability): Int { @@ -147,11 +156,14 @@ object CapabilitiesUtil { } fun isConversationDescriptionEndpointAvailable(spreedCapabilities: SpreedCapability): Boolean { - return hasSpreedFeatureCapability(spreedCapabilities, "room-description") + return hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.ROOM_DESCRIPTION) } fun isUnifiedSearchAvailable(spreedCapabilities: SpreedCapability): Boolean { - return hasSpreedFeatureCapability(spreedCapabilities, "unified-search") + if (hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.FEDERATION_V1)) { + return false + } + return hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.UNIFIED_SEARCH) } fun isAbleToCall(spreedCapabilities: SpreedCapability): Boolean { @@ -234,6 +246,13 @@ object CapabilitiesUtil { return false } + fun isFederationAvailable(user: User): Boolean { + return hasSpreedFeatureCapability(user.capabilities!!.spreedCapability!!, SpreedFeatures.FEDERATION_V1) && + user.capabilities!!.spreedCapability!!.config?.containsKey("federation") == true && + user.capabilities!!.spreedCapability!!.config!!["federation"] != null && + user.capabilities!!.spreedCapability!!.config!!["federation"]!!.containsKey("enabled") + } + // endregion //region ThemingCapabilities diff --git a/app/src/main/java/com/nextcloud/talk/utils/ConversationUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/ConversationUtils.kt index 0c48e0ede..8b180ce9f 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ConversationUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/ConversationUtils.kt @@ -45,7 +45,7 @@ object ConversationUtils { fun isLockedOneToOne(conversation: ConversationModel, spreedCapabilities: SpreedCapability): Boolean { return conversation.type == ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL && - CapabilitiesUtil.hasSpreedFeatureCapability(spreedCapabilities, "locked-one-to-one-rooms") + CapabilitiesUtil.hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.LOCKED_ONE_TO_ONE) } fun canModerate(conversation: ConversationModel, spreedCapabilities: SpreedCapability): Boolean { diff --git a/app/src/main/java/com/nextcloud/talk/utils/ParticipantPermissions.kt b/app/src/main/java/com/nextcloud/talk/utils/ParticipantPermissions.kt index 829991b5a..a33d5c2ba 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ParticipantPermissions.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/ParticipantPermissions.kt @@ -53,7 +53,7 @@ class ParticipantPermissions( private fun hasConversationPermissions(): Boolean { return CapabilitiesUtil.hasSpreedFeatureCapability( spreedCapabilities, - "conversation-permissions" + SpreedFeatures.CONVERSATION_PERMISSION ) } @@ -90,7 +90,7 @@ class ParticipantPermissions( } fun hasChatPermission(): Boolean { - if (CapabilitiesUtil.hasSpreedFeatureCapability(spreedCapabilities, "chat-permission")) { + if (CapabilitiesUtil.hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.CHAT_PERMISSION)) { return hasChatPermission } // if capability is not available then the spreed version doesn't support to restrict this diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java b/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java index 8652a99be..c8edc2763 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java +++ b/app/src/main/java/com/nextcloud/talk/utils/preferences/preferencestorage/DatabaseStorageModule.java @@ -34,6 +34,7 @@ import com.nextcloud.talk.data.storage.model.ArbitraryStorage; import com.nextcloud.talk.data.user.model.User; import com.nextcloud.talk.models.json.generic.GenericOverall; import com.nextcloud.talk.utils.ApiUtils; +import com.nextcloud.talk.utils.SpreedFeatures; import com.nextcloud.talk.utils.UserIdUtils; import com.nextcloud.talk.utils.CapabilitiesUtil; @@ -158,8 +159,10 @@ public class DatabaseStorageModule { }); } else if ("conversation_info_message_notifications_dropdown".equals(key)) { - if (CapabilitiesUtil.hasSpreedFeatureCapability(conversationUser.getCapabilities().getSpreedCapability(), "notification" + - "-levels")) { + if (CapabilitiesUtil.hasSpreedFeatureCapability( + conversationUser.getCapabilities().getSpreedCapability(), + SpreedFeatures.NOTIFICATION_LEVELS) + ) { if (TextUtils.isEmpty(messageNotificationLevel) || !messageNotificationLevel.equals(value)) { int intValue; switch (value) { diff --git a/app/src/main/res/layout/activity_contacts.xml b/app/src/main/res/layout/activity_contacts.xml index 638733c7f..e244b0b36 100644 --- a/app/src/main/res/layout/activity_contacts.xml +++ b/app/src/main/res/layout/activity_contacts.xml @@ -194,15 +194,17 @@ - + app:layout_constraintTop_toBottomOf="@id/list_open_conversations"> + + diff --git a/app/src/main/res/layout/dialog_date_time_picker.xml b/app/src/main/res/layout/dialog_date_time_picker.xml index 2fd1e51a6..96d21a382 100644 --- a/app/src/main/res/layout/dialog_date_time_picker.xml +++ b/app/src/main/res/layout/dialog_date_time_picker.xml @@ -17,202 +17,208 @@ ~ You should have received a copy of the GNU General Public License ~ along with this program. If not, see . --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:orientation="vertical"> + android:layout_margin="@dimen/standard_margin" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:text="@string/set" /> + + - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 6ad612ec9..b83cafc74 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -22,7 +22,6 @@ إمسح رسالة الحالة فيما بعدٌ إغلاق قَفْل التسجيل للتسجيل المستمر للرسالة الصوتية - المحادثة للقراءة فقط محادثات انشاء محادثة تكوين إشكالية @@ -44,6 +43,7 @@ التحميل جارٍ … %1$s (%2$d) 4 ساعات + تعذّر جلب الدعوات المعلقة (مُعدّلة) غير مرئي تعذّرت استعادة اللغات @@ -114,8 +114,6 @@ تحقق من الشهادة إعدادات SSL الخاص بك تمنع الاتصال تغيير شهادة المصادقة - الدائرة Circle - الدوائر Circles محو زر التحرير محو تحرير الرسالة مسح جميع الرسائل @@ -341,10 +339,10 @@ في وضعية تعطل المايكرفون، علق على الزر & لاستخدام اضغط للتحدث ذكرني لاحقا الصَّوت القصِي remote موقوف - حذف الدائرة circle و الأعضاء إزالتها مِن المفضلة حذف المجموعة group و الأعضاء حذف مشارك + إزالة الفريق و الأعضاء إعادة تسمية المحادثة تغيير تسمية رد @@ -467,6 +465,8 @@ رتِّب حسب وقت البدء تبديل الحساب + الفريق + الفِرَق اختر الملفات إرسال هذه الملفات إلى %1$s؟ إرسال هذا الملف إلى %1$s؟ diff --git a/app/src/main/res/values-b+en+001/strings.xml b/app/src/main/res/values-b+en+001/strings.xml index 0fee7ffed..6613d346d 100644 --- a/app/src/main/res/values-b+en+001/strings.xml +++ b/app/src/main/res/values-b+en+001/strings.xml @@ -22,7 +22,7 @@ Clear status message after Close Lock recording for continuously recording of the voice message - Conversation is read Only + Conversation is read only Conversations Create conversation Create issue @@ -44,6 +44,7 @@ Loading … %1$s (%2$d) 4 hours + Failed to fetch pending invitations (edited) Invisible Languages could not be retrieved @@ -114,8 +115,6 @@ Check out the certificate Your SSL setup prevented connection Change authentication certificate - Circle - Circles clear Edit Button Clear Edit Message Delete all messages @@ -341,10 +340,10 @@ With the microphone disabled, click&hold to use Press-to-transmit Remind me later Remote audio off - Remove circle and members Remove from favourites Remove group and members Remove participant + Remove team and members Rename conversation Rename Reply @@ -467,6 +466,8 @@ Sort by Start time Switch account + Team + Teams Choose files Send these files to %1$s? Send this file to %1$s? diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index e3a23f371..6c5d94ca0 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -91,8 +91,6 @@ Провери сертификата Вашата настройка на SSL, предотврати връзката Променете сертификата за удостоверяване - Кръг - Кръгове Изтриване на всички съобщения Всички съобщения бяха изтрити Сигурни ли сте, че искате да изтриете всички съобщения в този разговор? @@ -258,7 +256,6 @@ Когато микрофонът е деактивиран, кликнете & и задръжте, за да използвате „Натисни и говори“ Напомни ми по-късно Отдалеченото аудио е изключено - Премахване на кръга и на членовете Премахни от любимите Премахване на групата и на членовете Премахване на участник diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index c6ad81b8a..981b08fa1 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -91,8 +91,6 @@ Verifica el certificat La vostra configuració SSL ha impedit la connexió Canvia el certificat d’autenticació - Cercle - Cercles Suprimeix tots els missatges S\'han suprimit tots els missatges Segur que voleu suprimir tots els missatges d\'aquesta conversa? @@ -258,7 +256,6 @@ Amb el micròfon desactivat, feu clic a & i mantingueu-lo pressionat per fer servir el Prem-i-parla Recorda-m\'ho més tard Àudio remot desactivat - Suprimeix el cercle i els membres Suprimeix de favorits Suprimeix el grup i els membres Suprimeix el participant @@ -375,6 +372,8 @@ Ordena per Hora d\'inici Canvia el compte + Equip + Equips Trieu els fitxers Voleu enviar aquests fitxers a %1$s? Voleu enviar aquest fitxer a %1$s? diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index edd18499f..7deafca60 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -110,8 +110,6 @@ Zkontrolovat certifikát Vaše nastavení SSL zabránilo připojení Změnit certifikát sloužící pro ověřování se - Okruh - Okruhy Smazat všechny zprávy Všechny zprávy byly vymazány Opravdu chcete všechny zprávy v této konverzaci smazat? @@ -304,7 +302,6 @@ Při vypnutém mikrofonu, klikněte a dokud držíte, můžete mluvit – jako u vysílačky Připomenout později Ztlumení mikrofonu na dálku - Odebrat kruh a členy Odebrat z oblíbených Odebrat skupinu a její členy Odebrat účastníka diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index dd404d4dc..bde7c192a 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -51,8 +51,6 @@ Tjek certifikatet Din SSL indstilling forhindrede forbindelse Skift godkendelsescertifikat - Cirkel - Cirkler Alle beskeder blev slettet Skift kliencertifikat Indstil klientcertifikat diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index c9413bd43..13455d806 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -22,7 +22,7 @@ Statusmeldung löschen nach Schließen Aufnahme sperren für kontinuierliche Aufzeichnung der Sprachnachricht - Unterhaltung ist schreibgeschützt + UNterhaltung ist schreibgeschützt Unterhaltungen Unterhaltung erstellen Fehler melden @@ -44,6 +44,7 @@ Lade … %1$s (%2$d) 4 Stunden + Ausstehende Einladungen konnten nicht abgerufen werden (Bearbeitet) Unsichtbar Sprachen konnten nicht abgerufen werden @@ -114,8 +115,6 @@ Überprüfen Sie das Zertifikat Ihre SSL-Konfiguration hat die Verbindung verhindert Authentifizierungs-Zertifikat ändern - Kreis - Kreise Schaltfläche „Bearbeiten“ löschen Bearbeitungsnachricht löschen Alle Nachrichten löschen @@ -341,10 +340,10 @@ Bei deaktiviertem Mikrofon &drücken. Halten Sie zum Senden die Sprechtaste gedrückt (Funkgerät-Modus) Erinnere mich später Entferntes Audio aus - Kreis und Mitglieder entfernen Von Favoriten entfernen Gruppe und Mitglieder entfernen Teilnehmer entfernen + Team und Mitglieder entfernen Unterhaltung umbenennen Umbenennen Antworten @@ -467,6 +466,8 @@ Sortiere nach Startzeit Konto wechseln + Team + Teams Dateien auswählen Diese Dateien an %1$s senden? Diese Datei an %1$s senden? diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 35485a071..90d3e56bc 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -70,8 +70,6 @@ Ελέγξτε το πιστοποιητικό Η ρύθμιση SSL απέτρεψε την σύνδεση Αλλαγή πιστοποιητικού πιστοποίησης - Κύκλος - Κύκλοι Διαγραφή όλων των μηνυμάτων Όλα τα μηνύματα διαγράφηκαν Θέλετε πραγματικά να διαγράψετε όλα τα μηνύματα σε αυτήν τη συνομιλία; @@ -215,7 +213,6 @@ Push-to-talk Με απενεργοποιημένο το μικρόφωνο, πιέστε και κρατήστε το & για χρήση του Push-to-talk Θύμισέ μου αργότερα - Αφαίρεση κύκλων και μελών Αφαίρεση από τα αγαπημένα Αφαίρεση ομάδων και μελών Αφαίρεση συμμετέχοντα diff --git a/app/src/main/res/values-es-rEC/strings.xml b/app/src/main/res/values-es-rEC/strings.xml index 246424aac..3b579217f 100644 --- a/app/src/main/res/values-es-rEC/strings.xml +++ b/app/src/main/res/values-es-rEC/strings.xml @@ -95,8 +95,6 @@ Verifica el certificado Tu configuración de SSL impidió la conexión Cambiar el certificado de atuenticación - Círculo - Círculos Borrar todos los mensajes Todos los mensajes se han eliminado ¿Realmente quieres borrar todos los mensajes de esta conversación? @@ -269,7 +267,6 @@ Con el microfono deshabilitado, haz click & presiona para usar Presiona-para-hablar Recuérdame más tarde Audio remoto desactivado - Eliminar círculo y miembros Eliminar de favoritos Eliminar grupo y miembros Eliminar participante diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 6c756a1ec..4159ae27d 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -110,8 +110,6 @@ Comprobar el certificado Tu configuración SSL impidió la conexión Cambiar certificado de autenticación - Círculo - Círculos Borrar todos los mensajes Se han eliminado todos los mensajes ¿Seguro que quieres borrar todos los mensajes en esta conversación? @@ -327,7 +325,6 @@ Con el micrófono deshabilitado, mantén pulsado & para usar Push-to-talk Recuérdamelo más tarde Audio remoto apagado - Eliminar círculo y miembros Eliminar de favoritos Eliminar grupo y miembros Eliminar participante diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index b5b79f658..d45714048 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -108,8 +108,6 @@ Egiaztatu ziurtagiria Zure SSL konfigurazioak konexioa eragotzi du Aldatu autentifikazio ziurtagiria - Zirkulua - Zirkuluak Ezabatu mezu guztiak Mezu guztiak ezabatu dira Ziur zaude elkarrizketa honen mezu guztiak ezabatu nahi dituzula? @@ -295,7 +293,6 @@ Mikrofonoa desgaituta daukazunean, egin klik &mantendu sakatzerakoan hitz egiteko Gogoratu geroago Urruneko audioa itzalita - Kendu taldea eta kideak Kendu gogokoetatik Kendu taldea eta kideak Kendu parte-hartzailea diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 38a14fb54..98c3e7cfb 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -99,8 +99,6 @@ گواهی را بررسی کنید راه اندازی SSL شما مانع از اتصال شد گواهی تأیید اعتبار را تغییر دهید - حلقه - حلقه ها حذف تمام پیام‌ها تمام پیام‌ها حذف شدند آیا واقعا می‌خواهید تمام پیام‌ها را در این مکالمه حذف کنید؟ @@ -280,7 +278,6 @@ با غیر فعال کردن میکروفن، برای استفاده از Push-to-talk کلیک & نگه‌داشتن را انجام دهید بعدا به من یادآوری کن Remote audio off - Remove circle and members حذف کردن از مورد علاقه‌ها Remove group and members شرکت کننده را حذف کنید diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index f3a80e798..e04decb17 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -69,8 +69,6 @@ Tarkista varmenne SSL-asetukset esti yhteyden Vaihda tunnistautumisvarmenne - Piiri - Piirit Poista kaikki viestit Kaikki viestit poistettiin Haluatko varmasti poistaa kaikki viestit tästä keskustelusta? @@ -214,7 +212,6 @@ Push-ilmoitukset pois käytöstä Paina puhuaksesi Muistuta myöhemmin - Poista piiri ja jäsenet Poista suosikeista Poista ryhmä ja jäsenet Poista osallistuja diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 18cae9dfb..96058c530 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -33,6 +33,7 @@ Ne pas effacer Modifier Impossible de modifier des messages plus anciens que 24 heures + Modifier l\'icône du message Retour arrière Récent Chiffré @@ -42,6 +43,7 @@ Chargement… %1$s (%2$d) 4 heures + Échec de la récupération des invitations en attente (modifié) Invisible Les langues n\'ont pas pu être récupérées @@ -112,8 +114,6 @@ Vérifier le certificat Votre configuration SSL a empêché la connexion Modifier le certificat d\'authentification - Cercle - Cercles effacer le bouton de modification Supprimer tous les messages Tous les messages ont été supprimés @@ -162,6 +162,7 @@ App Nom de l\'application Utilisateurs enregistrés + Version de l\'app Paramètres pour la batterie Appareil Ouvrir l\'écran de diagnostic @@ -311,10 +312,10 @@ Avec le micro désactivé, cliquez & maintenez pour utiliser la fonction Talkie-walkie. Rappelez-moi plus tard Audio distant en sourdine - Supprimer le cercle et ses membres Retirer des favoris Supprimer un groupe et ses membres Retirer le participant + Supprimer l\'équipe et ses membres Renommer la conversation Renommer Répondre @@ -432,6 +433,8 @@ Trier par Heure de début Changer de compte + Équipe + Équipes Choisir des fichiers Envoyer ces fichiers à %1$s ? Envoyer ce fichier à %1$s ? diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index a60925431..28234db51 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -108,8 +108,6 @@ Verificar o certificado A súa configuración SSL impediu a conexión Cambiar o certificado de autenticación - Círculo - Círculos Eliminar todas as mensaxes Elimináronse todas as mensaxes Confirma que quere eliminar todas as mensaxes desta conversa? @@ -293,7 +291,6 @@ Co microfono desactivado, prema e manteña para usar a función «Prema para falar» Lembrarmo más adiante Son remoto desactivado - Retirar círculo e membros Retirar de favoritos Retirar grupo e membros Retirar participante diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 9c7005567..72902e323 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -72,8 +72,6 @@ Pogledaj vjerodajnicu Vezu je onemogućila vaša postavka SSL-a Promijeni vjerodajnicu za autentifikaciju - Krug - Krugovi Izbriši sve poruke Izbrisane su sve poruke Želite li zaista izbrisati sve poruke u ovom razgovoru? @@ -217,7 +215,6 @@ Kada je mikrofon onemogućen, kliknite i držite za uporabu značajke Pritisni za govor Podsjeti me kasnije Udaljeno isključivanje zvuka - Ukloni krug i članove Ukloni iz favorita Ukloni grupu i članove Ukloni sudionika diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index dc995bfc2..c2f9e37e8 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -103,8 +103,6 @@ Ellenőrizze a tanúsítványt Az SSL beállítás megakadályozta a kapcsolódást Hitelesítési tanúsítvány módosítása - Kör - Körök Összes üzenet törlése Az összes üzenet törölve lett Biztos, hogy törli a beszélgetés összes üzenetét? @@ -283,7 +281,6 @@ A mikrofon le lesz tiltva, a beszédhez tartsa lenyomva Emlékeztessen később Távoli hang kikapcsolása - Kör és tagok eltávolítása Eltávolítás a kedvencekből Csoport és tagok eltávolítása Résztvevő eltávolítása diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index f04b8cf9c..bb9407a83 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -52,8 +52,6 @@ Sannreyna skilríkið SSL-uppsetningin þín kom í veg fyrir tengingu Skipta um skilríki fyrir auðkenningu - Hringur - Hringir Skipta um skilríki biðlara Setja upp skilríki biðlara Afrita diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index e9da6e300..c15d75215 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -85,8 +85,6 @@ Controlla il certificato La tua configurazione SSL ha impedito la connessione Cambia certificato di autenticazione - Cerchia - Cerchie Elimina tutti i messaggi Tutti i messaggi sono stati eliminati Vuoi davvero eliminare tutti i messaggi in questa conversazione? @@ -239,7 +237,6 @@ Con il microfono disabilitato, fai clic e mantieni per utilizzare Premi per parlare Ricordamelo più tardi Audio remoto spento - Rimuovi cerchia e membri Rimuovi dai preferiti Rimuovi gruppo e membri Rimuovi partecipante diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 2ef8b8f06..59fda9c77 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -81,8 +81,6 @@ 証明書をチェックアウトする SSL設定で接続が妨げられました 認証証明書を変更する - サークル - サークル すべてのメッセージを削除 すべてのメッセージが削除されたました。 本当にこの会話の全てのメッセージを削除してもよろしいですか? @@ -234,7 +232,6 @@ マイクを無効にして、プッシュツートークを使用する場合は & ホールド 後で通知する リモート音声オフ - サークルとメンバーを削除 お気に入りから削除 メンバーとグループを削除 参加者を削除 diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index d8e8fa3fd..381ebefd9 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -87,8 +87,6 @@ 인증서 확인 SSL 설정에서 연결을 거부함 인증서 변경 - 서클 - 서클 모든 메시지 삭제 모든 메시지가 삭제되었습니다. 이 대화에서 모든 메시지를 삭제하시겠습니까? @@ -250,7 +248,6 @@ 마이크가 비활성화된 상태에서 &를 누르고 있으면 눌러 말하기 사용 나중에 다시 알림 원격 오디오 끄기 - 서클과 구성원 제거 즐겨찾기에서 제거 Remove group and members 참가자 삭제 diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml index 803cf2ef2..4871044be 100644 --- a/app/src/main/res/values-lt-rLT/strings.xml +++ b/app/src/main/res/values-lt-rLT/strings.xml @@ -55,8 +55,6 @@ Ar pasitikite iki šiol nežinomu SSL liudijimu, kurį išdavė %1$s, kuris skirtas %2$s ir galioja nuo %3$s iki %4$s? Jūsų SSL sąranka neleido ryšio Keisti tapatybės nustatymo liudijimą - Ratas - Ratai Keisti kliento programėlės liudijimą Nustatyti kliento programėlės liudijimą ir diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index a2f55ecb0..fcbe64273 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -22,7 +22,7 @@ Fjern statusmelding etter Lukk Lås opptak for kontinuerlig opptak av talemeldingen - Denne samtalen er skrivebeskyttet + Samtalen kan kun leses Samtaler Opprett samtale Opprett problem @@ -44,6 +44,7 @@ Laster ... %1$s (%2$d) 4 timer + Henting av ventende invitasjoner feilet (redigert) Usynlig Språk kunne ikke hentes @@ -114,8 +115,6 @@ Sjekk sertifikatet Ditt SSL-oppsett forhindret tilkobling Endre sertifikat for autentisering - Sirkel - Sirkler tøm redigeringsknapp Fjern redigeringsmelding Slett alle meldinger @@ -341,10 +340,10 @@ Med mikrofonen avslått, klikk & hold for å bruke klikk-for-å-snakke Påminnn meg senere Ekstern lyd av - Fjern sirkel og medlemmer Fjern fra favoritter Fjern gruppe og medlemmer Fjern deltaker + Fjern lag og medlemmer Endre navn på samtale Endre navn Svar @@ -467,6 +466,8 @@ Sorter etter Start tidspunkt Bytt konto + Lag + Lag Velg filer Sende disse filene til %1$s? Sende denne filen til %1$s? diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 28fb4cdd2..25a77fa99 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -85,8 +85,6 @@ Controleer het certificaat Je SSL-instellingen blokkeerden de verbinding Authenticatiecertificaat veranderen - Kring - Kringen Alle berichten verwijderen Alle berichten zijn verwijderd Wil je echt dit alle andere berichten in dit gesprek echt verwijderen? @@ -240,7 +238,6 @@ Kies er eentje van een provider. Met uitgeschakelde microfoon, klik&indrukken om Druk-om-te-praten te gebruiken Herinner me later Externe audio uit - Verwijderen kring en leden Verwijderen uit favorieten Verwijderen groep en leden Verwijder deelnemer diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 36a0289f9..4fe3a209e 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -108,8 +108,6 @@ Sprawdź certyfikat Twoje ustawienia SSL uniemożliwiają połaczenie Zmień certyfikat uwierzytelnienia - Krąg - Kręgi Usuń wszystkie wiadomości Wszystkie wiadomości zostały usunięte Czy na pewno chcesz usunąć wszystkie wiadomości z tej rozmowy? @@ -293,7 +291,6 @@ Gdy mikrofon jest wyłączony, kliknij i przytrzymaj, aby użyć funkcji \"Naciśnij i mów\" Przypomnij mi później Zdalne wyłączenie dźwięku - Usuń krąg i członków Usuń z ulubionych Usuń grupę i członków Usuń uczestnika diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index f384c6bd3..97dbf47fe 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1,6 +1,7 @@ Ícone da conta + Adicionar às Notas Conversa adicionada %1$s para favoritos Pesquisar em %s Chamada de áudio @@ -21,8 +22,10 @@ Limpar mensagem de status após Fechar Gravação de bloqueio para gravação contínua da mensagem de voz + A conversa é somente leitura Conversas Criando conversa + Criar problema Personalizar Zona de perigo Excluir avatar @@ -30,6 +33,8 @@ Não perturbe Não limpe Editar + Não é possível editar mensagens com mais de 24 horas + Editar ícone de mensagem Retroceder Recente Criptografado @@ -39,6 +44,7 @@ Carregando … %1$s (%2$d) 4 horas + Falha ao buscar convites pendentes (editado) Invisível Não foi possível recuperar os idiomas @@ -109,8 +115,8 @@ Confira o certificado Sua configuração SSL impediu a conexão Alterar certificado de autenticação - Círculo - Círculos + limpar botão Editar + Limpar Editar Mensagem Excluir todas as mensagens Todas as mensagens foram apagadas Tem certeza de que deseja excluir todas as mensagens desta conversa? @@ -134,6 +140,7 @@ Informação da conversa Chamada de vídeo Chamada de voz + Conversa não encontrada Junte-se a uma conversa ou inicie uma nova Diga olá para seus amigos e colegas! Copiar @@ -152,16 +159,43 @@ Enviar mensagem Conta atual Servidor + Aplicativo de notificação do servidor instalado? Usuário + Status do usuário ativado? Versão do Android Aplicativo Nome do aplicativo Usuários registrados + Versão do aplicativo + A otimização da bateria é ignorada, tudo bem + A otimização da bateria não é ignorada. Isso deveria ser mudado! Configurações da bateria Dispositivo + Abrir lista de verificação de solução de problemas + Abrir tela de diagnóstico + Abra dontkillmyapp.com + Última busca de token push do Firebase + Última geração de token push do Firebase + Nenhum token push do Firebase definido. Por favor, crie um relatório de bug. + Token de envio do Firebase + Os serviços do Google Play não estão disponíveis. Notificações não são suportadas + Serviços do Google Play + Os serviços do Google Play estão disponíveis + Último registro push no push proxy + Ainda não registrado no push proxy + Último registro push no servidor + Ainda não cadastrado no servidor + Meta informação + Geração de relatório do sistema + Canal de notificação de chamadas ativado? + Canal de notificação de mensagens ativado? + Permissões de notificação Celular + Versão do Server Talk + Versão do servidor Externo Interno + Modo de sinalização Senha inválida Modo de manutenção O servidor está atualmente em modo de manutenção. @@ -176,7 +210,11 @@ Sim Nome de exibição não obtido, interrompendo Não foi possível armazenar o nome de exibição, cancelando + Editar ícone Editar + Editar texto da mensagem + Editado por + Editado pelo administrador E-mail 8 horas 4 semanas @@ -189,6 +227,9 @@ Falha ao buscar configurações de sinalização Aceitar Rejeitar + de %1$s em%2$s + Nenhum convite pendente + Você tem convites pendentes Voltar É necessária permissão para acessar o arquivo Filter Conversations @@ -216,6 +257,8 @@ Os convites foram enviados novamente. Compartilhar o link da conversa Digite uma mensagem … + A otimização da bateria não é ignorada. Isso deve ser alterado para garantir que as notificações funcionem em segundo plano! Clique em OK e selecione \"Todos os aplicativos\" -> %1$s -> Não otimizar + Ignorar a otimização da bateria Conversa importante As notificações nesta conversa substituirão as configurações de Não perturbe Convites @@ -267,6 +310,8 @@ Enviados Notificar sobre o progresso do envio do arquivo Configurações de notificação + A permissão de notificação e as configurações da bateria estão configuradas corretamente para receber notificações. Se você tiver problemas para receber notificações mesmo assim, verifique se os canais de notificação para chamadas e mensagens estão habilitados. Mais ajuda pode ser encontrada em DontKillMyApp.com ou na lista de verificação de solução de problemas. Se isso não ajudar, vá para a tela de diagnóstico e envie um relatório de bug. + Solução de problemas de notificação Sempre notificar Notificar quando mencionado Nunca notificar @@ -295,10 +340,10 @@ Com o microfone desativado, clique& para usar Pressione-para-falar Lembre-me mais tarde Áudio remoto desligado - Remover círculo e membros Remover dos favoritos Remover grupo e membros Excluir participante + Remover equipe e membros Renomear conversa Renomear Responder @@ -316,6 +361,7 @@ Pesquisar Selecionar uma conta Selecionar participantes + Enviar Editar Mensagem %1$s enviou um GIF. Você enviou um GIF. %1$s enviou um vídeo. @@ -351,12 +397,17 @@ Avançada Aparência Chamadas + Abra a tela de diagnóstico para verificar as configurações ou criar um relatório de bug + Diagnóstico Instrui o teclado para desativar o aprendizado personalizado (sem garantias) Teclado incógnito Sem som O aplicativo Talk não está instalado no servidor em que você tentou se autenticar Sons de notificação Notificações + As notificações foram recusadas + As notificações são recusadas. Permita notificações nas configurações do Android + As notificações são concedidas Mensagens Combine os contatos com base no número de telefone para integrar o atalho do Bate Papo no aplicativo de contatos do sistema Erro 429 Muitas Solicitações @@ -415,6 +466,8 @@ Ordenar por Hora de início Mudar de conta + Equipe + Equipes Escolher arquivos Enviar estes arquivos para %1$s? Enviar este arquivo para %1$s? diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index b9091f301..bb8ff9b07 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -102,8 +102,6 @@ Проверьте сертификат Заданные параметры SSL не позволяют подключиться Изменить сертификат для подтверждения подлинности - Круг - Круги Удалить все сообщения Все сообщения были удалены Вы действительно хотите удалить все сообщения в этой беседе? @@ -275,10 +273,10 @@ Нажмите и удерживайте для использования PTT при отключённом микрофоне Напомнить позже Отключить звук удалённо - Удалить Круг и его учатников Удалить из избранного Удалить группу и её участников Удалить участника + Исключить команду и её участников Переименовать разговор Переименовать Ответить @@ -394,6 +392,7 @@ Сортировать по Время начала Сменить аккаунт + Команды Выберите файлы Отправить эти файлы %1$s? Отправить этот файл %1$s? diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index f183d9aa6..07729af2e 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -68,8 +68,6 @@ Controlla su tzertificadu Sa cunfiguratzione SSL at refudadu sa connessione Càmbia tzertificadu autenticatzione - Giru - Giros Cantzella totu is messàgios Cantzellados totu is messàgios A beru boles cantzellare totu is messàgios in custa resonada? @@ -207,7 +205,6 @@ Cun su micròfonu disativadu, mantene incarcadu&pro impreare su cumandu de trasmissione Regorda•mi•ddu a coa Àudiu remotu istudadu - Boga·nche giru e partetzipantes Boga dae preferidos Boga·nche grupu e partetzipantes Boga·nche partetzipante diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index ade4b76ad..c20a53e47 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -1,6 +1,7 @@ Ikona účtu + Pridať do poznámok Pridať konverzáciu %1$s k obľúbeným Hľadať v %s Audio hovor @@ -20,8 +21,10 @@ Vyčistiť správu o stave Vyčistiť správu o stave po Zatvoriť + Zamknúť nahrávanie pre nepretržité nahrávanie hlasovej správy Konverzácie Vytvoriť konverzáciu + Vytvoriť problém Vlastný Nebezpečná oblasť Zmazať avatara @@ -29,6 +32,8 @@ Nerušiť Nemazať Upraviť + Nemôžete upravovať správy staršie ako 24 hodín. + Upraviť ikonu správy Spätná lomka Nedávne Šifrované @@ -38,7 +43,10 @@ Načítavam … %1$s (%2$d) 4 hodiny + (editované) Neviditeľný + Jazyky sa nedali získať + Získanie zlyhalo Neskôr dnes Opustili ste konverzáciu %1$s Načítať viac výsledkov @@ -53,6 +61,7 @@ Z - A Najväčšie prvé Najmenšie prvé + Vypršanie platnosti správy Klepnutím otvoríte anketu Žiadne výsledky vyhľadávania Začnite písať pre vyhľadanie … @@ -101,8 +110,6 @@ Skontrolujte certifikát Vaša konfigurácia SSL zabránila pripojeniu Zmeniť autentifikačný certifikát - Kruh - Kruhy Vymazať všetky správy Všetky správy boli vymazané Naozaj chcete vymazať všetky správy v tejto konverzácii? @@ -151,6 +158,7 @@ Nastavenia batérie. Zariadenie Telefón + Verzia servera Talk /Rozhovor/ Externý Interné Neplatné heslo @@ -280,10 +288,10 @@ S vypnutým mikrofónom, kliknite &podržte pre použitie funkcie Stlač a hovor PTT Pripomenúť neskôr Vypnúť vzdialené audio - Vymazať kruh a členov Odstrániť z obľúbených Odobrať skupinu a členov Odobrať účastníka + Odstrániť tím a členov. Premenovať konverzáciu Premenovať Odpoveď @@ -398,6 +406,8 @@ Zoradiť podľa Čas začiatku Prepnúť účet + Tím + Tímy Vyberte súbory Poslať tieto súbory do %1$s? Poslať tento súbor do %1$s? @@ -453,6 +463,10 @@ Zastaviť nahrávanie hovoru Zastaviť nahrávanie Zastavujem nahrávanie... + Súhlas so záznamom je potrebný pre všetky hovory. + Vyžadovať súhlas so záznamom pred pripojením hovoru v tejto konverzácii + Súhlas so záznamom + Hovor môže byť zaznamenaný. Záznam Konverzácia %1$s bola odstránená z obľúbených Konverzácia %1$s bola premenovaná diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 386cee6cd..b088597b8 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -93,8 +93,6 @@ Preveri potrdilo Nastavitve SSL onemogočajo vzpostavitev povezave Spremeni potrdilo za overitev - Krog - Krogi Izbriši vsa sporočila Vsa sporočilo so izbrisana Ali res želite izbrisati vsa sporočila tega pogovora? @@ -262,7 +260,6 @@ Pri onemogočenem mikrofonu lahko za začetek govora kliknete in zadržite gumb Opomni me kasneje Oddaljen zvok je onemogočen - Odstrani krog in člane Odstrani iz priljubljenih Odstrani skupino in člane Odstrani udeležence diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index b68305360..c942621d3 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -44,6 +44,7 @@ Учитавање… %1$s (%2$d) 4 сата + Није успело добављање позивница на чекању (уређено) Невидљива Није успело преузимање језика @@ -114,8 +115,6 @@ Провери сертификат Ваша ССЛ постава је онемогућила повезивање Измени сертификат за пријаву - Круг - Кругови Обриши дугме за уређивање Обриши Уреди поруку Обриши све поруке @@ -341,10 +340,10 @@ Са онемогућеним микрофоном, кликните & држите да користите притисак за разговор Подсети ме касније Удаљени аудио је искључен - Уклони круг и чланове Уклони из омиљених Уклони групу и чланове Уклони учесника + Уклони тим и чланове Преименуј разговор Преименуј Одговори @@ -467,6 +466,8 @@ Разврстај Време почетка Пребаци налог + Тим + Тимови Изаберите фајлове Да ли да пошаљем ове фајлове %1$s? Да ли да пошаљем овај фајл %1$s? diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index a64401170..b5605992f 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -62,8 +62,6 @@ Kontrollera certifikatet Dina SSL-inställningar förhindrade anslutning Ändra autentiseringscertifikat - Cirkel - Cirklar Radera alla meddelanden Ändra klientcertifikat Konfigurera klientcertifikat @@ -287,6 +285,7 @@ Sortera efter Starttid Växla konto + Team Ladda upp från enheten Laddar upp Ta en bild diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index b8aaa6448..84669aac3 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -32,6 +32,8 @@ Rahatsız etmeyin Kaldırılmasın Düzenle + 24 saat öncesine ait mesajları düzenleyemezsiniz. + Düzenleme İleti Simgesi Geriye silme Son kullanılan Şifrelenmiş @@ -41,6 +43,7 @@ Yükleniyor… %1$s (%2$d) 4 saat + Tamamlanamayan davetiyeleri al ve beklet (düzenlendi) Görünmez Diller alınamadı @@ -111,8 +114,8 @@ Sertifikayı denetleyin SSL kurulumunuz bağlantı kurulmasını engelliyor Kimlik doğrulama sertifikasını değiştir - Çevre - Çevreler + Düzenleme Butonunu temizle + İletiyi düzenle Tüm iletileri sil Tüm iletiler silindi Bu görüşmedeki tüm iletileri silmek istediğinize emin misiniz? @@ -136,6 +139,7 @@ Görüşme bilgileri Görüntülü çağrı Sesli çağrı + Görüşme bulunamadı Bir görüşmeye katılın ya da yeni bir görüşme başlatın Tanıdık ve çalışma arkadaşlarınıza selam verin! Kopyala @@ -205,6 +209,7 @@ Evet Görüntülenecek ad alınamadı, vazgeçiliyor Görüntülenecek ad kaydedilemedi, vazgeçiliyor + Düzenle simgesi Düzenle E-posta 8 saat @@ -328,7 +333,6 @@ Mikrofon devre dışı iken, Bas-konuş üzerine tıklayıp basılı tutun Sonra hatırlat Uzak ses kapalı - Çevreyi ve üyelerini sil Sık kullanılanlardan kaldır Grup ve üyelerini sil Katılımcıyı çıkar diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index e9c883e3c..d681528c5 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -93,8 +93,6 @@ Перевірка сертифікату Ваші налаштування SSL завадили з’єднанню Змінити сертифікат авторизації - Коло - Кола Вилучити усі повідомлення Всі повідомлення видалено Ви дійсно бажаєте вилучити усі повідомлення у цій розмові? @@ -258,7 +256,6 @@ Натисніть і утримуйте & для використання PTT при вимкненому мікрофоні Нагадати пізніше Віддалене аудіо відключено - Вилучити кола та учасників Вилучено з улюбленого Вилучити групи та учасників Вилучити учасника diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index c9bfbaf1b..ac1753ed6 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -105,8 +105,6 @@ 检查证书 您的 SSL 设置阻止了连接 更换验证证书 - 圈子 - 圈子 删除所有消息 已删除所有消息 你真想删除对话中的所有信息吗? @@ -289,7 +287,6 @@ 禁用麦克风的情况下,点击&并按住使用“按键讲话”功能 以后提醒我 远程音频关闭 - 删除圈子和成员 取消收藏 移除群组和成员 移除参与者 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 5f6bffbd4..923d3b440 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -44,6 +44,7 @@ 加載中 … %1$s(%2$d) 4 小時 + 無法擷取待定的邀請 (已編輯) 隱藏 無法擷取語言 @@ -114,8 +115,6 @@ 請檢查憑證 您的SSL設定阻擋這連線。 更改驗證證書 - 社交圈子 - 圈子 清除編輯按鈕 清除編輯訊息 刪除所有訊息 @@ -341,10 +340,10 @@ 在停用米高風的情況下,單擊並按住即可使用一鍵通 稍後提醒我 遠端語音關閉 - 移除社交圈子及組員 取消我的最愛 移除群組及組員 移除參與者 + 移除團隊和成員 重新命名對話 重新命名 回覆 @@ -467,6 +466,8 @@ 排序方式 開始時間 切換賬戶 + 團隊 + 團隊 選擇檔案 將這些檔案發送到 %1$s? 將此檔案發送到 %1$s? diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index a61c8fae6..4ff83d6c5 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -22,7 +22,7 @@ 在……之後清空狀態訊息 關閉 鎖定錄音以連續錄製語音訊息 - 對話是唯讀 + 對話為唯讀 對話 建立對話 建立問題 @@ -44,6 +44,7 @@ 正在載入…… %1$s (%2$d) 4小時 + 擷取擱置中的邀請失敗 (已編輯) 隱藏 無法擷取語言 @@ -114,8 +115,6 @@ 請檢查憑證 您的SSL設定阻擋這連線。 變更驗證憑證 - 圈子 - 圈子 清除編輯按鈕 清除編輯訊息 刪除所有訊息 @@ -341,10 +340,10 @@ 在停用麥克風的情況下,點擊並按住即可使用按住以說話 稍後提醒我 遠端音訊關閉 - 移除小圈圈與成員 取消我的最愛 移除群組與成員 移除參與者 + 移除團隊與成員 重新命名對話 重新命名 回覆 @@ -467,6 +466,8 @@ 排序 開始時間 切換帳號 + 團隊 + 團隊 選擇檔案 傳送這些檔案給 %1$s? 傳送檔案給 %1$s? diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e10f7d2fa..51dde20a9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -791,7 +791,7 @@ How to translate with transifex: Send Edit Message Clear Edit Message Cannot Edit Messages older than 24 hours - Conversation is read Only + Conversation is read only Edit Message Text (edited) Conversation not found @@ -800,4 +800,5 @@ How to translate with transifex: "Edited by " clear Edit Button Edit Icon + Failed to fetch pending invitations diff --git a/build.gradle b/build.gradle index 69572c225..8f88dc8f2 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ buildscript { ext { - kotlinVersion = '1.9.22' + kotlinVersion = '1.9.23' } repositories { diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index f19603e4c..a2150475c 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -111,6 +111,7 @@ + @@ -138,7 +139,10 @@ - + + + + @@ -450,6 +454,11 @@ + + + + + @@ -903,6 +912,14 @@ + + + + + + + + @@ -911,6 +928,14 @@ + + + + + + + + @@ -919,6 +944,14 @@ + + + + + + + + @@ -927,6 +960,14 @@ + + + + + + + + @@ -935,6 +976,14 @@ + + + + + + + + @@ -943,6 +992,14 @@ + + + + + + + + @@ -951,6 +1008,14 @@ + + + + + + + + @@ -959,6 +1024,14 @@ + + + + + + + + @@ -2407,100 +2480,28 @@ - - - + + + - - + + - - - + + + - - + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -2851,6 +2852,11 @@ + + + + +