2
0
mirror of https://github.com/KDE/kdeconnect-android synced 2025-09-01 06:35:09 +00:00

Compare commits

...

23 Commits

Author SHA1 Message Date
Albert Vaca
8e28580e93 Release 1.13.7 2020-01-13 17:35:25 +01:00
Albert Vaca
10f94781c3 Only set volume to previousVolume if it has a previous value
onDestroy() would call stopPlaying(), but previousVolume would be 0 (the
default value) if startPlaying() had been never called.
2020-01-13 17:33:15 +01:00
l10n daemon script
2f4dcd1448 GIT_SILENT made messages (after extraction) 2020-01-12 02:48:22 +01:00
Albert Vaca
acbea545d0 Linter fixes 2020-01-10 12:50:23 +01:00
Albert Vaca
aa69b67cfe Fix NPE 2020-01-10 12:50:14 +01:00
l10n daemon script
9c19fd9b41 GIT_SILENT made messages (after extraction) 2020-01-09 02:41:02 +01:00
Nicolas Fella
bb1f79b5e6 Open .itinerary files always in KDE Itinerary 2020-01-07 19:09:56 +00:00
l10n daemon script
f7c78eeb8c GIT_SILENT made messages (after extraction) 2020-01-07 02:51:48 +01:00
Albert Vaca Cintora
510028d738 Do not make all ONLY_ALERT_ONCE notifications silent
Propagate the flag to the desktop so we can use it there to do what it's
supposed to do.

Fixes Whatsapp notifications not showing up in the desktop.
2020-01-05 22:48:36 +01:00
Albert Vaca Cintora
b3d91e083a Merge branch 'albertvaka/trusted-networks'
# Conflicts:
#	AndroidManifest.xml
2020-01-05 22:39:05 +01:00
Albert Vaca Cintora
e37aa08dac Release 1.13.6 2020-01-05 22:34:07 +01:00
Erik Duisters
ad801f1db8 Make FindMyPhone plugin work on Android 10 2020-01-05 17:40:54 +00:00
Albert Vaca Cintora
235e49c80f Fixes as per code review 2020-01-05 17:27:16 +01:00
Rishabh Sharma
d4f35d8bd6 added dark navigation bar for dark mode 2020-01-05 16:02:25 +01:00
l10n daemon script
5cf11c0e75 GIT_SILENT made messages (after extraction) 2019-12-23 02:41:01 +01:00
Erik Duisters
ef55d6d783 Certificate generation fails when locale is set to Arabic 2019-12-22 18:57:36 +00:00
l10n daemon script
f66263d05c GIT_SILENT made messages (after extraction) 2019-12-19 02:38:47 +01:00
l10n daemon script
c292639d36 GIT_SILENT made messages (after extraction) 2019-12-17 02:42:25 +01:00
l10n daemon script
01a8b84087 GIT_SILENT made messages (after extraction) 2019-12-04 02:39:45 +01:00
l10n daemon script
ffea85c740 GIT_SILENT made messages (after extraction) 2019-11-30 02:50:50 +01:00
Albert Vaca Cintora
f6df98d648 Fix NPE 2019-11-25 14:38:38 +01:00
Albert Vaca Cintora
1448814ed7 Ask for permission, add to settings and notify in main activity 2019-10-27 23:37:40 +01:00
Juan David Vega
7f8f1bee30 T8539 - Create a new flow to manage trusted networks
Summary: I have created a new activity that allows you to trust all networks or add networks one by one to a list when you are connected to that network

Test Plan:
Test Cases:
1. By default everything should works like it works before, If you uncheck the "Allow all" option in trusted network menu and there isn't any ssid in the trusted
network list the app doesn't send the first udp package and log "Current WiFi isn't a Trusted Network"
2. With the "Allow all" uncheck, use "Add: YOUR_SSID_NAME" button to add your current ssid to the trusted networks list, once you added, go back and the app should
works as always

{F6152314}

1 -> https://youtu.be/ZpCEFTstbJI

2 -> https://youtu.be/cVB1LXlFVyk

Reviewers: #kde_connect, jdvr

Subscribers: sredman, albertvaka, nicolasfella, apol, kdeconnect

Tags: #kde_connect

Maniphest Tasks: T8539

Differential Revision: https://phabricator.kde.org/D13505
2019-10-27 22:16:12 +01:00
53 changed files with 921 additions and 127 deletions

View File

@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-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="11350"
android:versionName="1.13.5">
android:versionCode="11370"
android:versionName="1.13.7">
<supports-screens
android:anyDensity="true"
@@ -15,6 +16,7 @@
android:name="android.hardware.telephony"
android:required="false" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.INTERNET" />
<!-- <uses-permission android:name="android.permission.BLUETOOTH" /> -->
@@ -28,11 +30,13 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:icon="@drawable/icon"
@@ -40,7 +44,8 @@
android:supportsRtl="true"
android:allowBackup="false"
android:networkSecurityConfig="@xml/network_security_config"
android:theme="@style/KdeConnectTheme">
android:theme="@style/KdeConnectTheme"
android:name="org.kde.kdeconnect.MyApplication">
<service
android:name="org.kde.kdeconnect.BackgroundService"
android:enabled="true" />
@@ -119,6 +124,12 @@
android:label="@string/findmyphone_title"
android:launchMode="singleInstance" />
<receiver android:name="org.kde.kdeconnect.Plugins.FindMyPhonePlugin.FindMyPhoneReceiver">
<intent-filter>
<action android:name="org.kde.kdeconnect.Plugins.FindMyPhonePlugin.foundIt" />
</intent-filter>
</receiver>
<!-- Plugin-related activities and services -->
<activity
@@ -267,8 +278,19 @@
android:name="android.support.PARENT_ACTIVITY"
android:value="org.kde.kdeconnect.UserInterface.PluginSettingsActivity" />
</activity>
<activity android:name="org.kde.kdeconnect.Plugins.PhotoPlugin.PhotoActivity" />
<activity
android:name="org.kde.kdeconnect.UserInterface.TrustedNetworksActivity"
android:label="@string/trusted_networks"
android:parentActivityName="org.kde.kdeconnect.UserInterface.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="org.kde.kdeconnect.UserInterface.MainActivity" />
</activity>
</application>
</manifest>

View File

@@ -6,7 +6,7 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2'
classpath 'com.android.tools.build:gradle:3.5.3'
}
}
@@ -82,6 +82,9 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.preference:preference:1.1.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'androidx.lifecycle:lifecycle-runtime:2.1.0'
implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
implementation 'androidx.lifecycle:lifecycle-common-java8:2.1.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'com.jakewharton:disklrucache:2.0.2' //For caching album art bitmaps
implementation 'com.jaredrummler:android-device-names:1.1.9' //To get a human-friendly device name

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z"/>
</vector>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:drawablePadding="8dp"
android:paddingTop="16dp"
android:paddingBottom="12dp"
android:text="@string/on_non_trusted_message"
android:drawableStart="@drawable/ic_warning"
android:drawableTint="?attr/colorControlNormal"
android:clickable="false"
>
</TextView>

View File

@@ -0,0 +1,38 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<CheckBox
android:text="@string/allow_all_networks_text"
android:layout_width="match_parent"
android:checked="true"
android:layout_height="wrap_content"
android:id="@+id/trust_all_networks_checkBox"/>
<TextView
android:id="@+id/trusted_network_list_empty"
android:layout_width="fill_parent"
android:layout_height="100dp"
android:text="@string/empty_trusted_networks_list_text"
android:gravity="center" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<Button
android:id="@android:id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone" />
</LinearLayout>

View File

@@ -14,4 +14,10 @@
android:title="@string/custom_device_list"
kdeconnect:showAsAction="never" />
<item
android:id="@+id/menu_trusted_networks"
android:orderInCategory="900"
android:title="@string/trusted_networks"
kdeconnect:showAsAction="never" />
</menu>

View File

@@ -123,7 +123,6 @@
<string name="findmyphone_title">جِد جهازي</string>
<string name="findmyphone_title_tablet">جِد جهازي اللوحيّ</string>
<string name="findmyphone_description">يرّن هذا الجهاز لتجده</string>
<string name="findmyphone_found">وُجد</string>
<string name="open">افتح</string>
<string name="close">أغلق</string>
</resources>

View File

@@ -172,7 +172,6 @@
<string name="pref_plugin_telepathy">Unviu de SMS</string>
<string name="pref_plugin_telepathy_desc">Unvia SMS dende l\'ordenador</string>
<string name="findmyphone_description">Fai qu\'esti preséu suene pa que pueas alcontralu</string>
<string name="findmyphone_found">Alcontrélu</string>
<string name="plugins_need_permission">Dalgunos plugins precisen permisos pa funcionar (tócalos pa más información):</string>
<string name="permission_explanation">Esti plugin precisa permisos pa funcionar</string>
<string name="optional_permission_explanation">Precises conceder permisos adicionales p\'activar toles funciones</string>

View File

@@ -205,6 +205,7 @@
<string name="refresh">Refresca</string>
<string name="unreachable_description">Aquest dispositiu aparellat no és accessible. Assegureu-vos que està connectat a la mateixa xarxa.</string>
<string name="no_wifi">No esteu connectat a una xarxa Wi-Fi, per tant, no podreu veure cap dispositiu. Feu clic aquí per activar la Wi-Fi.</string>
<string name="on_non_trusted_message">No és una xarxa de confiança: el descobriment automàtic està desactivat.</string>
<string name="no_file_browser">No hi ha instal·lat cap explorador de fitxers.</string>
<string name="pref_plugin_telepathy">Envia un SMS</string>
<string name="pref_plugin_telepathy_desc">Envia missatges de text des de l\'escriptori</string>
@@ -212,7 +213,7 @@
<string name="findmyphone_title_tablet">Troba la meva tauleta</string>
<string name="findmyphone_title_tv">Troba la meva TV</string>
<string name="findmyphone_description">Fa sonar aquest dispositiu perquè el pugueu trobar</string>
<string name="findmyphone_found">L\'he trobat</string>
<string name="findmyphone_found">S\'ha trobat</string>
<string name="open">Obre</string>
<string name="close">Tanca</string>
<string name="plugins_need_permission">Alguns connectors necessiten permisos per a funcionar (puntegeu per a més informació):</string>
@@ -243,6 +244,7 @@
<string name="notification_channel_persistent">Indicador de persistent</string>
<string name="notification_channel_media_control">Control multimèdia</string>
<string name="notification_channel_filetransfer">Transferència de fitxers</string>
<string name="notification_channel_high_priority">Prioritat alta</string>
<string name="mpris_stop">Atura el reproductor actual</string>
<string name="copy_url_to_clipboard">Copia l\'URL al porta-retalls</string>
<string name="clipboard_toast">Copiat al porta-retalls</string>
@@ -276,4 +278,11 @@
<string name="no_app_for_opening">No s\'ha trobat cap aplicació adequada per obrir aquest fitxer</string>
<string name="remote_keyboard_service">Teclat remot del KDE Connect</string>
<string name="presenter_pointer">Apuntador</string>
<string name="trusted_networks">Xarxes de confiança</string>
<string name="trusted_networks_desc">Restringeix el descobriment automàtic a les xarxes conegudes</string>
<string name="add_trusted_network">Afegeix %1s</string>
<string name="empty_trusted_networks_list_text">Encara no heu afegit cap xarxa de confiança</string>
<string name="allow_all_networks_text">Permet totes</string>
<string name="location_permission_needed_title">Es requereix permís</string>
<string name="location_permission_needed_desc">L\'Android requereix el permís d\'ubicació per identificar la xarxa WiFi</string>
</resources>

