Update code to v1.0.14 (10)

This commit is contained in:
Caten
2024-02-29 19:35:00 +08:00
parent c2ee3b694c
commit a956d26f6d
3188 changed files with 2317293 additions and 146 deletions

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2021 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<!--
This color can be used for the icon of controls (e.g. EditText).
It is only valid for API >= 23
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="?android:disabledAlpha" android:color="?colorControlNormal" android:state_enabled="false" />
<item android:color="?colorControlNormal" android:state_focused="false" android:state_pressed="false" />
<item android:color="?colorControlActivated" />
</selector>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?colorControlHighlight">
<item>
<shape android:shape="oval">
<solid android:color="?attr/colorSurface" />
<size
android:width="@dimen/action_btn_size"
android:height="@dimen/action_btn_size" />
<stroke
android:width="1dp"
android:color="@color/colorBorder" />
</shape>
</item>
</ripple>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<!-- Custom background for FrameView. Used to avoid white overlay when not in touch-mode-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/transparent" android:state_focused="true" />
<item android:drawable="@android:color/transparent" android:state_window_focused="true" />
<item android:drawable="@android:color/transparent" />
</selector>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="?attr/colorSurface" />
<corners android:radius="5dp" />
<stroke
android:width="1dp"
android:color="@color/colorBorder" />
</shape>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true">
<color android:color="?colorControlHighlight" />
</item>
</selector>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?colorControlHighlight">
<item>
<shape android:shape="rectangle">
<corners android:radius="@dimen/urlbar_bg_corner_radius" />
<solid android:color="@color/colorUrlBarBackground" />
</shape>
</item>
</ripple>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?colorOnSurface"
android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z" />
</vector>

View File

@@ -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="M17,3H7c-1.1,0 -1.99,0.9 -1.99,2L5,21l7,-3 7,3V5c0,-1.1 -0.9,-2 -2,-2z" />
</vector>

View File

@@ -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="M20,8h-2.81c-0.45,-0.78 -1.07,-1.45 -1.82,-1.96L17,4.41 15.59,3l-2.17,2.17C12.96,5.06 12.49,5 12,5c-0.49,0 -0.96,0.06 -1.41,0.17L8.41,3 7,4.41l1.62,1.63C7.88,6.55 7.26,7.22 6.81,8L4,8v2h2.09c-0.05,0.33 -0.09,0.66 -0.09,1v1L4,12v2h2v1c0,0.34 0.04,0.67 0.09,1L4,16v2h2.81c1.04,1.79 2.97,3 5.19,3s4.15,-1.21 5.19,-3L20,18v-2h-2.09c0.05,-0.33 0.09,-0.66 0.09,-1v-1h2v-2h-2v-1c0,-0.34 -0.04,-0.67 -0.09,-1L20,10L20,8zM14,16h-4v-2h4v2zM14,12h-4v-2h4v2z" />
</vector>

View File

@@ -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="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z" />
</vector>

View File

@@ -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="M20,18c1.1,0 1.99,-0.9 1.99,-2L22,6c0,-1.1 -0.9,-2 -2,-2H4c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2H0v2h24v-2h-4zM4,6h16v10H4V6z" />
</vector>

View File

@@ -0,0 +1,22 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="#f5f5f5" />
</shape>
</item>
<item
android:bottom="16dp"
android:left="16dp"
android:right="16dp"
android:top="16dp">
<vector
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#2128ab"
android:pathData="M20,18c1.1,0 1.99,-0.9 1.99,-2L22,6c0,-1.1 -0.9,-2 -2,-2H4c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2H0v2h24v-2h-4zM4,6h16v10H4V6z" />
</vector>
</item>
</layer-list>

View File

@@ -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="M19,9h-4V3H9v6H5l7,7 7,-7zM5,18v2h14v-2H5z" />
</vector>

View File

@@ -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="M19.8,18.4L14,10.67V6.5l1.35,-1.69C15.61,4.48 15.38,4 14.96,4H9.04C8.62,4 8.39,4.48 8.65,4.81L10,6.5v4.17L4.2,18.4C3.71,19.06 4.18,20 5,20h14C19.82,20 20.29,19.06 19.8,18.4z" />
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?colorOnSurface"
android:pathData="M6,2c-1.1,0 -1.99,0.9 -1.99,2L4,20c0,1.1 0.89,2 1.99,2L18,22c1.1,0 2,-0.9 2,-2L20,8l-6,-6L6,2zM13,9L13,3.5L18.5,9L13,9z" />
</vector>

View File

@@ -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="M4.59,6.89c0.7,-0.71 1.4,-1.35 1.71,-1.22 0.5,0.2 0,1.03 -0.3,1.52 -0.25,0.42 -2.86,3.89 -2.86,6.31 0,1.28 0.48,2.34 1.34,2.98 0.75,0.56 1.74,0.73 2.64,0.46 1.07,-0.31 1.95,-1.4 3.06,-2.77 1.21,-1.49 2.83,-3.44 4.08,-3.44 1.63,0 1.65,1.01 1.76,1.79 -3.78,0.64 -5.38,3.67 -5.38,5.37 0,1.7 1.44,3.09 3.21,3.09 1.63,0 4.29,-1.33 4.69,-6.1L21,14.88v-2.5h-2.47c-0.15,-1.65 -1.09,-4.2 -4.03,-4.2 -2.25,0 -4.18,1.91 -4.94,2.84 -0.58,0.73 -2.06,2.48 -2.29,2.72 -0.25,0.3 -0.68,0.84 -1.11,0.84 -0.45,0 -0.72,-0.83 -0.36,-1.92 0.35,-1.09 1.4,-2.86 1.85,-3.52 0.78,-1.14 1.3,-1.92 1.3,-3.28C8.95,3.69 7.31,3 6.44,3 5.12,3 3.97,4 3.72,4.25c-0.36,0.36 -0.66,0.66 -0.88,0.93l1.75,1.71zM13.88,18.55c-0.31,0 -0.74,-0.26 -0.74,-0.72 0,-0.6 0.73,-2.2 2.87,-2.76 -0.3,2.69 -1.43,3.48 -2.13,3.48z" />
</vector>

View File

@@ -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="m11.999,1c-6.0742,-0 -10.999,5.0495 -10.999,11.2787 0,4.983 3.1515,9.2099 7.5226,10.702 0.5504,0.1032 0.7509,-0.2451 0.7509,-0.5442 0,-0.2673 -0.0095,-0.9769 -0.0149,-1.9179 -3.0597,0.6813 -3.7053,-1.5121 -3.7053,-1.5121 -0.5004,-1.3024 -1.2216,-1.6492 -1.2216,-1.6492 -0.9987,-0.7 0.0756,-0.6861 0.0756,-0.6861 1.1041,0.0803 1.6848,1.1625 1.6848,1.1625 0.9812,1.7233 2.5748,1.2255 3.2015,0.9375 0.0999,-0.7291 0.3836,-1.2262 0.6982,-1.508 -2.4425,-0.2846 -5.0106,-1.2525 -5.0106,-5.5743 0,-1.231 0.4288,-2.2377 1.1324,-3.0264 -0.1134,-0.2853 -0.4909,-1.4318 0.1074,-2.9848 0,-0 0.9238,-0.3033 3.0253,1.1563 0.8772,-0.2499 1.8185,-0.3753 2.7538,-0.3794 0.9339,0.0042 1.8753,0.1295 2.7538,0.3794 2.1001,-1.4595 3.0219,-1.1563 3.0219,-1.1563 0.6003,1.553 0.2228,2.6996 0.1094,2.9848 0.705,0.7886 1.1311,1.7953 1.1311,3.0264 0,4.3329 -2.5721,5.2863 -5.0227,5.5653 0.395,0.3483 0.7469,1.0365 0.7469,2.0889 0,1.5073 -0.0135,2.7238 -0.0135,3.0935 0,0.3019 0.1979,0.6529 0.7563,0.5428 4.3677,-1.4948 7.5166,-5.719 7.5166,-10.7006C23,6.0495 18.0745,1 11.999,1" />
</vector>

File diff suppressed because one or more lines are too long

View File

@@ -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="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,19h-2v-2h2v2zM15.07,11.25l-0.9,0.92C13.45,12.9 13,13.5 13,15h-2v-0.5c0,-1.1 0.45,-2.1 1.17,-2.83l1.24,-1.26c0.37,-0.36 0.59,-0.86 0.59,-1.41 0,-1.1 -0.9,-2 -2,-2s-2,0.9 -2,2L8,9c0,-2.21 1.79,-4 4,-4s4,1.79 4,4c0,0.88 -0.36,1.68 -0.93,2.25z" />
</vector>

View File

@@ -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="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-6h2v6zM13,9h-2L11,7h2v2z" />
</vector>

View File

@@ -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="M12.65,10C11.83,7.67 9.61,6 7,6c-3.31,0 -6,2.69 -6,6s2.69,6 6,6c2.61,0 4.83,-1.67 5.65,-4H17v4h4v-4h2v-4H12.65zM7,14c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2z" />
</vector>

View File

@@ -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="M20,5L4,5c-1.1,0 -1.99,0.9 -1.99,2L2,17c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,7c0,-1.1 -0.9,-2 -2,-2zM11,8h2v2h-2L11,8zM11,11h2v2h-2v-2zM8,8h2v2L8,10L8,8zM8,11h2v2L8,13v-2zM7,13L5,13v-2h2v2zM7,10L5,10L5,8h2v2zM16,17L8,17v-2h8v2zM16,13h-2v-2h2v2zM16,10h-2L14,8h2v2zM19,13h-2v-2h2v2zM19,10h-2L17,8h2v2z" />
</vector>

View File

@@ -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="M7.41,8.59L12,13.17l4.59,-4.58L18,10l-6,6 -6,-6 1.41,-1.41z" />
</vector>

View File

@@ -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="M15.41,16.59L10.83,12l4.58,-4.59L14,6l-6,6 6,6 1.41,-1.41z" />
</vector>

View File

@@ -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="M8.59,16.59L13.17,12 8.59,7.41 10,6l6,6 -6,6 -1.41,-1.41z" />
</vector>

View File

@@ -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="M7.41,15.41L12,10.83l4.59,4.58L18,14l-6,-6 -6,6z" />
</vector>

View File

@@ -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="M20,7L4,7C2.9,7 2.01,7.9 2.01,9L2,15c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,9C22,7.9 21.1,7 20,7ZM11,9h2v2L11,11ZM8,9h2v2L8,11ZM7,11L5,11L5,9h2zM16,15L8,15v-2h8zM16,11L14,11L14,9h2zM19,11L17,11L17,9h2z" />
</vector>

View File

@@ -0,0 +1,41 @@
<!--
~ Copyright (c) 2021 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<group
android:scaleX="0.5625"
android:scaleY="0.5625">
<path
android:pathData="M-0,-0h192v192h-192z"
android:strokeWidth="0"
android:strokeColor="#00000000"
android:strokeLineCap="square"
android:strokeLineJoin="round">
<aapt:attr name="android:fillColor">
<gradient
android:endX="97.52014"
android:endY="-2.1316282E-14"
android:startX="97.52014"
android:startY="192.98738"
android:type="linear">
<item
android:color="#FF102359"
android:offset="0" />
<item
android:color="#FF3365FF"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
</group>
</vector>

View File

@@ -0,0 +1,46 @@
<!--
~ Copyright (c) 2021 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<group
android:scaleX="0.5625"
android:scaleY="0.5625">
<path
android:fillColor="#00000000"
android:pathData="M76.149,73.388 L98.058,118.702"
android:strokeWidth="12.2257"
android:strokeColor="#e0b609"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillColor="#00000000"
android:pathData="M53.313,118.702 L76.149,73.388"
android:strokeWidth="12.2257"
android:strokeColor="#ffce00"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillColor="#00000000"
android:pathData="m138.69,73.295 l-22.41,45.32"
android:strokeWidth="12.2194"
android:strokeColor="#00c21d"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillColor="#00000000"
android:pathData="M116.28,118.615 L93.939,73.295"
android:strokeWidth="12.2194"
android:strokeColor="#00e524"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
</group>
</vector>

View File

@@ -0,0 +1,46 @@
<!--
~ Copyright (c) 2021 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<group
android:scaleX="0.5625"
android:scaleY="0.5625">
<path
android:fillColor="#00000000"
android:pathData="M76.149,73.388 L98.058,118.702"
android:strokeWidth="12.2257"
android:strokeColor="#000000"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillColor="#00000000"
android:pathData="M53.313,118.702 L76.149,73.388"
android:strokeWidth="12.2257"
android:strokeColor="#000000"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillColor="#00000000"
android:pathData="m138.69,73.295 l-22.41,45.32"
android:strokeWidth="12.2194"
android:strokeColor="#000000"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillColor="#00000000"
android:pathData="M116.28,118.615 L93.939,73.295"
android:strokeWidth="12.2194"
android:strokeColor="#000000"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
</group>
</vector>

View File

@@ -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="M9,21c0,0.5 0.4,1 1,1h4c0.6,0 1,-0.5 1,-1v-1L9,20v1zM12,2C8.1,2 5,5.1 5,9c0,2.4 1.2,4.5 3,5.7L8,17c0,0.5 0.4,1 1,1h6c0.6,0 1,-0.5 1,-1v-2.3c1.8,-1.3 3,-3.4 3,-5.7 0,-3.9 -3.1,-7 -7,-7z" />
</vector>

View File

@@ -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>

View File

@@ -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="M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z" />
</vector>

View File

@@ -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="M13,1.07L13,9h7c0,-4.08 -3.05,-7.44 -7,-7.93zM4,15c0,4.42 3.58,8 8,8s8,-3.58 8,-8v-4L4,11v4zM11,1.07C7.05,1.56 4,4.92 4,9h7L11,1.07z" />
</vector>

View File

@@ -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="M12,3c-4.97,0 -9,4.03 -9,9s4.03,9 9,9c0.83,0 1.5,-0.67 1.5,-1.5 0,-0.39 -0.15,-0.74 -0.39,-1.01 -0.23,-0.26 -0.38,-0.61 -0.38,-0.99 0,-0.83 0.67,-1.5 1.5,-1.5L16,16c2.76,0 5,-2.24 5,-5 0,-4.42 -4.03,-8 -9,-8zM6.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S5.67,9 6.5,9 8,9.67 8,10.5 7.33,12 6.5,12zM9.5,8C8.67,8 8,7.33 8,6.5S8.67,5 9.5,5s1.5,0.67 1.5,1.5S10.33,8 9.5,8zM14.5,8c-0.83,0 -1.5,-0.67 -1.5,-1.5S13.67,5 14.5,5s1.5,0.67 1.5,1.5S15.33,8 14.5,8zM17.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S16.67,9 17.5,9s1.5,0.67 1.5,1.5 -0.67,1.5 -1.5,1.5z" />
</vector>

