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" /> + +