View File

@@ -228,7 +228,6 @@
<string name="findmyphone_title_tablet">Najít můj tablet</string>
<string name="findmyphone_title_tv">Najít mou TV</string>
<string name="findmyphone_description">Prozvoní toto zařízení, takže jej můžete najít</string>
<string name="findmyphone_found">Nalezeno</string>
<string name="open">Otevřít</string>
<string name="close">Zavřít</string>
<string name="plugins_need_permission">Některé moduly potřebují pro práci povolení (ťukněte pro více informací):</string>

View File

@@ -133,7 +133,6 @@
<string name="findmyphone_title">Find min telefon</string>
<string name="findmyphone_title_tablet">Find min tablet</string>
<string name="findmyphone_description">Ringer til denne enhed, så du kan finde den.</string>
<string name="findmyphone_found">Fundet</string>
<string name="open">Åbn</string>
<string name="close">Luk</string>
<string name="plugins_need_permission">Nogle plugins kræver tilladelser for at virke (tap for mere info):</string>

View File

@@ -212,7 +212,6 @@
<string name="findmyphone_title_tablet">Mein Tablet suchen</string>
<string name="findmyphone_title_tv">Meinen Fernseher suchen</string>
<string name="findmyphone_description">Ruft dieses Gerät an, damit Sie es finden können</string>
<string name="findmyphone_found">Gefunden</string>
<string name="open">Öffnen</string>
<string name="close">Schließen</string>
<string name="plugins_need_permission">Einige Module benötigen zusätzliche Berechtigungen, tippen Sie für weitere Details:</string>

View File

@@ -133,7 +133,6 @@
<string name="findmyphone_title">Αναζήτηση του κινητού μου</string>
<string name="findmyphone_title_tablet">Εύρεση της ταμπλέτας μου</string>
<string name="findmyphone_description">Καλεί αυτή τη συσκευή ώστε να την εντοπίσετε</string>
<string name="findmyphone_found">Βρέθηκε</string>
<string name="open">Άνοιγμα</string>
<string name="close">Κλείσιμο</string>
<string name="plugins_need_permission">Κάποια πρόσθετα απαιτούν δικαιώματα για να λειτουργήσουν (χτυπήστε για περισσότερες πληροφορίες):</string>

View File

@@ -212,7 +212,6 @@
<string name="findmyphone_title_tablet">Find my tablet</string>
<string name="findmyphone_title_tv">Find my TV</string>
<string name="findmyphone_description">Rings this device so you can find it</string>
<string name="findmyphone_found">Found</string>
<string name="open">Open</string>
<string name="close">Close</string>
<string name="plugins_need_permission">Some Plugins need permissions to work (tap for more info):</string>

View File

@@ -212,7 +212,6 @@
<string name="findmyphone_title_tablet">Encontrar mi tableta</string>
<string name="findmyphone_title_tv">Encontrar mi TV</string>
<string name="findmyphone_description">Hace sonar este dispositivo para que pueda encontrarlo</string>
<string name="findmyphone_found">Encontrado</string>
<string name="open">Abrir</string>
<string name="close">Cerrar</string>
<string name="plugins_need_permission">Algunos complementos necesitan permisos para funcionar (pulse para más información):</string>

View File