View File

@@ -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="M2,17h20v2H2V17zM3.15,12.95L4,11.47l0.85,1.48l1.3,-0.75L5.3,10.72H7v-1.5H5.3l0.85,-1.47L4.85,7L4,8.47L3.15,7l-1.3,0.75L2.7,9.22H1v1.5h1.7L1.85,12.2L3.15,12.95zM9.85,12.2l1.3,0.75L12,11.47l0.85,1.48l1.3,-0.75l-0.85,-1.48H15v-1.5h-1.7l0.85,-1.47L12.85,7L12,8.47L11.15,7l-1.3,0.75l0.85,1.47H9v1.5h1.7L9.85,12.2zM23,9.22h-1.7l0.85,-1.47L20.85,7L20,8.47L19.15,7l-1.3,0.75l0.85,1.47H17v1.5h1.7l-0.85,1.48l1.3,0.75L20,11.47l0.85,1.48l1.3,-0.75l-0.85,-1.48H23V9.22z" />
</vector>

View File

@@ -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="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z" />
</vector>

View File

@@ -0,0 +1,12 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<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="M13,4a1,1 0,1 0,-2 0v7H4a1,1 0,1 0,0 2h7v7a1,1 0,1 0,2 0v-7h7a1,1 0,1 0,0 -2h-7V4z" />
</vector>

View File

@@ -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="M17.65,6.35C16.2,4.9 14.21,4 12,4c-4.42,0 -7.99,3.58 -7.99,8s3.57,8 7.99,8c3.73,0 6.84,-2.55 7.73,-6h-2.08c-0.82,2.33 -3.04,4 -5.65,4 -3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6c1.66,0 3.14,0.69 4.22,1.78L13,11h7V4l-2.35,2.35z" />
</vector>

View File

@@ -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="M17,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,7l-4,-4zM12,19c-1.66,0 -3,-1.34 -3,-3s1.34,-3 3,-3 3,1.34 3,3 -1.34,3 -3,3zM15,9L5,9L5,5h10v4z" />
</vector>

View File

@@ -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="M16.48,2.52c3.27,1.55 5.61,4.72 5.97,8.48h1.5C23.44,4.84 18.29,0 12,0l-0.66,0.03 3.81,3.81 1.33,-1.32zM10.23,1.75c-0.59,-0.59 -1.54,-0.59 -2.12,0L1.75,8.11c-0.59,0.59 -0.59,1.54 0,2.12l12.02,12.02c0.59,0.59 1.54,0.59 2.12,0l6.36,-6.36c0.59,-0.59 0.59,-1.54 0,-2.12L10.23,1.75zM14.83,21.19L2.81,9.17l6.36,-6.36 12.02,12.02 -6.36,6.36zM7.52,21.48C4.25,19.94 1.91,16.76 1.55,13L0.05,13C0.56,19.16 5.71,24 12,24l0.66,-0.03 -3.81,-3.81 -1.33,1.32z" />
</vector>

View File

@@ -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="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z" />
</vector>

View File

@@ -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="M19.14,12.94c0.04,-0.3 0.06,-0.61 0.06,-0.94c0,-0.32 -0.02,-0.64 -0.07,-0.94l2.03,-1.58c0.18,-0.14 0.23,-0.41 0.12,-0.61l-1.92,-3.32c-0.12,-0.22 -0.37,-0.29 -0.59,-0.22l-2.39,0.96c-0.5,-0.38 -1.03,-0.7 -1.62,-0.94L14.4,2.81c-0.04,-0.24 -0.24,-0.41 -0.48,-0.41h-3.84c-0.24,0 -0.43,0.17 -0.47,0.41L9.25,5.35C8.66,5.59 8.12,5.92 7.63,6.29L5.24,5.33c-0.22,-0.08 -0.47,0 -0.59,0.22L2.74,8.87C2.62,9.08 2.66,9.34 2.86,9.48l2.03,1.58C4.84,11.36 4.8,11.69 4.8,12s0.02,0.64 0.07,0.94l-2.03,1.58c-0.18,0.14 -0.23,0.41 -0.12,0.61l1.92,3.32c0.12,0.22 0.37,0.29 0.59,0.22l2.39,-0.96c0.5,0.38 1.03,0.7 1.62,0.94l0.36,2.54c0.05,0.24 0.24,0.41 0.48,0.41h3.84c0.24,0 0.44,-0.17 0.47,-0.41l0.36,-2.54c0.59,-0.24 1.13,-0.56 1.62,-0.94l2.39,0.96c0.22,0.08 0.47,0 0.59,-0.22l1.92,-3.32c0.12,-0.22 0.07,-0.47 -0.12,-0.61L19.14,12.94zM12,15.6c-1.98,0 -3.6,-1.62 -3.6,-3.6s1.62,-3.6 3.6,-3.6s3.6,1.62 3.6,3.6S13.98,15.6 12,15.6z" />
</vector>

View File

@@ -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="M12,1L3,5v6c0,5.55 3.84,10.74 9,12 5.16,-1.26 9,-6.45 9,-12V5l-9,-4z" />
</vector>

View File

@@ -0,0 +1,17 @@
<!--
~ Copyright (c) 2021 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<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="M3,3C1.9,3 1.0098,3.9 1.0098,5L1,19c0,1.1 0.8,2 1.9,2L21,21c1.1,0 2,-0.9 2,-2L23,5C23,3.9 22.1,3 21,3ZM5.5195,8.5c0.2321,0 0.4561,0.0144 0.6699,0.0449 0.2199,0.0305 0.451,0.0956 0.6953,0.1934 0.2444,0.0916 0.4557,0.2125 0.6328,0.3652 0.1772,0.1466 0.3234,0.3543 0.4395,0.623C8.0792,9.9893 8.1406,10.2963 8.1406,10.6445L6.8574,10.6445C6.8085,9.9481 6.3409,9.5996 5.4551,9.5996c-0.3543,0 -0.6341,0.0758 -0.8418,0.2285 -0.2077,0.1466 -0.3125,0.3452 -0.3125,0.5957 0,0.2444 0.0885,0.4286 0.2656,0.5508 0.1772,0.1161 0.5113,0.2226 1,0.3203l1.0449,0.2012c0.617,0.1222 1.0647,0.3298 1.3457,0.623 0.281,0.2871 0.4219,0.6934 0.4219,1.2188 0,0.6781 -0.242,1.2089 -0.7246,1.5938C7.1717,15.3104 6.5,15.5 5.6387,15.5 4.7834,15.5 4.1171,15.3104 3.6406,14.9316 3.1702,14.5529 2.9139,14.0077 2.8711,13.293h1.3379c0.0244,0.3604 0.1653,0.6348 0.4219,0.8242 0.2566,0.1894 0.6177,0.2832 1.082,0.2832 0.4154,0 0.7422,-0.0794 0.9805,-0.2383 0.2444,-0.1588 0.3652,-0.3791 0.3652,-0.6602 0,-0.2688 -0.0938,-0.4764 -0.2832,-0.623C6.586,12.7323 6.2629,12.6168 5.8047,12.5313L4.8691,12.3477C4.191,12.2194 3.709,12.019 3.4219,11.7441 3.1348,11.4692 2.9902,11.072 2.9902,10.5527 2.9902,9.8991 3.2105,9.3953 3.6504,9.041 4.0963,8.6806 4.7192,8.5 5.5195,8.5ZM11.7656,8.5c0.2321,0 0.4561,0.0144 0.6699,0.0449 0.2199,0.0305 0.451,0.0956 0.6953,0.1934 0.2444,0.0916 0.4557,0.2125 0.6328,0.3652 0.1772,0.1466 0.3234,0.3543 0.4395,0.623 0.1222,0.2627 0.1836,0.5698 0.1836,0.918h-1.2832c-0.0489,-0.6964 -0.5146,-1.0449 -1.4004,-1.0449 -0.3543,0 -0.636,0.0758 -0.8438,0.2285 -0.2077,0.1466 -0.3125,0.3452 -0.3125,0.5957 0,0.2444 0.0885,0.4286 0.2656,0.5508 0.1772,0.1161 0.5113,0.2226 1,0.3203l1.0449,0.2012c0.617,0.1222 1.0647,0.3298 1.3457,0.623 0.281,0.2871 0.4219,0.6934 0.4219,1.2188 0,0.6781 -0.24,1.2089 -0.7227,1.5938C13.4197,15.3104 12.7461,15.5 11.8848,15.5 11.0295,15.5 10.3652,15.3104 9.8887,14.9316 9.4183,14.5529 9.16,14.0077 9.1172,13.293h1.3379c0.0244,0.3604 0.1653,0.6348 0.4219,0.8242 0.2566,0.1894 0.6177,0.2832 1.082,0.2832 0.4154,0 0.7422,-0.0794 0.9805,-0.2383 0.2444,-0.1588 0.3672,-0.3791 0.3672,-0.6602 0,-0.2688 -0.0958,-0.4764 -0.2852,-0.623 -0.1894,-0.1466 -0.5125,-0.2621 -0.9707,-0.3477L11.1152,12.3477C10.4371,12.2194 9.9551,12.019 9.668,11.7441 9.3808,11.4692 9.2363,11.072 9.2363,10.5527c0,-0.6537 0.2203,-1.1574 0.6602,-1.5117C10.3424,8.6806 10.9653,8.5 11.7656,8.5ZM15.7305,8.6094h1.375v2.502h2.6387L19.7441,8.6094h1.3848v6.6797h-1.375v-3.0332h-2.6484v3.0332h-1.375z" />
</vector>

View File

@@ -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="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z" />
</vector>

View File

@@ -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="m4.5,4.5l0,6.667l6.667,0L11.167,4.5ZM4.5,12.833l0,6.667l6.667,0L11.167,12.833ZM12.833,4.5l0,6.667l6.667,0L19.5,4.5ZM12.833,12.833l0,6.667l6.667,0l0,-6.667z" />
</vector>

View File

@@ -0,0 +1,12 @@
<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="M22,8l-4,-4v3H3v2h15v3L22,8z" />
<path
android:fillColor="?colorOnSurface"
android:pathData="M2,16l4,4v-3h15v-2H6v-3L2,16z" />
</vector>

View File

@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="12dp"
android:height="24dp"
android:autoMirrored="true"
android:tint="#8fff"
android:tintMode="multiply"
android:viewportWidth="12"
android:viewportHeight="24">
<path
android:fillColor="?colorOnSurface"
android:pathData="M3,9.172 L5.828,12 3,14.828Z" />
</vector>

View File

@@ -0,0 +1,17 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?colorOnSurface"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="m20,20c1.1,0 1.99,-0.9 1.99,-2L22,6C22,4.9 21.1,4 20,4H4C2.9,4 2,4.9 2,6v12c0,1.1 0.9,2 2,2h8zM4,6H20V18H4Z" />
<path
android:fillColor="#00000000"
android:pathData="m6.5,9v6"
android:strokeWidth="3"
android:strokeColor="#000000"
android:strokeLineCap="round"
android:strokeLineJoin="miter" />
</vector>

View File

@@ -0,0 +1,12 @@
<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="M21.67,18.17l-5.3,-5.3h-0.99l-2.54,2.54v0.99l5.3,5.3c0.39,0.39 1.02,0.39 1.41,0l2.12,-2.12C22.06,19.2 22.06,18.56 21.67,18.17z" />
<path
android:fillColor="?colorOnSurface"
android:pathData="M17.34,10.19l1.41,-1.41l2.12,2.12c1.17,-1.17 1.17,-3.07 0,-4.24l-3.54,-3.54l-1.41,1.41V1.71L15.22,1l-3.54,3.54l0.71,0.71h2.83l-1.41,1.41l1.06,1.06l-2.89,2.89L7.85,6.48V5.06L4.83,2.04L2,4.87l3.03,3.03h1.41l4.13,4.13l-0.85,0.85H7.6l-5.3,5.3c-0.39,0.39 -0.39,1.02 0,1.41l2.12,2.12c0.39,0.39 1.02,0.39 1.41,0l5.3,-5.3v-2.12l5.15,-5.15L17.34,10.19z" />
</vector>

View File

@@ -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="M9,16h6v-6h4l-7,-7 -7,7h4zM5,18h14v2L5,20z" />
</vector>

View File

@@ -0,0 +1,10 @@
<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="M9.5556,8.4444L9.5556,15.5556L15.6667,12ZM20.5556,4L3.4444,4C2.1,4 1,4.8 1,5.7778L1,18.2222C1,19.2 2.1,20 3.4444,20L20.5556,20C21.9,20 23,19.2 23,18.2222L23,5.7778C23,4.8 21.9,4 20.5556,4ZM20.5556,18.2222L3.4444,18.2222L3.4444,5.7778L20.5556,5.7778Z"
android:strokeWidth="1.04231" />
</vector>

View File

@@ -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="M12,4.5C7,4.5 2.73,7.61 1,12c1.73,4.39 6,7.5 11,7.5s9.27,-3.11 11,-7.5c-1.73,-4.39 -6,-7.5 -11,-7.5zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5zM12,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3z" />
</vector>

View File

@@ -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="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z" />
</vector>

View File

