Skip to content

Commit

Permalink
Add ability to lock zoom level
Browse files Browse the repository at this point in the history
  • Loading branch information
gujjwal00 committed Feb 1, 2024
1 parent 578d9c5 commit a29f4de
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 0 deletions.
8 changes: 8 additions & 0 deletions app/src/main/java/com/gaurav/avnc/model/ServerProfile.kt
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ data class ServerProfile(
// Flag masks
private const val FLAG_LEGACY_KEYSYM = 0x01L
private const val FLAG_BUTTON_UP_DELAY = 0x02L
private const val FLAG_ZOOM_LOCKED = 0x04L
}

/**
Expand All @@ -205,4 +206,11 @@ data class ServerProfile(
*/
@IgnoredOnParcel
var fButtonUpDelay by Flag(FLAG_BUTTON_UP_DELAY)

/**
* If zoom is locked, user requests to change [zoom1] & [zoom2]
* should be ignored.
*/
@IgnoredOnParcel
var fZoomLocked by Flag(FLAG_ZOOM_LOCKED)
}
7 changes: 7 additions & 0 deletions app/src/main/java/com/gaurav/avnc/ui/vnc/VncActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,8 @@ class VncActivity : AppCompatActivity() {
binding.zoomOptions.setOnLongClickListener { resetZoomToDefault(); closeDrawers(); true }
binding.zoomResetBtn.setOnClickListener { resetZoomToDefault(); closeDrawers() }
binding.zoomResetBtn.setOnLongClickListener { resetZoom(); closeDrawers(); true }
binding.zoomLockBtn.isChecked = viewModel.profile.fZoomLocked
binding.zoomLockBtn.setOnCheckedChangeListener { _, checked -> toggleZoomLock(checked); closeDrawers() }
binding.zoomSaveBtn.setOnClickListener { saveZoom(); closeDrawers() }
binding.virtualKeysBtn.setOnClickListener { virtualKeys.show(); closeDrawers() }
binding.reconnectBtn.setOnClickListener { retryConnection() }
Expand Down Expand Up @@ -211,6 +213,11 @@ class VncActivity : AppCompatActivity() {
Toast.makeText(this, getString(R.string.msg_zoom_reset_default), Toast.LENGTH_SHORT).show()
}

private fun toggleZoomLock(enabled: Boolean) {
viewModel.toggleZoomLock(enabled)
Toast.makeText(this, getString(if (enabled) R.string.msg_zoom_locked else R.string.msg_zoom_unlocked), Toast.LENGTH_SHORT).show()
}

private fun saveZoom() {
viewModel.saveZoom()
Toast.makeText(this, getString(R.string.msg_zoom_saved), Toast.LENGTH_SHORT).show()
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/java/com/gaurav/avnc/viewmodel/VncViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,8 @@ class VncViewModel(val profile: ServerProfile, app: Application) : BaseViewModel
**************************************************************************/

fun updateZoom(scaleFactor: Float, fx: Float, fy: Float) {
if (profile.fZoomLocked) return

val appliedScaleFactor = frameState.updateZoom(scaleFactor)

//Calculate how much the focus would shift after scaling
Expand Down Expand Up @@ -282,6 +284,11 @@ class VncViewModel(val profile: ServerProfile, app: Application) : BaseViewModel
frameViewRef.get()?.requestRender()
}

fun toggleZoomLock(enabled: Boolean) {
profile.fZoomLocked = enabled
saveProfile()
}

fun saveZoom() {
profile.zoom1 = frameState.zoomScale1
profile.zoom2 = frameState.zoomScale2
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_lock.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?colorOnSurface"
android:pathData="M18,8h-1L17,6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6v2L6,8c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,10c0,-1.1 -0.9,-2 -2,-2zM12,17c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM15.1,8L8.9,8L8.9,6c0,-1.71 1.39,-3.1 3.1,-3.1 1.71,0 3.1,1.39 3.1,3.1v2z" />
</vector>
7 changes: 7 additions & 0 deletions app/src/main/res/layout/activity_vnc.xml
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,13 @@
android:contentDescription="@string/desc_reset_zoom_btn"
android:src="@drawable/ic_zoom_reset" />

<ToggleButton
android:id="@+id/zoom_lock_btn"
style="@style/ImageButton.Toggle"
android:contentDescription="@string/desc_lock_zoom_btn"
android:drawableStart="@drawable/ic_lock"
android:padding="12dp" />

<ImageButton
android:id="@+id/zoom_save_btn"
style="@style/ImageButton"
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@
<string name="msg_about_app">A fast and secure VNC client. Remotely view and control any device running a VNC server.\n\n\nAVNC is an open source and copyleft software — made with help from many contributors.</string>
<string name="msg_server_profile_added">Server added</string>
<string name="msg_server_profile_deleted">Server deleted</string>
<string name="msg_zoom_locked">Zoom locked</string>
<string name="msg_zoom_unlocked">Zoom unlocked</string>
<string name="msg_zoom_reset">Zoom reset to 100%</string>
<string name="msg_zoom_reset_default">Zoom reset to default</string>
<string name="msg_zoom_saved">Saved current zoom as default</string>
Expand Down Expand Up @@ -104,6 +106,7 @@
<string name="desc_virtual_keys_btn">Show virtual keys</string>
<string name="desc_zoom_options_btn">Zoom options</string>
<string name="desc_reset_zoom_btn">Reset zoom</string>
<string name="desc_lock_zoom_btn">Lock zoom</string>
<string name="desc_save_zoom_btn">Save current zoom as default</string>
<string name="desc_retry_connection_btn">Reconnect</string>
<string name="desc_back_btn">Back</string>
Expand Down

0 comments on commit a29f4de

Please sign in to comment.