mirror of
https://github.com/KDE/kdeconnect-android
synced 2025-09-01 06:35:09 +00:00
Compare commits
28 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
d6a284cb25 | ||
|
fc0320e2b3 | ||
|
d914c8763f | ||
|
e95e66b1cb | ||
|
d1d451be46 | ||
|
d2cd898d6a | ||
|
bc9032119a | ||
|
ccc1e74e88 | ||
|
f6ca187fb2 | ||
|
edc2de7a33 | ||
|
b107c3d37c | ||
|
66b6c2c533 | ||
|
4691123cfe | ||
|
15a18fa5b8 | ||
|
af791fa676 | ||
|
d09ad45e11 | ||
|
dd210259b9 | ||
|
19f4cd8c42 | ||
|
f6482155c4 | ||
|
e26ff862a9 | ||
|
43800903a2 | ||
|
3f829681a2 | ||
|
9aeb49ad49 | ||
|
b52ba2e29d | ||
|
8d71354aea | ||
|
10b2d561f0 | ||
|
f3ada9738d | ||
|
df1a9fb557 |
@@ -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="11510"
|
||||
android:versionName="1.15.1">
|
||||
android:versionCode="11600"
|
||||
android:versionName="1.16.0">
|
||||
|
||||
<supports-screens
|
||||
android:anyDensity="true"
|
||||
|
14
build.gradle
14
build.gradle
@@ -6,7 +6,7 @@ apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.4.10'
|
||||
ext.kotlin_version = '1.4.21'
|
||||
repositories {
|
||||
jcenter()
|
||||
google()
|
||||
@@ -14,7 +14,7 @@ buildscript {
|
||||
dependencies {
|
||||
// Pinned 4.0.2 due to this bug on 4.1: https://issuetracker.google.com/issues/172096891
|
||||
//noinspection GradleDependency
|
||||
classpath 'com.android.tools.build:gradle:4.0.2'
|
||||
classpath 'com.android.tools.build:gradle:4.1.1'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
}
|
||||
@@ -152,10 +152,10 @@ dependencies {
|
||||
*/
|
||||
}
|
||||
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.10'
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.1'
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
|
||||
implementation 'androidx.media:media:1.2.0'
|
||||
implementation 'androidx.media:media:1.2.1'
|
||||
implementation 'androidx.appcompat:appcompat:1.2.0'
|
||||
implementation 'androidx.core:core-ktx:1.3.2'
|
||||
implementation 'androidx.preference:preference:1.1.1'
|
||||
@@ -176,10 +176,6 @@ dependencies {
|
||||
//implementation('com.github.bright:slf4android:0.1.6') { transitive = true } // For org.apache.sshd debugging
|
||||
implementation 'com.madgag.spongycastle:bcpkix-jdk15on:1.58.0.0' //For SSL certificate generation
|
||||
|
||||
//noinspection AnnotationProcessorOnCompilePath - c.f. https://issuetracker.google.com/issues/140881211
|
||||
implementation 'com.jakewharton:butterknife:10.2.1'
|
||||
annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'
|
||||
|
||||
implementation 'org.atteo.classindex:classindex:3.6'
|
||||
annotationProcessor 'org.atteo.classindex:classindex:3.6'
|
||||
|
||||
@@ -187,7 +183,7 @@ dependencies {
|
||||
|
||||
implementation 'commons-io:commons-io:2.7'
|
||||
implementation 'org.apache.commons:commons-collections4:4.4'
|
||||
implementation 'org.apache.commons:commons-lang3:3.10'
|
||||
implementation 'org.apache.commons:commons-lang3:3.11'
|
||||
|
||||
// Kotlin
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||
|
10
res/drawable/ic_key.xml
Normal file
10
res/drawable/ic_key.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M12.65,10C11.83,7.67 9.61,6 7,6c-3.31,0 -6,2.69 -6,6s2.69,6 6,6c2.61,0 4.83,-1.67 5.65,-4H17v4h4v-4h2v-4H12.65zM7,14c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2z"/>
|
||||
</vector>
|
@@ -30,6 +30,18 @@
|
||||
android:text="@string/device_not_paired"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/pair_verification"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:drawablePadding="5dp"
|
||||
android:drawableLeft="@drawable/ic_key"
|
||||
android:drawableStart="@drawable/ic_key"
|
||||
android:layout_marginBottom="8dip"
|
||||
android:visibility="gone"
|
||||
android:text=""
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/pair_button"
|
||||
android:layout_width="match_parent"
|
||||
|
@@ -19,6 +19,7 @@
|
||||
|
||||
<include
|
||||
layout="@layout/mpris_control"
|
||||
android:id="@+id/mpris_control"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
|
@@ -1,9 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<CheckBox
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/checkbox"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:focusable="false"
|
||||
android:clickable="false"
|
||||
tools:viewBindingIgnore="true"
|
||||
android:background="@null"/>
|
@@ -69,7 +69,6 @@
|
||||
<string name="encryption_info_title">معلومات التّعمية</string>
|
||||
<string name="encryption_info_msg_no_ssl">لا يستخدم الجهاز الآخر إصدارة حديثة من «كدي المتّصل»، ستُستخدم طريقة التّعمية القديمة.</string>
|
||||
<string name="my_device_fingerprint">بصمة SHA1 لشهادة جهازك هي:</string>
|
||||
<string name="remote_device_fingerprint">بصمة SHA1 لشهادة الجهاز البعيد هي:</string>
|
||||
<string name="pair_requested">طُلب الاقتران</string>
|
||||
<string name="pairing_request_from">طلب اقتران من %1s</string>
|
||||
<string name="received_file_text">المس لفتح \'%1s\'</string>
|
||||
|
@@ -12,7 +12,7 @@
|
||||
<string name="pref_plugin_clipboard">Sincronización del cartafueyu</string>
|
||||
<string name="pref_plugin_clipboard_desc">Comparte\'l conteníu del cartafueyu</string>
|
||||
<string name="pref_plugin_mousepad">Entrada remota</string>
|
||||
<string name="pref_plugin_mousepad_desc">Usa\'l preséu como panel táutil y tecláu</string>
|
||||
<string name="pref_plugin_mousepad_desc">Usa\'l preséu como panel táctil y tecláu</string>
|
||||
<string name="pref_plugin_presenter">Mandu pa presentaciones de diapositives</string>
|
||||
<string name="pref_plugin_presenter_desc">Usa esti preséu pa cambiar de diapositives nuna presentación</string>
|
||||
<string name="pref_plugin_remotekeyboard">Receición de calcos de tecles remotos</string>
|
||||
@@ -41,14 +41,14 @@
|
||||
<string name="remotekeyboard_editing_only_title">Remanar les tecles remotes namás al editar</string>
|
||||
<string name="remotekeyboard_connected">La conexón col tecláu remotu ta activa</string>
|
||||
<string name="open_mousepad">Entrada remota</string>
|
||||
<string name="mousepad_info">Movi un deu pela pantalla pa mover el mur. Con un toque faes un clic esquierdu y teniendo primío faes l\'aición d\'arrastrar y soltar, col toque de dos deos simules un clic drechu y col toque de tres simules un clic col botón d\'en mediu del mur. Esliza dos deos pela pantalla pa desplazate.</string>
|
||||
<string name="mousepad_info">Movi un deu pela pantalla pa mover el mur. Con un toque faes un clic esquierdu y teniendo primío faes l\'aición d\'arrastrar y soltar, col toque de dos deos simules un clic derechu y col toque de tres simules un clic col botón d\'en mediu del mur. Esliza dos deos pela pantalla pa desplazate.</string>
|
||||
<string name="mousepad_double_tap_settings_title">Aición al tocar con dos deos</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Aición al tocar con tres deos</string>
|
||||
<string name="mousepad_sensitivity_settings_title">Sensibilidá del panel táutil</string>
|
||||
<string name="mousepad_sensitivity_settings_title">Sensibilidá del panel táctil</string>
|
||||
<string name="mousepad_acceleration_profile_settings_title">Aceleración del punteru</string>
|
||||
<string name="mousepad_scroll_direction_title">Direición de desplazamientu inversa</string>
|
||||
<string-array name="mousepad_tap_entries">
|
||||
<item>Clic drechu</item>
|
||||
<item>Clic derechu</item>
|
||||
<item>Clic d\'en mediu</item>
|
||||
<item>Nada</item>
|
||||
</string-array>
|
||||
@@ -78,7 +78,7 @@
|
||||
<string name="encryption_info_title">Información del cifráu</string>
|
||||
<string name="encryption_info_msg_no_ssl">L\'otru preséu nun executa una versión recién de KDE Connect y usa\'l métodu heredáu de cifráu.</string>
|
||||
<string name="my_device_fingerprint">La buelga SHA1 d\'esti preséu ye:</string>
|
||||
<string name="remote_device_fingerprint">La buelga SHA1 del preséu remotu ye:</string>
|
||||
<string name="remote_device_fingerprint">La buelga SHA256 del certificáu del preséu remotu:</string>
|
||||
<string name="pair_requested">Solicitóse l\'empareyamientu</string>
|
||||
<string name="pairing_request_from">Solicitú d\'empareyamientu de %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
@@ -116,7 +116,7 @@
|
||||
<string name="received_file_text">Toca p\'abrir «%1s»</string>
|
||||
<string name="cannot_create_file">Nun pue crease\'l ficheru %s</string>
|
||||
<string name="tap_to_answer">Toca pa responder</string>
|
||||
<string name="right_click">Unviar un clic drechu</string>
|
||||
<string name="right_click">Unviar un clic derechu</string>
|
||||
<string name="middle_click">Unviar un clic d\'en mediu</string>
|
||||
<string name="show_keyboard">Amosar el tecláu</string>
|
||||
<string name="device_not_paired">Nun s\'empareyó\'l preséu</string>
|
||||
@@ -142,7 +142,7 @@
|
||||
<string name="custom_devices_settings">Llista de preseos personalizada</string>
|
||||
<string name="custom_device_list">Amestar preseos pola IP</string>
|
||||
<string name="custom_device_deleted">Desanicióse\'l preséu personalizáu</string>
|
||||
<string name="custom_device_list_help">Si\'l preséu nun se deteuta automáticamente, pues amestar la so direición IP o nome d\'agospiu calcando nel botón flotante d\'aición</string>
|
||||
<string name="custom_device_list_help">Si\'l preséu nun se detecta automáticamente, pues amestar la so direición IP o nome d\'agospiu calcando nel botón flotante d\'aición</string>
|
||||
<string name="undo">Desfacer</string>
|
||||
<string name="share_notification_preference">Avisos sonoros</string>
|
||||
<string name="share_notification_preference_summary">Fai que\'l teléfonu vibre y reproduza un soníu al recibir un ficheru</string>
|
||||
@@ -189,7 +189,7 @@
|
||||
<string name="plugins_need_optional_permission">Dalgunos plugins tienen carauterísiques desactivaes pola falta de permisos (tócalos pa más información):</string>
|
||||
<string name="select_ringtone">Timbre</string>
|
||||
<string name="telephony_pref_blocked_title">Númberos bloquiaos</string>
|
||||
<string name="telephony_pref_blocked_dialog_desc">Nun amuesa les llamaes nin SMS de los númberos que configures. Especifica un númberu per llinia.</string>
|
||||
<string name="telephony_pref_blocked_dialog_desc">Nun s\'amuesen les llamaes nin SMS de los númberos que configures. Especifica un númberu per llinia.</string>
|
||||
<string name="presenter_fullscreen">Pantalla completa</string>
|
||||
<string name="presenter_exit">Colar de la presentación</string>
|
||||
<string name="presenter_lock_tip">Pues bloquiar esti preséu y usar les tecles de volume pa dir a la diapositiva anterior/siguiente</string>
|
||||
@@ -204,8 +204,11 @@
|
||||
<string name="notification_channel_media_control">Mandu multimedia</string>
|
||||
<string name="notification_channel_filetransfer">Tresferencia de ficheros</string>
|
||||
<string name="notification_channel_high_priority">Prioridá alta</string>
|
||||
<string name="notification_channel_sms_mms">Mensaxes nuevos</string>
|
||||
<string name="copy_url_to_clipboard">Copiar la URL al cartafueyu</string>
|
||||
<string name="clipboard_toast">Copióse al cartafueyu</string>
|
||||
<string name="runcommand_notreachable">El preséu nun ye algamable</string>
|
||||
<string name="runcommand_notpaired">El preséu nun ta empareyáu</string>
|
||||
<string name="runcommand_noruncommandplugin">Esti preséu nun tien activáu\'l plugin Execución de comandos</string>
|
||||
<string name="pref_plugin_findremotedevice_desc">Fai que\'l preséu remotu suene</string>
|
||||
<string name="ring">Facer sonar</string>
|
||||
@@ -237,21 +240,28 @@
|
||||
<string name="location_permission_needed_title">Ríquese un permisu</string>
|
||||
<string name="location_permission_needed_desc">Android rique\'l permisu Allugamientu pa indentificar redes Wi-Fi</string>
|
||||
<string name="clipboard_android_x_incompat">Android 10 quitó l\'accesu al cartafueyu en toles aplicaciones. Esti plugin va desactivase.</string>
|
||||
<string name="cant_open_url">Nun pue abrise la URL pa siguir cola reproducción</string>
|
||||
<string name="bigscreen_optional_permission_explanation">Pa compartir la entrada del micrófonu del preséu precises dar accesu a la entrada d\'audiu del preséu</string>
|
||||
<string name="message_reply_label">RESPONDER</string>
|
||||
<string name="user_display_name">Tu</string>
|
||||
<string name="set_long_text_as_mms_title">Unviar testos llargos como MMS</string>
|
||||
<string name="convert_to_mms_after_title">Conversión a MMS</string>
|
||||
<string-array name="convert_to_mms_after_entries">
|
||||
<item>After one message</item>
|
||||
<item>After two messages</item>
|
||||
<item>After three messages</item>
|
||||
<item>After four messages</item>
|
||||
<item>After five messages</item>
|
||||
<item>Dempués d\'un mensaxes</item>
|
||||
<item>Dempués de dos mensaxes</item>
|
||||
<item>Dempués de tres mensaxes</item>
|
||||
<item>Dempués de cuatro mensaxes</item>
|
||||
<item>Dempués de cinco mensaxes</item>
|
||||
</string-array>
|
||||
<string name="theme_dialog_title">Estilu de l\'aplicación</string>
|
||||
<string-array name="theme_list">
|
||||
<item>Set by Battery Saver</item>
|
||||
<item>Light</item>
|
||||
<item>Dark</item>
|
||||
<item>Claridá</item>
|
||||
<item>Escuridá</item>
|
||||
</string-array>
|
||||
<string-array name="theme_list_v28">
|
||||
<item/>
|
||||
<item>Light</item>
|
||||
<item>Dark</item>
|
||||
<item>System Default</item>
|
||||
<item>Claridá</item>
|
||||
<item>Escuridá</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
@@ -13,7 +13,7 @@
|
||||
<string name="pref_plugin_clipboard">Mübadilə Buferini eyniləşdirmək</string>
|
||||
<string name="pref_plugin_clipboard_desc">Mübadilə buferi tərkiblərini paylaşmaq</string>
|
||||
<string name="pref_plugin_clipboard_sent">Mübadilə buferini göndərmək</string>
|
||||
<string name="pref_plugin_mousepad">Məsafədən yazmaq</string>
|
||||
<string name="pref_plugin_mousepad">Məsafədən giriş</string>
|
||||
<string name="pref_plugin_mousepad_desc">Telefon və Planşetinizi toxunma paneli və klaviatura kimi istifadə edin</string>
|
||||
<string name="pref_plugin_presenter">Məsafədən slayd göstərişi</string>
|
||||
<string name="pref_plugin_presenter_desc">Cihazınızı təqdimatda slaydları dəyişmək üçün istifadə edin</string>
|
||||
@@ -47,7 +47,7 @@
|
||||
<string name="remotekeyboard_not_connected">Aktiv bir uzaq klaviatura bağlantısı yoxdur, onu kdeconnect-də yaradın</string>
|
||||
<string name="remotekeyboard_connected">Uzaq klaviatura bağlantısını aktiv edin</string>
|
||||
<string name="remotekeyboard_multiple_connections">Birdən çox uzaq klaviatura bağlantısı var, tənzimləmək üçün cihazı seçin</string>
|
||||
<string name="open_mousepad">Məsafədən yazmaq</string>
|
||||
<string name="open_mousepad">Məsafədən giriş</string>
|
||||
<string name="mousepad_info">Siçan kursorunu hərəkət etdirmək üçün barmağı ekranda sürüşdürün. Klik üçün ekrana vurun, sağ və orta siçan düymələri üçün iki/üç barmaqla toxunuş edin. Sürüşdürmək üçün iki barmaqdan istifadə edin. Tutub saxlamaq üçün basın saxlayın.</string>
|
||||
<string name="mousepad_double_tap_settings_title">İki barmaq toxunuşu əməlini təyin edin</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Üç barmaq toxunuşu əməlini təyin edin</string>
|
||||
@@ -90,7 +90,7 @@
|
||||
<string name="encryption_info_title">Şifrələmə məlumatı</string>
|
||||
<string name="encryption_info_msg_no_ssl">Digər cihaz köhnə şifrələmə metodu istifadə edən KDE Connect\'in sonuncu versiyasını istifadə etmir.</string>
|
||||
<string name="my_device_fingerprint">Cihazınızın SHA1 şifrə izi:</string>
|
||||
<string name="remote_device_fingerprint">Uzaq cihazın SHA1 şifrə izi:</string>
|
||||
<string name="remote_device_fingerprint">Uzaq cihaz sertifikatının SHA256 şifrə izi:</string>
|
||||
<string name="pair_requested">Qoşulma soruşuldu</string>
|
||||
<string name="pairing_request_from">%1s tərəfindən qoşulma sorğusu</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -16,7 +16,7 @@
|
||||
<string name="pref_plugin_mousepad">Entrada remota</string>
|
||||
<string name="pref_plugin_mousepad_desc">Usa el vostre telèfon o tauleta com un ratolí i un teclat</string>
|
||||
<string name="pref_plugin_presenter">Presentació de diapositives remota</string>
|
||||
<string name="pref_plugin_presenter_desc">Usa el dispositiu per a canviar les dispositives d\'una presentació</string>
|
||||
<string name="pref_plugin_presenter_desc">Usa el dispositiu per a canviar les diapositives d\'una presentació</string>
|
||||
<string name="pref_plugin_remotekeyboard">Rep les pulsacions remotes de tecla</string>
|
||||
<string name="pref_plugin_remotekeyboard_desc">Rep els esdeveniments de pulsacions de tecla des de dispositius remots</string>
|
||||
<string name="pref_plugin_mpris">Controls multimèdia</string>
|
||||
@@ -30,7 +30,7 @@
|
||||
<string name="pref_plugin_notifications">Sincronitza les notificacions</string>
|
||||
<string name="pref_plugin_notifications_desc">Accedeix a les vostres notificacions des d\'altres dispositius</string>
|
||||
<string name="pref_plugin_receive_notifications">Rep les notificacions</string>
|
||||
<string name="pref_plugin_receive_notifications_desc">Rep notificacions des d\'altres dispositius i mostrar-los a l\'Android</string>
|
||||
<string name="pref_plugin_receive_notifications_desc">Rep notificacions des d\'altres dispositius i mostrar-les a l\'Android</string>
|
||||
<string name="pref_plugin_sharereceiver">Comparteix i rep</string>
|
||||
<string name="pref_plugin_sharereceiver_desc">Comparteix els fitxers i URL entre els dispositius</string>
|
||||
<string name="device_list_empty">No hi ha cap dispositiu</string>
|
||||
@@ -77,8 +77,8 @@
|
||||
<string name="category_connected_devices">Dispositius connectats</string>
|
||||
<string name="category_not_paired_devices">Dispositius disponibles</string>
|
||||
<string name="category_remembered_devices">Dispositius recordats</string>
|
||||
<string name="device_menu_plugins">Arranjament del connector</string>
|
||||
<string name="device_menu_unpair">Desparella</string>
|
||||
<string name="device_menu_plugins">Arranjament dels connectors</string>
|
||||
<string name="device_menu_unpair">Desaparella</string>
|
||||
<string name="pair_new_device">Aparella amb un dispositiu nou</string>
|
||||
<string name="unknown_device">Dispositiu desconegut</string>
|
||||
<string name="error_not_reachable">No es pot accedir al dispositiu</string>
|
||||
@@ -90,7 +90,7 @@
|
||||
<string name="encryption_info_title">Informació de l\'encriptatge</string>
|
||||
<string name="encryption_info_msg_no_ssl">L\'altre dispositiu no usa una versió recent del KDE Connect, s\'utilitzarà el mètode d\'encriptatge antic.</string>
|
||||
<string name="my_device_fingerprint">L\'empremta digital SHA1 del certificat del vostre dispositiu és:</string>
|
||||
<string name="remote_device_fingerprint">L\'empremta digital SHA1 del certificat del dispositiu remot és:</string>
|
||||
<string name="remote_device_fingerprint">L\'empremta digital SHA256 del certificat del dispositiu remot és:</string>
|
||||
<string name="pair_requested">S\'ha demanat aparellar</string>
|
||||
<string name="pairing_request_from">S\'ha demanat aparellar des de %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
@@ -157,7 +157,7 @@
|
||||
<string name="mpris_notification_settings_summary">Permet controlar els reproductors multimèdia sense obrir el KDE Connect</string>
|
||||
<string name="share_to">Comparteix amb...</string>
|
||||
<string name="protocol_version_newer">Aquest dispositiu usa una versió nova del protocol</string>
|
||||
<string name="plugin_settings_with_name">Ajustaments del %s</string>
|
||||
<string name="plugin_settings_with_name">Configuració del %s</string>
|
||||
<string name="invalid_device_name">El nom del dispositiu no és vàlid</string>
|
||||
<string name="shareplugin_text_saved">S\'ha rebut text i s\'ha desat al porta-retalls</string>
|
||||
<string name="custom_devices_settings">Llista personalitzada de dispositius</string>
|
||||
@@ -166,7 +166,7 @@
|
||||
<string name="custom_device_list_help">Si el dispositiu no es detecta automàticament, podeu afegir la seva adreça IP o el nom de la màquina fent clic al botó flotant d\'acció</string>
|
||||
<string name="custom_device_fab_hint">Afegeix un dispositiu</string>
|
||||
<string name="undo">Desfés</string>
|
||||
<string name="share_notification_preference">Rebombori de les notificacions</string>
|
||||
<string name="share_notification_preference">Notificacions sonores</string>
|
||||
<string name="share_notification_preference_summary">Vibra i reprodueix un so en rebre un fitxer</string>
|
||||
<string name="share_destination_customize">Personalitza el directori de destinació</string>
|
||||
<string name="share_destination_customize_summary_disabled">Els fitxers rebuts apareixeran a Baixades</string>
|
||||
@@ -269,11 +269,11 @@
|
||||
<string name="devices">Dispositius</string>
|
||||
<string name="settings_rename">Nom del dispositiu</string>
|
||||
<string name="settings_dark_mode">Tema fosc</string>
|
||||
<string name="settings_more_settings_title">Més ajustaments</string>
|
||||
<string name="settings_more_settings_text">Els ajustaments per dispositiu es poden trobar a «Arranjament del connector» des d\'un dispositiu.</string>
|
||||
<string name="settings_more_settings_title">Més opcions</string>
|
||||
<string name="settings_more_settings_text">La configuració per dispositiu es pot trobar a «Arranjament dels connectors» des d\'un dispositiu.</string>
|
||||
<string name="setting_persistent_notification">Mostra les notificacions persistents</string>
|
||||
<string name="setting_persistent_notification_oreo">Notificacions persistents</string>
|
||||
<string name="setting_persistent_notification_description">Tocar per a des/activar els ajustaments de les notificacions</string>
|
||||
<string name="setting_persistent_notification_description">Tocar per a des/activar la configuració de les notificacions</string>
|
||||
<string name="extra_options">Opcions extres</string>
|
||||
<string name="privacy_options">Opcions de privadesa</string>
|
||||
<string name="set_privacy_options">Establiu les opcions de privadesa</string>
|
||||
|
@@ -90,7 +90,6 @@
|
||||
<string name="encryption_info_title">Informace o šifrování</string>
|
||||
<string name="encryption_info_msg_no_ssl">Druhé zařízení nepoužívá poslední verzi KDE connect. Bude použita stará metoda šifrování.</string>
|
||||
<string name="my_device_fingerprint">Otisk SHA1 certifikátu vašeho zařízení je:</string>
|
||||
<string name="remote_device_fingerprint">Otisk SHA1 certifikátu vzdáleného zařízení je:</string>
|
||||
<string name="pair_requested">Bylo vyžádáno párování</string>
|
||||
<string name="pairing_request_from">Požadavek o párování z %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -75,7 +75,6 @@
|
||||
<string name="encryption_info_title">Krypteringsinfo</string>
|
||||
<string name="encryption_info_msg_no_ssl">Den anden enhed bruger ikke en nylig version af KDE Connect, og bruger dermed den forældede krypteringsmetode.</string>
|
||||
<string name="my_device_fingerprint">SHA1-fingeraftrykket for dit enhedscertifikat er:</string>
|
||||
<string name="remote_device_fingerprint">SHA1-fingeraftrykket for det eksterne enhedscertifikat er:</string>
|
||||
<string name="pair_requested">Anmodet om parring</string>
|
||||
<string name="pairing_request_from">Parringsanmodning fra %1s</string>
|
||||
<string name="received_file_text">Tap for at åbne \"%1s\"</string>
|
||||
|
@@ -87,7 +87,6 @@
|
||||
<string name="encryption_info_title">Verschlüsselungsinformationen</string>
|
||||
<string name="encryption_info_msg_no_ssl">Das andere Gerät verwendet eine ältere Version von KDE Connect. Daher muss eine veraltete Verschlüsselungsmethode verwendet werden</string>
|
||||
<string name="my_device_fingerprint">Der SHA1-Fingerabdruck Ihres Gerätezertifikats lautet:</string>
|
||||
<string name="remote_device_fingerprint">Der SHA1-Fingerabdruck des Gerätezertifikats der Gegenstelle lautet:</string>
|
||||
<string name="pair_requested">Verbindung angefordert</string>
|
||||
<string name="pairing_request_from">Kopplungsanfrage von %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,6 @@
|
||||
<string name="encryption_info_title">Πληροφορίες κρυπτογράφησης</string>
|
||||
<string name="encryption_info_msg_no_ssl">Η άλλη συσκευή δεν χρησιμοποιεί μια πρόσφατη έκδοση του KDE Connect, θα χρησιμοποιηθεί η παλαιά μέθοδος κρυπτογράφησης.</string>
|
||||
<string name="my_device_fingerprint">Το ίχνος SHA1 του πιστοποιητικού της συσκευής σας είναι:</string>
|
||||
<string name="remote_device_fingerprint">Το ίχνος SHA1 του πιστοποιητικού της απομακρυσμένης συσκευής είναι:</string>
|
||||
<string name="pair_requested">Ζητήθηκε σύζευξη</string>
|
||||
<string name="pairing_request_from">Αίτημα σύζευξης από %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,7 @@
|
||||
<string name="encryption_info_title">Encryption Info</string>
|
||||
<string name="encryption_info_msg_no_ssl">The other device doesn\'t use a recent version of KDE Connect, using the legacy encryption method.</string>
|
||||
<string name="my_device_fingerprint">SHA1 fingerprint of your device certificate is:</string>
|
||||
<string name="remote_device_fingerprint">SHA1 fingerprint of remote device certificate is:</string>
|
||||
<string name="remote_device_fingerprint">SHA256 fingerprint of remote device certificate is:</string>
|
||||
<string name="pair_requested">Pair requested</string>
|
||||
<string name="pairing_request_from">Pairing request from %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,7 @@
|
||||
<string name="encryption_info_title">Información de cifrado</string>
|
||||
<string name="encryption_info_msg_no_ssl">El otro dispositivo no dispone de una versión reciente de KDE Connect, se usará un método de cifrado antiguo.</string>
|
||||
<string name="my_device_fingerprint">La huella digital SHA1 del certificado de su dispositivo es:</string>
|
||||
<string name="remote_device_fingerprint">La huella digital SHA1 del certificado del dispositivo remoto es:</string>
|
||||
<string name="remote_device_fingerprint">La huella digital SHA256 del certificado del dispositivo remoto es:</string>
|
||||
<string name="pair_requested">Vinculación solicitada</string>
|
||||
<string name="pairing_request_from">Solicitud de vinculación de %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,6 @@
|
||||
<string name="encryption_info_title">Krüptimise teave</string>
|
||||
<string name="encryption_info_msg_no_ssl">Teine seade ei kasuta KDE Connecti uusimat versiooni ja tarvitab krüptimisel pärandmeetodit.</string>
|
||||
<string name="my_device_fingerprint">Sinu seadme sertifikaadi SHA1 sõrmejälg on:</string>
|
||||
<string name="remote_device_fingerprint">Kaugseadme sertifikaadi SHA1 sõrmejälg on:</string>
|
||||
<string name="pair_requested">Paardumise soov</string>
|
||||
<string name="pairing_request_from">Paardumise soov seadmest %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,7 @@
|
||||
<string name="encryption_info_title">Zifratze informazioa</string>
|
||||
<string name="encryption_info_msg_no_ssl">Beste gailuak ez du oraintsuko KDE Connect bertsio bat erabiltzen, erabili aurreko bertsioetako metodoa.</string>
|
||||
<string name="my_device_fingerprint">Zure gailuaren ziurtagiriaren SHA1 hatz-marka hau da:</string>
|
||||
<string name="remote_device_fingerprint">Urruneko gailuaren ziurtagiriaren SHA1 hatz-marka hau da:</string>
|
||||
<string name="remote_device_fingerprint">Urruneko gailuaren ziurtagiriaren SHA256 hatz-marka hau da:</string>
|
||||
<string name="pair_requested">Parekatzea eskatu da</string>
|
||||
<string name="pairing_request_from">Parekatzeko eskaria %1s-tik</string>
|
||||
<plurals name="incoming_file_title">
|
||||
@@ -226,6 +226,7 @@
|
||||
<string name="permission_explanation">Plugin honek baimena behar du funtzionatzeko</string>
|
||||
<string name="optional_permission_explanation">Baimen gehiago eman behar dituzu funtzio guztiak gaitzeko</string>
|
||||
<string name="plugins_need_optional_permission">Plugin batzuek desgaitutako eginbideak dituzte baimenak faltan dituztelako (tak egin informazio gehiagorako):</string>
|
||||
<string name="share_optional_permission_explanation">Partekatutako fitxategiak jasotzeko jomugako direktorio bat aukeratu behar duzu</string>
|
||||
<string name="telepathy_permission_explanation">SMSak zure mahaigainetik bidali ahal izateko, SMSak erabiltzeko baimena eman behar duzu</string>
|
||||
<string name="telephony_permission_explanation">Telefono deiak zure mahaigainetik ikusteko, telefono deien egunkarira eta telefonoaren egoerara baimena eman behar duzu</string>
|
||||
<string name="telephony_optional_permission_explanation">Telefono zenbakiaren ordez kontaktuaren izena ikusteko telefonoko kontaktuak atzitzeko baimena eman behar duzu</string>
|
||||
|
@@ -90,7 +90,7 @@
|
||||
<string name="encryption_info_title">Salaustiedot</string>
|
||||
<string name="encryption_info_msg_no_ssl">Toinen laite ei käytä KDE Connectin uudehkoa versiota, joten käytetään vanhaa salausmenetelmää.</string>
|
||||
<string name="my_device_fingerprint">Laitteen varmenteen SHA1-sormenjälki on:</string>
|
||||
<string name="remote_device_fingerprint">Etälaitteen varmenteen SHA1-sormenjälki on:</string>
|
||||
<string name="remote_device_fingerprint">Etälaitteen varmenteen SHA256-sormenjälki on:</string>
|
||||
<string name="pair_requested">Paripyyntö</string>
|
||||
<string name="pairing_request_from">Paripyyntö laitteesta %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
@@ -226,6 +226,7 @@
|
||||
<string name="permission_explanation">Liitännäinen tarvitsee toimiakseen lisäkäyttöoikeuksia</string>
|
||||
<string name="optional_permission_explanation">Kaikkien toimintojen käyttämiseksi sinun on annettava lisäkäyttöoikeuksia</string>
|
||||
<string name="plugins_need_optional_permission">Jotkin liitännäisten ominaisuudet eivät ole käytössä puuttuvien käyttöoikeuksien takia (lisätietoa napsauttamalla):</string>
|
||||
<string name="share_optional_permission_explanation">Jaettujen tiedostojen vastaanottamiseksi on määritettävä kohdekansio</string>
|
||||
<string name="telepathy_permission_explanation">Lukeaksesi ja lähettääksesi tekstiviestejä työpöydältä sinun on annettava käyttöoikeudet tekstiviesteihin</string>
|
||||
<string name="telephony_permission_explanation">Puhelujen näyttäminen työpöydällä vaatii käyttöoikeuden puhelulokiin ja puhelimen tilaan</string>
|
||||
<string name="telephony_optional_permission_explanation">Puhelimen yhteystietoihin on annettava käyttöoikeudet, jotta voit nähdä yhteystiedoissa nimet puhelinnumerojen sijaan</string>
|
||||
|
@@ -90,7 +90,7 @@
|
||||
<string name="encryption_info_title">Informations de chiffrement</string>
|
||||
<string name="encryption_info_msg_no_ssl">Ce périphérique n\'utilise pas une version récente de KDE Connect qui utilise l\'ancienne méthode de chiffrement.</string>
|
||||
<string name="my_device_fingerprint">L\'empreinte SHA1 du certificat de votre appareil est :</string>
|
||||
<string name="remote_device_fingerprint">L\'empreinte SHA1 du certificat du périphérique distant est :</string>
|
||||
<string name="remote_device_fingerprint">L\'empreinte « SHA256 » du certificat du périphérique distant est :</string>
|
||||
<string name="pair_requested">Paire demandée</string>
|
||||
<string name="pairing_request_from">Demande d\'association provenant de %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -87,7 +87,6 @@
|
||||
<string name="encryption_info_title">Información do cifrado</string>
|
||||
<string name="encryption_info_msg_no_ssl">O outro dispositivo non usa unha versión recente de KDE Connect, usarase un método obsoleto de cifrado.</string>
|
||||
<string name="my_device_fingerprint">A pegada SHA1 do certificado do seu dispositivo é:</string>
|
||||
<string name="remote_device_fingerprint">A pegada SHA1 do certificado do dispositivo remoto é:</string>
|
||||
<string name="pair_requested">Solicitude de emparellamento</string>
|
||||
<string name="pairing_request_from">Solicitude de emparellamento de %1s.</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -84,7 +84,6 @@
|
||||
<string name="encryption_info_title">Info Enkripsi</string>
|
||||
<string name="encryption_info_msg_no_ssl">Perangkat lain tidaklah menggunakan KDE Connect yang berversi saat ini, menggunakan metode enkripsi kuno.</string>
|
||||
<string name="my_device_fingerprint">Sidik jari SHA1 pada sertifikat perangkatmu adalah:</string>
|
||||
<string name="remote_device_fingerprint">Sidik jari SHA1 pada sertifikat perangkat jarak jauh adalah:</string>
|
||||
<string name="pair_requested">Meminta sanding</string>
|
||||
<string name="pairing_request_from">Minta penyandingan dari %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,7 @@
|
||||
<string name="encryption_info_title">Informazioni di cifratura</string>
|
||||
<string name="encryption_info_msg_no_ssl">L\'altro dispositivo non utilizza una versione recente di KDE Connect, utilizzando il metodo di cifratura precedente.</string>
|
||||
<string name="my_device_fingerprint">L\'impronta digitale SHA1 del certificato di dispositivo è:</string>
|
||||
<string name="remote_device_fingerprint">L\'impronta digitale SHA1 del certificato di dispositivo remoto è:</string>
|
||||
<string name="remote_device_fingerprint">L\'impronta digitale SHA256 del certificato del dispositivo remoto è:</string>
|
||||
<string name="pair_requested">Richiesta di associazione</string>
|
||||
<string name="pairing_request_from">Richiesta associazione da %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -75,7 +75,6 @@
|
||||
<string name="encryption_info_title">פרטי הצפנה</string>
|
||||
<string name="encryption_info_msg_no_ssl">ההתקן השני אינו משתמש בגרסה האחרונה של KDE Connect, משתמש בשיטת ההצפנה הישנה.</string>
|
||||
<string name="my_device_fingerprint">טביעת האצבע SHA1 של ההתקן היא:</string>
|
||||
<string name="remote_device_fingerprint">"טביעת האצבע SHA1 של ההתקן המרוחק היא: "</string>
|
||||
<string name="pair_requested">בקשת התאמה</string>
|
||||
<string name="pairing_request_from">בוקשה התאמה מ־%1s</string>
|
||||
<string name="received_file_text">לחץ כדי לפתוח את \"%1s\"</string>
|
||||
|
@@ -87,7 +87,6 @@
|
||||
<string name="encryption_info_title">暗号化情報</string>
|
||||
<string name="encryption_info_msg_no_ssl">他のデバイスは最近のバージョンの KDE Connect を利用していません。古い暗号化方式を使用しています</string>
|
||||
<string name="my_device_fingerprint">このデバイスの証明書の SHA1 フィンガープリント:</string>
|
||||
<string name="remote_device_fingerprint">リモートデバイスの証明書の SHA1 フィンガープリント:</string>
|
||||
<string name="pair_requested">ペアリング要求済み</string>
|
||||
<string name="pairing_request_from">%1s からペアリングを要求されました</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,6 @@
|
||||
<string name="encryption_info_title">암호화 정보</string>
|
||||
<string name="encryption_info_msg_no_ssl">다른 장치에서 KDE Connect의 최근 버전을 실행하고 있지 않아서 레거시 암호화를 사용합니다.</string>
|
||||
<string name="my_device_fingerprint">내 장치 인증서의 SHA1 지문:</string>
|
||||
<string name="remote_device_fingerprint">원격 장치 인증서의 SHA1 지문:</string>
|
||||
<string name="pair_requested">연결 요청됨</string>
|
||||
<string name="pairing_request_from">%1s에서 연결 요청</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,6 @@
|
||||
<string name="encryption_info_title">Šifravimo informacija</string>
|
||||
<string name="encryption_info_msg_no_ssl">Kitas įrenginys nenaudoja paskiausios KDE Connect versijos, naudojamas pasenęs šifravimo metodas.</string>
|
||||
<string name="my_device_fingerprint">Jūsų įrenginio liudijimo SHA1 kontrolinis kodas yra:</string>
|
||||
<string name="remote_device_fingerprint">Nuotolinio įrenginio liudijimo SHA1 kontrolinis kodas yra:</string>
|
||||
<string name="pair_requested">Užklaustas suporavimas</string>
|
||||
<string name="pairing_request_from">Suporavimo užklausa iš %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,7 @@
|
||||
<string name="encryption_info_title">Versleutelde informatie</string>
|
||||
<string name="encryption_info_msg_no_ssl">Het andere apparaat gebruikt geen recente versie van KDE Connect, de verouderde versleutelingsmethode zal worden gebruikt.</string>
|
||||
<string name="my_device_fingerprint">De SHA1 vingerafdruk van het certificaat van uw apparaat is:</string>
|
||||
<string name="remote_device_fingerprint">De SHA1 vingerafdruk van het certificaat van het apparaat op afstand is:</string>
|
||||
<string name="remote_device_fingerprint">De SHA256 vingerafdruk van het certificaat van het apparaat op afstand is:</string>
|
||||
<string name="pair_requested">Paarvorming gevraagd</string>
|
||||
<string name="pairing_request_from">Verzoek om een paar te maken van %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,7 @@
|
||||
<string name="encryption_info_title">Krypteringsinfo</string>
|
||||
<string name="encryption_info_msg_no_ssl">Den andre eininga brukar ein gammal versjon av KDE Connect, med ein utdatert krypteringsmetode.</string>
|
||||
<string name="my_device_fingerprint">SHA-fingeravtrykket til einingssertifikatet er:</string>
|
||||
<string name="remote_device_fingerprint">SHA-fingeravtrykket til fjerneiningssertifikatet er:</string>
|
||||
<string name="remote_device_fingerprint">SHA-256-fingeravtrykket til fjerneiningssertifikatet er:</string>
|
||||
<string name="pair_requested">Paringsførespurnad</string>
|
||||
<string name="pairing_request_from">Paringsførespurnad frå %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -87,7 +87,6 @@
|
||||
<string name="encryption_info_title">Dane o szyfrowaniu</string>
|
||||
<string name="encryption_info_msg_no_ssl">Drugie urządzenie nie używa ostatniej wersji KDE Connect, użyto przestarzałego szyfrowania.</string>
|
||||
<string name="my_device_fingerprint">Odcisk palca SHA1 certyfikatu twojego urządzenia to:</string>
|
||||
<string name="remote_device_fingerprint">Odcisk palca SHA1 certyfikatu twojego zdalnego urządzenia to:</string>
|
||||
<string name="pair_requested">Zażądano parowania</string>
|
||||
<string name="pairing_request_from">Żądanie parowania z %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -89,8 +89,8 @@
|
||||
<string name="error_canceled_by_other_peer">Cancelado pelo outro dispositivo</string>
|
||||
<string name="encryption_info_title">Informação de criptografia</string>
|
||||
<string name="encryption_info_msg_no_ssl">O outro dispositivo não usa uma versão recente do KDE Connect. Será utilizado o método antigo de criptografia.</string>
|
||||
<string name="my_device_fingerprint">Código SHA1 do certificado do seu dispositivo:</string>
|
||||
<string name="remote_device_fingerprint">Código SHA1 do certificado do dispositivo remoto:</string>
|
||||
<string name="my_device_fingerprint">A impressão digital SHA1 do certificado do seu dispositivo é:</string>
|
||||
<string name="remote_device_fingerprint">A impressão digital SHA256 do certificado do dispositivo remoto é:</string>
|
||||
<string name="pair_requested">Solicitação de emparelhamento</string>
|
||||
<string name="pairing_request_from">Emparelhamento solicitado por %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,7 @@
|
||||
<string name="encryption_info_title">Dados de Encriptação</string>
|
||||
<string name="encryption_info_msg_no_ssl">O outro dispositivo não usa uma versão recente do KDE Connect; será usado o método antigo de encriptação.</string>
|
||||
<string name="my_device_fingerprint">A impressão digital SHA1 do certificado do seu dispositivo é:</string>
|
||||
<string name="remote_device_fingerprint">A impressão digital SHA1 do certificado do dispositivo remoto é:</string>
|
||||
<string name="remote_device_fingerprint">A impressão digital SHA256 do certificado do dispositivo remoto é:</string>
|
||||
<string name="pair_requested">Emparelhamento pedido</string>
|
||||
<string name="pairing_request_from">Pedido de emparelhamento de %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,7 @@
|
||||
<string name="encryption_info_title">Informații despre criptare</string>
|
||||
<string name="encryption_info_msg_no_ssl">Celălalt dispozitiv nu folosește o versiune recentă de KDE Connect, se va folosi metoda de criptare moștenită.</string>
|
||||
<string name="my_device_fingerprint">Amprenta SHA1 a certificatului acestui dispozitiv e:</string>
|
||||
<string name="remote_device_fingerprint">Amprenta SHA1 a certificatului dispozitivului distant e:</string>
|
||||
<string name="remote_device_fingerprint">Amprenta SHA256 a certificatului dispozitivului distant e:</string>
|
||||
<string name="pair_requested">Asociere cerută</string>
|
||||
<string name="pairing_request_from">Cerere de asociere de la %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
@@ -234,6 +234,7 @@
|
||||
<string name="permission_explanation">Această extensie are nevoie de permisiuni ca să lucreze</string>
|
||||
<string name="optional_permission_explanation">Trebuie să acordați permisiuni suplimentare pentru activarea tuturor funcțiilor</string>
|
||||
<string name="plugins_need_optional_permission">Unele extensii au caracteristici dezactivate din cauza lipsei permisiunilor (atingeți pentru informații suplimentare):</string>
|
||||
<string name="share_optional_permission_explanation">Trebuie să alegeți un dosar destinație pentru a primi fișiere partajate</string>
|
||||
<string name="telepathy_permission_explanation">Pentru a citi și scrie SMS de pe calculatorul de birou, trebuie să acordați permisiuni asupra SMS-urilor</string>
|
||||
<string name="telephony_permission_explanation">Pentru a vedea apelurile pe calculatorul de birou, trebuie să acordați permisiuni asupra jurnalului de apeluri și stării telefonului</string>
|
||||
<string name="telephony_optional_permission_explanation">Pentru a vedea numele contactului în locul numărului de telefon, trebuie să permiteți accesul la contactele telefonului.</string>
|
||||
|
@@ -90,7 +90,6 @@
|
||||
<string name="encryption_info_title">Информация о шифровании</string>
|
||||
<string name="encryption_info_msg_no_ssl">На другом устройстве используется старая версия KDE Connect, используется старый метод шифрования.</string>
|
||||
<string name="my_device_fingerprint">Отпечаток SHA-1 сертификата вашего устройства:</string>
|
||||
<string name="remote_device_fingerprint">Отпечаток SHA-1 сертификата удалённого устройства:</string>
|
||||
<string name="pair_requested">Запрошено сопряжение</string>
|
||||
<string name="pairing_request_from">Запрос на сопряжение от %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,6 @@
|
||||
<string name="encryption_info_title">Informácie o šifrovaní</string>
|
||||
<string name="encryption_info_msg_no_ssl">Druhé zariadenie nepoužíva najnovšiu verziu aplikácie KDE Connect. Použije sa zastaralý spôsob šifrovania.</string>
|
||||
<string name="my_device_fingerprint">Odtlačok SHA1 certifikátu vášho zariadenia je:</string>
|
||||
<string name="remote_device_fingerprint">Odtlačok SHA1 certifikátu vzdialeného zariadenia je:</string>
|
||||
<string name="pair_requested">Spárovanie vyžiadané</string>
|
||||
<string name="pairing_request_from">Požiadavka na spárovanie zo zariadenia %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,7 @@
|
||||
<string name="encryption_info_title">Informacija o šifriranju</string>
|
||||
<string name="encryption_info_msg_no_ssl">Druga naprava ne uporablja najnovejše različice KDE Connect, uporablja podedovano metodo šifriranja.</string>
|
||||
<string name="my_device_fingerprint">Prstni odtis SHA1 certifikata vaše naprave je:</string>
|
||||
<string name="remote_device_fingerprint">Prstni odtis SHA1 certifikata oddaljene naprave je:</string>
|
||||
<string name="remote_device_fingerprint">Prstni odtis SHA256 certifikata oddaljene naprave je:</string>
|
||||
<string name="pair_requested">Zahtevan je par</string>
|
||||
<string name="pairing_request_from">Zahtevek za uparjanje od %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,7 @@
|
||||
<string name="encryption_info_title">Krypteringsinformation</string>
|
||||
<string name="encryption_info_msg_no_ssl">Den andra apparaten använder inte en aktuell version av KDE-anslut. Använder den föråldrade krypteringsmetoden.</string>
|
||||
<string name="my_device_fingerprint">SHA1-fingeravtryck för din apparats certifikat är:</string>
|
||||
<string name="remote_device_fingerprint">SHA1-fingeravtryck för den andra apparatens certifikat är:</string>
|
||||
<string name="remote_device_fingerprint">SHA256-fingeravtryck för den andra apparatens certifikat är:</string>
|
||||
<string name="pair_requested">Ihopparning begärd</string>
|
||||
<string name="pairing_request_from">Begäran om ihopparning från %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -87,7 +87,6 @@
|
||||
<string name="encryption_info_title">Şifreleme Bilgisi</string>
|
||||
<string name="encryption_info_msg_no_ssl">Diğer aygıt, KDE Connect\'in son sürümünü kullanmıyor, eski şifreleme yöntemini kullanıyor.</string>
|
||||
<string name="my_device_fingerprint">Aygıt sertifikanızın SHA1 parmak izi:</string>
|
||||
<string name="remote_device_fingerprint">Uzak aygıt sertifikanızın SHA1 parmak izi:</string>
|
||||
<string name="pair_requested">Eşleşme talep edildi</string>
|
||||
<string name="pairing_request_from">%1s için eşleşme talebi</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -90,7 +90,7 @@
|
||||
<string name="encryption_info_title">Дані щодо шифрування</string>
|
||||
<string name="encryption_info_msg_no_ssl">На сторонньому пристрої не використовується нова версія KDE Connect, у якій використовується застарілий спосіб шифрування.</string>
|
||||
<string name="my_device_fingerprint">Відбиток SHA1 сертифіката пристрою:</string>
|
||||
<string name="remote_device_fingerprint">Відбиток SHA1 сертифіката віддаленого пристрою:</string>
|
||||
<string name="remote_device_fingerprint">Відбиток SHA256 сертифіката віддаленого пристрою:</string>
|
||||
<string name="pair_requested">Запит щодо пов’язування</string>
|
||||
<string name="pairing_request_from">Запит щодо пов’язування від %1s</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -1,10 +1,10 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources>
|
||||
<string name="kde_connect">KDE Connect</string>
|
||||
<string name="foreground_notification_no_devices">没有连接到任何设备</string>
|
||||
<string name="kde_connect">KDE 连接</string>
|
||||
<string name="foreground_notification_no_devices">未连接到任何设备</string>
|
||||
<string name="foreground_notification_devices">已连接到:%s</string>
|
||||
<string name="foreground_notification_send_clipboard">发送剪切板</string>
|
||||
<string name="pref_plugin_telephony">电话通知</string>
|
||||
<string name="foreground_notification_send_clipboard">发送剪贴板</string>
|
||||
<string name="pref_plugin_telephony">来电通知</string>
|
||||
<string name="pref_plugin_telephony_desc">发送来电通知</string>
|
||||
<string name="pref_plugin_battery">电池报告</string>
|
||||
<string name="pref_plugin_battery_desc">定期报告电池状态</string>
|
||||
@@ -20,40 +20,40 @@
|
||||
<string name="pref_plugin_remotekeyboard">接收远程按键</string>
|
||||
<string name="pref_plugin_remotekeyboard_desc">从远程设备接收按键事件</string>
|
||||
<string name="pref_plugin_mpris">多媒体控制</string>
|
||||
<string name="pref_plugin_mpris_desc">媒体播放器的遥控器</string>
|
||||
<string name="pref_plugin_runcommand">执行命令</string>
|
||||
<string name="pref_plugin_mpris_desc">遥控媒体播放器</string>
|
||||
<string name="pref_plugin_runcommand">运行命令</string>
|
||||
<string name="pref_plugin_runcommand_desc">触发您的手机或平板电脑的远程命令</string>
|
||||
<string name="pref_plugin_contacts">联系人同步器</string>
|
||||
<string name="pref_plugin_contacts">联系人同步</string>
|
||||
<string name="pref_plugin_contacts_desc">允许同步设备的通讯录</string>
|
||||
<string name="pref_plugin_ping">Ping</string>
|
||||
<string name="pref_plugin_ping_desc">发送和接受ping</string>
|
||||
<string name="pref_plugin_ping_desc">发送和接受 Ping</string>
|
||||
<string name="pref_plugin_notifications">通知同步</string>
|
||||
<string name="pref_plugin_notifications_desc">从其他设备访问您的通知</string>
|
||||
<string name="pref_plugin_receive_notifications">接收通知</string>
|
||||
<string name="pref_plugin_receive_notifications_desc">从其他设备接收通知并显示在 Android 上</string>
|
||||
<string name="pref_plugin_sharereceiver">分享和接收</string>
|
||||
<string name="pref_plugin_sharereceiver_desc">在设备间共享文件和 URL</string>
|
||||
<string name="pref_plugin_sharereceiver">发送和接收</string>
|
||||
<string name="pref_plugin_sharereceiver_desc">在设备间共享文件和链接</string>
|
||||
<string name="device_list_empty">无设备</string>
|
||||
<string name="ok">确认</string>
|
||||
<string name="ok">确定</string>
|
||||
<string name="sad_ok">确定 :(</string>
|
||||
<string name="cancel">取消</string>
|
||||
<string name="open_settings">开启设置</string>
|
||||
<string name="no_permissions">您需要授予权限以便访问通知</string>
|
||||
<string name="no_permission_mprisreceiver">为了能够控制您的媒体播放器,您需要授予访问通知消息的权限</string>
|
||||
<string name="no_permissions_remotekeyboard">要接收按键,您需要激活 KDE Connect 远程键盘</string>
|
||||
<string name="send_ping">发送ping</string>
|
||||
<string name="open_settings">打开设置</string>
|
||||
<string name="no_permissions">您需要授予权限以访问通知</string>
|
||||
<string name="no_permission_mprisreceiver">为了控制您的媒体播放器,您需要授予访问通知的权限</string>
|
||||
<string name="no_permissions_remotekeyboard">要接收按键,您需要激活 K 易连远程键盘</string>
|
||||
<string name="send_ping">发送 Ping</string>
|
||||
<string name="open_mpris_controls">多媒体控制</string>
|
||||
<string name="remotekeyboard_editing_only_title">只有在编辑时才接受远程按键</string>
|
||||
<string name="remotekeyboard_not_connected">没有活动的远程键盘链接,请在 KDE Connect 中连接</string>
|
||||
<string name="remotekeyboard_not_connected">没有活动的远程键盘链接,请在 K 易连中连接</string>
|
||||
<string name="remotekeyboard_connected">远程键盘连接已启用</string>
|
||||
<string name="remotekeyboard_multiple_connections">发现多个远程键盘连接,请选择设备进行配置</string>
|
||||
<string name="remotekeyboard_multiple_connections">发现多个远程键盘连接,请选择要配置的设备</string>
|
||||
<string name="open_mousepad">远程输入</string>
|
||||
<string name="mousepad_info">在屏幕上移动手指来移动光标。轻击代表左键,双指或三指点击代表右键或中键。用双指滚动。用长按来拖放。</string>
|
||||
<string name="mousepad_double_tap_settings_title">设置双指点击动作</string>
|
||||
<string name="mousepad_triple_tap_settings_title">设置三指点击动作</string>
|
||||
<string name="mousepad_sensitivity_settings_title">设置触摸板灵敏度</string>
|
||||
<string name="mousepad_acceleration_profile_settings_title">设置指针加速</string>
|
||||
<string name="mousepad_scroll_direction_title">滚动方向反向</string>
|
||||
<string name="mousepad_acceleration_profile_settings_title">设置指针加速度</string>
|
||||
<string name="mousepad_scroll_direction_title">反转滚动方向</string>
|
||||
<string-array name="mousepad_tap_entries">
|
||||
<item>右键点击</item>
|
||||
<item>中键点击</item>
|
||||
@@ -74,25 +74,25 @@
|
||||
<item>更强</item>
|
||||
<item>最强</item>
|
||||
</string-array>
|
||||
<string name="category_connected_devices">已连接设备</string>
|
||||
<string name="category_not_paired_devices">可用设备</string>
|
||||
<string name="category_remembered_devices">已记住设备</string>
|
||||
<string name="category_connected_devices">连接的设备</string>
|
||||
<string name="category_not_paired_devices">可用的设备</string>
|
||||
<string name="category_remembered_devices">记住的设备</string>
|
||||
<string name="device_menu_plugins">插件设置</string>
|
||||
<string name="device_menu_unpair">取消配对</string>
|
||||
<string name="pair_new_device">配对新设备</string>
|
||||
<string name="unknown_device">未知设备</string>
|
||||
<string name="error_not_reachable">设备不可及</string>
|
||||
<string name="error_already_paired">设备已配对</string>
|
||||
<string name="error_could_not_send_package">数据包无法发送</string>
|
||||
<string name="error_could_not_send_package">无法发送数据包</string>
|
||||
<string name="error_timed_out">超时</string>
|
||||
<string name="error_canceled_by_user">已被用户取消</string>
|
||||
<string name="error_canceled_by_other_peer">已被另一方取消</string>
|
||||
<string name="error_canceled_by_other_peer">已被其他对等点取消</string>
|
||||
<string name="encryption_info_title">加密信息</string>
|
||||
<string name="encryption_info_msg_no_ssl">另一设备没有使用最新的 KDE Connect,使用旧版加密方法。</string>
|
||||
<string name="encryption_info_msg_no_ssl">另一设备没有使用最新的 K 易连,使用旧版加密方法。</string>
|
||||
<string name="my_device_fingerprint">您的设备证书的 SHA1 指纹是:</string>
|
||||
<string name="remote_device_fingerprint">远程设备证书的 SHA1 指纹是:</string>
|
||||
<string name="remote_device_fingerprint">远程设备证书的 SHA256 指纹是:</string>
|
||||
<string name="pair_requested">已请求配对</string>
|
||||
<string name="pairing_request_from">来自%1s的配对请求</string>
|
||||
<string name="pairing_request_from">来自 %1s 的配对请求</string>
|
||||
<plurals name="incoming_file_title">
|
||||
<item quantity="other">正在从 %2$s 接收 %1$d 个文件</item>
|
||||
</plurals>
|
||||
@@ -100,7 +100,7 @@
|
||||
<item quantity="other">(%3$d 个文件中的第 %2$d 个):%1$s</item>
|
||||
</plurals>
|
||||
<plurals name="outgoing_file_title">
|
||||
<item quantity="other">正在发送 %1$d 个文件给 %2$s</item>
|
||||
<item quantity="other">正在发送 %1$d 个文件到 %2$s</item>
|
||||
</plurals>
|
||||
<plurals name="outgoing_files_text">
|
||||
<item quantity="other">(%3$d 个文件中的 %2$d 个):%1$s</item>
|
||||
@@ -117,10 +117,10 @@
|
||||
<plurals name="send_files_fail_title">
|
||||
<item quantity="other">发送给 %1$s 的 %3$d 个文件中的 %2$d 个失败</item>
|
||||
</plurals>
|
||||
<string name="tap_to_open">点击以打开</string>
|
||||
<string name="received_file_text">点击以打开“%1s”</string>
|
||||
<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="tap_to_answer">点击应答</string>
|
||||
<string name="right_click">发送右键点击</string>
|
||||
<string name="middle_click">发送中键点击</string>
|
||||
<string name="show_keyboard">显示键盘</string>
|
||||
@@ -194,8 +194,8 @@
|
||||
<string name="sftp_saf_permission_explanation">要远程访问文件,您需要配置存储位置</string>
|
||||
<string name="no_players_connected">未找到播放器</string>
|
||||
<string name="send_files">发送文件</string>
|
||||
<string name="pairing_title">KDE Connect 设备</string>
|
||||
<string name="pairing_description">其他在同一网络运行 KDE Connect 的设备会在此处显示。</string>
|
||||
<string name="pairing_title">K 易连设备</string>
|
||||
<string name="pairing_description">其他在同一网络运行 K 易连的设备会在此处显示。</string>
|
||||
<string name="device_rename_title">重命名设备</string>
|
||||
<string name="device_rename_confirm">重命名</string>
|
||||
<string name="refresh">刷新</string>
|
||||
@@ -206,7 +206,7 @@
|
||||
<string name="pref_plugin_telepathy">发送短消息</string>
|
||||
<string name="pref_plugin_telepathy_desc">从桌面发送短消息</string>
|
||||
<string name="pref_plugin_telepathy_mms">发送彩信</string>
|
||||
<string name="pref_plugin_telepathy_mms_desc">您需要将 KDE Connect 设置为默认短信应用程序才能通过它发送彩信。</string>
|
||||
<string name="pref_plugin_telepathy_mms_desc">您需要将 K 易连设置为默认短信应用程序才能通过它发送彩信。</string>
|
||||
<string name="findmyphone_title">找到我的手机</string>
|
||||
<string name="findmyphone_title_tablet">找到我的平板电脑</string>
|
||||
<string name="findmyphone_title_tv">查找我的电视</string>
|
||||
@@ -218,6 +218,7 @@
|
||||
<string name="permission_explanation">这个插件需要权限才能工作</string>
|
||||
<string name="optional_permission_explanation">您需要授予额外权限以启用全部功能</string>
|
||||
<string name="plugins_need_optional_permission">因缺少权限,某些插件的一些功能已禁用(点击以查看更多信息):</string>
|
||||
<string name="share_optional_permission_explanation">要接收共享的文件,您需要选择一个目标目录</string>
|
||||
<string name="telepathy_permission_explanation">从计算机桌面读取、写入短消息需要向应用程序授予 SMS 权限</string>
|
||||
<string name="telephony_permission_explanation">要桌面上查看手机通话记录,您需要授予访问通话记录和手机状态的权限</string>
|
||||
<string name="telephony_optional_permission_explanation">要查看联系人姓名而非电话号码,您需要授予访问手机通讯录的权限</string>
|
||||
@@ -233,7 +234,7 @@
|
||||
<string name="presenter_lock_tip">您可以锁定设备,用音量键作为上一页/下一页按钮</string>
|
||||
<string name="add_command">添加命令</string>
|
||||
<string name="addcommand_explanation">没有已注册的命令</string>
|
||||
<string name="addcommand_explanation2">您可以在 KDE Connect 系统设置中添加新命令</string>
|
||||
<string name="addcommand_explanation2">您可以在 K 易连系统设置中添加新命令</string>
|
||||
<string name="add_command_description">您可以在桌面添加新命令</string>
|
||||
<string name="pref_plugin_mprisreceiver">控制媒体播放器</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">从其他设备控制您的手机的播放器</string>
|
||||
@@ -274,7 +275,7 @@
|
||||
<string name="take_picture">启动相机</string>
|
||||
<string name="plugin_photo_desc">启动相机应用程序以方便拍摄和转移图片</string>
|
||||
<string name="no_app_for_opening">没有找到合适的应用程序打开此文件</string>
|
||||
<string name="remote_keyboard_service">KDE Connect 远程键盘</string>
|
||||
<string name="remote_keyboard_service">K 易连远程键盘</string>
|
||||
<string name="presenter_pointer">指针</string>
|
||||
<string name="trusted_networks">信任的网络</string>
|
||||
<string name="trusted_networks_desc">限制只在已知网络中启用自动发现</string>
|
||||
|
@@ -90,7 +90,6 @@
|
||||
<string name="encryption_info_title">加密資訊</string>
|
||||
<string name="encryption_info_msg_no_ssl">其他的裝置沒有使用新版本的KDE連線,使用傳統的加密模式。</string>
|
||||
<string name="my_device_fingerprint">您裝置憑證的 SHA1 指紋是:</string>
|
||||
<string name="remote_device_fingerprint">您遠端裝置憑證的 SHA1 指紋是:</string>
|
||||
<string name="pair_requested">已請求配對</string>
|
||||
<string name="pairing_request_from">來自 %1s 的配對請求</string>
|
||||
<plurals name="incoming_file_title">
|
||||
|
@@ -126,9 +126,10 @@
|
||||
<string name="encryption_info_title">Encryption Info</string>
|
||||
<string name="encryption_info_msg_no_ssl">The other device doesn\'t use a recent version of KDE Connect, using the legacy encryption method.</string>
|
||||
<string name="my_device_fingerprint">SHA1 fingerprint of your device certificate is:</string>
|
||||
<string name="remote_device_fingerprint">SHA1 fingerprint of remote device certificate is:</string>
|
||||
<string name="remote_device_fingerprint">SHA256 fingerprint of remote device certificate is:</string>
|
||||
<string name="pair_requested">Pair requested</string>
|
||||
<string name="pairing_request_from">Pairing request from %1s</string>
|
||||
<string name="pairing_verification_code" translatable="false">🔑%1s...</string>
|
||||
<plurals name="incoming_file_title">Receiving file from %1s>
|
||||
<item quantity="one">Receiving %1$d file from %2$s</item>
|
||||
<item quantity="other">Receiving %1$d files from %2$s</item>
|
||||
|
@@ -391,10 +391,11 @@ public class Device implements BaseLink.PacketReceiver {
|
||||
|
||||
final NotificationManager notificationManager = ContextCompat.getSystemService(getContext(), NotificationManager.class);
|
||||
|
||||
String verificationKeyShort = SslHelper.getVerificationKey(SslHelper.certificate, certificate).substring(8);
|
||||
|
||||
Notification noti = new NotificationCompat.Builder(getContext(), NotificationHelper.Channels.DEFAULT)
|
||||
.setContentTitle(res.getString(R.string.pairing_request_from, getName()))
|
||||
.setContentText(res.getString(R.string.tap_to_answer))
|
||||
.setContentIntent(pendingIntent)
|
||||
.setContentText(res.getString(R.string.pairing_verification_code, verificationKeyShort))
|
||||
.setTicker(res.getString(R.string.pair_requested))
|
||||
.setSmallIcon(R.drawable.ic_notification)
|
||||
.addAction(R.drawable.ic_accept_pairing_24dp, res.getString(R.string.pairing_accept), acceptedPendingIntent)
|
||||
|
@@ -30,6 +30,7 @@ import org.spongycastle.cert.jcajce.JcaX509v3CertificateBuilder;
|
||||
import org.spongycastle.jce.provider.BouncyCastleProvider;
|
||||
import org.spongycastle.operator.ContentSigner;
|
||||
import org.spongycastle.operator.jcajce.JcaContentSignerBuilder;
|
||||
import org.spongycastle.util.Arrays;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigInteger;
|
||||
@@ -254,7 +255,7 @@ public class SslHelper {
|
||||
|
||||
public static String getCertificateHash(Certificate certificate) {
|
||||
try {
|
||||
byte[] hash = MessageDigest.getInstance("SHA-1").digest(certificate.getEncoded());
|
||||
byte[] hash = MessageDigest.getInstance("SHA-256").digest(certificate.getEncoded());
|
||||
Formatter formatter = new Formatter();
|
||||
int i;
|
||||
for (i = 0; i < hash.length - 1; i++) {
|
||||
@@ -279,4 +280,31 @@ public class SslHelper {
|
||||
return IETFUtils.valueToString(rdn.getFirst().getValue());
|
||||
}
|
||||
|
||||
public static String getVerificationKey(X509Certificate certificateA, Certificate certificateB) {
|
||||
try {
|
||||
byte[] a = certificateA.getPublicKey().getEncoded();
|
||||
byte[] b = certificateB.getPublicKey().getEncoded();
|
||||
|
||||
if (Arrays.compareUnsigned(a, b) < 0) {
|
||||
// Swap them so on both devices they are in the same order
|
||||
byte[] aux = a;
|
||||
a = b;
|
||||
b = aux;
|
||||
}
|
||||
|
||||
byte[] concat = new byte[a.length + b.length];
|
||||
System.arraycopy(a, 0, concat, 0, a.length);
|
||||
System.arraycopy(b, 0, concat, a.length, b.length);
|
||||
|
||||
byte[] hash = MessageDigest.getInstance("SHA-256").digest(concat);
|
||||
Formatter formatter = new Formatter();
|
||||
for (int i = 0; i < hash.length - 1; i++) {
|
||||
formatter.format("%02x", hash[i]);
|
||||
}
|
||||
return formatter.toString();
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
return "error";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -23,12 +23,7 @@ import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.SeekBar;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -46,13 +41,12 @@ import org.kde.kdeconnect.NetworkPacket;
|
||||
import org.kde.kdeconnect.Plugins.SystemvolumePlugin.SystemvolumeFragment;
|
||||
import org.kde.kdeconnect.UserInterface.ThemeUtil;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
import org.kde.kdeconnect_tp.databinding.ActivityMprisBinding;
|
||||
import org.kde.kdeconnect_tp.databinding.MprisControlBinding;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
public class MprisActivity extends AppCompatActivity {
|
||||
|
||||
private String deviceId;
|
||||
@@ -60,54 +54,8 @@ public class MprisActivity extends AppCompatActivity {
|
||||
private Runnable positionSeekUpdateRunnable = null;
|
||||
private MprisPlugin.MprisPlayer targetPlayer = null;
|
||||
|
||||
@BindView(R.id.play_button)
|
||||
ImageButton playButton;
|
||||
|
||||
@BindView(R.id.prev_button)
|
||||
ImageButton prevButton;
|
||||
|
||||
@BindView(R.id.next_button)
|
||||
ImageButton nextButton;
|
||||
|
||||
@BindView(R.id.rew_button)
|
||||
ImageButton rewButton;
|
||||
|
||||
@BindView(R.id.ff_button)
|
||||
ImageButton ffButton;
|
||||
|
||||
@BindView(R.id.time_textview)
|
||||
TextView timeText;
|
||||
|
||||
@BindView(R.id.album_art)
|
||||
ImageView albumArtView;
|
||||
|
||||
@BindView(R.id.player_spinner)
|
||||
Spinner playerSpinner;
|
||||
|
||||
@BindView(R.id.no_players)
|
||||
TextView noPlayers;
|
||||
|
||||
@BindView(R.id.now_playing_textview)
|
||||
TextView nowPlayingText;
|
||||
|
||||
@BindView(R.id.positionSeek)
|
||||
SeekBar positionBar;
|
||||
|
||||
@BindView(R.id.progress_slider)
|
||||
LinearLayout progressSlider;
|
||||
|
||||
@BindView(R.id.volume_seek)
|
||||
SeekBar volumeSeek;
|
||||
|
||||
@BindView(R.id.volume_layout)
|
||||
LinearLayout volumeLayout;
|
||||
|
||||
@BindView(R.id.stop_button)
|
||||
ImageButton stopButton;
|
||||
|
||||
@BindView(R.id.progress_textview)
|
||||
TextView progressText;
|
||||
|
||||
private ActivityMprisBinding activityMprisBinding;
|
||||
private MprisControlBinding mprisControlBinding;
|
||||
|
||||
private static String milisToProgress(long milis) {
|
||||
int length = (int) (milis / 1000); //From milis to seconds
|
||||
@@ -128,7 +76,6 @@ public class MprisActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
private void connectToPlugin(final String targetPlayerName) {
|
||||
|
||||
BackgroundService.RunWithPlugin(this, deviceId, MprisPlugin.class, mpris -> {
|
||||
targetPlayer = mpris.getPlayerStatus(targetPlayerName);
|
||||
|
||||
@@ -152,19 +99,18 @@ public class MprisActivity extends AppCompatActivity {
|
||||
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
runOnUiThread(() -> {
|
||||
|
||||
playerSpinner.setAdapter(adapter);
|
||||
mprisControlBinding.playerSpinner.setAdapter(adapter);
|
||||
|
||||
if (playerList.isEmpty()) {
|
||||
noPlayers.setVisibility(View.VISIBLE);
|
||||
playerSpinner.setVisibility(View.GONE);
|
||||
nowPlayingText.setText("");
|
||||
mprisControlBinding.noPlayers.setVisibility(View.VISIBLE);
|
||||
mprisControlBinding.playerSpinner.setVisibility(View.GONE);
|
||||
mprisControlBinding.nowPlayingTextview.setText("");
|
||||
} else {
|
||||
noPlayers.setVisibility(View.GONE);
|
||||
playerSpinner.setVisibility(View.VISIBLE);
|
||||
mprisControlBinding.noPlayers.setVisibility(View.GONE);
|
||||
mprisControlBinding.playerSpinner.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
playerSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
mprisControlBinding.playerSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> arg0, View arg1, int pos, long id) {
|
||||
|
||||
@@ -196,7 +142,7 @@ public class MprisActivity extends AppCompatActivity {
|
||||
if (targetPlayer != null) {
|
||||
int targetIndex = adapter.getPosition(targetPlayer.getPlayer());
|
||||
if (targetIndex >= 0) {
|
||||
playerSpinner.setSelection(targetIndex);
|
||||
mprisControlBinding.playerSpinner.setSelection(targetIndex);
|
||||
} else {
|
||||
targetPlayer = null;
|
||||
}
|
||||
@@ -204,18 +150,16 @@ public class MprisActivity extends AppCompatActivity {
|
||||
//If no player selected, select the first one (if any)
|
||||
if (targetPlayer == null && !playerList.isEmpty()) {
|
||||
targetPlayer = mpris.getPlayerStatus(playerList.get(0));
|
||||
playerSpinner.setSelection(0);
|
||||
mprisControlBinding.playerSpinner.setSelection(0);
|
||||
}
|
||||
updatePlayerStatus(mpris);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private void addSystemVolumeFragment() {
|
||||
|
||||
if (findViewById(R.id.systemvolume_fragment) == null)
|
||||
return;
|
||||
|
||||
@@ -249,8 +193,8 @@ public class MprisActivity extends AppCompatActivity {
|
||||
}
|
||||
String song = playerStatus.getCurrentSong();
|
||||
|
||||
if (!nowPlayingText.getText().toString().equals(song)) {
|
||||
nowPlayingText.setText(song);
|
||||
if (!mprisControlBinding.nowPlayingTextview.getText().toString().equals(song)) {
|
||||
mprisControlBinding.nowPlayingTextview.setText(song);
|
||||
}
|
||||
|
||||
Bitmap albumArt = playerStatus.getAlbumArt();
|
||||
@@ -259,47 +203,47 @@ public class MprisActivity extends AppCompatActivity {
|
||||
assert drawable != null;
|
||||
Drawable placeholder_art = DrawableCompat.wrap(drawable);
|
||||
DrawableCompat.setTint(placeholder_art, ContextCompat.getColor(this, R.color.primary));
|
||||
albumArtView.setImageDrawable(placeholder_art);
|
||||
activityMprisBinding.albumArt.setImageDrawable(placeholder_art);
|
||||
} else {
|
||||
albumArtView.setImageBitmap(albumArt);
|
||||
activityMprisBinding.albumArt.setImageBitmap(albumArt);
|
||||
}
|
||||
|
||||
if (playerStatus.isSeekAllowed()) {
|
||||
timeText.setText(milisToProgress(playerStatus.getLength()));
|
||||
positionBar.setMax((int) (playerStatus.getLength()));
|
||||
positionBar.setProgress((int) (playerStatus.getPosition()));
|
||||
progressSlider.setVisibility(View.VISIBLE);
|
||||
mprisControlBinding.timeTextview.setText(milisToProgress(playerStatus.getLength()));
|
||||
mprisControlBinding.positionSeek.setMax((int) (playerStatus.getLength()));
|
||||
mprisControlBinding.positionSeek.setProgress((int) (playerStatus.getPosition()));
|
||||
mprisControlBinding.progressSlider.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
progressSlider.setVisibility(View.GONE);
|
||||
mprisControlBinding.progressSlider.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
int volume = playerStatus.getVolume();
|
||||
volumeSeek.setProgress(volume);
|
||||
mprisControlBinding.volumeSeek.setProgress(volume);
|
||||
|
||||
boolean isPlaying = playerStatus.isPlaying();
|
||||
if (isPlaying) {
|
||||
playButton.setImageResource(R.drawable.ic_pause_black);
|
||||
playButton.setEnabled(playerStatus.isPauseAllowed());
|
||||
mprisControlBinding.playButton.setImageResource(R.drawable.ic_pause_black);
|
||||
mprisControlBinding.playButton.setEnabled(playerStatus.isPauseAllowed());
|
||||
} else {
|
||||
playButton.setImageResource(R.drawable.ic_play_black);
|
||||
playButton.setEnabled(playerStatus.isPlayAllowed());
|
||||
mprisControlBinding.playButton.setImageResource(R.drawable.ic_play_black);
|
||||
mprisControlBinding.playButton.setEnabled(playerStatus.isPlayAllowed());
|
||||
}
|
||||
|
||||
volumeLayout.setVisibility(playerStatus.isSetVolumeAllowed() ? View.VISIBLE : View.GONE);
|
||||
rewButton.setVisibility(playerStatus.isSeekAllowed() ? View.VISIBLE : View.GONE);
|
||||
ffButton.setVisibility(playerStatus.isSeekAllowed() ? View.VISIBLE : View.GONE);
|
||||
mprisControlBinding.volumeLayout.setVisibility(playerStatus.isSetVolumeAllowed() ? View.VISIBLE : View.GONE);
|
||||
mprisControlBinding.rewButton.setVisibility(playerStatus.isSeekAllowed() ? View.VISIBLE : View.GONE);
|
||||
mprisControlBinding.ffButton.setVisibility(playerStatus.isSeekAllowed() ? View.VISIBLE : View.GONE);
|
||||
|
||||
invalidateOptionsMenu();
|
||||
|
||||
//Show and hide previous/next buttons simultaneously
|
||||
if (playerStatus.isGoPreviousAllowed() || playerStatus.isGoNextAllowed()) {
|
||||
prevButton.setVisibility(View.VISIBLE);
|
||||
prevButton.setEnabled(playerStatus.isGoPreviousAllowed());
|
||||
nextButton.setVisibility(View.VISIBLE);
|
||||
nextButton.setEnabled(playerStatus.isGoNextAllowed());
|
||||
mprisControlBinding.prevButton.setVisibility(View.VISIBLE);
|
||||
mprisControlBinding.prevButton.setEnabled(playerStatus.isGoPreviousAllowed());
|
||||
mprisControlBinding.nextButton.setVisibility(View.VISIBLE);
|
||||
mprisControlBinding.nextButton.setEnabled(playerStatus.isGoNextAllowed());
|
||||
} else {
|
||||
prevButton.setVisibility(View.GONE);
|
||||
nextButton.setVisibility(View.GONE);
|
||||
mprisControlBinding.prevButton.setVisibility(View.GONE);
|
||||
mprisControlBinding.nextButton.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -366,8 +310,11 @@ public class MprisActivity extends AppCompatActivity {
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
ThemeUtil.setUserPreferredTheme(this);
|
||||
setContentView(R.layout.activity_mpris);
|
||||
ButterKnife.bind(this);
|
||||
|
||||
activityMprisBinding = ActivityMprisBinding.inflate(getLayoutInflater());
|
||||
mprisControlBinding = activityMprisBinding.mprisControl;
|
||||
|
||||
setContentView(activityMprisBinding.getRoot());
|
||||
|
||||
String targetPlayerName = getIntent().getStringExtra("player");
|
||||
getIntent().removeExtra("player");
|
||||
@@ -388,19 +335,19 @@ public class MprisActivity extends AppCompatActivity {
|
||||
BackgroundService.RunCommand(MprisActivity.this, service -> service.addConnectionListener(connectionReceiver));
|
||||
connectToPlugin(targetPlayerName);
|
||||
|
||||
performActionOnClick(playButton, MprisPlugin.MprisPlayer::playPause);
|
||||
performActionOnClick(mprisControlBinding.playButton, MprisPlugin.MprisPlayer::playPause);
|
||||
|
||||
performActionOnClick(prevButton, MprisPlugin.MprisPlayer::previous);
|
||||
performActionOnClick(mprisControlBinding.prevButton, MprisPlugin.MprisPlayer::previous);
|
||||
|
||||
performActionOnClick(rewButton, p -> targetPlayer.seek(interval_time * -1));
|
||||
performActionOnClick(mprisControlBinding.rewButton, p -> targetPlayer.seek(interval_time * -1));
|
||||
|
||||
performActionOnClick(ffButton, p -> p.seek(interval_time));
|
||||
performActionOnClick(mprisControlBinding.ffButton, p -> p.seek(interval_time));
|
||||
|
||||
performActionOnClick(nextButton, MprisPlugin.MprisPlayer::next);
|
||||
performActionOnClick(mprisControlBinding.nextButton, MprisPlugin.MprisPlayer::next);
|
||||
|
||||
performActionOnClick(stopButton, MprisPlugin.MprisPlayer::stop);
|
||||
performActionOnClick(mprisControlBinding.stopButton, MprisPlugin.MprisPlayer::stop);
|
||||
|
||||
volumeSeek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||
mprisControlBinding.volumeSeek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||
@Override
|
||||
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
|
||||
}
|
||||
@@ -416,22 +363,21 @@ public class MprisActivity extends AppCompatActivity {
|
||||
targetPlayer.setVolume(seekBar.getProgress());
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
positionSeekUpdateRunnable = () -> BackgroundService.RunCommand(MprisActivity.this, service -> {
|
||||
if (targetPlayer != null) {
|
||||
positionBar.setProgress((int) (targetPlayer.getPosition()));
|
||||
mprisControlBinding.positionSeek.setProgress((int) (targetPlayer.getPosition()));
|
||||
}
|
||||
positionSeekUpdateHandler.removeCallbacks(positionSeekUpdateRunnable);
|
||||
positionSeekUpdateHandler.postDelayed(positionSeekUpdateRunnable, 1000);
|
||||
});
|
||||
positionSeekUpdateHandler.postDelayed(positionSeekUpdateRunnable, 200);
|
||||
|
||||
positionBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||
mprisControlBinding.positionSeek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||
@Override
|
||||
public void onProgressChanged(SeekBar seekBar, int progress, boolean byUser) {
|
||||
progressText.setText(milisToProgress(progress));
|
||||
mprisControlBinding.progressTextview.setText(milisToProgress(progress));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -448,13 +394,11 @@ public class MprisActivity extends AppCompatActivity {
|
||||
positionSeekUpdateHandler.postDelayed(positionSeekUpdateRunnable, 200);
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
nowPlayingText.setSelected(true);
|
||||
mprisControlBinding.nowPlayingTextview.setSelected(true);
|
||||
}
|
||||
|
||||
|
||||
final static int MENU_OPEN_URL = Menu.FIRST;
|
||||
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
|
@@ -204,14 +204,8 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
||||
}
|
||||
|
||||
if ("org.kde.kdeconnect_tp".equals(packageName)) {
|
||||
// Don't send our own notifications except notifications posted by SMSPlugin
|
||||
String groupKey = "";
|
||||
|
||||
// SMS Notifications on devices running API's lower than Lollipop are not supported
|
||||
// as groupKey's are not supported on API's older than Lollipop
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
groupKey = statusBarNotification.getGroupKey();
|
||||
}
|
||||
// Don't send our own notifications
|
||||
return;
|
||||
}
|
||||
|
||||
NetworkPacket np = new NetworkPacket(PACKET_TYPE_NOTIFICATION);
|
||||
|
@@ -13,14 +13,12 @@ import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.CheckBox;
|
||||
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.preference.DialogPreference;
|
||||
import androidx.preference.PreferenceViewHolder;
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
public class StoragePreference extends DialogPreference {
|
||||
@Nullable
|
||||
@@ -28,7 +26,7 @@ public class StoragePreference extends DialogPreference {
|
||||
@Nullable
|
||||
private OnLongClickListener onLongClickListener;
|
||||
|
||||
@BindView(R.id.checkbox) CheckBox checkbox;
|
||||
CheckBox checkbox;
|
||||
public boolean inSelectionMode;
|
||||
|
||||
public void setInSelectionMode(boolean inSelectionMode) {
|
||||
@@ -101,7 +99,7 @@ public class StoragePreference extends DialogPreference {
|
||||
public void onBindViewHolder(PreferenceViewHolder holder) {
|
||||
super.onBindViewHolder(holder);
|
||||
|
||||
ButterKnife.bind(this, holder.itemView);
|
||||
checkbox = (CheckBox) holder.itemView.findViewById(R.id.checkbox);
|
||||
|
||||
checkbox.setVisibility(inSelectionMode ? View.VISIBLE : View.INVISIBLE);
|
||||
|
||||
|
@@ -18,14 +18,6 @@ import android.text.TextWatcher;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.kde.kdeconnect.Helpers.StorageHelper;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.content.res.AppCompatResources;
|
||||
@@ -33,10 +25,12 @@ import androidx.core.content.ContextCompat;
|
||||
import androidx.core.graphics.drawable.DrawableCompat;
|
||||
import androidx.core.widget.TextViewCompat;
|
||||
import androidx.preference.PreferenceDialogFragmentCompat;
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.OnClick;
|
||||
import butterknife.Unbinder;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.kde.kdeconnect.Helpers.StorageHelper;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
import org.kde.kdeconnect_tp.databinding.FragmentStoragePreferenceDialogBinding;
|
||||
|
||||
public class StoragePreferenceDialogFragment extends PreferenceDialogFragmentCompat implements TextWatcher {
|
||||
private static final int REQUEST_CODE_DOCUMENT_TREE = 1001;
|
||||
@@ -46,11 +40,8 @@ public class StoragePreferenceDialogFragment extends PreferenceDialogFragmentCom
|
||||
private static final String KEY_STORAGE_INFO = "StorageInfo";
|
||||
private static final String KEY_TAKE_FLAGS = "TakeFlags";
|
||||
|
||||
@BindView(R.id.storageLocation) TextInputEditText storageLocation;
|
||||
@BindView(R.id.storageDisplayName) TextInputEditText storageDisplayName;
|
||||
@BindView(R.id.storageDisplayNameInputLayout) TextInputLayout storageDisplayInputLayout;
|
||||
private FragmentStoragePreferenceDialogBinding binding;
|
||||
|
||||
private Unbinder unbinder;
|
||||
private Callback callback;
|
||||
private Drawable arrowDropDownDrawable;
|
||||
private Button positiveButton;
|
||||
@@ -117,26 +108,33 @@ public class StoragePreferenceDialogFragment extends PreferenceDialogFragmentCom
|
||||
protected void onBindDialogView(View view) {
|
||||
super.onBindDialogView(view);
|
||||
|
||||
unbinder = ButterKnife.bind(this, view);
|
||||
binding = FragmentStoragePreferenceDialogBinding.bind(view);
|
||||
|
||||
storageDisplayName.setFilters(new InputFilter[]{new FileSeparatorCharFilter()});
|
||||
storageDisplayName.addTextChangedListener(this);
|
||||
binding.storageLocation.setOnClickListener(v -> {
|
||||
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
|
||||
//For API >= 26 we can also set Extra: DocumentsContract.EXTRA_INITIAL_URI
|
||||
startActivityForResult(intent, REQUEST_CODE_DOCUMENT_TREE);
|
||||
});
|
||||
|
||||
binding.storageDisplayName.setFilters(new InputFilter[]{new FileSeparatorCharFilter()});
|
||||
binding.storageDisplayName.addTextChangedListener(this);
|
||||
|
||||
if (getPreference().getKey().equals(getString(R.string.sftp_preference_key_add_storage))) {
|
||||
if (!stateRestored) {
|
||||
enablePositiveButton = false;
|
||||
storageLocation.setText(requireContext().getString(R.string.sftp_storage_preference_click_to_select));
|
||||
binding.storageLocation.setText(requireContext().getString(R.string.sftp_storage_preference_click_to_select));
|
||||
}
|
||||
|
||||
boolean isClickToSelect = TextUtils.equals(storageLocation.getText(),
|
||||
boolean isClickToSelect = TextUtils.equals(binding.storageLocation.getText(),
|
||||
getString(R.string.sftp_storage_preference_click_to_select));
|
||||
|
||||
TextViewCompat.setCompoundDrawablesRelative(storageLocation, null, null, isClickToSelect ? arrowDropDownDrawable : null, null);
|
||||
storageLocation.setEnabled(isClickToSelect);
|
||||
storageLocation.setFocusable(false);
|
||||
storageLocation.setFocusableInTouchMode(false);
|
||||
TextViewCompat.setCompoundDrawablesRelative(binding.storageLocation, null, null,
|
||||
isClickToSelect ? arrowDropDownDrawable : null, null);
|
||||
binding.storageLocation.setEnabled(isClickToSelect);
|
||||
binding.storageLocation.setFocusable(false);
|
||||
binding.storageLocation.setFocusableInTouchMode(false);
|
||||
|
||||
storageDisplayName.setEnabled(!isClickToSelect);
|
||||
binding.storageDisplayName.setEnabled(!isClickToSelect);
|
||||
} else {
|
||||
if (!stateRestored) {
|
||||
StoragePreference preference = (StoragePreference) getPreference();
|
||||
@@ -149,20 +147,20 @@ public class StoragePreferenceDialogFragment extends PreferenceDialogFragmentCom
|
||||
storageInfo = SftpPlugin.StorageInfo.copy(info);
|
||||
|
||||
if (Build.VERSION.SDK_INT < 21) {
|
||||
storageLocation.setText(storageInfo.uri.getPath());
|
||||
binding.storageLocation.setText(storageInfo.uri.getPath());
|
||||
} else {
|
||||
storageLocation.setText(DocumentsContract.getTreeDocumentId(storageInfo.uri));
|
||||
binding.storageLocation.setText(DocumentsContract.getTreeDocumentId(storageInfo.uri));
|
||||
}
|
||||
|
||||
storageDisplayName.setText(storageInfo.displayName);
|
||||
binding.storageDisplayName.setText(storageInfo.displayName);
|
||||
}
|
||||
|
||||
TextViewCompat.setCompoundDrawablesRelative(storageLocation, null, null, null, null);
|
||||
storageLocation.setEnabled(false);
|
||||
storageLocation.setFocusable(false);
|
||||
storageLocation.setFocusableInTouchMode(false);
|
||||
TextViewCompat.setCompoundDrawablesRelative(binding.storageLocation, null, null, null, null);
|
||||
binding.storageLocation.setEnabled(false);
|
||||
binding.storageLocation.setFocusable(false);
|
||||
binding.storageLocation.setFocusableInTouchMode(false);
|
||||
|
||||
storageDisplayName.setEnabled(true);
|
||||
binding.storageDisplayName.setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,15 +168,7 @@ public class StoragePreferenceDialogFragment extends PreferenceDialogFragmentCom
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
|
||||
unbinder.unbind();
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
@OnClick(R.id.storageLocation)
|
||||
void onSelectStorageClicked() {
|
||||
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
|
||||
//For API >= 26 we can also set Extra: DocumentsContract.EXTRA_INITIAL_URI
|
||||
startActivityForResult(intent, REQUEST_CODE_DOCUMENT_TREE);
|
||||
binding = null;
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
@@ -207,16 +197,16 @@ public class StoragePreferenceDialogFragment extends PreferenceDialogFragmentCom
|
||||
|
||||
storageInfo = new SftpPlugin.StorageInfo(displayName, uri);
|
||||
|
||||
storageLocation.setText(documentId);
|
||||
TextViewCompat.setCompoundDrawablesRelative(storageLocation, null, null, null, null);
|
||||
storageLocation.setError(null);
|
||||
storageLocation.setEnabled(false);
|
||||
binding.storageLocation.setText(documentId);
|
||||
TextViewCompat.setCompoundDrawablesRelative(binding.storageLocation, null, null, null, null);
|
||||
binding.storageLocation.setError(null);
|
||||
binding.storageLocation.setEnabled(false);
|
||||
|
||||
// TODO: Show name as used in android's picker app but I don't think it's possible to get that, everything I tried throws PermissionDeniedException
|
||||
storageDisplayName.setText(displayName);
|
||||
storageDisplayName.setEnabled(true);
|
||||
binding.storageDisplayName.setText(displayName);
|
||||
binding.storageDisplayName.setEnabled(true);
|
||||
} else {
|
||||
storageLocation.setError(result.errorMessage);
|
||||
binding.storageLocation.setError(result.errorMessage);
|
||||
setPositiveButtonEnabled(false);
|
||||
}
|
||||
break;
|
||||
@@ -240,7 +230,7 @@ public class StoragePreferenceDialogFragment extends PreferenceDialogFragmentCom
|
||||
@Override
|
||||
public void onDialogClosed(boolean positiveResult) {
|
||||
if (positiveResult) {
|
||||
storageInfo.displayName = storageDisplayName.getText().toString();
|
||||
storageInfo.displayName = binding.storageDisplayName.getText().toString();
|
||||
|
||||
if (getPreference().getKey().equals(getString(R.string.sftp_preference_key_add_storage))) {
|
||||
callback.addNewStoragePreference(storageInfo, takeFlags);
|
||||
@@ -274,7 +264,7 @@ public class StoragePreferenceDialogFragment extends PreferenceDialogFragmentCom
|
||||
setPositiveButtonEnabled(true);
|
||||
} else {
|
||||
setPositiveButtonEnabled(false);
|
||||
storageDisplayName.setError(result.errorMessage);
|
||||
binding.storageDisplayName.setError(result.errorMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -12,12 +12,6 @@ import android.os.Build;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -25,8 +19,11 @@ import androidx.appcompat.content.res.AppCompatResources;
|
||||
import androidx.core.widget.TextViewCompat;
|
||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
import org.kde.kdeconnect_tp.databinding.CustomDeviceItemBinding;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class CustomDevicesAdapter extends RecyclerView.Adapter<CustomDevicesAdapter.ViewHolder> {
|
||||
private ArrayList<String> customDevices;
|
||||
@@ -56,9 +53,10 @@ public class CustomDevicesAdapter extends RecyclerView.Adapter<CustomDevicesAdap
|
||||
@NonNull
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_device_item, parent, false);
|
||||
CustomDeviceItemBinding itemBinding =
|
||||
CustomDeviceItemBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||
|
||||
return new ViewHolder(v);
|
||||
return new ViewHolder(itemBinding);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -72,30 +70,29 @@ public class CustomDevicesAdapter extends RecyclerView.Adapter<CustomDevicesAdap
|
||||
}
|
||||
|
||||
class ViewHolder extends RecyclerView.ViewHolder implements SwipeableViewHolder {
|
||||
@BindView(R.id.deviceNameOrIPBackdrop) TextView deviceNameOrIPBackdrop;
|
||||
@BindView(R.id.swipeableView) FrameLayout swipeableView;
|
||||
@BindView(R.id.deviceNameOrIP) TextView deviceNameOrIP;
|
||||
private final CustomDeviceItemBinding itemBinding;
|
||||
|
||||
ViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
|
||||
ButterKnife.bind(this, itemView);
|
||||
ViewHolder(@NonNull CustomDeviceItemBinding itemBinding) {
|
||||
super(itemBinding.getRoot());
|
||||
this.itemBinding = itemBinding;
|
||||
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
||||
Drawable deleteDrawable = AppCompatResources.getDrawable(itemView.getContext(), R.drawable.ic_delete);
|
||||
TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(deviceNameOrIPBackdrop, deleteDrawable, null, deleteDrawable, null);
|
||||
Drawable deleteDrawable = AppCompatResources.getDrawable(itemBinding.getRoot().getContext(),
|
||||
R.drawable.ic_delete);
|
||||
TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(itemBinding.deviceNameOrIPBackdrop,
|
||||
deleteDrawable, null, deleteDrawable, null);
|
||||
}
|
||||
|
||||
deviceNameOrIP.setOnClickListener(v -> callback.onCustomDeviceClicked(customDevices.get(getAdapterPosition())));
|
||||
itemBinding.deviceNameOrIP.setOnClickListener(v -> callback.onCustomDeviceClicked(customDevices.get(getAdapterPosition())));
|
||||
}
|
||||
|
||||
void bind(String customDevice) {
|
||||
deviceNameOrIP.setText(customDevice);
|
||||
itemBinding.deviceNameOrIP.setText(customDevice);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getSwipeableView() {
|
||||
return swipeableView;
|
||||
return itemBinding.swipeableView;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -104,6 +104,8 @@ public class DeviceFragment extends Fragment {
|
||||
binding.pairButton.setOnClickListener(v -> {
|
||||
binding.pairButton.setVisibility(View.GONE);
|
||||
binding.pairMessage.setText("");
|
||||
binding.pairVerification.setVisibility(View.VISIBLE);
|
||||
binding.pairVerification.setText(SslHelper.getVerificationKey(SslHelper.certificate, device.certificate));
|
||||
binding.pairProgress.setVisibility(View.VISIBLE);
|
||||
BackgroundService.RunCommand(mActivity, service -> {
|
||||
device = service.getDevice(mDeviceId);
|
||||
@@ -259,6 +261,8 @@ public class DeviceFragment extends Fragment {
|
||||
public void run() {
|
||||
if (device.isPairRequestedByPeer()) {
|
||||
binding.pairMessage.setText(R.string.pair_requested);
|
||||
binding.pairVerification.setVisibility(View.VISIBLE);
|
||||
binding.pairVerification.setText(SslHelper.getVerificationKey(SslHelper.certificate, device.certificate));
|
||||
binding.pairingButtons.setVisibility(View.VISIBLE);
|
||||
binding.pairProgress.setVisibility(View.GONE);
|
||||
binding.pairButton.setVisibility(View.GONE);
|
||||
@@ -333,6 +337,8 @@ public class DeviceFragment extends Fragment {
|
||||
mActivity.runOnUiThread(() -> {
|
||||
if (binding.getRoot() == null) return;
|
||||
binding.pairMessage.setText(error);
|
||||
binding.pairVerification.setText("");
|
||||
binding.pairVerification.setVisibility(View.GONE);
|
||||
binding.pairProgress.setVisibility(View.GONE);
|
||||
binding.pairButton.setVisibility(View.VISIBLE);
|
||||
binding.pairRequestButtons.setVisibility(View.GONE);
|
||||
@@ -345,6 +351,7 @@ public class DeviceFragment extends Fragment {
|
||||
mActivity.runOnUiThread(() -> {
|
||||
if (binding.getRoot() == null) return;
|
||||
binding.pairMessage.setText(R.string.device_not_paired);
|
||||
binding.pairVerification.setVisibility(View.GONE);
|
||||
binding.pairProgress.setVisibility(View.GONE);
|
||||
binding.pairButton.setVisibility(View.VISIBLE);
|
||||
binding.pairRequestButtons.setVisibility(View.GONE);
|
||||
|
@@ -9,23 +9,22 @@ package org.kde.kdeconnect.UserInterface;
|
||||
import android.app.Dialog;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
import org.kde.kdeconnect_tp.databinding.EditTextAlertDialogViewBinding;
|
||||
|
||||
public class EditTextAlertDialogFragment extends AlertDialogFragment {
|
||||
private static final String KEY_HINT_RES_ID = "HintResId";
|
||||
private static final String KEY_TEXT = "Text";
|
||||
|
||||
@BindView(R.id.textInputLayout) TextInputLayout textInputLayout;
|
||||
@BindView(R.id.textInputEditText) TextInputEditText editText;
|
||||
private EditTextAlertDialogViewBinding binding;
|
||||
TextInputEditText editText;
|
||||
|
||||
private @StringRes int hintResId;
|
||||
private String text;
|
||||
|
||||
@@ -35,10 +34,12 @@ public class EditTextAlertDialogFragment extends AlertDialogFragment {
|
||||
Dialog dialog = super.onCreateDialog(savedInstanceState);
|
||||
dialog.setOnShowListener(dialogInterface -> {
|
||||
dialog.setOnShowListener(null);
|
||||
ButterKnife.bind(EditTextAlertDialogFragment.this, dialog);
|
||||
|
||||
textInputLayout.setHintEnabled(true);
|
||||
textInputLayout.setHint(getString(hintResId));
|
||||
binding = EditTextAlertDialogViewBinding.bind(dialog.getWindow().getDecorView());
|
||||
editText = binding.textInputEditText;
|
||||
|
||||
binding.textInputLayout.setHintEnabled(true);
|
||||
binding.textInputLayout.setHint(getString(hintResId));
|
||||
editText.setText(text);
|
||||
});
|
||||
|
||||
|
Reference in New Issue
Block a user