@@ -0,0 +1,114 @@
<!--
~ Copyright (c) 2021 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="150dp"
android:height="75dp"
android:viewportWidth="150"
android:viewportHeight="75">
<path
android:fillColor="#00000000"
android:pathData="M34.909,24.938 L47.08,50.112"
android:strokeWidth="6.40167"
android:strokeColor="#d6ac00"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillColor="#00000000"
android:pathData="M22.222,50.112 L34.909,24.938"
android:strokeWidth="6.40167"
android:strokeColor="#ffce00"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillColor="#00000000"
android:pathData="M69.654,24.886 L57.204,50.064"
android:strokeWidth="6.39839"
android:strokeColor="#00c21d"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillColor="#00000000"
android:pathData="M57.204,50.064 L44.792,24.886"
android:strokeWidth="6.39839"
android:strokeColor="#00e524"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillAlpha="0.994888"
android:fillColor="#00000000"
android:pathData="m78.298,50.115 l-0.125,-25.231"
android:strokeWidth="6.38617"
android:strokeAlpha="0.994888"
android:strokeColor="#cc2e00"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillAlpha="0.994888"
android:fillColor="#00000000"
android:pathData="M103.005,50.115 L102.88,24.885"
android:strokeWidth="6.38617"
android:strokeAlpha="0.994888"
android:strokeColor="#cc2f00"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillAlpha="0.994888"
android:fillColor="#00000000"
android:pathData="M103.005,50.115 L78.172,24.885"
android:strokeWidth="6.38617"
android:strokeAlpha="0.994888"
android:strokeColor="#ff3c00"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillAlpha="0.08953992"
android:fillColor="#00000000"
android:pathData="m124.517,50.099a12.491,12.599 0,0 1,-12.491 -12.599,12.491 12.599,0 0,1 12.491,-12.599"
android:strokeWidth="6.38639"
android:strokeAlpha="0.994888"
android:strokeColor="#ff00a4"
android:strokeLineCap="butt"
android:strokeLineJoin="round" />
<path
android:fillAlpha="0.994888"
android:fillColor="#00000000"
android:pathData="m127.786,24.888 l-4.029,0.051"
android:strokeWidth="6.38622"
android:strokeAlpha="0.994888"
android:strokeColor="#ff00a3"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillAlpha="0.994888"
android:fillColor="#00000000"
android:pathData="m127.786,50.061 l-4.029,0.051"
android:strokeWidth="6.38622"
android:strokeAlpha="0.994888"
android:strokeColor="#ff00a3"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillAlpha="0.994888"
android:fillColor="#d6008a"
android:pathData="M127.786,24.913m-3.193,0a3.193,3.193 0,1 1,6.386 0a3.193,3.193 0,1 1,-6.386 0"
android:strokeWidth="0"
android:strokeAlpha="0.994888"
android:strokeColor="#00000000"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:fillAlpha="0.994888"
android:fillColor="#d6008a"
android:pathData="M127.786,50.087m-3.193,0a3.193,3.193 0,1 1,6.386 0a3.193,3.193 0,1 1,-6.386 0"
android:strokeWidth="0"
android:strokeAlpha="0.994888"
android:strokeColor="#00000000"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
</vector>

View File

@@ -0,0 +1,12 @@
<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="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z" />
<path
android:fillColor="?colorOnSurface"
android:pathData="M12,10h-2v2H9v-2H7V9h2V7h1v2h2v1z" />
</vector>

View File

@@ -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="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z" />
</vector>

View File

@@ -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="M17.01,14h-0.8l-0.27,-0.27c0.98,-1.14 1.57,-2.61 1.57,-4.23 0,-3.59 -2.91,-6.5 -6.5,-6.5s-6.5,3 -6.5,6.5H2l3.84,4 4.16,-4H6.51C6.51,7 8.53,5 11.01,5s4.5,2.01 4.5,4.5c0,2.48 -2.02,4.5 -4.5,4.5 -0.65,0 -1.26,-0.14 -1.82,-0.38L7.71,15.1c0.97,0.57 2.09,0.9 3.3,0.9 1.61,0 3.08,-0.59 4.22,-1.57l0.27,0.27v0.79l5.01,4.99L22,19l-4.99,-5z" />
</vector>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2021 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="10dp"
android:height="10dp" />
<solid android:color="?colorSecondary" />
</shape>

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2021 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.appbar.AppBarLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:clipToPadding="false"
android:padding="@dimen/padding_normal">
<FrameLayout
android:id="@+id/fragment_host"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</ScrollView>
</LinearLayout>

View File

@@ -0,0 +1,28 @@
<!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.appbar.AppBarLayout>
<FrameLayout
android:id="@+id/fragment_host"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>

View File

@@ -0,0 +1,157 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="com.gaurav.avnc.viewmodel.VncViewModel.State" />
<variable
name="viewModel"
type="com.gaurav.avnc.viewmodel.VncViewModel" />
</data>
<!--
There are three components of this screen:
1. FrameView :- Renders remote content. This is "behind" all other Views.
2. Drawers :- These represent the toolbars and are rendered on top of FrameView.
Currently, we only have one drawer.
3. Status :- Topmost View. Shows progress indicator, status msg etc. It is initially
visible but becomes invisible once we are successfully connected to server.
-->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.drawerlayout.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:scrimColor="@{0}">
<!--FrameView-->
<com.gaurav.avnc.ui.vnc.FrameView
android:id="@+id/frame_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_frame_view"
android:focusable="true"
android:focusableInTouchMode="true" />
<!--Drawer-->
<include
android:id="@+id/toolbar"
layout="@layout/toolbar_drawer"
app:viewModel="@{viewModel}" />
</androidx.drawerlayout.widget.DrawerLayout>
<!--Virtual keys-->
<ViewStub
android:id="@+id/virtual_keys_stub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|bottom"
android:layout="@layout/virtual_keys" />
<!--Status-->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/status_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?colorSurface">
<ProgressBar
style="@style/Widget.AppCompat.ProgressBar"
android:layout_width="60dp"
android:layout_height="60dp"
android:indeterminate="true"
android:padding="@dimen/padding_small"
app:isVisible="@{viewModel.state == State.Connecting}"
app:layout_constraintBottom_toTopOf="@id/client_state"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:importantForAccessibility="no"
android:src="@drawable/ic_warning"
app:isVisible="@{viewModel.state == State.Disconnected}"
app:layout_constraintBottom_toTopOf="@id/client_state"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:tint="?attr/colorError" />
<TextView
android:id="@+id/client_state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_normal"
android:text="@{viewModel.state.toString()}"
app:isVisible="@{viewModel.state != State.Created}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="State" />
<TextView
android:id="@+id/disconnect_reason"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_normal"
android:gravity="center"
android:text='@{ "( " + viewModel.disconnectReason + " )"}'
android:textAppearance="@style/TextAppearance.AppCompat.Caption"
app:isVisible="@{viewModel.state == State.Disconnected &amp;&amp; !viewModel.disconnectReason.empty}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/client_state"
tools:text="( Connection refused! Server may be down or running on different port )" />
<ImageButton
android:id="@+id/reconnect_btn"
style="@style/ImageButton"
android:background="@drawable/bg_circular_button"
android:contentDescription="@string/desc_retry_connection_btn"
android:src="@drawable/ic_refresh"
app:isVisible="@{viewModel.state == State.Disconnected}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/disconnect_reason" />
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/auto_reconnect_progress"
style="@style/Widget.MaterialComponents.CircularProgressIndicator"
android:layout_width="@dimen/action_btn_size"
android:layout_height="@dimen/action_btn_size"
app:indicatorColor="?colorSecondary"
app:indicatorInset="0dp"
app:indicatorSize="@dimen/action_btn_size"
app:isVisible="@{viewModel.state == State.Disconnected &amp;&amp; viewModel.pref.server.autoReconnect}"
app:layout_constraintStart_toStartOf="@id/reconnect_btn"
app:layout_constraintTop_toTopOf="@id/reconnect_btn"
app:trackThickness="1dp"
tools:progress="50" />
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>
</layout>

View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2021 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="center"
android:importantForAccessibility="no"
android:src="@mipmap/avnc" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/margin_small"
android:text="@string/app_name"
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline5" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_large"
android:text="@string/msg_about_app"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1" />
<Button
android:id="@+id/repo_btn"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_large"
android:text="@string/title_source_code"
app:icon="@drawable/ic_github" />
<Button
android:id="@+id/licence_btn"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title_license"
app:icon="@drawable/ic_file" />
<Button
android:id="@+id/library_btn"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title_open_source_libraries"
app:icon="@drawable/ic_bookmark" />
</LinearLayout>
</layout>

View File

@@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="loginInfo"
type="com.gaurav.avnc.model.LoginInfo" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/padding_normal">
<!--Username-->
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/username_layout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_normal"
app:endIconMode="none">
<AutoCompleteTextView
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autofillHints="username"
android:hint="@string/hint_username"
android:imeOptions="actionNext"
android:inputType="text"
android:text="@={loginInfo.username}" />
</com.google.android.material.textfield.TextInputLayout>
<!--Password-->
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/password_layout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_normal"
app:endIconMode="none">
<AutoCompleteTextView
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autofillHints="password"
android:hint="@string/hint_password"
android:imeOptions="actionDone"
android:inputType="textPassword"
android:text="@={loginInfo.password}" />
</com.google.android.material.textfield.TextInputLayout>
<CheckBox
android:id="@+id/remember"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_small"
android:text="@string/title_remember"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body2" />
<TextView
android:id="@+id/pk_password_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_normal"
android:drawablePadding="@dimen/padding_small"
android:text="@string/msg_pk_password_not_saved"
android:visibility="gone"
app:drawableStartCompat="@drawable/ic_info"
app:drawableTint="@color/material_on_background_disabled"
tools:visibility="visible" />
</LinearLayout>
</layout>

View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2021 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/padding_normal"
tools:ignore="HardcodedText">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is a non-exhaustive list of libraries and resources used in this app. We thank the developers of these wonderful libraries for their contributions."
android:textAppearance="@style/TextAppearance.MaterialComponents.Body2" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_large"
android:layout_marginBottom="@dimen/margin_normal"
android:text="(Tap to open their homepage)" />
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="@color/colorBorder" />
<!--
Library list is dynamically populated.
ListView would be better for this task, but it causes some layout issues here.
-->
<LinearLayout
android:id="@+id/library_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="@color/colorBorder" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_large"
android:text="This software is based in part on the work of the Independent JPEG Group" />
</LinearLayout>
</layout>

View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2021 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/padding_normal"
tools:ignore="HardcodedText">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline5" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Copyleft (c) 2020-2021 Gaurav Ujjwal" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_large"
android:layout_marginBottom="@dimen/margin_normal"
android:drawablePadding="@dimen/padding_small"
android:text='@{@string/app_name + " is released under the GNU General Public License, version 3 or later."}'
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
app:drawableEndCompat="@drawable/ic_gpl" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_normal"
android:layout_marginBottom="@dimen/margin_normal"
android:text='@{@string/app_name + " uses code which is released under one or more of the licenses listed below."}'
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1" />
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginTop="@dimen/margin_large"
android:layout_marginBottom="@dimen/margin_large"
android:background="@color/colorBorder" />
<!--Vertical scrolling is provided by the ScrollView in parent activity-->
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/license_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_normal"
android:textSize="12sp"
android:typeface="monospace" />
</HorizontalScrollView>
</LinearLayout>
</layout>

View File

@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="profile"
type="com.gaurav.avnc.model.ServerProfile" />
</data>
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/padding_normal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:orientation="vertical">
<!--Name-->
<EditText
style="@style/FormField.EditText"
android:layout_width="match_parent"
android:drawableStart="@drawable/ic_bookmark"
android:hint="@string/hint_server_name"
android:importantForAutofill="no"
android:inputType="text"
android:text="@={profile.name}" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!--Host-->
<EditText
android:id="@+id/host"
style="@style/FormField.EditText"
android:layout_weight=".8"
android:drawableStart="@{profile.useRepeater ? @drawable/ic_swap : @drawable/ic_computer}"
android:hint="@{profile.useRepeater ? @string/hint_repeater_host : @string/hint_host}"
android:importantForAutofill="no"
android:inputType="textUri"
android:text="@={profile.host}" />
<!--Port-->
<EditText
android:id="@+id/port"
style="@style/FormField.EditText"
android:layout_marginStart="0dp"
android:layout_weight=".2"
android:hint="@string/hint_port"
android:importantForAutofill="no"
android:inputType="number"
android:text='@={"" + profile.port}' />
</LinearLayout>
<EditText
android:id="@+id/username"
style="@style/FormField.EditText"
android:layout_width="match_parent"
android:autofillHints="username"
android:drawableStart="@drawable/ic_person"
android:hint="@string/hint_username"
android:inputType="text"
android:text="@={profile.username}" />
<EditText
android:id="@+id/password"
style="@style/FormField.EditText"
android:layout_width="match_parent"
android:autofillHints="password"
android:drawableStart="@drawable/ic_password"
android:hint="@string/hint_password"
android:inputType="textPassword"
android:text="@={profile.password}" />
</LinearLayout>
</ScrollView>
</layout>

View File

