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