@@ -1,6 +1,10 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="kde_connect">KDE Connect</string>
<string name="foreground_notification_no_devices">Pole ühendatud ühegi seadmega</string>
<string name="foreground_notification_devices">Ühendatud seadmega: %s</string>
<string name="pref_plugin_telephony">Telefoni märguanded</string>
<string name="pref_plugin_telephony_desc">Sisenevate kõnede märguannete saatmine</string>
<string name="pref_plugin_battery">Aku aruanne</string>
<string name="pref_plugin_battery_desc">Perioodiline aku olekust teavitamine</string>
<string name="pref_plugin_sftp">Failisüsteemi sirvimine</string>
@@ -9,10 +13,16 @@
<string name="pref_plugin_clipboard_desc">Lõikepuhvri sisu jagamine</string>
<string name="pref_plugin_mousepad">Kaugsisestus</string>
<string name="pref_plugin_mousepad_desc">Telefoni või tahvli kasutamine puuteplaadi ja klaviatuurina</string>
<string name="pref_plugin_presenter">Kaugslaidiseanss</string>
<string name="pref_plugin_presenter_desc">Seadme kasutamine esitluse slaidide vahetamiseks</string>
<string name="pref_plugin_remotekeyboard">Kaugklahvivajutuste vastuvõtmine</string>
<string name="pref_plugin_remotekeyboard_desc">Kaugseadmete klahvivajutuste vastuvõtmine</string>
<string name="pref_plugin_mpris">Multimeedia juhtimine</string>
<string name="pref_plugin_mpris_desc">Meediamängija kaugjuhtimise võimaldamine</string>
<string name="pref_plugin_runcommand">Käsu käivitamine</string>
<string name="pref_plugin_runcommand_desc">Telefonist või tahvlist kaugkäskude käivitamine</string>
<string name="pref_plugin_contacts">Kontaktide sünkroonimine</string>
<string name="pref_plugin_contacts_desc">Võimaldab sünkroonida seadme kontaktiloendit</string>
<string name="pref_plugin_ping">Ping</string>
<string name="pref_plugin_ping_desc">Pingide saatmine ja vastuvõtmine</string>
<string name="pref_plugin_notifications">Märguannete sünkroonimine</string>
@@ -26,12 +36,20 @@
<string name="cancel">Loobu</string>
<string name="open_settings">Ava seadistused</string>
<string name="no_permissions">Märguannete nägemiseks tuleb anda vastavad õigused</string>
<string name="no_permission_mprisreceiver">Meediamängija juhtimiseks tuleb lubada juurdepääs märguannetele</string>
<string name="no_permissions_remotekeyboard">Klahvivajutuste vastuvõtmiseks tuleb aktiveerida KDE Connecti kaugklaviatuur</string>
<string name="send_ping">Saada ping</string>
<string name="open_mpris_controls">Multimeedia juhtimine</string>
<string name="remotekeyboard_editing_only_title">Kaugklahvide käitlemine ainult redigeerimisel</string>
<string name="remotekeyboard_not_connected">Aktiivne kaugklaviatuuri ühendus puudub, pane see paika KDE Connectis</string>
<string name="remotekeyboard_connected">Kaugklaviatuuri ühendus on aktiivne</string>
<string name="remotekeyboard_multiple_connections">Kaugklaviatuuri ühendusi on üle ühe, palun vali seade, mida seadistada</string>
<string name="open_mousepad">Kaugsisestus</string>
<string name="mousepad_info">Hiirekursori liigutamiseks liiguta sõrme ekraanil. Koputa klõpsamiseks ja kasuta kaht või kolme sõrme parema ja keskmise nupu jaoks. Kahe sõrmega saab kerida. Pika vajutusega saab lohistada.</string>
<string name="mousepad_double_tap_settings_title">Kahe sõrmega koputamise toimingu määramine</string>
<string name="mousepad_triple_tap_settings_title">Kolme sõrmega koputamise toimingu määramine</string>
<string name="mousepad_sensitivity_settings_title">Puutepadja tundlikkuse määramine</string>
<string name="mousepad_acceleration_profile_settings_title">Osutusseadme kiirenduse määramine</string>
<string name="mousepad_scroll_direction_title">Vastupidi kerimise suund</string>
<string-array name="mousepad_tap_entries">
<item>Paremklõps</item>
@@ -46,12 +64,12 @@
<item>Kõige kiirem</item>
</string-array>
<string-array name="mousepad_acceleration_profile_entries">
<item>No Acceleration</item>
<item>Weakest</item>
<item>Weaker</item>
<item>Medium</item>
<item>Stronger</item>
<item>Strongest</item>
<item>Kiirendus puudub</item>
<item>Kõige nõrgem</item>
<item>Nõrgem</item>
<item>Keskmine</item>
<item>Tugev</item>
<item>Kõige tugevam</item>
</string-array>
<string name="category_connected_devices">Ühendatud seadmed</string>
<string name="category_not_paired_devices">Saadaolevad seadmed</string>
@@ -72,7 +90,40 @@
<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">
<item quantity="one">Saadi %1$d fail seadmest %2$s</item>
<item quantity="other">Saadi %1$d faili seadmest %2$s</item>
</plurals>
<plurals name="incoming_files_text">
<item quantity="one">File: %1s</item>
<item quantity="other">(Fail %2$d / %3$d) : %1$s</item>
</plurals>
<plurals name="outgoing_file_title">
<item quantity="one">Saadeti %1$d fail seadmesse %2$s</item>
<item quantity="other">Saadeti %1$d faili seadmesse %2$s</item>
</plurals>
<plurals name="outgoing_files_text">
<item quantity="one">Fail: %1$s</item>
<item quantity="other">(Fail %2$d / %3$d) : %1$s</item>
</plurals>
<plurals name="received_files_title">
<item quantity="one">Saadi fail %1$s</item>
<item quantity="other">Saadi %2$d faili seadmest %1$s</item>
</plurals>
<plurals name="received_files_fail_title">
<item quantity="one">Faili saamine seadmest %1$s nurjus</item>
<item quantity="other">%2$d faili saamine %3$d failist seadmest %1$s nurjus</item>
</plurals>
<plurals name="sent_files_title">
<item quantity="one">Fail saadeti seadmesse %1$s</item>
<item quantity="other">%2$d faili saadeti seadmesse %1$s</item>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="one">Faili saatmine seadmesse %1$s nurjus</item>
<item quantity="other">%2$d faili saamine %3$d failist seadmesse %1$s nurjus</item>
</plurals>
<string name="received_file_text">Koputa \"%1s\" avamiseks</string>
<string name="cannot_create_file">Faili %s loomine nurjus</string>
<string name="tap_to_answer">Koputa vastamiseks</string>
<string name="right_click">Saada paremklõps</string>
<string name="middle_click">Saada keskklõps</string>
@@ -81,13 +132,16 @@
<string name="request_pairing">Soovi paardumist</string>
<string name="pairing_accept">Nõustu</string>
<string name="pairing_reject">Keeldu</string>
<string name="settings">Seadistused</string>
<string name="mpris_play">Esita</string>
<string name="mpris_pause">Paus</string>
<string name="mpris_previous">Eelmine</string>
<string name="mpris_rew">Keri tagasi</string>
<string name="mpris_ff">Kiiresti edasi</string>
<string name="mpris_next">Järgmine</string>
<string name="mpris_volume">Helitugevus</string>
<string name="mpris_time_settings_title">Edasi-tagasikerimise nupud</string>
<string name="mpris_time_settings_summary">Kiire edasi-tagasikerimise aja kohandamine vajutamisel</string>
<string-array name="mpris_time_entries">
<item>10 sekundit</item>
<item>20 sekundit</item>
@@ -95,39 +149,140 @@
<item>1 minut</item>
<item>2 minutit</item>
</string-array>
<string name="mpris_notification_settings_title">Meedia juhtimise märguannete näitamine</string>
<string name="mpris_notification_settings_summary">Meediamängija juhtimise võimaldamine ilma KDE Connecti avamata</string>
<string name="share_to">Jaga ...</string>
<string name="protocol_version_newer">See seade kasutab uuemat protokolli versiooni</string>
<string name="plugin_settings_with_name">%s seadistused</string>
<string name="invalid_device_name">Vigane seadme nimi</string>
<string name="shareplugin_text_saved">Saadi tekst, salvestati lõikepuhvrisse</string>
<string name="custom_devices_settings">Kohandatud seadmete loend</string>
<string name="custom_device_list">Lisa seadmeid IP järgi</string>
<string name="custom_device_deleted">Kohandatud seade kustutati</string>
<string name="custom_device_list_help">Kui sinu seadet automaatselt ei tuvastatud, võib lisada selle IP-aadressi või masinanime nupule klõpsates</string>
<string name="custom_device_fab_hint">Lisa seade</string>
<string name="undo">Võta tagasi</string>
<string name="share_notification_preference">Mürarikkad märguanded</string>
<string name="share_notification_preference_summary">Vibreerimine ja heli esitamine faili saamisel</string>
<string name="share_destination_customize">Sihtkataloogi kohandamine</string>
<string name="share_destination_customize_summary_disabled">Saadud failid salvestatakse kataloogi Allalaaditud</string>
<string name="share_destination_customize_summary_enabled">Failid salvestatakse allmääratud kataloogi</string>
<string name="share_destination_folder_preference">Sihtkataloog</string>
<string name="share">Jaga</string>
<string name="share_received_file">Jaga \"%s\"</string>
<string name="title_activity_notification_filter">Märguannete filter</string>
<string name="filter_apps_info">Valitud rakenduste märguanded sünkroonitakse</string>
<string name="sftp_sdcard_num">SD-kaart %d</string>
<string name="sftp_sdcard">SD-kaart</string>
<string name="sftp_readonly">(kirjutuskaitstud)</string>
<string name="sftp_camera">Kaamera pildid</string>
<string name="add_device_dialog_title">Seadme lisamine</string>
<string name="add_device_hint">Masinanimi või IP-aadress</string>
<string name="sftp_preference_detected_sdcards">Tuvastatud SD-kaardid</string>
<string name="sftp_preference_edit_sdcard_title">SD-kaardi muutmine</string>
<string name="sftp_preference_configured_storage_locations">Seadistatud salvestuskohad</string>
<string name="sftp_preference_add_storage_location_title">Salvestuskoha lisamine</string>
<string name="sftp_preference_edit_storage_location">Salvestuskoha muutmine</string>
<string name="sftp_preference_add_camera_shortcut">Lisa kaamerakausta kiirviit</string>
<string name="sftp_preference_add_camera_shortcut_summary_on">Kaamerakausta kiirviida lisamine</string>
<string name="sftp_preference_add_camera_shortcut_summary_off">Kaamerakausta kiirviita ei lisata</string>
<string name="sftp_storage_preference_storage_location">Salvestuskoht</string>
<string name="sftp_storage_preference_storage_location_already_configured">See asukoht on juba seadistatud</string>
<string name="sftp_storage_preference_click_to_select">"klõpsa valimiseks "</string>
<string name="sftp_storage_preference_display_name">Näidatav nimi</string>
<string name="sftp_storage_preference_display_name_already_used">See nimi on juba kasutusel</string>
<string name="sftp_storage_preference_display_name_cannot_be_empty">Näidatav nimi ei tohi olla andmata</string>
<string name="sftp_action_mode_menu_delete">Kustuta</string>
<string name="sftp_no_sdcard_detected">Ühtegi SD-kaarti ei leitud</string>
<string name="sftp_no_storage_locations_configured">Ühtegi salvestuskohta pole seadistatud</string>
<string name="sftp_saf_permission_explanation">Ligipääsuks failidele eemalt tuleb seadistada salvestuskohad</string>
<string name="no_players_connected">Ühtegi mängijat ei leitud</string>
<string name="send_files">Saada faile</string>
<string name="pairing_title">KDE Connecti seadmed</string>
<string name="pairing_description">Siin näeb teisi seadmeid samas võrgus, kus töötab KDE Connect</string>
<string name="device_rename_title">Muuda seadme nime</string>
<string name="device_rename_confirm">Muuda nime</string>
<string name="device_rename_title">Seadme nime muutmine</string>
<string name="device_rename_confirm">Nime muutmine</string>
<string name="refresh">Värskenda</string>
<string name="unreachable_description">See paardunud seade pole saadaval. Kontrolli, kas see on ikka ühendatud sinuga samasse võrku.</string>
<string name="no_wifi">Sul puudub ühendus Wi-Fi võrguga, mistõttu sa ei näe ühtegi seadet. Klõpsa siia Wi-Fi sisselülitamiseks.</string>
<string name="on_non_trusted_message">See ei ole usaldusväärne võrk: automaatne tuvastamine on keelatud.</string>
<string name="no_file_browser">Ühtegi failisirvijat pole paigaldatud</string>
<string name="pref_plugin_telepathy">Saada SMS</string>
<string name="pref_plugin_telepathy_desc">Tekstisõnumite saatmine oma töölaualt</string>
<string name="findmyphone_title">Leia mu telefon</string>
<string name="findmyphone_title_tablet">Leia mu tahvel</string>
<string name="findmyphone_title_tv">Leia mu teler</string>
<string name="findmyphone_description">Seadmele helistamine, et see üles leida</string>
<string name="findmyphone_found">Leitud</string>
<string name="open">Ava</string>
<string name="close">Sulge</string>
<string name="plugins_need_permission">Mõned pluginad vajavad töötamiseks õigusi (koputa rohkema teabe saamiseks);</string>
<string name="permission_explanation">See plugin vajab töötamiseks õigusi</string>
<string name="optional_permission_explanation">Kõigi funktsioonide lubamiseks tuleb sul anda lisaõigusi</string>
<string name="plugins_need_optional_permission">Mõne plugina osa omadusi on keelatud õiguste puudumise tõttu (koputa rohkema teabe saamiseks):</string>
<string name="share_optional_permission_explanation">Failide jagamiseks telefoni ja töölau vahel tuleb anda telefonile ligipääs</string>
<string name="telepathy_permission_explanation">SMS-ide lugemiseks ja kirjutamiseks töölaual tuleb anda õigused SMS-ile</string>
<string name="telephony_permission_explanation">Kõnede nägemiseks töölaual tuleb anda õigused telefonikõnede logile ja telefoni olekule</string>
<string name="telephony_optional_permission_explanation">Telefoninumbri asemel kontakti nime nägemiseks tuleb anda õigused telefoni kontaktidele</string>
<string name="contacts_permission_explanation">Oma kontaktide jagamiseks töölauaga tuleb anda õigused kontaktidele</string>
<string name="select_ringtone">Vali helin</string>
<string name="telephony_pref_blocked_title">Blokitud numbrid</string>
<string name="telephony_pref_blocked_dialog_desc">Neilt numbritelt tulevaid kõnesid ja SMS-e ei näidata. Palun pane iga number kirja eraldi reale</string>
<string name="mpris_coverart_description">Aktiivse meedia kaanepilt</string>
<string name="device_icon_description">Seadme ikoon</string>
<string name="settings_icon_description">Seadistuste ikoon</string>
<string name="presenter_fullscreen">Täisekraan</string>
<string name="presenter_exit">Välju esitlusest</string>
<string name="presenter_lock_tip">Seade on võimalik lukku panna ning liikuda eelmisele/järgmisele slaidile helitugevuse klahvidega</string>
<string name="add_command">Lisa käsk</string>
<string name="addcommand_explanation">Ühtegi käsku pole registreeritud</string>
<string name="addcommand_explanation2">Uusi käske saab lisada Süsteemi seadistustes KDE Connecti all</string>
<string name="add_command_description">Käske saab lisada töölaual</string>
<string name="pref_plugin_mprisreceiver">Meediafailide mängija juhtimine</string>
<string name="pref_plugin_mprisreceiver_desc">Telefoni meediamängijate juhtimine teisest seadmest</string>
<string name="notification_channel_default">Muud märguanded</string>
<string name="notification_channel_persistent">Püsiindikaator</string>
<string name="notification_channel_media_control">Meedia juhtimine</string>
<string name="notification_channel_filetransfer">Failiülekanne</string>
<string name="notification_channel_high_priority">Kõrge prioriteediga</string>
<string name="mpris_stop">Peata aktiivne mängija</string>
<string name="copy_url_to_clipboard">Kopeeri URL lõikepuhvrisse</string>
<string name="clipboard_toast">Kopeeriti lõikepuhvrisse</string>
<string name="runcommand_notreachable">Seade pole saadaval</string>
<string name="runcommand_notpaired">Seade pole paaritatud</string>
<string name="runcommand_nosuchdevice">Sellist seadet ei ole</string>
<string name="runcommand_noruncommandplugin">Sel seadmel ei ole käsu käivitamise plugin sisse lülitatud</string>
<string name="pref_plugin_findremotedevice">Kaugseadme leidmine</string>
<string name="pref_plugin_findremotedevice_desc">Helistamine kaugseadmesse</string>
<string name="ring">Helista</string>
<string name="pref_plugin_systemvolume">Süsteemi helitugevus</string>
<string name="pref_plugin_systemvolume_desc">Kaugseadme helitugevuse juhtimine</string>
<string name="mute">Tumm</string>
<string name="all">Kõik</string>
<string name="devices">Seadmed</string>
<string name="settings_rename">Seadme nimi</string>
<string name="settings_dark_mode">Tume teema</string>
<string name="settings_more_settings_title">Rohkem seadistusi</string>
<string name="settings_more_settings_text">Seadmekaupa seadistusi leiab seadme \"Pluginate seadistuste \" all.</string>
<string name="setting_persistent_notification">Püsimärguannete näitamine</string>
<string name="setting_persistent_notification_oreo">Püsimärguanded</string>
<string name="setting_persistent_notification_description">Koputa märguannete seadistuste lubamiseks/keelamiseks</string>
<string name="extra_options">Erivalikud</string>
<string name="privacy_options">Privaatsuse valikud</string>
<string name="set_privacy_options">Privaatsusvalikute määramine</string>
<string name="block_contents">Märguannete sisu blokkimine</string>
<string name="block_images">Märguannete piltide blokkimine</string>
<string name="notification_channel_receivenotification">Märguanded teistest seadmetest</string>
<string name="take_picture">Käivita kaamera</string>
<string name="plugin_photo_desc">Kaamerarakenduse käivitamine piltide tegemiseks ja ülekandmiseks</string>
<string name="no_app_for_opening">Selle faili avamiseks ei leitud sobivat rakendust</string>
<string name="remote_keyboard_service">KDE Connecti kaugklaviatuur</string>
<string name="presenter_pointer">Osutusseade</string>
<string name="trusted_networks">Usaldusväärsed võrgud</string>
<string name="trusted_networks_desc">Automaatset tuvastamist kasutatakse ainult tuntud võrkudes</string>
<string name="add_trusted_network">Lisa %1s</string>
<string name="empty_trusted_networks_list_text">Sa ei ole veel lisanud ühtegi usaldusväärset võrku</string>
<string name="allow_all_networks_text">Luba kõik</string>
<string name="location_permission_needed_title">Õigusenõue</string>
<string name="location_permission_needed_desc">Android nõuab asukohaõigust sinu WiFi-võrgu tuvastamiseks</string>
</resources>

View File

@@ -212,7 +212,6 @@
<string name="findmyphone_title_tablet">Bilatu nire tableta</string>
<string name="findmyphone_title_tv">Aurkitu nire TB</string>
<string name="findmyphone_description">Gailuaren dei-doinua jotzen du aurki dezazun</string>
<string name="findmyphone_found">Aurkituta</string>
<string name="open">Ireki</string>
<string name="close">Itxi</string>
<string name="plugins_need_permission">Plugin batzuek jarduteko baimenak behar dituzte (tak egin informazio gehiagorako):</string>

View File