@@ -0,0 +1,459 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.gaurav.avnc.viewmodel.EditorViewModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?colorSurface"
android:orientation="vertical">
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!-- Appbar -->
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="@dimen/urlbar_height"
app:navigationContentDescription="@string/desc_back_btn"
app:navigationIcon="@drawable/ic_arrow_back">
<Button
android:id="@+id/save_btn"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:text="@string/title_save" />
</com.google.android.material.appbar.MaterialToolbar>
</com.google.android.material.appbar.AppBarLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:padding="@dimen/padding_normal"
android:paddingBottom="30dp">
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!-- VNC Server -->
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<EditText
android:id="@+id/name"
style="@style/FormField.EditText"
android:drawableStart="@drawable/ic_bookmark"
android:hint="@string/hint_server_name"
android:importantForAutofill="no"
android:inputType="text"
android:text="@={viewModel.profile.name}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--Host-->
<EditText
android:id="@+id/host"
style="@style/FormField.EditText"
android:drawableStart="@{viewModel.useRepeater ? @drawable/ic_swap : @drawable/ic_computer}"
android:hint="@{viewModel.useRepeater ? @string/hint_repeater_host : @string/hint_host}"
android:importantForAutofill="no"
android:inputType="textUri"
android:text="@={viewModel.profile.host}"
app:layout_constraintEnd_toStartOf="@id/port"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/name" />
<!--Port-->
<EditText
android:id="@+id/port"
style="@style/FormField.EditText"
android:layout_marginStart="0dp"
android:hint="@string/hint_port"
android:importantForAutofill="no"
android:inputType="number"
android:text='@={"" + viewModel.profile.port}'
app:layout_constraintBottom_toBottomOf="@id/host"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/host"
app:layout_constraintTop_toTopOf="@id/host"
app:layout_constraintWidth_percent=".2" />
<!--Repeater-->
<CheckBox
android:id="@+id/use_repeater"
style="@style/FormField.CheckBox"
android:checked="@={viewModel.useRepeater}"
android:text="@string/title_use_repeater"
app:layout_constraintEnd_toStartOf="@id/id_on_repeater"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/host" />
<EditText
android:id="@+id/id_on_repeater"
style="@style/FormField.EditText"
android:hint="@string/hint_server_id"
android:importantForAutofill="no"
android:inputType="number"
android:minWidth="100dp"
android:text="@={viewModel.idOnRepeater}"
app:isVisible="@{viewModel.useRepeater}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/use_repeater"
app:layout_constraintTop_toBottomOf="@id/host" />
<!--View-only mode-->
<CheckBox
android:id="@+id/view_only"
style="@style/FormField.CheckBox"
android:checked="@={viewModel.profile.viewOnly}"
android:text="@string/title_view_only_mode"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/use_repeater" />
<!--Key Compatibility mode-->
<CheckBox
android:id="@+id/key_compat_mode"
style="@style/FormField.CheckBox"
android:checked="@={viewModel.profile.fLegacyKeySym}"
android:text="@string/title_key_compat_mode"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_only" />
<ImageButton
android:id="@+id/key_compat_mode_help_btn"
style="@style/ImageButton"
android:contentDescription="@string/desc_help_btn"
android:src="@drawable/ic_help"
app:layout_constraintBottom_toBottomOf="@id/key_compat_mode"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/key_compat_mode"
app:tint="?colorControlNormal" />
<!--Button-up delay-->
<CheckBox
android:id="@+id/button_up_delay"
style="@style/FormField.CheckBox"
android:checked="@={viewModel.profile.fButtonUpDelay}"
android:text="@string/title_button_up_delay"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/key_compat_mode" />
<ImageButton
android:id="@+id/button_up_delay_help_btn"
style="@style/ImageButton"
android:contentDescription="@string/desc_help_btn"
android:src="@drawable/ic_help"
app:layout_constraintBottom_toBottomOf="@id/button_up_delay"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/button_up_delay"
app:tint="?colorControlNormal" />
<!--Resize remote desktop-->
<CheckBox
android:id="@+id/resize_remote_desktop"
style="@style/FormField.CheckBox"
android:checked="@={viewModel.profile.resizeRemoteDesktop}"
android:text="@string/title_resize_remote_desktop"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/button_up_delay" />
<!--Image Quality-->
<TextView
android:id="@+id/image_quality_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="48dp"
android:labelFor="@id/image_quality"
android:text="@string/title_image_quality"
app:layout_constraintBottom_toBottomOf="@id/image_quality"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/image_quality" />
<SeekBar
android:id="@+id/image_quality"
android:layout_width="0dp"
android:layout_height="@dimen/action_btn_size"
android:layout_marginVertical="@dimen/margin_small"
android:layout_marginStart="@dimen/margin_large"
android:enabled="@{!viewModel.useRawEncoding}"
android:max="9"
android:minHeight="@dimen/action_btn_size"
android:progress="@={viewModel.profile.imageQuality}"
app:layout_constraintEnd_toStartOf="@id/raw_encoding"
app:layout_constraintStart_toEndOf="@id/image_quality_label"
app:layout_constraintTop_toBottomOf="@id/resize_remote_desktop" />
<CheckBox
android:id="@+id/raw_encoding"
android:layout_width="wrap_content"
android:layout_height="@dimen/action_btn_size"
android:layout_marginEnd="@dimen/margin_small"
android:checked="@={viewModel.useRawEncoding}"
android:text="@string/title_image_quality_raw"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/image_quality"
app:layout_constraintTop_toTopOf="@id/image_quality" />
<!--Gesture style-->
<TextView
android:id="@+id/gesture_style_label"
style="@style/FormField.LabelWithIcon"
android:labelFor="@id/gesture_style"
android:text="@string/pref_gesture_style"
app:drawableStartCompat="@drawable/ic_gesture"
app:layout_constraintBottom_toBottomOf="@id/gesture_style"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/gesture_style" />
<com.gaurav.avnc.util.SpinnerEx
android:id="@+id/gesture_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:minHeight="@dimen/action_btn_size"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/image_quality"
app:layout_constraintTop_toBottomOf="@id/image_quality"
app:value="@={viewModel.profile.gestureStyle}"
app:valueDescriptions="@{ @stringArray/profile_editor_gesture_style_descriptions }"
app:valueLabels="@{ @stringArray/profile_editor_gesture_style_labels }"
app:values="@{ @stringArray/profile_editor_gesture_style_values }"
tools:entries="@array/dummy_array" />
<!--Screen orientation-->
<TextView
android:id="@+id/screen_orientation_label"
style="@style/FormField.LabelWithIcon"
android:labelFor="@id/screen_orientation"
android:text="@string/title_orientation"
app:drawableStartCompat="@drawable/ic_screen_rotation"
app:layout_constraintBottom_toBottomOf="@id/screen_orientation"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/screen_orientation" />
<com.gaurav.avnc.util.SpinnerEx
android:id="@+id/screen_orientation"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:minHeight="@dimen/action_btn_size"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/gesture_style"
app:layout_constraintTop_toBottomOf="@id/gesture_style"
app:value="@={viewModel.profile.screenOrientation}"
app:valueLabels="@{ @stringArray/orientation_entries }"
app:values="@{ @stringArray/orientation_values }"
tools:entries="@array/dummy_array" />
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!-- Security -->
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<TextView
android:id="@+id/security_label"
style="@style/FormField.LabelWithIcon"
android:text="@string/title_vnc_security"
app:drawableStartCompat="@drawable/ic_shield"
app:layout_constraintBottom_toBottomOf="@id/security"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/security" />
<com.gaurav.avnc.util.SpinnerEx
android:id="@+id/security"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:minHeight="@dimen/action_btn_size"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/screen_orientation"
app:layout_constraintTop_toBottomOf="@id/screen_orientation"
app:value="@={viewModel.profile.securityType}"
app:valueLabels="@{ @stringArray/profile_editor_security_labels }"
app:values="@{ @stringArray/profile_editor_security_values }"
tools:entries="@array/dummy_array" />
<!--Username-->
<EditText
android:id="@+id/username"
style="@style/FormField.EditText"
android:autofillHints="username"
android:drawableStart="@drawable/ic_person"
android:hint="@string/hint_username"
android:inputType="text"
android:text="@={viewModel.profile.username}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/security" />
<!--Password-->
<EditText
android:id="@+id/password"
style="@style/FormField.EditText"
android:autofillHints="password"
android:drawableStart="@drawable/ic_password"
android:hint="@string/hint_password"
android:inputType="textPassword"
android:text="@={viewModel.profile.password}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/username" />
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!-- SSH Tunnel -->
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<CheckBox
android:id="@+id/use_ssh_tunnel"
style="@style/FormField.CheckBox"
android:checked="@={viewModel.useSshTunnel}"
android:text="@string/title_use_ssh_tunnel"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/password" />
<!--SSH Options-->
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
app:isVisible="@{viewModel.useSshTunnel}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/use_ssh_tunnel">
<!--SSH Host-->
<EditText
android:id="@+id/ssh_host"
style="@style/FormField.EditText"
android:drawableStart="@drawable/ic_computer"
android:hint="@{@string/hint_ssh_host}"
android:importantForAutofill="no"
android:inputType="textUri"
android:text="@={viewModel.profile.sshHost}"
app:layout_constraintEnd_toStartOf="@id/ssh_port"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--Port-->
<EditText
android:id="@+id/ssh_port"
style="@style/FormField.EditText"
android:hint="@{@string/hint_ssh_port}"
android:importantForAutofill="no"
android:inputType="number"
android:text='@={"" + viewModel.profile.sshPort}'
app:layout_constraintBottom_toBottomOf="@id/ssh_host"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/ssh_host"
app:layout_constraintTop_toTopOf="@id/ssh_host"
app:layout_constraintWidth_percent=".2" />
<!--Username-->
<EditText
android:id="@+id/ssh_username"
style="@style/FormField.EditText"
android:autofillHints="username"
android:drawableStart="@drawable/ic_person"
android:hint="@string/hint_username"
android:inputType="text"
android:text="@={viewModel.profile.sshUsername}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ssh_host" />
<!--Auth Type-->
<RadioGroup
android:id="@+id/ssh_auth_type"
style="@style/FormField"
android:orientation="horizontal"
android:paddingTop="@dimen/padding_small"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ssh_username">
<RadioButton
android:id="@+id/ssh_auth_type_key"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="@={viewModel.sshUsePrivateKey}"
android:text="@string/title_private_key" />
<RadioButton
android:id="@+id/ssh_auth_type_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="@={viewModel.sshUsePassword}"
android:text="@string/title_password" />
</RadioGroup>
<!--Password-->
<EditText
android:id="@+id/ssh_password"
style="@style/FormField.EditText"
android:autofillHints="password"
android:drawableStart="@drawable/ic_password"
android:hint="@string/hint_password"
android:inputType="textPassword"
android:text="@={viewModel.profile.sshPassword}"
app:isVisible="@{viewModel.sshUsePassword}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ssh_auth_type" />
<!--Private Key Import-->
<Button
android:id="@+id/key_import_btn"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_normal"
android:text="@{viewModel.hasSshPrivateKey ? @string/title_change : @string/title_import}"
app:icon="@drawable/ic_file"
app:isVisible="@{viewModel.sshUsePrivateKey}"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ssh_auth_type" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</LinearLayout>
</layout>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2022 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/help_btn"
style="@style/ImageButton"
android:contentDescription="@string/desc_help_btn"
android:src="@drawable/ic_help"
app:tint="?colorControlNormal" />

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewModel"
type="com.gaurav.avnc.model.ServerProfile" />
</data>
<com.google.android.material.card.MaterialCardView
style="@style/ServerCard"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
layout="@layout/server_item"
app:profile="@{viewModel}" />
<ImageButton
android:id="@+id/save_btn"
style="@style/ImageButton"
android:layout_gravity="end|center_vertical"
android:contentDescription="@string/desc_save_discovered_server_btn"
android:src="@drawable/ic_plus" />
</com.google.android.material.card.MaterialCardView>
</layout>

View File

@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2021 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<!--
- This is common server view, used by both saved and discovered server items.
-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="com.gaurav.avnc.model.ServerProfile" />
<variable
name="profile"
type="com.gaurav.avnc.model.ServerProfile" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:text="@{profile.name}"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Example Server Name" />
<TextView
android:id="@+id/address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_small"
android:text='@{profile.host + (profile.port == 5900 ? "" : " | " + profile.port) }'
app:layout_constraintEnd_toStartOf="@id/ssh_address"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/name"
tools:text="192.168.1.1 | 5901" />
<TextView
android:id="@+id/ssh_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_small"
android:ellipsize="middle"
android:singleLine="true"
android:text='@{"(" + profile.sshHost + (profile.sshPort == 22 ? "" : " | " + profile.sshPort) + ")"}'
app:isVisible="@{profile.channelType == ServerProfile.CHANNEL_SSH_TUNNEL &amp;&amp; !profile.host.equals(profile.sshHost)}"
app:layout_constrainedWidth="true"
app:layout_constraintEnd_toStartOf="@id/hint_icons"
app:layout_constraintStart_toEndOf="@id/address"
app:layout_constraintTop_toTopOf="@id/address"
tools:text="(10.0.5.5 | 23)" />
<LinearLayout
android:id="@+id/hint_icons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@id/address"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/ssh_address"
app:layout_constraintTop_toTopOf="@id/address">
<ImageView
style="@style/ServerCardHintIcon"
android:importantForAccessibility="no"
android:src="@drawable/ic_ssh"
app:isVisible="@{profile.channelType == ServerProfile.CHANNEL_SSH_TUNNEL}" />
<ImageView
style="@style/ServerCardHintIcon"
android:importantForAccessibility="no"
android:src="@drawable/ic_key"
app:isVisible="@{profile.password.length() != 0}" />
<ImageView
style="@style/ServerCardHintIcon"
android:importantForAccessibility="no"
android:src="@drawable/ic_visibility"
app:isVisible="@{profile.viewOnly}" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -0,0 +1,139 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2024 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.gaurav.avnc.viewmodel.VncViewModel" />
</data>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start">
<LinearLayout
android:id="@+id/primary_buttons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:animateLayoutChanges="true"
tools:ignore="UselessParent"> <!--Its not useless-->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_round_rect"
android:orientation="vertical">
<ImageButton
android:id="@+id/keyboard_btn"
style="@style/ImageButton"
android:contentDescription="@string/desc_keyboard_btn"
android:src="@drawable/ic_keyboard" />
<ImageButton
android:id="@+id/virtual_keys_btn"
style="@style/ImageButton"
android:contentDescription="@string/desc_virtual_keys_btn"
android:src="@drawable/ic_keyboard_mini" />
<ToggleButton
android:id="@+id/gesture_style_toggle"
style="@style/ImageButton.Toggle"
android:contentDescription="@string/pref_gesture_style"
android:drawableStart="@drawable/ic_gesture"
android:drawableEnd="@drawable/ic_toggle_more"
android:onCheckedChanged="@{(v,checked) -> checked ? zoomOptions.setChecked(false) : void}"
android:paddingStart="12dp"
android:paddingEnd="0dp"
app:isVisible="@{viewModel.pref.viewer.toolbarShowGestureStyleToggle}"
tools:ignore="UnusedAttribute" />
<ToggleButton
android:id="@+id/zoom_options"
style="@style/ImageButton.Toggle"
android:contentDescription="@string/desc_zoom_options_btn"
android:drawableStart="@drawable/ic_zoom_options"
android:drawableEnd="@drawable/ic_toggle_more"
android:onCheckedChanged="@{(v,checked) -> checked ? gestureStyleToggle.setChecked(false) : void}"
android:paddingStart="12dp"
android:paddingEnd="0dp"
tools:ignore="UnusedAttribute" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginHorizontal="@dimen/margin_small"
android:background="@drawable/bg_round_rect"
app:isVisible="@{zoomOptions.checked}">
<ImageButton
android:id="@+id/zoom_reset_btn"
style="@style/ImageButton"
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"
android:alpha="@{viewModel.profile.ID != 0 ? 1f : .25f}"
android:contentDescription="@string/desc_save_zoom_btn"
android:enabled="@{viewModel.profile.ID != 0}"
android:src="@drawable/ic_save" />
</LinearLayout>
<RadioGroup
android:id="@+id/gesture_style_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginHorizontal="@dimen/margin_small"
android:background="@drawable/bg_round_rect"
android:paddingStart="@dimen/padding_small"
android:paddingEnd="@dimen/padding_normal"
app:isVisible="@{gestureStyleToggle.checked}">
<RadioButton
android:id="@+id/gesture_style_auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pref_gesture_style_auto" />
<RadioButton
android:id="@+id/gesture_style_touchscreen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pref_gesture_style_touchscreen" />
<RadioButton
android:id="@+id/gesture_style_touchpad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pref_gesture_style_touchpad" />
</RadioGroup>
</LinearLayout>
</FrameLayout>
</layout>

View File

