From 9ea11c1bba9aa3435b627a2f36dde809ffb1bb5f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 5 Feb 2024 01:07:24 +0000 Subject: [PATCH 01/21] Update dependency joda-time:joda-time to v2.12.7 --- app/build.gradle | 2 +- gradle/verification-metadata.xml | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a18f2622d..b946d6b97 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -247,7 +247,7 @@ dependencies { implementation 'com.github.wooplr:Spotlight:1.3' implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation 'com.github.nextcloud-deps:ChatKit:0.4.2' - implementation 'joda-time:joda-time:2.12.6' + implementation 'joda-time:joda-time:2.12.7' implementation "io.coil-kt:coil:${coilKtVersion}" implementation "io.coil-kt:coil-gif:${coilKtVersion}" implementation "io.coil-kt:coil-svg:${coilKtVersion}" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 72937015b..284e9e718 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -143,7 +143,10 @@ - + + + + From ef49c865f43ab17273037902f5b4583194c73ccf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 16:21:30 +0000 Subject: [PATCH 02/21] chore(deps): update gradle/wrapper-validation-action action to v2.0.1 --- .github/workflows/gradle-wrapper-validation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index e2ed9c15a..e8dde2010 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -19,4 +19,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - uses: gradle/wrapper-validation-action@27152f6fa06a6b8062ef7195c795692e51fc2c81 # v2.0.0 + - uses: gradle/wrapper-validation-action@a494d935f4b56874c4a5a87d19af7afcf3a163d0 # v2.0.1 From 91d5217b1ea03368d8defd747b09e59be8048368 Mon Sep 17 00:00:00 2001 From: parneet-guraya Date: Wed, 20 Dec 2023 19:43:15 +0530 Subject: [PATCH 03/21] handle audio focus and becoming noisy Signed-off-by: parneet-guraya --- .../com/nextcloud/talk/chat/ChatActivity.kt | 114 +++++++++++++++--- .../fullscreenfile/FullScreenMediaActivity.kt | 7 +- 2 files changed, 100 insertions(+), 21 deletions(-) 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 3cd1013b5..c78b0eaf4 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -42,7 +42,9 @@ import android.database.Cursor import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.ColorDrawable import android.graphics.drawable.Drawable +import android.media.AudioFocusRequest import android.media.AudioFormat +import android.media.AudioManager import android.media.AudioRecord import android.media.MediaPlayer import android.media.MediaRecorder @@ -384,6 +386,8 @@ class ChatActivity : private var lastRecordMediaPosition: Int = 0 private var lastRecordedSeeked: Boolean = false + private val audioFocusChangeListener = getAudioFocusChangeListener() + private lateinit var participantPermissions: ParticipantPermissions private var videoURI: Uri? = null @@ -1099,7 +1103,9 @@ class ChatActivity : binding.messageInputView.micInputCloud.setOnClickListener { if (mediaRecorderState == MediaRecorderState.RECORDING) { - recorder?.stop() + audioFocusRequest(false) { + recorder?.stop() + } mediaRecorderState = MediaRecorderState.INITIAL stopMicInputRecordingAnimation() showPreviewVoiceRecording(true) @@ -1328,8 +1334,10 @@ class ChatActivity : duration = it.duration.toLong() interpolator = LinearInterpolator() } - voicePreviewMediaPlayer!!.start() - voicePreviewObjectAnimator!!.start() + audioFocusRequest(true) { + voicePreviewMediaPlayer!!.start() + voicePreviewObjectAnimator!!.start() + } } setOnCompletionListener { @@ -1343,15 +1351,19 @@ class ChatActivity : if (voicePreviewMediaPlayer == null) { initPreviewVoiceRecording() } else { - voicePreviewMediaPlayer!!.start() - voicePreviewObjectAnimator!!.resume() + audioFocusRequest(true) { + voicePreviewMediaPlayer!!.start() + voicePreviewObjectAnimator!!.resume() + } } } private fun pausePreviewVoicePlaying() { Log.d(TAG, "paused preview voice recording") - voicePreviewMediaPlayer!!.pause() - voicePreviewObjectAnimator!!.pause() + audioFocusRequest(false) { + voicePreviewMediaPlayer!!.pause() + voicePreviewObjectAnimator!!.pause() + } } private fun stopPreviewVoicePlaying() { @@ -1361,9 +1373,11 @@ class ChatActivity : voicePreviewObjectAnimator!!.end() voicePreviewObjectAnimator = null binding.messageInputView.seekBar.clearAnimation() - voicePreviewMediaPlayer!!.stop() - voicePreviewMediaPlayer!!.release() - voicePreviewMediaPlayer = null + audioFocusRequest(false) { + voicePreviewMediaPlayer!!.stop() + voicePreviewMediaPlayer!!.release() + voicePreviewMediaPlayer = null + } } } @@ -1817,6 +1831,56 @@ class ChatActivity : } } + private fun getAudioFocusChangeListener(): AudioManager.OnAudioFocusChangeListener { + return AudioManager.OnAudioFocusChangeListener { flag -> + when (flag) { + AudioManager.AUDIOFOCUS_LOSS -> { + if (isVoicePreviewPlaying) { + stopPreviewVoicePlaying() + } + if (currentlyPlayedVoiceMessage != null) { + stopMediaPlayer(currentlyPlayedVoiceMessage!!) + } + } + + AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> { + if (isVoicePreviewPlaying) { + pausePreviewVoicePlaying() + } + if (currentlyPlayedVoiceMessage != null) { + pausePlayback(currentlyPlayedVoiceMessage!!) + } + } + } + } + } + + private fun audioFocusRequest(shouldRequestFocus: Boolean, onGranted: () -> Unit) { + val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager + val duration = AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE + + val isGranted: Int = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val focusRequest = AudioFocusRequest.Builder(duration) + .setOnAudioFocusChangeListener(audioFocusChangeListener) + .build() + if (shouldRequestFocus) { + audioManager.requestAudioFocus(focusRequest) + } else { + audioManager.abandonAudioFocusRequest(focusRequest) + } + } else { + @Deprecated("This method was deprecated in API level 26.") + if (shouldRequestFocus) { + audioManager.requestAudioFocus(audioFocusChangeListener, AudioManager.STREAM_MUSIC, duration) + } else { + audioManager.abandonAudioFocus(audioFocusChangeListener) + } + } + if (isGranted == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { + onGranted() + } + } + private fun startPlayback(message: ChatMessage) { if (!active) { // don't begin to play voice message if screen is not visible anymore. @@ -1830,8 +1894,9 @@ class ChatActivity : mediaPlayer?.let { if (!it.isPlaying) { - it.start() - Log.d(TAG, "MediaPlayer has Started") + audioFocusRequest(true) { + it.start() + } } mediaPlayerHandler = Handler() @@ -1866,8 +1931,9 @@ class ChatActivity : private fun pausePlayback(message: ChatMessage) { if (mediaPlayer!!.isPlaying) { - mediaPlayer!!.pause() - Log.d(TAG, "MediaPlayer is paused") + audioFocusRequest(false) { + mediaPlayer!!.pause() + } } message.isPlayingVoiceMessage = false @@ -1925,7 +1991,9 @@ class ChatActivity : mediaPlayer?.let { if (it.isPlaying) { Log.d(TAG, "media player is stopped") - it.stop() + audioFocusRequest(false) { + it.stop() + } } } } catch (e: IllegalStateException) { @@ -2141,8 +2209,10 @@ class ChatActivity : private fun stopMicInputRecordingAnimation() { if (micInputAudioRecordThread != null) { Log.d(TAG, "Mic Animation Ended") - micInputAudioRecorder.stop() - micInputAudioRecorder.release() + audioFocusRequest(false) { + micInputAudioRecorder.stop() + micInputAudioRecorder.release() + } isMicInputAudioThreadRunning = false micInputAudioRecordThread = null } @@ -2193,7 +2263,9 @@ class ChatActivity : } try { - start() + audioFocusRequest(true) { + start() + } mediaRecorderState = MediaRecorderState.RECORDING Log.d(TAG, "recording started") } catch (e: IllegalStateException) { @@ -2234,8 +2306,10 @@ class ChatActivity : recorder?.apply { try { if (mediaRecorderState == MediaRecorderState.RECORDING) { - stop() - reset() + audioFocusRequest(false) { + stop() + reset() + } mediaRecorderState = MediaRecorderState.INITIAL Log.d(TAG, "stopped recorder") } diff --git a/app/src/main/java/com/nextcloud/talk/fullscreenfile/FullScreenMediaActivity.kt b/app/src/main/java/com/nextcloud/talk/fullscreenfile/FullScreenMediaActivity.kt index 1d6796b52..0dd0b9ba5 100644 --- a/app/src/main/java/com/nextcloud/talk/fullscreenfile/FullScreenMediaActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/fullscreenfile/FullScreenMediaActivity.kt @@ -44,6 +44,7 @@ import androidx.core.view.marginBottom import androidx.core.view.updateLayoutParams import androidx.core.view.updatePadding import androidx.fragment.app.DialogFragment +import androidx.media3.common.AudioAttributes import androidx.media3.common.MediaItem import androidx.media3.common.util.UnstableApi import androidx.media3.exoplayer.ExoPlayer @@ -165,7 +166,10 @@ class FullScreenMediaActivity : AppCompatActivity() { } private fun initializePlayer() { - player = ExoPlayer.Builder(applicationContext).build() + player = ExoPlayer.Builder(applicationContext) + .setAudioAttributes(AudioAttributes.DEFAULT, true) + .setHandleAudioBecomingNoisy(true) + .build() binding.playerView.player = player } @@ -202,6 +206,7 @@ class FullScreenMediaActivity : AppCompatActivity() { windowInsetsController.show(WindowInsetsCompat.Type.systemBars()) supportActionBar?.show() } + private fun applyWindowInsets() { val playerView = binding.playerView val exoControls = playerView.findViewById(R.id.exo_bottom_bar) From 86cd617c6a09c0f3acd4e2fb37af03048a25d09d Mon Sep 17 00:00:00 2001 From: parneet-guraya Date: Fri, 5 Jan 2024 15:17:54 +0530 Subject: [PATCH 04/21] handle becoming noisy manually Signed-off-by: parneet-guraya --- .../com/nextcloud/talk/chat/ChatActivity.kt | 38 +++++++++++++++++++ .../talk/chat/viewmodels/ChatViewModel.kt | 5 +++ 2 files changed, 43 insertions(+) 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 c78b0eaf4..81ffd18f4 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -31,10 +31,12 @@ package com.nextcloud.talk.chat import android.Manifest import android.animation.ObjectAnimator import android.annotation.SuppressLint +import android.content.BroadcastReceiver import android.content.ClipData import android.content.ClipboardManager import android.content.Context import android.content.Intent +import android.content.IntentFilter import android.content.pm.PackageManager import android.content.res.AssetFileDescriptor import android.content.res.Resources @@ -388,6 +390,18 @@ class ChatActivity : private val audioFocusChangeListener = getAudioFocusChangeListener() + private val noisyAudioStreamReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + chatViewModel.isPausedDueToBecomingNoisy = true + if (isVoicePreviewPlaying) { + pausePreviewVoicePlaying() + } + if (currentlyPlayedVoiceMessage != null) { + pausePlayback(currentlyPlayedVoiceMessage!!) + } + } + } + private lateinit var participantPermissions: ParticipantPermissions private var videoURI: Uri? = null @@ -1337,6 +1351,7 @@ class ChatActivity : audioFocusRequest(true) { voicePreviewMediaPlayer!!.start() voicePreviewObjectAnimator!!.start() + handleBecomingNoisyBroadcast(register = true) } } @@ -1354,6 +1369,7 @@ class ChatActivity : audioFocusRequest(true) { voicePreviewMediaPlayer!!.start() voicePreviewObjectAnimator!!.resume() + handleBecomingNoisyBroadcast(register = true) } } } @@ -1363,6 +1379,7 @@ class ChatActivity : audioFocusRequest(false) { voicePreviewMediaPlayer!!.pause() voicePreviewObjectAnimator!!.pause() + handleBecomingNoisyBroadcast(register = false) } } @@ -1377,6 +1394,7 @@ class ChatActivity : voicePreviewMediaPlayer!!.stop() voicePreviewMediaPlayer!!.release() voicePreviewMediaPlayer = null + handleBecomingNoisyBroadcast(register = false) } } } @@ -1835,6 +1853,7 @@ class ChatActivity : return AudioManager.OnAudioFocusChangeListener { flag -> when (flag) { AudioManager.AUDIOFOCUS_LOSS -> { + chatViewModel.isPausedDueToBecomingNoisy = false if (isVoicePreviewPlaying) { stopPreviewVoicePlaying() } @@ -1844,6 +1863,7 @@ class ChatActivity : } AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> { + chatViewModel.isPausedDueToBecomingNoisy = false if (isVoicePreviewPlaying) { pausePreviewVoicePlaying() } @@ -1856,6 +1876,10 @@ class ChatActivity : } private fun audioFocusRequest(shouldRequestFocus: Boolean, onGranted: () -> Unit) { + if (chatViewModel.isPausedDueToBecomingNoisy) { + onGranted() + return + } val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager val duration = AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE @@ -1881,6 +1905,17 @@ class ChatActivity : } } + private fun handleBecomingNoisyBroadcast(register: Boolean) { + if (register && !chatViewModel.receiverRegistered) { + registerReceiver(noisyAudioStreamReceiver, IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY)) + chatViewModel.receiverRegistered = true + } else if (!chatViewModel.receiverUnregistered) { + unregisterReceiver(noisyAudioStreamReceiver) + chatViewModel.receiverUnregistered = true + chatViewModel.receiverRegistered = false + } + } + private fun startPlayback(message: ChatMessage) { if (!active) { // don't begin to play voice message if screen is not visible anymore. @@ -1896,6 +1931,7 @@ class ChatActivity : if (!it.isPlaying) { audioFocusRequest(true) { it.start() + handleBecomingNoisyBroadcast(register = true) } } @@ -1933,6 +1969,7 @@ class ChatActivity : if (mediaPlayer!!.isPlaying) { audioFocusRequest(false) { mediaPlayer!!.pause() + handleBecomingNoisyBroadcast(register = false) } } @@ -1993,6 +2030,7 @@ class ChatActivity : Log.d(TAG, "media player is stopped") audioFocusRequest(false) { it.stop() + handleBecomingNoisyBroadcast(register = false) } } } 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 d285f112a..3bad3aad9 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 @@ -48,6 +48,11 @@ class ChatViewModel @Inject constructor(private val repository: ChatRepository) open class GetReminderExistState(val reminder: Reminder) : ViewState private val _getReminderExistState: MutableLiveData = MutableLiveData(GetReminderStartState) + + var isPausedDueToBecomingNoisy = false + var receiverRegistered = false + var receiverUnregistered = false + val getReminderExistState: LiveData get() = _getReminderExistState From 53a13eb9c2449fe98de0b9aca0dc475660e67063 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 16:48:01 +0000 Subject: [PATCH 05/21] chore(deps): update gradle/wrapper-validation-action action to v2.1.0 --- .github/workflows/gradle-wrapper-validation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index e8dde2010..e486f2503 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -19,4 +19,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - uses: gradle/wrapper-validation-action@a494d935f4b56874c4a5a87d19af7afcf3a163d0 # v2.0.1 + - uses: gradle/wrapper-validation-action@85cde3f5a1033b2adc2442631c24b530f1183a1a # v2.1.0 From fed671380c69806300a5593665b1c83bdd309aef Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Thu, 8 Feb 2024 02:42:26 +0000 Subject: [PATCH 06/21] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- app/src/main/res/values-ja-rJP/strings.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 4ee0cb109..ae12322ae 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -144,6 +144,7 @@ 1日 1時間 1週間 + チャットメッセージは、一定時間経過後に期限切れにすることができます。注意: チャットで共有されたファイルは、ファイル所有者は削除されませんが、会話では共有されなくなります。 シグナリング設定を取得できませんでした ターゲットのサーバーは、モバイル経由での公開の会話への参加をサポートしていません。Webブラウザー経由で会話への参加を試みてください。 申し訳ありませんが、何かがおかしいです! @@ -377,6 +378,7 @@ アプリでファイルを開く 音声メッセージを再生/一時停止 オプションを追加 + 投票を終了する オプション プライベート投票 結果 @@ -388,7 +390,10 @@ 録画開始をキャンセル 録画を開始 録画を停止 + 全ての通話には録音の同意が必要です。 + この会話に参加する前に、録音の同意が必要です。 レコーディングの同意 + 通話は録音されるかもしれません。 記録中 保存 信頼できるサーバーのみと同期 @@ -417,6 +422,7 @@ ファイル メディア その他 + 投票 音声番号 お気に入り 通話を開始することが許可されていません @@ -436,6 +442,7 @@ 今日 明日 翻訳 + 翻訳されたテキストをコピー 言語を検出する デバイスの設定 言語を検出できませんでした From 6360fb837eebfdc8740f3ddadf927e4f01d887c9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 8 Feb 2024 22:04:08 +0000 Subject: [PATCH 07/21] fix(deps): update dependency com.google.firebase:firebase-messaging to v23.4.1 --- app/build.gradle | 2 +- gradle/verification-metadata.xml | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index a18f2622d..9302f7b45 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -308,7 +308,7 @@ dependencies { spotbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.6.4' gplayImplementation 'com.google.android.gms:play-services-base:18.3.0' - gplayImplementation "com.google.firebase:firebase-messaging:23.4.0" + gplayImplementation "com.google.firebase:firebase-messaging:23.4.1" implementation 'androidx.activity:activity-ktx:1.8.2' diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 72937015b..55b5942ef 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -2225,6 +2225,14 @@ + + + + + + + + From 8c3713e4fcf1d01ce6fe8a395a6feecae29f71f7 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Fri, 9 Feb 2024 02:42:04 +0000 Subject: [PATCH 08/21] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- app/src/main/res/values-ja-rJP/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index ae12322ae..ada8a9b15 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -109,6 +109,7 @@ 会話に参加するか、新しいのを開始 友達や同僚に挨拶しましょう! コピー + 投票を作成 今日 昨日 削除 @@ -331,6 +332,7 @@ テーマ ライト テーマ + 自分のタイピング状況を共有し、他の人のタイピング状況を表示する プロキシは資格情報を必要とします 警告 現在のアカウントのみ再認可できます @@ -379,8 +381,10 @@ 音声メッセージを再生/一時停止 オプションを追加 投票を終了する + 複数の答え オプション プライベート投票 + 質問 結果 設定 投票 From 740cf529c8bd73ffe87ed1f0b7a3ed9f6a6c2d59 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Sat, 10 Feb 2024 02:53:53 +0000 Subject: [PATCH 09/21] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- app/src/main/res/values-ja-rJP/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index ada8a9b15..b451e9d67 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -392,6 +392,7 @@ すべて ストレージからのファイル共有は権限がなければ不可能です 録画開始をキャンセル + レコーディングが失敗しました。あなたの管理者に連絡してください。 録画を開始 録画を停止 全ての通話には録音の同意が必要です。 From f8c307717db436372330b082515bc3a0174dcdeb Mon Sep 17 00:00:00 2001 From: nextcloud-android-bot Date: Sat, 10 Feb 2024 19:03:54 +0000 Subject: [PATCH 10/21] =?UTF-8?q?=F0=9F=94=84=20synced=20local=20'.github/?= =?UTF-8?q?workflows/'=20with=20remote=20'config/workflows/'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nextcloud-android-bot --- .github/workflows/gradle-wrapper-validation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index e486f2503..469b8068a 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -19,4 +19,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - uses: gradle/wrapper-validation-action@85cde3f5a1033b2adc2442631c24b530f1183a1a # v2.1.0 + - uses: gradle/wrapper-validation-action@699bb18358f12c5b78b37bb0111d3a0e2276e0e2 # v2.1.1 From d71c73bfe3e606e56fb5e8e568aca732330fc193 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Mon, 12 Feb 2024 02:41:48 +0000 Subject: [PATCH 11/21] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- app/src/main/res/values-sc/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index 0e71b8d14..9b3efbef9 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -264,7 +264,7 @@ Impostatziones Su contu chi tenias giai est istadu agiornadu, imbetzes de nd\'agiùnghere unu nou Avantzadu - Visibilidade + Aspetu Mutidas Imparat a sa tastiera a disativare s\'imparu personale (chene garantzias) Tastiera in incògnita From 57fc40776a1dd1679519cf9672308712ba510554 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Feb 2024 16:01:14 +0000 Subject: [PATCH 12/21] chore(deps): update github/codeql-action action to v3.24.1 --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index b878eca04..bb89080a3 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -32,7 +32,7 @@ jobs: with: swap-size-gb: 10 - name: Initialize CodeQL - uses: github/codeql-action/init@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0 + uses: github/codeql-action/init@e675ced7a7522a761fc9c8eb26682c8b27c42b2b # v3.24.1 with: languages: ${{ matrix.language }} - name: Set up JDK 17 @@ -46,4 +46,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@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0 + uses: github/codeql-action/analyze@e675ced7a7522a761fc9c8eb26682c8b27c42b2b # v3.24.1 diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index dd9432112..d38175bd3 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -37,6 +37,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0 + uses: github/codeql-action/upload-sarif@e675ced7a7522a761fc9c8eb26682c8b27c42b2b # v3.24.1 with: sarif_file: results.sarif From c0fc0f803209b45d8cf4501833821cc1c6e7b9dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Feb 2024 22:16:47 +0000 Subject: [PATCH 13/21] chore(deps): update gradle/gradle-build-action action to v3.1.0 --- .github/workflows/unit-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 6606e0f2f..719ff2630 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -25,7 +25,7 @@ jobs: distribution: "temurin" java-version: 17 - name: Run unit tests with coverage - uses: gradle/gradle-build-action@3b1b3b9a2104c2b47fbae53f3938079c00c9bb87 # v3.0.0 + uses: gradle/gradle-build-action@29c0906b64b8fc82467890bfb7a0a7ef34bda89e # v3.1.0 with: arguments: testGplayDebugUnit - name: Upload test artifacts From 2e4aefa965b6e3972a023bdc485df674eb87cbd0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Feb 2024 13:44:22 +0000 Subject: [PATCH 14/21] chore(deps): update github/codeql-action action to v3.24.3 --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index bb89080a3..21fbcb748 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -32,7 +32,7 @@ jobs: with: swap-size-gb: 10 - name: Initialize CodeQL - uses: github/codeql-action/init@e675ced7a7522a761fc9c8eb26682c8b27c42b2b # v3.24.1 + uses: github/codeql-action/init@379614612a29c9e28f31f39a59013eb8012a51f0 # v3.24.3 with: languages: ${{ matrix.language }} - name: Set up JDK 17 @@ -46,4 +46,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@e675ced7a7522a761fc9c8eb26682c8b27c42b2b # v3.24.1 + uses: github/codeql-action/analyze@379614612a29c9e28f31f39a59013eb8012a51f0 # v3.24.3 diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index d38175bd3..8f25e2c28 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -37,6 +37,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@e675ced7a7522a761fc9c8eb26682c8b27c42b2b # v3.24.1 + uses: github/codeql-action/upload-sarif@379614612a29c9e28f31f39a59013eb8012a51f0 # v3.24.3 with: sarif_file: results.sarif From 2f0cff3a7318169dd4e59e796b34471312d81ee3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Feb 2024 14:25:27 +0000 Subject: [PATCH 15/21] fix(deps): update dependency com.github.nextcloud.android-common:ui to v0.15.0 --- app/build.gradle | 2 +- gradle/verification-metadata.xml | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 51ea1afdc..0e7cdc151 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -312,7 +312,7 @@ dependencies { implementation 'androidx.activity:activity-ktx:1.8.2' - implementation 'com.github.nextcloud.android-common:ui:0.14.0' + implementation 'com.github.nextcloud.android-common:ui:0.15.0' implementation 'com.github.nextcloud-deps:android-talk-webrtc:110.5481.0' } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index d02f24fed..4754b748a 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -1882,6 +1882,14 @@ + + + + + + + + @@ -1890,6 +1898,14 @@ + + + + + + + + @@ -1898,6 +1914,14 @@ + + + + + + + + From 94a1238f282fa530cc8d8ebbe26050875fe1e462 Mon Sep 17 00:00:00 2001 From: parneet-guraya Date: Wed, 10 Jan 2024 01:35:27 +0530 Subject: [PATCH 16/21] create notification group using summary notification Signed-off-by: parneet-guraya --- .../talk/jobs/UploadAndShareFilesWorker.kt | 34 ++++++++++++++++++- .../nextcloud/talk/utils/NotificationUtils.kt | 3 ++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt b/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt index 404352225..9a42ea03f 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt +++ b/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt @@ -168,7 +168,7 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa } if (uploadSuccess) { - mNotifyManager?.cancel(notificationId) + cancelNotification() return Result.success() } else if (isStopped) { // since work is cancelled the result would be ignored anyways @@ -230,6 +230,7 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa .setOngoing(true) .setProgress(HUNDRED_PERCENT, ZERO_PERCENT, false) .setPriority(NotificationCompat.PRIORITY_LOW) + .setGroup(NotificationUtils.KEY_UPLOAD_GROUP) .setContentIntent(getIntentToOpenConversation()) .addAction( R.drawable.ic_cancel_white_24dp, getResourceString(context, R.string.nc_cancel), @@ -237,8 +238,39 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa ) .build() + notificationId = SystemClock.uptimeMillis().toInt() mNotifyManager!!.notify(notificationId, notification) + // only need one summary notification but multiple upload worker can call it more than once but it is safe + // because of the same notification object config and id. + makeSummaryNotification() + } + + private fun makeSummaryNotification() { + // summary notification encapsulating the group of notifications + val summaryNotification = NotificationCompat.Builder( + context, NotificationUtils.NotificationChannels + .NOTIFICATION_CHANNEL_UPLOADS.name + ).setSmallIcon(R.drawable.upload_white) + .setGroup(NotificationUtils.KEY_UPLOAD_GROUP) + .setGroupSummary(true) + .build() + + mNotifyManager?.notify(NotificationUtils.GROUP_SUMMARY_NOTIFICATION_ID, summaryNotification) + } + + private fun getActiveUploadNotifications(): Int? { + // filter out active notifications that are upload notifications using group + return mNotifyManager?.activeNotifications?.filter { notification.group == NotificationUtils.KEY_UPLOAD_GROUP }?.size + } + + private fun cancelNotification() { + mNotifyManager?.cancel(notificationId) + // summary notification would not get dismissed automatically if child notifications are cancelled programmatically + // so check if only 1 notification left if yes then cancel it because that would be summary notification + if(getActiveUploadNotifications() == 1){ + mNotifyManager?.cancel(NotificationUtils.GROUP_SUMMARY_NOTIFICATION_ID) + } } private fun getNotificationContentText(percentage: Int): String { diff --git a/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.kt index ef9d0400a..6b42cc4e2 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.kt @@ -68,6 +68,9 @@ object NotificationUtils { // RemoteInput key - used for replies sent directly from notification const val KEY_DIRECT_REPLY = "key_direct_reply" + // notification group keys + const val KEY_UPLOAD_GROUP = "com.nextcloud.talk.utils.KEY_UPLOAD_GROUP" + const val GROUP_SUMMARY_NOTIFICATION_ID = -1 @TargetApi(Build.VERSION_CODES.O) private fun createNotificationChannel( context: Context, From d6201cf796bd0071a2bfc3dcd6f6322f70cb27ed Mon Sep 17 00:00:00 2001 From: parneet-guraya Date: Wed, 10 Jan 2024 01:56:36 +0530 Subject: [PATCH 17/21] use new builder for failure notification Signed-off-by: parneet-guraya --- .../talk/jobs/UploadAndShareFilesWorker.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt b/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt index 9a42ea03f..1033d6722 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt +++ b/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt @@ -268,7 +268,7 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa mNotifyManager?.cancel(notificationId) // summary notification would not get dismissed automatically if child notifications are cancelled programmatically // so check if only 1 notification left if yes then cancel it because that would be summary notification - if(getActiveUploadNotifications() == 1){ + if (getActiveUploadNotifications() == 1) { mNotifyManager?.cancel(NotificationUtils.GROUP_SUMMARY_NOTIFICATION_ID) } } @@ -321,17 +321,20 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa getResourceString(context, R.string.nc_upload_failed_notification_text), fileName ) - notification = mBuilder!! + val failureNotification = NotificationCompat.Builder( + context, NotificationUtils.NotificationChannels + .NOTIFICATION_CHANNEL_UPLOADS.name + ) .setContentTitle(failureTitle) .setContentText(failureText) .setSmallIcon(R.drawable.baseline_error_24) + .setGroup(NotificationUtils.KEY_UPLOAD_GROUP) .setOngoing(false) .build() - // Cancel original notification mNotifyManager?.cancel(notificationId) - // Then show information about failure - mNotifyManager!!.notify(SystemClock.uptimeMillis().toInt(), notification) + // update current notification with failure info + mNotifyManager!!.notify(SystemClock.uptimeMillis().toInt(), failureNotification) } private fun getResourceString(context: Context, resourceId: Int): String { From d63fc58a62bf5fbf0d7719aca4b27d09b697773b Mon Sep 17 00:00:00 2001 From: parneet-guraya Date: Wed, 10 Jan 2024 01:59:22 +0530 Subject: [PATCH 18/21] remove class level notification property Signed-off-by: parneet-guraya --- .../talk/jobs/UploadAndShareFilesWorker.kt | 35 +++++++++++-------- .../nextcloud/talk/utils/NotificationUtils.kt | 1 + 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt b/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt index 1033d6722..f171b8f62 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt +++ b/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt @@ -2,7 +2,9 @@ * Nextcloud Talk application * * @author Marcel Hibbe + * @author Parneet Singh * Copyright (C) 2021-2022 Marcel Hibbe + * Copyright (C) 2024-2025 Parneet Singh * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,7 +24,6 @@ package com.nextcloud.talk.jobs import android.Manifest import android.app.Activity -import android.app.Notification import android.app.NotificationManager import android.app.PendingIntent import android.content.Context @@ -86,7 +87,6 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa private var mNotifyManager: NotificationManager? = null private var mBuilder: NotificationCompat.Builder? = null - private lateinit var notification: Notification private var notificationId: Int = 0 lateinit var roomToken: String @@ -196,12 +196,12 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa } override fun onTransferProgress(percentage: Int) { - notification = mBuilder!! + val progressUpdateNotification = mBuilder!! .setProgress(HUNDRED_PERCENT, percentage, false) .setContentText(getNotificationContentText(percentage)) .build() - mNotifyManager!!.notify(notificationId, notification) + mNotifyManager!!.notify(notificationId, progressUpdateNotification) } override fun onStopped() { @@ -223,8 +223,8 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa } private fun initNotificationWithPercentage() { - notification = mBuilder!! - .setContentTitle(getResourceString(context, R.string.nc_upload_in_progess)) + val initNotification = mBuilder!! + .setContentTitle(context.resources.getString(R.string.nc_upload_in_progess)) .setContentText(getNotificationContentText(ZERO_PERCENT)) .setSmallIcon(R.drawable.upload_white) .setOngoing(true) @@ -233,14 +233,14 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa .setGroup(NotificationUtils.KEY_UPLOAD_GROUP) .setContentIntent(getIntentToOpenConversation()) .addAction( - R.drawable.ic_cancel_white_24dp, getResourceString(context, R.string.nc_cancel), + R.drawable.ic_cancel_white_24dp, + getResourceString(context, R.string.nc_cancel), getCancelUploadIntent() ) .build() - notificationId = SystemClock.uptimeMillis().toInt() - mNotifyManager!!.notify(notificationId, notification) + mNotifyManager!!.notify(notificationId, initNotification) // only need one summary notification but multiple upload worker can call it more than once but it is safe // because of the same notification object config and id. makeSummaryNotification() @@ -249,7 +249,8 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa private fun makeSummaryNotification() { // summary notification encapsulating the group of notifications val summaryNotification = NotificationCompat.Builder( - context, NotificationUtils.NotificationChannels + context, + NotificationUtils.NotificationChannels .NOTIFICATION_CHANNEL_UPLOADS.name ).setSmallIcon(R.drawable.upload_white) .setGroup(NotificationUtils.KEY_UPLOAD_GROUP) @@ -261,13 +262,18 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa private fun getActiveUploadNotifications(): Int? { // filter out active notifications that are upload notifications using group - return mNotifyManager?.activeNotifications?.filter { notification.group == NotificationUtils.KEY_UPLOAD_GROUP }?.size + return mNotifyManager?.activeNotifications?.filter { + it.notification.group == NotificationUtils + .KEY_UPLOAD_GROUP + }?.size } private fun cancelNotification() { mNotifyManager?.cancel(notificationId) - // summary notification would not get dismissed automatically if child notifications are cancelled programmatically - // so check if only 1 notification left if yes then cancel it because that would be summary notification + // summary notification would not get dismissed automatically + // if child notifications are cancelled programmatically + // so check if only 1 notification left if yes + // then cancel it (which is summary notification) if (getActiveUploadNotifications() == 1) { mNotifyManager?.cancel(NotificationUtils.GROUP_SUMMARY_NOTIFICATION_ID) } @@ -322,7 +328,8 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa fileName ) val failureNotification = NotificationCompat.Builder( - context, NotificationUtils.NotificationChannels + context, + NotificationUtils.NotificationChannels .NOTIFICATION_CHANNEL_UPLOADS.name ) .setContentTitle(failureTitle) diff --git a/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.kt index 6b42cc4e2..82c987544 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.kt @@ -71,6 +71,7 @@ object NotificationUtils { // notification group keys const val KEY_UPLOAD_GROUP = "com.nextcloud.talk.utils.KEY_UPLOAD_GROUP" const val GROUP_SUMMARY_NOTIFICATION_ID = -1 + @TargetApi(Build.VERSION_CODES.O) private fun createNotificationChannel( context: Context, From 2a856bc77aac2fe34ae800e267f1d64dcf43f81d Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Wed, 31 Jan 2024 11:58:26 +0100 Subject: [PATCH 19/21] avoid to send "speaking" data channel message when mic is muted Signed-off-by: Marcel Hibbe --- app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt index aebaabe24..07f555975 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt @@ -1117,7 +1117,7 @@ class CallActivity : CallBaseActivity() { micInputAudioRecorder.read(byteArr, 0, byteArr.size) val isCurrentlySpeaking = abs(byteArr[0].toDouble()) > MICROPHONE_VALUE_THRESHOLD - if (isCurrentlySpeaking && !isSpeakingLongTerm) { + if (microphoneOn && isCurrentlySpeaking && !isSpeakingLongTerm) { isSpeakingLongTerm = true sendIsSpeakingMessage(true) } else if (!isCurrentlySpeaking && isSpeakingLongTerm) { From e3c0d500d8fd8f35c459d1246217038b2db2ed46 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 16 Feb 2024 16:01:23 +0100 Subject: [PATCH 20/21] remove FOREGROUND_SERVICE_PHONE_CALL FOREGROUND_SERVICE_PHONE_CALL is removed because it is not necessary. Seems it was introduced when moving to Android 14 because NCFirebaseMessagingService originally contained android:foregroundServiceType="phoneCall" But this foregroundServiceType is not allowed/necessary for NCFirebaseMessagingService so it was removed, but it was forgotten to also remove FOREGROUND_SERVICE_PHONE_CALL permission. This commit will remove FOREGROUND_SERVICE_PHONE_CALL permission so release process on gplay won't complain. Signed-off-by: Marcel Hibbe --- app/src/gplay/AndroidManifest.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/gplay/AndroidManifest.xml b/app/src/gplay/AndroidManifest.xml index 4032681e4..7015fc328 100644 --- a/app/src/gplay/AndroidManifest.xml +++ b/app/src/gplay/AndroidManifest.xml @@ -23,8 +23,6 @@ - - Date: Fri, 16 Feb 2024 16:34:17 +0100 Subject: [PATCH 21/21] bump version to 19.0.0 Alpha 01 Signed-off-by: Marcel Hibbe --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0e7cdc151..930cf273c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -48,8 +48,8 @@ android { // mayor.minor.hotfix.increment (for increment: 01-50=Alpha / 51-89=RC / 90-99=stable) // xx .xxx .xx .xx - versionCode 180010010 - versionName "18.1.0 Alpha 10" + versionCode 190000001 + versionName "19.0.0 Alpha 01" flavorDimensions "default" renderscriptTargetApi 19