mirror of
https://github.com/KDE/kdeconnect-android
synced 2025-09-02 23:25:10 +00:00
Compare commits
30 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
c5961d6514 | ||
|
69e5623a4d | ||
|
5d50358f3f | ||
|
58cd88b760 | ||
|
9561ff1cab | ||
|
e48993a5d7 | ||
|
f1d0649cc6 | ||
|
027856bc0b | ||
|
6dd6bd3117 | ||
|
6ecf443238 | ||
|
96b0a9ea9b | ||
|
178e5ca050 | ||
|
df0d02cd0d | ||
|
9be46002ad | ||
|
2cf9df3be8 | ||
|
27b4089061 | ||
|
b8a2757bce | ||
|
da629f9756 | ||
|
3de35361bb | ||
|
9cbf2a33bc | ||
|
1325cc2e0f | ||
|
7784a66df0 | ||
|
b29e7eb000 | ||
|
1fa8f3c99d | ||
|
9e1e479650 | ||
|
4eecf187c3 | ||
|
8c48df6293 | ||
|
b4853508e0 | ||
|
6992f2f5ee | ||
|
bb3018ea76 |
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.kde.kdeconnect_tp"
|
||||
android:versionCode="11006"
|
||||
android:versionName="1.10">
|
||||
android:versionCode="11010"
|
||||
android:versionName="1.10.1">
|
||||
|
||||
<supports-screens
|
||||
android:anyDensity="true"
|
||||
|
@@ -157,6 +157,7 @@
|
||||
<string name="pair_device_action">Aparella amb un dispositiu nou</string>
|
||||
<string name="unpair_device_action">Desparella %s</string>
|
||||
<string name="custom_device_list">Afegeix dispositius per la IP</string>
|
||||
<string name="delete_custom_device">Suprimeixo %s?</string>
|
||||
<string name="share_notification_preference">Rebombori de les notificacions</string>
|
||||
<string name="share_notification_preference_summary">Vibra i reprodueix un so en rebre un fitxer</string>
|
||||
<string name="share_destination_customize">Personalitza el directori de destinació</string>
|
||||
|
@@ -1,5 +1,8 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources>
|
||||
<string name="kde_connect">KDE Connect</string>
|
||||
<string name="foreground_notification_no_devices">Žádná připojená zařízení</string>
|
||||
<string name="foreground_notification_devices">Připojen k: %s</string>
|
||||
<string name="pref_plugin_telephony">Upozornění telefonie</string>
|
||||
<string name="pref_plugin_telephony_desc">Posílat upozornění na příchozí hovory</string>
|
||||
<string name="pref_plugin_battery">Hlášení baterie</string>
|
||||
@@ -122,6 +125,7 @@
|
||||
<string name="device">Zařízení</string>
|
||||
<string name="pair_device">Spárovat zařízení</string>
|
||||
<string name="remote_control">Vzdálené ovládání</string>
|
||||
<string name="settings">Nastavení</string>
|
||||
<string name="mpris_play">Přehrát</string>
|
||||
<string name="mpris_pause">Pozastavit</string>
|
||||
<string name="mpris_previous">Předchozí</string>
|
||||
@@ -131,6 +135,7 @@
|
||||
<string name="mpris_volume">Hlasitost</string>
|
||||
<string name="mpris_settings">Nastavení multimédií</string>
|
||||
<string name="mpris_time_settings_title">Tlačítka vpřed/přetočit</string>
|
||||
<string name="mpris_time_settings_summary">Upravit čas pro rychlý posun/přetočení při stisku</string>
|
||||
<string-array name="mpris_time_entries">
|
||||
<item>10 sekund</item>
|
||||
<item>20 sekund</item>
|
||||
@@ -139,6 +144,8 @@
|
||||
<item>2 minuty</item>
|
||||
</string-array>
|
||||
<string name="mpris_notification_settings_title">Obrazit upozornění pro ovládání médií</string>
|
||||
<string name="mpris_notification_settings_summary">Umožnit ovládání přehrávače médií bez otevření KDE Connect</string>
|
||||
<string name="share_to">Sdílet s...</string>
|
||||
<string name="protocol_version_older">Toto zařízení používá starou verzi protokolu</string>
|
||||
<string name="protocol_version_newer">Toto zařízení používá novější verzi protokolu</string>
|
||||
<string name="general_settings">Obecná nastavení</string>
|
||||
@@ -152,6 +159,7 @@
|
||||
<string name="pair_device_action">Spárovat nové zařízení</string>
|
||||
<string name="unpair_device_action">Zrušit párování %s</string>
|
||||
<string name="custom_device_list">Přidat zařízení podle IP</string>
|
||||
<string name="delete_custom_device">Smazat %s?</string>
|
||||
<string name="share_notification_preference">Hlasitá upozornění</string>
|
||||
<string name="share_notification_preference_summary">Vibrovat a přehrát melodii při přijímání souboru</string>
|
||||
<string name="share_destination_customize">Přizpůsobte si cílový adresář</string>
|
||||
@@ -220,6 +228,10 @@
|
||||
<string name="pref_plugin_mprisreceiver">Ovládání přehrávače médií</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Ovládejte přehrávače médií na vašem telefonu z jiného zařízení</string>
|
||||
<string name="dark_theme">Tmavý motiv</string>
|
||||
<string name="notification_channel_default">Ostatní oznámení</string>
|
||||
<string name="notification_channel_persistent">Stálý ukazatel</string>
|
||||
<string name="notification_channel_media_control">Ovládání médií</string>
|
||||
<string name="notification_channel_filetransfer">Přenos souboru</string>
|
||||
<string name="mpris_stop">Zastavit současný přehrávač</string>
|
||||
<string name="copy_url_to_clipboard">Kopírovat URL do schránky</string>
|
||||
<string name="clipboard_toast">Zkopírováno do schránky</string>
|
||||
@@ -233,4 +245,13 @@
|
||||
<string name="pref_plugin_systemvolume">Hlasitost systému</string>
|
||||
<string name="pref_plugin_systemvolume_desc">Ovládejte hlasitost systému vzdáleného zařízení</string>
|
||||
<string name="mute">Ztlumit</string>
|
||||
<string name="all">Vše</string>
|
||||
<string name="devices">Zařízení</string>
|
||||
<string name="settings_rename">Název zařízení</string>
|
||||
<string name="settings_dark_mode">Tmavý motiv</string>
|
||||
<string name="settings_more_settings_title">Více nastavení</string>
|
||||
<string name="settings_more_settings_text">Nastavení \"pro každé zařízení\" lze najít v \'Nastavení modulu\' v zařízení.</string>
|
||||
<string name="setting_persistent_notification">Ukázat stálé upozornění</string>
|
||||
<string name="setting_persistent_notification_oreo_description">Vyžadováno Androidem od verze 8.0</string>
|
||||
<string name="setting_persistent_notification_pie_description">Od Androidu 9.0 lze toto upozornění minimalizovat pouze jeho dlouhým podržením</string>
|
||||
</resources>
|
||||
|
@@ -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">Keine Verbindung zu einem Gerät</string>
|
||||
<string name="foreground_notification_devices">Verbunden mit %s</string>
|
||||
<string name="pref_plugin_telephony">Telefon-Benachrichtigung</string>
|
||||
<string name="pref_plugin_telephony_desc">Benachrichtigungen über eingehende Anrufe senden</string>
|
||||
<string name="pref_plugin_battery">Akkubericht</string>
|
||||
<string name="pref_plugin_battery_desc">Akkustatus periodisch berichten</string>
|
||||
<string name="pref_plugin_sftp">Dateisystem zeigen</string>
|
||||
@@ -12,7 +16,8 @@
|
||||
<string name="pref_plugin_mpris">Multimedia-Bedienung</string>
|
||||
<string name="pref_plugin_mpris_desc">Eine Fernbedienung für Ihre Medienwiedergabe</string>
|
||||
<string name="pref_plugin_runcommand">Befehl ausführen</string>
|
||||
<string name="pref_plugin_runcommand_desc">Von Ihrem Telefon oder Tablet Befehle auf anderen Geräten ausführen</string>
|
||||
<string name="pref_plugin_runcommand_desc">Von Ihrem Telefon oder Tablett Befehle auf anderen Geräten ausführen</string>
|
||||
<string name="pref_plugin_contacts">Kontakte-Abgleich</string>
|
||||
<string name="pref_plugin_ping">Ping</string>
|
||||
<string name="pref_plugin_ping_desc">Senden und Empfangen von Pings</string>
|
||||
<string name="pref_plugin_notifications">Benachrichtigungs-Abgleich</string>
|
||||
@@ -33,6 +38,7 @@
|
||||
<string name="mousepad_double_tap_settings_title">Aktionsausführung bei Berührung mit zwei Fingern einstellen</string>
|
||||
<string name="mousepad_triple_tap_settings_title">Aktionsausführung bei Berührung mit drei Fingern einstellen</string>
|
||||
<string name="mousepad_sensitivity_settings_title">Empfindlichkeit des Touchpads einstellen</string>
|
||||
<string name="mousepad_acceleration_profile_settings_title">Zeigerbeschleunigung einstellen</string>
|
||||
<string name="mousepad_scroll_direction_title">Bildlaufrichtung umkehren</string>
|
||||
<string-array name="mousepad_tap_entries">
|
||||
<item>Rechtsklick</item>
|
||||
@@ -47,10 +53,10 @@
|
||||
<item>Schnellste</item>
|
||||
</string-array>
|
||||
<string-array name="mousepad_acceleration_profile_entries">
|
||||
<item>No Acceleration</item>
|
||||
<item>Keine Beschleunigung</item>
|
||||
<item>Weakest</item>
|
||||
<item>Weaker</item>
|
||||
<item>Medium</item>
|
||||
<item>Mittel</item>
|
||||
<item>Stronger</item>
|
||||
<item>Strongest</item>
|
||||
</string-array>
|
||||
@@ -106,6 +112,7 @@
|
||||
<string name="device">Gerät</string>
|
||||
<string name="pair_device">Gerät verbinden</string>
|
||||
<string name="remote_control">Fernbedienung</string>
|
||||
<string name="settings">Einstellungen</string>
|
||||
<string name="mpris_play">Wiedergabe</string>
|
||||
<string name="mpris_pause">Anhalten</string>
|
||||
<string name="mpris_previous">Zurück</string>
|
||||
@@ -115,6 +122,7 @@
|
||||
<string name="mpris_volume">Lautstärke</string>
|
||||
<string name="mpris_settings">Multimedia-Einstellungen</string>
|
||||
<string name="mpris_time_settings_title">Knöpfe Vorwärts/Rückwärts</string>
|
||||
<string name="mpris_time_settings_summary">Sprungweite für Vorlauf/Rücklauf anpassen</string>
|
||||
<string-array name="mpris_time_entries">
|
||||
<item>10 Sekunden</item>
|
||||
<item>20 Sekunden</item>
|
||||
@@ -122,6 +130,7 @@
|
||||
<item>1 Minute</item>
|
||||
<item>2 Minuten</item>
|
||||
</string-array>
|
||||
<string name="share_to">Freigeben für ...</string>
|
||||
<string name="protocol_version_older">Dieses Gerät verwendet ein alte Protokollversion</string>
|
||||
<string name="protocol_version_newer">Dieses Gerät verwendet ein neuere Protokollversion</string>
|
||||
<string name="general_settings">Allgemeine Einstellungen</string>
|
||||
@@ -135,12 +144,15 @@
|
||||
<string name="pair_device_action">Ein neues Gerät verbinden</string>
|
||||
<string name="unpair_device_action">Verbindung %s trennen</string>
|
||||
<string name="custom_device_list">Geräte nach IP-Adresse hinzufügen</string>
|
||||
<string name="delete_custom_device">%s löschen?</string>
|
||||
<string name="share_notification_preference">Ausführliche Benachrichtigungen</string>
|
||||
<string name="share_notification_preference_summary">Beim Empfang einer Datei vibrieren und einen Sound abspielen</string>
|
||||
<string name="share_destination_customize">Zielverzeichnis anpassen</string>
|
||||
<string name="share_destination_customize_summary_disabled">Empfangene Dateien werden in Downloads gespeichert</string>
|
||||
<string name="share_destination_customize_summary_enabled">Dateien werden im folgenden Verzeichnis gespeichert</string>
|
||||
<string name="share_destination_folder_preference">Zielverzeichnis</string>
|
||||
<string name="share">Freigeben</string>
|
||||
<string name="share_received_file">%s freigeben</string>
|
||||
<string name="title_activity_notification_filter">Benachrichtigungs-Filter</string>
|
||||
<string name="filter_apps_info">Benachrichtigungen werden zwischen den ausgewählten Anwendungen abgeglichen.</string>
|
||||
<string name="sftp_internal_storage">Interner Speicher</string>
|
||||
@@ -169,6 +181,7 @@
|
||||
<string name="plugin_not_supported">Dieses Modul wird durch das Gerät nicht unterstützt</string>
|
||||
<string name="findmyphone_title">Mein Telefon suchen</string>
|
||||
<string name="findmyphone_title_tablet">Mein Tablet suchen</string>
|
||||
<string name="findmyphone_title_tv">Mein TV 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>
|
||||
@@ -189,10 +202,25 @@
|
||||
<string name="mpris_coverart_description">Cover des aktuellen Mediums</string>
|
||||
<string name="device_icon_description">Gerätesymbol</string>
|
||||
<string name="settings_icon_description">Einstellungssymbol</string>
|
||||
<string name="presenter_fullscreen">Vollbild</string>
|
||||
<string name="presenter_exit">Präsentation beenden</string>
|
||||
<string name="add_command">Einen Befehl hinzufügen</string>
|
||||
<string name="addcommand_explanation">Es sind keine Befehle registriert.</string>
|
||||
<string name="addcommand_explanation2">Sie können neue Befehle in den Systemeinstellungen für KDE-Connect hinzufügen.</string>
|
||||
<string name="add_command_description">Sie können Befehle auf der Arbeitsfläche hinzufügen</string>
|
||||
<string name="pref_plugin_mprisreceiver">Steuerung für Medienwiedergabe</string>
|
||||
<string name="dark_theme">Dunkles Design</string>
|
||||
<string name="notification_channel_default">Andere Benachrichtigungen</string>
|
||||
<string name="notification_channel_filetransfer">Dateiübertragung</string>
|
||||
<string name="copy_url_to_clipboard">Adresse in die Zwischenablage kopieren</string>
|
||||
<string name="clipboard_toast">In die Zwischenablage kopiert</string>
|
||||
<string name="runcommand_notreachable">Das Gerät ist nicht erreichbar</string>
|
||||
<string name="runcommand_notpaired">Das Gerät ist nicht verbunden</string>
|
||||
<string name="runcommand_nosuchdevice">Ein solches Gerät existiert nicht</string>
|
||||
<string name="mute">Stummschalten</string>
|
||||
<string name="all">Alle</string>
|
||||
<string name="devices">Geräte</string>
|
||||
<string name="settings_rename">Gerätename</string>
|
||||
<string name="settings_dark_mode">Dunkles Design</string>
|
||||
<string name="settings_more_settings_title">Weitere Einstellungen</string>
|
||||
</resources>
|
||||
|
@@ -1,5 +1,8 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources>
|
||||
<string name="kde_connect">KDE Connect</string>
|
||||
<string name="foreground_notification_no_devices">No conectado a ningún dispositivo</string>
|
||||
<string name="foreground_notification_devices">Conectado a: %s</string>
|
||||
<string name="pref_plugin_telephony">Notificador de telefonía</string>
|
||||
<string name="pref_plugin_telephony_desc">Enviar notificaciones por llamadas entrantes</string>
|
||||
<string name="pref_plugin_battery">Informe de la batería</string>
|
||||
@@ -120,6 +123,7 @@
|
||||
<string name="device">Dispositivo</string>
|
||||
<string name="pair_device">Vincular dispositivo</string>
|
||||
<string name="remote_control">Control remoto</string>
|
||||
<string name="settings">Preferencias</string>
|
||||
<string name="mpris_play">Reproducir</string>
|
||||
<string name="mpris_pause">Pausar</string>
|
||||
<string name="mpris_previous">Anterior</string>
|
||||
@@ -139,6 +143,7 @@
|
||||
</string-array>
|
||||
<string name="mpris_notification_settings_title">Mostrar notificación del control de medios</string>
|
||||
<string name="mpris_notification_settings_summary">Permite controlar sus reproductores de medios sin abrir KDE Connect</string>
|
||||
<string name="share_to">Compartir con...</string>
|
||||
<string name="protocol_version_older">Este dispositivo usa una versión antigua del protocolo</string>
|
||||
<string name="protocol_version_newer">Este dispositivo usa una versión más reciente del protocolo</string>
|
||||
<string name="general_settings">Preferencias generales</string>
|
||||
@@ -152,6 +157,7 @@
|
||||
<string name="pair_device_action">Vincular un nuevo dispositivo</string>
|
||||
<string name="unpair_device_action">Desvincular %s</string>
|
||||
<string name="custom_device_list">Añadir dispositivos por IP</string>
|
||||
<string name="delete_custom_device">¿Borrar %s?</string>
|
||||
<string name="share_notification_preference">Notificaciones ruidosas</string>
|
||||
<string name="share_notification_preference_summary">Vibrar y reproducir un sonido cuando se reciba un archivo</string>
|
||||
<string name="share_destination_customize">Personalizar directorio destino</string>
|
||||
@@ -220,6 +226,10 @@
|
||||
<string name="pref_plugin_mprisreceiver">Control del reproductor de medios</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Controle los reproductores de medios de sus teléfonos desde otro dispositivo</string>
|
||||
<string name="dark_theme">Tema oscuro</string>
|
||||
<string name="notification_channel_default">Otras notificaciones</string>
|
||||
<string name="notification_channel_persistent">Indicador persistente</string>
|
||||
<string name="notification_channel_media_control">Control multimedia</string>
|
||||
<string name="notification_channel_filetransfer">Transferencia de archivo</string>
|
||||
<string name="mpris_stop">Parar el reproductor actual</string>
|
||||
<string name="copy_url_to_clipboard">Copiar URL al portapapeles</string>
|
||||
<string name="clipboard_toast">Copiado en el portapapeles</string>
|
||||
@@ -234,4 +244,12 @@
|
||||
<string name="pref_plugin_systemvolume_desc">Controle el volumen del sistema del dispositivo remoto</string>
|
||||
<string name="mute">Silenciar</string>
|
||||
<string name="all">Todo</string>
|
||||
<string name="devices">Dispositivos</string>
|
||||
<string name="settings_rename">Nombre del dispositivo</string>
|
||||
<string name="settings_dark_mode">Tema oscuro</string>
|
||||
<string name="settings_more_settings_title">Más preferencias</string>
|
||||
<string name="settings_more_settings_text">Las preferencias por dispositivo se pueden encontrar bajo «Preferencias del complemento» dentro de cada dispositivo.</string>
|
||||
<string name="setting_persistent_notification">Mostrar notificación persistente</string>
|
||||
<string name="setting_persistent_notification_oreo_description">Requerido por Android desde Android 8.0</string>
|
||||
<string name="setting_persistent_notification_pie_description">A partir de Android 9.0, esta notificación solo se puede minimizar mediante una pulsación larga en ella.</string>
|
||||
</resources>
|
||||
|
@@ -157,6 +157,7 @@
|
||||
<string name="pair_device_action">Emparellar cun novo dispositivo</string>
|
||||
<string name="unpair_device_action">Desemparellarse de %s</string>
|
||||
<string name="custom_device_list">Engadir dispositivos por IP</string>
|
||||
<string name="delete_custom_device">Eliminar %s?</string>
|
||||
<string name="share_notification_preference">Notificacións sonoras</string>
|
||||
<string name="share_notification_preference_summary">Vibrar e reproducir un son ao recibir un ficheiro.</string>
|
||||
<string name="share_destination_customize">Personalizar o directorio de destino</string>
|
||||
|
@@ -10,7 +10,7 @@
|
||||
<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_remotekeyboard">Terima penekanan tuts jarak jauh</string>
|
||||
<string name="pref_plugin_remotekeyboard_desc">Terima perihal tekan-tuts dari perangkat 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 player mediamu</string>
|
||||
<string name="pref_plugin_runcommand">Jalankan Perintah</string>
|
||||
@@ -189,8 +189,8 @@
|
||||
<string name="no_permissions_storage">Kamu perlu mengabulkan perizinan untuk mengakses penyimpanan</string>
|
||||
<string name="plugins_need_permission">Beberapa plugin perlu perizinan untuk kerja (ketuk untuk info selebihnya):</string>
|
||||
<string name="permission_explanation">Plugin ini perlu perizinan untuk kerja</string>
|
||||
<string name="optional_permission_explanation">Kamu perlu mengabulkan perizinan extra untuk mengaktifkan semua fungsian</string>
|
||||
<string name="plugins_need_optional_permission">Beberapa plugin yang memiliki fitur dinonaktifkan karena kurangnya perizinan (ketuk untuk info selebihnya):</string>
|
||||
<string name="optional_permission_explanation">Kamu perlu mengabulkan perizinan extra untuk memfungsikan semua fungsian</string>
|
||||
<string name="plugins_need_optional_permission">Beberapa plugin yang memiliki fitur dinonfungsikan karena kurangnya perizinan (ketuk untuk info selebihnya):</string>
|
||||
<string name="sftp_permission_explanation">Untuk mengakses filemu dari PC-mu si apl perlu perizinan untuk mengakses penyimpanan teleponmu</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>
|
||||
|
@@ -1,5 +1,8 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources>
|
||||
<string name="kde_connect">KDE Connect</string>
|
||||
<string name="foreground_notification_no_devices">Non connesso ad alcun dispositivo</string>
|
||||
<string name="foreground_notification_devices">Connesso a: %s</string>
|
||||
<string name="pref_plugin_telephony">Notifiche telefoniche</string>
|
||||
<string name="pref_plugin_telephony_desc">Invia notifiche per le chiamate in ingresso</string>
|
||||
<string name="pref_plugin_battery">Livello batteria</string>
|
||||
@@ -120,6 +123,7 @@
|
||||
<string name="device">Dispositivo</string>
|
||||
<string name="pair_device">Associa dispositivo</string>
|
||||
<string name="remote_control">Telecomando</string>
|
||||
<string name="settings">Impostazioni</string>
|
||||
<string name="mpris_play">Riproduci</string>
|
||||
<string name="mpris_pause">Pausa</string>
|
||||
<string name="mpris_previous">Precedente</string>
|
||||
@@ -139,6 +143,7 @@
|
||||
</string-array>
|
||||
<string name="mpris_notification_settings_title">Mostra la notifica del controllo multimediale</string>
|
||||
<string name="mpris_notification_settings_summary">Consenti di controllare i lettori multimediali senza aprire KDE Connect</string>
|
||||
<string name="share_to">Condividi con…</string>
|
||||
<string name="protocol_version_older">Questo dispositivo usa una vecchia versione del protocollo di rete</string>
|
||||
<string name="protocol_version_newer">Questo dispositivo usa una nuova versione del protocollo di rete</string>
|
||||
<string name="general_settings">Impostazioni generali</string>
|
||||
@@ -152,6 +157,7 @@
|
||||
<string name="pair_device_action">Associa un nuovo dispositivo</string>
|
||||
<string name="unpair_device_action">Disassocia %s</string>
|
||||
<string name="custom_device_list">Aggiungi dispositivi per IP</string>
|
||||
<string name="delete_custom_device">Vuoi eliminare %s?</string>
|
||||
<string name="share_notification_preference">Notifiche rumorose</string>
|
||||
<string name="share_notification_preference_summary">Vibra e riproduci un suono alla ricezione di un file</string>
|
||||
<string name="share_destination_customize">Personalizza la cartella di destinazione</string>
|
||||
@@ -220,6 +226,10 @@
|
||||
<string name="pref_plugin_mprisreceiver">Controllo lettore multimediale</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Controlla i lettori multimediali del tuo telefono da un altro dispositivo</string>
|
||||
<string name="dark_theme">Tema scuro</string>
|
||||
<string name="notification_channel_default">Altre notifiche</string>
|
||||
<string name="notification_channel_persistent">Indicatore persistente</string>
|
||||
<string name="notification_channel_media_control">Controllo multimediale</string>
|
||||
<string name="notification_channel_filetransfer">Trasferimento file</string>
|
||||
<string name="mpris_stop">Ferma il lettore attuale</string>
|
||||
<string name="copy_url_to_clipboard">Copia l\'URL negli appunti</string>
|
||||
<string name="clipboard_toast">Copiato negli appunti</string>
|
||||
@@ -234,4 +244,12 @@
|
||||
<string name="pref_plugin_systemvolume_desc">Controlla il volume di sistema dal dispositivo remoto</string>
|
||||
<string name="mute">Silenzia</string>
|
||||
<string name="all">Tutto</string>
|
||||
<string name="devices">Dispositivi</string>
|
||||
<string name="settings_rename">Nome dispositivo</string>
|
||||
<string name="settings_dark_mode">Tema scuro</string>
|
||||
<string name="settings_more_settings_title">Altre impostazioni</string>
|
||||
<string name="settings_more_settings_text">Le impostazioni per dispositivo sono disponibili sotto «Impostazione estensioni» dall\'interno del dispositivo.</string>
|
||||
<string name="setting_persistent_notification">Mostra notifica persistente</string>
|
||||
<string name="setting_persistent_notification_oreo_description">Richiesto da Android a partire da Android 8.0</string>
|
||||
<string name="setting_persistent_notification_pie_description">Da Android 9.0, questa notifica potrà essere minimizzata solo con un tocco lungo</string>
|
||||
</resources>
|
||||
|
@@ -98,7 +98,7 @@
|
||||
<string name="received_url_text">Tap om \'%1s\' te openen</string>
|
||||
<string name="incoming_file_title">Inkomend bestand van %1s</string>
|
||||
<string name="incoming_file_text">%1s</string>
|
||||
<string name="outgoing_file_title">Bezig bestand te verzenden naar %1s</string>
|
||||
<string name="outgoing_file_title">Bestand wordt verzonden naar %1s</string>
|
||||
<string name="outgoing_files_title">Bezig bestanden te verzenden naar %1s</string>
|
||||
<plurals name="outgoing_files_text">
|
||||
<item quantity="one">Bestand %1$d verzenden</item>
|
||||
@@ -157,6 +157,7 @@
|
||||
<string name="pair_device_action">Een paar maken met een nieuw apparaat</string>
|
||||
<string name="unpair_device_action">Paar %s uit elkaar halen</string>
|
||||
<string name="custom_device_list">Voeg apparaten toe per IP-adres</string>
|
||||
<string name="delete_custom_device">%s verwijderen?</string>
|
||||
<string name="share_notification_preference">Luidruchtige meldingen</string>
|
||||
<string name="share_notification_preference_summary">Vibreer en speel een geluidje bij ontvangen van een bestand</string>
|
||||
<string name="share_destination_customize">De bestemmingsmap aanpassen</string>
|
||||
|
@@ -1,5 +1,8 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources>
|
||||
<string name="kde_connect">KDE Connect</string>
|
||||
<string name="foreground_notification_no_devices">Ikkje tilkopla ei eining</string>
|
||||
<string name="foreground_notification_devices">Kopla til: %s</string>
|
||||
<string name="pref_plugin_telephony">Telefonvarsling</string>
|
||||
<string name="pref_plugin_telephony_desc">Send varsling ved oppringing</string>
|
||||
<string name="pref_plugin_battery">Batterirapport</string>
|
||||
@@ -120,6 +123,7 @@
|
||||
<string name="device">Eining</string>
|
||||
<string name="pair_device">Par ny eining</string>
|
||||
<string name="remote_control">Fjernstyring</string>
|
||||
<string name="settings">Innstillingar</string>
|
||||
<string name="mpris_play">Spel</string>
|
||||
<string name="mpris_pause">Pause</string>
|
||||
<string name="mpris_previous">Førre</string>
|
||||
@@ -129,6 +133,7 @@
|
||||
<string name="mpris_volume">Lydstyrke</string>
|
||||
<string name="mpris_settings">Medieinnstillingar</string>
|
||||
<string name="mpris_time_settings_title">Spoleknappar</string>
|
||||
<string name="mpris_time_settings_summary">Juster tida for spoling ved trykking</string>
|
||||
<string-array name="mpris_time_entries">
|
||||
<item>10 sekund</item>
|
||||
<item>20 sekund</item>
|
||||
@@ -137,6 +142,8 @@
|
||||
<item>2 minutt</item>
|
||||
</string-array>
|
||||
<string name="mpris_notification_settings_title">Vis varsling med avspelingskontrollar</string>
|
||||
<string name="mpris_notification_settings_summary">Tillat å kontrollera mediespelarar utan å opna KDE Connect</string>
|
||||
<string name="share_to">Del til …</string>
|
||||
<string name="protocol_version_older">Denne eininga brukar ein gammal protokollversjon</string>
|
||||
<string name="protocol_version_newer">Denne eininga brukar ein nyare protokollversjon</string>
|
||||
<string name="general_settings">Generelle innstillingar</string>
|
||||
@@ -150,6 +157,7 @@
|
||||
<string name="pair_device_action">Par ny eining</string>
|
||||
<string name="unpair_device_action">Løys paring for %s</string>
|
||||
<string name="custom_device_list">Legg til eining basert på IP</string>
|
||||
<string name="delete_custom_device">Vil du sletta %s?</string>
|
||||
<string name="share_notification_preference">Lydvarsling</string>
|
||||
<string name="share_notification_preference_summary">Vibrer og spel ein lyd ved mottak av fil</string>
|
||||
<string name="share_destination_customize">Sjølvvald målmappe</string>
|
||||
@@ -169,11 +177,11 @@
|
||||
<string name="add_host">Legg til vert/IP</string>
|
||||
<string name="add_host_hint">Vertsnamn/IP-adresse</string>
|
||||
<string name="no_players_connected">Fann ingen spelarar</string>
|
||||
<string name="custom_dev_list_help">Bruk berre dette valet viss eininga ikkje vert kjend att automatisk. Skriv inn IP-adressa eller vertsnamnet nedanfor, og trykk på knappen for å leggja eininga til oversikta. Trykk på element i oversikta for å fjerna dei.</string>
|
||||
<string name="custom_dev_list_help">Bruk berre dette valet viss eininga ikkje vert kjend att automatisk. Skriv inn IP-adressa eller vertsnamnet nedanfor, og trykk på knappen for å leggja til eininga. Trykk på oppføringar i lista for å fjerna dei.</string>
|
||||
<string name="mpris_player_on_device">%1$s på %2$s</string>
|
||||
<string name="send_files">Send filer</string>
|
||||
<string name="pairing_title">KDE Connect-einingar</string>
|
||||
<string name="pairing_description">Andre einingar i nettverket som køyrer KDE Connect vil dukka opp her.</string>
|
||||
<string name="pairing_description">Andre einingar i nettverket som køyrer KDE Connect, vil dukka opp her.</string>
|
||||
<string name="device_paired">Eininga er para</string>
|
||||
<string name="device_rename_title">Endra namn på eining</string>
|
||||
<string name="device_rename_confirm">Endra namn</string>
|
||||
@@ -218,6 +226,10 @@
|
||||
<string name="pref_plugin_mprisreceiver">Mediespelarkontrollar</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">Kontroller mediespelarar på telefonen din frå ei anna eining</string>
|
||||
<string name="dark_theme">Mørkt tema</string>
|
||||
<string name="notification_channel_default">Andre varslingar</string>
|
||||
<string name="notification_channel_persistent">Evigvarande varslingar</string>
|
||||
<string name="notification_channel_media_control">Mediestyring</string>
|
||||
<string name="notification_channel_filetransfer">Filoverføring</string>
|
||||
<string name="mpris_stop">Stopp gjeldande avspelar</string>
|
||||
<string name="copy_url_to_clipboard">Kopier adresse til utklippstavla</string>
|
||||
<string name="clipboard_toast">Kopiert til utklippstavla</string>
|
||||
@@ -231,4 +243,13 @@
|
||||
<string name="pref_plugin_systemvolume">Systemlydstyrke</string>
|
||||
<string name="pref_plugin_systemvolume_desc">Juster systemlydstyrken til ekstern eining</string>
|
||||
<string name="mute">Demp lyd</string>
|
||||
<string name="all">Alle</string>
|
||||
<string name="devices">Einingar</string>
|
||||
<string name="settings_rename">Einingsnamn</string>
|
||||
<string name="settings_dark_mode">Mørkt tema</string>
|
||||
<string name="settings_more_settings_title">Fleire innstillingar</string>
|
||||
<string name="settings_more_settings_text">Innstillingar for einskildeiningar finn du under «Programtillegg-oppsett» på kvar eining.</string>
|
||||
<string name="setting_persistent_notification">Vis evigvarande varsling</string>
|
||||
<string name="setting_persistent_notification_oreo_description">Påkravd av Android frå og med versjon 8.0</string>
|
||||
<string name="setting_persistent_notification_pie_description">Frå og med Android 9.0 kan du berre fjerna denne varslinga ved å trykkja lenge på ho</string>
|
||||
</resources>
|
||||
|
@@ -157,6 +157,7 @@
|
||||
<string name="pair_device_action">Emparelhar um novo dispositivo</string>
|
||||
<string name="unpair_device_action">Desemparelhar o %s</string>
|
||||
<string name="custom_device_list">Adicionar dispositivos pelo IP</string>
|
||||
<string name="delete_custom_device">Apagar o %s?</string>
|
||||
<string name="share_notification_preference">Notificações com ruído</string>
|
||||
<string name="share_notification_preference_summary">Vibrar e tocar um som ao receber um ficheiro</string>
|
||||
<string name="share_destination_customize">Personalizar a pasta de destino</string>
|
||||
|
@@ -108,7 +108,6 @@
|
||||
<string name="device">Уређај</string>
|
||||
<string name="pair_device">Упари уређај</string>
|
||||
<string name="remote_control">Даљинско управљање</string>
|
||||
<string name="settings">Поставке за КДЕ‑конекцију</string>
|
||||
<string name="mpris_play">Пусти</string>
|
||||
<string name="mpris_previous">Претходно</string>
|
||||
<string name="mpris_rew">Премотај</string>
|
||||
@@ -124,7 +123,6 @@
|
||||
<item>1 минут</item>
|
||||
<item>2 минута</item>
|
||||
</string-array>
|
||||
<string name="share_to">Дели...</string>
|
||||
<string name="protocol_version_older">Овај уређај користи стару верзију протокола</string>
|
||||
<string name="protocol_version_newer">Овај уређај користи новију верзију протокола</string>
|
||||
<string name="general_settings">Опште поставке</string>
|
||||
|
@@ -157,6 +157,7 @@
|
||||
<string name="pair_device_action">Para ihop med ny apparat</string>
|
||||
<string name="unpair_device_action">Ta bort ihopparning %s</string>
|
||||
<string name="custom_device_list">Lägg till apparater enligt IP-adress</string>
|
||||
<string name="delete_custom_device">Ta bort %s?</string>
|
||||
<string name="share_notification_preference">Ljudliga underrättelser</string>
|
||||
<string name="share_notification_preference_summary">Vibrera och spela ett ljud när en fil tas emot</string>
|
||||
<string name="share_destination_customize">Anpassa målkatalog</string>
|
||||
|
@@ -159,6 +159,7 @@
|
||||
<string name="pair_device_action">Пов’язати новий пристрій</string>
|
||||
<string name="unpair_device_action">Розірвати прив’язку %s</string>
|
||||
<string name="custom_device_list">Додати пристрої за IP</string>
|
||||
<string name="delete_custom_device">Вилучити %s?</string>
|
||||
<string name="share_notification_preference">Звукові сповіщення</string>
|
||||
<string name="share_notification_preference_summary">Вібрація і відтворення звуку у відповідь на отримання файла</string>
|
||||
<string name="share_destination_customize">Налаштування каталогу призначення</string>
|
||||
|
@@ -1,5 +1,8 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources>
|
||||
<string name="kde_connect">KDE Connect</string>
|
||||
<string name="foreground_notification_no_devices">没有连接到任何设备</string>
|
||||
<string name="foreground_notification_devices">已连接到:%s</string>
|
||||
<string name="pref_plugin_telephony">电话通知</string>
|
||||
<string name="pref_plugin_telephony_desc">发送来电通知</string>
|
||||
<string name="pref_plugin_battery">电池报告</string>
|
||||
@@ -119,6 +122,7 @@
|
||||
<string name="device">设备</string>
|
||||
<string name="pair_device">进行配对</string>
|
||||
<string name="remote_control">远程控制</string>
|
||||
<string name="settings">设置</string>
|
||||
<string name="mpris_play">播放</string>
|
||||
<string name="mpris_pause">Pause</string>
|
||||
<string name="mpris_previous">前一个</string>
|
||||
@@ -138,6 +142,7 @@
|
||||
</string-array>
|
||||
<string name="mpris_notification_settings_title">显示媒体控制通知部件</string>
|
||||
<string name="mpris_notification_settings_summary">允许在不用打开 KDE 连接的情况下控制媒体播放器</string>
|
||||
<string name="share_to">分享到...</string>
|
||||
<string name="protocol_version_older">该设备使用旧版本的协议</string>
|
||||
<string name="protocol_version_newer">该设备使用较新版本的协议</string>
|
||||
<string name="general_settings">常规设置</string>
|
||||
@@ -219,6 +224,10 @@
|
||||
<string name="pref_plugin_mprisreceiver">控制媒体播放器</string>
|
||||
<string name="pref_plugin_mprisreceiver_desc">从其他设备控制您手机的媒体播放器</string>
|
||||
<string name="dark_theme">暗色主题</string>
|
||||
<string name="notification_channel_default">其他通知</string>
|
||||
<string name="notification_channel_persistent">持久性通知</string>
|
||||
<string name="notification_channel_media_control">媒体控制</string>
|
||||
<string name="notification_channel_filetransfer">文件传送</string>
|
||||
<string name="mpris_stop">停止但前播放器</string>
|
||||
<string name="copy_url_to_clipboard">复制 URL 到剪贴板</string>
|
||||
<string name="clipboard_toast">已复制到剪贴板</string>
|
||||
@@ -232,4 +241,13 @@
|
||||
<string name="pref_plugin_systemvolume">系统音量</string>
|
||||
<string name="pref_plugin_systemvolume_desc">在远程设备上控制系统音量</string>
|
||||
<string name="mute">静音</string>
|
||||
<string name="all">全部</string>
|
||||
<string name="devices">设备</string>
|
||||
<string name="settings_rename">设备名</string>
|
||||
<string name="settings_dark_mode">暗色主题</string>
|
||||
<string name="settings_more_settings_title">更多设置</string>
|
||||
<string name="settings_more_settings_text">每个设备的独立设置可以在设备页内的“插件设置”下找到。</string>
|
||||
<string name="setting_persistent_notification">启用常驻通知栏</string>
|
||||
<string name="setting_persistent_notification_oreo_description">Android 8.0 以及以上必须启用</string>
|
||||
<string name="setting_persistent_notification_pie_description">Android 9.0 之后只能通过长按通知项最小化持久性通知</string>
|
||||
</resources>
|
||||
|
@@ -198,6 +198,7 @@
|
||||
<string name="pair_device_action">Pair a new device</string>
|
||||
<string name="unpair_device_action">Unpair %s</string>
|
||||
<string name="custom_device_list">Add devices by IP</string>
|
||||
<string name="delete_custom_device">Delete %s?</string>
|
||||
<string name="share_notification_preference">Noisy notifications</string>
|
||||
<string name="share_notification_preference_summary">Vibrate and play a sound when receiving a file</string>
|
||||
<string name="share_destination_customize">Customize destination directory</string>
|
||||
|
@@ -150,7 +150,7 @@ public class LanLink extends BaseLink {
|
||||
|
||||
//Prepare socket for the payload
|
||||
final ServerSocket server;
|
||||
if (np.hasPayload()) {
|
||||
if (np.hasPayload() && np.getPayloadSize() != 0) {
|
||||
server = LanLinkProvider.openServerSocketOnFreePort(LanLinkProvider.PAYLOAD_TRANSFER_MIN_PORT);
|
||||
JSONObject payloadTransferInfo = new JSONObject();
|
||||
payloadTransferInfo.put("port", server.getLocalPort());
|
||||
|
@@ -28,6 +28,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.os.Binder;
|
||||
import android.os.Build;
|
||||
import android.os.IBinder;
|
||||
@@ -37,7 +38,6 @@ import android.util.Log;
|
||||
|
||||
import org.kde.kdeconnect.Backends.BaseLink;
|
||||
import org.kde.kdeconnect.Backends.BaseLinkProvider;
|
||||
//import org.kde.kdeconnect.Backends.BluetoothBackend.BluetoothLinkProvider;
|
||||
import org.kde.kdeconnect.Backends.LanBackend.LanLinkProvider;
|
||||
import org.kde.kdeconnect.Helpers.NotificationHelper;
|
||||
import org.kde.kdeconnect.Helpers.SecurityHelpers.RsaHelper;
|
||||
@@ -53,6 +53,8 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
//import org.kde.kdeconnect.Backends.BluetoothBackend.BluetoothLinkProvider;
|
||||
|
||||
public class BackgroundService extends Service {
|
||||
private static final int FOREGROUND_NOTIFICATION_ID = 1;
|
||||
|
||||
@@ -273,6 +275,10 @@ public class BackgroundService extends Service {
|
||||
|
||||
// Register screen on listener
|
||||
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
|
||||
// See: https://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
|
||||
}
|
||||
registerReceiver(new KdeConnectBroadcastReceiver(), filter);
|
||||
|
||||
Log.i("KDE/BackgroundService", "Service not started yet, initializing...");
|
||||
|
@@ -27,6 +27,7 @@ import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Looper;
|
||||
import android.provider.Telephony;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.RequiresApi;
|
||||
import android.util.Log;
|
||||
|
||||
@@ -113,39 +114,66 @@ public class SMSHelper {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all messages matching the passed filter. See documentation for Android's ContentResolver
|
||||
* Gets Messages for caller functions, such as: getMessagesWithFilter() and getConversations()
|
||||
*
|
||||
* @param Uri Uri indicating the messages database to read
|
||||
* @param context android.content.Context running the request.
|
||||
* @param selection Parameterizable filter to use with the ContentResolver query. May be null.
|
||||
* @param selectionArgs Parameters for selection. May be null.
|
||||
* @return List of messages matching the filter
|
||||
* @return Returns HashMap<ThreadID, List<Message>>, which is transformed in caller functions into other classes.
|
||||
*/
|
||||
private static List<Message> getMessagesWithFilter(Context context, String selection, String[] selectionArgs) {
|
||||
List<Message> toReturn = new ArrayList<>();
|
||||
|
||||
Uri smsUri = getSMSUri();
|
||||
|
||||
try (Cursor smsCursor = context.getContentResolver().query(
|
||||
smsUri,
|
||||
private static HashMap<ThreadID, List<Message>> getMessages(Uri Uri,
|
||||
Context context,
|
||||
String selection,
|
||||
String[] selectionArgs) {
|
||||
HashMap<ThreadID, List<Message>> toReturn = new HashMap<>();
|
||||
try (Cursor myCursor = context.getContentResolver().query(
|
||||
Uri,
|
||||
Message.smsColumns,
|
||||
selection,
|
||||
selectionArgs,
|
||||
null)
|
||||
) {
|
||||
if (smsCursor != null && smsCursor.moveToFirst()) {
|
||||
if (myCursor != null && myCursor.moveToFirst()) {
|
||||
int threadColumn = myCursor.getColumnIndexOrThrow(ThreadID.lookupColumn);
|
||||
do {
|
||||
HashMap<String, String> messageInfo = new HashMap<>();
|
||||
for (int columnIdx = 0; columnIdx < smsCursor.getColumnCount(); columnIdx++) {
|
||||
String colName = smsCursor.getColumnName(columnIdx);
|
||||
String body = smsCursor.getString(columnIdx);
|
||||
for (int columnIdx = 0; columnIdx < myCursor.getColumnCount(); columnIdx++) {
|
||||
String colName = myCursor.getColumnName(columnIdx);
|
||||
String body = myCursor.getString(columnIdx);
|
||||
messageInfo.put(colName, body);
|
||||
}
|
||||
toReturn.add(new Message(messageInfo));
|
||||
} while (smsCursor.moveToNext());
|
||||
|
||||
Message message = new Message(messageInfo);
|
||||
ThreadID threadID = new ThreadID(message.m_threadID);
|
||||
|
||||
if (!toReturn.containsKey(threadID)) {
|
||||
toReturn.put(threadID, new ArrayList<Message>());
|
||||
}
|
||||
toReturn.get(threadID).add(message);
|
||||
} while (myCursor.moveToNext());
|
||||
} else {
|
||||
// No SMSes available?
|
||||
// No conversations or SMSes available?
|
||||
}
|
||||
}
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all messages matching the passed filter. See documentation for Android's ContentResolver
|
||||
*
|
||||
* @param context android.content.Context running the request
|
||||
* @param selection Parameterizable filter to use with the ContentResolver query. May be null.
|
||||
* @param selectionArgs Parameters for selection. May be null.
|
||||
* @return List of messages matching the filter
|
||||
*/
|
||||
private static List<Message> getMessagesWithFilter(Context context, String selection, String[] selectionArgs) {
|
||||
HashMap<ThreadID, List<Message>> result = getMessages(SMSHelper.getSMSUri(), context, selection, selectionArgs);
|
||||
List<Message> toReturn = new ArrayList<>();
|
||||
|
||||
for(Map.Entry<ThreadID, List<Message>> entry : result.entrySet()) {
|
||||
toReturn.addAll(entry.getValue());
|
||||
}
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
@@ -157,35 +185,15 @@ public class SMSHelper {
|
||||
* @return Mapping of thread_id to the first message in each thread
|
||||
*/
|
||||
public static Map<ThreadID, Message> getConversations(Context context) {
|
||||
HashMap<ThreadID, List<Message>> result = getMessages(SMSHelper.getConversationUri(), context, null, null);
|
||||
HashMap<ThreadID, Message> toReturn = new HashMap<>();
|
||||
|
||||
Uri conversationUri = getConversationUri();
|
||||
for(Map.Entry<ThreadID, List<Message>> entry : result.entrySet()) {
|
||||
ThreadID returnThreadID = entry.getKey();
|
||||
List<Message> messages = entry.getValue();
|
||||
|
||||
try (Cursor conversationsCursor = context.getContentResolver().query(
|
||||
conversationUri,
|
||||
Message.smsColumns,
|
||||
null,
|
||||
null,
|
||||
null)
|
||||
) {
|
||||
if (conversationsCursor != null && conversationsCursor.moveToFirst()) {
|
||||
int threadColumn = conversationsCursor.getColumnIndexOrThrow(ThreadID.lookupColumn);
|
||||
do {
|
||||
int thread = conversationsCursor.getInt(threadColumn);
|
||||
|
||||
HashMap<String, String> messageInfo = new HashMap<>();
|
||||
for (int columnIdx = 0; columnIdx < conversationsCursor.getColumnCount(); columnIdx++) {
|
||||
String colName = conversationsCursor.getColumnName(columnIdx);
|
||||
String body = conversationsCursor.getString(columnIdx);
|
||||
messageInfo.put(colName, body);
|
||||
}
|
||||
toReturn.put(new ThreadID(thread), new Message(messageInfo));
|
||||
} while (conversationsCursor.moveToNext());
|
||||
} else {
|
||||
// No conversations available?
|
||||
}
|
||||
toReturn.put(returnThreadID, messages.get(0));
|
||||
}
|
||||
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
@@ -253,6 +261,14 @@ public class SMSHelper {
|
||||
static final String THREAD_ID = ThreadID.lookupColumn; // Magic number which binds (message) threads
|
||||
static final String U_ID = Telephony.Sms._ID; // Something which uniquely identifies this message
|
||||
|
||||
/**
|
||||
* Event flags
|
||||
* A message should have a bitwise-or of event flags before delivering the packet
|
||||
* Any events not supported by the receiving device should be ignored
|
||||
*/
|
||||
public static final int TEXT_MESSAGE = 0x1; // This message has a "body" field which contains
|
||||
// pure, human-readable text
|
||||
|
||||
/**
|
||||
* Define the columns which are to be extracted from the Android SMS database
|
||||
*/
|
||||
@@ -364,4 +380,3 @@ public class SMSHelper {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -211,15 +211,11 @@ public class SslHelper {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
supportedCiphers.add("TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"); // API 20+
|
||||
supportedCiphers.add("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"); // API 20+
|
||||
supportedCiphers.add("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"); // API 11+
|
||||
} else {
|
||||
supportedCiphers.add("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"); // API 11+
|
||||
supportedCiphers.add("SSL_RSA_WITH_RC4_128_SHA"); // API 9+
|
||||
supportedCiphers.add("SSL_RSA_WITH_RC4_128_MD5"); // API 9+
|
||||
}
|
||||
supportedCiphers.add("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"); // API 11+
|
||||
socket.setEnabledCipherSuites(supportedCiphers.toArray(new String[0]));
|
||||
|
||||
socket.setSoTimeout(1000);
|
||||
socket.setSoTimeout(10000);
|
||||
|
||||
if (isClient) {
|
||||
socket.setUseClientMode(true);
|
||||
|
@@ -146,6 +146,11 @@ public class KeyListenerView extends View {
|
||||
np.set("shift", true);
|
||||
}
|
||||
|
||||
if (event.isMetaPressed()) {
|
||||
np.set("super", true);
|
||||
modifier = true;
|
||||
}
|
||||
|
||||
int specialKey = SpecialKeysMap.get(keyCode, -1);
|
||||
|
||||
if (specialKey != -1) {
|
||||
|
@@ -55,7 +55,9 @@ import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
|
||||
public class NotificationsPlugin extends Plugin implements NotificationReceiver.NotificationListener {
|
||||
@@ -66,6 +68,7 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
||||
|
||||
private AppDatabase appDatabase;
|
||||
|
||||
private Set<String> currentNotifications;
|
||||
private Map<String, RepliableNotification> pendingIntents;
|
||||
private boolean serviceReady;
|
||||
|
||||
@@ -105,6 +108,7 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
||||
if (!hasPermission()) return false;
|
||||
|
||||
pendingIntents = new HashMap<>();
|
||||
currentNotifications = new HashSet<>();
|
||||
|
||||
appDatabase = new AppDatabase(context, true);
|
||||
|
||||
@@ -145,6 +149,7 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
||||
np.set("id", id);
|
||||
np.set("isCancel", true);
|
||||
device.sendPacket(np);
|
||||
currentNotifications.remove(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -197,39 +202,46 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
||||
np.set("requestAnswer", true); //For compatibility with old desktop versions of KDE Connect that don't support "silent"
|
||||
}
|
||||
|
||||
try {
|
||||
Bitmap appIcon = null;
|
||||
Context foreignContext = context.createPackageContext(statusBarNotification.getPackageName(), 0);
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
|
||||
appIcon = iconToBitmap(foreignContext, notification.getLargeIcon());
|
||||
} else {
|
||||
appIcon = notification.largeIcon;
|
||||
}
|
||||
//appIcon = drawableToBitmap(context.getResources().getDrawable(R.drawable.icon));
|
||||
if (appIcon == null) {
|
||||
boolean isUpdate = currentNotifications.contains(key);
|
||||
if (!isUpdate) {
|
||||
//If it's an update, the other end should have the icon already: no need to extract it and create the payload again
|
||||
try {
|
||||
Bitmap appIcon = null;
|
||||
Context foreignContext = context.createPackageContext(statusBarNotification.getPackageName(), 0);
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
|
||||
appIcon = iconToBitmap(foreignContext, notification.getSmallIcon());
|
||||
appIcon = iconToBitmap(foreignContext, notification.getLargeIcon());
|
||||
} else {
|
||||
PackageManager pm = context.getPackageManager();
|
||||
Resources foreignResources = pm.getResourcesForApplication(statusBarNotification.getPackageName());
|
||||
Drawable foreignIcon = foreignResources.getDrawable(notification.icon);
|
||||
appIcon = drawableToBitmap(foreignIcon);
|
||||
appIcon = notification.largeIcon;
|
||||
}
|
||||
//appIcon = drawableToBitmap(context.getResources().getDrawable(R.drawable.icon));
|
||||
if (appIcon == null) {
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
|
||||
appIcon = iconToBitmap(foreignContext, notification.getSmallIcon());
|
||||
} else {
|
||||
PackageManager pm = context.getPackageManager();
|
||||
Resources foreignResources = pm.getResourcesForApplication(statusBarNotification.getPackageName());
|
||||
Drawable foreignIcon = foreignResources.getDrawable(notification.icon);
|
||||
appIcon = drawableToBitmap(foreignIcon);
|
||||
}
|
||||
}
|
||||
|
||||
if (appIcon != null) {
|
||||
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
|
||||
appIcon.compress(Bitmap.CompressFormat.PNG, 90, outStream);
|
||||
byte[] bitmapData = outStream.toByteArray();
|
||||
|
||||
Log.e("PAYLOAD", "PAYLOAD: " + getChecksum(bitmapData));
|
||||
|
||||
np.setPayload(bitmapData);
|
||||
|
||||
np.set("payloadHash", getChecksum(bitmapData));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
Log.e("NotificationsPlugin", "Error retrieving icon");
|
||||
}
|
||||
|
||||
if (appIcon != null) {
|
||||
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
|
||||
appIcon.compress(Bitmap.CompressFormat.PNG, 90, outStream);
|
||||
byte[] bitmapData = outStream.toByteArray();
|
||||
|
||||
|
||||
np.setPayload(bitmapData);
|
||||
|
||||
np.set("payloadHash", getChecksum(bitmapData));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
Log.e("NotificationsPlugin", "Error retrieving icon");
|
||||
} else {
|
||||
currentNotifications.add(key);
|
||||
}
|
||||
|
||||
RepliableNotification rn = extractRepliableNotification(statusBarNotification);
|
||||
@@ -247,6 +259,7 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
||||
np.set("time", Long.toString(statusBarNotification.getPostTime()));
|
||||
|
||||
device.sendPacket(np);
|
||||
|
||||
}
|
||||
|
||||
private Bitmap drawableToBitmap(Drawable drawable) {
|
||||
@@ -339,8 +352,6 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
||||
}
|
||||
}
|
||||
|
||||
//TODO Add compat for under Kitkat devices
|
||||
|
||||
return title;
|
||||
}
|
||||
|
||||
@@ -350,21 +361,16 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
||||
if (statusBarNotification != null) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
try {
|
||||
Boolean reply = false;
|
||||
|
||||
//works for WhatsApp, but not for Telegram
|
||||
if (statusBarNotification.getNotification().actions != null) {
|
||||
for (Notification.Action act : statusBarNotification.getNotification().actions) {
|
||||
if (act != null && act.getRemoteInputs() != null) {
|
||||
// Is a reply
|
||||
repliableNotification.remoteInputs.addAll(Arrays.asList(act.getRemoteInputs()));
|
||||
repliableNotification.pendingIntent = act.actionIntent;
|
||||
reply = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
repliableNotification.packageName = statusBarNotification.getPackageName();
|
||||
|
||||
repliableNotification.tag = statusBarNotification.getTag();//TODO find how to pass Tag with sending PendingIntent, might fix Hangout problem
|
||||
}
|
||||
} catch (Exception e) {
|
||||
@@ -394,8 +400,6 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
||||
}
|
||||
}
|
||||
|
||||
//TODO Add compat for under Kitkat devices
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
@@ -469,12 +473,11 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
||||
}
|
||||
|
||||
} else if (np.has("cancel")) {
|
||||
|
||||
final String dismissedId = np.getString("cancel");
|
||||
currentNotifications.remove(dismissedId);
|
||||
NotificationReceiver.RunCommand(context, service -> {
|
||||
String dismissedId = np.getString("cancel");
|
||||
cancelNotificationCompat(service, dismissedId);
|
||||
});
|
||||
|
||||
} else if (np.has("requestReplyId") && np.has("message")) {
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
|
||||
@@ -521,7 +524,7 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
||||
} else {
|
||||
int first = compatKey.indexOf(':');
|
||||
if (first == -1) {
|
||||
Log.e("cancelNotificationCompa", "Not formated like a notification key: " + compatKey);
|
||||
Log.e("cancelNotificationCompa", "Not formatted like a notification key: " + compatKey);
|
||||
return;
|
||||
}
|
||||
int last = compatKey.lastIndexOf(':');
|
||||
|
@@ -67,12 +67,16 @@ public class SMSPlugin extends Plugin {
|
||||
* <p>
|
||||
* For example:
|
||||
* { "messages" : [
|
||||
* { "event" : "sms",
|
||||
* "messageBody" : "Hello",
|
||||
* "phoneNumber" : "2021234567",
|
||||
* "messageDate" : "1518846484880",
|
||||
* "messageType" : "2",
|
||||
* "threadID" : "132"
|
||||
* { "event" : 1, // 32-bit field containing a bitwise-or of event flags
|
||||
* // See constants declared in SMSHelper.Message for defined
|
||||
* // values and explanations
|
||||
* "body" : "Hello", // Text message body
|
||||
* "address" : "2021234567", // Sending or receiving address of the message
|
||||
* "date" : "1518846484880", // Timestamp of the message
|
||||
* "type" : "2", // Compare with Android's
|
||||
* // Telephony.TextBasedSmsColumns.MESSAGE_TYPE_*
|
||||
* "thread_id" : "132" // Thread to which the message belongs
|
||||
* "read" : true // Boolean representing whether a message is read or unread
|
||||
* },
|
||||
* { ... },
|
||||
* ...
|
||||
@@ -340,7 +344,7 @@ public class SMSPlugin extends Plugin {
|
||||
try {
|
||||
JSONObject json = message.toJSONObject();
|
||||
|
||||
json.put("event", "sms");
|
||||
json.put("event", SMSHelper.Message.TEXT_MESSAGE);
|
||||
|
||||
body.put(json);
|
||||
} catch (JSONException e) {
|
||||
|
@@ -21,6 +21,7 @@
|
||||
package org.kde.kdeconnect.Plugins.SftpPlugin;
|
||||
|
||||
import android.Manifest;
|
||||
import android.os.Build;
|
||||
import android.os.Environment;
|
||||
|
||||
import org.kde.kdeconnect.Helpers.StorageHelper;
|
||||
@@ -136,7 +137,11 @@ public class SftpPlugin extends Plugin {
|
||||
|
||||
@Override
|
||||
public String[] getRequiredPermissions() {
|
||||
return new String[]{Manifest.permission.READ_EXTERNAL_STORAGE};
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
||||
return new String[]{Manifest.permission.READ_EXTERNAL_STORAGE};
|
||||
} else {
|
||||
return new String[0];
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -42,6 +42,7 @@ class NotificationUpdateCallback extends Device.SendPacketStatusCallback {
|
||||
builder = new NotificationCompat.Builder(context, NotificationHelper.Channels.FILETRANSFER)
|
||||
.setSmallIcon(android.R.drawable.stat_sys_upload)
|
||||
.setAutoCancel(true)
|
||||
.setOngoing(true)
|
||||
.setProgress(100, 0, false)
|
||||
.setContentTitle(title)
|
||||
.setTicker(title);
|
||||
|
@@ -39,18 +39,20 @@ import org.kde.kdeconnect.Helpers.NotificationHelper;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
class ShareNotification {
|
||||
|
||||
private final String filename;
|
||||
private final NotificationManager notificationManager;
|
||||
private final int notificationId;
|
||||
private NotificationCompat.Builder builder;
|
||||
private final Device device;
|
||||
|
||||
//https://documentation.onesignal.com/docs/android-customizations#section-big-picture
|
||||
private static final int bigImageWidth = 1440;
|
||||
private static final int bigImageHeight = 720;
|
||||
|
||||
public ShareNotification(Device device, String filename) {
|
||||
this.device = device;
|
||||
this.filename = filename;
|
||||
@@ -70,6 +72,10 @@ class ShareNotification {
|
||||
NotificationHelper.notifyCompat(notificationManager, notificationId, builder.build());
|
||||
}
|
||||
|
||||
public void cancel() {
|
||||
notificationManager.cancel(notificationId);
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return notificationId;
|
||||
}
|
||||
@@ -106,8 +112,18 @@ class ShareNotification {
|
||||
|
||||
//If it's an image, try to show it in the notification
|
||||
if (mimeType.startsWith("image/")) {
|
||||
try (InputStream inputStream = device.getContext().getContentResolver().openInputStream(destinationUri)) {
|
||||
Bitmap image = BitmapFactory.decodeStream(inputStream);
|
||||
//https://developer.android.com/topic/performance/graphics/load-bitmap
|
||||
final BitmapFactory.Options options = new BitmapFactory.Options();
|
||||
options.inJustDecodeBounds = true;
|
||||
|
||||
try (InputStream decodeBoundsInputStream = device.getContext().getContentResolver().openInputStream(destinationUri);
|
||||
InputStream decodeInputStream = device.getContext().getContentResolver().openInputStream(destinationUri)) {
|
||||
BitmapFactory.decodeStream(decodeBoundsInputStream, null, options);
|
||||
|
||||
options.inJustDecodeBounds = false;
|
||||
options.inSampleSize = calculateInSampleSize(options, bigImageWidth, bigImageHeight);
|
||||
|
||||
Bitmap image = BitmapFactory.decodeStream(decodeInputStream, null, options);
|
||||
if (image != null) {
|
||||
builder.setLargeIcon(image);
|
||||
builder.setStyle(new NotificationCompat.BigPictureStyle()
|
||||
@@ -116,6 +132,7 @@ class ShareNotification {
|
||||
} catch (IOException ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!"file".equals(destinationUri.getScheme())) {
|
||||
return;
|
||||
}
|
||||
@@ -150,10 +167,26 @@ class ShareNotification {
|
||||
|
||||
shareIntent = Intent.createChooser(shareIntent,
|
||||
device.getContext().getString(R.string.share_received_file, destinationUri.getLastPathSegment()));
|
||||
PendingIntent sharePendingIntent = PendingIntent.getActivity(device.getContext(), 0,
|
||||
PendingIntent sharePendingIntent = PendingIntent.getActivity(device.getContext(), (int) System.currentTimeMillis(),
|
||||
shareIntent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
NotificationCompat.Action.Builder shareAction = new NotificationCompat.Action.Builder(
|
||||
R.drawable.ic_share_white, device.getContext().getString(R.string.share), sharePendingIntent);
|
||||
builder.addAction(shareAction.build());
|
||||
}
|
||||
|
||||
private int calculateInSampleSize(BitmapFactory.Options options, int targetWidth, int targetHeight) {
|
||||
int inSampleSize = 1;
|
||||
|
||||
if (options.outHeight > targetHeight || options.outWidth > targetWidth) {
|
||||
final int halfHeight = options.outHeight / 2;
|
||||
final int halfWidth = options.outWidth / 2;
|
||||
|
||||
while ((halfHeight / inSampleSize) >= targetHeight
|
||||
&& (halfWidth / inSampleSize) >= targetWidth) {
|
||||
inSampleSize *= 2;
|
||||
}
|
||||
}
|
||||
|
||||
return inSampleSize;
|
||||
}
|
||||
}
|
||||
|
@@ -34,10 +34,12 @@ import android.content.res.Resources;
|
||||
import android.database.Cursor;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.provider.MediaStore;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v4.content.FileProvider;
|
||||
import android.support.v4.provider.DocumentFile;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
@@ -187,12 +189,19 @@ public class SharePlugin extends Plugin {
|
||||
final long fileLength = np.getPayloadSize();
|
||||
final String originalFilename = np.getString("filename", Long.toString(System.currentTimeMillis()));
|
||||
|
||||
String filename = originalFilename;
|
||||
final DocumentFile destinationFolderDocument;
|
||||
|
||||
//We need to check for already existing files only when storing in the default path.
|
||||
//User-defined paths use the new Storage Access Framework that already handles this.
|
||||
final boolean customDestination = ShareSettingsActivity.isCustomDestinationEnabled(context);
|
||||
final String defaultPath = ShareSettingsActivity.getDefaultDestinationDirectory().getAbsolutePath();
|
||||
final String filename = customDestination ? originalFilename : FilesHelper.findNonExistingNameForNewFile(defaultPath, originalFilename);
|
||||
|
||||
//If the file should be opened immediately store it in the standard location to avoid the FileProvider trouble (See ShareNotification::setURI)
|
||||
if (np.getBoolean("open") || !ShareSettingsActivity.isCustomDestinationEnabled(context)) {
|
||||
final String defaultPath = ShareSettingsActivity.getDefaultDestinationDirectory().getAbsolutePath();
|
||||
filename = FilesHelper.findNonExistingNameForNewFile(defaultPath, originalFilename);
|
||||
destinationFolderDocument = DocumentFile.fromFile(new File(defaultPath));
|
||||
} else {
|
||||
destinationFolderDocument = ShareSettingsActivity.getDestinationDirectory(context);
|
||||
}
|
||||
String displayName = FilesHelper.getFileNameWithoutExt(filename);
|
||||
final String mimeType = FilesHelper.getMimeTypeFromFile(filename);
|
||||
|
||||
@@ -200,7 +209,6 @@ public class SharePlugin extends Plugin {
|
||||
displayName = filename;
|
||||
}
|
||||
|
||||
final DocumentFile destinationFolderDocument = ShareSettingsActivity.getDestinationDirectory(context);
|
||||
final DocumentFile destinationDocument = destinationFolderDocument.createFile(mimeType, displayName);
|
||||
final OutputStream destinationOutput;
|
||||
try {
|
||||
@@ -242,20 +250,38 @@ public class SharePlugin extends Plugin {
|
||||
|
||||
Log.i("SharePlugin", "Transfer finished: " + destinationUri.getPath());
|
||||
|
||||
//Update the notification and allow to open the file from it
|
||||
notification.setFinished(true);
|
||||
notification.setURI(destinationUri, mimeType);
|
||||
notification.show();
|
||||
if (np.getBoolean("open")) {
|
||||
|
||||
if (!customDestination) {
|
||||
Log.i("SharePlugin", "Adding to downloads");
|
||||
DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
|
||||
manager.addCompletedDownload(destinationUri.getLastPathSegment(), device.getName(), true, mimeType, destinationUri.getPath(), fileLength, false);
|
||||
notification.cancel();
|
||||
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
if (Build.VERSION.SDK_INT >= 24) {
|
||||
//Nougat and later require "content://" uris instead of "file://" uris
|
||||
File file = new File(destinationUri.getPath());
|
||||
Uri contentUri = FileProvider.getUriForFile(device.getContext(), "org.kde.kdeconnect_tp.fileprovider", file);
|
||||
intent.setDataAndType(contentUri, mimeType);
|
||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
} else {
|
||||
intent.setDataAndType(destinationUri, mimeType);
|
||||
}
|
||||
|
||||
context.startActivity(intent);
|
||||
} else {
|
||||
//Make sure it is added to the Android Gallery anyway
|
||||
MediaStoreHelper.indexFile(context, destinationUri);
|
||||
}
|
||||
|
||||
//Update the notification and allow to open the file from it
|
||||
notification.setFinished(true);
|
||||
notification.setURI(destinationUri, mimeType);
|
||||
notification.show();
|
||||
|
||||
if (!ShareSettingsActivity.isCustomDestinationEnabled(context)) {
|
||||
Log.i("SharePlugin", "Adding to downloads");
|
||||
DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
|
||||
manager.addCompletedDownload(destinationUri.getLastPathSegment(), device.getName(), true, mimeType, destinationUri.getPath(), fileLength, false);
|
||||
} else {
|
||||
//Make sure it is added to the Android Gallery anyway
|
||||
MediaStoreHelper.indexFile(context, destinationUri);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e("SharePlugin", "Receiver thread exception");
|
||||
e.printStackTrace();
|
||||
|
@@ -86,7 +86,8 @@ public class SystemvolumePlugin extends Plugin {
|
||||
if (sinks.containsKey(name)) {
|
||||
if (np.has("volume")) {
|
||||
sinks.get(name).setVolume(np.getInt("volume"));
|
||||
} else if (np.has("muted")) {
|
||||
}
|
||||
if (np.has("muted")) {
|
||||
sinks.get(name).setMute(np.getBoolean("muted"));
|
||||
}
|
||||
}
|
||||
|
@@ -95,9 +95,9 @@ public class CustomDevicesActivity extends AppCompatActivity {
|
||||
};
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(CustomDevicesActivity.this);
|
||||
builder.setMessage("Delete " + ipAddressList.get(position) + " ?");
|
||||
builder.setPositiveButton("Yes", confirmationListener);
|
||||
builder.setNegativeButton("No", confirmationListener);
|
||||
builder.setMessage(getString(R.string.delete_custom_device, ipAddressList.get(position)));
|
||||
builder.setPositiveButton(R.string.ok, confirmationListener);
|
||||
builder.setNegativeButton(R.string.cancel, confirmationListener);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { //DismissListener
|
||||
dialogAlreadyShown = true;
|
||||
|
Reference in New Issue
Block a user