@@ -0,0 +1,258 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2021 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.KeyEvent" />
<!--It controls whether all keys are visible OR only some of them-->
<variable
name="showAll"
type="boolean" />
<variable
name="h"
type="com.gaurav.avnc.ui.vnc.KeyHandler" />
</data>
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?colorSurface"
android:backgroundTint="#cfff"
android:backgroundTintMode="multiply">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="Virtual Keys"
android:gravity="center_vertical"
android:orientation="horizontal"
tools:ignore="HardcodedText">
<ImageButton
android:id="@+id/hide_btn"
style="@style/VirtualKey.Image"
android:contentDescription="Hide Virtual Keys"
android:minWidth="30dp"
android:src="@drawable/ic_clear"
app:tint="?colorError" />
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~ Meta keys ~~~~~~~~~~~~~~~~~~~~~-->
<ToggleButton
android:id="@+id/super_btn"
style="@style/VirtualKey.Toggle.Image"
android:contentDescription="Super key"
android:drawableStart="@drawable/ic_super_key"
app:onCheckedChangeListener="@{(v,checked) -> h.onKeyEvent(KeyEvent.KEYCODE_META_LEFT, checked)}" />
<ToggleButton
android:id="@+id/shift_btn"
style="@style/VirtualKey.Toggle"
android:textOff="Shift"
android:textOn="Shift"
app:isVisible="@{showAll}"
app:onCheckedChangeListener="@{(v,checked) -> h.onKeyEvent(KeyEvent.KEYCODE_SHIFT_RIGHT, checked)}" />
<ToggleButton
android:id="@+id/ctrl_btn"
style="@style/VirtualKey.Toggle"
android:textOff="Ctrl"
android:textOn="Ctrl"
app:onCheckedChangeListener="@{(v,checked) -> h.onKeyEvent(KeyEvent.KEYCODE_CTRL_RIGHT, checked)}" />
<ToggleButton
android:id="@+id/alt_btn"
style="@style/VirtualKey.Toggle"
android:textOff="Alt"
android:textOn="Alt"
app:onCheckedChangeListener="@{(v,checked) -> h.onKeyEvent(KeyEvent.KEYCODE_ALT_RIGHT, checked)}" />
<!--AppCompatButton is used instead of Button to disable Material styles-->
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_TAB)}"
android:text="Tab"
app:isRepeatable="@{true}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_ESCAPE)}"
android:text="Esc"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~ Arrow keys ~~~~~~~~~~~~~~~~~~~~~~~-->
<ImageButton
style="@style/VirtualKey.Image"
android:contentDescription="Left"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_DPAD_LEFT)}"
android:src="@drawable/ic_keyboard_arrow_left"
app:isRepeatable="@{true}" />
<ImageButton
style="@style/VirtualKey.Image"
android:contentDescription="Up"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_DPAD_UP)}"
android:src="@drawable/ic_keyboard_arrow_up"
app:isRepeatable="@{true}" />
<ImageButton
style="@style/VirtualKey.Image"
android:contentDescription="Down"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_DPAD_DOWN)}"
android:src="@drawable/ic_keyboard_arrow_down"
app:isRepeatable="@{true}" />
<ImageButton
style="@style/VirtualKey.Image"
android:contentDescription="Right"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_DPAD_RIGHT)}"
android:src="@drawable/ic_keyboard_arrow_right"
app:isRepeatable="@{true}" />
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~ Miscellaneous ~~~~~~~~~~~~~~~~~~~~~~~-->
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_MOVE_HOME)}"
android:text="Home"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_MOVE_END)}"
android:text="End"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_PAGE_UP)}"
android:text="PgUp"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_PAGE_DOWN)}"
android:text="PgDn"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_INSERT)}"
android:text="Insert"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_FORWARD_DEL)}"
android:text="Delete"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~ Function Keys ~~~~~~~~~~~~~~~~~~~~~~~-->
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey.Compact"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_F1)}"
android:text="F1"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey.Compact"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_F2)}"
android:text="F2"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey.Compact"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_F3)}"
android:text="F3"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey.Compact"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_F4)}"
android:text="F4"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey.Compact"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_F5)}"
android:text="F5"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey.Compact"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_F6)}"
android:text="F6"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey.Compact"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_F7)}"
android:text="F7"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey.Compact"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_F8)}"
android:text="F8"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey.Compact"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_F9)}"
android:text="F9"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey.Compact"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_F10)}"
android:text="F10"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey.Compact"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_F11)}"
android:text="F11"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
<androidx.appcompat.widget.AppCompatButton
style="@style/VirtualKey.Compact"
android:onClick="@{() -> h.onKey(KeyEvent.KEYCODE_F12)}"
android:text="F12"
app:isRepeatable="@{true}"
app:isVisible="@{showAll}" />
</LinearLayout>
</HorizontalScrollView>
</layout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -0,0 +1,198 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title_add_server_profile">添加服务器</string>
<string name="title_hide_remote_cursor">隐藏远程指针</string>
<string name="title_vnc_login">VNC登录</string>
<string name="title_edit_server_profile">编辑服务器</string>
<string name="title_duplicate">生成副本</string>
<string name="title_edit">编辑</string>
<string name="title_delete">删除</string>
<string name="title_copy_host">复制主机</string>
<string name="title_copy_name">复制名称</string>
<string name="title_cancel">取消</string>
<string name="title_save">保存</string>
<string name="title_undo">撤消</string>
<string name="title_remember">记住</string>
<string name="title_import">导入</string>
<string name="title_view_only_mode">仅查看</string>
<string name="title_use_ssh_tunnel">使用 SSH 隧道</string>
<string name="title_ssh_host_key_changed">SSH 主机密钥已更改</string>
<string name="title_password">密码</string>
<string name="title_private_key">私钥</string>
<string name="title_about">关于</string>
<string name="title_license">许可证</string>
<string name="hint_urlbar">连接到服务器</string>
<string name="hint_server_name">名称(例如:工作电脑)</string>
<string name="hint_host">主机</string>
<string name="hint_repeater_host">中继器主机</string>
<string name="hint_port">端口</string>
<string name="hint_server_id">服务器 ID</string>
<string name="hint_username">用户名</string>
<string name="hint_password">密码</string>
<string name="hint_key_password">密钥密码</string>
<string name="msg_server_profile_added">服务器已添加</string>
<string name="msg_server_profile_deleted">服务器已删除</string>
<string name="msg_ptr_hiding_not_supported">此设备不支持</string>
<string name="msg_imported">已导入</string>
<string name="msg_exported">已导出</string>
<string name="msg_export_auth_required">身份验证以导出服务器</string>
<string name="msg_invalid_key_file">私钥文件无效</string>
<string name="msg_invalid_vnc_uri">无效的 VNC URI</string>
<string name="msg_copied_to_clipboard">已复制</string>
<string name="tip_urlbar">你可以输入 IP 地址、主机名或“vnc://”URI。</string>
<string name="desc_navigation_btn">打开导航抽屉</string>
<string name="desc_settings_btn">设置</string>
<string name="desc_saved_servers_tab">已保存的服务器</string>
<string name="desc_discovered_servers_tab">已发现的服务器</string>
<string name="desc_add_new_server_btn">添加服务器</string>
<string name="desc_save_discovered_server_btn">保存</string>
<string name="desc_discovery_btn">发现服务器</string>
<string name="desc_discovery_stop_btn">停止发现服务器</string>
<string name="desc_discovery_running">发现网络上的服务器</string>
<string name="desc_keyboard_btn">打开键盘</string>
<string name="desc_virtual_keys_btn">显示虚拟按键</string>
<string name="desc_reset_zoom_btn">重置缩放</string>
<string name="desc_retry_connection_btn">重新连接</string>
<string name="desc_back_btn">返回</string>
<string name="desc_clear_url_btn">清除</string>
<string name="desc_server_url">服务器地址</string>
<string name="desc_help_btn">帮助</string>
<string name="tip_discovery">“发现”能自动查找在你的网络上运行的
\n受支持服务器。</string>
<string name="pref_ui">界面</string>
<string name="pref_ui_summary">界面外观</string>
<string name="pref_viewer">视图</string>
<string name="pref_servers">服务器</string>
<string name="pref_server_summary">登录、发现</string>
<string name="pref_tools_summary">导入/导出、调试</string>
<string name="pref_experimental">试验性</string>
<string name="title_none"></string>
<string name="pref_gesture_action_left_click">左键单击</string>
<string name="pref_gesture_action_middle_click">中键单击</string>
<string name="pref_gesture_action_right_click">右键单击</string>
<string name="pref_gesture_action_double_click">双击</string>
<string name="pref_gesture_action_move_pointer">移动指针</string>
<string name="pref_gesture_action_remote_scroll">滚动远程内容</string>
<string name="pref_gesture_action_remote_drag">拖动远程内容</string>
<string name="pref_theme">主题</string>
<string name="pref_theme_option_system">系统</string>
<string name="pref_theme_option_dark">暗色</string>
<string name="pref_theme_option_light">亮色</string>
<string name="pref_gesture">手势</string>
<string name="pref_gesture_style_touchscreen_summary">在接触点执行操作</string>
<string name="pref_gesture_style_touchpad_summary">在指针处执行操作</string>
<string name="pref_two_finger_tap">双指敲击</string>
<string name="pref_double_tap">双次敲击</string>
<string name="pref_long_press">长按</string>
<string name="pref_swipe1">单指轻扫</string>
<string name="pref_swipe2">双指轻扫</string>
<string name="pref_mouse">鼠标</string>
<string name="pref_mouse_passthrough">鼠标直通</string>
<string name="pref_mouse_passthrough_summary_on">将鼠标事件直接发送到服务器</string>
<string name="pref_hide_local_cursor">隐藏本地指针</string>
<string name="pref_mouse_back">返回按钮</string>
<string name="pref_mouse_back_action_default">默认</string>
<string name="pref_vk">虚拟按键</string>
<string name="pref_vk_show_all">显示所有按键</string>
<string name="pref_km">按键映射</string>
<string name="pref_km_back_to_escape_summary">不影响导航栏</string>
<string name="pref_fullscreen">全屏</string>
<string name="pref_enable_pip">画中画</string>
<string name="pref_toolbar_alignment">对齐</string>
<string name="pref_toolbar_alignment_option_start">开始</string>
<string name="pref_toolbar_alignment_option_end">结尾</string>
<string name="pref_zoom">缩放</string>
<string name="pref_zoom_min">最小</string>
<string name="pref_clipboard_sync">剪贴板同步</string>
<string name="pref_discovery">发现</string>
<string name="pref_discovery_autorun">自动运行</string>
<string name="pref_rediscovery_indicator">高亮显示被重新发现的服务器</string>
<string name="pref_import_export">导入/导出 服务器</string>
<string name="title_clear">清除</string>
<string name="title_use_repeater">使用中继器</string>
<string name="pref_debugging">调试</string>
<string name="pref_logs">日志</string>
<string name="pref_keycode_map">键码映射</string>
<string name="title_advanced">高级</string>
<string name="title_settings">设置</string>
<string name="title_export">导出</string>
<string name="title_key_compat_mode">发送旧式按键事件</string>
<string name="title_unknown_ssh_host">未知 SSH 主机</string>
<string name="title_source_code">源代码</string>
<string name="msg_loading">正在加载…</string>
<string name="title_continue">继续</string>
<string name="title_delete_servers_before_import">导入前删除当前服务器</string>
<string name="title_change">更改</string>
<string name="title_open_source_libraries">开源库</string>
<string name="title_report_bug">报告问题</string>
<string name="msg_about_app">一个快速且安全的 VNC 客户端。远程查看和控制任何运行着 VNC 服务器的设备。
\n
\n
\nAVNC 是一个开源和非盈利版权软件 — 在众多贡献者的帮助下制作的。</string>
<string name="msg_pip_not_supported">此设备不支持</string>
<string name="msg_key_compat_mode_help">一些服务器对 Unicode 的支持有限。旧式按键事件可以帮助输入非英语文本。</string>
<string name="tip_empty_server_list">服务器列表为空。
\n单击“<b>+</b>”添加服务器,或
\n使用顶部的地址栏直接连接。</string>
<string name="desc_discovered_list">已被自动发现的服务器列表</string>
<string name="desc_saved_servers_list">已保存的服务器列表</string>
<string name="pref_viewer_summary">画中画,缩放</string>
<string name="pref_input">输入</string>
<string name="pref_input_summary">手势、鼠标、虚拟键</string>
<string name="pref_tools">工具</string>
<string name="pref_experimental_summary">额外的好东西</string>
<string name="pref_prefer_advanced_editor">直接打开高级服务器选项</string>
<string name="pref_gesture_action_pan">平移本地帧</string>
<string name="pref_gesture_action_open_keyboard">打开键盘</string>
<string name="pref_sort_server_list">对已保存的服务器按名称排序</string>
<string name="pref_single_tap">单次敲击</string>
<string name="pref_vk_open_with_keyboard">同时打开键盘</string>
<string name="pref_mouse_passthrough_summary_off">将鼠标事件用于本地手势</string>
<string name="pref_toolbar">工具栏</string>
<string name="pref_zoom_max">最大</string>
<string name="pref_discovery_autorun_summary">在主页上时发现服务器</string>
<string name="pref_swipe_sensitivity">调节灵敏度</string>
<string name="pref_km_language_switch_to_super">语言切换 → Super (开始菜单)键</string>
<string name="pref_km_back_to_escape">退格键 → Esc 键</string>
<string name="pref_km_right_alt_to_super">右 Alt 键 → Super (开始菜单)键</string>
<string name="msg_drag_gesture_help">分配一个动作给这个手势将改变长按检测:
\n
\n<b>按住释放</b> → 长按
\n<b>按住滑动</b> → 长按轻扫</string>
<string name="pref_orientation">屏幕方向</string>
<string name="pref_orientation_option_auto">自动</string>
<string name="pref_orientation_option_portrait">竖屏</string>
<string name="pref_orientation_option_landscape">横屏</string>
<string name="pref_invert_vertical_scrolling">垂直滚动反转</string>
<string name="pref_touch_test">触控测试</string>
<string name="pref_key_test">密钥测试</string>
<string name="title_image_quality">图像质量</string>
<string name="title_image_quality_raw">原始</string>
<string name="title_vnc_security">安全性</string>
<string name="title_unlock_dialog">解锁以继续</string>
<string name="title_automatic">自动</string>
<string name="msg_zoom_saved">保存当前缩放比为默认</string>
<string name="desc_save_zoom_btn">保存当前缩放比为默认</string>
<string name="pref_gesture_style">手势样式</string>
<string name="pref_gesture_style_touchscreen">触摸屏</string>
<string name="pref_gesture_style_touchpad">触摸板</string>
<string name="pref_saved_server_lock">锁定保存的服务器</string>
<string name="msg_zoom_reset">重置缩放到 100%</string>
<string name="desc_zoom_options_btn">缩放选项</string>
<string name="pref_gesture_style_auto_summary">基于应用设置</string>
<string name="pref_per_orientation_zoom">为每个方向分开缩放</string>
<string name="pref_saved_server_lock_summary">要求生物特征/密码解锁才能连接</string>
<string name="title_resize_remote_desktop">缩放远程会话到本地窗口</string>
<string name="msg_zoom_reset_default">重置缩放到默认值</string>
<string name="msg_shortcut_server_deleted">该服务器已被删除</string>
<string name="pref_display_cutout">在异形屏区域显示(试验性)</string>
<string name="title_ssh_login">SSH登录</string>
<string name="title_unlock_private_key">解锁私钥</string>
<string name="pref_double_tap_swipe">双击轻扫</string>
<string name="pref_gesture_action_remote_drag_middle">中键拖动</string>
<string name="title_orientation">方向</string>
<string name="title_button_up_delay">发送延迟点击事件</string>
<string name="msg_button_up_delay_help">在某些罕见的情况下,如果应用程序无法响应点击,延迟点击事件会有所帮助。</string>
<string name="pref_long_press_swipe">长按轻扫</string>
<string name="pref_auto_reconnect">自动重连</string>
</resources>