@@ -211,7 +211,6 @@
<string name="findmyphone_title_tablet">Löydä tablettini</string>
<string name="findmyphone_title_tv">Etsi televeisioni</string>
<string name="findmyphone_description">Laittaa laitteen soimaan, jotta voit löytää sen.</string>
<string name="findmyphone_found">Löytyi</string>
<string name="open">Avaa</string>
<string name="close">Sulje</string>
<string name="plugins_need_permission">Jotkin liitännäiset vaativat toimiakseen lisäkäyttöoikeuksia (lisätietoa napsauttamalla):</string>

View File

@@ -212,7 +212,6 @@
<string name="findmyphone_title_tablet">Trouver ma tablette</string>
<string name="findmyphone_title_tv">Trouver ma télévision</string>
<string name="findmyphone_description">Fait sonner le périphérique pour vous aider à le retrouver</string>
<string name="findmyphone_found">Trouvé</string>
<string name="open">Ouvrir</string>
<string name="close">Fermer</string>
<string name="plugins_need_permission">Certains modules externes nécessitent des permissions pour fonctionner (tapez pour plus d\'informations) :</string>
@@ -238,6 +237,7 @@
<string name="addcommand_explanation2">Vous pouvez ajouter de nouvelles commandes dans la configuration système de KDE Connect</string>
<string name="add_command_description">Vous pouvez ajouter des commandes sur votre ordinateur</string>
<string name="pref_plugin_mprisreceiver">Contrôle du lecteur multimédia</string>
<string name="pref_plugin_mprisreceiver_desc">Contrôlez les lecteurs multimédia de votre téléphone depuis un autre appareil</string>
<string name="notification_channel_default">Autres notifications</string>
<string name="notification_channel_persistent">Indicateur persistant</string>
<string name="notification_channel_media_control">Contrôle multimédia</string>

View File

@@ -212,7 +212,6 @@
<string name="findmyphone_title_tablet">Atopar a tableta</string>
<string name="findmyphone_title_tv">Atopar o meu televisor</string>
<string name="findmyphone_description">Reproduce un son de chamada no dispositivo para que poida atopalo.</string>
<string name="findmyphone_found">Atopado</string>
<string name="open">Abrir</string>
<string name="close">Pechar</string>
<string name="plugins_need_permission">Algúns complementos necesitan permisos para funcionar (toque para máis información):</string>

View File

@@ -133,7 +133,6 @@
<string name="findmyphone_title">מצא את הפלאפון שלי</string>
<string name="findmyphone_title_tablet">מצא את הטבלט שלי</string>
<string name="findmyphone_description">מפעיל רעש במכשיר כדי שתוכל למצוא אותו.</string>
<string name="findmyphone_found">נמצא</string>
<string name="open">פתח</string>
<string name="close">סגור</string>
</resources>

View File

@@ -3,7 +3,7 @@
<string name="kde_connect">KDE Connect</string>
<string name="foreground_notification_no_devices">Belum terkoneksi ke perangkat apa pun</string>
<string name="foreground_notification_devices">Terkoneksi ke: %s</string>
<string name="pref_plugin_telephony">Penotifikasi telepon</string>
<string name="pref_plugin_telephony">Penotifikasi ponsel</string>
<string name="pref_plugin_telephony_desc">Kirim notifikasi untuk panggilan yang masuk</string>
<string name="pref_plugin_battery">Laporan baterai</string>
<string name="pref_plugin_battery_desc">Status baterai laporkan secara berkala</string>
@@ -12,14 +12,14 @@
<string name="pref_plugin_clipboard">Sinkron clipboard</string>
<string name="pref_plugin_clipboard_desc">Berbagi konten papan-klip</string>
<string name="pref_plugin_mousepad">Input jarak jauh</string>
<string name="pref_plugin_mousepad_desc">Gunakan telepon atau tabletmu sebagai touchpad dan keyboard</string>
<string name="pref_plugin_mousepad_desc">Gunakan ponsel atau tabletmu sebagai touchpad dan keyboard</string>
<string name="pref_plugin_presenter_desc">Gunakan perangkatmu untuk mengubah slide dalam sebuah presentasi</string>
<string name="pref_plugin_remotekeyboard">Terima penekanan tuts jarak jauh</string>
<string name="pref_plugin_remotekeyboard_desc">Terima peristiwa tekan-tuts dari perangkat jarak jauh</string>
<string name="pref_plugin_mpris">Kendalikan multimedia</string>
<string name="pref_plugin_mpris_desc">Menyediakan sebuah kendali jarak jauh untuk pemutar mediamu</string>
<string name="pref_plugin_runcommand">Jalankan Perintah</string>
<string name="pref_plugin_runcommand_desc">Pemicu perintah jarak jauh dari telepon dan tablet-mu</string>
<string name="pref_plugin_runcommand_desc">Pemicu perintah jarak jauh dari ponsel dan tablet-mu</string>
<string name="pref_plugin_contacts">Penyinkron Kontak</string>
<string name="pref_plugin_contacts_desc">Bolehkan menyinkronkan buku kontak pada perangkat</string>
<string name="pref_plugin_ping">Ping</string>
@@ -160,11 +160,10 @@
<string name="no_file_browser">Tidak adanya penelusur file yang terinstal.</string>
<string name="pref_plugin_telepathy">Kirim SMS</string>
<string name="pref_plugin_telepathy_desc">Kirim teks perpesanan dari desktopmu</string>
<string name="findmyphone_title">Temukan teleponku</string>
<string name="findmyphone_title">Temukan ponselku</string>
<string name="findmyphone_title_tablet">Temukan tabletku</string>
<string name="findmyphone_title_tv">Temukan TV-ku</string>
<string name="findmyphone_description">Deringkan perangkat ini sehingga kamu bisa menemukannya</string>
<string name="findmyphone_found">Ketemu</string>
<string name="open">Buka</string>
<string name="close">Tutup</string>
<string name="plugins_need_permission">Beberapa plugin perlu perizinan untuk kerja (ketuk untuk info selebihnya):</string>
@@ -173,7 +172,8 @@
<string name="plugins_need_optional_permission">Beberapa plugin yang memiliki fitur dinonfungsikan karena kurangnya perizinan (ketuk untuk info selebihnya):</string>
<string name="share_optional_permission_explanation">Untuk membagikan file antara teleponmu dan desktopmu kamu harus memberikan akses ke penyimpanan teleponmu</string>
<string name="telepathy_permission_explanation">Untuk membaca dan menulis SMS dari desktopmu kamu harus memberikan perizinan untuk SMS</string>
<string name="telephony_optional_permission_explanation">Untuk melihat nama kontak alih-alih nomor telepon, kamu harus memberikan akses ke kontak telepon</string>
<string name="telephony_permission_explanation">Untuk melihat panggilan ponsel pada desktop kamu harus memberikan perizinan untuk log panggilan ponsel dan keadaan ponsel</string>
<string name="telephony_optional_permission_explanation">Untuk melihat nama kontak alih-alih nomor ponsel, kamu harus memberikan akses ke kontak ponsel</string>
<string name="contacts_permission_explanation">Untuk membagikan buku kontak dengan desktopmu, kamu harus memberikan perizinan kontak</string>
<string name="select_ringtone">Pilih sebuah ringtone</string>
<string name="telephony_pref_blocked_title">Nomor yang diblokir</string>
@@ -186,4 +186,9 @@
<string name="addcommand_explanation2">"Kamu bisa menambahkan perintah baru dalam System Settings KDE Connect "</string>
<string name="add_command_description">Kamu bisa menambahkan perintah pada desktop</string>
<string name="pref_plugin_mprisreceiver">Kendali Pemutar Media</string>
<string name="pref_plugin_mprisreceiver_desc">Kendalikan pemutar media ponselmu dari perangkat lainnya</string>
<string name="devices">Perangkat</string>
<string name="settings_rename">Nama perangkat</string>
<string name="settings_dark_mode">Tema gelap</string>
<string name="settings_more_settings_title">Pengaturan selebihnya</string>
</resources>

View File

@@ -212,7 +212,6 @@
<string name="findmyphone_title_tablet">Trova il mio tablet</string>
<string name="findmyphone_title_tv">Trova il mio televisore</string>
<string name="findmyphone_description">Fa squillare questo dispositivo per trovarlo</string>
<string name="findmyphone_found">Trovato</string>
<string name="open">Apri</string>
<string name="close">Chiudi</string>
<string name="plugins_need_permission">Alcune estensioni hanno bisogno di permessi per funzionare (tocca per maggiori informazioni):</string>

View File

@@ -204,7 +204,6 @@
<string name="findmyphone_title_tablet">タブレットを捜索</string>
<string name="findmyphone_title_tv">TV を捜索</string>
<string name="findmyphone_description">このデバイスを鳴らすことで捜索できます</string>
<string name="findmyphone_found">発見</string>
<string name="open">開く</string>
<string name="close">閉じる</string>
<string name="plugins_need_permission">いくつかのプラグインが機能するには権限が必要です (タップして詳細情報を表示):</string>

View File

@@ -204,7 +204,6 @@
<string name="findmyphone_title_tablet">내 태블릿 찾기</string>
<string name="findmyphone_title_tv">내 TV 찾기</string>
<string name="findmyphone_description">이 장치에서 소리를 울려서 찾는 데 도움을 줍니다</string>
<string name="findmyphone_found">찾았음</string>
<string name="open">열기</string>
<string name="close">닫기</string>
<string name="plugins_need_permission">권한이 필요한 플러그인(정보를 보려면 누르기):</string>

View File

@@ -221,6 +221,7 @@
<string name="refresh">Įkelti iš naujo</string>
<string name="unreachable_description">Šis suporuotas įrenginys nepasiekiamas. Įsitikinkite, kad jis yra prijungtas prie to paties tinklo.</string>
<string name="no_wifi">Nesate prisijungę prie belaidžio (Wi-Fi) tinklo, taigi, galite nematyti jokių įrenginių. Spustelėkite čia, norėdami įjungti belaidį (Wi-Fi).</string>
<string name="on_non_trusted_message">Nepatikimas tinklas: automatinis aptikimas yra išjungtas.</string>
<string name="no_file_browser">Nėra įdiegta jokių failų tvarkytuvių.</string>
<string name="pref_plugin_telepathy">Siųsti SMS žinutę</string>
<string name="pref_plugin_telepathy_desc">Siųsti tekstines žinutes iš savo darbalaukio</string>
@@ -228,7 +229,7 @@
<string name="findmyphone_title_tablet">Rasti planšetę</string>
<string name="findmyphone_title_tv">Rasti televizorių</string>
<string name="findmyphone_description">Skambina į šį įrenginį, kad galėtumėte jį rasti</string>
<string name="findmyphone_found">Rastas</string>
<string name="findmyphone_found">Radau</string>
<string name="open">Atverti</string>
<string name="close">Užverti</string>
<string name="plugins_need_permission">Kai kurie priedai tam, kad veiktų, reikalauja leidimų (bakstelėkite išsamesnei informacijai):</string>
@@ -259,6 +260,7 @@
<string name="notification_channel_persistent">Pastovus indikatorius</string>
<string name="notification_channel_media_control">Įvairialypės terpės valdymas</string>
<string name="notification_channel_filetransfer">Failų persiuntimas</string>
<string name="notification_channel_high_priority">Didelė pirmenybė</string>
<string name="mpris_stop">Stabdyti dabartinę leistuvę</string>
<string name="copy_url_to_clipboard">Kopijuoti URL į iškarpinę</string>
<string name="clipboard_toast">Nukopijuota į iškarpinę</string>
@@ -292,4 +294,11 @@
<string name="no_app_for_opening">Šio failo atvėrimui nerasta jokios tinkamos programėlės</string>
<string name="remote_keyboard_service">KDE Connect nuotolinė klaviatūra</string>
<string name="presenter_pointer">Rodyklė</string>
<string name="trusted_networks">Patikimi tinklai</string>
<string name="trusted_networks_desc">Apriboti automatinį aptikimą iki žinomų tinklų</string>
<string name="add_trusted_network">Pridėti %1s</string>
<string name="empty_trusted_networks_list_text">Kol kas nesate pridėję jokių patikimų tinklų</string>
<string name="allow_all_networks_text">Leisti visus</string>
<string name="location_permission_needed_title">Reikalingas leidimas</string>
<string name="location_permission_needed_desc">Android reikalauja Vietos leidimo, kad atpažintų jūsų belaidį (WiFi) tinklą</string>
</resources>

View File

@@ -205,6 +205,7 @@
<string name="refresh">Vernieuwen</string>
<string name="unreachable_description">Dit gepaarde apparaat is niet bereikbaar. Ga na dat het is verbonden met uw zelfde netwerk.</string>
<string name="no_wifi">U bent niet verbonden met een Wi-Fi-netwerk, u zou dus niet in staat kunnen zijn om apparaten te zien. Klik hier om Wi-Fi in te schakelen.</string>
<string name="on_non_trusted_message">Niet op een vertrouwd netwerk: automatisch ontdekken is uitgeschakeld.</string>
<string name="no_file_browser">Er zijn geen bestandsbrowsers geïnstalleerd.</string>
<string name="pref_plugin_telepathy">SMS verzenden</string>
<string name="pref_plugin_telepathy_desc">Stuur tekstberichten van uw bureaublad</string>
@@ -243,6 +244,7 @@
<string name="notification_channel_persistent">Blijvende indicator</string>
<string name="notification_channel_media_control">Besturing van media</string>
<string name="notification_channel_filetransfer">Bestandsoverdracht</string>
<string name="notification_channel_high_priority">Hoge prioriteit</string>
<string name="mpris_stop">Stop de huidige speler</string>
<string name="copy_url_to_clipboard">URL-adres kopiëren naar klembord</string>
<string name="clipboard_toast">Gekopieerd naar klembord</string>
@@ -276,4 +278,11 @@
<string name="no_app_for_opening">Geen geschikte toepassing gevonden om dit bestand te openen</string>
<string name="remote_keyboard_service">KDE Connect Toetsenbord op afstand</string>
<string name="presenter_pointer">Aanwijzer</string>
<string name="trusted_networks">Vertrouwde netwerken</string>
<string name="trusted_networks_desc">Automatisch ontdekken beperken tot bekende netwerken</string>
<string name="add_trusted_network">%1s toevoegen</string>
<string name="empty_trusted_networks_list_text">U hebt nog geen vertrouwd netwerk toegevoegd</string>
<string name="allow_all_networks_text">Allen toestaan</string>
<string name="location_permission_needed_title">Toestemming vereist</string>
<string name="location_permission_needed_desc">Android vereist de toestemming voor locatie om uw WiFi-netwerk te identificeren</string>
</resources>

View File

@@ -13,7 +13,7 @@
<string name="pref_plugin_clipboard_desc">Udostępnia zawartość schowka</string>
<string name="pref_plugin_mousepad">Sterowanie z urządzenia przenośnego</string>
<string name="pref_plugin_mousepad_desc">Telefon lub tablet służy jako gładzik i klawiatura</string>
<string name="pref_plugin_presenter">Sterowanie pokazem przeźroczy</string>
<string name="pref_plugin_presenter">Sterowanie prezentacją</string>
<string name="pref_plugin_presenter_desc">Przełącza przeźrocza przy użyciu telefonu</string>
<string name="pref_plugin_remotekeyboard">Odbieranie zdalnych naciśnięć klawiszy</string>
<string name="pref_plugin_remotekeyboard_desc">Odbiera naciśnięcia klawiszy z innego urządzenia</string>
@@ -127,9 +127,9 @@
<item quantity="other"/>
</plurals>
<plurals name="sent_files_title">
<item quantity="one">Wyślij plik do %1$s</item>
<item quantity="few">Wyślij %2$d pliki do %1$s</item>
<item quantity="many">Wyślij %2$d plików do %1$s</item>
<item quantity="one">Wysłano plik do %1$s</item>
<item quantity="few">Wysłano %2$d pliki do %1$s</item>
<item quantity="many">Wysłano %2$d plików do %1$s</item>
<item quantity="other"/>
</plurals>
<plurals name="send_files_fail_title">
@@ -213,7 +213,7 @@
<string name="sftp_no_storage_locations_configured">Nie ustawiono miejsc w pamięci</string>
<string name="sftp_saf_permission_explanation">Aby przeglądać pliki zdalnie, należy ustawić miejsca w pamięci</string>
<string name="no_players_connected">Nie znaleziono żadnego odtwarzacza</string>
<string name="send_files">Wyślij pliki</string>
<string name="send_files">Wysyłanie plików</string>
<string name="pairing_title">Urządzenia KDE Connect</string>
<string name="pairing_description">Tu powinny pojawić się urządzenia podłączone do tej samej sieci i które także mają uruchomione KDE Connect.</string>
<string name="device_rename_title">Zmień nazwę urządzenia</string>
@@ -223,12 +223,11 @@
<string name="no_wifi">Brak połączenia z siecią Wi-Fi, więc może nie być widać urządzeń. Naciśnij tutaj, aby włączyć Wi-Fi.</string>
<string name="no_file_browser">Nie wgrano żadnych przeglądarek plików.</string>
<string name="pref_plugin_telepathy">Wysyłanie SMSów</string>
<string name="pref_plugin_telepathy_desc">Wysyła wiadomość tekstową z komputera</string>
<string name="pref_plugin_telepathy_desc">Wysyła wiadomości tekstowe z komputera</string>
<string name="findmyphone_title">Poszukiwania telefonu</string>
<string name="findmyphone_title_tablet">Poszukiwania tabletu</string>
<string name="findmyphone_title_tv">Poszukiwania telewizora</string>
<string name="findmyphone_description">Dzwoni na dane urządzenie, aby można je odnaleźć.</string>
<string name="findmyphone_found">Znaleziony</string>
<string name="open">Otwórz</string>
<string name="close">Zamknij</string>
<string name="plugins_need_permission">Niektóre wtyczki wymagają uprawnień do swojego działania (stuknij, aby dowiedzieć się więcej)</string>

View File

@@ -205,6 +205,7 @@
<string name="refresh">Atualizar</string>
<string name="unreachable_description">Este dispositivo emparelhado não está acessível. Certifique-se de que está conectado à mesma rede que você.</string>
<string name="no_wifi">Você não está conectado a nenhuma rede Wi-Fi, então não conseguirá ver nenhum dispositivo. Clique aqui para ativar o Wi-Fi.</string>
<string name="on_non_trusted_message">Não é uma rede confiável: a descoberta automática está desativada.</string>
<string name="no_file_browser">Não há gerenciadores de arquivos instalados.</string>
<string name="pref_plugin_telepathy">Enviar SMS</string>
<string name="pref_plugin_telepathy_desc">Envia mensagens de texto do seu Desktop</string>
@@ -243,6 +244,7 @@
<string name="notification_channel_persistent">Indicador persistente</string>
<string name="notification_channel_media_control">Controle multimídia</string>
<string name="notification_channel_filetransfer">Transferência de arquivo</string>
<string name="notification_channel_high_priority">Prioridade alta</string>
<string name="mpris_stop">Parar o reprodutor atual</string>
<string name="copy_url_to_clipboard">Copiar URL para a área de transferência</string>
<string name="clipboard_toast">Copiado para a área de transferência</string>
@@ -276,4 +278,11 @@
<string name="no_app_for_opening">Não foi encontrado nenhum aplicativo adequado para abrir este arquivo</string>
<string name="remote_keyboard_service">Teclado Remoto do KDE Connect</string>
<string name="presenter_pointer">Ponteiro</string>
<string name="trusted_networks">Redes confiáveis</string>
<string name="trusted_networks_desc">Restringir a descoberta automática a redes conhecidas</string>
<string name="add_trusted_network">Adicionar à %1s</string>
<string name="empty_trusted_networks_list_text">Você ainda não adicionou nenhuma rede confiável</string>
<string name="allow_all_networks_text">Permitir tudo</string>
<string name="location_permission_needed_title">É necessário ter permissão</string>
<string name="location_permission_needed_desc">O Android precisa da permissão de Localização para identificar a sua rede Wi-Fi</string>
</resources>

View File

@@ -205,6 +205,7 @@
<string name="refresh">Actualizar</string>
<string name="unreachable_description">Este dispositivo emparelhado não está acessível. Certifique-se que está ligado à mesma rede que você.</string>
<string name="no_wifi">Não está ligado a nenhuma rede Wi-Fi, pelo que poderá não conseguir ver nenhuns dispositivos. Carregue aqui para activar o Wi-Fi.</string>
<string name="on_non_trusted_message">Não é uma rede fidedigna: a descoberta automática está desactivada.</string>
<string name="no_file_browser">Não existem gestores de ficheiros instalados.</string>
<string name="pref_plugin_telepathy">Enviar um SMS</string>
<string name="pref_plugin_telepathy_desc">Enviar mensagens de texto a partir do seu ambiente de trabalho</string>
@@ -212,7 +213,7 @@
<string name="findmyphone_title_tablet">Descobrir o meu \'tablet\'</string>
<string name="findmyphone_title_tv">Descobrir a minha TV</string>
<string name="findmyphone_description">Toca este dispositivo para que o possa encontrar</string>
<string name="findmyphone_found">Encontrado</string>
<string name="findmyphone_found">Encontrei</string>
<string name="open">Abrir</string>
<string name="close">Fechar</string>
<string name="plugins_need_permission">Alguns \'plugins\' precisam de permissões para funcionar (toque para mais informações):</string>
@@ -243,6 +244,7 @@
<string name="notification_channel_persistent">Indicador persistente</string>
<string name="notification_channel_media_control">Comando multimédia</string>
<string name="notification_channel_filetransfer">Transferência de ficheiros</string>
<string name="notification_channel_high_priority">Alta prioridade</string>
<string name="mpris_stop">Parar o leitor actual</string>
<string name="copy_url_to_clipboard">Copiar o URL para a área de transferência</string>
<string name="clipboard_toast">Copiado para a área de transferência</string>
@@ -276,4 +278,11 @@
<string name="no_app_for_opening">Não existe nenhuma aplicação adequada para abrir este ficheiro</string>
<string name="remote_keyboard_service">Teclado Remoto do KDE Connect</string>
<string name="presenter_pointer">Cursor</string>
<string name="trusted_networks">Redes fidedignas</string>
<string name="trusted_networks_desc">Restringir a descoberta automática às redes desconhecidas</string>
<string name="add_trusted_network">Adicionar a %1s</string>
<string name="empty_trusted_networks_list_text">Ainda não adicionou nenhuma rede fidedigna</string>
<string name="allow_all_networks_text">Permitir tudo</string>
<string name="location_permission_needed_title">É necessária a permissão</string>
<string name="location_permission_needed_desc">O Android precisa da permissão de Localização para identificar a sua rede WiFi</string>
</resources>

View File

@@ -227,7 +227,6 @@
<string name="findmyphone_title_tablet">Поиск планшета</string>
<string name="findmyphone_title_tv">Поиск телевизора</string>
<string name="findmyphone_description">Подача звукового сигнала на устройстве, чтобы вы могли его найти</string>
<string name="findmyphone_found">Найден</string>
<string name="open">Открыть</string>
<string name="close">Закрыть</string>
<string name="plugins_need_permission">Некоторым модулям нужны разрешения для работы (нажмите для просмотра подробностей):</string>

View File

@@ -228,7 +228,6 @@
<string name="findmyphone_title_tablet">Nájsť môj tablet</string>
<string name="findmyphone_title_tv">Nájsť môj TV</string>
<string name="findmyphone_description">Prezvoní vaše zariadenie, aby ste ho našli</string>
<string name="findmyphone_found">Nájdené</string>
<string name="open">Otvoriť</string>
<string name="close">Zavrieť</string>
<string name="plugins_need_permission">Niektoré Pluginy potrebujú oprávnenia aby fungovali (ťuknite pre viac info):</string>

View File

@@ -205,6 +205,7 @@
<string name="refresh">Uppdatera</string>
<string name="unreachable_description">Den här ihopparade apparaten kan inte nås. Försäkra dig om att den är ansluten till samma nätverk.</string>
<string name="no_wifi">Du är inte ansluten till ett WIFI-nätverk, så du kanske inte kan se alla apparater. Klicka här för att aktivera WIFI.</string>
<string name="on_non_trusted_message">Använder inte ett pålitligt nätverk: automatisk upptäckt är inaktiverad.</string>
<string name="no_file_browser">Det finns inga filbläddrare installerade.</string>
<string name="pref_plugin_telepathy">Skicka SMS</string>
<string name="pref_plugin_telepathy_desc">Skicka textmeddelanden från skrivbordet</string>
@@ -243,6 +244,7 @@
<string name="notification_channel_persistent">Permanent indikering</string>
<string name="notification_channel_media_control">Kontroll av media</string>
<string name="notification_channel_filetransfer">Filöverföring</string>
<string name="notification_channel_high_priority">Hög prioritet</string>
<string name="mpris_stop">Stoppa aktuell spelare</string>
<string name="copy_url_to_clipboard">Kopiera webbadress till klippbordet</string>
<string name="clipboard_toast">Kopierad till klippbordet</string>
@@ -276,4 +278,11 @@
<string name="no_app_for_opening">Inget lämpligt program hittades för att öppna filen</string>
<string name="remote_keyboard_service">KDE-anslut fjärrtangentbord</string>
<string name="presenter_pointer">Pekare</string>
<string name="trusted_networks">Pålitliga nätverk</string>
<string name="trusted_networks_desc">Begränsar automatisk upptäckt till kända nätverk</string>
<string name="add_trusted_network">Lägg till %1s</string>
<string name="empty_trusted_networks_list_text">Du har inte lagt till några pålitliga nätverk ännu</string>
<string name="allow_all_networks_text">Tillåt alla</string>
<string name="location_permission_needed_title">Rättighet krävs</string>
<string name="location_permission_needed_desc">Android kräver platsrättigheter för att identifiera WIFI-nätverk</string>
</resources>

View File

@@ -211,7 +211,6 @@
<string name="findmyphone_title_tablet">Tabletimi bul</string>
<string name="findmyphone_title_tv">TV\'mi bul</string>
<string name="findmyphone_description">Aygıtı bulmak için onu çaldır</string>
<string name="findmyphone_found">Bulundu</string>
<string name="open"></string>
<string name="close">Kapat</string>
<string name="plugins_need_permission">Bazı Eklentiler çalışmak için izne ihtiyaç duyar (daha fazla bilgi için dokunun):</string>

View File

@@ -221,6 +221,7 @@
<string name="refresh">Оновити</string>
<string name="unreachable_description">Цей пов’язаний пристрій недоступний. Переконайтеся, що його з’єднано з вашою мережею.</string>
<string name="no_wifi">Ваш комп\'ютер не з\'єднано із мережею Wi-Fi, отже перегляд пристроїв у мережі неможливий. Натисніть тут, щоб увімкнути Wi-Fi.</string>
<string name="on_non_trusted_message">Не є надійною мережею: автовиявлення вимкнено.</string>
<string name="no_file_browser">Програм для навігації файловою системою не встановлено.</string>
<string name="pref_plugin_telepathy">Надіслати SMS</string>
<string name="pref_plugin_telepathy_desc">Надсилати текстові повідомлення з вашої робочої станції</string>
@@ -259,6 +260,7 @@
<string name="notification_channel_persistent">Постійний індикатор</string>
<string name="notification_channel_media_control">Керування відтворенням</string>
<string name="notification_channel_filetransfer">Передавання файлів</string>
<string name="notification_channel_high_priority">Високий пріоритет</string>
<string name="mpris_stop">Зупинити відтворення у поточному програвачі</string>
<string name="copy_url_to_clipboard">Скопіювати адресу до буфера</string>
<string name="clipboard_toast">Скопійовано до буфера</string>
@@ -292,4 +294,11 @@
<string name="no_app_for_opening">Не знайдено відповідної програми для відкриття цього файла</string>
<string name="remote_keyboard_service">Віддалена клавіатура KDE Connect</string>
<string name="presenter_pointer">Указка</string>
<string name="trusted_networks">Надійні мережі</string>
<string name="trusted_networks_desc">Обмежити автовиявлення відомими мережами</string>
<string name="add_trusted_network">Додати %1s</string>
<string name="empty_trusted_networks_list_text">Вами ще не додано надійних мереж</string>
<string name="allow_all_networks_text">Дозволити всі</string>
<string name="location_permission_needed_title">Потрібні права доступу</string>
<string name="location_permission_needed_desc">Android потрібні права доступу до даних місця перебування для ідентифікації вашої мережі WiFi</string>
</resources>

View File

@@ -7,6 +7,7 @@
<style name="KdeConnectTheme.Dark.NoActionBar" parent="KdeConnectThemeBase.Dark.NoActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:colorEdgeEffect">@color/darkGrey</item>
<item name="android:navigationBarColor">@android:color/black</item>
</style>
</resources>

View File

@@ -204,7 +204,6 @@
<string name="findmyphone_title_tablet">找到我的平板电脑</string>
<string name="findmyphone_title_tv">查找我的电视</string>
<string name="findmyphone_description">让设备响铃从而找到它</string>
<string name="findmyphone_found">找到</string>
<string name="open">打开</string>
<string name="close">关闭</string>
<string name="plugins_need_permission">某些插件需要权限才能工作 (点击以获取更多信息)</string>

View File

@@ -122,8 +122,8 @@
<string name="show_keyboard">顯示鍵盤</string>
<string name="device_not_paired">裝置未配對</string>
<string name="request_pairing">請求配對</string>
<string name="pairing_accept">同意</string>
<string name="pairing_reject"></string>
<string name="pairing_accept">接受</string>
<string name="pairing_reject"></string>
<string name="settings">設定</string>
<string name="mpris_play">播放</string>
<string name="mpris_pause">暫停</string>
@@ -204,7 +204,6 @@
<string name="findmyphone_title_tablet">尋找我的平板</string>
<string name="findmyphone_title_tv">尋找我的電視</string>
<string name="findmyphone_description">讓這個裝置發出聲響讓您能找到它</string>
<string name="findmyphone_found">找到</string>
<string name="open">開啟</string>
<string name="close">關閉</string>
<string name="plugins_need_permission">部份的外掛程式需要權限才能運作(按一下以取得更多資訊)</string>

View File

@@ -257,6 +257,7 @@
<string name="refresh">Refresh</string>
<string name="unreachable_description">This paired device is not reachable. Make sure it is connected to your same network.</string>
<string name="no_wifi">You\'re not connected to a Wi-Fi network, so you may not be able to see any devices. Click here to enable Wi-Fi.</string>
<string name="on_non_trusted_message">Not on a trusted network: autodiscovery is disabled.</string>
<string name="no_file_browser">There are no file browsers installed.</string>
<string name="pref_plugin_telepathy">Send SMS</string>
<string name="pref_plugin_telepathy_desc">Send text messages from your desktop</string>
@@ -264,7 +265,7 @@
<string name="findmyphone_title_tablet">Find my tablet</string>
<string name="findmyphone_title_tv">Find my TV</string>
<string name="findmyphone_description">Rings this device so you can find it</string>
<string name="findmyphone_found">Found</string>
<string name="findmyphone_found">Found it</string>
<string name="open">Open</string>
<string name="close">Close</string>
@@ -300,6 +301,7 @@
<string name="notification_channel_persistent">Persistent indicator</string>
<string name="notification_channel_media_control">Media control</string>
<string name="notification_channel_filetransfer">File transfer</string>
<string name="notification_channel_high_priority">High priority</string>
<string name="mpris_stop">Stop the current player</string>
<string name="copy_url_to_clipboard">Copy URL to clipboard</string>
@@ -337,8 +339,17 @@
<string name="plugin_photo_desc">Launch the camera app to ease taking and transferring pictures</string>
<string name="findmyphone_preference_key_ringtone" translatable="false">findmyphone_ringtone</string>
<string name="no_app_for_opening">No suitable app found to open this file</string>
<string name="remote_keyboard_service">KDE Connect Remote Keyboard</string>
<string name="presenter_pointer">Pointer</string>
<string name="trusted_networks">Trusted networks</string>
<string name="trusted_networks_desc">Restrict autodiscovery to known networks</string>
<string name="add_trusted_network">Add %1s</string>
<string name="empty_trusted_networks_list_text">You haven\'t added any trusted network yet</string>
<string name="allow_all_networks_text">Allow all</string>
<string name="location_permission_needed_title">Permission required</string>
<string name="location_permission_needed_desc">Android requires the Location permission to identify your WiFi network</string>
</resources>

View File

@@ -33,6 +33,7 @@ import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.Helpers.DeviceHelper;
import org.kde.kdeconnect.Helpers.SecurityHelpers.SslHelper;
import org.kde.kdeconnect.Helpers.StringsHelper;
import org.kde.kdeconnect.Helpers.TrustedNetworkHelper;
import org.kde.kdeconnect.NetworkPacket;
import org.kde.kdeconnect.UserInterface.CustomDevicesActivity;
@@ -367,7 +368,16 @@ public class LanLinkProvider extends BaseLinkProvider implements LanLink.LinkDis
new Thread(() -> {
ArrayList<String> iplist = CustomDevicesActivity
.getCustomDeviceList(PreferenceManager.getDefaultSharedPreferences(context));
iplist.add("255.255.255.255"); //Default: broadcast.
if (TrustedNetworkHelper.isTrustedNetwork(context)) {
iplist.add("255.255.255.255"); //Default: broadcast.
} else {
Log.i("LanLinkProvider", "Current network isn't trusted, not broadcasting");
}
if (iplist.isEmpty()) {
return;
}
NetworkPacket identity = NetworkPacket.createIdentityPacket(context);
int port = (tcpServer == null || !tcpServer.isBound()) ? MIN_PORT : tcpServer.getLocalPort();

View File

@@ -18,6 +18,7 @@ public class NotificationHelper {
public final static String MEDIA_CONTROL = "media_control";
public final static String FILETRANSFER = "filetransfer";
public final static String RECEIVENOTIFICATION = "receive";
public final static String HIGHPRIORITY = "highpriority";
}
public static void notifyCompat(NotificationManager notificationManager, int notificationId, Notification notification) {
@@ -80,6 +81,8 @@ public class NotificationHelper {
NotificationManager.IMPORTANCE_DEFAULT)
);
NotificationChannel highPriority = new NotificationChannel(Channels.HIGHPRIORITY, context.getString(R.string.notification_channel_high_priority), NotificationManager.IMPORTANCE_HIGH);
manager.createNotificationChannel(highPriority);
}

View File

@@ -22,6 +22,8 @@ package org.kde.kdeconnect.Helpers.SecurityHelpers;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.preference.PreferenceManager;
import android.util.Base64;
@@ -57,6 +59,7 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Formatter;
import java.util.Locale;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
@@ -115,6 +118,10 @@ public class SslHelper {
if (needsToGenerateCertificate) {
Log.i("KDE/SslHelper", "Generating a certificate");
try {
//Fix for https://issuetracker.google.com/issues/37095309
Locale initialLocale = Locale.getDefault();
setLocale(Locale.ENGLISH, context);
X500NameBuilder nameBuilder = new X500NameBuilder(BCStyle.INSTANCE);
nameBuilder.addRDN(BCStyle.CN, deviceId);
nameBuilder.addRDN(BCStyle.OU, "KDE Connect");
@@ -138,12 +145,22 @@ public class SslHelper {
SharedPreferences.Editor edit = settings.edit();
edit.putString("certificate", Base64.encodeToString(certificate.getEncoded(), 0));
edit.apply();
setLocale(initialLocale, context);
} catch (Exception e) {
Log.e("KDE/initialiseCert", "Exception", e);
}
}
}
private static void setLocale(Locale locale, Context context) {
Locale.setDefault(locale);
Resources resources = context.getResources();
Configuration config = resources.getConfiguration();
config.locale = locale;
resources.updateConfiguration(config, resources.getDisplayMetrics());
}
public static boolean isCertificateStored(Context context, String deviceId) {
SharedPreferences devicePreferences = context.getSharedPreferences(deviceId, Context.MODE_PRIVATE);
String cert = devicePreferences.getString("certificate", "");

View File

@@ -0,0 +1,93 @@
package org.kde.kdeconnect.Helpers;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.wifi.SupplicantState;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.Log;
import androidx.core.content.ContextCompat;
import org.kde.kdeconnect.UserInterface.PermissionsAlertDialogFragment;
import org.kde.kdeconnect_tp.R;
public class TrustedNetworkHelper {
private static final String KEY_CUSTOM_TRUSTED_NETWORKS = "trusted_network_preference";
private static final String KEY_CUSTOM_TRUST_ALL_NETWORKS = "trust_all_network_preference";
private static final String NETWORK_SSID_DELIMITER = "#_#";
private static final String NOT_AVAILABLE_SSID_RESULT = "<unknown ssid>";
private final Context context;
public TrustedNetworkHelper(Context context) {
this.context = context;
}
public List<String> read() {
String serializeTrustedNetwork = PreferenceManager.getDefaultSharedPreferences(context).getString(
KEY_CUSTOM_TRUSTED_NETWORKS, "");
if (serializeTrustedNetwork.isEmpty())
return Collections.emptyList();
return Arrays.asList(serializeTrustedNetwork.split(NETWORK_SSID_DELIMITER));
}
public void update(List<String> trustedNetworks) {
String serialized = TextUtils.join(NETWORK_SSID_DELIMITER, trustedNetworks);
PreferenceManager.getDefaultSharedPreferences(context).edit().putString(
KEY_CUSTOM_TRUSTED_NETWORKS, serialized).apply();
}
public boolean allAllowed() {
if (!hasPermissions()) {
return true;
}
return PreferenceManager
.getDefaultSharedPreferences(context)
.getBoolean(KEY_CUSTOM_TRUST_ALL_NETWORKS, Boolean.TRUE);
}
public void allAllowed(boolean isChecked) {
PreferenceManager
.getDefaultSharedPreferences(context)
.edit()
.putBoolean(KEY_CUSTOM_TRUST_ALL_NETWORKS, isChecked)
.apply();
}
public boolean hasPermissions() {
int result = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION);
return (result == PackageManager.PERMISSION_GRANTED);
}
public String currentSSID() {
WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager == null) return "";
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo.getSupplicantState() != SupplicantState.COMPLETED) {
return "";
}
String ssid = wifiInfo.getSSID();
if (ssid.equalsIgnoreCase(NOT_AVAILABLE_SSID_RESULT)){
return "";
}
return ssid;
}
public static boolean isTrustedNetwork(Context context) {
TrustedNetworkHelper trustedNetworkHelper = new TrustedNetworkHelper(context);
if (trustedNetworkHelper.allAllowed()){
return true;
}
return trustedNetworkHelper.read().contains(trustedNetworkHelper.currentSSID());
}
}

View File

@@ -0,0 +1,41 @@
package org.kde.kdeconnect;
import android.app.Application;
import androidx.annotation.NonNull;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ProcessLifecycleOwner;
public class MyApplication extends Application {
private static class LifecycleObserver implements DefaultLifecycleObserver {
private boolean inForeground = false;
@Override
public void onStart(@NonNull LifecycleOwner owner) {
inForeground = true;
}
@Override
public void onStop(@NonNull LifecycleOwner owner) {
inForeground = false;
}
boolean isInForeground() {
return inForeground;
}
}
private static final LifecycleObserver foregroundTracker = new LifecycleObserver();
@Override
public void onCreate() {
super.onCreate();
ProcessLifecycleOwner.get().getLifecycle().addObserver(foregroundTracker);
}
public static boolean isInForeground() {
return foregroundTracker.isInForeground();
}
}

View File

@@ -19,47 +19,37 @@
*/
package org.kde.kdeconnect.Plugins.FindMyPhonePlugin;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import androidx.appcompat.app.AppCompatActivity;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.UserInterface.ThemeUtil;
import org.kde.kdeconnect_tp.R;
public class FindMyPhoneActivity extends Activity {
public class FindMyPhoneActivity extends AppCompatActivity {
static final String EXTRA_DEVICE_ID = "deviceId";
private MediaPlayer mediaPlayer;
private int previousVolume;
private AudioManager audioManager;
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (mediaPlayer != null) {
// If this activity was already open and we received the ring packet again, just finish it
finish();
}
// otherwise the activity will become active again
}
private String deviceId;
private FindMyPhonePlugin plugin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ThemeUtil.setUserPreferredTheme(this);
setContentView(R.layout.activity_find_my_phone);
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if (!getIntent().hasExtra(EXTRA_DEVICE_ID)) {
Log.e("FindMyPhoneActivity", "You must include the deviceId for which this activity is started as an intent EXTRA");
finish();
}
deviceId = getIntent().getStringExtra(EXTRA_DEVICE_ID);
plugin = BackgroundService.getInstance().getDevice(deviceId).getPlugin(FindMyPhonePlugin.class);
Window window = this.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
@@ -72,42 +62,19 @@ public class FindMyPhoneActivity extends Activity {
@Override
protected void onStart() {
super.onStart();
try {
// Make sure we are heard even when the phone is silent, restore original volume later
previousVolume = audioManager.getStreamVolume(AudioManager.STREAM_ALARM);
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), 0);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
Uri ringtone;
String ringtoneString = prefs.getString(getString(R.string.findmyphone_preference_key_ringtone), "");
if (ringtoneString.isEmpty()) {
ringtone = Settings.System.DEFAULT_RINGTONE_URI;
} else {
ringtone = Uri.parse(ringtoneString);
}
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(this, ringtone);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
mediaPlayer.setLooping(true);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {
Log.e("FindMyPhoneActivity", "Exception", e);
}
/*
For whatever reason when Android launches this activity as a SystemAlertWindow it calls:
onCreate(), onStart(), onResume(), onStop(), onStart(), onResume().
When using BackgroundService.RunWithPlugin we get into concurrency problems and sometimes no sound will be played
*/
plugin.startPlaying();
plugin.hideNotification();
}
@Override
protected void onStop() {
super.onStop();
if (mediaPlayer != null) {
mediaPlayer.stop();
}
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, previousVolume, 0);
plugin.stopPlaying();
}
}

