diff --git a/app/src/androidTest/java/com/gaurav/avnc/vnc/VncClientTest.kt b/app/src/androidTest/java/com/gaurav/avnc/vnc/VncClientTest.kt
index 6598a489..8ac3024e 100644
--- a/app/src/androidTest/java/com/gaurav/avnc/vnc/VncClientTest.kt
+++ b/app/src/androidTest/java/com/gaurav/avnc/vnc/VncClientTest.kt
@@ -28,6 +28,7 @@ class VncClientTest {
override fun onGotXCutText(text: String) {
cutText = text
}
+ override fun onBell() {}
}
diff --git a/app/src/main/java/com/gaurav/avnc/util/AppPreferences.kt b/app/src/main/java/com/gaurav/avnc/util/AppPreferences.kt
index b7b1f972..3d2bb148 100644
--- a/app/src/main/java/com/gaurav/avnc/util/AppPreferences.kt
+++ b/app/src/main/java/com/gaurav/avnc/util/AppPreferences.kt
@@ -10,6 +10,7 @@ package com.gaurav.avnc.util
import android.content.Context
import android.content.SharedPreferences
+import android.media.ToneGenerator
import androidx.core.content.edit
import androidx.lifecycle.LiveData
import androidx.preference.PreferenceManager
@@ -24,6 +25,7 @@ class AppPreferences(context: Context) {
inner class UI {
val theme = StringLivePref("theme", "system")
+ var bell by BooleanPref("bell_enabled", true)
var preferAdvancedEditor by BooleanPref("prefer_advanced_editor", false)
val sortServerList = BooleanLivePref("sort_server_list", false)
}
diff --git a/app/src/main/java/com/gaurav/avnc/util/Tones.kt b/app/src/main/java/com/gaurav/avnc/util/Tones.kt
new file mode 100644
index 00000000..43fc3860
--- /dev/null
+++ b/app/src/main/java/com/gaurav/avnc/util/Tones.kt
@@ -0,0 +1,17 @@
+package com.gaurav.avnc.util
+
+import android.media.AudioManager
+import android.media.ToneGenerator
+import android.util.Log
+
+object Tones {
+ private val notifications = ToneGenerator(AudioManager.STREAM_NOTIFICATION, 100)
+
+ /**
+ * @param tone a `TONE_` constant from [ToneGenerator].
+ */
+ fun notify(tone: Int) {
+ Log.i("Tones", "Notify with tone $tone")
+ notifications.startTone(tone)
+ }
+}
diff --git a/app/src/main/java/com/gaurav/avnc/viewmodel/VncViewModel.kt b/app/src/main/java/com/gaurav/avnc/viewmodel/VncViewModel.kt
index 9a69a2b0..67172b9d 100644
--- a/app/src/main/java/com/gaurav/avnc/viewmodel/VncViewModel.kt
+++ b/app/src/main/java/com/gaurav/avnc/viewmodel/VncViewModel.kt
@@ -10,6 +10,7 @@ package com.gaurav.avnc.viewmodel
import android.app.Application
import android.graphics.RectF
+import android.media.ToneGenerator
import android.util.Log
import android.widget.Toast
import androidx.lifecycle.MutableLiveData
@@ -20,6 +21,7 @@ import com.gaurav.avnc.ui.vnc.FrameScroller
import com.gaurav.avnc.ui.vnc.FrameState
import com.gaurav.avnc.ui.vnc.FrameView
import com.gaurav.avnc.util.LiveRequest
+import com.gaurav.avnc.util.Tones
import com.gaurav.avnc.util.broadcastWoLPackets
import com.gaurav.avnc.util.getClipboardText
import com.gaurav.avnc.util.getUnknownCertificateMessage
@@ -507,4 +509,11 @@ class VncViewModel(app: Application) : BaseViewModel(app), VncClient.Observer {
override fun onPointerMoved(x: Int, y: Int) {
frameViewRef.get()?.requestRender()
}
-}
\ No newline at end of file
+
+ override fun onBell() {
+ if (pref.ui.bell) {
+ Tones.notify(ToneGenerator.TONE_PROP_BEEP)
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/gaurav/avnc/vnc/VncClient.kt b/app/src/main/java/com/gaurav/avnc/vnc/VncClient.kt
index 797b5782..1ab7f9ef 100644
--- a/app/src/main/java/com/gaurav/avnc/vnc/VncClient.kt
+++ b/app/src/main/java/com/gaurav/avnc/vnc/VncClient.kt
@@ -53,8 +53,7 @@ class VncClient(private val observer: Observer) {
fun onFramebufferUpdated()
fun onFramebufferSizeChanged(width: Int, height: Int)
fun onPointerMoved(x: Int, y: Int)
-
- //fun onBell()
+ fun onBell()
}
/**
@@ -428,7 +427,7 @@ class VncClient(private val observer: Observer) {
@Keep
- private fun cbBell() = Unit // observer.onBell()
+ private fun cbBell() = observer.onBell()
@Keep
private fun cbHandleCursorPos(x: Int, y: Int) {
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 630e81f1..b804100d 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -240,4 +240,5 @@
Style de geste \'Touchpad\' est actif
Désactivé par la valeur actuelle du geste Pression longue
Faites glisser depuis le bord pour ouvrir
+ Sonnerie
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 98eed7fd..e3cd979d 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -227,4 +227,4 @@
- Item 2
- Item 3
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b222d57e..5d6cf486 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -181,6 +181,7 @@
System
Dark
Light
+ Bell
Directly open advanced server options
Sort saved servers by name
Gestures
diff --git a/app/src/main/res/xml/pref_appearance.xml b/app/src/main/res/xml/pref_appearance.xml
index bb5a95b5..878ff5d4 100644
--- a/app/src/main/res/xml/pref_appearance.xml
+++ b/app/src/main/res/xml/pref_appearance.xml
@@ -17,6 +17,11 @@
app:title="@string/pref_theme"
app:useSimpleSummaryProvider="true" />
+
+