View File

@@ -0,0 +1,194 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title_add_server_profile">添加伺服器</string>
<string name="title_edit_server_profile">編輯伺服器</string>
<string name="title_duplicate">複製</string>
<string name="title_edit">編輯</string>
<string name="title_delete">刪除</string>
<string name="title_clear">清除</string>
<string name="title_copy_host">複製主機</string>
<string name="title_copy_name">複製名稱</string>
<string name="title_cancel">取消</string>
<string name="title_save">儲存</string>
<string name="title_undo">復原</string>
<string name="title_settings">設定</string>
<string name="title_vnc_login">登入</string>
<string name="title_remember">記住</string>
<string name="title_export">匯出</string>
<string name="title_view_only_mode">唯讀</string>
<string name="title_hide_remote_cursor">隱藏遠端鼠標</string>
<string name="title_button_up_delay">傳送已延遲的點擊</string>
<string name="title_image_quality">畫面質量</string>
<string name="title_key_compat_mode">傳送舊鍵碼</string>
<string name="title_orientation">轉向</string>
<string name="title_vnc_security">安全性</string>
<string name="title_use_ssh_tunnel">使用 SSH 隧道</string>
<string name="title_delete_servers_before_import">在匯入前刪除當前伺服器</string>
<string name="title_password">密碼</string>
<string name="title_use_repeater">使用中繼器</string>
<string name="title_private_key">私鑰</string>
<string name="title_about">關於</string>
<string name="title_change">修改</string>
<string name="title_license">許可證</string>
<string name="title_open_source_libraries">開源庫</string>
<string name="title_report_bug">報告錯誤</string>
<string name="title_source_code">原始碼</string>
<string name="title_none"></string>
<string name="hint_urlbar">連接到伺服器</string>
<string name="hint_server_name">伺服器名稱例如Work PC</string>
<string name="hint_host">主機</string>
<string name="title_advanced">進階</string>
<string name="title_import">匯入</string>
<string name="title_unknown_ssh_host">未知 SSH 主機</string>
<string name="title_ssh_host_key_changed">SSH 主機密鑰已更改</string>
<string name="title_continue">繼續</string>
<string name="title_unlock_dialog">解鎖以繼續</string>
<string name="title_automatic">自動</string>
<string name="hint_repeater_host">中繼主機</string>
<string name="title_image_quality_raw">原始</string>
<string name="hint_port">端口</string>
<string name="hint_server_id">伺服器 ID</string>
<string name="hint_username">使用者名稱</string>
<string name="hint_password">密碼</string>
<string name="hint_key_password">密鑰密碼</string>
<string name="msg_zoom_reset">重置縮放</string>
<string name="msg_zoom_saved">將當前縮放設為預設</string>
<string name="msg_pip_not_supported">不支援此裝置</string>
<string name="msg_ptr_hiding_not_supported">不支援此裝置</string>
<string name="msg_server_profile_added">伺服器已添加</string>
<string name="msg_server_profile_deleted">伺服器已刪除</string>
<string name="msg_imported">已匯入</string>
<string name="msg_exported">已匯出</string>
<string name="msg_export_auth_required">請驗證以匯出伺服器</string>
<string name="msg_copied_to_clipboard">已複製</string>
<string name="msg_invalid_vnc_uri">無效的 VNC URI</string>
<string name="msg_key_compat_mode_help">一些伺服器對 Unicode 的支援有限。傳送舊鍵碼可以幫助輸入非英文字符。</string>
<string name="msg_button_up_delay_help">如果應用程式沒有回應點擊,延遲點擊可能會解決這個問題 。</string>
<string name="msg_drag_gesture_help">分配到此手勢將改變長按檢測方式:
\n
\n<b>按住釋放</b> → 長按
\n<b>按住滑動</b> → 長按後滑動</string>
<string name="tip_empty_server_list">伺服器清單為空。
\n按 「<b>+</b>」添加伺服器,或
\n使用頂部網址欄直接連接至伺服器。</string>
<string name="tip_urlbar">您可以輸入 IP 地址、主機名或 「vnc://」URI。</string>
<string name="tip_discovery">「搜尋」可以自動找到在您網絡上
\n支援的伺服器。</string>
<string name="desc_navigation_btn">打開導覽列</string>
<string name="desc_add_new_server_btn">添加伺服器</string>
<string name="desc_save_discovered_server_btn">儲存</string>
<string name="desc_discovery_btn">搜尋伺服器</string>
<string name="desc_discovery_stop_btn">停止搜尋伺服器</string>
<string name="desc_discovery_running">正在發現您網絡上的伺服器</string>
<string name="desc_virtual_keys_btn">顯示虛擬鍵</string>
<string name="desc_zoom_options_btn">縮放選項</string>
<string name="desc_save_zoom_btn">將當前縮放設為預設</string>
<string name="desc_back_btn">返回</string>
<string name="desc_discovered_list">自動發現的伺服器</string>
<string name="desc_saved_servers_list">已儲存的伺服器</string>
<string name="pref_ui">界面</string>
<string name="pref_input">輸入</string>
<string name="pref_viewer_summary">畫中畫、縮放</string>
<string name="pref_input_summary">手勢、鼠標、虛擬鍵</string>
<string name="pref_servers">伺服器</string>
<string name="pref_server_summary">登入、搜尋</string>
<string name="pref_tools">工具</string>
<string name="pref_tools_summary">匯入/匯出、除錯</string>
<string name="pref_experimental">實驗性</string>
<string name="pref_gesture_action_middle_click">中鍵</string>
<string name="pref_gesture_action_left_click">左鍵</string>
<string name="pref_gesture_action_right_click">右鍵</string>
<string name="pref_gesture_action_double_click">雙擊</string>
<string name="pref_gesture_action_move_pointer">移動鼠標</string>
<string name="msg_invalid_key_file">無效的私鑰</string>
<string name="msg_loading">載入中…</string>
<string name="desc_reset_zoom_btn">重設縮放</string>
<string name="desc_saved_servers_tab">已儲存的伺服器</string>
<string name="desc_settings_btn">設定</string>
<string name="desc_discovered_servers_tab">被發現的伺服器</string>
<string name="desc_keyboard_btn">打開鍵盤</string>
<string name="msg_about_app">快速安全的 VNC 客戶端,遠程查看和控制任何 VNC 服務器。
\n
\n
\nAVNC 是一個開源和自由軟件:在許多貢獻者的幫助下製作。</string>
<string name="desc_retry_connection_btn">重新連接</string>
<string name="desc_server_url">伺服器地址</string>
<string name="desc_help_btn">幫助</string>
<string name="desc_clear_url_btn">清除</string>
<string name="pref_gesture_action_pan">移動檢視框架</string>
<string name="pref_gesture_action_remote_scroll">滾動遠端內容</string>
<string name="pref_gesture_action_remote_drag">拖拽遠端內容</string>
<string name="pref_gesture_action_open_keyboard">打開鍵盤</string>
<string name="pref_theme">主題</string>
<string name="pref_ui_summary">外觀和感覺</string>
<string name="pref_theme_option_light">淺色</string>
<string name="pref_prefer_advanced_editor">直接打開進階伺服器選項</string>
<string name="pref_sort_server_list">用名稱分類伺服器</string>
<string name="pref_gesture">手勢</string>
<string name="pref_gesture_style_touchpad">觸控板</string>
<string name="pref_gesture_style_touchscreen">觸控螢幕</string>
<string name="pref_single_tap">單擊</string>
<string name="pref_double_tap">雙擊</string>
<string name="pref_long_press">長按</string>
<string name="pref_swipe_sensitivity">滑動靈敏度</string>
<string name="pref_mouse">滑鼠</string>
<string name="pref_hide_local_cursor">隱藏本機鼠標</string>
<string name="pref_mouse_back">返回鍵</string>
<string name="pref_mouse_back_action_default">預設</string>
<string name="pref_orientation_option_auto">自動</string>
<string name="pref_orientation_option_portrait">縱向</string>
<string name="pref_orientation_option_landscape">橫向</string>
<string name="pref_fullscreen">全螢幕</string>
<string name="pref_enable_pip">畫中畫</string>
<string name="pref_toolbar">工具列</string>
<string name="pref_theme_option_system">系統</string>
<string name="pref_theme_option_dark">深色</string>
<string name="pref_gesture_style">手勢樣式</string>
<string name="pref_invert_vertical_scrolling">反轉垂直滾動</string>
<string name="pref_mouse_passthrough">直接鼠標</string>
<string name="pref_vk">虛擬鍵</string>
<string name="pref_toolbar_alignment_option_start">左邊</string>
<string name="pref_experimental_summary">額外的好東西</string>
<string name="pref_viewer">檢視器</string>
<string name="pref_gesture_style_auto_summary">基於應用程式的設置</string>
<string name="pref_double_tap_swipe">雙擊滑動</string>
<string name="pref_swipe2">兩指滑動</string>
<string name="pref_swipe1">滑動</string>
<string name="pref_two_finger_tap">雙擊</string>
<string name="pref_gesture_style_touchscreen_summary">於觸控處執行動作</string>
<string name="pref_gesture_style_touchpad_summary">於鼠標處執行動作</string>
<string name="pref_long_press_swipe">長按滑動</string>
<string name="pref_vk_show_all">顯示所有鍵</string>
<string name="pref_vk_open_with_keyboard">進入時打開鍵盤</string>
<string name="pref_km_language_switch_to_super">語言切換 → Super</string>
<string name="pref_km_back_to_escape">返回 → Esc</string>
<string name="pref_km">鍵盤佈局</string>
<string name="pref_mouse_passthrough_summary_on">直接發送鼠標事件到伺服器</string>
<string name="pref_mouse_passthrough_summary_off">用鼠標事件執行本機手勢</string>
<string name="pref_km_back_to_escape_summary">不會影響導覽列</string>
<string name="pref_orientation">螢幕轉向</string>
<string name="pref_display_cutout">擴展檢視器至相機開口</string>
<string name="pref_zoom">縮放</string>
<string name="pref_zoom_min">最小</string>
<string name="pref_zoom_max">最多</string>
<string name="pref_clipboard_sync">剪貼板同步</string>
<string name="pref_auto_reconnect">自動重新連接</string>
<string name="pref_toolbar_alignment">位置</string>
<string name="pref_toolbar_alignment_option_end">右邊</string>
<string name="pref_discovery_autorun">自動執行</string>
<string name="pref_per_orientation_zoom">每個方向獨立縮放</string>
<string name="pref_saved_server_lock_summary">連接前要求生物識別/密碼</string>
<string name="pref_discovery">搜尋</string>
<string name="pref_saved_server_lock">鎖定已儲存的伺服器</string>
<string name="pref_debugging">除錯</string>
<string name="pref_logs">日誌</string>
<string name="pref_touch_test">觸控測試</string>
<string name="pref_import_export">匯入/匯出伺服器</string>
<string name="pref_keycode_map">鍵碼佈局</string>
<string name="pref_key_test">按鍵測試</string>
<string name="pref_discovery_autorun_summary">在首頁時搜尋伺服器</string>
<string name="pref_rediscovery_indicator">強調重新發現的伺服器</string>
<string name="pref_km_right_alt_to_super">右 Alt → Super</string>
<string name="msg_shortcut_server_deleted">此伺服器已被刪除</string>
<string name="title_ssh_login">SSH 登入</string>
</resources>

View File

