mirror of
https://github.com/KDE/kdeconnect-android
synced 2025-09-01 14:45:08 +00:00
Compare commits
28 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
889e0d5c52 | ||
|
c075cc0b63 | ||
|
91c0097158 | ||
|
a25e88238d | ||
|
4336ea4761 | ||
|
58fabe06bf | ||
|
7d7162bb5b | ||
|
b0655fc9d0 | ||
|
1241a560f2 | ||
|
f7b55e4416 | ||
|
ff78fdfd59 | ||
|
8b01db3c34 | ||
|
25728eae18 | ||
|
dc7fc46e62 | ||
|
2b1e4dcb23 | ||
|
97b7eb71cf | ||
|
bb0ab51d3b | ||
|
f503b18993 | ||
|
58e9a5d2b6 | ||
|
fd34e56675 | ||
|
4be79b52ae | ||
|
028a2992c9 | ||
|
bdfc21cf64 | ||
|
5225d0b200 | ||
|
54e5224f20 | ||
|
6ab846cbbd | ||
|
ea66605ef0 | ||
|
c903c5d3fd |
@@ -2,8 +2,8 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="org.kde.kdeconnect_tp"
|
||||
android:versionCode="12000"
|
||||
android:versionName="1.20">
|
||||
android:versionCode="12101"
|
||||
android:versionName="1.21.1">
|
||||
|
||||
<supports-screens
|
||||
android:anyDensity="true"
|
||||
@@ -40,6 +40,7 @@
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
|
||||
@@ -362,7 +363,6 @@
|
||||
<action android:name="android.service.chooser.ChooserTargetService" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
<!--
|
||||
<service
|
||||
android:name="org.kde.kdeconnect.Plugins.MouseReceiverPlugin.MouseReceiverService"
|
||||
android:exported="true"
|
||||
@@ -374,7 +374,6 @@
|
||||
android:name="android.accessibilityservice"
|
||||
android:resource="@xml/mouse_receiver_service" />
|
||||
</service>
|
||||
-->
|
||||
|
||||
<activity
|
||||
android:name="org.kde.kdeconnect.Plugins.NotificationsPlugin.NotificationFilterActivity"
|
||||
|
14
build.gradle
14
build.gradle
@@ -4,9 +4,9 @@ import com.android.build.gradle.api.ApplicationVariant
|
||||
import com.github.jk1.license.render.TextReportRenderer
|
||||
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.7.10'
|
||||
ext.kotlin_version = '1.7.20'
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.3.0'
|
||||
classpath 'com.android.tools.build:gradle:7.3.1'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
}
|
||||
@@ -168,9 +168,9 @@ dependencies {
|
||||
|
||||
implementation 'com.klinkerapps:android-smsmms:5.2.6' //For SMS and MMS purposes
|
||||
|
||||
implementation 'commons-io:commons-io:2.11.0'
|
||||
implementation 'commons-io:commons-io:2.8.0' // newer versions don't work on Android 7: https://stackoverflow.com/questions/73604534/no-static-method-threadlocal-withinitial-commons-io-dependency
|
||||
implementation 'org.apache.commons:commons-collections4:4.4'
|
||||
implementation 'org.apache.commons:commons-lang3:3.11'
|
||||
implementation 'org.apache.commons:commons-lang3:3.12.0'
|
||||
|
||||
// Kotlin
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||
@@ -178,12 +178,12 @@ dependencies {
|
||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
|
||||
|
||||
// Testing
|
||||
testImplementation 'junit:junit:4.13.1'
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
testImplementation 'org.powermock:powermock-core:2.0.0'
|
||||
testImplementation 'org.powermock:powermock-module-junit4:2.0.0'
|
||||
testImplementation 'org.powermock:powermock-api-mockito2:2.0.0'
|
||||
testImplementation 'org.mockito:mockito-core:2.23.0'
|
||||
testImplementation 'org.skyscreamer:jsonassert:1.3.0'
|
||||
testImplementation 'org.mockito:mockito-core:3.12.4' // powermock isn't compatible with mockito 4
|
||||
testImplementation 'org.skyscreamer:jsonassert:1.5.1'
|
||||
|
||||
// For device controls
|
||||
implementation 'org.reactivestreams:reactive-streams:1.0.4'
|
||||
|
@@ -3,7 +3,7 @@
|
||||
# This file is distributed under the same license as kdeconnect-android.
|
||||
# Albert Vaca Cintora <albertvaka@gmail.com>, 2014.
|
||||
# Vít Pelčák <vit@pelcak.org>, 2014.
|
||||
# Vit Pelcak <vpelcak@suse.cz>, 2021.
|
||||
# Vit Pelcak <vit@pelcak.org>, 2021.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
@@ -3,7 +3,7 @@ msgstr ""
|
||||
"Project-Id-Version: kdeorg\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2019-06-30 11:38+0200\n"
|
||||
"PO-Revision-Date: 2022-12-24 11:42\n"
|
||||
"PO-Revision-Date: 2023-01-02 07:11\n"
|
||||
"Last-Translator: Albert Vaca Cintora <albertvaka@gmail.com>\n"
|
||||
"Language-Team: Chinese Simplified\n"
|
||||
"Language: zh_CN\n"
|
||||
|
@@ -318,7 +318,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Hələlik hər hansı bir etibarlı şəbəkə əlavə edilməyib</string>
|
||||
<string name="allow_all_networks_text">Hamısına icazə vermək</string>
|
||||
<string name="location_permission_needed_title">İcazə tələb edlir</string>
|
||||
<string name="location_permission_needed_desc">Android, Sizin WiFi şəbəkənizi müəyyənləşdirmək üçün icazə tələb edir</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 bütün tətbiqlər üçün mübadilə buferinə girişi aradan qaldırıb. Bu qoşma söndürüləcək.</string>
|
||||
<string name="mpris_open_url">Burada oxutmağa davam edin</string>
|
||||
<string name="cant_open_url">Oxutmanı davam etdirmək üçün URL açıla bilmir</string>
|
||||
|
@@ -52,6 +52,7 @@
|
||||
<string name="remotekeyboard_multiple_connections">Има повече от една отдалечена връзка за клавиатура, изберете устройството за конфигуриране</string>
|
||||
<string name="open_mousepad">Отдалечен вход</string>
|
||||
<string name="mousepad_info">Преместете пръст на екрана, за да преместите курсора на мишката. Докоснете за щракване иИзползвайте два/три пръста за десни и средни бутони. Използвайте 2 пръста за превъртане.Използвайте дълго натискане за влачене.</string>
|
||||
<string name="mousepad_keyboard_input_not_supported">Въвеждането от клавиатурата не се поддържа от сдвоеното устройство</string>
|
||||
<string name="mousepad_single_tap_settings_title">Задаване на действие с натискане с един пръст</string>
|
||||
<string name="mousepad_double_tap_settings_title">Задаване на действие за докосване с два пръста</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Задаване на действие с докосване с три пръста</string>
|
||||
@@ -275,8 +276,7 @@
|
||||
<string name="pref_plugin_mprisreceiver">Управление на медийния плейър</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Управление на медийните плейъри на телефона от друго устройство</string>
|
||||
<string name="notification_channel_default">Други известия</string>
|
||||
<string name="notification_channel_persistent_no_devices">Постоянен индикатор (без устройства)</string>
|
||||
<string name="notification_channel_persistent_with_devices">Постоянен индикатор (с устройства)</string>
|
||||
<string name="notification_channel_persistent">Постоянен индикатор</string>
|
||||
<string name="notification_channel_media_control">Контрол на медиите</string>
|
||||
<string name="notification_channel_filetransfer">Прехвърляне на файл</string>
|
||||
<string name="notification_channel_high_priority">Висок приоритет</string>
|
||||
@@ -320,7 +320,7 @@
|
||||
<string name="empty_trusted_networks_list_text">Все още не сте добавили надеждна мрежа</string>
|
||||
<string name="allow_all_networks_text">Allow all</string>
|
||||
<string name="location_permission_needed_title">Изисква се разрешение</string>
|
||||
<string name="location_permission_needed_desc">Android изисква разрешение за местоположение, за да идентифицира вашата WiFi мрежа</string>
|
||||
<string name="location_permission_needed_desc">KDE Connect се нуждае от разрешение за местоположението във фонов режим, за да познава WiFi към която сте свързани, дори когато приложението е във фонов режим. Това е така, защото имената на WiFi мрежите около вас могат да бъдат използвани за намиране на вашето местоположение, дори когато KDE Connect не прави това.</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 премахна достъпа до клипборда за всички приложения. Тази приставка ще бъде деактивирана.</string>
|
||||
<string name="mpris_open_url">Продължете да играете тук</string>
|
||||
<string name="cant_open_url">Не мога да отворя URL адреса, за да продължа играта</string>
|
||||
|
@@ -52,6 +52,7 @@
|
||||
<string name="remotekeyboard_multiple_connections">Hi ha més d\'una connexió amb un teclat remot, seleccioneu el dispositiu per a configurar-lo</string>
|
||||
<string name="open_mousepad">Entrada remota</string>
|
||||
<string name="mousepad_info">Moveu un dit per la pantalla per a moure el cursor del ratolí. Toqueu per a un clic, i empreu dos/tres dits per als botons dret i mig. Useu 2 dits per a desplaçar. Empreu un toc llarg per a arrossegar i deixar anar.</string>
|
||||
<string name="mousepad_keyboard_input_not_supported">El dispositiu aparellat no permet l\'entrada de teclat</string>
|
||||
<string name="mousepad_single_tap_settings_title">Estableix l\'acció de tocar amb un dit</string>
|
||||
<string name="mousepad_double_tap_settings_title">Estableix l\'acció de tocar amb dos dits</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Estableix l\'acció de tocar amb tres dits</string>
|
||||
@@ -262,7 +263,7 @@
|
||||
<string name="select_ringtone">Seleccioneu un to de la trucada</string>
|
||||
<string name="telephony_pref_blocked_title">Nombres blocats</string>
|
||||
<string name="telephony_pref_blocked_dialog_desc">No es mostren ni les trucades ni els SMS d\'aquests números. Especifiqueu un número per línia</string>
|
||||
<string name="mpris_coverart_description">Caràtula del suport actual</string>
|
||||
<string name="mpris_coverart_description">Caràtula del fitxer multimèdia actual</string>
|
||||
<string name="device_icon_description">Icona del dispositiu</string>
|
||||
<string name="settings_icon_description">Icona d\'arranjament</string>
|
||||
<string name="presenter_fullscreen">Pantalla completa</string>
|
||||
@@ -275,8 +276,7 @@
|
||||
<string name="pref_plugin_mprisreceiver">Control del reproductor multimèdia</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Controla els reproductors multimèdia del telèfon des d\'un altre dispositiu</string>
|
||||
<string name="notification_channel_default">Altres notificacions</string>
|
||||
<string name="notification_channel_persistent_no_devices">Indicador de persistència (sense dispositius)</string>
|
||||
<string name="notification_channel_persistent_with_devices">Indicador de persistència (amb dispositius)</string>
|
||||
<string name="notification_channel_persistent">Indicador de persistència</string>
|
||||
<string name="notification_channel_media_control">Control multimèdia</string>
|
||||
<string name="notification_channel_filetransfer">Transferència de fitxers</string>
|
||||
<string name="notification_channel_high_priority">Prioritat alta</string>
|
||||
@@ -320,7 +320,7 @@
|
||||
<string name="empty_trusted_networks_list_text">Encara no heu afegit cap xarxa de confiança</string>
|
||||
<string name="allow_all_networks_text">Permet totes</string>
|
||||
<string name="location_permission_needed_title">Es requereix permís</string>
|
||||
<string name="location_permission_needed_desc">L\'Android requereix el permís d\'ubicació per a identificar la xarxa Wi-Fi</string>
|
||||
<string name="location_permission_needed_desc">El KDE Connect necessita el permís d\'ubicació en segon pla per conèixer la xarxa WiFi a la qual esteu connectat fins i tot quan l\'aplicació està en segon pla. Això és perquè el nom de les xarxes Wi-Fi que hi ha al voltant es podria utilitzar per a trobar la vostra ubicació, fins i tot quan això no és el que fa el KDE Connect.</string>
|
||||
<string name="clipboard_android_x_incompat">L\'Android 10 ha tret l\'accés al porta-retalls a totes les aplicacions. Aquest connector estarà inhabilitat.</string>
|
||||
<string name="mpris_open_url">Continua reproduint aquí</string>
|
||||
<string name="cant_open_url">No s\'ha pogut obrir l\'URL per a continuar reproduint</string>
|
||||
|
@@ -52,6 +52,7 @@
|
||||
<string name="remotekeyboard_multiple_connections">Je k dispozici více než jedno připojení klávesnice. Vyberte zařízení pro jeho nastavení.</string>
|
||||
<string name="open_mousepad">Vzdálený vstup</string>
|
||||
<string name="mousepad_info">Pohybujte prstem po obrazovce pro pohybování kurzorem myši. Ťukněte pro kliknutí a použijte dva/tři prsty jako pravé a prostřední tlačítko. Použijte 2 prsty pro posunování. Pro přetažení dlouze podržte.</string>
|
||||
<string name="mousepad_keyboard_input_not_supported">Vstup pomocí klávesnice není spárovaným zařízením podporován</string>
|
||||
<string name="mousepad_single_tap_settings_title">Nastavit činnost pro ťuknutí prstem</string>
|
||||
<string name="mousepad_double_tap_settings_title">Nastavit činnost pro ťuknutí dvěma prsty</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Nastavit činnost pro ťuknutí třemi prsty</string>
|
||||
@@ -334,7 +335,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Nepřidali jste žádné důvěryhodné sítě</string>
|
||||
<string name="allow_all_networks_text">Povolit všechny</string>
|
||||
<string name="location_permission_needed_title">Získán přístup</string>
|
||||
<string name="location_permission_needed_desc">Pro identifikaci sítě WiFi Android vyžaduje oprávnění zjistit polohu</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 odstranit přístup ke schránce pro všechny aplikace. Tento modul bude zakázán.</string>
|
||||
<string name="mpris_open_url">Pokračovat v přehrávání zde</string>
|
||||
<string name="cant_open_url">Nelze otevřít URL pro pokračování v přehrávání</string>
|
||||
|
@@ -309,7 +309,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Δεν έχετε προσθέσει ακόμη κάποιο έμπιστο δίκτυο</string>
|
||||
<string name="allow_all_networks_text">Να επιτρέπονται όλα</string>
|
||||
<string name="location_permission_needed_title">Απαιτείται πρόσβαση</string>
|
||||
<string name="location_permission_needed_desc">Το android απαιτεί το δικαίωμα πρόσβασης στην τοποθεσία για να αναγνωρίσει το WiFI δίκτυό σας</string>
|
||||
<string name="clipboard_android_x_incompat">Το android έχει αφαιρέσει την πρόσβαση στο πρόχειρο από όλες τις εφαρμογές. Αυτό το πρόσθετο θα απενεργοποιηθεί.</string>
|
||||
<string name="mpris_open_url">Συνεχίστε να παίζετε εδώ</string>
|
||||
<string name="cant_open_url">Αδυναμία ανοίγματος URL για να συνεχίσετε να παίζετε</string>
|
||||
|
@@ -52,6 +52,7 @@
|
||||
<string name="remotekeyboard_multiple_connections">There is more than one remote keyboard connection, select the device to configure</string>
|
||||
<string name="open_mousepad">Remote input</string>
|
||||
<string name="mousepad_info">Move a finger on the screen to move the mouse cursor. Tap for a click, and use two/three fingers for right and middle buttons. Use 2 fingers to scroll. Use a long press to drag\'n drop.</string>
|
||||
<string name="mousepad_keyboard_input_not_supported">Keyboard input not supported by the paired device</string>
|
||||
<string name="mousepad_single_tap_settings_title">Set one finger tap action</string>
|
||||
<string name="mousepad_double_tap_settings_title">Set two finger tap action</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Set three finger tap action</string>
|
||||
@@ -318,7 +319,6 @@
|
||||
<string name="empty_trusted_networks_list_text">You have not added any trusted network yet</string>
|
||||
<string name="allow_all_networks_text">Allow all</string>
|
||||
<string name="location_permission_needed_title">Permission required</string>
|
||||
<string name="location_permission_needed_desc">Android requires the Location permission to identify your WiFi network</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 has removed clipboard access to all apps. This plugin will be disabled.</string>
|
||||
<string name="mpris_open_url">Continue playing here</string>
|
||||
<string name="cant_open_url">Cannot open URL to continue playing</string>
|
||||
|
@@ -52,6 +52,7 @@
|
||||
<string name="remotekeyboard_multiple_connections">Hay más de una conexión remota de teclado, seleccione el dispositivo a configurar</string>
|
||||
<string name="open_mousepad">Entrada remota</string>
|
||||
<string name="mousepad_info">Mueva un dedo sobre la pantalla para mover el cursor del ratón. Pulse para ejecutar un clic y use dos/tres dedos para emular los botones derecho y central. Use 2 dedos para desplazar las pantalla. Use una pulsación larga para arrastrar y soltar.</string>
|
||||
<string name="mousepad_keyboard_input_not_supported">Entrada de teclado no soportada por el dispositivo vinculado.</string>
|
||||
<string name="mousepad_single_tap_settings_title">Establecer la acción al pulsar con un dedo</string>
|
||||
<string name="mousepad_double_tap_settings_title">Establecer la acción al pulsar con dos dedos</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Establecer la acción al pulsar con tres dedos</string>
|
||||
@@ -275,8 +276,6 @@
|
||||
<string name="pref_plugin_mprisreceiver">Control del reproductor de medios</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Controle los reproductores de medios de su teléfono desde otro dispositivo</string>
|
||||
<string name="notification_channel_default">Otras notificaciones</string>
|
||||
<string name="notification_channel_persistent_no_devices">Indicador persistente (ningún dispositivo)</string>
|
||||
<string name="notification_channel_persistent_with_devices">Indicador persistente (con dispositivos)</string>
|
||||
<string name="notification_channel_media_control">Control multimedia</string>
|
||||
<string name="notification_channel_filetransfer">Transferencia de archivo</string>
|
||||
<string name="notification_channel_high_priority">Alta prioridad</string>
|
||||
@@ -320,7 +319,7 @@
|
||||
<string name="empty_trusted_networks_list_text">No ha añadido ninguna red confiable de momento</string>
|
||||
<string name="allow_all_networks_text">Permitir todas</string>
|
||||
<string name="location_permission_needed_title">Permisos requeridos</string>
|
||||
<string name="location_permission_needed_desc">Android necesita el permiso de localización para identificar su red WiFi</string>
|
||||
<string name="location_permission_needed_desc">KDE Connect requiere permisos de localización para saber a que red está conectado incluso cuando la aplicación está en segundo plano. Esto es así porque el nombre de las redes WiFi a su alrededor se pueden usar para encontrar su localización, aunque no es esto lo que KDE Connect hace.</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 ha eliminado el acceso al portapapeles para todas las aplicaciones. Este complemento se desactivará.</string>
|
||||
<string name="mpris_open_url">Continuar reproduciendo aquí</string>
|
||||
<string name="cant_open_url">No se pudo abrir la URL para continuar reproduciendo</string>
|
||||
|
@@ -282,7 +282,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Sa ei ole veel lisanud ühtegi usaldusväärset võrku</string>
|
||||
<string name="allow_all_networks_text">Luba kõik</string>
|
||||
<string name="location_permission_needed_title">Õigusenõue</string>
|
||||
<string name="location_permission_needed_desc">Android nõuab asukohaõigust sinu WiFi-võrgu tuvastamiseks</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 eemaldas lõikepuhvri kasutamise võimaluse kõigilt rakendustelt. See plugin enam ei tööta.</string>
|
||||
<string name="mpris_open_url">Jätka esitamist siin</string>
|
||||
<string name="cant_open_url">URL-i avamine esitamise jätkamiseks nurjus</string>
|
||||
|
@@ -52,6 +52,7 @@
|
||||
<string name="remotekeyboard_multiple_connections">Urruneko teklatuekin konexio bat baino gehiago dago, hautatu konfiguratu beharreko gailua</string>
|
||||
<string name="open_mousepad">Urruneko sarrera</string>
|
||||
<string name="mousepad_info">Mugitu hatz bat pantailan zehar saguaren erakuslea mugitzeko. Egin tak klik baterako, eta erabili bi/hiru hatz eskuin eta erdiko botoietarako. Erabili 2 hatz labaintzeko. Erabili sakatze luze bat arrastatu eta jaregiteko.</string>
|
||||
<string name="mousepad_keyboard_input_not_supported">Parekatutako gailuak ez du teklatuko sarreraren euskarririk</string>
|
||||
<string name="mousepad_single_tap_settings_title">Ezarri hatz bakarrarekin tak egitearen ekintza</string>
|
||||
<string name="mousepad_double_tap_settings_title">Ezarri bi hatzez tak egitearen ekintza</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Ezarri hiru hatzez tak egitearen ekintza</string>
|
||||
@@ -275,8 +276,7 @@
|
||||
<string name="pref_plugin_mprisreceiver">Euskarri-jotzailearen kontrola</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Kontrolatu zure telefonoaren euskarri-jotzaileak beste gailu batetik</string>
|
||||
<string name="notification_channel_default">Beste jakinarazpen batzuk</string>
|
||||
<string name="notification_channel_persistent_no_devices">Adierazle iraunkorra (gailurik ez)</string>
|
||||
<string name="notification_channel_persistent_with_devices">Adierazle iraunkorra (gailuekin)</string>
|
||||
<string name="notification_channel_persistent">Adierazle iraunkorra</string>
|
||||
<string name="notification_channel_media_control">Euskarrien kontrola</string>
|
||||
<string name="notification_channel_filetransfer">Fitxategi transferentzia</string>
|
||||
<string name="notification_channel_high_priority">Lehentasun handia</string>
|
||||
@@ -320,7 +320,7 @@
|
||||
<string name="empty_trusted_networks_list_text">Oraindik ez duzu gehitu konfiantza duen sarerik</string>
|
||||
<string name="allow_all_networks_text">Baimendu guztiak</string>
|
||||
<string name="location_permission_needed_title">Baimena beharrezkoa da</string>
|
||||
<string name="location_permission_needed_desc">Android-ek Kokatze baimena behar du zure WiFi sarea identifikatzeko</string>
|
||||
<string name="location_permission_needed_desc">KDE Connect-ek konektatuta zauden Wi-Fi sarea zein den jakiteko atzeko planoko kokapen baimena behar du, baita aplikazioa atzeko planoan dagoenean ere. Hori horrela da, zure inguruko Wi-Fi sareen izenak zure kokalekua aurkitzeko erabil daitezkeelako, nahiz eta hori ez izan KDE Connect-ek egiten duena.</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10ek arbela atzitzeko aukera kendu die aplikazio guztiei. Plugin hau desgaitu egingo da.</string>
|
||||
<string name="mpris_open_url">Jarraitu hemen jotzen</string>
|
||||
<string name="cant_open_url">Ezin da ireki URLa jotzen jarraitzeko</string>
|
||||
|
@@ -318,7 +318,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Luotettuja verkkoja ei ole vielä lisätty</string>
|
||||
<string name="allow_all_networks_text">Salli kaikki</string>
|
||||
<string name="location_permission_needed_title">Käyttöoikeus vaaditaan</string>
|
||||
<string name="location_permission_needed_desc">Tunnistaakseen langattoman verkkosi Android vaatii käyttöoikeuden sijaintiin</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 on poistanut kaikkien sovellusten leikepöytäkäytön. Liitännäinen poistetaan käytöstä.</string>
|
||||
<string name="mpris_open_url">Jatka toistoa tästä</string>
|
||||
<string name="cant_open_url">Verkko-osoitetta ei voi avata toiston jatkamiseksi</string>
|
||||
|
@@ -52,6 +52,7 @@
|
||||
<string name="remotekeyboard_multiple_connections">Plusieurs connexions à des claviers sans fil sont disponibles, sélectionnez le périphérique à configurer</string>
|
||||
<string name="open_mousepad">Contrôle distant</string>
|
||||
<string name="mousepad_info">Faites glisser votre doigt sur l\'écran pour déplacer le pointeur de la souris. Appuyez pour cliquer et utilisez deux/trois doigts pour les clic droit et centre. Utilisez 2 doigts pour faire défiler. Appuyez longtemps pour faire un glisser-déposer.</string>
|
||||
<string name="mousepad_keyboard_input_not_supported">La saisie par le clavier n\'est pas pris en charge par le périphérique appairée.</string>
|
||||
<string name="mousepad_single_tap_settings_title">Définir une action pour tapotage avec un doigt</string>
|
||||
<string name="mousepad_double_tap_settings_title">Action pour l\'appui à deux doigts</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Action pour l\'appui à trois doigts</string>
|
||||
@@ -275,8 +276,6 @@
|
||||
<string name="pref_plugin_mprisreceiver">Contrôle du lecteur multimédia</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Contrôlez les lecteurs multimédia de votre téléphone depuis un autre appareil</string>
|
||||
<string name="notification_channel_default">Autres notifications</string>
|
||||
<string name="notification_channel_persistent_no_devices">Indicateur persistant (aucun périphérique)</string>
|
||||
<string name="notification_channel_persistent_with_devices">Indicateur persistant (avec des périphériques)</string>
|
||||
<string name="notification_channel_media_control">Contrôle multimédia</string>
|
||||
<string name="notification_channel_filetransfer">Transfert de fichiers</string>
|
||||
<string name="notification_channel_high_priority">Haute priorité</string>
|
||||
@@ -320,7 +319,7 @@
|
||||
<string name="empty_trusted_networks_list_text">Vous n\'avez pas encore ajouté de réseau de confiance</string>
|
||||
<string name="allow_all_networks_text">Tout autoriser</string>
|
||||
<string name="location_permission_needed_title">Permissions requises</string>
|
||||
<string name="location_permission_needed_desc">Android requiert la permission de géolocalisation pour identifier votre réseau Wifi</string>
|
||||
<string name="location_permission_needed_desc">KDE Connect a besoin de la permission d\'accéder à la localisation en arrière-plan pour connaître le réseau WiFi sur lequel vous êtes connecté, même si l’application est en arrière-plan. En effet, le nom des réseaux WiFi autour de vous pourrait être utilisé pour trouver votre emplacement, même si ce n’est pas ce que KDE Connect fait.</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 a supprimé l\'accès des applications au presse-papier. Ce module externe sera désactivé.</string>
|
||||
<string name="mpris_open_url">Continuer la lecture ici</string>
|
||||
<string name="cant_open_url">Impossible d\'ouvrir l\'URL pour continuer la lecture</string>
|
||||
|
@@ -318,7 +318,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Még nem adott hozzá megbízható hálózatot</string>
|
||||
<string name="allow_all_networks_text">Összes engedélyezése</string>
|
||||
<string name="location_permission_needed_title">Engedély szükséges</string>
|
||||
<string name="location_permission_needed_desc">Az Androidnak szüksége van a Helymeghatározási engedélyre a WiFi hálózat azonosításához</string>
|
||||
<string name="clipboard_android_x_incompat">Az Android 10 eltávolította a vágólaphoz való hozzáférést minden alkalmazásból. Ez a bővítmény le lesz tiltva.</string>
|
||||
<string name="mpris_open_url">Lejátszás folytatása itt</string>
|
||||
<string name="cant_open_url">Nem lehet megnyitni az URL-t a lejátszás folytatásához</string>
|
||||
|
@@ -310,7 +310,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Anda belum memiliki jaringan terpercaya apa pun yang ditambahkan</string>
|
||||
<string name="allow_all_networks_text">Perbolehkan semua</string>
|
||||
<string name="location_permission_needed_title">Diperlukan perizinan</string>
|
||||
<string name="location_permission_needed_desc">Android memerlukan perizinan Lokasi untuk mengidentifikasi jaringan WiFi Anda</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 telah menghapus akses papan klip ke semua aplikasi. Plugin ini akan dinonaktifkan.</string>
|
||||
<string name="mpris_open_url">Lanjut putar di sini</string>
|
||||
<string name="cant_open_url">Tidak bisa membuka URL untuk melanjutkan pemutaran</string>
|
||||
|
@@ -275,8 +275,6 @@
|
||||
<string name="pref_plugin_mprisreceiver">Controllo lettore multimediale</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Controlla i lettori multimediali del tuo telefono da un altro dispositivo</string>
|
||||
<string name="notification_channel_default">Altre notifiche</string>
|
||||
<string name="notification_channel_persistent_no_devices">Indicatore persistente (nessun dispositivo)</string>
|
||||
<string name="notification_channel_persistent_with_devices">Indicatore persistente (con dispositivi)</string>
|
||||
<string name="notification_channel_media_control">Controllo multimediale</string>
|
||||
<string name="notification_channel_filetransfer">Trasferimento file</string>
|
||||
<string name="notification_channel_high_priority">Priorità alta</string>
|
||||
@@ -320,7 +318,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Non hai aggiunto ancora alcuna rete affidabile</string>
|
||||
<string name="allow_all_networks_text">Consenti tutte</string>
|
||||
<string name="location_permission_needed_title">Permesso richiesto</string>
|
||||
<string name="location_permission_needed_desc">Android richiede il permesso Posizione per identificare la tua rete WiFi</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 ha rimosso l\'accesso agli appunti a tutte le applicazioni. Questa estensione sarà disabilitata.</string>
|
||||
<string name="mpris_open_url">Continua qui la riproduzione</string>
|
||||
<string name="cant_open_url">Impossibile aprire l\'URL per continuare la riproduzione</string>
|
||||
|
@@ -310,7 +310,6 @@
|
||||
<string name="empty_trusted_networks_list_text">追加された信頼されたネットワークはありません</string>
|
||||
<string name="allow_all_networks_text">すべて許可</string>
|
||||
<string name="location_permission_needed_title">許可が必要です</string>
|
||||
<string name="location_permission_needed_desc">WiFi ネットワークを発見するには、位置情報を Android に提供する必要があります。</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 はすべてのアプリからクリップボードへのアクセスを削除しました。このプラグインは無効化されます。</string>
|
||||
<string name="mpris_open_url">このデバイスで再生を続ける</string>
|
||||
<string name="cant_open_url">再生を続けるための URL を開けません</string>
|
||||
|
@@ -56,15 +56,19 @@
|
||||
<item>უსწრაფესი</item>
|
||||
</string-array>
|
||||
<string-array name="mousepad_acceleration_profile_entries">
|
||||
<item>No Acceleration</item>
|
||||
<item>Weakest</item>
|
||||
<item>Weaker</item>
|
||||
<item>ამაჩქარებლის გარეშე</item>
|
||||
<item>მინიმალური</item>
|
||||
<item>საშუალოზე დაბალი</item>
|
||||
<item>საშუალო</item>
|
||||
<item>Stronger</item>
|
||||
<item>Strongest</item>
|
||||
<item>ძლიერი</item>
|
||||
<item>უძლიერესი</item>
|
||||
</string-array>
|
||||
<string name="mouse_receiver_plugin_name">თაგუნას მიმღები</string>
|
||||
<string name="view_status_title">მდგომარეობა</string>
|
||||
<string name="battery_status_format">ელემენტი: %d%%</string>
|
||||
<string name="battery_status_low_format">ელემენტი: %d%% ელემენტი დასატენია</string>
|
||||
<string name="battery_status_charging_format">ელემენტი: %d%% იტენება</string>
|
||||
<string name="battery_status_unknown">ელემენტის ინფორმაცია ხელმიუწვდომელია</string>
|
||||
<string name="category_connected_devices">მიერთებული მოწყობილობები</string>
|
||||
<string name="category_not_paired_devices">ხელმისაწვდომი მოწყობილობები</string>
|
||||
<string name="category_remembered_devices">დამახსოვრებული მოწყობილობები</string>
|
||||
@@ -81,19 +85,22 @@
|
||||
<string name="encryption_info_title">დაშიფვრის ინფორმაცია</string>
|
||||
<string name="pair_requested">დაწყვილების მოთხოვნა</string>
|
||||
<plurals name="incoming_files_text">
|
||||
<item quantity="one">ფაილი: %1s</item>
|
||||
<item quantity="other">(ფაილი %2$d of %3$d) : %1$s</item>
|
||||
<item quantity="one">File: %1s</item>
|
||||
<item quantity="other">(File %2$d of %3$d) : %1$s</item>
|
||||
</plurals>
|
||||
<plurals name="outgoing_files_text">
|
||||
<item quantity="one">ფაილი: %1$s</item>
|
||||
<item quantity="other">(ფაილი %2$d of %3$d) : %1$s</item>
|
||||
</plurals>
|
||||
<string name="tap_to_open">გასახსნელად დაატყაპუნეთ</string>
|
||||
<string name="received_file_text">\'%1s\'-ის გასახსნელად დაატყაპუნეთ</string>
|
||||
<string name="cannot_create_file">ფაილის (%s) შექმნის შეცდომა</string>
|
||||
<string name="tap_to_answer">საპასუხოდ დაატყაპუნეთ</string>
|
||||
<string name="right_click">მარჯვენა წკაპის გაგზავნა</string>
|
||||
<string name="middle_click">შუა წკაპის გაგზავნა</string>
|
||||
<string name="show_keyboard">კლავიატურის ჩვენება</string>
|
||||
<string name="device_not_paired">მოწყობილოვა დაწყვილებული არაა</string>
|
||||
<string name="request_pairing">დაწყვილების მოთხოვნა</string>
|
||||
<string name="pairing_accept">დასტური</string>
|
||||
<string name="pairing_reject">უარყოფა</string>
|
||||
<string name="settings">პარამეტრები</string>
|
||||
@@ -105,6 +112,7 @@
|
||||
<string name="mpris_loop">მარყუჟი</string>
|
||||
<string name="mpris_shuffle">შემთხვევით</string>
|
||||
<string name="mpris_volume">ტომი</string>
|
||||
<string name="mpris_time_settings_title">წინ/გადახვევის ღილაკები</string>
|
||||
<string-array name="mpris_time_entries">
|
||||
<item>10 წამი</item>
|
||||
<item>20 წამი</item>
|
||||
@@ -115,15 +123,19 @@
|
||||
<string name="share_to">გაზიარება…</string>
|
||||
<string name="plugin_settings_with_name">%s-ის მორგება</string>
|
||||
<string name="invalid_device_name">მოწყობილობის არასწორი სახელი</string>
|
||||
<string name="custom_devices_settings">მოწყობილობები სიის ხელით მითითება</string>
|
||||
<string name="custom_device_list">მოწყობილობების IP-ით დამატება</string>
|
||||
<string name="custom_device_deleted">ხელით მითითებული მოწყობილობა წაშლილია</string>
|
||||
<string name="custom_device_fab_hint">მოწყობილობის დამატება</string>
|
||||
<string name="undo">დაბრუნება</string>
|
||||
<string name="share_notification_preference">ხმაურიანი შეტყობინებები</string>
|
||||
<string name="share_destination_customize">სამიზნე საქაღალდის მორგება</string>
|
||||
<string name="share_destination_folder_preference">სამიზნე საქაღალდე</string>
|
||||
<string name="share">გაზიარება</string>
|
||||
<string name="share_received_file">\"%s\"-ის გაზიარება</string>
|
||||
<string name="sftp_sdcard_num">SD ბარათი %d</string>
|
||||
<string name="sftp_sdcard">SD ბარათი</string>
|
||||
<string name="sftp_readonly">(მხოლოდ კითხვადი)</string>
|
||||
<string name="sftp_camera">კამერის სურათები</string>
|
||||
<string name="add_device_dialog_title">მოწყობილობის დამატება</string>
|
||||
<string name="add_device_hint">ჰოსტის სახელი ან IP მისამართი</string>
|
||||
@@ -133,11 +145,17 @@
|
||||
<string name="sftp_preference_add_storage_location_title">საცავის მდებარეობის დამატება</string>
|
||||
<string name="sftp_preference_edit_storage_location">საცავის მდებარეობის ჩასწორება</string>
|
||||
<string name="sftp_preference_add_camera_shortcut">კამერის საქაღალდის მალსახმობის დამატება</string>
|
||||
<string name="sftp_preference_add_camera_shortcut_summary_off">კამერის საქაღალდეს მალსახმობი არ დაემატება</string>
|
||||
<string name="sftp_storage_preference_storage_location">საცავის მდებარეობა</string>
|
||||
<string name="sftp_storage_preference_storage_location_already_configured">ეს მდებარეობა უკვე მორგებულია</string>
|
||||
<string name="sftp_storage_preference_click_to_select">მოსანიშნად დააწკაპუნეთ</string>
|
||||
<string name="sftp_storage_preference_display_name">ნაჩვენები სახელი</string>
|
||||
<string name="sftp_storage_preference_display_name_already_used">საჩვენებელი სახელი უკვე გამოიყენება</string>
|
||||
<string name="sftp_storage_preference_display_name_cannot_be_empty">საჩვენებელი სახელი ცარიელი არ შეიძლება იყოს</string>
|
||||
<string name="sftp_action_mode_menu_delete">წაშლა</string>
|
||||
<string name="sftp_no_sdcard_detected">SD ბარათი ვერ ვიპოვე</string>
|
||||
<string name="sftp_no_storage_locations_configured">საცავის მდებარეობები მითითებული არაა</string>
|
||||
<string name="no_players_connected">დამკვრელები ნაპოვნი არაა</string>
|
||||
<string name="send_files">ფაილების გაგზავნა</string>
|
||||
<string name="pairing_title">KDE Connect -ის მოწყობილობები</string>
|
||||
<string name="device_rename_title">მოწყობილობის სახელის გადარქმევა</string>
|
||||
@@ -154,11 +172,16 @@
|
||||
<string name="close">დახურვა</string>
|
||||
<string name="select_ringtone">"ზარის არჩევა"</string>
|
||||
<string name="telephony_pref_blocked_title">დაბლოკილი ნომრები</string>
|
||||
<string name="mpris_coverart_description">მიმდინარე მედიის ყდა</string>
|
||||
<string name="device_icon_description">მოწყობილობის ხატულა</string>
|
||||
<string name="settings_icon_description">პარამეტრების ხატულა</string>
|
||||
<string name="presenter_fullscreen">მთელ ეკრანზე</string>
|
||||
<string name="presenter_exit">პრეზენტაციიდან გასვლა</string>
|
||||
<string name="add_command">ბრძანების დამატება</string>
|
||||
<string name="addcommand_explanation">ბრძანება რეგისტრირებული არაა</string>
|
||||
<string name="pref_plugin_mprisreceiver">მედია დამკვრელის კონტროლი</string>
|
||||
<string name="notification_channel_default">სხვა გაფრთხილებები</string>
|
||||
<string name="notification_channel_persistent">მუდმივი მაჩვენებელი</string>
|
||||
<string name="notification_channel_media_control">მედიის კონტროლი</string>
|
||||
<string name="notification_channel_filetransfer">ფაილის მიმოცვლა</string>
|
||||
<string name="notification_channel_high_priority">მაღალი პრიორიტეტი</string>
|
||||
@@ -166,8 +189,10 @@
|
||||
<string name="mpris_stop">მიმდინარე დამკვრელის გაჩერება</string>
|
||||
<string name="copy_url_to_clipboard">URL-ის ბუფერში კოპირება</string>
|
||||
<string name="clipboard_toast">დაკოპირდა გაცვლის ბაფერში</string>
|
||||
<string name="runcommand_notreachable">მოწყობილობა მიუწვდომელია</string>
|
||||
<string name="runcommand_notpaired">მოწყობილობა დაწყვილებული არაა</string>
|
||||
<string name="runcommand_nosuchdevice">მოწყობილობა არ არსებობს</string>
|
||||
<string name="pref_plugin_findremotedevice">დაშორებული მოწყობილობის პოვნა</string>
|
||||
<string name="ring">ზარი</string>
|
||||
<string name="pref_plugin_systemvolume">სისტემის ხმა</string>
|
||||
<string name="mute">დადუმება</string>
|
||||
@@ -179,6 +204,8 @@
|
||||
<string name="extra_options">დამატებითი პარამეტრები</string>
|
||||
<string name="privacy_options">კონფიდენციალობის პარამეტრები</string>
|
||||
<string name="set_privacy_options">თქვენი კონფიდენციალობის პარამეტრების დაყენება</string>
|
||||
<string name="block_contents">გაფრთხილების შემცველობის დაბლოკვა</string>
|
||||
<string name="block_images">გაფრთხილებებში გამოსახულებების დაბლოკვა</string>
|
||||
<string name="take_picture">კამერის გაშვება</string>
|
||||
<string name="presenter_pointer">კურსორი</string>
|
||||
<string name="trusted_networks">სანდო ქსელები</string>
|
||||
|
@@ -310,7 +310,6 @@
|
||||
<string name="empty_trusted_networks_list_text">신뢰할 수 있는 네트워크를 추가하지 않았습니다</string>
|
||||
<string name="allow_all_networks_text">모두 허용</string>
|
||||
<string name="location_permission_needed_title">권한이 필요함</string>
|
||||
<string name="location_permission_needed_desc">안드로이드에서 Wi-Fi 네트워크를 식별하려면 위치 권한이 필요합니다</string>
|
||||
<string name="clipboard_android_x_incompat">안드로이드 10부터는 앱에서 클립보드에 접근할 수 없습니다. 이 플러그인이 비활성화되었습니다.</string>
|
||||
<string name="mpris_open_url">여기에서 계속 재생</string>
|
||||
<string name="cant_open_url">계속 재생할 URL을 열 수 없음</string>
|
||||
|
@@ -291,8 +291,6 @@
|
||||
<string name="pref_plugin_mprisreceiver">Medijos leistuvės valdymas</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Valdyti savo telefono medijos leistuves iš kito įrenginio</string>
|
||||
<string name="notification_channel_default">Kiti pranešimai</string>
|
||||
<string name="notification_channel_persistent_no_devices">Pastovus indikatorius (be įrenginių)</string>
|
||||
<string name="notification_channel_persistent_with_devices">Pastovus indikatorius (su įrenginiais)</string>
|
||||
<string name="notification_channel_media_control">Įvairialypės terpės valdymas</string>
|
||||
<string name="notification_channel_filetransfer">Failų persiuntimas</string>
|
||||
<string name="notification_channel_high_priority">Didelė pirmenybė</string>
|
||||
@@ -336,7 +334,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Kol kas nesate pridėję jokių patikimų tinklų</string>
|
||||
<string name="allow_all_networks_text">Leisti visus</string>
|
||||
<string name="location_permission_needed_title">Reikalingas leidimas</string>
|
||||
<string name="location_permission_needed_desc">Android reikalauja Vietos leidimo, kad atpažintų jūsų belaidį (WiFi) tinklą</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 pašalino iškarpinės prieigą prie visų programėlių. Šis papildinys bus išjungtas.</string>
|
||||
<string name="mpris_open_url">Tęsti atkūrimą čia</string>
|
||||
<string name="cant_open_url">Nepavyksta atverti URL, kad būtų tęsiamas atkūrimas</string>
|
||||
|
@@ -52,6 +52,7 @@
|
||||
<string name="remotekeyboard_multiple_connections">Er is meer dan een verbinding met een toetsenbord op afstand, selecteer het te configureren apparaat</string>
|
||||
<string name="open_mousepad">Invoer op afstand</string>
|
||||
<string name="mousepad_info">Veeg met een vinger op het scherm om de muiscursor te verplaatsen. Tik om te klikken en gebruik twee/drie vingers voor rechter en middelste knop. Twee vingers gebruiken voor schuiven. Druk lang voor slepen en loslaten.</string>
|
||||
<string name="mousepad_keyboard_input_not_supported">Toetsenbordinvoer wordt niet ondersteund door het gepaarde apparaat</string>
|
||||
<string name="mousepad_single_tap_settings_title">Tikactie met één vinger instellen</string>
|
||||
<string name="mousepad_double_tap_settings_title">Tikactie met twee vingers instellen</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Tikactie met drie vingers instellen</string>
|
||||
@@ -275,8 +276,7 @@
|
||||
<string name="pref_plugin_mprisreceiver">Besturing van mediaspeler</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Uw mediaspelers op uw telefoon besturen vanaf een andere apparaat</string>
|
||||
<string name="notification_channel_default">Overige meldingen</string>
|
||||
<string name="notification_channel_persistent_no_devices">Blijvende indicator (geen apparaten)</string>
|
||||
<string name="notification_channel_persistent_with_devices">Blijvende indicator (met apparaten)</string>
|
||||
<string name="notification_channel_persistent">Blijvende indicator</string>
|
||||
<string name="notification_channel_media_control">Besturing van media</string>
|
||||
<string name="notification_channel_filetransfer">Bestandsoverdracht</string>
|
||||
<string name="notification_channel_high_priority">Hoge prioriteit</string>
|
||||
@@ -320,7 +320,7 @@
|
||||
<string name="empty_trusted_networks_list_text">U hebt nog geen vertrouwd netwerk toegevoegd</string>
|
||||
<string name="allow_all_networks_text">Allen toestaan</string>
|
||||
<string name="location_permission_needed_title">Toestemming vereist</string>
|
||||
<string name="location_permission_needed_desc">Android vereist de toestemming voor locatie om uw WiFi-netwerk te identificeren</string>
|
||||
<string name="location_permission_needed_desc">KDE Connect heeft de permissie achtergrondlocatie nodig om het WiFi-netwerk te weten waarmee u bent verbonden zelfs wanneer de toepassing in de achtergrond is. Dit vanwege dat de naam van de WiFi-netwerken om u heen gebruikt zouden kunnen worden om uw locatie te vinden, zelfs wanneer dit niet is wat KDE Connect doet.</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 heeft toegang tot het klembord naar alle toepassingen verwijderd. Deze plug-in zal uitgeschakeld worden.</string>
|
||||
<string name="mpris_open_url">Hier doorgaan met afspelen</string>
|
||||
<string name="cant_open_url">Kan URL niet openen om door te gaan met afspelen</string>
|
||||
|
@@ -318,7 +318,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Du har ikkje lagt til eit tiltrudd nettverk enno</string>
|
||||
<string name="allow_all_networks_text">Tillat alle</string>
|
||||
<string name="location_permission_needed_title">Krev utvida løyve</string>
|
||||
<string name="location_permission_needed_desc">Tilgang til geografisk plassering må vera påslått for identifisering av Wi-Fi-nettverket</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 har fjerna tilgang til utklippstavla for alle program. Programtillegget vert derfor slått av.</string>
|
||||
<string name="mpris_open_url">Hald fram avspeling her</string>
|
||||
<string name="cant_open_url">Kan ikkje opna adressa for framhald av avspeling</string>
|
||||
|
@@ -52,6 +52,7 @@
|
||||
<string name="remotekeyboard_multiple_connections">Nawiązano więcej niż jedno połączenie zdalnej klawiatury, wybierz urządzenie do ustawienia</string>
|
||||
<string name="open_mousepad">Zdalne sterowanie</string>
|
||||
<string name="mousepad_info">Przesuwanie palcem po ekranie przesuwa wskaźnik myszy. Stuknięcie jednym, dwoma i trzema palcami wywołuje odpowiednio naciśnięcie lewym, prawym i środkowym przyciskiem myszy. Dwa palce przewijają. Długie naciśnięcie rozpoczyna czynność przeciągania i upuszczania.</string>
|
||||
<string name="mousepad_keyboard_input_not_supported">Wpisywanie z klawiatury jest nieobsługiwane przez sparowane urządzenie</string>
|
||||
<string name="mousepad_single_tap_settings_title">Ustaw działanie po stuknięciu jednym palcem</string>
|
||||
<string name="mousepad_double_tap_settings_title">Ustaw działanie po stuknięciu dwoma palcami</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Ustaw działanie po stuknięciu trzema palcami</string>
|
||||
@@ -291,8 +292,6 @@
|
||||
<string name="pref_plugin_mprisreceiver">Sterowanie odtwarzaczem</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Steruje odtwarzaczami innego urządzenia z tego urządzenia</string>
|
||||
<string name="notification_channel_default">Inne powiadomienia</string>
|
||||
<string name="notification_channel_persistent_no_devices">Nieznikające powiadomienie (bez urządzeń)</string>
|
||||
<string name="notification_channel_persistent_with_devices">Nieznikające powiadomienie (z urządzeniami)</string>
|
||||
<string name="notification_channel_media_control">Sterowanie multimediami</string>
|
||||
<string name="notification_channel_filetransfer">Przesyłanie plików</string>
|
||||
<string name="notification_channel_high_priority">Wysoki priorytet</string>
|
||||
@@ -336,7 +335,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Nie dodałeś jeszcze żadnej zaufanej sieci</string>
|
||||
<string name="allow_all_networks_text">Zezwól wszystkim</string>
|
||||
<string name="location_permission_needed_title">Wymagana zgoda</string>
|
||||
<string name="location_permission_needed_desc">Android wymaga pozwolenia na dostęp do położenia, aby móc rozpoznać twoją sieć WiFi</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 odebrał dostęp do schowka wszystkim programom. Ta wtyczka pozostanie wyłączona.</string>
|
||||
<string name="mpris_open_url">Kontynuuj odtwarzanie tutaj</string>
|
||||
<string name="cant_open_url">Nie można otworzyć adresu URL, aby kontynuować odtwarzanie</string>
|
||||
|
@@ -314,7 +314,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Você ainda não adicionou nenhuma rede confiável</string>
|
||||
<string name="allow_all_networks_text">Permitir tudo</string>
|
||||
<string name="location_permission_needed_title">É necessário ter permissão</string>
|
||||
<string name="location_permission_needed_desc">O Android precisa da permissão de Localização para identificar a sua rede Wi-Fi</string>
|
||||
<string name="clipboard_android_x_incompat">O Android 10 removeu o acesso à área de transferência para todos os aplicativos. Este plugin ficará desativado.</string>
|
||||
<string name="mpris_open_url">Continuar tocando aqui</string>
|
||||
<string name="cant_open_url">Não foi possível abrir a URL para continuar tocando</string>
|
||||
|
@@ -275,8 +275,6 @@
|
||||
<string name="pref_plugin_mprisreceiver">Controlo de Leitores Multimédia</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Controle os leitores multimédia dos seus telemóveis a partir de outro dispositivo</string>
|
||||
<string name="notification_channel_default">Outras notificações</string>
|
||||
<string name="notification_channel_persistent_no_devices">Indicador persistente (sem dispositivos)</string>
|
||||
<string name="notification_channel_persistent_with_devices">Indicador persistente (com dispositivos)</string>
|
||||
<string name="notification_channel_media_control">Comando multimédia</string>
|
||||
<string name="notification_channel_filetransfer">Transferência de ficheiros</string>
|
||||
<string name="notification_channel_high_priority">Alta prioridade</string>
|
||||
@@ -320,7 +318,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Ainda não adicionou nenhuma rede fidedigna</string>
|
||||
<string name="allow_all_networks_text">Permitir tudo</string>
|
||||
<string name="location_permission_needed_title">É necessária a permissão</string>
|
||||
<string name="location_permission_needed_desc">O Android precisa da permissão de Localização para identificar a sua rede WiFi</string>
|
||||
<string name="clipboard_android_x_incompat">O Android 10 removeu o acesso à área de transferência para todas as aplicações. Este \'plugin\' ficará desactivado.</string>
|
||||
<string name="mpris_open_url">Continuar a tocar aqui</string>
|
||||
<string name="cant_open_url">Não é possível abrir o URL para continuar a tocar</string>
|
||||
|
@@ -326,7 +326,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Încă nu ați adăugat nicio rețea de încredere</string>
|
||||
<string name="allow_all_networks_text">Permite toate</string>
|
||||
<string name="location_permission_needed_title">Permisiune cerută</string>
|
||||
<string name="location_permission_needed_desc">Android cere permisiunea de localizare pentru a vă identifica rețeaua WiFi</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 a eliminat accesul la clipboard pentru toate aplicațiile. Această extensie va fi dezactivată.</string>
|
||||
<string name="mpris_open_url">Continuă redarea aici</string>
|
||||
<string name="cant_open_url">URL-ul nu poate fi deschis pentru a continua redarea</string>
|
||||
|
File diff suppressed because one or more lines are too long
@@ -317,7 +317,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Zatiaľ ste nepridali žiadnu dôveryhodnú sieť</string>
|
||||
<string name="allow_all_networks_text">Povoliť všetky</string>
|
||||
<string name="location_permission_needed_title">Potrebné oprávnenia</string>
|
||||
<string name="location_permission_needed_desc">Systém Android vyžaduje oprávnenia k umiestneniu kvôli identifikácie vašej siete WiFi</string>
|
||||
<string name="clipboard_android_x_incompat">V systéme Android 10 je odstránený prístup k schránke pre všetky aplikácie. Tento zásuvný modul bude zakázaný.</string>
|
||||
<string name="mpris_open_url">Pokračovať v prehrávaní tu</string>
|
||||
<string name="cant_open_url">Nedá sa otvoriť URL pre pokračovanie v prehrávaní</string>
|
||||
|
@@ -52,6 +52,7 @@
|
||||
<string name="remotekeyboard_multiple_connections">Obstaja več kot ena povezava na oddaljeno tipkovnico, izberite napravo in nastavitve</string>
|
||||
<string name="open_mousepad">Oddaljeni input</string>
|
||||
<string name="mousepad_info">Premaknite prst po zaslonu da bi premikali miško. Tapnite za klik in uporabite dva/tri prste za desni in srednji gumb. Za pomikanje uporabite dva prsta. Uporabite dolg pritisk za povleci in spusti.</string>
|
||||
<string name="mousepad_keyboard_input_not_supported">Vnos s tipkovnice ni podprt na sparjeni napravi</string>
|
||||
<string name="mousepad_single_tap_settings_title">Nastavite akcijo tapkanja enega prsta</string>
|
||||
<string name="mousepad_double_tap_settings_title">Nastavite akcijo tapkanja dveh prstov</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Nastavite akcijo tapkanja treh prstov</string>
|
||||
@@ -291,8 +292,7 @@
|
||||
<string name="pref_plugin_mprisreceiver">Nadzor predvajalnika medijev</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Upravljajte predstavnostne predvajalnike telefona iz druge naprave</string>
|
||||
<string name="notification_channel_default">Ostala obvestila</string>
|
||||
<string name="notification_channel_persistent_no_devices">Obstojni indikator (ni naprav)</string>
|
||||
<string name="notification_channel_persistent_with_devices">Obstojni indikator (z napravami)</string>
|
||||
<string name="notification_channel_persistent">Trajni indikator</string>
|
||||
<string name="notification_channel_media_control">Nadzor medija</string>
|
||||
<string name="notification_channel_filetransfer">Prenos datotek</string>
|
||||
<string name="notification_channel_high_priority">Visoka prednost</string>
|
||||
@@ -336,7 +336,7 @@
|
||||
<string name="empty_trusted_networks_list_text">Niste še dodali nobenega zaupanja vrednega omrežja</string>
|
||||
<string name="allow_all_networks_text">Dovoli vse</string>
|
||||
<string name="location_permission_needed_title">Zahtevano dovoljenje</string>
|
||||
<string name="location_permission_needed_desc">Android potrebuje dovoljenje za lokacijo, da prepozna vaše omrežje WiFi</string>
|
||||
<string name="location_permission_needed_desc">"KDE Connect potrebuje dovoljenje omrežja, da pozna WiFi omrežje, s katerim ste povezani, tudi če je aplikacija v ozadju. To je zato, ker se ime omrežja wifi lahko uporabi za iskanje svoje lokacije, četudi to ne počne KDE Connect."</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 je odstranil dostop do odložišča za vse aplikacije. Ta vtičnik bo onemogočen.</string>
|
||||
<string name="mpris_open_url">Nadaljujte z igranjem tukaj</string>
|
||||
<string name="cant_open_url">Ne morem odpreti spletnega naslova za nadaljevanje predvajanja</string>
|
||||
|
@@ -318,7 +318,6 @@
|
||||
<string name="empty_trusted_networks_list_text">Du har inte lagt till några pålitliga nätverk ännu</string>
|
||||
<string name="allow_all_networks_text">Tillåt alla</string>
|
||||
<string name="location_permission_needed_title">Rättighet krävs</string>
|
||||
<string name="location_permission_needed_desc">Android kräver platsrättigheter för att identifiera WIFI-nätverk</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 har tagit bort åtkomst till klippbordet för alla applikationer. Det här insticksprogrammet kommer att inaktiveras.</string>
|
||||
<string name="mpris_open_url">Fortsätt spela här</string>
|
||||
<string name="cant_open_url">Kan inte öppna webbadress för att sluta spela</string>
|
||||
|
@@ -52,6 +52,7 @@
|
||||
<string name="remotekeyboard_multiple_connections">பல தொலை விசைப்பலகை இணைப்புகள் உள்ளன. அமைக்க வேண்டிய சாதனத்தை தேர்ந்தெடுங்கள்</string>
|
||||
<string name="open_mousepad">தொலை உள்ளீடு</string>
|
||||
<string name="mousepad_info">சுட்டிக்குறியை நகர்த்த ஒரு விரலை திரையில் நகர்த்தவும். \'க்ளிக்\' செய்வதற்கு தட்டுங்கள். வலது/நடு சுட்டி பட்டன்களுக்கு இரண்டு/மூன்று விரல்களை பயன்படுத்தவும். இரண்டு விரல்களைக் கொண்டு உருளவும். இழுத்து போடுவதற்கு நீண்ட அழுத்தத்தை பயன்படுத்தவும்.</string>
|
||||
<string name="mousepad_keyboard_input_not_supported">இணைக்கப்பட்டுள்ள சாதனம், விசைப்பலகை உள்ளீட்டை ஆதரிக்காது</string>
|
||||
<string name="mousepad_single_tap_settings_title">ஒருவிரலால் தட்டுவதற்குரிய செயலை அமை</string>
|
||||
<string name="mousepad_double_tap_settings_title">இரண்டு விரல்களால் தட்டுவதற்குரிய செயலை அமை</string>
|
||||
<string name="mousepad_triple_tap_settings_title">மூன்று விரல்களால் தட்டுவதற்குரிய செயலை அமை</string>
|
||||
@@ -275,8 +276,7 @@
|
||||
<string name="pref_plugin_mprisreceiver">ஊடக இயக்கி கட்டுப்பாடு</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">இன்னொரு சாதனத்திலிருந்து உங்கள் திறன்பேசியின் ஊடக இயக்கிகளை கட்டுப்படுத்துங்கள்</string>
|
||||
<string name="notification_channel_default">பிற அறிவிப்புகள்</string>
|
||||
<string name="notification_channel_persistent_no_devices">விடாப்பிடியான அறிவிப்பு (சாதனங்கள் இல்லாதபோது)</string>
|
||||
<string name="notification_channel_persistent_with_devices">விடாப்பிடியான அறிவிப்பு (சாதனங்கள் உள்ளபோது)</string>
|
||||
<string name="notification_channel_persistent">விடாப்பிடி அறிவிப்பு</string>
|
||||
<string name="notification_channel_media_control">ஊடக கட்டுப்பாடு</string>
|
||||
<string name="notification_channel_filetransfer">கோப்பு இடமாற்றம்</string>
|
||||
<string name="notification_channel_high_priority">அதிக முன்னுரிமை</string>
|
||||
@@ -320,7 +320,7 @@
|
||||
<string name="empty_trusted_networks_list_text">நீங்கள் இன்னும் எந்த நம்பகமான பிணையத்தையும் சேர்க்கவில்லை</string>
|
||||
<string name="allow_all_networks_text">அனைத்தையும் அனுமதி</string>
|
||||
<string name="location_permission_needed_title">அனுமதி தேவை</string>
|
||||
<string name="location_permission_needed_desc">உங்கள் Wi-Fi பிணையத்தை அடையாளங்காண, ஆண்ட்ராய்டுக்கு இருப்பிட அனுமதி தேவை</string>
|
||||
<string name="location_permission_needed_desc">"கே.டீ.யீ. கனெக்ட் குவியத்தில் இல்லாத போதும் அருகலை பிணையங்களைக் கண்டறிய, பின்னணி இருப்பிட அனுமதி தேவை. இவ்வனுமதியைக் கொண்டு உங்கள் இருப்பிடத்தைக் கண்டுபிடிக்கும் சாத்தியமுள்ளதால் இது இப்பெயரைக் கொண்டுள்ளது, ஆனால் கே.டீ.யீ. கனெக்ட் ஒருபோதும் உங்கள் இருப்பிடத்தைக் கண்டறிய முயற்சிக்காது."</string>
|
||||
<string name="clipboard_android_x_incompat">ஆண்ட்ராய்டு 10 எல்லா செயலிகளுக்கான பிடிப்புப்பலகை அனுமதியை நீக்கிவிட்டது. இந்த செருகுநிரல் இயங்காது.</string>
|
||||
<string name="mpris_open_url">இங்கிருந்து தொடர்ந்து இயக்கு</string>
|
||||
<string name="cant_open_url">தொடர்ந்து இயக்க முகவரியை திறக்க முடியவில்லை</string>
|
||||
|
@@ -52,6 +52,7 @@
|
||||
<string name="remotekeyboard_multiple_connections">Birden çok uzak klavye bağlantısı mevcut, yapılandırmak istediğiniz aygıtı seçin</string>
|
||||
<string name="open_mousepad">Girdi sil</string>
|
||||
<string name="mousepad_info">İmleç denetimi için parmağınızı ekranda hareket ettirin. Bir tıklama için hafifçe vurun, sağ ve orta düğmeler için iki/üç parmağınızı kullanın. Sarmak için 2 parmağınızı kullanın. Bırakıp sürüklemek için uzun basın.</string>
|
||||
<string name="mousepad_keyboard_input_not_supported">Klavye girişi, eşlenen aygıt tarafından desteklenmiyor</string>
|
||||
<string name="mousepad_single_tap_settings_title">Tek parmak dokunma eylemini ayarla</string>
|
||||
<string name="mousepad_double_tap_settings_title">İki parmak dokunma eylemini ayarla</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Üç parmak dokunma eylemini ayarla</string>
|
||||
@@ -275,8 +276,7 @@
|
||||
<string name="pref_plugin_mprisreceiver">Ortam Oynatıcı Denetimi</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Telefonunuzun ortam oynatıcılarını başka bir aygıttan denetleyin</string>
|
||||
<string name="notification_channel_default">Diğer bildirimler</string>
|
||||
<string name="notification_channel_persistent_no_devices">Kalıcı gösterge (aygıtsız)</string>
|
||||
<string name="notification_channel_persistent_with_devices">Kalıcı gösterge (aygıtla)</string>
|
||||
<string name="notification_channel_persistent">Kalıcı gösterge</string>
|
||||
<string name="notification_channel_media_control">Ortam denetimi</string>
|
||||
<string name="notification_channel_filetransfer">Dosya aktarımı</string>
|
||||
<string name="notification_channel_high_priority">Yüksek öncelik</string>
|
||||
@@ -320,7 +320,7 @@
|
||||
<string name="empty_trusted_networks_list_text">Henüz herhangi bir güvenilen ağ eklemediniz</string>
|
||||
<string name="allow_all_networks_text">Hepsine izin ver</string>
|
||||
<string name="location_permission_needed_title">İzin gerekli</string>
|
||||
<string name="location_permission_needed_desc">Android, WiFi ağınızı tanımlamak için Konum iznine ihtiyaç duyar</string>
|
||||
<string name="location_permission_needed_desc">KDE Connect, uygulama arka planda olsa bile bağlı olduğunuz WiFi ağını bilmek için arka plan konumu iznine ihtiyaç duyar. Bunun nedeni, çevrenizdeki WiFi ağlarının adının, KDE Connect\'in yaptığı bu olmasa bile konumunuzu bulmak için kullanılabilmesidir.</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10, tüm uygulamalara pano erişimini kaldırdı. Bu eklenti devre dışı bırakılacak.</string>
|
||||
<string name="mpris_open_url">Oynamayı burada sürdürün</string>
|
||||
<string name="cant_open_url">Oynamayı sürdürmek için URL açılamıyor</string>
|
||||
|
@@ -52,6 +52,7 @@
|
||||
<string name="remotekeyboard_multiple_connections">Існує декілька з’єднань із віддаленою клавіатурою. Виберіть пристрій для налаштовування.</string>
|
||||
<string name="open_mousepad">Дистанційне введення</string>
|
||||
<string name="mousepad_info">Проведіть по екрану пальцем, щоб пересунути вказівник миші. Дотик одним пальцем означатиме клацання, дотиком двома або трьома пальцями можна імітувати праву і середню кнопки. Гортання відбувається за допомогою двох пальців. Для перетягування зі скиданням скористайтеся тривалим натисканням.</string>
|
||||
<string name="mousepad_keyboard_input_not_supported">Підтримки введення з клавіатури на пов\'язаному пристрої не передбачено</string>
|
||||
<string name="mousepad_single_tap_settings_title">Встановлення дії для торкання одним пальцем</string>
|
||||
<string name="mousepad_double_tap_settings_title">Встановлення дії для торкання двома пальцями</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Встановлення дії для торкання трьома пальцями</string>
|
||||
@@ -291,8 +292,7 @@
|
||||
<string name="pref_plugin_mprisreceiver">Керування відтворенням</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Керування вашими програвачами на телефоні з іншого пристрою</string>
|
||||
<string name="notification_channel_default">Інші сповіщення</string>
|
||||
<string name="notification_channel_persistent_no_devices">Постійний індикатор (немає пристроїв)</string>
|
||||
<string name="notification_channel_persistent_with_devices">Постійний індикатор (з пристроями)</string>
|
||||
<string name="notification_channel_persistent">Постійний індикатор</string>
|
||||
<string name="notification_channel_media_control">Керування відтворенням</string>
|
||||
<string name="notification_channel_filetransfer">Передавання файлів</string>
|
||||
<string name="notification_channel_high_priority">Високий пріоритет</string>
|
||||
@@ -336,7 +336,7 @@
|
||||
<string name="empty_trusted_networks_list_text">Вами ще не додано надійних мереж</string>
|
||||
<string name="allow_all_networks_text">Дозволити всі</string>
|
||||
<string name="location_permission_needed_title">Потрібні права доступу</string>
|
||||
<string name="location_permission_needed_desc">Android потрібні права доступу до даних місця перебування для ідентифікації вашої мережі WiFi</string>
|
||||
<string name="location_permission_needed_desc">KDE Connect потрібні права на визначення місця перебування у фоновому режимі для роботи з мережею WiFi, з якою встановлено з\'єднання, навіть якщо програма працює у фоновому режимі. Причина полягає у тому, що назви сусідніх мереж WiFi може бути використано для визначення місця перебування, навіть якщо це не робить сама KDE Connect.</string>
|
||||
<string name="clipboard_android_x_incompat">У Android 10 вилучено доступ до буфера даних для усіх програм. Цей додаток буде вимкнено.</string>
|
||||
<string name="mpris_open_url">Продовжити відтворення тут</string>
|
||||
<string name="cant_open_url">Не вдалося відкрити адресу для продовження відтворення</string>
|
||||
|
@@ -310,7 +310,6 @@
|
||||
<string name="empty_trusted_networks_list_text">您还没有添加任何可信的网络</string>
|
||||
<string name="allow_all_networks_text">允许所有</string>
|
||||
<string name="location_permission_needed_title">需要权限</string>
|
||||
<string name="location_permission_needed_desc">Android 需要位置权限才能识别您的 WiFi 网络</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 已删除所有应用的剪贴板访问权限。此插件将被禁用。</string>
|
||||
<string name="mpris_open_url">继续在此播放</string>
|
||||
<string name="cant_open_url">无法大概 URL 继续播放</string>
|
||||
|
@@ -276,7 +276,6 @@
|
||||
<string name="empty_trusted_networks_list_text">您尚未加入任何信任網路</string>
|
||||
<string name="allow_all_networks_text">全部允許</string>
|
||||
<string name="location_permission_needed_title">需要權限</string>
|
||||
<string name="location_permission_needed_desc">Android 需要「位置」權限才能識別你的 Wi-Fi 網路</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 已移除所有應用程式的剪貼簿存取權限。此外掛程式將停用。</string>
|
||||
<string name="mpris_open_url">繼續在此播放</string>
|
||||
<string name="cant_open_url">無法開啟 URL 以繼續播放</string>
|
||||
|
@@ -59,6 +59,7 @@
|
||||
<string name="remotekeyboard_multiple_connections" translatable="true">There is more than one remote keyboard connection, select the device to configure</string>
|
||||
<string name="open_mousepad">Remote input</string>
|
||||
<string name="mousepad_info">Move a finger on the screen to move the mouse cursor. Tap for a click, and use two/three fingers for right and middle buttons. Use 2 fingers to scroll. Use a long press to drag\'n drop.</string>
|
||||
<string name="mousepad_keyboard_input_not_supported">Keyboard input not supported by the paired device</string>
|
||||
<string name="mousepad_single_tap_settings_title">Set one finger tap action</string>
|
||||
<string name="mousepad_double_tap_settings_title">Set two finger tap action</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Set three finger tap action</string>
|
||||
@@ -347,8 +348,7 @@
|
||||
<string name="pref_plugin_mprisreceiver_desc">Control your phone\'s media players from another device</string>
|
||||
|
||||
<string name="notification_channel_default">Other notifications</string>
|
||||
<string name="notification_channel_persistent_no_devices">Persistent indicator (no devices)</string>
|
||||
<string name="notification_channel_persistent_with_devices">Persistent indicator (with devices)</string>
|
||||
<string name="notification_channel_persistent">Persistent indicator</string>
|
||||
<string name="notification_channel_media_control">Media control</string>
|
||||
<string name="notification_channel_filetransfer">File transfer</string>
|
||||
<string name="notification_channel_high_priority">High priority</string>
|
||||
@@ -402,7 +402,7 @@
|
||||
<string name="allow_all_networks_text">Allow all</string>
|
||||
|
||||
<string name="location_permission_needed_title">Permission required</string>
|
||||
<string name="location_permission_needed_desc">Android requires the Location permission to identify your WiFi network</string>
|
||||
<string name="location_permission_needed_desc">KDE Connect needs the background location permission to know the WiFi network you are connected to even when the app is in the background. This is because the name of the WiFi networks around you could be used to find your location, even when this is not what KDE Connect does.</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 has removed clipboard access to all apps. This plugin will be disabled.</string>
|
||||
<string name="mpris_open_url">Continue playing here</string>
|
||||
<string name="cant_open_url">Can\'t open URL to continue playing</string>
|
||||
|
@@ -17,6 +17,8 @@ import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.Network;
|
||||
import android.net.NetworkRequest;
|
||||
import android.os.Binder;
|
||||
import android.os.Build;
|
||||
import android.os.IBinder;
|
||||
@@ -161,6 +163,9 @@ public class BackgroundService extends Service {
|
||||
}
|
||||
|
||||
public Device getDevice(String id) {
|
||||
if (id == null) {
|
||||
return null;
|
||||
}
|
||||
return devices.get(id);
|
||||
}
|
||||
|
||||
@@ -259,11 +264,27 @@ public class BackgroundService extends Service {
|
||||
// Register screen on listener
|
||||
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
|
||||
// See: https://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
|
||||
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
|
||||
}
|
||||
registerReceiver(new KdeConnectBroadcastReceiver(), filter);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
NetworkRequest.Builder builder = new NetworkRequest.Builder();
|
||||
cm.registerNetworkCallback(builder.build(), new ConnectivityManager.NetworkCallback() {
|
||||
@Override
|
||||
public void onAvailable(Network network) {
|
||||
onDeviceListChanged();
|
||||
onNetworkChange();
|
||||
}
|
||||
@Override
|
||||
public void onLost(Network network) {
|
||||
onDeviceListChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Log.i("KDE/BackgroundService", "Service not started yet, initializing...");
|
||||
|
||||
PluginFactory.initPluginInfo(getBaseContext());
|
||||
@@ -335,13 +356,7 @@ public class BackgroundService extends Service {
|
||||
}
|
||||
|
||||
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
|
||||
|
||||
NotificationCompat.Builder notification;
|
||||
if (connectedDevices.isEmpty()) {
|
||||
notification = new NotificationCompat.Builder(this, NotificationHelper.Channels.PERSISTENT_NO_DEVICES);
|
||||
} else {
|
||||
notification = new NotificationCompat.Builder(this, NotificationHelper.Channels.PERSISTENT_WITH_DEVICES);
|
||||
}
|
||||
NotificationCompat.Builder notification = new NotificationCompat.Builder(this, NotificationHelper.Channels.PERSISTENT);
|
||||
notification
|
||||
.setSmallIcon(R.drawable.ic_notification)
|
||||
.setOngoing(true)
|
||||
@@ -370,21 +385,24 @@ public class BackgroundService extends Service {
|
||||
}
|
||||
|
||||
if (connectedDeviceIds.size() == 1) {
|
||||
// Adding two action buttons only when there is a single device connected.
|
||||
// Setting up Send File Intent.
|
||||
Intent sendFile = new Intent(this, SendFileActivity.class);
|
||||
sendFile.putExtra("deviceId", connectedDeviceIds.get(0));
|
||||
PendingIntent sendPendingFile = PendingIntent.getActivity(this, 1, sendFile, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
|
||||
notification.addAction(0, getString(R.string.send_files), sendPendingFile);
|
||||
String deviceId = connectedDeviceIds.get(0);
|
||||
Device device = getDevice(deviceId);
|
||||
if (device != null) {
|
||||
// Adding two action buttons only when there is a single device connected.
|
||||
// Setting up Send File Intent.
|
||||
Intent sendFile = new Intent(this, SendFileActivity.class);
|
||||
sendFile.putExtra("deviceId", deviceId);
|
||||
PendingIntent sendPendingFile = PendingIntent.getActivity(this, 1, sendFile, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
|
||||
notification.addAction(0, getString(R.string.send_files), sendPendingFile);
|
||||
|
||||
// Checking if there are registered commands and adding the button.
|
||||
Device device = getDevice(connectedDeviceIds.get(0));
|
||||
RunCommandPlugin plugin = (RunCommandPlugin) device.getPlugin("RunCommandPlugin");
|
||||
if (plugin != null && !plugin.getCommandList().isEmpty()) {
|
||||
Intent runCommand = new Intent(this, RunCommandActivity.class);
|
||||
runCommand.putExtra("deviceId", connectedDeviceIds.get(0));
|
||||
PendingIntent runPendingCommand = PendingIntent.getActivity(this, 2, runCommand, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
|
||||
notification.addAction(0, getString(R.string.pref_plugin_runcommand), runPendingCommand);
|
||||
// Checking if there are registered commands and adding the button.
|
||||
RunCommandPlugin plugin = (RunCommandPlugin) device.getPlugin("RunCommandPlugin");
|
||||
if (plugin != null && !plugin.getCommandList().isEmpty()) {
|
||||
Intent runCommand = new Intent(this, RunCommandActivity.class);
|
||||
runCommand.putExtra("deviceId", connectedDeviceIds.get(0));
|
||||
PendingIntent runPendingCommand = PendingIntent.getActivity(this, 2, runCommand, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
|
||||
notification.addAction(0, getString(R.string.pref_plugin_runcommand), runPendingCommand);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -18,8 +18,7 @@ import java.util.List;
|
||||
public class NotificationHelper {
|
||||
|
||||
public static class Channels {
|
||||
public final static String PERSISTENT_NO_DEVICES = "persistent_no_devices";
|
||||
public final static String PERSISTENT_WITH_DEVICES = "persistent_with_devices";
|
||||
public final static String PERSISTENT = "persistent";
|
||||
public final static String DEFAULT = "default";
|
||||
public final static String MEDIA_CONTROL = "media_control";
|
||||
public final static String FILETRANSFER = "filetransfer";
|
||||
@@ -47,13 +46,9 @@ public class NotificationHelper {
|
||||
}
|
||||
|
||||
public static void initializeChannels(Context context) {
|
||||
final NotificationChannelCompat persistentChannelNoDevices = new NotificationChannelCompat
|
||||
.Builder(Channels.PERSISTENT_NO_DEVICES, NotificationManagerCompat.IMPORTANCE_MIN)
|
||||
.setName(context.getString(R.string.notification_channel_persistent_no_devices))
|
||||
.build();
|
||||
final NotificationChannelCompat persistentChannelWithDevices = new NotificationChannelCompat
|
||||
.Builder(Channels.PERSISTENT_WITH_DEVICES, NotificationManagerCompat.IMPORTANCE_MIN)
|
||||
.setName(context.getString(R.string.notification_channel_persistent_with_devices))
|
||||
final NotificationChannelCompat persistentChannel = new NotificationChannelCompat
|
||||
.Builder(Channels.PERSISTENT, NotificationManagerCompat.IMPORTANCE_MIN)
|
||||
.setName(context.getString(R.string.notification_channel_persistent))
|
||||
.build();
|
||||
final NotificationChannelCompat defaultChannel = new NotificationChannelCompat
|
||||
.Builder(Channels.DEFAULT, NotificationManagerCompat.IMPORTANCE_DEFAULT)
|
||||
@@ -81,9 +76,9 @@ public class NotificationHelper {
|
||||
.setName(context.getString(R.string.notification_channel_high_priority))
|
||||
.build();
|
||||
|
||||
final List<NotificationChannelCompat> channels = Arrays.asList(persistentChannelNoDevices,
|
||||
persistentChannelWithDevices, defaultChannel, mediaChannel, fileTransferChannel,
|
||||
receiveNotificationChannel, smsMmsChannel, highPriorityChannel);
|
||||
final List<NotificationChannelCompat> channels = Arrays.asList(persistentChannel,
|
||||
defaultChannel, mediaChannel, fileTransferChannel, receiveNotificationChannel,
|
||||
smsMmsChannel, highPriorityChannel);
|
||||
NotificationManagerCompat.from(context).createNotificationChannelsCompat(channels);
|
||||
}
|
||||
|
||||
|
@@ -211,6 +211,6 @@ public class FindMyPhonePlugin extends Plugin {
|
||||
|
||||
@Override
|
||||
public PluginSettingsFragment getSettingsFragment(Activity activity) {
|
||||
return FindMyPhoneSettingsFragment.newInstance(getPluginKey());
|
||||
return FindMyPhoneSettingsFragment.newInstance(getPluginKey(), R.xml.findmyphoneplugin_preferences);
|
||||
}
|
||||
}
|
||||
|
@@ -28,9 +28,9 @@ public class FindMyPhoneSettingsFragment extends PluginSettingsFragment {
|
||||
private SharedPreferences sharedPreferences;
|
||||
private Preference ringtonePreference;
|
||||
|
||||
public static FindMyPhoneSettingsFragment newInstance(@NonNull String pluginKey) {
|
||||
public static FindMyPhoneSettingsFragment newInstance(@NonNull String pluginKey, int layout) {
|
||||
FindMyPhoneSettingsFragment fragment = new FindMyPhoneSettingsFragment();
|
||||
fragment.setArguments(pluginKey);
|
||||
fragment.setArguments(pluginKey, layout);
|
||||
|
||||
return fragment;
|
||||
}
|
||||
|
@@ -19,6 +19,7 @@ import android.view.MenuItem;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.content.ContextCompat;
|
||||
@@ -171,13 +172,6 @@ public class MousePadActivity extends AppCompatActivity implements GestureDetect
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
MenuInflater inflater = getMenuInflater();
|
||||
inflater.inflate(R.menu.menu_mousepad, menu);
|
||||
|
||||
BackgroundService.RunWithPlugin(this, deviceId, MousePadPlugin.class, plugin -> {
|
||||
if (!plugin.isKeyboardEnabled()) {
|
||||
menu.removeItem(R.id.menu_show_keyboard);
|
||||
}
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -191,12 +185,24 @@ public class MousePadActivity extends AppCompatActivity implements GestureDetect
|
||||
sendMiddleClick();
|
||||
return true;
|
||||
} else if (id == R.id.menu_show_keyboard) {
|
||||
showKeyboard();
|
||||
BackgroundService.RunWithPlugin(this, deviceId, MousePadPlugin.class, plugin -> {
|
||||
if (plugin.isKeyboardEnabled()) {
|
||||
showKeyboard();
|
||||
} else {
|
||||
Toast toast = Toast.makeText(this, R.string.mousepad_keyboard_input_not_supported, Toast.LENGTH_SHORT);
|
||||
toast.show();
|
||||
}
|
||||
});
|
||||
return true;
|
||||
} else if (id == R.id.menu_open_compose_send) {
|
||||
Intent intent = new Intent(this, ComposeSendActivity.class);
|
||||
intent.putExtra("org.kde.kdeconnect.Plugins.MousePadPlugin.deviceId", deviceId);
|
||||
startActivity(intent);
|
||||
BackgroundService.RunWithPlugin(this, deviceId, MousePadPlugin.class, plugin -> {
|
||||
if (plugin.isKeyboardEnabled()) {
|
||||
showCompose();
|
||||
} else {
|
||||
Toast toast = Toast.makeText(this, R.string.mousepad_keyboard_input_not_supported, Toast.LENGTH_SHORT);
|
||||
toast.show();
|
||||
}
|
||||
});
|
||||
return true;
|
||||
} else {
|
||||
return super.onOptionsItemSelected(item);
|
||||
@@ -397,6 +403,12 @@ public class MousePadActivity extends AppCompatActivity implements GestureDetect
|
||||
imm.toggleSoftInputFromWindow(keyListenerView.getWindowToken(), 0, 0);
|
||||
}
|
||||
|
||||
private void showCompose() {
|
||||
Intent intent = new Intent(this, ComposeSendActivity.class);
|
||||
intent.putExtra("org.kde.kdeconnect.Plugins.MousePadPlugin.deviceId", deviceId);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onSupportNavigateUp() {
|
||||
super.onBackPressed();
|
||||
|
@@ -13,6 +13,7 @@ import android.graphics.drawable.Drawable;
|
||||
import org.kde.kdeconnect.NetworkPacket;
|
||||
import org.kde.kdeconnect.Plugins.Plugin;
|
||||
import org.kde.kdeconnect.Plugins.PluginFactory;
|
||||
import org.kde.kdeconnect.UserInterface.PluginSettingsFragment;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
@@ -54,6 +55,11 @@ public class MousePadPlugin extends Plugin {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PluginSettingsFragment getSettingsFragment(Activity activity) {
|
||||
return PluginSettingsFragment.newInstance(getPluginKey(), R.xml.mousepadplugin_preferences);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasMainActivity() {
|
||||
return true;
|
||||
|
@@ -20,7 +20,7 @@ import org.kde.kdeconnect.UserInterface.MainActivity;
|
||||
import org.kde.kdeconnect.UserInterface.StartActivityAlertDialogFragment;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
//@PluginFactory.LoadablePlugin
|
||||
@PluginFactory.LoadablePlugin
|
||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||
public class MouseReceiverPlugin extends Plugin {
|
||||
private final static String PACKET_TYPE_MOUSEPAD_REQUEST = "kdeconnect.mousepad.request";
|
||||
|
@@ -19,6 +19,7 @@ import androidx.core.content.ContextCompat;
|
||||
import org.kde.kdeconnect.NetworkPacket;
|
||||
import org.kde.kdeconnect.Plugins.Plugin;
|
||||
import org.kde.kdeconnect.Plugins.PluginFactory;
|
||||
import org.kde.kdeconnect.UserInterface.PluginSettingsFragment;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
@@ -254,6 +255,11 @@ public class MprisPlugin extends Plugin {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PluginSettingsFragment getSettingsFragment(Activity activity) {
|
||||
return PluginSettingsFragment.newInstance(getPluginKey(), R.xml.mprisplugin_preferences);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreate() {
|
||||
MprisMediaSession.getInstance().onCreate(context.getApplicationContext(), this, device.getDeviceId());
|
||||
|
@@ -165,6 +165,11 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
||||
|
||||
actions.remove(id);
|
||||
|
||||
if (!appDatabase.isEnabled(statusBarNotification.getPackageName())) {
|
||||
currentNotifications.remove(id);
|
||||
return;
|
||||
}
|
||||
|
||||
NetworkPacket np = new NetworkPacket(PACKET_TYPE_NOTIFICATION);
|
||||
np.set("id", id);
|
||||
np.set("isCancel", true);
|
||||
|
@@ -166,7 +166,8 @@ public abstract class Plugin {
|
||||
* @return The PluginSettingsFragment used to display this plugins settings
|
||||
*/
|
||||
public PluginSettingsFragment getSettingsFragment(Activity activity) {
|
||||
return PluginSettingsFragment.newInstance(getPluginKey());
|
||||
throw new RuntimeException("Plugin doesn't reimplement getSettingsFragment: " + getPluginKey());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -6,6 +6,7 @@
|
||||
|
||||
package org.kde.kdeconnect.Plugins.RemoteKeyboardPlugin;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.SystemClock;
|
||||
@@ -24,6 +25,7 @@ import org.kde.kdeconnect.Plugins.Plugin;
|
||||
import org.kde.kdeconnect.Plugins.PluginFactory;
|
||||
import org.kde.kdeconnect.UserInterface.MainActivity;
|
||||
import org.kde.kdeconnect.UserInterface.StartActivityAlertDialogFragment;
|
||||
import org.kde.kdeconnect.UserInterface.PluginSettingsFragment;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -159,6 +161,11 @@ public class RemoteKeyboardPlugin extends Plugin implements SharedPreferences.On
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PluginSettingsFragment getSettingsFragment(Activity activity) {
|
||||
return PluginSettingsFragment.newInstance(getPluginKey(), R.xml.remotekeyboardplugin_preferences);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasMainActivity() {
|
||||
return false;
|
||||
|
@@ -8,6 +8,7 @@
|
||||
|
||||
package org.kde.kdeconnect.Plugins.SMSPlugin;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.Manifest;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.BroadcastReceiver;
|
||||
@@ -36,6 +37,7 @@ import org.kde.kdeconnect.NetworkPacket;
|
||||
import org.kde.kdeconnect.Plugins.Plugin;
|
||||
import org.kde.kdeconnect.Plugins.PluginFactory;
|
||||
import org.kde.kdeconnect.Plugins.TelephonyPlugin.TelephonyPlugin;
|
||||
import org.kde.kdeconnect.UserInterface.PluginSettingsFragment;
|
||||
import org.kde.kdeconnect_tp.BuildConfig;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
@@ -557,6 +559,11 @@ public class SMSPlugin extends Plugin {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PluginSettingsFragment getSettingsFragment(Activity activity) {
|
||||
return PluginSettingsFragment.newInstance(getPluginKey(), R.xml.smsplugin_preferences);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getSupportedPacketTypes() {
|
||||
return new String[]{
|
||||
|
@@ -263,7 +263,7 @@ public class SftpPlugin extends Plugin implements SharedPreferences.OnSharedPref
|
||||
|
||||
@Override
|
||||
public PluginSettingsFragment getSettingsFragment(Activity activity) {
|
||||
return SftpSettingsFragment.newInstance(getPluginKey());
|
||||
return SftpSettingsFragment.newInstance(getPluginKey(), R.xml.sftpplugin_preferences);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -64,9 +64,9 @@ public class SftpSettingsFragment
|
||||
private ActionMode actionMode;
|
||||
private JSONObject savedActionModeState;
|
||||
|
||||
public static SftpSettingsFragment newInstance(@NonNull String pluginKey) {
|
||||
public static SftpSettingsFragment newInstance(@NonNull String pluginKey, int layout) {
|
||||
SftpSettingsFragment fragment = new SftpSettingsFragment();
|
||||
fragment.setArguments(pluginKey);
|
||||
fragment.setArguments(pluginKey, layout);
|
||||
|
||||
return fragment;
|
||||
}
|
||||
|
@@ -197,7 +197,7 @@ public class SharePlugin extends Plugin {
|
||||
|
||||
@Override
|
||||
public PluginSettingsFragment getSettingsFragment(Activity activity) {
|
||||
return ShareSettingsFragment.newInstance(getPluginKey());
|
||||
return ShareSettingsFragment.newInstance(getPluginKey(), R.xml.shareplugin_preferences);
|
||||
}
|
||||
|
||||
void sendUriList(final ArrayList<Uri> uriList) {
|
||||
|
@@ -37,9 +37,9 @@ public class ShareSettingsFragment extends PluginSettingsFragment {
|
||||
|
||||
private Preference filePicker;
|
||||
|
||||
public static ShareSettingsFragment newInstance(@NonNull String pluginKey) {
|
||||
public static ShareSettingsFragment newInstance(@NonNull String pluginKey, int layout) {
|
||||
ShareSettingsFragment fragment = new ShareSettingsFragment();
|
||||
fragment.setArguments(pluginKey);
|
||||
fragment.setArguments(pluginKey, layout);
|
||||
|
||||
return fragment;
|
||||
}
|
||||
|
@@ -6,6 +6,7 @@
|
||||
|
||||
package org.kde.kdeconnect.Plugins.TelephonyPlugin;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.Manifest;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
@@ -26,6 +27,7 @@ import org.kde.kdeconnect.Helpers.ContactsHelper;
|
||||
import org.kde.kdeconnect.NetworkPacket;
|
||||
import org.kde.kdeconnect.Plugins.Plugin;
|
||||
import org.kde.kdeconnect.Plugins.PluginFactory;
|
||||
import org.kde.kdeconnect.UserInterface.PluginSettingsFragment;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
import java.util.Map;
|
||||
@@ -318,4 +320,9 @@ public class TelephonyPlugin extends Plugin {
|
||||
public boolean hasSettings() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PluginSettingsFragment getSettingsFragment(Activity activity) {
|
||||
return PluginSettingsFragment.newInstance(getPluginKey(), R.xml.telephonyplugin_preferences);
|
||||
}
|
||||
}
|
||||
|
@@ -269,16 +269,17 @@ public class DeviceFragment extends Fragment {
|
||||
}
|
||||
|
||||
private void refreshUI() {
|
||||
if (device == null || binding == null) {
|
||||
return;
|
||||
if (device != null) {
|
||||
//Once in-app, there is no point in keep displaying the notification if any
|
||||
device.hidePairingNotification();
|
||||
}
|
||||
|
||||
//Once in-app, there is no point in keep displaying the notification if any
|
||||
device.hidePairingNotification();
|
||||
|
||||
mActivity.runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (device == null || binding == null) {
|
||||
return;
|
||||
}
|
||||
if (device.isPairRequestedByPeer()) {
|
||||
binding.pairMessage.setText(R.string.pair_requested);
|
||||
binding.pairVerification.setVisibility(View.VISIBLE);
|
||||
|
@@ -18,28 +18,33 @@ import org.kde.kdeconnect.Device;
|
||||
import org.kde.kdeconnect.Plugins.Plugin;
|
||||
import org.kde.kdeconnect.Plugins.PluginFactory;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class PluginSettingsFragment extends PreferenceFragmentCompat {
|
||||
private static final String ARG_PLUGIN_KEY = "plugin_key";
|
||||
private static final String ARG_LAYOUT = "layout";
|
||||
|
||||
private String pluginKey;
|
||||
private int layout;
|
||||
protected Device device;
|
||||
protected Plugin plugin;
|
||||
|
||||
public static PluginSettingsFragment newInstance(@NonNull String pluginKey) {
|
||||
public static PluginSettingsFragment newInstance(@NonNull String pluginKey, int settingsLayout) {
|
||||
PluginSettingsFragment fragment = new PluginSettingsFragment();
|
||||
fragment.setArguments(pluginKey);
|
||||
fragment.setArguments(pluginKey, settingsLayout);
|
||||
|
||||
return fragment;
|
||||
}
|
||||
|
||||
public PluginSettingsFragment() {}
|
||||
|
||||
protected Bundle setArguments(@NonNull String pluginKey) {
|
||||
protected Bundle setArguments(@NonNull String pluginKey, int settingsLayout) {
|
||||
Bundle args = new Bundle();
|
||||
args.putString(ARG_PLUGIN_KEY, pluginKey);
|
||||
args.putInt(ARG_LAYOUT, settingsLayout);
|
||||
|
||||
|
||||
setArguments(args);
|
||||
|
||||
@@ -52,7 +57,8 @@ public class PluginSettingsFragment extends PreferenceFragmentCompat {
|
||||
throw new RuntimeException("You must provide a pluginKey by calling setArguments(@NonNull String pluginKey)");
|
||||
}
|
||||
|
||||
pluginKey = getArguments().getString(ARG_PLUGIN_KEY);
|
||||
this.pluginKey = getArguments().getString(ARG_PLUGIN_KEY);
|
||||
this.layout = getArguments().getInt(ARG_LAYOUT);
|
||||
this.device = getDeviceOrThrow(getDeviceId());
|
||||
this.plugin = device.getPlugin(pluginKey);
|
||||
|
||||
@@ -67,9 +73,7 @@ public class PluginSettingsFragment extends PreferenceFragmentCompat {
|
||||
prefsManager.setSharedPreferencesMode(Context.MODE_PRIVATE);
|
||||
}
|
||||
|
||||
int resFile = getResources().getIdentifier(pluginKey.toLowerCase(Locale.ENGLISH) + "_preferences", "xml",
|
||||
requireContext().getPackageName());
|
||||
addPreferencesFromResource(resFile);
|
||||
addPreferencesFromResource(layout);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -42,7 +42,7 @@ import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
|
||||
@RunWith(PowerMockRunner.class)
|
||||
@PrepareForTest({Base64.class, Log.class, PreferenceManager.class, ContextCompat.class})
|
||||
|
@@ -1,69 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2015 Vineet Garg <grg.vineet@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
package org.kde.kdeconnect;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.kde.kdeconnect.Backends.LanBackend.LanLink;
|
||||
import org.kde.kdeconnect.Backends.LanBackend.LanLinkProvider;
|
||||
import org.kde.kdeconnect.Helpers.DeviceHelper;
|
||||
import org.mockito.Mockito;
|
||||
import org.powermock.api.mockito.PowerMockito;
|
||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||
import org.powermock.modules.junit4.PowerMockRunner;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.Socket;
|
||||
import java.util.HashMap;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
|
||||
@RunWith(PowerMockRunner.class)
|
||||
@PrepareForTest({DeviceHelper.class, Log.class})
|
||||
public class LanLinkProviderTest {
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
PowerMockito.mockStatic(DeviceHelper.class);
|
||||
PowerMockito.when(DeviceHelper.getDeviceId(any())).thenReturn("123");
|
||||
|
||||
PowerMockito.mockStatic(Log.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIdentityPacketReceived() throws Exception {
|
||||
|
||||
LanLinkProvider linkProvider = new LanLinkProvider(null);
|
||||
|
||||
NetworkPacket networkPacket = Mockito.mock(NetworkPacket.class);
|
||||
Mockito.when(networkPacket.getType()).thenReturn("kdeconnect.identity");
|
||||
Mockito.when(networkPacket.getString("deviceId")).thenReturn("testDevice");
|
||||
Mockito.when(networkPacket.getString("deviceName")).thenReturn("Test Device");
|
||||
Mockito.when(networkPacket.getInt("protocolVersion")).thenReturn(5);
|
||||
Mockito.when(networkPacket.getString("deviceType")).thenReturn("phone");
|
||||
|
||||
String serialized = "{\"type\":\"kdeconnect.identity\",\"id\":12345,\"body\":{\"deviceName\":\"Test Device\",\"deviceType\":\"phone\",\"deviceId\":\"testDevice\",\"protocolVersion\":5}}";
|
||||
Mockito.when(networkPacket.serialize()).thenReturn(serialized);
|
||||
|
||||
Socket channel = Mockito.mock(Socket.class);
|
||||
Method method = LanLinkProvider.class.getDeclaredMethod("identityPacketReceived", NetworkPacket.class, Socket.class, LanLink.ConnectionStarted.class);
|
||||
method.setAccessible(true);
|
||||
method.invoke(linkProvider, networkPacket, channel, LanLink.ConnectionStarted.Locally);
|
||||
|
||||
HashMap<String, LanLink> visibleComputers;
|
||||
Field field = LanLinkProvider.class.getDeclaredField("visibleComputers");
|
||||
field.setAccessible(true);
|
||||
visibleComputers = (HashMap<String, LanLink>) field.get(linkProvider);
|
||||
assertNotNull(visibleComputers.get("testDevice"));
|
||||
|
||||
}
|
||||
}
|
@@ -1,229 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2015 Vineet Garg <grg.vineet@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
package org.kde.kdeconnect;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.kde.kdeconnect.Backends.LanBackend.LanLink;
|
||||
import org.kde.kdeconnect.Backends.LanBackend.LanLinkProvider;
|
||||
import org.mockito.Mockito;
|
||||
import org.powermock.api.mockito.PowerMockito;
|
||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||
import org.powermock.modules.junit4.PowerMockRunner;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
|
||||
import javax.net.ssl.SSLSocket;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
@RunWith(PowerMockRunner.class)
|
||||
@PrepareForTest({Log.class})
|
||||
public class LanLinkTest {
|
||||
|
||||
private LanLink badLanLink;
|
||||
private LanLink goodLanLink;
|
||||
|
||||
private OutputStream goodOutputStream;
|
||||
|
||||
private Device.SendPacketStatusCallback callback;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
PowerMockito.mockStatic(Log.class);
|
||||
|
||||
LanLinkProvider linkProvider = Mockito.mock(LanLinkProvider.class);
|
||||
Mockito.when(linkProvider.getName()).thenReturn("LanLinkProvider");
|
||||
|
||||
callback = Mockito.mock(Device.SendPacketStatusCallback.class);
|
||||
|
||||
goodOutputStream = Mockito.mock(OutputStream.class);
|
||||
OutputStream badOutputStream = Mockito.mock(OutputStream.class);
|
||||
Mockito.doThrow(new IOException("AAA")).when(badOutputStream).write(Mockito.any(byte[].class));
|
||||
|
||||
|
||||
SSLSocket socketMock = Mockito.mock(SSLSocket.class);
|
||||
Mockito.when(socketMock.getRemoteSocketAddress()).thenReturn(new InetSocketAddress(5000));
|
||||
Mockito.when(socketMock.getOutputStream()).thenReturn(goodOutputStream);
|
||||
|
||||
SSLSocket socketBadMock = Mockito.mock(SSLSocket.class);
|
||||
Mockito.when(socketBadMock.getRemoteSocketAddress()).thenReturn(new InetSocketAddress(5000));
|
||||
Mockito.when(socketBadMock.getOutputStream()).thenReturn(badOutputStream);
|
||||
|
||||
Context context = Mockito.mock(Context.class);
|
||||
goodLanLink = new LanLink(context, "testDevice", linkProvider, socketMock, LanLink.ConnectionStarted.Remotely);
|
||||
badLanLink = new LanLink(context, "testDevice", linkProvider, socketBadMock, LanLink.ConnectionStarted.Remotely);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendPacketSuccess() throws JSONException {
|
||||
|
||||
NetworkPacket testPacket = Mockito.mock(NetworkPacket.class);
|
||||
Mockito.when(testPacket.getType()).thenReturn("kdeconnect.test");
|
||||
Mockito.when(testPacket.getBoolean("isTesting")).thenReturn(true);
|
||||
Mockito.when(testPacket.getString("testName")).thenReturn("testSendPacketSuccess");
|
||||
Mockito.when(testPacket.serialize()).thenReturn("{\"id\":123,\"type\":\"kdeconnect.test\",\"body\":{\"isTesting\":true,\"testName\":\"testSendPacketSuccess\"}}");
|
||||
|
||||
goodLanLink.sendPacket(testPacket, callback);
|
||||
|
||||
Mockito.verify(callback).onSuccess();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendPacketFail() throws JSONException {
|
||||
|
||||
NetworkPacket testPacket = Mockito.mock(NetworkPacket.class);
|
||||
Mockito.when(testPacket.getType()).thenReturn("kdeconnect.test");
|
||||
Mockito.when(testPacket.getBoolean("isTesting")).thenReturn(true);
|
||||
Mockito.when(testPacket.getString("testName")).thenReturn("testSendPacketFail");
|
||||
Mockito.when(testPacket.serialize()).thenReturn("{\"id\":123,\"type\":\"kdeconnect.test\",\"body\":{\"isTesting\":true,\"testName\":\"testSendPacketFail\"}}");
|
||||
|
||||
badLanLink.sendPacket(testPacket, callback);
|
||||
|
||||
Mockito.verify(callback).onFailure(Mockito.any(IOException.class));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendPayload() throws Exception {
|
||||
|
||||
class Downloader extends Thread {
|
||||
|
||||
NetworkPacket np;
|
||||
final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
|
||||
void setNetworkPacket(NetworkPacket networkPacket) {
|
||||
this.np = networkPacket;
|
||||
}
|
||||
|
||||
ByteArrayOutputStream getOutputStream() {
|
||||
return outputStream;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
|
||||
Socket socket = null;
|
||||
try {
|
||||
socket = new Socket();
|
||||
int tcpPort = np.getPayloadTransferInfo().getInt("port");
|
||||
InetSocketAddress address = new InetSocketAddress(5000);
|
||||
socket.connect(new InetSocketAddress(address.getAddress(), tcpPort));
|
||||
np.setPayload(new NetworkPacket.Payload(socket.getInputStream(), np.getPayloadSize()));
|
||||
} catch (Exception e) {
|
||||
socket.close();
|
||||
Log.e("KDE/LanLinkTest", "Exception connecting to remote socket", e);
|
||||
throw e;
|
||||
}
|
||||
|
||||
final InputStream input = np.getPayload().getInputStream();
|
||||
final long fileLength = np.getPayloadSize();
|
||||
|
||||
byte[] data = new byte[1024];
|
||||
long progress = 0, prevProgressPercentage = 0;
|
||||
int count;
|
||||
while ((count = input.read(data)) >= 0) {
|
||||
progress += count;
|
||||
outputStream.write(data, 0, count);
|
||||
if (fileLength > 0) {
|
||||
if (progress >= fileLength) break;
|
||||
long progressPercentage = (progress * 100 / fileLength);
|
||||
if (progressPercentage != prevProgressPercentage) {
|
||||
prevProgressPercentage = progressPercentage;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
outputStream.close();
|
||||
input.close();
|
||||
|
||||
} catch (Exception e) {
|
||||
Log.e("Downloader Test", "Exception", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
final Downloader downloader = new Downloader();
|
||||
|
||||
// Using byte array for payload, try to use input stream as used in real device
|
||||
String dataString = "Lorem ipsum dolor sit amet, consectetur adipiscing elit." +
|
||||
" Cras vel erat et ante fringilla tristique. Sed consequat ligula at interdum " +
|
||||
"rhoncus. Integer semper enim felis, id sodales tellus aliquet eget." +
|
||||
" Sed fringilla ac metus eget dictum. Aliquam euismod non sem sit" +
|
||||
" amet dapibus. Interdum et malesuada fames ac ante ipsum primis " +
|
||||
"in faucibus. Nam et ligula placerat, varius justo eu, convallis " +
|
||||
"lorem. Nam consequat consequat tortor et gravida. Praesent " +
|
||||
"ultricies tortor eget ex elementum gravida. Suspendisse aliquet " +
|
||||
"erat a orci feugiat dignissim.";
|
||||
|
||||
// reallyLongString contains dataString 16 times
|
||||
String reallyLongString = dataString + dataString;
|
||||
reallyLongString = reallyLongString + reallyLongString;
|
||||
reallyLongString = reallyLongString + reallyLongString;
|
||||
reallyLongString = reallyLongString + reallyLongString;
|
||||
|
||||
final byte[] data = reallyLongString.getBytes();
|
||||
|
||||
final JSONObject sharePacketJson = new JSONObject("{\"id\":123,\"body\":{\"filename\":\"data.txt\"},\"payloadTransferInfo\":{},\"payloadSize\":8720,\"type\":\"kdeconnect.share\"}");
|
||||
|
||||
// Mocking share package
|
||||
final NetworkPacket sharePacket = Mockito.mock(NetworkPacket.class);
|
||||
Mockito.when(sharePacket.getType()).thenReturn("kdeconnect.share");
|
||||
Mockito.when(sharePacket.hasPayload()).thenReturn(true);
|
||||
Mockito.when(sharePacket.hasPayloadTransferInfo()).thenReturn(true);
|
||||
Mockito.doAnswer(invocationOnMock -> sharePacketJson.toString()).when(sharePacket).serialize();
|
||||
Mockito.when(sharePacket.getPayload()).thenReturn(new NetworkPacket.Payload(new ByteArrayInputStream(data), -1));
|
||||
Mockito.when(sharePacket.getPayloadSize()).thenReturn((long) data.length);
|
||||
Mockito.doAnswer(invocationOnMock -> sharePacketJson.getJSONObject("payloadTransferInfo")).when(sharePacket).getPayloadTransferInfo();
|
||||
Mockito.doAnswer(invocationOnMock -> {
|
||||
JSONObject object = (JSONObject) invocationOnMock.getArguments()[0];
|
||||
|
||||
sharePacketJson.put("payloadTransferInfo", object);
|
||||
return null;
|
||||
}).when(sharePacket).setPayloadTransferInfo(Mockito.any(JSONObject.class));
|
||||
|
||||
Mockito.doAnswer(invocationOnMock -> {
|
||||
|
||||
Log.e("LanLinkTest", "Write to stream");
|
||||
String stringNetworkPacket = new String((byte[]) invocationOnMock.getArguments()[0]);
|
||||
final NetworkPacket np = NetworkPacket.unserialize(stringNetworkPacket);
|
||||
|
||||
downloader.setNetworkPacket(np);
|
||||
downloader.start();
|
||||
|
||||
return stringNetworkPacket.length();
|
||||
}).when(goodOutputStream).write(Mockito.any(byte[].class));
|
||||
|
||||
goodLanLink.sendPacket(sharePacket, callback);
|
||||
|
||||
try {
|
||||
// Wait 1 secs for downloader to finish (if some error, it will continue and assert will fail)
|
||||
downloader.join(1000);
|
||||
} catch (Exception e) {
|
||||
Log.e("Test", "Exception", e);
|
||||
throw e;
|
||||
}
|
||||
assertEquals(new String(data), new String(downloader.getOutputStream().toByteArray()));
|
||||
|
||||
Mockito.verify(callback).onSuccess();
|
||||
|
||||
}
|
||||
}
|
@@ -23,8 +23,8 @@ import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Matchers.anyInt;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
|
||||
@RunWith(PowerMockRunner.class)
|
||||
@PrepareForTest({DeviceHelper.class, Log.class})
|
||||
|
Reference in New Issue
Block a user