View File

@@ -21,20 +21,45 @@
package org.kde.kdeconnect.Plugins.FindMyPhonePlugin;
import android.app.Activity;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Build;
import android.os.PowerManager;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.util.Log;
import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat;
import org.kde.kdeconnect.Helpers.DeviceHelper;
import org.kde.kdeconnect.Helpers.NotificationHelper;
import org.kde.kdeconnect.MyApplication;
import org.kde.kdeconnect.NetworkPacket;
import org.kde.kdeconnect.Plugins.Plugin;
import org.kde.kdeconnect.Plugins.PluginFactory;
import org.kde.kdeconnect.UserInterface.PluginSettingsFragment;
import org.kde.kdeconnect_tp.R;
import java.io.IOException;
@PluginFactory.LoadablePlugin
public class FindMyPhonePlugin extends Plugin {
public final static String PACKET_TYPE_FINDMYPHONE_REQUEST = "kdeconnect.findmyphone.request";
private NotificationManager notificationManager;
private int notificationId;
private AudioManager audioManager;
private MediaPlayer mediaPlayer;
private int previousVolume = -1;
private PowerManager powerManager;
@Override
public String getDisplayName() {
switch (DeviceHelper.getDeviceType(context)) {
@@ -55,13 +80,127 @@ public class FindMyPhonePlugin extends Plugin {
}
@Override
public boolean onPacketReceived(NetworkPacket np) {
public boolean onCreate() {
notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationId = (int) System.currentTimeMillis();
audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
Uri ringtone;
String ringtoneString = prefs.getString(context.getString(R.string.findmyphone_preference_key_ringtone), "");
if (ringtoneString.isEmpty()) {
ringtone = Settings.System.DEFAULT_RINGTONE_URI;
} else {
ringtone = Uri.parse(ringtoneString);
}
try {
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(context, ringtone);
//TODO: Deprecated use setAudioAttributes for API > 21
mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
mediaPlayer.setLooping(true);
mediaPlayer.prepare();
} catch (Exception e) {
Log.e("FindMyPhoneActivity", "Exception", e);
return false;
}
Intent intent = new Intent(context, FindMyPhoneActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
return true;
}
@Override
public void onDestroy() {
if (mediaPlayer.isPlaying()) {
stopPlaying();
}
audioManager = null;
mediaPlayer.release();
mediaPlayer = null;
}
@Override
public boolean onPacketReceived(NetworkPacket np) {
if (Build.VERSION.SDK_INT < 29 || MyApplication.isInForeground()) {
Intent intent = new Intent(context, FindMyPhoneActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(FindMyPhoneActivity.EXTRA_DEVICE_ID, device.getDeviceId());
context.startActivity(intent);
} else {
if (powerManager.isInteractive()) {
startPlaying();
showBroadcastNotification();
} else {
showActivityNotification();
}
}
return true;
}
@RequiresApi(16)
private void showBroadcastNotification() {
Intent intent = new Intent(context, FindMyPhoneReceiver.class);
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
intent.setAction(FindMyPhoneReceiver.ACTION_FOUND_IT);
intent.putExtra(FindMyPhoneReceiver.EXTRA_DEVICE_ID, device.getDeviceId());
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
createNotification(pendingIntent);
}
private void showActivityNotification() {
Intent intent = new Intent(context, FindMyPhoneActivity.class);
intent.putExtra(FindMyPhoneActivity.EXTRA_DEVICE_ID, device.getDeviceId());
PendingIntent pi = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
createNotification(pi);
}
private void createNotification(PendingIntent pendingIntent) {
NotificationCompat.Builder notification = new NotificationCompat.Builder(context, NotificationHelper.Channels.HIGHPRIORITY);
notification
.setSmallIcon(R.drawable.ic_notification)
.setOngoing(false)
.setFullScreenIntent(pendingIntent, true)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setAutoCancel(true)
.setContentTitle(context.getString(R.string.findmyphone_found));
notification.setGroup("BackgroundService");
notificationManager.notify(notificationId, notification.build());
}
void startPlaying() {
if (mediaPlayer != null && !mediaPlayer.isPlaying()) {
// Make sure we are heard even when the phone is silent, restore original volume later
previousVolume = audioManager.getStreamVolume(AudioManager.STREAM_ALARM);
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), 0);
mediaPlayer.start();
}
}
void hideNotification() {
notificationManager.cancel(notificationId);
}
void stopPlaying() {
if (previousVolume != -1) {
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, previousVolume, 0);
}
mediaPlayer.stop();
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
boolean isPlaying() {
return mediaPlayer.isPlaying();
}
@Override

View File

@@ -0,0 +1,35 @@
package org.kde.kdeconnect.Plugins.FindMyPhonePlugin;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import org.kde.kdeconnect.BackgroundService;
public class FindMyPhoneReceiver extends BroadcastReceiver {
final static String ACTION_FOUND_IT = "org.kde.kdeconnect.Plugins.FindMyPhonePlugin.foundIt";
final static String EXTRA_DEVICE_ID = "deviceId";
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
case ACTION_FOUND_IT:
foundIt(context, intent);
break;
default:
Log.d("ShareBroadcastReceiver", "Unhandled Action received: " + intent.getAction());
}
}
private void foundIt(Context context, Intent intent) {
if (!intent.hasExtra(EXTRA_DEVICE_ID)) {
Log.e("FindMyPhoneReceiver", "foundIt() - deviceId extra is not present, ignoring");
return;
}
String deviceId = intent.getStringExtra(EXTRA_DEVICE_ID);
BackgroundService.RunWithPlugin(context, deviceId, FindMyPhonePlugin.class, FindMyPhonePlugin::stopPlaying);
}
}

View File

@@ -238,7 +238,7 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
np.set("actions", extractActions(notification, key));
np.set("id", key);
np.set("silent", (notification.flags & NotificationCompat.FLAG_ONLY_ALERT_ONCE) != 0);
np.set("onlyOnce", (notification.flags & NotificationCompat.FLAG_ONLY_ALERT_ONCE) != 0);
np.set("isClearable", statusBarNotification.isClearable());
np.set("appName", appName == null ? packageName : appName);
np.set("time", Long.toString(statusBarNotification.getPostTime()));

View File

@@ -107,7 +107,11 @@ public class RunCommandActivity extends AppCompatActivity {
deviceId = getIntent().getStringExtra("deviceId");
boolean canAddCommands = BackgroundService.getInstance().getDevice(deviceId).getPlugin(RunCommandPlugin.class).canAddCommand();
boolean canAddCommands = false;
try {
canAddCommands = BackgroundService.getInstance().getDevice(deviceId).getPlugin(RunCommandPlugin.class).canAddCommand();
} catch (Exception ignore) {
}
FloatingActionButton addCommandButton = findViewById(R.id.add_command_button);
if (canAddCommands) {

View File

@@ -352,6 +352,11 @@ public class CompositeReceiveFileJob extends BackgroundJob<Device, Void> {
intent.setDataAndType(fileDocument.getUri(), mimeType);
}
// Open files for KDE Itinerary explicitly because Android's activity resolution sucks
if (fileDocument.getName().endsWith(".itinerary")) {
intent.setClassName("org.kde.itinerary", "org.kde.itinerary.Activity");
}
getDevice().getContext().startActivity(intent);
}
}

View File

@@ -41,8 +41,13 @@ import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.Helpers.TrustedNetworkHelper;
import org.kde.kdeconnect.UserInterface.List.ListAdapter;
import org.kde.kdeconnect.UserInterface.List.PairingDeviceItem;
import org.kde.kdeconnect.UserInterface.List.SectionItem;
@@ -51,10 +56,6 @@ import org.kde.kdeconnect_tp.R;
import java.util.ArrayList;
import java.util.Collection;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
/**
* The view that the user will see when there are no devices paired, or when you choose "add a new device" from the sidebar.
@@ -72,6 +73,7 @@ public class PairingFragment extends Fragment implements PairingDeviceItem.Callb
private TextView headerText;
private TextView noWifiHeader;
private TextView notTrustedText;
private Object networkChangeListener;
@Override
@@ -91,6 +93,10 @@ public class PairingFragment extends Fragment implements PairingDeviceItem.Callb
mSwipeRefreshLayout.setOnRefreshListener(
this::updateComputerListAction
);
notTrustedText = (TextView) inflater.inflate(R.layout.pairing_explanation_not_trusted, null);
notTrustedText.setOnClickListener(null);
notTrustedText.setOnLongClickListener(null);
headerText = (TextView) inflater.inflate(R.layout.pairing_explanation_text, null);
headerText.setOnClickListener(null);
headerText.setOnLongClickListener(null);
@@ -179,12 +185,16 @@ public class PairingFragment extends Fragment implements PairingDeviceItem.Callb
((ListView) rootView.findViewById(R.id.devices_list)).removeHeaderView(headerText);
((ListView) rootView.findViewById(R.id.devices_list)).removeHeaderView(noWifiHeader);
((ListView) rootView.findViewById(R.id.devices_list)).removeHeaderView(notTrustedText);
ConnectivityManager connManager = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
//Check if we're on Wi-Fi. If we still see a device, don't do anything special
if (someDevicesReachable || wifi.isConnected()) {
((ListView) rootView.findViewById(R.id.devices_list)).addHeaderView(headerText);
if (TrustedNetworkHelper.isTrustedNetwork(getContext())) {
((ListView) rootView.findViewById(R.id.devices_list)).addHeaderView(headerText);
} else {
((ListView) rootView.findViewById(R.id.devices_list)).addHeaderView(notTrustedText);
}
} else {
((ListView) rootView.findViewById(R.id.devices_list)).addHeaderView(noWifiHeader);
}
@@ -299,6 +309,10 @@ public class PairingFragment extends Fragment implements PairingDeviceItem.Callb
case R.id.menu_custom_device_list:
startActivity(new Intent(mActivity, CustomDevicesActivity.class));
break;
case R.id.menu_trusted_networks:
startActivity(new Intent(mActivity, TrustedNetworksActivity.class));
break;
default:
break;
}

View File

@@ -70,10 +70,6 @@ public class SettingsFragment extends PreferenceFragmentCompat {
screen.addPreference(renameDevice);
//TODO: Trusted wifi networks settings should go here
// Dark mode
final TwoStatePreference darkThemeSwitch = new SwitchPreferenceCompat(context);
darkThemeSwitch.setPersistent(false);
@@ -127,6 +123,30 @@ public class SettingsFragment extends PreferenceFragmentCompat {
screen.addPreference(notificationSwitch);
}
// Trusted Networks
Preference trustedNetworkPref = new Preference(context);
trustedNetworkPref.setPersistent(false);
trustedNetworkPref.setTitle(R.string.trusted_networks);
trustedNetworkPref.setSummary(R.string.trusted_networks_desc);
screen.addPreference(trustedNetworkPref);
trustedNetworkPref.setOnPreferenceClickListener(preference -> {
startActivity(new Intent(context, TrustedNetworksActivity.class));
return true;
});
// Add device by IP
Preference devicesByIpPreference = new Preference(context);
devicesByIpPreference.setPersistent(false);
devicesByIpPreference.setTitle(R.string.custom_device_list);
screen.addPreference(devicesByIpPreference);
devicesByIpPreference.setOnPreferenceClickListener(preference -> {
startActivity(new Intent(context, CustomDevicesActivity.class));
return true;
});
// More settings text
Preference moreSettingsText = new Preference(context);
moreSettingsText.setPersistent(false);

View File

@@ -0,0 +1,138 @@
package org.kde.kdeconnect.UserInterface;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ListView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import org.kde.kdeconnect.Helpers.TrustedNetworkHelper;
import org.kde.kdeconnect_tp.R;
import java.util.ArrayList;
import java.util.List;
public class TrustedNetworksActivity extends AppCompatActivity {
private List<String> trustedNetworks;
private ListView trustedNetworksView;
private CheckBox allowAllCheckBox;
private TrustedNetworkHelper trustedNetworkHelper;
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
boolean grantedPermission = false;
for (int result : grantResults) {
if (result == PackageManager.PERMISSION_GRANTED) {
grantedPermission = true;
break;
}
}
if (grantedPermission) {
allowAllCheckBox.setChecked(false);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
ThemeUtil.setUserPreferredTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.trusted_network_list);
trustedNetworksView = findViewById(android.R.id.list);
trustedNetworkHelper = new TrustedNetworkHelper(getApplicationContext());
trustedNetworks = new ArrayList<>(trustedNetworkHelper.read());
allowAllCheckBox = findViewById(R.id.trust_all_networks_checkBox);
allowAllCheckBox.setOnCheckedChangeListener((v, isChecked) -> {
if (trustedNetworkHelper.hasPermissions()) {
trustedNetworkHelper.allAllowed(isChecked);
updateTrustedNetworkListView();
addNetworkButton();
} else {
allowAllCheckBox.setChecked(true); // Disable unchecking it
new PermissionsAlertDialogFragment.Builder()
.setTitle(R.string.location_permission_needed_title)
.setMessage(R.string.location_permission_needed_desc)
.setPositiveButton(R.string.ok)
.setNegativeButton(R.string.cancel)
.setPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION})
.setRequestCode(0)
.create().show(getSupportFragmentManager(), null);
}
});
allowAllCheckBox.setChecked(trustedNetworkHelper.allAllowed());
updateTrustedNetworkListView();
}
private void updateEmptyListMessage() {
boolean isVisible = trustedNetworks.isEmpty() && !trustedNetworkHelper.allAllowed();
findViewById(R.id.trusted_network_list_empty)
.setVisibility(isVisible ? View.VISIBLE : View.GONE );
}
private void updateTrustedNetworkListView() {
Boolean allAllowed = trustedNetworkHelper.allAllowed();
updateEmptyListMessage();
trustedNetworksView.setVisibility(allAllowed ? View.GONE : View.VISIBLE);
if (allAllowed){
return;
}
trustedNetworksView.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, trustedNetworks));
trustedNetworksView.setOnItemClickListener((parent, view, position, id) -> {
String targetItem = trustedNetworks.get(position);
new AlertDialog.Builder(TrustedNetworksActivity.this)
.setMessage("Delete " + targetItem + " ?")
.setPositiveButton("Yes", (dialog, which) -> {
trustedNetworks.remove(position);
trustedNetworkHelper.update(trustedNetworks);
((ArrayAdapter) trustedNetworksView.getAdapter()).notifyDataSetChanged();
addNetworkButton();
updateEmptyListMessage();
})
.setNegativeButton("No", null)
.show();
});
addNetworkButton();
}
private void addNetworkButton() {
Button addButton = findViewById(android.R.id.button1);
if (trustedNetworkHelper.allAllowed()) {
addButton.setVisibility(View.GONE);
return;
}
final String currentSSID = trustedNetworkHelper.currentSSID();
if (!currentSSID.isEmpty() && trustedNetworks.indexOf(currentSSID) == -1) {
String buttonText = getString(R.string.add_trusted_network, currentSSID);
addButton.setText(buttonText);
addButton.setOnClickListener(v -> {
if (trustedNetworks.indexOf(currentSSID) != -1){
return;
}
trustedNetworks.add(currentSSID);
trustedNetworkHelper.update(trustedNetworks);
((ArrayAdapter) trustedNetworksView.getAdapter()).notifyDataSetChanged();
v.setVisibility(View.GONE);
updateEmptyListMessage();
});
addButton.setVisibility(View.VISIBLE);
} else {
addButton.setVisibility(View.GONE);
}
}
}