@@ -0,0 +1,195 @@
<!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<resources>
<string-array name="theme_entries">
<item>@string/pref_theme_option_system</item>
<item>@string/pref_theme_option_dark</item>
<item>@string/pref_theme_option_light</item>
</string-array>
<string-array name="theme_values">
<item>system</item>
<item>dark</item>
<item>light</item>
</string-array>
<string-array name="orientation_entries">
<item>@string/pref_orientation_option_auto</item>
<item>@string/pref_orientation_option_portrait</item>
<item>@string/pref_orientation_option_landscape</item>
</string-array>
<string-array name="orientation_values">
<item>auto</item>
<item>portrait</item>
<item>landscape</item>
</string-array>
<string-array name="toolbar_alignment_entries">
<item>@string/pref_toolbar_alignment_option_start</item>
<item>@string/pref_toolbar_alignment_option_end</item>
</string-array>
<string-array name="toolbar_alignment_values">
<item>start</item>
<item>end</item>
</string-array>
<string-array name="gesture_style_entries">
<item>@string/pref_gesture_style_touchscreen</item>
<item>@string/pref_gesture_style_touchpad</item>
</string-array>
<string-array name="gesture_style_values">
<item>touchscreen</item>
<item>touchpad</item>
</string-array>
<string-array name="tap2_action_entries">
<item>@string/pref_gesture_action_none</item>
<item>@string/pref_gesture_action_right_click</item>
<item>@string/pref_gesture_action_open_keyboard</item>
</string-array>
<string-array name="tap2_action_values">
<item>none</item>
<item>right-click</item>
<item>open-keyboard</item>
</string-array>
<string-array name="double_tap_action_entries">
<item>@string/pref_gesture_action_none</item>
<item>@string/pref_gesture_action_double_click</item>
<item>@string/pref_gesture_action_middle_click</item>
<item>@string/pref_gesture_action_right_click</item>
</string-array>
<string-array name="double_tap_action_values">
<item>none</item>
<item>double-click</item>
<item>middle-click</item>
<item>right-click</item>
</string-array>
<string-array name="long_press_action_entries">
<item>@string/pref_gesture_action_none</item>
<item>@string/pref_gesture_action_double_click</item>
<item>@string/pref_gesture_action_middle_click</item>
<item>@string/pref_gesture_action_right_click</item>
</string-array>
<string-array name="long_press_action_values">
<item>none</item>
<item>double-click</item>
<item>middle-click</item>
<item>right-click</item>
</string-array>
<string-array name="swipe1_action_entries">
<item>@string/pref_gesture_action_none</item>
<item>@string/pref_gesture_action_pan</item>
<item>@string/pref_gesture_action_remote_scroll</item>
<item>@string/pref_gesture_action_remote_drag</item>
</string-array>
<string-array name="swipe1_action_values">
<item>none</item>
<item>pan</item>
<item>remote-scroll</item>
<item>remote-drag</item>
</string-array>
<string-array name="swipe2_action_entries">
<item>@string/pref_gesture_action_none</item>
<item>@string/pref_gesture_action_pan</item>
<item>@string/pref_gesture_action_remote_scroll</item>
</string-array>
<string-array name="swipe2_action_values">
<item>none</item>
<item>pan</item>
<item>remote-scroll</item>
</string-array>
<string-array name="double_tap_swipe_action_entries">
<item>@string/pref_gesture_action_none</item>
<item>@string/pref_gesture_action_remote_drag</item>
<item>@string/pref_gesture_action_remote_drag_middle</item>
<item>@string/pref_gesture_action_pan</item>
<item>@string/pref_gesture_action_remote_scroll</item>
</string-array>
<string-array name="double_tap_swipe_action_values">
<item>none</item>
<item>remote-drag</item>
<item>remote-drag-middle</item>
<item>pan</item>
<item>remote-scroll</item>
</string-array>
<string-array name="long_press_swipe_action_entries">
<item>@string/pref_gesture_action_none</item>
<item>@string/pref_gesture_action_remote_drag</item>
<item>@string/pref_gesture_action_remote_drag_middle</item>
<item>@string/pref_gesture_action_pan</item>
<item>@string/pref_gesture_action_remote_scroll</item>
</string-array>
<string-array name="long_press_swipe_action_values">
<item>none</item>
<item>remote-drag</item>
<item>remote-drag-middle</item>
<item>pan</item>
<item>remote-scroll</item>
</string-array>
<string-array name="mouse_back_action_entries">
<item>@string/pref_mouse_back_action_default</item>
<item>@string/pref_gesture_action_middle_click</item>
<item>@string/pref_gesture_action_right_click</item>
</string-array>
<string-array name="mouse_back_action_values">
<item>default</item>
<item>middle-click</item>
<item>right-click</item>
</string-array>
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~ Arrays for profile editor ~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
<!--Values for gesture style-->
<string-array name="profile_editor_gesture_style_labels">
<item>@string/pref_gesture_style_auto</item>
<item>@string/pref_gesture_style_touchscreen</item>
<item>@string/pref_gesture_style_touchpad</item>
</string-array>
<string-array name="profile_editor_gesture_style_descriptions">
<item>@string/pref_gesture_style_auto_summary</item>
<item>@string/pref_gesture_style_touchscreen_summary</item>
<item>@string/pref_gesture_style_touchpad_summary</item>
</string-array>
<string-array name="profile_editor_gesture_style_values">
<item>auto</item>
<item>touchscreen</item>
<item>touchpad</item>
</string-array>
<!--Values for security types-->
<string-array name="profile_editor_security_labels">
<item>@string/title_automatic</item>
<item>@string/title_none</item>
<item>VncAuth</item>
<item>AnonTLS</item>
<item>VeNCrypt</item>
</string-array>
<string-array name="profile_editor_security_values">
<item>0</item>
<item>1</item>
<item>2</item>
<item>18</item>
<item>19</item>
</string-array>
<!--Dummy string array used for testing-->
<string-array name="dummy_array">
<item>Item 1</item>
<item>Item 2</item>
<item>Item 3</item>
</string-array>
</resources>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<resources>
<color name="colorBorder">#E8E8E8</color>
<color name="colorUrlBarBackground">#E8E8E8</color>
</resources>

View File

@@ -0,0 +1,21 @@
<!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<resources>
<dimen name="margin_normal">10dp</dimen>
<dimen name="margin_small">5dp</dimen>
<dimen name="margin_large">20dp</dimen>
<dimen name="padding_normal">10dp</dimen>
<dimen name="padding_small">5dp</dimen>
<dimen name="action_btn_size">48dp</dimen>
<dimen name="urlbar_height">48dp</dimen>
<dimen name="urlbar_bg_corner_radius">24dp</dimen>
<dimen name="server_card_elevation">2dp</dimen>
<dimen name="server_card_min_height">68dp</dimen>
<dimen name="server_card_stroke_width">0dp</dimen>
</resources>

View File

@@ -0,0 +1,218 @@
<!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<resources>
<string name="app_name" translatable="false">AVNC</string>
<string name="title_add_server_profile">Add server</string>
<string name="title_edit_server_profile">Edit server</string>
<string name="title_duplicate">Duplicate</string>
<string name="title_edit">Edit</string>
<string name="title_delete">Delete</string>
<string name="title_clear">Clear</string>
<string name="title_copy_host">Copy host</string>
<string name="title_copy_name">Copy name</string>
<string name="title_advanced">Advanced</string>
<string name="title_cancel">Cancel</string>
<string name="title_save">Save</string>
<string name="title_undo">Undo</string>
<string name="title_settings">Settings</string>
<string name="title_vnc_login">VNC login</string>
<string name="title_ssh_login">SSH login</string>
<string name="title_unlock_private_key">Unlock private key</string>
<string name="title_remember">Remember</string>
<string name="title_export">Export</string>
<string name="title_import">Import</string>
<string name="title_view_only_mode">View-only</string>
<string name="title_hide_remote_cursor">Hide remote pointer</string>
<string name="title_key_compat_mode">Send legacy key events</string>
<string name="title_button_up_delay">Send delayed click events</string>
<string name="title_resize_remote_desktop">Resize remote session to local window</string>
<string name="title_image_quality">Image quality</string>
<string name="title_orientation">Orientation</string>
<string name="title_image_quality_raw">Raw</string>
<string name="title_vnc_security">Security</string>
<string name="title_use_ssh_tunnel">Use SSH tunnel</string>
<string name="title_unknown_ssh_host">Unknown SSH host</string>
<string name="title_ssh_host_key_changed">SSH host key changed</string>
<string name="title_continue">Continue</string>
<string name="title_delete_servers_before_import">Delete current servers before import</string>
<string name="title_password">Password</string>
<string name="title_use_repeater">Use repeater</string>
<string name="title_private_key">Private key</string>
<string name="title_change">Change</string>
<string name="title_about">About</string>
<string name="title_license">Licence</string>
<string name="title_open_source_libraries">Open source libraries</string>
<string name="title_report_bug">Report an issue</string>
<string name="title_source_code">Source code</string>
<string name="title_unlock_dialog">Unlock to continue</string>
<string name="title_automatic">Automatic</string>
<string name="title_none">None</string>
<string name="hint_urlbar">Connect to a Server</string>
<string name="hint_server_name">Name (e.g. Work PC)</string>
<string name="hint_host">Host</string>
<string name="hint_repeater_host">Repeater host</string>
<string name="hint_port">Port</string>
<string name="hint_server_id">Server ID</string>
<string name="hint_username">Username</string>
<string name="hint_password">Password</string>
<string name="hint_ssh_host">SSH host</string>
<string name="hint_ssh_port">SSH port</string>
<string name="hint_key_password">Key password</string>
<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>
<string name="msg_pip_not_supported">Not supported on this device</string>
<string name="msg_ptr_hiding_not_supported">Not supported on this device</string>
<string name="msg_loading">Loading…</string>
<string name="msg_imported">Imported</string>
<string name="msg_exported">Exported</string>
<string name="msg_export_auth_required">Authenticate to export servers</string>
<string name="msg_invalid_key_file">Invalid private key file</string>
<string name="msg_invalid_vnc_uri">Invalid VNC URI</string>
<string name="msg_copied_to_clipboard">Copied</string>
<string name="msg_pk_password_not_saved">AVNC no longer saves private key passwords to improve security.</string>
<string name="msg_key_compat_mode_help">Some servers have limited Unicode support. Legacy key events can help input non-English text.</string>
<string name="msg_button_up_delay_help">Delaying click events can help in some rare cases if an app is not responding to clicks.</string>
<string name="msg_drag_gesture_help">Assigning an action to this gesture will change Long press detection:\n\n<b>Press-hold-release</b> → Long press\n<b>Press-hold-swipe</b> → Long press and swipe</string>
<string name="msg_shortcut_server_deleted">This server has been deleted</string>
<string name="tip_empty_server_list">Server list is empty.\nClick \'<b>+</b>\' to add a server, or\nuse the top address bar to connect directly.</string>
<string name="tip_urlbar">You can enter IP address, hostname, or \'vnc://\' URI.</string>
<string name="tip_discovery">Discovery can automatically find supported servers\nrunning on your network.</string>
<!-- Accessibility descriptions -->
<string name="desc_navigation_btn">Open navigation drawer</string>
<string name="desc_settings_btn">Settings</string>
<string name="desc_saved_servers_tab">Saved servers</string>
<string name="desc_discovered_servers_tab">Discovered servers</string>
<string name="desc_add_new_server_btn">Add server</string>
<string name="desc_save_discovered_server_btn">Save</string>
<string name="desc_discovery_btn">Discover servers</string>
<string name="desc_discovery_stop_btn">Stop discovering servers</string>
<string name="desc_discovery_running">Discovering servers on you network</string>
<string name="desc_keyboard_btn">Open keyboard</string>
<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>
<string name="desc_clear_url_btn">Clear</string>
<string name="desc_server_url">Server address</string>
<string name="desc_help_btn">Help</string>
<string name="desc_discovered_list">List of automatically discovered servers</string>
<string name="desc_saved_servers_list">List of saved Servers</string>
<!-- Preference -->
<string name="pref_ui">Interface</string>
<string name="pref_ui_summary">Look and feel</string>
<string name="pref_viewer">Viewer</string>
<string name="pref_viewer_summary">Picture-in-picture, zoom</string>
<string name="pref_input">Input</string>
<string name="pref_input_summary">Gestures, mouse, virtual keys</string>
<string name="pref_servers">Servers</string>
<string name="pref_server_summary">Login, discovery</string>
<string name="pref_tools">Tools</string>
<string name="pref_tools_summary">Import/Export, debugging</string>
<string name="pref_experimental">Experimental</string>
<string name="pref_experimental_summary">Extra goodies</string>
<string name="pref_gesture_action_none" translatable="false">@string/title_none</string>
<string name="pref_gesture_action_left_click">Left-click</string>
<string name="pref_gesture_action_middle_click">Middle-click</string>
<string name="pref_gesture_action_right_click">Right-click</string>
<string name="pref_gesture_action_double_click">Double-click</string>
<string name="pref_gesture_action_move_pointer">Move pointer</string>
<string name="pref_gesture_action_pan">Pan local frame</string>
<string name="pref_gesture_action_remote_scroll">Scroll remote content</string>
<string name="pref_gesture_action_remote_drag">Drag remote content</string>
<string name="pref_gesture_action_remote_drag_middle">Drag with middle button</string>
<string name="pref_gesture_action_open_keyboard">Open keyboard</string>
<string name="pref_theme">Theme</string>
<string name="pref_theme_option_system">System</string>
<string name="pref_theme_option_dark">Dark</string>
<string name="pref_theme_option_light">Light</string>
<string name="pref_prefer_advanced_editor">Directly open advanced server options</string>
<string name="pref_sort_server_list">Sort saved servers by name</string>
<string name="pref_gesture">Gestures</string>
<string name="pref_gesture_style">Gesture style</string>
<string name="pref_gesture_style_auto" translatable="false">@string/title_automatic</string>
<string name="pref_gesture_style_auto_summary">Based on app Settings</string>
<string name="pref_gesture_style_touchscreen">Touchscreen</string>
<string name="pref_gesture_style_touchscreen_summary">Do actions at touch-point</string>
<string name="pref_gesture_style_touchpad">Touchpad</string>
<string name="pref_gesture_style_touchpad_summary">Do actions at pointer</string>
<string name="pref_single_tap">Single tap</string>
<string name="pref_two_finger_tap">Two-finger tap</string>
<string name="pref_double_tap">Double tap</string>
<string name="pref_long_press">Long press</string>
<string name="pref_swipe1">One-finger swipe</string>
<string name="pref_swipe2">Two-finger swipe</string>
<string name="pref_double_tap_swipe">Double tap and swipe</string>
<string name="pref_long_press_swipe">Long press and swipe</string>
<string name="pref_swipe_sensitivity">Swipe sensitivity</string>
<string name="pref_invert_vertical_scrolling">Invert vertical scrolling</string>
<string name="pref_mouse">Mouse</string>
<string name="pref_mouse_passthrough">Mouse passthrough</string>
<string name="pref_mouse_passthrough_summary_off">Use mouse events for local gestures</string>
<string name="pref_mouse_passthrough_summary_on">Send mouse events directly to server</string>
<string name="pref_hide_local_cursor">Hide local pointer</string>
<string name="pref_mouse_back">Back button</string>
<string name="pref_mouse_back_action_default">Default</string>
<string name="pref_vk">Virtual keys</string>
<string name="pref_vk_show_all">Show all keys</string>
<string name="pref_vk_open_with_keyboard">Open with keyboard</string>
<string name="pref_km">Key mappings</string>
<string name="pref_km_right_alt_to_super">Right Alt → Super</string>
<string name="pref_km_language_switch_to_super">Language Switch → Super</string>
<string name="pref_km_back_to_escape">Back → Escape</string>
<string name="pref_km_back_to_escape_summary">Does not affect the navigation bar</string>
<string name="pref_orientation">Screen orientation</string>
<string name="pref_orientation_option_auto">Automatic</string>
<string name="pref_orientation_option_portrait">Portrait</string>
<string name="pref_orientation_option_landscape">Landscape</string>
<string name="pref_fullscreen">Fullscreen</string>
<string name="pref_display_cutout">Draw behind display cutout (experimental)</string>
<string name="pref_enable_pip">Picture-in-picture</string>
<string name="pref_keep_screen_on">Keep screen on</string>
<string name="pref_toolbar">Toolbar</string>
<string name="pref_toolbar_alignment">Alignment</string>
<string name="pref_toolbar_alignment_option_start">Start</string>
<string name="pref_toolbar_alignment_option_end">End</string>
<string name="pref_toolbar_open_with_swipe">Swipe-in from edge to open</string>
<string name="pref_show_gesture_style_toggle">Show gesture style toggle</string>
<string name="pref_zoom">Zoom</string>
<string name="pref_zoom_min">Minimum</string>
<string name="pref_zoom_max">Maximum</string>
<string name="pref_per_orientation_zoom">Separate zoom for each orientation</string>
<string name="pref_clipboard_sync">Clipboard sync</string>
<string name="pref_saved_server_lock_summary">Require biometric/password unlock to connect</string>
<string name="pref_saved_server_lock">Lock saved servers</string>
<string name="pref_auto_reconnect">Reconnect automatically</string>
<string name="pref_discovery">Discovery</string>
<string name="pref_discovery_autorun">Autorun</string>
<string name="pref_discovery_autorun_summary">Discover servers while on homepage</string>
<string name="pref_rediscovery_indicator">Highlight rediscovered servers</string>
<string name="pref_import_export">Import/Export servers</string>
<string name="pref_debugging">Debugging</string>
<string name="pref_logs">Logs</string>
<string name="pref_keycode_map">Keycode map</string>
<string name="pref_touch_test">Touch test</string>
<string name="pref_key_test">Key test</string>
</resources>

View File

@@ -15,4 +15,148 @@
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
<!--
When app is launched, Android shows a temporary window until the app is ready.
The background color for this temporary window is selected from the theme specified
for the activity in app manifest. E.g. it will be white for a Light theme.
If we specify DayNight theme in manifest for startup activity, but user has selected
dark theme in AVNC, they may see a white flash before activity starts drawing. To
workaround this, we use App.SplashTheme.Dark in the manifest to get a dark window,
but switch to main theme in Activity's onCreate().
Since API 31, Android provides SplashScreen API to change splash theme at runtime,
which we use to match the splash theme with user's prefs (see HomeActivity).
Note: Some custom ROMs don't respect/support the splash theme introduced in API 31.
On such devices, we still rely on the above mentioned workaround.
-->
<style name="App.SplashTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar" />
<style name="App.SplashTheme.Light" parent="Theme.MaterialComponents.Light.NoActionBar" />
<style name="App.SplashTheme.Dark" parent="Theme.MaterialComponents.NoActionBar" />
<!--
This base theme is used for configuration-specific styling (e.g. night mode, API 23)
-->
<style name="App.BaseTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar" />
<!--
This is the main theme.
-->
<style name="App.Theme" parent="App.BaseTheme">
<item name="appBarLayoutStyle">@style/Widget.MaterialComponents.AppBarLayout.Surface</item>
</style>
<style name="AlertDialog.Dimmed" parent="ThemeOverlay.MaterialComponents.MaterialAlertDialog">
<item name="android:backgroundDimAmount">.6</item>
</style>
<style name="UrlBar" parent="Widget.MaterialComponents.Toolbar">
<item name="android:background">@drawable/bg_urlbar</item>
<item name="android:layout_marginStart">@dimen/margin_normal</item>
<item name="android:layout_marginEnd">@dimen/margin_normal</item>
<item name="android:layout_marginTop">@dimen/margin_large</item>
<item name="android:layout_marginBottom">@dimen/margin_normal</item>
</style>
<style name="TipView" parent="Widget.AppCompat.TextView">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_gravity">center</item>
<item name="android:gravity">center</item>
<item name="android:drawableTop">@drawable/ic_lightbulb</item>
</style>
<style name="FormField">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_margin">@dimen/margin_small</item>
</style>
<style name="FormField.EditText">
<item name="android:paddingTop">15dp</item>
<item name="android:drawablePadding">15dp</item>
</style>
<style name="FormField.LabelWithIcon">
<item name="android:layout_width">wrap_content</item>
<item name="android:drawablePadding">15dp</item>
<item name="android:gravity">center_vertical</item>
<item name="android:paddingStart">@dimen/padding_small</item>
</style>
<style name="FormField.CheckBox">
<item name="android:paddingStart">11dp</item>
</style>
<style name="ImageButton">
<item name="android:layout_width">@dimen/action_btn_size</item>
<item name="android:layout_height">@dimen/action_btn_size</item>
<item name="android:background">?attr/selectableItemBackgroundBorderless</item>
</style>
<style name="ImageButton.Toggle">
<item name="android:background">@drawable/bg_toggle_button</item>
<item name="android:foreground">?selectableItemBackground</item>
<item name="android:gravity">center</item>
<item name="android:textOff" />
<item name="android:textOn" />
</style>
<style name="ServerList">
<item name="android:paddingBottom">@dimen/server_card_min_height</item>
<item name="android:clipToPadding">false</item>
</style>
<style name="ServerCard">
<item name="android:layout_marginTop">@dimen/margin_normal</item>
<item name="android:layout_marginStart">@dimen/margin_normal</item>
<item name="android:layout_marginEnd">@dimen/margin_normal</item>
<item name="android:focusable">true</item>
<item name="android:minHeight">@dimen/server_card_min_height</item>
<item name="cardElevation">@dimen/server_card_elevation</item>
<item name="strokeWidth">@dimen/server_card_stroke_width</item>
<item name="contentPadding">@dimen/padding_normal</item>
<item name="strokeColor">@color/colorBorder</item>
</style>
<style name="ServerCardHintIcon">
<item name="android:layout_width">16dp</item>
<item name="android:layout_height">16dp</item>
<item name="android:layout_marginStart">@dimen/margin_normal</item>
<item name="android:layout_marginEnd">@dimen/margin_normal</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="tint">?android:textColorSecondary</item>
<item name="tintMode">src_in</item>
</style>
<style name="VirtualKey">
<item name="android:layout_height">36dp</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:minWidth">50dp</item>
<item name="android:gravity">center</item>
<item name="android:background">?attr/selectableItemBackgroundBorderless</item>
<item name="android:textAppearance">@style/TextAppearance.MaterialComponents.Body2</item>
</style>
<style name="VirtualKey.Compact">
<item name="android:minWidth">36dp</item>
</style>
<style name="VirtualKey.Image">
<item name="android:minWidth">46dp</item>
</style>
<style name="VirtualKey.Toggle">
<item name="android:background">@drawable/bg_toggle_button</item>
</style>
<style name="VirtualKey.Toggle.Image">
<item name="android:minWidth">48dp</item>
<item name="android:textOff" />
<item name="android:textOn" />
<item name="android:padding">12dp</item>
</style>
</resources>

View File

@@ -0,0 +1,20 @@
<!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
app:title="@string/pref_ui">
<ListPreference
app:defaultValue="system"
app:entries="@array/theme_entries"
app:entryValues="@array/theme_values"
app:key="theme"
app:title="@string/pref_theme"
app:useSimpleSummaryProvider="true" />
</PreferenceScreen>

View File

@@ -0,0 +1,162 @@
<!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:title="@string/pref_input">
<PreferenceCategory
app:icon="@drawable/ic_gesture"
app:title="@string/pref_gesture">
<com.gaurav.avnc.ui.prefs.ListPreferenceEx
app:defaultValue="touchscreen"
app:entries="@array/gesture_style_entries"
app:entryValues="@array/gesture_style_values"
app:key="gesture_style"
app:title="@string/pref_gesture_style"
app:useSimpleSummaryProvider="true"
app:widgetLayout="@layout/help_btn" />
<ListPreference
app:defaultValue="double-click"
app:entries="@array/double_tap_action_entries"
app:entryValues="@array/double_tap_action_values"
app:key="gesture_double_tap"
app:title="@string/pref_double_tap"
app:useSimpleSummaryProvider="true" />
<ListPreference
app:defaultValue="right-click"
app:entries="@array/long_press_action_entries"
app:entryValues="@array/long_press_action_values"
app:key="gesture_long_press"
app:title="@string/pref_long_press"
app:useSimpleSummaryProvider="true" />
<ListPreference
app:defaultValue="open-keyboard"
app:entries="@array/tap2_action_entries"
app:entryValues="@array/tap2_action_values"
app:key="gesture_tap2"
app:title="@string/pref_two_finger_tap"
app:useSimpleSummaryProvider="true" />
<com.gaurav.avnc.ui.prefs.ListPreferenceEx
app:defaultValue="pan"
app:entries="@array/swipe1_action_entries"
app:entryValues="@array/swipe1_action_values"
app:key="gesture_swipe1"
app:title="@string/pref_swipe1"
app:useSimpleSummaryProvider="true" />
<ListPreference
app:defaultValue="remote-scroll"
app:entries="@array/swipe2_action_entries"
app:entryValues="@array/swipe2_action_values"
app:key="gesture_swipe2"
app:title="@string/pref_swipe2"
app:useSimpleSummaryProvider="true" />
<com.gaurav.avnc.ui.prefs.ListPreferenceEx
app:defaultValue="remote-drag"
app:entries="@array/double_tap_swipe_action_entries"
app:entryValues="@array/double_tap_swipe_action_values"
app:key="gesture_double_tap_swipe"
app:title="@string/pref_double_tap_swipe"
app:useSimpleSummaryProvider="true" />
<com.gaurav.avnc.ui.prefs.ListPreferenceEx
app:defaultValue="none"
app:entries="@array/long_press_swipe_action_entries"
app:entryValues="@array/long_press_swipe_action_values"
app:key="gesture_long_press_swipe"
app:title="@string/pref_long_press_swipe"
app:useSimpleSummaryProvider="true"
app:widgetLayout="@layout/help_btn" />
<SeekBarPreference
android:max="15"
app:defaultValue="10"
app:key="gesture_swipe_sensitivity"
app:min="5"
app:title="@string/pref_swipe_sensitivity" />
<SwitchPreference
android:defaultValue="false"
app:key="invert_vertical_scrolling"
app:title="@string/pref_invert_vertical_scrolling" />
</PreferenceCategory>
<PreferenceCategory
app:icon="@drawable/ic_mouse"
app:title="@string/pref_mouse">
<SwitchPreference
app:defaultValue="true"
app:key="mouse_passthrough"
app:summaryOff="@string/pref_mouse_passthrough_summary_off"
app:summaryOn="@string/pref_mouse_passthrough_summary_on"
app:title="@string/pref_mouse_passthrough" />
<SwitchPreference
app:defaultValue="true"
app:key="hide_local_cursor"
app:title="@string/pref_hide_local_cursor" />
<SwitchPreference
app:defaultValue="false"
app:key="hide_remote_cursor"
app:title="@string/title_hide_remote_cursor" />
<ListPreference
app:defaultValue="right-click"
app:entries="@array/mouse_back_action_entries"
app:entryValues="@array/mouse_back_action_values"
app:key="mouse_back"
app:title="@string/pref_mouse_back"
app:useSimpleSummaryProvider="true" />
</PreferenceCategory>
<PreferenceCategory
app:icon="@drawable/ic_keyboard_mini"
app:title="@string/pref_vk">
<SwitchPreference
app:defaultValue="false"
app:key="vk_open_with_keyboard"
app:title="@string/pref_vk_open_with_keyboard" />
<SwitchPreference
app:defaultValue="true"
app:key="vk_show_all"
app:title="@string/pref_vk_show_all" />
</PreferenceCategory>
<PreferenceCategory
app:icon="@drawable/ic_keyboard"
app:title="@string/pref_km">
<SwitchPreference
app:defaultValue="false"
app:key="km_right_alt_to_super"
app:title="@string/pref_km_right_alt_to_super" />
<SwitchPreference
app:defaultValue="false"
app:key="km_language_switch_to_super"
app:title="@string/pref_km_language_switch_to_super" />
<SwitchPreference
app:defaultValue="false"
app:key="km_back_to_escape"
app:summary="@string/pref_km_back_to_escape_summary"
app:title="@string/pref_km_back_to_escape" />
</PreferenceCategory>
</PreferenceScreen>

View File

@@ -0,0 +1,36 @@
<!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
app:title="@string/title_settings">
<Preference
app:fragment="com.gaurav.avnc.ui.prefs.PrefsActivity$Appearance"
app:icon="@drawable/ic_palette"
app:summary="@string/pref_ui_summary"
app:title="@string/pref_ui" />
<Preference
app:fragment="com.gaurav.avnc.ui.prefs.PrefsActivity$Viewer"
app:icon="@drawable/ic_video"
app:summary="@string/pref_viewer_summary"
app:title="@string/pref_viewer" />
<Preference
app:fragment="com.gaurav.avnc.ui.prefs.PrefsActivity$Input"
app:icon="@drawable/ic_keyboard"
app:summary="@string/pref_input_summary"
app:title="@string/pref_input" />
<Preference
app:fragment="com.gaurav.avnc.ui.prefs.PrefsActivity$Server"
app:icon="@drawable/ic_computer"
app:summary="@string/pref_server_summary"
app:title="@string/pref_servers" />
</PreferenceScreen>

View File

@@ -0,0 +1,23 @@
<!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
app:title="@string/pref_servers">
<SwitchPreference
app:defaultValue="true"
app:key="clipboard_sync"
app:title="@string/pref_clipboard_sync" />
<SwitchPreference
app:defaultValue="false"
app:key="auto_reconnect"
app:title="@string/pref_auto_reconnect" />
</PreferenceScreen>

View File

@@ -0,0 +1,89 @@
<!--
~ Copyright (c) 2020 Gaurav Ujjwal.
~
~ SPDX-License-Identifier: GPL-3.0-or-later
~
~ See COPYING.txt for more details.
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:title="@string/pref_viewer">
<ListPreference
android:defaultValue="landscape"
android:entries="@array/orientation_entries"
android:entryValues="@array/orientation_values"
android:key="viewer_orientation"
android:title="@string/pref_orientation"
app:useSimpleSummaryProvider="true" />
<SwitchPreference
app:defaultValue="false"
app:key="pip_enabled"
app:title="@string/pref_enable_pip" />
<SwitchPreference
app:defaultValue="true"
app:key="fullscreen_display"
app:title="@string/pref_fullscreen" />
<SwitchPreference
app:defaultValue="false"
app:key="viewer_draw_behind_cutout"
app:title="@string/pref_display_cutout" />
<SwitchPreference
app:defaultValue="true"
app:key="keep_screen_on"
app:title="@string/pref_keep_screen_on" />
<PreferenceCategory
app:icon="@drawable/ic_zoom_in"
app:title="@string/pref_zoom">
<SeekBarPreference
android:max="100"
app:defaultValue="50"
app:key="zoom_min"
app:min="10"
app:showSeekBarValue="true"
app:title="@string/pref_zoom_min" />
<SeekBarPreference
android:max="1000"
app:defaultValue="500"
app:key="zoom_max"
app:min="100"
app:showSeekBarValue="true"
app:title="@string/pref_zoom_max" />
<SwitchPreference
app:defaultValue="true"
app:key="per_orientation_zoom"
app:title="@string/pref_per_orientation_zoom" />
</PreferenceCategory>
<PreferenceCategory
app:icon="@drawable/ic_toolbar"
app:title="@string/pref_toolbar">
<ListPreference
app:defaultValue="start"
app:entries="@array/toolbar_alignment_entries"
app:entryValues="@array/toolbar_alignment_values"
app:key="toolbar_alignment"
app:title="@string/pref_toolbar_alignment"
app:useSimpleSummaryProvider="true" />
<SwitchPreference
app:defaultValue="true"
app:key="toolbar_open_with_swipe"
app:title="@string/pref_toolbar_open_with_swipe" />
<SwitchPreference
app:defaultValue="true"
app:key="toolbar_show_gesture_style_toggle"
app:title="@string/pref_show_gesture_style_toggle" />
</PreferenceCategory>
</PreferenceScreen>