mirror of
https://github.com/KDE/kdeconnect-android
synced 2025-09-01 14:45:08 +00:00
Compare commits
77 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
bd6ab61594 | ||
|
73356a3ef7 | ||
|
71352bff0e | ||
|
f76977ef21 | ||
|
0510182866 | ||
|
88b38f224b | ||
|
3d415c5959 | ||
|
bda6e3cb7f | ||
|
86261bd105 | ||
|
f0935ebb8a | ||
|
288ca01e44 | ||
|
83a22cab9d | ||
|
e4f9c15b36 | ||
|
ba64b42711 | ||
|
f218d61f71 | ||
|
2dbbfa70c4 | ||
|
92be045f3a | ||
|
8765b7c692 | ||
|
39af8f96e6 | ||
|
823531ddea | ||
|
2a224e5757 | ||
|
a45a56e779 | ||
|
f4ac548eeb | ||
|
b488aeaeee | ||
|
79480d0b23 | ||
|
1edca5e45c | ||
|
ded027d3cc | ||
|
e1cec047d8 | ||
|
ad3046118b | ||
|
f951f4769e | ||
|
a67f7cdfbd | ||
|
8acb022c80 | ||
|
0d575016ed | ||
|
391b61867d | ||
|
74bec9a7de | ||
|
c4a87ecb50 | ||
|
e2b2e91f73 | ||
|
5e905ddd63 | ||
|
75697cedca | ||
|
41aa3fe53e | ||
|
332c2d4856 | ||
|
96e8610363 | ||
|
820b32d260 | ||
|
63c47d201e | ||
|
7e24d87db0 | ||
|
2d60a25192 | ||
|
7e9b61a4fb | ||
|
527381104d | ||
|
8d67e0b0f1 | ||
|
6328a01d1e | ||
|
1c76720794 | ||
|
e4d683f27c | ||
|
227bb855dd | ||
|
0f612c195d | ||
|
39db2180a7 | ||
|
c03cdf8a6d | ||
|
631635498d | ||
|
a33e1fa0d0 | ||
|
b36dc23028 | ||
|
b519bc5e1d | ||
|
816a6f5c79 | ||
|
26b321ee76 | ||
|
1a7697009d | ||
|
8e23ff5cf6 | ||
|
edff3a86bc | ||
|
d7e7de4079 | ||
|
59c0a06143 | ||
|
fd91c3f27d | ||
|
49b1e5c467 | ||
|
6829dac516 | ||
|
0fdb649ee4 | ||
|
580c3ff30b | ||
|
27d853d778 | ||
|
4e2a264ab9 | ||
|
d9aae111fe | ||
|
c0f103fdde | ||
|
4f3ff37712 |
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="org.kde.kdeconnect_tp"
|
package="org.kde.kdeconnect_tp"
|
||||||
android:versionCode="736"
|
android:versionCode="800"
|
||||||
android:versionName="0.7.3.6">
|
android:versionName="0.8">
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="9"
|
<uses-sdk android:minSdkVersion="9"
|
||||||
android:targetSdkVersion="21" />
|
android:targetSdkVersion="21" />
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name="org.kde.kdeconnect.UserInterface.SettingsActivity"
|
android:name="org.kde.kdeconnect.UserInterface.SettingsActivity"
|
||||||
android:label="@string/settings"
|
android:label="@string/device_menu_plugins"
|
||||||
android:parentActivityName="org.kde.kdeconnect.UserInterface.DeviceActivity"
|
android:parentActivityName="org.kde.kdeconnect.UserInterface.DeviceActivity"
|
||||||
>
|
>
|
||||||
<meta-data android:name="android.support.PARENT_ACTIVITY"
|
<meta-data android:name="android.support.PARENT_ACTIVITY"
|
||||||
@@ -101,7 +101,7 @@
|
|||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name="org.kde.kdeconnect.UserInterface.PluginSettingsActivity"
|
android:name="org.kde.kdeconnect.UserInterface.PluginSettingsActivity"
|
||||||
android:label="@string/mpris_settings"
|
android:label="@string/device_menu_plugins"
|
||||||
android:parentActivityName="org.kde.kdeconnect.UserInterface.SettingsActivity"
|
android:parentActivityName="org.kde.kdeconnect.UserInterface.SettingsActivity"
|
||||||
>
|
>
|
||||||
<meta-data android:name="android.support.PARENT_ACTIVITY"
|
<meta-data android:name="android.support.PARENT_ACTIVITY"
|
||||||
@@ -160,7 +160,7 @@
|
|||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:theme="@style/Theme.AppCompat"
|
android:theme="@style/Theme.AppCompat"
|
||||||
android:name="org.kde.kdeconnect.UserInterface.ShareToReceiver"
|
android:name="org.kde.kdeconnect.Plugins.SharePlugin.ShareActivity"
|
||||||
android:label="KDE Connect"
|
android:label="KDE Connect"
|
||||||
>
|
>
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
@@ -182,6 +182,15 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name="org.kde.kdeconnect.Plugins.NotificationsPlugin.NotificationFilterActivity"
|
||||||
|
android:label="@string/title_activity_notification_filter"
|
||||||
|
android:theme="@style/Theme.AppCompat"
|
||||||
|
android:parentActivityName="org.kde.kdeconnect.UserInterface.PluginSettingsActivity" >
|
||||||
|
<meta-data
|
||||||
|
android:name="android.support.PARENT_ACTIVITY"
|
||||||
|
android:value="org.kde.kdeconnect.UserInterface.PluginSettingsActivity" />
|
||||||
|
</activity>
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
|
@@ -15,7 +15,7 @@ function export_pot_file # First parameter will be the path of the pot file we h
|
|||||||
function import_po_files # First parameter will be a path that will contain several .po files with the format LANG.po
|
function import_po_files # First parameter will be a path that will contain several .po files with the format LANG.po
|
||||||
{
|
{
|
||||||
podir=$1
|
podir=$1
|
||||||
a2po import --android res/ --gettext $podir
|
a2po import --ignore-fuzzy --android res/ --gettext $podir
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -3,7 +3,7 @@ buildscript {
|
|||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:0.12.+' //Update to 14 when Studio 0.9 gets to beta
|
classpath 'com.android.tools.build:gradle:1.0.+'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11,7 +11,7 @@ apply plugin: 'com.android.application'
|
|||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 21
|
compileSdkVersion 21
|
||||||
buildToolsVersion '21.1.1'
|
buildToolsVersion '21.1.2'
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion 9
|
minSdkVersion 9
|
||||||
targetSdkVersion 21
|
targetSdkVersion 21
|
||||||
@@ -34,6 +34,7 @@ android {
|
|||||||
}
|
}
|
||||||
lintOptions {
|
lintOptions {
|
||||||
abortOnError false
|
abortOnError false
|
||||||
|
checkReleaseBuilds false
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
}
|
}
|
||||||
@@ -43,8 +44,8 @@ dependencies {
|
|||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
compile 'com.android.support:support-v4:21.0.2'
|
compile 'com.android.support:support-v4:21.0.3'
|
||||||
compile 'com.android.support:appcompat-v7:21.0.2'
|
compile 'com.android.support:appcompat-v7:21.0.3'
|
||||||
compile 'org.apache.mina:mina-core:2.0.9'
|
compile 'org.apache.mina:mina-core:2.0.9'
|
||||||
compile 'org.apache.sshd:sshd-core:0.8.0'
|
compile 'org.apache.sshd:sshd-core:0.8.0'
|
||||||
compile 'org.bouncycastle:bcprov-jdk16:1.46'
|
compile 'org.bouncycastle:bcprov-jdk16:1.46'
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:keepScreenOn="true"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
@@ -19,9 +20,6 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
class="org.kde.kdeconnect.Plugins.MousePadPlugin.KeyListenerView"
|
class="org.kde.kdeconnect.Plugins.MousePadPlugin.KeyListenerView"
|
||||||
android:id="@+id/keyListener"
|
android:id="@+id/keyListener" />
|
||||||
android:layout_alignParentTop="true"
|
|
||||||
android:layout_centerHorizontal="true"
|
|
||||||
android:layout_marginTop="58dp" />
|
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
22
res/layout/activity_notification_filter.xml
Normal file
22
res/layout/activity_notification_filter.xml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||||
|
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||||
|
android:paddingTop="@dimen/activity_vertical_margin"
|
||||||
|
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||||
|
tools:context="org.kde.kdeconnect.Plugins.NotificationsPlugin.NotificationFilterActivity">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:text="@string/filter_apps_info"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingBottom="5dp"
|
||||||
|
android:id="@+id/tFilter"/>
|
||||||
|
|
||||||
|
<ListView
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:id="@+id/lvFilterApps"
|
||||||
|
android:layout_below="@id/tFilter"/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
<ListView
|
<ListView
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="0dp"
|
||||||
android:id="@android:id/list"
|
android:id="@android:id/list"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
/>
|
/>
|
||||||
@@ -23,6 +23,7 @@
|
|||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:imeOptions="actionSend"
|
android:imeOptions="actionSend"
|
||||||
|
android:hint="@string/add_host_hint"
|
||||||
android:id="@+id/ip_edittext"/>
|
android:id="@+id/ip_edittext"/>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
|
@@ -12,6 +12,14 @@
|
|||||||
android:paddingRight="60dip"
|
android:paddingRight="60dip"
|
||||||
android:paddingBottom="5dip">
|
android:paddingBottom="5dip">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
|
android:text="@string/no_players_connected"
|
||||||
|
android:id="@+id/no_players"
|
||||||
|
android:layout_gravity="center_horizontal" />
|
||||||
|
|
||||||
<Spinner
|
<Spinner
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@@ -88,12 +96,49 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/progress_slider">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
|
android:id="@+id/progress_textview"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="8dip"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:text="00:00" />
|
||||||
|
|
||||||
|
<SeekBar
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/positionSeek"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:layout_gravity="center" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
|
android:id="@+id/time_textview"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="8dip"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:text="00:00" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="70dip"
|
android:layout_height="wrap_content"
|
||||||
android:id="@+id/volume_layout"
|
android:id="@+id/volume_layout"
|
||||||
android:layout_gravity="center">
|
android:layout_gravity="center"
|
||||||
|
android:layout_marginTop="8dip">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="30dip"
|
android:layout_width="30dip"
|
||||||
|
109
res/values-ar/strings.xml
Normal file
109
res/values-ar/strings.xml
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<resources>
|
||||||
|
<string name="pref_plugin_telephony">مُخطِر المهاتفة</string>
|
||||||
|
<string name="pref_plugin_telephony_desc">أرسل إخطارات لرسائل SMS والمكالمات</string>
|
||||||
|
<string name="pref_plugin_battery">تقرير البطّاريّة</string>
|
||||||
|
<string name="pref_plugin_battery_desc">بلّغ عن حالة البطّاريّة دوريًّا</string>
|
||||||
|
<string name="pref_plugin_sftp">اكشف نظام الملفّات</string>
|
||||||
|
<string name="pref_plugin_sftp_desc">تسمح بتصفّح نظام ملفّات الهاتف عن بعد</string>
|
||||||
|
<string name="pref_plugin_clipboard">مزامنة الحافظة</string>
|
||||||
|
<string name="pref_plugin_clipboard_desc">شارك محتوى الحافظة</string>
|
||||||
|
<string name="pref_plugin_mousepad">الدَّخل البعيد</string>
|
||||||
|
<string name="pref_plugin_mousepad_desc">استخدم هاتفك كفأرة ولوحة مفاتيح</string>
|
||||||
|
<string name="pref_plugin_mpris">تحكّمات الوسائط المتعدّدة البعيدة</string>
|
||||||
|
<string name="pref_plugin_mpris_desc">تحكّم بالصّوت والصّورة من هاتفك</string>
|
||||||
|
<string name="pref_plugin_ping">وخزة</string>
|
||||||
|
<string name="pref_plugin_ping_desc">أرسل واستقبل وخزات</string>
|
||||||
|
<string name="pref_plugin_notifications">مزامنة الإخطارات</string>
|
||||||
|
<string name="pref_plugin_notifications_desc">انفذ إلى إخطاراتك من أجهزة أخرى</string>
|
||||||
|
<string name="pref_plugin_sharereceiver">شارك المستقبل</string>
|
||||||
|
<string name="pref_plugin_sharereceiver_desc">احفظ الملفّات الواردة إلى تخزين الهاتف</string>
|
||||||
|
<string name="plugin_not_available">هذه الميزة غير متوفّرة في إصدار أندرويد لديك</string>
|
||||||
|
<string name="device_list_empty">لا أجهزة</string>
|
||||||
|
<string name="ok">حسنًا</string>
|
||||||
|
<string name="cancel">ألغِ</string>
|
||||||
|
<string name="open_settings">افتح الإعدادات</string>
|
||||||
|
<string name="no_permissions">عليك إعطاء التّطبيق صلاحيّات للنّفاذ إلى الإخطارات</string>
|
||||||
|
<string name="send_ping">أرسل وخزة</string>
|
||||||
|
<string name="open_mpris_controls">افتح التّحكّم البعيد</string>
|
||||||
|
<string name="open_mousepad">افتح تحكّم لوحة اللمس</string>
|
||||||
|
<string-array name="mousepad_tap_entries">
|
||||||
|
<item/>
|
||||||
|
<item/>
|
||||||
|
<item>Nothing</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="category_connected_devices">الأجهزة المقترن بها</string>
|
||||||
|
<string name="category_not_paired_devices">الأجهزة المتوفّرة</string>
|
||||||
|
<string name="category_remembered_devices">الأجهزة المتذكَّرة</string>
|
||||||
|
<string name="plugins_failed_to_load">فشل تحميل الملحقات (المس لمعلومات اكثر):</string>
|
||||||
|
<string name="device_menu_unpair">أزل الاقتران</string>
|
||||||
|
<string name="device_not_reachable">الجهاز المقترن غير قابل الوصول</string>
|
||||||
|
<string name="unknown_device">جهاز مجهول</string>
|
||||||
|
<string name="error_not_reachable">الجهاز غير قابل الوصول</string>
|
||||||
|
<string name="error_already_requested">طُلب الاقتران بالفعل</string>
|
||||||
|
<string name="error_already_paired">الجهاز مقترن بالفعل</string>
|
||||||
|
<string name="error_could_not_send_package">تعذّر إرسال الحزمة</string>
|
||||||
|
<string name="error_timed_out">انتهت المهلة</string>
|
||||||
|
<string name="error_canceled_by_user">ألغاه المستخدم</string>
|
||||||
|
<string name="error_canceled_by_other_peer">ألغاه ندّ آخر</string>
|
||||||
|
<string name="error_invalid_key">استُقبل مفتاح غير صالح</string>
|
||||||
|
<string name="pair_requested">طُلب الاقتران</string>
|
||||||
|
<string name="pairing_request_from">طلب اقتران من %1s</string>
|
||||||
|
<string name="received_url_title">استُلمت وصلة من %1s</string>
|
||||||
|
<string name="received_url_text">المس لفتح \'%1s\'</string>
|
||||||
|
<string name="incoming_file_title">ملفّ وارد من %1s</string>
|
||||||
|
<string name="incoming_file_text">%1s</string>
|
||||||
|
<string name="received_file_title">استُلم ملفّ من %1s</string>
|
||||||
|
<string name="received_file_text">المس لفتح \'%1s\'</string>
|
||||||
|
<string name="tap_to_answer">المس للإجابة</string>
|
||||||
|
<string name="reconnect">أعد الاتّصال</string>
|
||||||
|
<string name="right_click">أرسل نقرة باليمين</string>
|
||||||
|
<string name="middle_click">أرسل نقرة بالوسط</string>
|
||||||
|
<string name="show_keyboard">أظهر لوحة المفاتيح</string>
|
||||||
|
<string name="device_not_paired">الجهاز غير مقترن</string>
|
||||||
|
<string name="request_pairing">اطلب الاقتران</string>
|
||||||
|
<string name="pairing_accept">اقبل</string>
|
||||||
|
<string name="pairing_reject">ارفض</string>
|
||||||
|
<string name="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>
|
||||||
|
<string name="mpris_ff">تقدّم سريع</string>
|
||||||
|
<string name="mpris_next">التّالي</string>
|
||||||
|
<string name="mpris_volume">المستوى</string>
|
||||||
|
<string name="mpris_settings">إعدادات الوسائط المتعدّدة</string>
|
||||||
|
<string-array name="mpris_time_entries">
|
||||||
|
<item>10 ثوان</item>
|
||||||
|
<item>20 ثانية</item>
|
||||||
|
<item>30 ثانية</item>
|
||||||
|
<item>دقيقة واحدة</item>
|
||||||
|
<item>دقيقتان</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>
|
||||||
|
<string name="plugin_settings">إعدادات</string>
|
||||||
|
<string name="plugin_settings_with_name">إعدادات %s</string>
|
||||||
|
<string name="device_name">اسم الجهاز</string>
|
||||||
|
<string name="device_name_preference_summary">%s</string>
|
||||||
|
<string name="invalid_device_name">اسم جهاز غير صالح</string>
|
||||||
|
<string name="shareplugin_text_saved">استُقبل نصّ، حُفظ إلى الحافظة</string>
|
||||||
|
<string name="custom_devices_settings">قائمة أجهزة مخصّصة</string>
|
||||||
|
<string name="custom_device_list">أضف أجهزة بميفاق الإنترنت مإ</string>
|
||||||
|
<string name="share_notification_preference">إخطارات مزعجة</string>
|
||||||
|
<string name="share_notification_preference_summary">اهتزّ وشغّل صوتًا عند استقبال ملفّ</string>
|
||||||
|
<string name="sftp_internal_storage">التّخزين الدّاخليّ</string>
|
||||||
|
<string name="sftp_all_files">كلّ الملفّات</string>
|
||||||
|
<string name="sftp_sdcard_num">بطاقة SD %d</string>
|
||||||
|
<string name="sftp_sdcard">بطاقة SD</string>
|
||||||
|
<string name="sftp_readonly">(للقراءة فقط)</string>
|
||||||
|
<string name="sftp_camera">صور الكاميرا</string>
|
||||||
|
<string name="add_host">أضف مضيفًا/مإ</string>
|
||||||
|
<string name="no_players_connected">لم يُعثر على مشغّلات</string>
|
||||||
|
<string name="custom_dev_list_help">استخدم هذا الخيار فقط إن لم يُكتَشف جهازك آليًّا. أدخِل عنوان مإ أو اسم المضيف أدناه والمس الزرّ لإضافته إلى القائمة. المس عنصرًا موجودًا لإزالته من القائمة.</string>
|
||||||
|
<string name="mpris_player_on_device">%1$s على %2$s</string>
|
||||||
|
</resources>
|
@@ -8,7 +8,6 @@
|
|||||||
<string name="pref_plugin_sftp_desc">Позволява отдалечен достъп до файловата система на телефона</string>
|
<string name="pref_plugin_sftp_desc">Позволява отдалечен достъп до файловата система на телефона</string>
|
||||||
<string name="pref_plugin_clipboard">Синхронизиране на буфера</string>
|
<string name="pref_plugin_clipboard">Синхронизиране на буфера</string>
|
||||||
<string name="pref_plugin_clipboard_desc">Споделяне съдържанието на буфера</string>
|
<string name="pref_plugin_clipboard_desc">Споделяне съдържанието на буфера</string>
|
||||||
<string name="pref_plugin_mousepad">Отдалечен контрол</string>
|
|
||||||
<string name="pref_plugin_mpris">Отдалечен мултимедиен контрол</string>
|
<string name="pref_plugin_mpris">Отдалечен мултимедиен контрол</string>
|
||||||
<string name="pref_plugin_mpris_desc">Управление на звук/видео от телефона</string>
|
<string name="pref_plugin_mpris_desc">Управление на звук/видео от телефона</string>
|
||||||
<string name="pref_plugin_ping">Пинг</string>
|
<string name="pref_plugin_ping">Пинг</string>
|
||||||
@@ -23,14 +22,15 @@
|
|||||||
<string name="no_permissions">Трябва да осигурите права за достъп до уведомленията</string>
|
<string name="no_permissions">Трябва да осигурите права за достъп до уведомленията</string>
|
||||||
<string name="send_ping">Изпращане на пинг</string>
|
<string name="send_ping">Изпращане на пинг</string>
|
||||||
<string name="open_mpris_controls">Отваряне на отдалечен контрол</string>
|
<string name="open_mpris_controls">Отваряне на отдалечен контрол</string>
|
||||||
<string name="open_mousepad">Отваряне на отдалечен контрол</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
|
<item>Right click</item>
|
||||||
|
<item>Middle click</item>
|
||||||
|
<item>Nothing</item>
|
||||||
|
</string-array>
|
||||||
<string name="category_connected_devices">Свързани устройства</string>
|
<string name="category_connected_devices">Свързани устройства</string>
|
||||||
<string name="category_not_paired_devices">Несдвоени устройства</string>
|
|
||||||
<string name="category_remembered_devices">Запомнени устройства</string>
|
<string name="category_remembered_devices">Запомнени устройства</string>
|
||||||
<string name="plugins_failed_to_load">Неуспешно зареждане на приставки (докоснете за подробности)</string>
|
<string name="plugins_failed_to_load">Неуспешно зареждане на приставки (докоснете за подробности)</string>
|
||||||
<string name="device_menu_plugins">Изберете приставки</string>
|
|
||||||
<string name="device_menu_unpair">Разкачване</string>
|
<string name="device_menu_unpair">Разкачване</string>
|
||||||
<string name="device_not_reachable">Устройството е недостъпно</string>
|
|
||||||
<string name="unknown_device">Неизвестно устройство</string>
|
<string name="unknown_device">Неизвестно устройство</string>
|
||||||
<string name="error_not_reachable">Устройството е недостъпно</string>
|
<string name="error_not_reachable">Устройството е недостъпно</string>
|
||||||
<string name="error_already_requested">Вече е заявено сдвояване</string>
|
<string name="error_already_requested">Вече е заявено сдвояване</string>
|
||||||
@@ -42,8 +42,6 @@
|
|||||||
<string name="error_invalid_key">Получен е неправилен ключ</string>
|
<string name="error_invalid_key">Получен е неправилен ключ</string>
|
||||||
<string name="pair_requested">Заявено е сдвояване</string>
|
<string name="pair_requested">Заявено е сдвояване</string>
|
||||||
<string name="pairing_request_from">Заявено е сдвояване от %1s</string>
|
<string name="pairing_request_from">Заявено е сдвояване от %1s</string>
|
||||||
<string name="incoming_file_title">Заявено е сдвояване от %1s</string>
|
|
||||||
<string name="incoming_file_text">%s</string>
|
|
||||||
<string name="tap_to_answer">Докоснете за да отговорите</string>
|
<string name="tap_to_answer">Докоснете за да отговорите</string>
|
||||||
<string name="reconnect">Ново свързване</string>
|
<string name="reconnect">Ново свързване</string>
|
||||||
<string name="device_not_paired">Устройството не е сдвоено</string>
|
<string name="device_not_paired">Устройството не е сдвоено</string>
|
||||||
@@ -60,20 +58,6 @@
|
|||||||
<string name="mpris_ff">Превъртане напред</string>
|
<string name="mpris_ff">Превъртане напред</string>
|
||||||
<string name="mpris_next">Следващ</string>
|
<string name="mpris_next">Следващ</string>
|
||||||
<string name="mpris_volume">Сила на звука</string>
|
<string name="mpris_volume">Сила на звука</string>
|
||||||
<string name="mpris_settings">Отдалечен мултимедиен контрол</string>
|
|
||||||
<string name="share_to">Споделяне...</string>
|
|
||||||
<string name="protocol_version_older">Това устройство използва стара версия на протокола</string>
|
|
||||||
<string name="protocol_version_newer">Това устройство използва по-нова версия на протокола</string>
|
|
||||||
<string name="general_settings">Общи настройки</string>
|
|
||||||
<string name="plugin_settings">Общи настройки</string>
|
|
||||||
<string name="plugin_settings_with_name">Отваряне на настройките</string>
|
|
||||||
<string name="device_name">Име на устройството</string>
|
|
||||||
<string name="device_name_preference_summary">%s</string>
|
|
||||||
<string name="invalid_device_name">Невалидно име на устройство</string>
|
|
||||||
<string name="custom_devices_settings">Няма устройства</string>
|
|
||||||
<string name="custom_device_list">Няма устройства</string>
|
|
||||||
<string name="custom_device_list_summary">Няма устройства</string>
|
|
||||||
<string name="share_notification_preference">Синхронизиране на уведомленията</string>
|
|
||||||
<string-array name="mpris_time_entries">
|
<string-array name="mpris_time_entries">
|
||||||
<item>10 seconds</item>
|
<item>10 seconds</item>
|
||||||
<item>20 seconds</item>
|
<item>20 seconds</item>
|
||||||
@@ -81,4 +65,11 @@
|
|||||||
<item>1 minute</item>
|
<item>1 minute</item>
|
||||||
<item>2 minutes</item>
|
<item>2 minutes</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
<string name="share_to">Споделяне...</string>
|
||||||
|
<string name="protocol_version_older">Това устройство използва стара версия на протокола</string>
|
||||||
|
<string name="protocol_version_newer">Това устройство използва по-нова версия на протокола</string>
|
||||||
|
<string name="general_settings">Общи настройки</string>
|
||||||
|
<string name="device_name">Име на устройството</string>
|
||||||
|
<string name="device_name_preference_summary">%s</string>
|
||||||
|
<string name="invalid_device_name">Невалидно име на устройство</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -5,7 +5,11 @@
|
|||||||
<string name="pref_plugin_ping">Ping</string>
|
<string name="pref_plugin_ping">Ping</string>
|
||||||
<string name="pref_plugin_ping_desc">Šalji i primaj ping-ove</string>
|
<string name="pref_plugin_ping_desc">Šalji i primaj ping-ove</string>
|
||||||
<string name="pref_plugin_notifications">Sinhronizovano obavještenje</string>
|
<string name="pref_plugin_notifications">Sinhronizovano obavještenje</string>
|
||||||
<string name="share_notification_preference">Sinhronizovano obavještenje</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
|
<item>Right click</item>
|
||||||
|
<item>Middle click</item>
|
||||||
|
<item>Nothing</item>
|
||||||
|
</string-array>
|
||||||
<string-array name="mpris_time_entries">
|
<string-array name="mpris_time_entries">
|
||||||
<item>10 seconds</item>
|
<item>10 seconds</item>
|
||||||
<item>20 seconds</item>
|
<item>20 seconds</item>
|
||||||
|
@@ -27,16 +27,21 @@
|
|||||||
<string name="send_ping">Envia un ping</string>
|
<string name="send_ping">Envia un ping</string>
|
||||||
<string name="open_mpris_controls">Obre el comandament a distància</string>
|
<string name="open_mpris_controls">Obre el comandament a distància</string>
|
||||||
<string name="open_mousepad">Obre el control pel plafó tàctil</string>
|
<string name="open_mousepad">Obre el control pel plafó tàctil</string>
|
||||||
<string name="mousepad_info">Moveu un dit per la pantalla per a moure el cursor del ratolí</string>
|
<string name="mousepad_info">Moveu un dit per la pantalla per a moure el cursor del ratolí. Toqueu per un clic, i empreu dos/tres dits pels botons dret i mig. Empreu un toc llarg per arrossegar i deixar anar.</string>
|
||||||
<string name="mousepad_double_tap_settings_title">Estableix l\'acció de tocar amb dos dits</string>
|
<string name="mousepad_double_tap_settings_title">Estableix l\'acció de tocar amb dos dits</string>
|
||||||
<string name="mousepad_triple_tap_settings_title">Estableix l\'acció de tocar amb tres dits</string>
|
<string name="mousepad_triple_tap_settings_title">Estableix l\'acció de tocar amb tres dits</string>
|
||||||
<string name="mousepad_right_click">Clic dret</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
<string name="mousepad_middle_click">Clic del mig</string>
|
<item>Clic dret</item>
|
||||||
|
<item>Clic del mig</item>
|
||||||
|
<item>No fer res</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="mousepad_double_default">dret</string>
|
||||||
|
<string name="mousepad_triple_default">mig</string>
|
||||||
<string name="category_connected_devices">Dispositius connectats</string>
|
<string name="category_connected_devices">Dispositius connectats</string>
|
||||||
<string name="category_not_paired_devices">Dispositius sense aparellar</string>
|
<string name="category_not_paired_devices">Dispositius disponibles</string>
|
||||||
<string name="category_remembered_devices">Dispositius recordats</string>
|
<string name="category_remembered_devices">Dispositius recordats</string>
|
||||||
<string name="plugins_failed_to_load">Els connectors han fallat en carregar-los (puntegeu per a més informació):</string>
|
<string name="plugins_failed_to_load">Els connectors han fallat en carregar-los (puntegeu per a més informació):</string>
|
||||||
<string name="device_menu_plugins">Selecció dels connectors</string>
|
<string name="device_menu_plugins">Arranjament del connector</string>
|
||||||
<string name="device_menu_unpair">Desparella</string>
|
<string name="device_menu_unpair">Desparella</string>
|
||||||
<string name="device_not_reachable">No s\'ha pogut accedir al dispositiu parell</string>
|
<string name="device_not_reachable">No s\'ha pogut accedir al dispositiu parell</string>
|
||||||
<string name="unknown_device">Dispositiu desconegut</string>
|
<string name="unknown_device">Dispositiu desconegut</string>
|
||||||
@@ -54,8 +59,14 @@
|
|||||||
<string name="received_url_text">Puntegeu per obrir «%1s»</string>
|
<string name="received_url_text">Puntegeu per obrir «%1s»</string>
|
||||||
<string name="incoming_file_title">Fitxer entrant des de %1s</string>
|
<string name="incoming_file_title">Fitxer entrant des de %1s</string>
|
||||||
<string name="incoming_file_text">%1s</string>
|
<string name="incoming_file_text">%1s</string>
|
||||||
|
<string name="outgoing_file_title">S\'està enviant el fitxer a %1s</string>
|
||||||
|
<string name="outgoing_file_text">%1s</string>
|
||||||
<string name="received_file_title">Fitxer rebut des de %1s</string>
|
<string name="received_file_title">Fitxer rebut des de %1s</string>
|
||||||
<string name="received_file_text">Puntegeu per obrir «%1s»</string>
|
<string name="received_file_text">Puntegeu per obrir «%1s»</string>
|
||||||
|
<string name="sent_file_title">Envia el fitxer a %1s</string>
|
||||||
|
<string name="sent_file_text">%1s</string>
|
||||||
|
<string name="sent_file_failed_title">Ha fallat en enviar el fitxer %1s</string>
|
||||||
|
<string name="sent_file_failed_text">%1s</string>
|
||||||
<string name="tap_to_answer">Puntegeu per a respondre</string>
|
<string name="tap_to_answer">Puntegeu per a respondre</string>
|
||||||
<string name="reconnect">Reconnecta</string>
|
<string name="reconnect">Reconnecta</string>
|
||||||
<string name="right_click">Envia un clic del botó dret</string>
|
<string name="right_click">Envia un clic del botó dret</string>
|
||||||
@@ -76,31 +87,8 @@
|
|||||||
<string name="mpris_next">Següent</string>
|
<string name="mpris_next">Següent</string>
|
||||||
<string name="mpris_volume">Volum</string>
|
<string name="mpris_volume">Volum</string>
|
||||||
<string name="mpris_settings">Arranjament multimèdia</string>
|
<string name="mpris_settings">Arranjament multimèdia</string>
|
||||||
<string name="mpris_time_settings_title">Interval de temps</string>
|
<string name="mpris_time_settings_title">Botons per avançar o rebobinar</string>
|
||||||
<string name="mpris_time_settings_summary">Ajusta el temps per avançar o rebobinar un fitxer multimèdia.</string>
|
<string name="mpris_time_settings_summary">Ajusta el temps per avançar o rebobinar quan es toca.</string>
|
||||||
<string name="share_to">Comparteix amb...</string>
|
|
||||||
<string name="protocol_version_older">Aquest dispositiu usa una versió antiga del protocol</string>
|
|
||||||
<string name="protocol_version_newer">Aquest dispositiu usa una versió nova del protocol</string>
|
|
||||||
<string name="general_settings">Arranjament general</string>
|
|
||||||
<string name="plugin_settings">Arranjament</string>
|
|
||||||
<string name="plugin_settings_with_name">Ajustaments de %s</string>
|
|
||||||
<string name="device_name">Nom del dispositiu</string>
|
|
||||||
<string name="device_name_preference_summary">%s</string>
|
|
||||||
<string name="invalid_device_name">El nom del dispositiu no és vàlid</string>
|
|
||||||
<string name="shareplugin_text_saved">S\'ha rebut text i s\'ha desat al porta-retalls</string>
|
|
||||||
<string name="custom_devices_settings">Llista personalitzada de dispositius</string>
|
|
||||||
<string name="custom_device_list">Llista personalitzada de dispositius</string>
|
|
||||||
<string name="custom_device_list_summary">Llista personalitzada de dispositius</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="sftp_internal_storage">Emmagatzematge intern</string>
|
|
||||||
<string name="sftp_all_files">Tots els fitxers</string>
|
|
||||||
<string name="sftp_sdcard_num">Targeta SD %d</string>
|
|
||||||
<string name="sftp_sdcard">Targeta SD</string>
|
|
||||||
<string name="sftp_readonly">(només de lectura)</string>
|
|
||||||
<string name="sftp_camera">Imatges de la càmera</string>
|
|
||||||
<string name="add_host">Afegeix una màquina/IP</string>
|
|
||||||
<string name="custom_dev_list_help">Empreu aquesta opció només si el dispositiu no és detectat automàticament. Introduïu a sota l\'adreça IP o nom de la màquina i premeu el botó per afegir-lo a la llista. Seleccioneu un element existent per eliminar-lo de la llista.</string>
|
|
||||||
<string-array name="mpris_time_entries">
|
<string-array name="mpris_time_entries">
|
||||||
<item>10 segons</item>
|
<item>10 segons</item>
|
||||||
<item>20 segons</item>
|
<item>20 segons</item>
|
||||||
@@ -108,4 +96,31 @@
|
|||||||
<item>1 minut</item>
|
<item>1 minut</item>
|
||||||
<item>2 minuts</item>
|
<item>2 minuts</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
<string name="share_to">Comparteix amb...</string>
|
||||||
|
<string name="protocol_version_older">Aquest dispositiu usa una versió antiga del protocol</string>
|
||||||
|
<string name="protocol_version_newer">Aquest dispositiu usa una versió nova del protocol</string>
|
||||||
|
<string name="general_settings">Arranjament general</string>
|
||||||
|
<string name="plugin_settings">Arranjament</string>
|
||||||
|
<string name="plugin_settings_with_name">Ajustaments del %s</string>
|
||||||
|
<string name="device_name">Nom del dispositiu</string>
|
||||||
|
<string name="device_name_preference_summary">%s</string>
|
||||||
|
<string name="invalid_device_name">El nom del dispositiu no és vàlid</string>
|
||||||
|
<string name="shareplugin_text_saved">S\'ha rebut text i s\'ha desat al porta-retalls</string>
|
||||||
|
<string name="custom_devices_settings">Llista personalitzada de dispositius</string>
|
||||||
|
<string name="custom_device_list">Afegeix dispositius per la IP</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="title_activity_notification_filter">Filtre per a les notificacions</string>
|
||||||
|
<string name="filter_apps_info">Les notificacions se sincronitzaran per a les aplicacions seleccionades.</string>
|
||||||
|
<string name="sftp_internal_storage">Emmagatzematge intern</string>
|
||||||
|
<string name="sftp_all_files">Tots els fitxers</string>
|
||||||
|
<string name="sftp_sdcard_num">Targeta SD %d</string>
|
||||||
|
<string name="sftp_sdcard">Targeta SD</string>
|
||||||
|
<string name="sftp_readonly">(només de lectura)</string>
|
||||||
|
<string name="sftp_camera">Imatges de la càmera</string>
|
||||||
|
<string name="add_host">Afegeix una màquina/IP</string>
|
||||||
|
<string name="add_host_hint">Nom de la màquina o IP</string>
|
||||||
|
<string name="no_players_connected">No s\'ha trobat cap reproductor</string>
|
||||||
|
<string name="custom_dev_list_help">Empreu aquesta opció només si el dispositiu no és detectat automàticament. Introduïu a sota l\'adreça IP o nom de la màquina i premeu el botó per afegir-lo a la llista. Seleccioneu un element existent per eliminar-lo de la llista.</string>
|
||||||
|
<string name="mpris_player_on_device">%1$s sobre el %2$s</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -27,16 +27,21 @@
|
|||||||
<string name="send_ping">Poslat ping</string>
|
<string name="send_ping">Poslat ping</string>
|
||||||
<string name="open_mpris_controls">Otevřít vzdálené ovládání</string>
|
<string name="open_mpris_controls">Otevřít vzdálené ovládání</string>
|
||||||
<string name="open_mousepad">Otevřít dotykové ovládání</string>
|
<string name="open_mousepad">Otevřít dotykové ovládání</string>
|
||||||
<string name="mousepad_info">Pohybujte prstem po monitoru pro pohybování kurzorem myši</string>
|
<string name="mousepad_info">Pohybujte prstem po obrazovce pro pohybování kurzorem myši. Ťukněte pro kliknutí a použijte dva/tři prsty jako pravé a prostřední tlačítko. Pro přetažení dlouze podržte.</string>
|
||||||
<string name="mousepad_double_tap_settings_title">Nastavit činnost pro ťuknutí dvěma prsty</string>
|
<string name="mousepad_double_tap_settings_title">Nastavit činnost pro ťuknutí dvěma prsty</string>
|
||||||
<string name="mousepad_triple_tap_settings_title">Nastavit činnost pro ťuknutí třemi prsty</string>
|
<string name="mousepad_triple_tap_settings_title">Nastavit činnost pro ťuknutí třemi prsty</string>
|
||||||
<string name="mousepad_right_click">Kliknutí pravým tlačítkem myši</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
<string name="mousepad_middle_click">Kliknutí prostředním tlačítkem myši</string>
|
<item>Kliknutí pravým tlačítkem myši</item>
|
||||||
|
<item>Kliknutí prostředním tlačítkem myši</item>
|
||||||
|
<item>Nic</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="mousepad_double_default">pravé</string>
|
||||||
|
<string name="mousepad_triple_default">prostřední</string>
|
||||||
<string name="category_connected_devices">Připojená zařízení</string>
|
<string name="category_connected_devices">Připojená zařízení</string>
|
||||||
<string name="category_not_paired_devices">Nespárovaná zařízení</string>
|
<string name="category_not_paired_devices">Dostupná zařízení</string>
|
||||||
<string name="category_remembered_devices">Zapamatovaná zařízení</string>
|
<string name="category_remembered_devices">Zapamatovaná zařízení</string>
|
||||||
<string name="plugins_failed_to_load">Moduly nebyly načteny (ťukněte pro více informací):</string>
|
<string name="plugins_failed_to_load">Moduly nebyly načteny (ťukněte pro více informací):</string>
|
||||||
<string name="device_menu_plugins">Vyberte moduly</string>
|
<string name="device_menu_plugins">Nastavení modulů</string>
|
||||||
<string name="device_menu_unpair">Zrušit párování</string>
|
<string name="device_menu_unpair">Zrušit párování</string>
|
||||||
<string name="device_not_reachable">Spárované zařízení je nedostupné</string>
|
<string name="device_not_reachable">Spárované zařízení je nedostupné</string>
|
||||||
<string name="unknown_device">Neznámé zařízení</string>
|
<string name="unknown_device">Neznámé zařízení</string>
|
||||||
@@ -54,8 +59,14 @@
|
|||||||
<string name="received_url_text">Ťukněte pro otevření \'%1s\'</string>
|
<string name="received_url_text">Ťukněte pro otevření \'%1s\'</string>
|
||||||
<string name="incoming_file_title">Příchozí soubor od %1s</string>
|
<string name="incoming_file_title">Příchozí soubor od %1s</string>
|
||||||
<string name="incoming_file_text">%1s</string>
|
<string name="incoming_file_text">%1s</string>
|
||||||
|
<string name="outgoing_file_title">Odesílám soubor do %1s</string>
|
||||||
|
<string name="outgoing_file_text">%1s</string>
|
||||||
<string name="received_file_title">Přijat soubor od %1s</string>
|
<string name="received_file_title">Přijat soubor od %1s</string>
|
||||||
<string name="received_file_text">Ťukněte pro otevření \'%1s\'</string>
|
<string name="received_file_text">Ťukněte pro otevření \'%1s\'</string>
|
||||||
|
<string name="sent_file_title">Soubor byl odeslán do %1s</string>
|
||||||
|
<string name="sent_file_text">%1s</string>
|
||||||
|
<string name="sent_file_failed_title">Nelze odeslat soubor %1s</string>
|
||||||
|
<string name="sent_file_failed_text">%1s</string>
|
||||||
<string name="tap_to_answer">Ťukněte pro odpovězení</string>
|
<string name="tap_to_answer">Ťukněte pro odpovězení</string>
|
||||||
<string name="reconnect">Znovu připojit</string>
|
<string name="reconnect">Znovu připojit</string>
|
||||||
<string name="right_click">Poslat kliknutí pravým tlačítkem</string>
|
<string name="right_click">Poslat kliknutí pravým tlačítkem</string>
|
||||||
@@ -76,8 +87,15 @@
|
|||||||
<string name="mpris_next">Následující</string>
|
<string name="mpris_next">Následující</string>
|
||||||
<string name="mpris_volume">Hlasitost</string>
|
<string name="mpris_volume">Hlasitost</string>
|
||||||
<string name="mpris_settings">Nastavení multimédií</string>
|
<string name="mpris_settings">Nastavení multimédií</string>
|
||||||
<string name="mpris_time_settings_title">Časový interval</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 multimediálním souborem vpřed a zpět.</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>
|
||||||
|
<item>30 sekund</item>
|
||||||
|
<item>1 minuta</item>
|
||||||
|
<item>2 minuty</item>
|
||||||
|
</string-array>
|
||||||
<string name="share_to">Sdílet s...</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_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="protocol_version_newer">Toto zařízení používá novější verzi protokolu</string>
|
||||||
@@ -89,10 +107,11 @@
|
|||||||
<string name="invalid_device_name">Neplatný název zařízení</string>
|
<string name="invalid_device_name">Neplatný název zařízení</string>
|
||||||
<string name="shareplugin_text_saved">Přijatý text byl uložen do schránky</string>
|
<string name="shareplugin_text_saved">Přijatý text byl uložen do schránky</string>
|
||||||
<string name="custom_devices_settings">Seznam vlastních zařízení</string>
|
<string name="custom_devices_settings">Seznam vlastních zařízení</string>
|
||||||
<string name="custom_device_list">Seznam vlastních zařízení</string>
|
<string name="custom_device_list">Přidat zařízení podle IP</string>
|
||||||
<string name="custom_device_list_summary">Seznam vlastních zařízení</string>
|
|
||||||
<string name="share_notification_preference">Hlasitá upozornění</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_notification_preference_summary">Vibrovat a přehrát melodii při přijímání souboru</string>
|
||||||
|
<string name="title_activity_notification_filter">Filtr upozornění</string>
|
||||||
|
<string name="filter_apps_info">Upozorňování mezi vybranými aplikacemi bude synchronizováno.</string>
|
||||||
<string name="sftp_internal_storage">Interní úložiště</string>
|
<string name="sftp_internal_storage">Interní úložiště</string>
|
||||||
<string name="sftp_all_files">Všechny soubory</string>
|
<string name="sftp_all_files">Všechny soubory</string>
|
||||||
<string name="sftp_sdcard_num">SD karta %d</string>
|
<string name="sftp_sdcard_num">SD karta %d</string>
|
||||||
@@ -100,12 +119,8 @@
|
|||||||
<string name="sftp_readonly">(pouze ke čtení)</string>
|
<string name="sftp_readonly">(pouze ke čtení)</string>
|
||||||
<string name="sftp_camera">Obrázky z fotoaparátu</string>
|
<string name="sftp_camera">Obrázky z fotoaparátu</string>
|
||||||
<string name="add_host">Přidat stroj/IP</string>
|
<string name="add_host">Přidat stroj/IP</string>
|
||||||
|
<string name="add_host_hint">Název hostitele nebo IP</string>
|
||||||
|
<string name="no_players_connected">Přehrávač nenalezen</string>
|
||||||
<string name="custom_dev_list_help">Použijte tuto možnost pouze pokud není vaše zařízení automaticky detekováno. Zadejte níže IP adresu a název hostitele a stiskněte tlačítko pro přidání do seznamu. Stiskněte existující položku pro odstranění ze seznamu.</string>
|
<string name="custom_dev_list_help">Použijte tuto možnost pouze pokud není vaše zařízení automaticky detekováno. Zadejte níže IP adresu a název hostitele a stiskněte tlačítko pro přidání do seznamu. Stiskněte existující položku pro odstranění ze seznamu.</string>
|
||||||
<string-array name="mpris_time_entries">
|
<string name="mpris_player_on_device">%1$s na %2$s</string>
|
||||||
<item>10 sekund</item>
|
|
||||||
<item>20 sekund</item>
|
|
||||||
<item>30 sekund</item>
|
|
||||||
<item>1 minuta</item>
|
|
||||||
<item>2 minuty</item>
|
|
||||||
</string-array>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -8,7 +8,8 @@
|
|||||||
<string name="pref_plugin_sftp_desc">Muliggør at gennemsøge telefonens filsystem eksternt</string>
|
<string name="pref_plugin_sftp_desc">Muliggør at gennemsøge telefonens filsystem eksternt</string>
|
||||||
<string name="pref_plugin_clipboard">Synk. af udklipsholder</string>
|
<string name="pref_plugin_clipboard">Synk. af udklipsholder</string>
|
||||||
<string name="pref_plugin_clipboard_desc">Del indholdet af udklipsholderen</string>
|
<string name="pref_plugin_clipboard_desc">Del indholdet af udklipsholderen</string>
|
||||||
<string name="pref_plugin_mousepad">Fjernbetjening</string>
|
<string name="pref_plugin_mousepad">Eksternt input</string>
|
||||||
|
<string name="pref_plugin_mousepad_desc">Brug din telefon som mus og tastatur</string>
|
||||||
<string name="pref_plugin_mpris">Fjernbetjening af multimedie</string>
|
<string name="pref_plugin_mpris">Fjernbetjening af multimedie</string>
|
||||||
<string name="pref_plugin_mpris_desc">Styr lyd og video fra din telefon</string>
|
<string name="pref_plugin_mpris_desc">Styr lyd og video fra din telefon</string>
|
||||||
<string name="pref_plugin_ping">Ping</string>
|
<string name="pref_plugin_ping">Ping</string>
|
||||||
@@ -26,14 +27,21 @@
|
|||||||
<string name="send_ping">Send ping</string>
|
<string name="send_ping">Send ping</string>
|
||||||
<string name="open_mpris_controls">Åbn fjernbetjening</string>
|
<string name="open_mpris_controls">Åbn fjernbetjening</string>
|
||||||
<string name="open_mousepad">Åbn touchpad-kontrol</string>
|
<string name="open_mousepad">Åbn touchpad-kontrol</string>
|
||||||
<string name="mousepad_info">Bevæg en finger på skærmen for at flytte musemarkøren</string>
|
<string name="mousepad_info">Bevæg en finger på skærmen for at flytte musemarkøren. Tap for at klikke og brug to/tre-fingre for højre og midterste museknap. Brug et langt tryk til at trække og slippe.</string>
|
||||||
<string name="mousepad_right_click">Send højreklik</string>
|
<string name="mousepad_double_tap_settings_title">Angiv handling for tap med to fingre</string>
|
||||||
<string name="mousepad_middle_click">Send midterklik</string>
|
<string name="mousepad_triple_tap_settings_title">Angiv handling for tap med tre fingre</string>
|
||||||
|
<string-array name="mousepad_tap_entries">
|
||||||
|
<item>Højreklik</item>
|
||||||
|
<item>Midterklik</item>
|
||||||
|
<item>Intet</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="mousepad_double_default">højre</string>
|
||||||
|
<string name="mousepad_triple_default">midter</string>
|
||||||
<string name="category_connected_devices">Forbundne enheder</string>
|
<string name="category_connected_devices">Forbundne enheder</string>
|
||||||
<string name="category_not_paired_devices">Ikke parrede enheder</string>
|
<string name="category_not_paired_devices">Tilgængelig enheder</string>
|
||||||
<string name="category_remembered_devices">Huskede enheder</string>
|
<string name="category_remembered_devices">Huskede enheder</string>
|
||||||
<string name="plugins_failed_to_load">Plugins kunne ikke indlæses (tap for mere info):</string>
|
<string name="plugins_failed_to_load">Plugins kunne ikke indlæses (tap for mere info):</string>
|
||||||
<string name="device_menu_plugins">Vælg plugins</string>
|
<string name="device_menu_plugins">Plugin-indstillinger</string>
|
||||||
<string name="device_menu_unpair">Fjern parring</string>
|
<string name="device_menu_unpair">Fjern parring</string>
|
||||||
<string name="device_not_reachable">Den parrede enhed kan ikke tilgås</string>
|
<string name="device_not_reachable">Den parrede enhed kan ikke tilgås</string>
|
||||||
<string name="unknown_device">Ukendt enhed</string>
|
<string name="unknown_device">Ukendt enhed</string>
|
||||||
@@ -51,8 +59,14 @@
|
|||||||
<string name="received_url_text">Tap for at åbne \"%1s\"</string>
|
<string name="received_url_text">Tap for at åbne \"%1s\"</string>
|
||||||
<string name="incoming_file_title">Indkommende fil fra %1s</string>
|
<string name="incoming_file_title">Indkommende fil fra %1s</string>
|
||||||
<string name="incoming_file_text">%1s</string>
|
<string name="incoming_file_text">%1s</string>
|
||||||
|
<string name="outgoing_file_title">Sender fil til %1s</string>
|
||||||
|
<string name="outgoing_file_text">%1s</string>
|
||||||
<string name="received_file_title">Modtog fil fra %1s</string>
|
<string name="received_file_title">Modtog fil fra %1s</string>
|
||||||
<string name="received_file_text">Tap for at åbne \"%1s\"</string>
|
<string name="received_file_text">Tap for at åbne \"%1s\"</string>
|
||||||
|
<string name="sent_file_title">Fil sendt til %1s</string>
|
||||||
|
<string name="sent_file_text">%1s</string>
|
||||||
|
<string name="sent_file_failed_title">Kunne ikke sende filen %1s</string>
|
||||||
|
<string name="sent_file_failed_text">%1s</string>
|
||||||
<string name="tap_to_answer">Tap for at svare</string>
|
<string name="tap_to_answer">Tap for at svare</string>
|
||||||
<string name="reconnect">Forbind igen</string>
|
<string name="reconnect">Forbind igen</string>
|
||||||
<string name="right_click">Send højreklik</string>
|
<string name="right_click">Send højreklik</string>
|
||||||
@@ -72,26 +86,40 @@
|
|||||||
<string name="mpris_ff">Spol frem</string>
|
<string name="mpris_ff">Spol frem</string>
|
||||||
<string name="mpris_next">Næste</string>
|
<string name="mpris_next">Næste</string>
|
||||||
<string name="mpris_volume">Lydstyrke</string>
|
<string name="mpris_volume">Lydstyrke</string>
|
||||||
<string name="mpris_settings">Fjernbetjening af multimedie</string>
|
<string name="mpris_settings">Multimedieindstillinger</string>
|
||||||
|
<string name="mpris_time_settings_title">Spol frem/tilbage-knapper</string>
|
||||||
|
<string name="mpris_time_settings_summary">Justér tiden for når der trykkes på spol frem/tilbage.</string>
|
||||||
|
<string-array name="mpris_time_entries">
|
||||||
|
<item>10 sekunder</item>
|
||||||
|
<item>20 sekunder</item>
|
||||||
|
<item>30 sekunder</item>
|
||||||
|
<item>1 minut</item>
|
||||||
|
<item>2 minutter</item>
|
||||||
|
</string-array>
|
||||||
<string name="share_to">Del på...</string>
|
<string name="share_to">Del på...</string>
|
||||||
<string name="protocol_version_older">Denne enhed bruger en gammel protokolversion</string>
|
<string name="protocol_version_older">Denne enhed bruger en gammel protokolversion</string>
|
||||||
<string name="protocol_version_newer">Denne enhed bruger en nyere protokolversion</string>
|
<string name="protocol_version_newer">Denne enhed bruger en nyere protokolversion</string>
|
||||||
<string name="general_settings">Generelle indstillinger</string>
|
<string name="general_settings">Generelle indstillinger</string>
|
||||||
<string name="plugin_settings">Generelle indstillinger</string>
|
<string name="plugin_settings">Indstillinger</string>
|
||||||
<string name="plugin_settings_with_name">Åbn indstillinger</string>
|
<string name="plugin_settings_with_name">Indstilling af %s</string>
|
||||||
<string name="device_name">Enhedsnavn</string>
|
<string name="device_name">Enhedsnavn</string>
|
||||||
<string name="device_name_preference_summary">%s</string>
|
<string name="device_name_preference_summary">%s</string>
|
||||||
<string name="invalid_device_name">Ugyldigt enhedsnavn</string>
|
<string name="invalid_device_name">Ugyldigt enhedsnavn</string>
|
||||||
<string name="shareplugin_text_saved">Modtog tekst, gemt til udklipsholder</string>
|
<string name="shareplugin_text_saved">Modtog tekst, gemt til udklipsholder</string>
|
||||||
<string name="custom_devices_settings">Ingen enheder</string>
|
<string name="custom_devices_settings">Brugertilpasset liste over enheder</string>
|
||||||
<string name="custom_device_list">Ingen enheder</string>
|
<string name="custom_device_list">Tilføj enheder via IP</string>
|
||||||
<string name="custom_device_list_summary">Ingen enheder</string>
|
<string name="share_notification_preference">Støjende bekendtgørelser</string>
|
||||||
<string name="share_notification_preference">Synk. af bekendtgørelser</string>
|
<string name="share_notification_preference_summary">Vibrér og afspil en lyd når en fil modtages</string>
|
||||||
<string-array name="mpris_time_entries">
|
<string name="title_activity_notification_filter">Bekendtgørelsesfilter</string>
|
||||||
<item>10 seconds</item>
|
<string name="filter_apps_info">Bekendtgørelser vil blive synkroniseret for de valgte apps.</string>
|
||||||
<item>20 seconds</item>
|
<string name="sftp_internal_storage">Intern lagring</string>
|
||||||
<item>30 seconds</item>
|
<string name="sftp_all_files">Alle filer</string>
|
||||||
<item>1 minute</item>
|
<string name="sftp_sdcard_num">SD-kort %d</string>
|
||||||
<item>2 minutes</item>
|
<string name="sftp_sdcard">SD-kort</string>
|
||||||
</string-array>
|
<string name="sftp_readonly">(skrivebeskyttet)</string>
|
||||||
|
<string name="sftp_camera">Kamerabilleder</string>
|
||||||
|
<string name="add_host">Tilføj vært/IP</string>
|
||||||
|
<string name="no_players_connected">Ingen afspillere fundet</string>
|
||||||
|
<string name="custom_dev_list_help">Brug kun denne indstilling hvis din enhed ikke opdages automatisk. Angiv IP-adresse eller værtsnavn nedenfor og tryk på knappen for at føje den til listen. Tryk på et eksisterende element for at fjerne det fra listen.</string>
|
||||||
|
<string name="mpris_player_on_device">%1$s på %2$s</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -8,7 +8,6 @@
|
|||||||
<string name="pref_plugin_sftp_desc">Erlaubt das Browsen des Dateisystems auf dem entfernten Handy</string>
|
<string name="pref_plugin_sftp_desc">Erlaubt das Browsen des Dateisystems auf dem entfernten Handy</string>
|
||||||
<string name="pref_plugin_clipboard">Abgleich der Zwischenablage</string>
|
<string name="pref_plugin_clipboard">Abgleich der Zwischenablage</string>
|
||||||
<string name="pref_plugin_clipboard_desc">Inhalt der Zwischenablage freigeben</string>
|
<string name="pref_plugin_clipboard_desc">Inhalt der Zwischenablage freigeben</string>
|
||||||
<string name="pref_plugin_mousepad">Fernbedienung</string>
|
|
||||||
<string name="pref_plugin_mpris">Multimedia-Fernbedienungen</string>
|
<string name="pref_plugin_mpris">Multimedia-Fernbedienungen</string>
|
||||||
<string name="pref_plugin_mpris_desc">Audio und Video mit Ihrem Telefon steuern</string>
|
<string name="pref_plugin_mpris_desc">Audio und Video mit Ihrem Telefon steuern</string>
|
||||||
<string name="pref_plugin_ping">Ping</string>
|
<string name="pref_plugin_ping">Ping</string>
|
||||||
@@ -25,13 +24,18 @@
|
|||||||
<string name="send_ping">Ping senden</string>
|
<string name="send_ping">Ping senden</string>
|
||||||
<string name="open_mpris_controls">Fernbedienung öffnen</string>
|
<string name="open_mpris_controls">Fernbedienung öffnen</string>
|
||||||
<string name="open_mousepad">Touchpad-Steuerung öffnen</string>
|
<string name="open_mousepad">Touchpad-Steuerung öffnen</string>
|
||||||
<string name="mousepad_right_click">Rechtsklick</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
<string name="mousepad_middle_click">Mittelklick</string>
|
<item>Rechtsklick</item>
|
||||||
|
<item>Mittelklick</item>
|
||||||
|
<item>Nichts</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="mousepad_double_default">Rechts</string>
|
||||||
|
<string name="mousepad_triple_default">Mitte</string>
|
||||||
<string name="category_connected_devices">Verbundene Geräte</string>
|
<string name="category_connected_devices">Verbundene Geräte</string>
|
||||||
<string name="category_not_paired_devices">Keine angeschlossenen Geräte</string>
|
<string name="category_not_paired_devices">Verfügbare Gerät</string>
|
||||||
<string name="category_remembered_devices">Gemerkte Geräte</string>
|
<string name="category_remembered_devices">Gemerkte Geräte</string>
|
||||||
<string name="plugins_failed_to_load">Laden der Module fehlgeschlagen, tippen Sie für weitere Details:</string>
|
<string name="plugins_failed_to_load">Laden der Module fehlgeschlagen, tippen Sie für weitere Details:</string>
|
||||||
<string name="device_menu_plugins">Module auswählen</string>
|
<string name="device_menu_plugins">Modul-Einstellungen</string>
|
||||||
<string name="device_menu_unpair">Verbindung trennen</string>
|
<string name="device_menu_unpair">Verbindung trennen</string>
|
||||||
<string name="device_not_reachable">Das angegeben Gerät ist nicht erreichbar</string>
|
<string name="device_not_reachable">Das angegeben Gerät ist nicht erreichbar</string>
|
||||||
<string name="unknown_device">Unbekanntes Gerät</string>
|
<string name="unknown_device">Unbekanntes Gerät</string>
|
||||||
@@ -69,6 +73,13 @@
|
|||||||
<string name="mpris_next">Weiter</string>
|
<string name="mpris_next">Weiter</string>
|
||||||
<string name="mpris_volume">Lautstärke</string>
|
<string name="mpris_volume">Lautstärke</string>
|
||||||
<string name="mpris_settings">Multimedia-Einstellungen</string>
|
<string name="mpris_settings">Multimedia-Einstellungen</string>
|
||||||
|
<string-array name="mpris_time_entries">
|
||||||
|
<item>10 Sekunden</item>
|
||||||
|
<item>20 Sekunden</item>
|
||||||
|
<item>30 Sekunden</item>
|
||||||
|
<item>1 Minute</item>
|
||||||
|
<item>2 Minuten</item>
|
||||||
|
</string-array>
|
||||||
<string name="share_to">Freigeben für ...</string>
|
<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_older">Dieses Gerät verwendet ein alte Protokollversion</string>
|
||||||
<string name="protocol_version_newer">Dieses Gerät verwendet ein neuere Protokollversion</string>
|
<string name="protocol_version_newer">Dieses Gerät verwendet ein neuere Protokollversion</string>
|
||||||
@@ -80,9 +91,6 @@
|
|||||||
<string name="invalid_device_name">Ungültiger Gerätename</string>
|
<string name="invalid_device_name">Ungültiger Gerätename</string>
|
||||||
<string name="shareplugin_text_saved">Text empfangen und in der Zwischenablage gespeichert</string>
|
<string name="shareplugin_text_saved">Text empfangen und in der Zwischenablage gespeichert</string>
|
||||||
<string name="custom_devices_settings">Benutzerdefinierte Geräteliste</string>
|
<string name="custom_devices_settings">Benutzerdefinierte Geräteliste</string>
|
||||||
<string name="custom_device_list">Benutzerdefinierte Geräteliste</string>
|
|
||||||
<string name="custom_device_list_summary">Benutzerdefinierte Geräteliste</string>
|
|
||||||
<string name="share_notification_preference">Benachrichtigungs-Abgleich</string>
|
|
||||||
<string name="share_notification_preference_summary">Beim Empfang einer Datei vibrieren und einen Sound abspielen</string>
|
<string name="share_notification_preference_summary">Beim Empfang einer Datei vibrieren und einen Sound abspielen</string>
|
||||||
<string name="sftp_internal_storage">Interner Speicher</string>
|
<string name="sftp_internal_storage">Interner Speicher</string>
|
||||||
<string name="sftp_all_files">Alle Dateien</string>
|
<string name="sftp_all_files">Alle Dateien</string>
|
||||||
@@ -91,11 +99,5 @@
|
|||||||
<string name="sftp_readonly">(Nur lesen)</string>
|
<string name="sftp_readonly">(Nur lesen)</string>
|
||||||
<string name="sftp_camera">Kamerabilder</string>
|
<string name="sftp_camera">Kamerabilder</string>
|
||||||
<string name="add_host">Rechner/IP hinzufügen</string>
|
<string name="add_host">Rechner/IP hinzufügen</string>
|
||||||
<string-array name="mpris_time_entries">
|
<string name="mpris_player_on_device">%1$s auf %2$s</string>
|
||||||
<item>10 Sekunden</item>
|
|
||||||
<item>20 Sekunden</item>
|
|
||||||
<item>30 Sekunden</item>
|
|
||||||
<item>1 Minute</item>
|
|
||||||
<item>2 Minuten</item>
|
|
||||||
</string-array>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
<string name="pref_plugin_telephony_desc">Enviar notificaciones de SMS y llamadas</string>
|
<string name="pref_plugin_telephony_desc">Enviar notificaciones de SMS y llamadas</string>
|
||||||
<string name="pref_plugin_battery">Informe de la batería</string>
|
<string name="pref_plugin_battery">Informe de la batería</string>
|
||||||
<string name="pref_plugin_battery_desc">Informar periódicamente del estado de la batería</string>
|
<string name="pref_plugin_battery_desc">Informar periódicamente del estado de la batería</string>
|
||||||
<string name="pref_plugin_sftp">Revelar el sistema de archivos</string>
|
<string name="pref_plugin_sftp">Mostrar el sistema de archivos</string>
|
||||||
<string name="pref_plugin_sftp_desc">Permite examinar de forma remota el sistema de archivos del teléfono</string>
|
<string name="pref_plugin_sftp_desc">Permite examinar de forma remota el sistema de archivos del teléfono</string>
|
||||||
<string name="pref_plugin_clipboard">Sincronización del portapapeles</string>
|
<string name="pref_plugin_clipboard">Sincronización del portapapeles</string>
|
||||||
<string name="pref_plugin_clipboard_desc">Compartir el contenido del portapapeles</string>
|
<string name="pref_plugin_clipboard_desc">Compartir el contenido del portapapeles</string>
|
||||||
@@ -27,16 +27,21 @@
|
|||||||
<string name="send_ping">Enviar ping</string>
|
<string name="send_ping">Enviar ping</string>
|
||||||
<string name="open_mpris_controls">Abrir control remoto</string>
|
<string name="open_mpris_controls">Abrir control remoto</string>
|
||||||
<string name="open_mousepad">Abrir control del panel táctil</string>
|
<string name="open_mousepad">Abrir control del panel táctil</string>
|
||||||
<string name="mousepad_info">Mueva un dedo sobre la pantalla para mover el cursor del ratón</string>
|
<string name="mousepad_info">Mueva un dedo sobre la pantalla para mover el cursor del ratón. Pulse para ejecutar un clic y use dos/tres dedos para emular los botones derecho y central. Use una pulsación larga para arrastrar y soltar.</string>
|
||||||
<string name="mousepad_double_tap_settings_title">Establecer la acción al golpetear con dos dedos</string>
|
<string name="mousepad_double_tap_settings_title">Establecer la acción al pulsar con dos dedos</string>
|
||||||
<string name="mousepad_triple_tap_settings_title">Establecer la acción al golpetear con tres dedos</string>
|
<string name="mousepad_triple_tap_settings_title">Establecer la acción al pulsar con tres dedos</string>
|
||||||
<string name="mousepad_right_click">Clic derecho</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
<string name="mousepad_middle_click">Clic del botón central</string>
|
<item>Clic derecho</item>
|
||||||
|
<item>Clic del botón central</item>
|
||||||
|
<item>Nada</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="mousepad_double_default">derecho</string>
|
||||||
|
<string name="mousepad_triple_default">medio</string>
|
||||||
<string name="category_connected_devices">Dispositivos conectados</string>
|
<string name="category_connected_devices">Dispositivos conectados</string>
|
||||||
<string name="category_not_paired_devices">Dispositivos no vinculados</string>
|
<string name="category_not_paired_devices">Dispositivos disponibles</string>
|
||||||
<string name="category_remembered_devices">Dispositivos recordados</string>
|
<string name="category_remembered_devices">Dispositivos recordados</string>
|
||||||
<string name="plugins_failed_to_load">Complementos cuya carga ha fallado (toque para más información):</string>
|
<string name="plugins_failed_to_load">Complementos cuya carga ha fallado (pulse para más información):</string>
|
||||||
<string name="device_menu_plugins">Seleccionar complementos</string>
|
<string name="device_menu_plugins">Preferencias del complemento</string>
|
||||||
<string name="device_menu_unpair">Desvincular</string>
|
<string name="device_menu_unpair">Desvincular</string>
|
||||||
<string name="device_not_reachable">No se encuentra el dispositivo aparejado</string>
|
<string name="device_not_reachable">No se encuentra el dispositivo aparejado</string>
|
||||||
<string name="unknown_device">Dispositivo desconocido</string>
|
<string name="unknown_device">Dispositivo desconocido</string>
|
||||||
@@ -56,7 +61,7 @@
|
|||||||
<string name="incoming_file_text">%1s</string>
|
<string name="incoming_file_text">%1s</string>
|
||||||
<string name="received_file_title">Archivo recibido desde %1s</string>
|
<string name="received_file_title">Archivo recibido desde %1s</string>
|
||||||
<string name="received_file_text">Pulse para abrir «%1s»</string>
|
<string name="received_file_text">Pulse para abrir «%1s»</string>
|
||||||
<string name="tap_to_answer">Toque para responder</string>
|
<string name="tap_to_answer">Pulse para responder</string>
|
||||||
<string name="reconnect">Reconectar</string>
|
<string name="reconnect">Reconectar</string>
|
||||||
<string name="right_click">Enviar clic derecho</string>
|
<string name="right_click">Enviar clic derecho</string>
|
||||||
<string name="middle_click">Enviar clic del botón central</string>
|
<string name="middle_click">Enviar clic del botón central</string>
|
||||||
@@ -76,8 +81,15 @@
|
|||||||
<string name="mpris_next">Siguiente</string>
|
<string name="mpris_next">Siguiente</string>
|
||||||
<string name="mpris_volume">Volumen</string>
|
<string name="mpris_volume">Volumen</string>
|
||||||
<string name="mpris_settings">Preferencias multimedia</string>
|
<string name="mpris_settings">Preferencias multimedia</string>
|
||||||
<string name="mpris_time_settings_title">Intervalo de tiempo</string>
|
<string name="mpris_time_settings_title">Botones de avance/rebobinado</string>
|
||||||
<string name="mpris_time_settings_summary">Ajustar el tiempo a avanzar o rebobinar un archivo multimedia.</string>
|
<string name="mpris_time_settings_summary">Ajustar el tiempo a avanzar o rebobinar rápidamente al pulsar.</string>
|
||||||
|
<string-array name="mpris_time_entries">
|
||||||
|
<item>10 segundos</item>
|
||||||
|
<item>20 segundos</item>
|
||||||
|
<item>30 segundos</item>
|
||||||
|
<item>1 minuto</item>
|
||||||
|
<item>2 minutos</item>
|
||||||
|
</string-array>
|
||||||
<string name="share_to">Compartir con...</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_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="protocol_version_newer">Este dispositivo usa una versión más reciente del protocolo</string>
|
||||||
@@ -89,10 +101,11 @@
|
|||||||
<string name="invalid_device_name">Nombre de dispositivo no válido</string>
|
<string name="invalid_device_name">Nombre de dispositivo no válido</string>
|
||||||
<string name="shareplugin_text_saved">Texto recibido y guardado en el portapapeles</string>
|
<string name="shareplugin_text_saved">Texto recibido y guardado en el portapapeles</string>
|
||||||
<string name="custom_devices_settings">Lista de dispositivos personalizada</string>
|
<string name="custom_devices_settings">Lista de dispositivos personalizada</string>
|
||||||
<string name="custom_device_list">Lista de dispositivos personalizada</string>
|
<string name="custom_device_list">Añadir dispositivos por IP</string>
|
||||||
<string name="custom_device_list_summary">Lista de dispositivos personalizada</string>
|
|
||||||
<string name="share_notification_preference">Notificaciones ruidosas</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_notification_preference_summary">Vibrar y reproducir un sonido cuando se reciba un archivo</string>
|
||||||
|
<string name="title_activity_notification_filter">Filtro de notificaciones</string>
|
||||||
|
<string name="filter_apps_info">Las notificaciones se sincronizarán en las aplicaciones seleccionadas.</string>
|
||||||
<string name="sftp_internal_storage">Almacenamiento interno</string>
|
<string name="sftp_internal_storage">Almacenamiento interno</string>
|
||||||
<string name="sftp_all_files">Todos los archivos</string>
|
<string name="sftp_all_files">Todos los archivos</string>
|
||||||
<string name="sftp_sdcard_num">Tarjeta SD %d</string>
|
<string name="sftp_sdcard_num">Tarjeta SD %d</string>
|
||||||
@@ -100,12 +113,7 @@
|
|||||||
<string name="sftp_readonly">(solo lectura)</string>
|
<string name="sftp_readonly">(solo lectura)</string>
|
||||||
<string name="sftp_camera">Imágenes de la cámara</string>
|
<string name="sftp_camera">Imágenes de la cámara</string>
|
||||||
<string name="add_host">Añadir IP/nombre</string>
|
<string name="add_host">Añadir IP/nombre</string>
|
||||||
|
<string name="no_players_connected">Ningún reproductor encontrado</string>
|
||||||
<string name="custom_dev_list_help">Use esta opción solo si su dispositivo no es detectado automáticamente. Introduzca la dirección IP o nombre debajo y pulse el botón para añadirlo a la lista. Pulse un ítem existente para eliminarlo de la lista.</string>
|
<string name="custom_dev_list_help">Use esta opción solo si su dispositivo no es detectado automáticamente. Introduzca la dirección IP o nombre debajo y pulse el botón para añadirlo a la lista. Pulse un ítem existente para eliminarlo de la lista.</string>
|
||||||
<string-array name="mpris_time_entries">
|
<string name="mpris_player_on_device">%1$s en %2$s</string>
|
||||||
<item>10 segundos</item>
|
|
||||||
<item>20 segundos</item>
|
|
||||||
<item>30 segundos</item>
|
|
||||||
<item>1 minuto</item>
|
|
||||||
<item>2 minutos</item>
|
|
||||||
</string-array>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -8,9 +8,9 @@
|
|||||||
<string name="pref_plugin_sftp_desc">Mahdollistaa puhelimen tiedostojärjestelmän etäselaamisen</string>
|
<string name="pref_plugin_sftp_desc">Mahdollistaa puhelimen tiedostojärjestelmän etäselaamisen</string>
|
||||||
<string name="pref_plugin_clipboard">Leikepöydän synkronointi</string>
|
<string name="pref_plugin_clipboard">Leikepöydän synkronointi</string>
|
||||||
<string name="pref_plugin_clipboard_desc">Jaa leikepöydän sisältö</string>
|
<string name="pref_plugin_clipboard_desc">Jaa leikepöydän sisältö</string>
|
||||||
<string name="pref_plugin_mousepad">Kaukosyöte</string>
|
<string name="pref_plugin_mousepad">Kauko-ohjaus</string>
|
||||||
<string name="pref_plugin_mousepad_desc">Käytä puhelintasi hiirenä ja näppäimistönä</string>
|
<string name="pref_plugin_mousepad_desc">Käytä puhelintasi hiirenä ja näppäimistönä</string>
|
||||||
<string name="pref_plugin_mpris">Multimediakauko-ohjaimet</string>
|
<string name="pref_plugin_mpris">Multimedian kauko-ohjaus</string>
|
||||||
<string name="pref_plugin_mpris_desc">Ohjaa ääntä ja videota puhelimestasi</string>
|
<string name="pref_plugin_mpris_desc">Ohjaa ääntä ja videota puhelimestasi</string>
|
||||||
<string name="pref_plugin_ping">Tiedustelupaketti</string>
|
<string name="pref_plugin_ping">Tiedustelupaketti</string>
|
||||||
<string name="pref_plugin_ping_desc">Lähetä ja vastaanota tiedustelupaketteja</string>
|
<string name="pref_plugin_ping_desc">Lähetä ja vastaanota tiedustelupaketteja</string>
|
||||||
@@ -27,16 +27,21 @@
|
|||||||
<string name="send_ping">Lähetä tiedustelupaketti</string>
|
<string name="send_ping">Lähetä tiedustelupaketti</string>
|
||||||
<string name="open_mpris_controls">Avaa kauko-ohjain</string>
|
<string name="open_mpris_controls">Avaa kauko-ohjain</string>
|
||||||
<string name="open_mousepad">Avaa hiiren ohjain</string>
|
<string name="open_mousepad">Avaa hiiren ohjain</string>
|
||||||
<string name="mousepad_info">Liikuta hiiren osoitinta liikuttamalla sormeasi näytöllä</string>
|
<string name="mousepad_info">Liikuta hiiren osoitinta liikuttamalla sormeasi näytöllä. Napsauta napauttamalla yhdellä sormella, käytä oikeaa painiketta kahdella sormella ja keskipainiketta kolmella. Vedä ja pudota painamalla pitkään.</string>
|
||||||
<string name="mousepad_double_tap_settings_title">Aseta kahden sormen napautuksen toiminto</string>
|
<string name="mousepad_double_tap_settings_title">Aseta kahden sormen napautuksen toiminto</string>
|
||||||
<string name="mousepad_triple_tap_settings_title">Aseta kolmen sormen napautuksen toiminto</string>
|
<string name="mousepad_triple_tap_settings_title">Aseta kolmen sormen napautuksen toiminto</string>
|
||||||
<string name="mousepad_right_click">Oikea napsautus</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
<string name="mousepad_middle_click">Keskinapsautus</string>
|
<item>Oikea napsautus</item>
|
||||||
|
<item>Keskinapsautus</item>
|
||||||
|
<item>Ei toimintoa</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="mousepad_double_default">Oikea painike</string>
|
||||||
|
<string name="mousepad_triple_default">Keskipainike</string>
|
||||||
<string name="category_connected_devices">Yhdistetyt laitteet</string>
|
<string name="category_connected_devices">Yhdistetyt laitteet</string>
|
||||||
<string name="category_not_paired_devices">Pariksi liitetyt laitteet</string>
|
<string name="category_not_paired_devices">Saatavilla olevat laitteet</string>
|
||||||
<string name="category_remembered_devices">Muistetut laitteet</string>
|
<string name="category_remembered_devices">Muistetut laitteet</string>
|
||||||
<string name="plugins_failed_to_load">Liitännäisten lataus epäonnistui (lisätietoa napauttamalla):</string>
|
<string name="plugins_failed_to_load">Seuraavien liitännäisten lataus epäonnistui (lisätietoa painamalla):</string>
|
||||||
<string name="device_menu_plugins">Valitse liitännäiset</string>
|
<string name="device_menu_plugins">Liitännäisten asetukset</string>
|
||||||
<string name="device_menu_unpair">Poista laitepari</string>
|
<string name="device_menu_unpair">Poista laitepari</string>
|
||||||
<string name="device_not_reachable">Laitepari tavoittamattomissa</string>
|
<string name="device_not_reachable">Laitepari tavoittamattomissa</string>
|
||||||
<string name="unknown_device">Tuntematon laite</string>
|
<string name="unknown_device">Tuntematon laite</string>
|
||||||
@@ -49,13 +54,19 @@
|
|||||||
<string name="error_canceled_by_other_peer">Vertaiskäyttäjä perui</string>
|
<string name="error_canceled_by_other_peer">Vertaiskäyttäjä perui</string>
|
||||||
<string name="error_invalid_key">Vastaanotettiin väärä avain</string>
|
<string name="error_invalid_key">Vastaanotettiin väärä avain</string>
|
||||||
<string name="pair_requested">Paripyyntö</string>
|
<string name="pair_requested">Paripyyntö</string>
|
||||||
<string name="pairing_request_from">Paripyyntö kohteesta %1s</string>
|
<string name="pairing_request_from">Paripyyntö laitteesta %1s</string>
|
||||||
<string name="received_url_title">Vastaanotettiin linkki lähettäjältä %1s</string>
|
<string name="received_url_title">Vastaanotettiin linkki lähettäjältä %1s</string>
|
||||||
<string name="received_url_text">Avaa ”%1s” napauttamalla</string>
|
<string name="received_url_text">Avaa ”%1s” napauttamalla</string>
|
||||||
<string name="incoming_file_title">Saapuva tiedosto lähettäjältä %1s</string>
|
<string name="incoming_file_title">Saapuva tiedosto lähettäjältä %1s</string>
|
||||||
<string name="incoming_file_text">%1s</string>
|
<string name="incoming_file_text">%1s</string>
|
||||||
|
<string name="outgoing_file_title">Lähetetään tiedostoa laitteeseen %1s</string>
|
||||||
|
<string name="outgoing_file_text">%1s</string>
|
||||||
<string name="received_file_title">Vastaanotettiin tiedosto lähettäjältä %1s</string>
|
<string name="received_file_title">Vastaanotettiin tiedosto lähettäjältä %1s</string>
|
||||||
<string name="received_file_text">Avaa ”%1s” napauttamalla</string>
|
<string name="received_file_text">Avaa ”%1s” napauttamalla</string>
|
||||||
|
<string name="sent_file_title">Tiedosto lähetetty laitteeseen %1s</string>
|
||||||
|
<string name="sent_file_text">%1s</string>
|
||||||
|
<string name="sent_file_failed_title">Tiedoston lähetys epäonnistui: %1s</string>
|
||||||
|
<string name="sent_file_failed_text">%1s</string>
|
||||||
<string name="tap_to_answer">Vastaa napauttamalla</string>
|
<string name="tap_to_answer">Vastaa napauttamalla</string>
|
||||||
<string name="reconnect">Yhdistä uudelleen</string>
|
<string name="reconnect">Yhdistä uudelleen</string>
|
||||||
<string name="right_click">Lähetä oikean painikkeen napsautus</string>
|
<string name="right_click">Lähetä oikean painikkeen napsautus</string>
|
||||||
@@ -72,12 +83,19 @@
|
|||||||
<string name="mpris_play">Toista</string>
|
<string name="mpris_play">Toista</string>
|
||||||
<string name="mpris_previous">Edellinen</string>
|
<string name="mpris_previous">Edellinen</string>
|
||||||
<string name="mpris_rew">Kelaa takaisin</string>
|
<string name="mpris_rew">Kelaa takaisin</string>
|
||||||
<string name="mpris_ff">Nopeasti eteenpäin</string>
|
<string name="mpris_ff">Pikakelaa</string>
|
||||||
<string name="mpris_next">Seuraava</string>
|
<string name="mpris_next">Seuraava</string>
|
||||||
<string name="mpris_volume">Äänenvoimakkuus</string>
|
<string name="mpris_volume">Äänenvoimakkuus</string>
|
||||||
<string name="mpris_settings">Multimedia-asetukset</string>
|
<string name="mpris_settings">Multimedia-asetukset</string>
|
||||||
<string name="mpris_time_settings_title">Aikaväli</string>
|
<string name="mpris_time_settings_title">Kelauspainikkeet</string>
|
||||||
<string name="mpris_time_settings_summary">Säädä multimediatiedoston pikakelauksen aikaa.</string>
|
<string name="mpris_time_settings_summary">Säädä painettaessa tapahtuvan kelauksen kestoa.</string>
|
||||||
|
<string-array name="mpris_time_entries">
|
||||||
|
<item>10 sekuntia</item>
|
||||||
|
<item>20 sekuntia</item>
|
||||||
|
<item>30 sekuntia</item>
|
||||||
|
<item>1 minuutti</item>
|
||||||
|
<item>2 minuuttia</item>
|
||||||
|
</string-array>
|
||||||
<string name="share_to">Jaa…</string>
|
<string name="share_to">Jaa…</string>
|
||||||
<string name="protocol_version_older">Laite käyttää vanha yhteyskäytäntöversiota</string>
|
<string name="protocol_version_older">Laite käyttää vanha yhteyskäytäntöversiota</string>
|
||||||
<string name="protocol_version_newer">Laite käyttää uudempaa yhteyskäytäntöversiota</string>
|
<string name="protocol_version_newer">Laite käyttää uudempaa yhteyskäytäntöversiota</string>
|
||||||
@@ -89,10 +107,11 @@
|
|||||||
<string name="invalid_device_name">Virheellinen laitenimi</string>
|
<string name="invalid_device_name">Virheellinen laitenimi</string>
|
||||||
<string name="shareplugin_text_saved">Vastaanotettiin tekstiä, tallennettiin leikepöydälle</string>
|
<string name="shareplugin_text_saved">Vastaanotettiin tekstiä, tallennettiin leikepöydälle</string>
|
||||||
<string name="custom_devices_settings">Omien laitteiden luettelo</string>
|
<string name="custom_devices_settings">Omien laitteiden luettelo</string>
|
||||||
<string name="custom_device_list">Omien laitteiden luettelo</string>
|
<string name="custom_device_list">Lisää laitteita IP:llä</string>
|
||||||
<string name="custom_device_list_summary">Omien laitteiden luettelo</string>
|
|
||||||
<string name="share_notification_preference">Äänekkäät ilmoitukset</string>
|
<string name="share_notification_preference">Äänekkäät ilmoitukset</string>
|
||||||
<string name="share_notification_preference_summary">Värise ja soita ääni tiedoston saapuessa</string>
|
<string name="share_notification_preference_summary">Värise ja soita ääni tiedoston saapuessa</string>
|
||||||
|
<string name="title_activity_notification_filter">Ilmoitussuodatin</string>
|
||||||
|
<string name="filter_apps_info">Valittujen sovellusten ilmoitukset synkronoidaan.</string>
|
||||||
<string name="sftp_internal_storage">Sisäinen muisti</string>
|
<string name="sftp_internal_storage">Sisäinen muisti</string>
|
||||||
<string name="sftp_all_files">Kaikki tiedostot</string>
|
<string name="sftp_all_files">Kaikki tiedostot</string>
|
||||||
<string name="sftp_sdcard_num">SD-kortti %d</string>
|
<string name="sftp_sdcard_num">SD-kortti %d</string>
|
||||||
@@ -100,12 +119,8 @@
|
|||||||
<string name="sftp_readonly">(vain luku)</string>
|
<string name="sftp_readonly">(vain luku)</string>
|
||||||
<string name="sftp_camera">Kamerakuvat</string>
|
<string name="sftp_camera">Kamerakuvat</string>
|
||||||
<string name="add_host">Lisää kone/IP</string>
|
<string name="add_host">Lisää kone/IP</string>
|
||||||
|
<string name="add_host_hint">Konenimi tai IP-osoite</string>
|
||||||
|
<string name="no_players_connected">Soittimia ei löytynyt</string>
|
||||||
<string name="custom_dev_list_help">Käytä tätä vain, jos laitettasi ei tunnisteta automaattisesti. Kirjoita IP-osoite tai konenimi alle ja kosketa painiketta lisätäksesi sen luetteloon. Kosketa olemassa olevaa kohtaa poistaaksesi sen luettelosta.</string>
|
<string name="custom_dev_list_help">Käytä tätä vain, jos laitettasi ei tunnisteta automaattisesti. Kirjoita IP-osoite tai konenimi alle ja kosketa painiketta lisätäksesi sen luetteloon. Kosketa olemassa olevaa kohtaa poistaaksesi sen luettelosta.</string>
|
||||||
<string-array name="mpris_time_entries">
|
<string name="mpris_player_on_device">%1$s laitteella %2$s</string>
|
||||||
<item>10 sekuntia</item>
|
|
||||||
<item>20 sekuntia</item>
|
|
||||||
<item>30 sekuntia</item>
|
|
||||||
<item>1 minuutti</item>
|
|
||||||
<item>2 minuuttia</item>
|
|
||||||
</string-array>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="pref_plugin_telephony">Notificateur de téléphonie</string>
|
<string name="pref_plugin_telephony">Notifications du téléphonie</string>
|
||||||
<string name="pref_plugin_telephony_desc">Envoie des notifications pour les SMS et les appels</string>
|
<string name="pref_plugin_telephony_desc">Envoie des notifications pour les SMS et les appels</string>
|
||||||
<string name="pref_plugin_battery">Rapport sur la batterie</string>
|
<string name="pref_plugin_battery">Rapport sur la batterie</string>
|
||||||
<string name="pref_plugin_battery_desc">Rapport périodique sur l\'état de la batterie</string>
|
<string name="pref_plugin_battery_desc">Rapport périodique sur l\'état de la batterie</string>
|
||||||
@@ -9,12 +9,14 @@
|
|||||||
<string name="pref_plugin_clipboard">Synchronisation avec le presse-papiers</string>
|
<string name="pref_plugin_clipboard">Synchronisation avec le presse-papiers</string>
|
||||||
<string name="pref_plugin_clipboard_desc">Partage le contenu du presse-papiers</string>
|
<string name="pref_plugin_clipboard_desc">Partage le contenu du presse-papiers</string>
|
||||||
<string name="pref_plugin_mousepad">Contrôle distant</string>
|
<string name="pref_plugin_mousepad">Contrôle distant</string>
|
||||||
|
<string name="pref_plugin_mousepad_desc">Utilisez votre téléphone comme une souris et un clavier</string>
|
||||||
<string name="pref_plugin_mpris">Contrôles distants multimédia</string>
|
<string name="pref_plugin_mpris">Contrôles distants multimédia</string>
|
||||||
<string name="pref_plugin_mpris_desc">Contrôle l\'audio / la vidéo depuis votre téléphone</string>
|
<string name="pref_plugin_mpris_desc">Contrôle l\'audio / la vidéo depuis votre téléphone</string>
|
||||||
<string name="pref_plugin_ping">Commande « Ping »</string>
|
<string name="pref_plugin_ping">Commande « Ping »</string>
|
||||||
<string name="pref_plugin_ping_desc">Envoie et reçoit des commandes « Ping »</string>
|
<string name="pref_plugin_ping_desc">Envoie et reçoit des commandes « Ping »</string>
|
||||||
<string name="pref_plugin_notifications">Synchronisation des notifications</string>
|
<string name="pref_plugin_notifications">Synchronisation des notifications</string>
|
||||||
<string name="pref_plugin_notifications_desc">Accédez à vos notifications depuis d\'autres périphériques</string>
|
<string name="pref_plugin_notifications_desc">Accédez à vos notifications depuis d\'autres périphériques</string>
|
||||||
|
<string name="pref_plugin_sharereceiver_desc">Enregistrer les fichiers reçus dans le stockage du téléphone</string>
|
||||||
<string name="plugin_not_available">Cette fonctionnalité n\'est pas disponible dans votre version de Android</string>
|
<string name="plugin_not_available">Cette fonctionnalité n\'est pas disponible dans votre version de Android</string>
|
||||||
<string name="device_list_empty">Pas de périphériques</string>
|
<string name="device_list_empty">Pas de périphériques</string>
|
||||||
<string name="ok">Ok</string>
|
<string name="ok">Ok</string>
|
||||||
@@ -23,12 +25,19 @@
|
|||||||
<string name="no_permissions">Vous devez accorder la permission d\'accéder aux notifications</string>
|
<string name="no_permissions">Vous devez accorder la permission d\'accéder aux notifications</string>
|
||||||
<string name="send_ping">Envoyer un « Ping »</string>
|
<string name="send_ping">Envoyer un « Ping »</string>
|
||||||
<string name="open_mpris_controls">Ouvrir un contrôle distant</string>
|
<string name="open_mpris_controls">Ouvrir un contrôle distant</string>
|
||||||
<string name="open_mousepad">Ouvrir un contrôle distant</string>
|
<string name="open_mousepad">Ouvrir le pavé tactile</string>
|
||||||
|
<string-array name="mousepad_tap_entries">
|
||||||
|
<item>Clic droit</item>
|
||||||
|
<item>Clic central</item>
|
||||||
|
<item>Rien</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="mousepad_double_default">Droite</string>
|
||||||
|
<string name="mousepad_triple_default">Milieu</string>
|
||||||
<string name="category_connected_devices">Périphériques connectés</string>
|
<string name="category_connected_devices">Périphériques connectés</string>
|
||||||
<string name="category_not_paired_devices">Pas de périphériques appariés</string>
|
<string name="category_not_paired_devices">Périphériques disponibles</string>
|
||||||
<string name="category_remembered_devices">Périphériques mémorisés</string>
|
<string name="category_remembered_devices">Périphériques mémorisés</string>
|
||||||
<string name="plugins_failed_to_load">Le chargement des modules externes a échoué (cliquez pour plus d\'informations) :</string>
|
<string name="plugins_failed_to_load">Le chargement des modules externes a échoué (cliquez pour plus d\'informations) :</string>
|
||||||
<string name="device_menu_plugins">Sélectionner des modules externes</string>
|
<string name="device_menu_plugins">Paramètres du module externe</string>
|
||||||
<string name="device_menu_unpair">Désapparier</string>
|
<string name="device_menu_unpair">Désapparier</string>
|
||||||
<string name="device_not_reachable">Périphérique inaccessible</string>
|
<string name="device_not_reachable">Périphérique inaccessible</string>
|
||||||
<string name="unknown_device">Périphérique inconnu</string>
|
<string name="unknown_device">Périphérique inconnu</string>
|
||||||
@@ -42,10 +51,16 @@
|
|||||||
<string name="error_invalid_key">Clé reçue non valable</string>
|
<string name="error_invalid_key">Clé reçue non valable</string>
|
||||||
<string name="pair_requested">Paire demandée</string>
|
<string name="pair_requested">Paire demandée</string>
|
||||||
<string name="pairing_request_from">Demande d\'appariement provenant de %1s</string>
|
<string name="pairing_request_from">Demande d\'appariement provenant de %1s</string>
|
||||||
<string name="incoming_file_title">Demande d\'appariement provenant de %1s</string>
|
<string name="incoming_file_text">%1s</string>
|
||||||
<string name="incoming_file_text">%s</string>
|
<string name="outgoing_file_text">%1s</string>
|
||||||
|
<string name="sent_file_text">%1s</string>
|
||||||
|
<string name="sent_file_failed_title">Impossible d\'envoyer le fichier %1s</string>
|
||||||
|
<string name="sent_file_failed_text">%1s</string>
|
||||||
<string name="tap_to_answer">Cliquer pour répondre</string>
|
<string name="tap_to_answer">Cliquer pour répondre</string>
|
||||||
<string name="reconnect">Reconnecter</string>
|
<string name="reconnect">Reconnecter</string>
|
||||||
|
<string name="right_click">Envoyer un clic droit</string>
|
||||||
|
<string name="middle_click">Envoyer un clic central</string>
|
||||||
|
<string name="show_keyboard">Afficher le clavier</string>
|
||||||
<string name="device_not_paired">Périphérique non apparié</string>
|
<string name="device_not_paired">Périphérique non apparié</string>
|
||||||
<string name="request_pairing">Demande d\'appariement</string>
|
<string name="request_pairing">Demande d\'appariement</string>
|
||||||
<string name="pairing_accept">Accepter</string>
|
<string name="pairing_accept">Accepter</string>
|
||||||
@@ -60,25 +75,33 @@
|
|||||||
<string name="mpris_ff">Avance rapide</string>
|
<string name="mpris_ff">Avance rapide</string>
|
||||||
<string name="mpris_next">Suivant</string>
|
<string name="mpris_next">Suivant</string>
|
||||||
<string name="mpris_volume">Volume</string>
|
<string name="mpris_volume">Volume</string>
|
||||||
<string name="mpris_settings">Contrôles distants multimédia</string>
|
<string name="mpris_settings">Configuration multimédia</string>
|
||||||
|
<string-array name="mpris_time_entries">
|
||||||
|
<item>10 secondes</item>
|
||||||
|
<item>20 secondes</item>
|
||||||
|
<item>30 secondes</item>
|
||||||
|
<item>1 minute</item>
|
||||||
|
<item>2 minutes</item>
|
||||||
|
</string-array>
|
||||||
<string name="share_to">Partager vers...</string>
|
<string name="share_to">Partager vers...</string>
|
||||||
<string name="protocol_version_older">Le périphérique utilise une version ancienne du protocole</string>
|
<string name="protocol_version_older">Le périphérique utilise une version ancienne du protocole</string>
|
||||||
<string name="protocol_version_newer">Le périphérique utilise une version plus récente du protocole</string>
|
<string name="protocol_version_newer">Le périphérique utilise une version plus récente du protocole</string>
|
||||||
<string name="general_settings">Paramètres généraux</string>
|
<string name="general_settings">Paramètres généraux</string>
|
||||||
<string name="plugin_settings">Paramètres généraux</string>
|
<string name="plugin_settings">Configuration</string>
|
||||||
<string name="plugin_settings_with_name">Accéder aux paramètres</string>
|
<string name="plugin_settings_with_name">Configuration %s</string>
|
||||||
<string name="device_name">Nom du périphérique</string>
|
<string name="device_name">Nom du périphérique</string>
|
||||||
<string name="device_name_preference_summary">%s</string>
|
<string name="device_name_preference_summary">%s</string>
|
||||||
<string name="invalid_device_name">Nom de périphérique non valable</string>
|
<string name="invalid_device_name">Nom de périphérique non valable</string>
|
||||||
<string name="custom_devices_settings">Pas de périphériques</string>
|
<string name="custom_devices_settings">Liste personnalisée de périphériques</string>
|
||||||
<string name="custom_device_list">Pas de périphériques</string>
|
<string name="custom_device_list">Ajouter des périphériques par IP</string>
|
||||||
<string name="custom_device_list_summary">Pas de périphériques</string>
|
<string name="title_activity_notification_filter">Filtre des notifications</string>
|
||||||
<string name="share_notification_preference">Synchronisation des notifications</string>
|
<string name="sftp_internal_storage">Stockage interne</string>
|
||||||
<string-array name="mpris_time_entries">
|
<string name="sftp_all_files">Tous les fichiers</string>
|
||||||
<item>10 seconds</item>
|
<string name="sftp_sdcard_num">Carte SD %d</string>
|
||||||
<item>20 seconds</item>
|
<string name="sftp_sdcard">Carte SD</string>
|
||||||
<item>30 seconds</item>
|
<string name="sftp_readonly">(lecture seule)</string>
|
||||||
<item>1 minute</item>
|
<string name="sftp_camera">Images de l\'appareil photo</string>
|
||||||
<item>2 minutes</item>
|
<string name="add_host">Ajouter hôte/IP</string>
|
||||||
</string-array>
|
<string name="no_players_connected">Aucun lecteur trouvé</string>
|
||||||
|
<string name="mpris_player_on_device">%1$s sur %2$s</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -8,7 +8,6 @@
|
|||||||
<string name="pref_plugin_sftp_desc">Lehetővé teszi a telefon fájlrendszerének távolról történő tallózását</string>
|
<string name="pref_plugin_sftp_desc">Lehetővé teszi a telefon fájlrendszerének távolról történő tallózását</string>
|
||||||
<string name="pref_plugin_clipboard">Vágólap szinkronizáció</string>
|
<string name="pref_plugin_clipboard">Vágólap szinkronizáció</string>
|
||||||
<string name="pref_plugin_clipboard_desc">A vágólap tartalmának megosztása</string>
|
<string name="pref_plugin_clipboard_desc">A vágólap tartalmának megosztása</string>
|
||||||
<string name="pref_plugin_mousepad">Távirányító</string>
|
|
||||||
<string name="pref_plugin_mpris">Multimedia távirányítók</string>
|
<string name="pref_plugin_mpris">Multimedia távirányítók</string>
|
||||||
<string name="pref_plugin_mpris_desc">Hang vagy videó vezérlése a telefonról</string>
|
<string name="pref_plugin_mpris_desc">Hang vagy videó vezérlése a telefonról</string>
|
||||||
<string name="pref_plugin_ping">Ping</string>
|
<string name="pref_plugin_ping">Ping</string>
|
||||||
@@ -26,14 +25,14 @@
|
|||||||
<string name="send_ping">Ping küldése</string>
|
<string name="send_ping">Ping küldése</string>
|
||||||
<string name="open_mpris_controls">Távirányító megnyitása</string>
|
<string name="open_mpris_controls">Távirányító megnyitása</string>
|
||||||
<string name="open_mousepad">Érintőtábla vezérlő megnyitása</string>
|
<string name="open_mousepad">Érintőtábla vezérlő megnyitása</string>
|
||||||
<string name="mousepad_info">Mozgassa az ujját a képernyőn az egérkurzor mozgatásához</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
<string name="mousepad_right_click">Jobb kattintás küldése</string>
|
<item/>
|
||||||
<string name="mousepad_middle_click">Középső kattintás küldése</string>
|
<item/>
|
||||||
|
<item>Nothing</item>
|
||||||
|
</string-array>
|
||||||
<string name="category_connected_devices">Csatlakoztatott eszközök</string>
|
<string name="category_connected_devices">Csatlakoztatott eszközök</string>
|
||||||
<string name="category_not_paired_devices">Nincsenek párosított eszközök</string>
|
|
||||||
<string name="category_remembered_devices">Megjegyzett eszközök</string>
|
<string name="category_remembered_devices">Megjegyzett eszközök</string>
|
||||||
<string name="plugins_failed_to_load">A bővítményeket nem sikerült betölteni (érintse meg a további információkért):</string>
|
<string name="plugins_failed_to_load">A bővítményeket nem sikerült betölteni (érintse meg a további információkért):</string>
|
||||||
<string name="device_menu_plugins">Bővítmények kijelölése</string>
|
|
||||||
<string name="device_menu_unpair">Leválasztás</string>
|
<string name="device_menu_unpair">Leválasztás</string>
|
||||||
<string name="device_not_reachable">A párosított eszköz nem érhető el</string>
|
<string name="device_not_reachable">A párosított eszköz nem érhető el</string>
|
||||||
<string name="unknown_device">Ismeretlen eszköz</string>
|
<string name="unknown_device">Ismeretlen eszköz</string>
|
||||||
@@ -71,21 +70,6 @@
|
|||||||
<string name="mpris_ff">Gyors előretekerés</string>
|
<string name="mpris_ff">Gyors előretekerés</string>
|
||||||
<string name="mpris_next">Következő</string>
|
<string name="mpris_next">Következő</string>
|
||||||
<string name="mpris_volume">Hangerő</string>
|
<string name="mpris_volume">Hangerő</string>
|
||||||
<string name="mpris_settings">Multimedia távirányítók</string>
|
|
||||||
<string name="share_to">Megosztás…</string>
|
|
||||||
<string name="protocol_version_older">Ez az eszköz egy régi protokollverziót használ</string>
|
|
||||||
<string name="protocol_version_newer">Ez az eszköz egy újabb protokollverziót használ</string>
|
|
||||||
<string name="general_settings">Általános beállítások</string>
|
|
||||||
<string name="plugin_settings">Általános beállítások</string>
|
|
||||||
<string name="plugin_settings_with_name">Beállítások megnyitása</string>
|
|
||||||
<string name="device_name">Eszköznév</string>
|
|
||||||
<string name="device_name_preference_summary">%s</string>
|
|
||||||
<string name="invalid_device_name">Érvénytelen eszköznév</string>
|
|
||||||
<string name="shareplugin_text_saved">Szöveg érkezett, elmentve a vágólapra</string>
|
|
||||||
<string name="custom_devices_settings">Nincsenek eszközök</string>
|
|
||||||
<string name="custom_device_list">Nincsenek eszközök</string>
|
|
||||||
<string name="custom_device_list_summary">Nincsenek eszközök</string>
|
|
||||||
<string name="share_notification_preference">Értesítés szinkronizáció</string>
|
|
||||||
<string-array name="mpris_time_entries">
|
<string-array name="mpris_time_entries">
|
||||||
<item>10 seconds</item>
|
<item>10 seconds</item>
|
||||||
<item>20 seconds</item>
|
<item>20 seconds</item>
|
||||||
@@ -93,4 +77,12 @@
|
|||||||
<item>1 minute</item>
|
<item>1 minute</item>
|
||||||
<item>2 minutes</item>
|
<item>2 minutes</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
<string name="share_to">Megosztás…</string>
|
||||||
|
<string name="protocol_version_older">Ez az eszköz egy régi protokollverziót használ</string>
|
||||||
|
<string name="protocol_version_newer">Ez az eszköz egy újabb protokollverziót használ</string>
|
||||||
|
<string name="general_settings">Általános beállítások</string>
|
||||||
|
<string name="device_name">Eszköznév</string>
|
||||||
|
<string name="device_name_preference_summary">%s</string>
|
||||||
|
<string name="invalid_device_name">Érvénytelen eszköznév</string>
|
||||||
|
<string name="shareplugin_text_saved">Szöveg érkezett, elmentve a vágólapra</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -4,15 +4,20 @@
|
|||||||
<string name="pref_plugin_telephony_desc">Invia notifiche di SMS e chiamate</string>
|
<string name="pref_plugin_telephony_desc">Invia notifiche di SMS e chiamate</string>
|
||||||
<string name="pref_plugin_battery">Livello batteria</string>
|
<string name="pref_plugin_battery">Livello batteria</string>
|
||||||
<string name="pref_plugin_battery_desc">Comunica periodicamente lo stato della batteria</string>
|
<string name="pref_plugin_battery_desc">Comunica periodicamente lo stato della batteria</string>
|
||||||
|
<string name="pref_plugin_sftp">Esposizione filesystem</string>
|
||||||
|
<string name="pref_plugin_sftp_desc">Consente di navigare da remoto il filesystem del telefono</string>
|
||||||
<string name="pref_plugin_clipboard">Sincronizzazione appunti</string>
|
<string name="pref_plugin_clipboard">Sincronizzazione appunti</string>
|
||||||
<string name="pref_plugin_clipboard_desc">Condividi il contenuto degli appunti</string>
|
<string name="pref_plugin_clipboard_desc">Condividi il contenuto degli appunti</string>
|
||||||
<string name="pref_plugin_mousepad">Telecomando</string>
|
<string name="pref_plugin_mousepad">Impulso remoto</string>
|
||||||
|
<string name="pref_plugin_mousepad_desc">Usa il tuo telefono come mouse e tastiera</string>
|
||||||
<string name="pref_plugin_mpris">Telecomando multimediale</string>
|
<string name="pref_plugin_mpris">Telecomando multimediale</string>
|
||||||
<string name="pref_plugin_mpris_desc">Controlla la riproduzione audio/video dal telefono</string>
|
<string name="pref_plugin_mpris_desc">Controlla la riproduzione audio/video dal telefono</string>
|
||||||
<string name="pref_plugin_ping">Ping</string>
|
<string name="pref_plugin_ping">Ping</string>
|
||||||
<string name="pref_plugin_ping_desc">Invia e ricevi ping</string>
|
<string name="pref_plugin_ping_desc">Invia e ricevi ping</string>
|
||||||
<string name="pref_plugin_notifications">Sincronizzazione notifiche</string>
|
<string name="pref_plugin_notifications">Sincronizzazione notifiche</string>
|
||||||
<string name="pref_plugin_notifications_desc">Consenti l\'accesso alle notifiche dagli altri dispositivi</string>
|
<string name="pref_plugin_notifications_desc">Consenti l\'accesso alle notifiche dagli altri dispositivi</string>
|
||||||
|
<string name="pref_plugin_sharereceiver">Condivisione ricevitore</string>
|
||||||
|
<string name="pref_plugin_sharereceiver_desc">Salva i file in ingresso nella memoria del telefono</string>
|
||||||
<string name="plugin_not_available">Questa funzionalità non è disponibile sulla tua versione di Android</string>
|
<string name="plugin_not_available">Questa funzionalità non è disponibile sulla tua versione di Android</string>
|
||||||
<string name="device_list_empty">Nessun dispositivo</string>
|
<string name="device_list_empty">Nessun dispositivo</string>
|
||||||
<string name="ok">OK</string>
|
<string name="ok">OK</string>
|
||||||
@@ -21,14 +26,24 @@
|
|||||||
<string name="no_permissions">Devi garantire a KDE Connect l\'accesso alle notifiche</string>
|
<string name="no_permissions">Devi garantire a KDE Connect l\'accesso alle notifiche</string>
|
||||||
<string name="send_ping">Invia ping</string>
|
<string name="send_ping">Invia ping</string>
|
||||||
<string name="open_mpris_controls">Apri il telecomando multimediale</string>
|
<string name="open_mpris_controls">Apri il telecomando multimediale</string>
|
||||||
<string name="open_mousepad">Apri il telecomando multimediale</string>
|
<string name="open_mousepad">Apri controllo del touchpad</string>
|
||||||
|
<string name="mousepad_info">Muovi un dito sullo schermo per spostare il puntatore del mouse. Tocca per un clic e usa due/tre dita per i pulsanti destro e centrale. Utilizza una pressione lunga per trascinare e rilasciare.</string>
|
||||||
|
<string name="mousepad_double_tap_settings_title">Imposta azione per il tocco a due dita</string>
|
||||||
|
<string name="mousepad_triple_tap_settings_title">Imposta azione per il tocco a tre dita</string>
|
||||||
|
<string-array name="mousepad_tap_entries">
|
||||||
|
<item>Clic destro</item>
|
||||||
|
<item>Clic centrale</item>
|
||||||
|
<item>Niente</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="mousepad_double_default">destra</string>
|
||||||
|
<string name="mousepad_triple_default">centro</string>
|
||||||
<string name="category_connected_devices">Dispositivi connessi</string>
|
<string name="category_connected_devices">Dispositivi connessi</string>
|
||||||
<string name="category_not_paired_devices">Dispositivi non associati</string>
|
<string name="category_not_paired_devices">Dispositivi disponibili</string>
|
||||||
<string name="category_remembered_devices">Dispositivi memorizzati</string>
|
<string name="category_remembered_devices">Dispositivi memorizzati</string>
|
||||||
<string name="plugins_failed_to_load">Alcune estensioni non si sono avviate correttamente (tocca per maggiori informazioni):</string>
|
<string name="plugins_failed_to_load">Alcune estensioni non si sono avviate correttamente (tocca per maggiori informazioni):</string>
|
||||||
<string name="device_menu_plugins">Estensioni</string>
|
<string name="device_menu_plugins">Impostazioni estensioni</string>
|
||||||
<string name="device_menu_unpair">Disassocia</string>
|
<string name="device_menu_unpair">Disassocia</string>
|
||||||
<string name="device_not_reachable">Dispositivo fuori portata</string>
|
<string name="device_not_reachable">Dispositivo accoppiato non raggiungibile</string>
|
||||||
<string name="unknown_device">Dispositivo sconosciuto</string>
|
<string name="unknown_device">Dispositivo sconosciuto</string>
|
||||||
<string name="error_not_reachable">Dispositivo fuori portata</string>
|
<string name="error_not_reachable">Dispositivo fuori portata</string>
|
||||||
<string name="error_already_requested">Richiesta già inviata</string>
|
<string name="error_already_requested">Richiesta già inviata</string>
|
||||||
@@ -40,10 +55,23 @@
|
|||||||
<string name="error_invalid_key">Ricevuta chiave non valida</string>
|
<string name="error_invalid_key">Ricevuta chiave non valida</string>
|
||||||
<string name="pair_requested">Richiesta di associazione</string>
|
<string name="pair_requested">Richiesta di associazione</string>
|
||||||
<string name="pairing_request_from">Richiesta associazione da %1s</string>
|
<string name="pairing_request_from">Richiesta associazione da %1s</string>
|
||||||
<string name="incoming_file_title">Richiesta associazione da %1s</string>
|
<string name="received_url_title">Collegamento ricevuto da %1s</string>
|
||||||
<string name="incoming_file_text">%s</string>
|
<string name="received_url_text">Tocca per aprire «%1s»</string>
|
||||||
|
<string name="incoming_file_title">File in ingresso da %1s</string>
|
||||||
|
<string name="incoming_file_text">%1s</string>
|
||||||
|
<string name="outgoing_file_title">Invio file a %1s</string>
|
||||||
|
<string name="outgoing_file_text">%1s</string>
|
||||||
|
<string name="received_file_title">File ricevuto da %1s</string>
|
||||||
|
<string name="received_file_text">Tocca per aprire «%1s»</string>
|
||||||
|
<string name="sent_file_title">File inviato a %1s</string>
|
||||||
|
<string name="sent_file_text">%1s</string>
|
||||||
|
<string name="sent_file_failed_title">Invio del file %1s non riuscito</string>
|
||||||
|
<string name="sent_file_failed_text">%1s</string>
|
||||||
<string name="tap_to_answer">Tocca per rispondere</string>
|
<string name="tap_to_answer">Tocca per rispondere</string>
|
||||||
<string name="reconnect">Riconnetti</string>
|
<string name="reconnect">Riconnetti</string>
|
||||||
|
<string name="right_click">Invia clic tasto destro</string>
|
||||||
|
<string name="middle_click">Invia clic tasto centrale</string>
|
||||||
|
<string name="show_keyboard">Mostra tastiera</string>
|
||||||
<string name="device_not_paired">Dispositivo non associato</string>
|
<string name="device_not_paired">Dispositivo non associato</string>
|
||||||
<string name="request_pairing">Richiedi associazione</string>
|
<string name="request_pairing">Richiedi associazione</string>
|
||||||
<string name="pairing_accept">Accetta</string>
|
<string name="pairing_accept">Accetta</string>
|
||||||
@@ -58,25 +86,40 @@
|
|||||||
<string name="mpris_ff">Avanti veloce</string>
|
<string name="mpris_ff">Avanti veloce</string>
|
||||||
<string name="mpris_next">Successivo</string>
|
<string name="mpris_next">Successivo</string>
|
||||||
<string name="mpris_volume">Volume</string>
|
<string name="mpris_volume">Volume</string>
|
||||||
<string name="mpris_settings">Telecomando multimediale</string>
|
<string name="mpris_settings">Impostazioni multimediali</string>
|
||||||
|
<string name="mpris_time_settings_title">I pulsanti di avanzamento/riavvolgimento</string>
|
||||||
|
<string name="mpris_time_settings_summary">Regola l\'ora per avanzare rapidamente o riavvolgere in caso di pressione.</string>
|
||||||
|
<string-array name="mpris_time_entries">
|
||||||
|
<item>10 secondi</item>
|
||||||
|
<item>20 secondi</item>
|
||||||
|
<item>30 secondi</item>
|
||||||
|
<item>1 minuto</item>
|
||||||
|
<item>2 minuti</item>
|
||||||
|
</string-array>
|
||||||
<string name="share_to">Condividi…</string>
|
<string name="share_to">Condividi…</string>
|
||||||
<string name="protocol_version_older">Questo dispositivo usa una vecchia versione del protocollo di rete</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="protocol_version_newer">Questo dispositivo usa una nuova versione del protocollo di rete</string>
|
||||||
<string name="general_settings">Impostazioni generali</string>
|
<string name="general_settings">Impostazioni generali</string>
|
||||||
<string name="plugin_settings">Impostazioni generali</string>
|
<string name="plugin_settings">Impostazioni</string>
|
||||||
<string name="plugin_settings_with_name">Apri impostazioni</string>
|
<string name="plugin_settings_with_name">Impostazioni di %s</string>
|
||||||
<string name="device_name">Nome dispositivo</string>
|
<string name="device_name">Nome dispositivo</string>
|
||||||
<string name="device_name_preference_summary">%s</string>
|
<string name="device_name_preference_summary">%s</string>
|
||||||
<string name="invalid_device_name">Nome non valido</string>
|
<string name="invalid_device_name">Nome non valido</string>
|
||||||
<string name="custom_devices_settings">Nessun dispositivo</string>
|
<string name="shareplugin_text_saved">Testo ricevuto, salvato negli appunti</string>
|
||||||
<string name="custom_device_list">Nessun dispositivo</string>
|
<string name="custom_devices_settings">Elenco dispositivi personalizzato</string>
|
||||||
<string name="custom_device_list_summary">Nessun dispositivo</string>
|
<string name="custom_device_list">Aggiungi dispositivi per IP</string>
|
||||||
<string name="share_notification_preference">Sincronizzazione notifiche</string>
|
<string name="share_notification_preference">Notifiche rumorose</string>
|
||||||
<string-array name="mpris_time_entries">
|
<string name="share_notification_preference_summary">Vibra e riproduci un suono alla ricezione di un file</string>
|
||||||
<item>10 seconds</item>
|
<string name="title_activity_notification_filter">Filtro delle notifiche</string>
|
||||||
<item>20 seconds</item>
|
<string name="filter_apps_info">Le notifiche saranno sincronizzate per le applicazioni selezionate.</string>
|
||||||
<item>30 seconds</item>
|
<string name="sftp_internal_storage">Archiviazione interna</string>
|
||||||
<item>1 minute</item>
|
<string name="sftp_all_files">Tutti i file</string>
|
||||||
<item>2 minutes</item>
|
<string name="sftp_sdcard_num">Scheda SD %d</string>
|
||||||
</string-array>
|
<string name="sftp_sdcard">Scheda SD</string>
|
||||||
|
<string name="sftp_readonly">(sola lettura)</string>
|
||||||
|
<string name="sftp_camera">Immagini fotocamera</string>
|
||||||
|
<string name="add_host">Aggiungi host/IP</string>
|
||||||
|
<string name="no_players_connected">Nessun lettore trovato</string>
|
||||||
|
<string name="custom_dev_list_help">Usa questa opzioone solo se il tuo dispositivo non è rilevato automaticamente. Digita l\'indirizzo IP o il nome host in basso e tocca il pulsante per aggiungerlo all\'elenco. Tocca un elemento esistente per rimuoverlo dall\'elenco.</string>
|
||||||
|
<string name="mpris_player_on_device">%1$s su %2$s</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -1,5 +1,10 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string-array name="mousepad_tap_entries">
|
||||||
|
<item>Right click</item>
|
||||||
|
<item>Middle click</item>
|
||||||
|
<item>Nothing</item>
|
||||||
|
</string-array>
|
||||||
<string-array name="mpris_time_entries">
|
<string-array name="mpris_time_entries">
|
||||||
<item>10 seconds</item>
|
<item>10 seconds</item>
|
||||||
<item>20 seconds</item>
|
<item>20 seconds</item>
|
||||||
|
@@ -8,13 +8,16 @@
|
|||||||
<string name="pref_plugin_sftp_desc">휴대폰의 파일 시스템 보기</string>
|
<string name="pref_plugin_sftp_desc">휴대폰의 파일 시스템 보기</string>
|
||||||
<string name="pref_plugin_clipboard">클립보드 동기화</string>
|
<string name="pref_plugin_clipboard">클립보드 동기화</string>
|
||||||
<string name="pref_plugin_clipboard_desc">클립보드 내용 동기화</string>
|
<string name="pref_plugin_clipboard_desc">클립보드 내용 동기화</string>
|
||||||
<string name="pref_plugin_mousepad">원격 제어</string>
|
<string name="pref_plugin_mousepad">원격 입력</string>
|
||||||
|
<string name="pref_plugin_mousepad_desc">내 장치를 마우스와 키보드로 사용하기</string>
|
||||||
<string name="pref_plugin_mpris">멀티미디어 제어</string>
|
<string name="pref_plugin_mpris">멀티미디어 제어</string>
|
||||||
<string name="pref_plugin_mpris_desc">휴대폰에서 오디오/비디오 제어</string>
|
<string name="pref_plugin_mpris_desc">휴대폰에서 오디오/비디오 제어</string>
|
||||||
<string name="pref_plugin_ping">핑</string>
|
<string name="pref_plugin_ping">핑</string>
|
||||||
<string name="pref_plugin_ping_desc">핑 보내고 받기</string>
|
<string name="pref_plugin_ping_desc">핑 보내고 받기</string>
|
||||||
<string name="pref_plugin_notifications">알림 동기화</string>
|
<string name="pref_plugin_notifications">알림 동기화</string>
|
||||||
<string name="pref_plugin_notifications_desc">다른 장치에서 알림 보기</string>
|
<string name="pref_plugin_notifications_desc">다른 장치에서 알림 보기</string>
|
||||||
|
<string name="pref_plugin_sharereceiver">공유 수신자</string>
|
||||||
|
<string name="pref_plugin_sharereceiver_desc">보낸 파일을 장치에 저장합니다</string>
|
||||||
<string name="plugin_not_available">현재 안드로이드 버전에서 사용할 수 없습니다</string>
|
<string name="plugin_not_available">현재 안드로이드 버전에서 사용할 수 없습니다</string>
|
||||||
<string name="device_list_empty">장치 없음</string>
|
<string name="device_list_empty">장치 없음</string>
|
||||||
<string name="ok">확인</string>
|
<string name="ok">확인</string>
|
||||||
@@ -23,14 +26,18 @@
|
|||||||
<string name="no_permissions">알림 접근 권한을 허가해야 합니다</string>
|
<string name="no_permissions">알림 접근 권한을 허가해야 합니다</string>
|
||||||
<string name="send_ping">핑 보내기</string>
|
<string name="send_ping">핑 보내기</string>
|
||||||
<string name="open_mpris_controls">원격 제어 열기</string>
|
<string name="open_mpris_controls">원격 제어 열기</string>
|
||||||
<string name="open_mousepad">원격 제어 열기</string>
|
<string name="open_mousepad">터치패드 제어 열기</string>
|
||||||
|
<string-array name="mousepad_tap_entries">
|
||||||
|
<item/>
|
||||||
|
<item/>
|
||||||
|
<item>Nothing</item>
|
||||||
|
</string-array>
|
||||||
<string name="category_connected_devices">연결된 장치</string>
|
<string name="category_connected_devices">연결된 장치</string>
|
||||||
<string name="category_not_paired_devices">페어링되지 않은 장치</string>
|
<string name="category_not_paired_devices">사용 가능한 장치</string>
|
||||||
<string name="category_remembered_devices">기억하는 장치</string>
|
<string name="category_remembered_devices">기억하는 장치</string>
|
||||||
<string name="plugins_failed_to_load">불러올 수 없는 플러그인(정보를 보려면 누르기)</string>
|
<string name="plugins_failed_to_load">불러올 수 없는 플러그인(정보를 보려면 누르기)</string>
|
||||||
<string name="device_menu_plugins">플러그인 선택</string>
|
|
||||||
<string name="device_menu_unpair">페어링 해제</string>
|
<string name="device_menu_unpair">페어링 해제</string>
|
||||||
<string name="device_not_reachable">장치에 접근할 수 없음</string>
|
<string name="device_not_reachable">페어링된 장치에 도달할 수 없음</string>
|
||||||
<string name="unknown_device">알 수 없는 장치</string>
|
<string name="unknown_device">알 수 없는 장치</string>
|
||||||
<string name="error_not_reachable">장치에 접근할 수 없음</string>
|
<string name="error_not_reachable">장치에 접근할 수 없음</string>
|
||||||
<string name="error_already_requested">페어링이 이미 요청됨</string>
|
<string name="error_already_requested">페어링이 이미 요청됨</string>
|
||||||
@@ -42,10 +49,17 @@
|
|||||||
<string name="error_invalid_key">잘못된 키 받음</string>
|
<string name="error_invalid_key">잘못된 키 받음</string>
|
||||||
<string name="pair_requested">페어링 요청됨</string>
|
<string name="pair_requested">페어링 요청됨</string>
|
||||||
<string name="pairing_request_from">%1s에서 페어링 요청</string>
|
<string name="pairing_request_from">%1s에서 페어링 요청</string>
|
||||||
<string name="incoming_file_title">%1s에서 페어링 요청</string>
|
<string name="received_url_title">%1s에서 링크 받음</string>
|
||||||
<string name="incoming_file_text">%s</string>
|
<string name="received_url_text">\'%1s\'을(를) 열려면 누르십시오</string>
|
||||||
|
<string name="incoming_file_title">%1s에서 파일 보냄</string>
|
||||||
|
<string name="incoming_file_text">%1s</string>
|
||||||
|
<string name="received_file_title">%1s에서 파일 받음</string>
|
||||||
|
<string name="received_file_text">\'%1s\'을(를) 열려면 누르십시오</string>
|
||||||
<string name="tap_to_answer">눌러서 응답하기</string>
|
<string name="tap_to_answer">눌러서 응답하기</string>
|
||||||
<string name="reconnect">다시 연결</string>
|
<string name="reconnect">다시 연결</string>
|
||||||
|
<string name="right_click">오른쪽 단추 누름 신호 보내기</string>
|
||||||
|
<string name="middle_click">가운데 단추 누름 신호 보내기</string>
|
||||||
|
<string name="show_keyboard">키보드 보이기</string>
|
||||||
<string name="device_not_paired">장치가 페어링되지 않음</string>
|
<string name="device_not_paired">장치가 페어링되지 않음</string>
|
||||||
<string name="request_pairing">페어링 요청</string>
|
<string name="request_pairing">페어링 요청</string>
|
||||||
<string name="pairing_accept">수락</string>
|
<string name="pairing_accept">수락</string>
|
||||||
@@ -60,25 +74,36 @@
|
|||||||
<string name="mpris_ff">빨리 감기</string>
|
<string name="mpris_ff">빨리 감기</string>
|
||||||
<string name="mpris_next">다음</string>
|
<string name="mpris_next">다음</string>
|
||||||
<string name="mpris_volume">음량</string>
|
<string name="mpris_volume">음량</string>
|
||||||
<string name="mpris_settings">멀티미디어 제어</string>
|
<string name="mpris_settings">멀티미디어 설정</string>
|
||||||
|
<string-array name="mpris_time_entries">
|
||||||
|
<item>10초</item>
|
||||||
|
<item>20초</item>
|
||||||
|
<item>30초</item>
|
||||||
|
<item>1분</item>
|
||||||
|
<item>2분</item>
|
||||||
|
</string-array>
|
||||||
<string name="share_to">다음으로 공유...</string>
|
<string name="share_to">다음으로 공유...</string>
|
||||||
<string name="protocol_version_older">이 장치의 프로토콜 버전이 오래되었습니다</string>
|
<string name="protocol_version_older">이 장치의 프로토콜 버전이 오래되었습니다</string>
|
||||||
<string name="protocol_version_newer">이 장치의 프로토콜 버전이 더 새롭습니다</string>
|
<string name="protocol_version_newer">이 장치의 프로토콜 버전이 더 새롭습니다</string>
|
||||||
<string name="general_settings">일반 설정</string>
|
<string name="general_settings">일반 설정</string>
|
||||||
<string name="plugin_settings">일반 설정</string>
|
<string name="plugin_settings">설정</string>
|
||||||
<string name="plugin_settings_with_name">설정 열기</string>
|
<string name="plugin_settings_with_name">%s 설정</string>
|
||||||
<string name="device_name">장치 이름</string>
|
<string name="device_name">장치 이름</string>
|
||||||
<string name="device_name_preference_summary">%s</string>
|
<string name="device_name_preference_summary">%s</string>
|
||||||
<string name="invalid_device_name">잘못된 장치 이름</string>
|
<string name="invalid_device_name">잘못된 장치 이름</string>
|
||||||
<string name="custom_devices_settings">장치 없음</string>
|
<string name="shareplugin_text_saved">텍스트 수신, 클립보드에 복사됨</string>
|
||||||
<string name="custom_device_list">장치 없음</string>
|
<string name="custom_devices_settings">사용자 정의 장치 목록</string>
|
||||||
<string name="custom_device_list_summary">장치 없음</string>
|
<string name="custom_device_list">IP로 장치 추가</string>
|
||||||
<string name="share_notification_preference">알림 동기화</string>
|
<string name="share_notification_preference">시끄러운 알림</string>
|
||||||
<string-array name="mpris_time_entries">
|
<string name="share_notification_preference_summary">파일을 받았을 때 진동과 소리로 알림</string>
|
||||||
<item>10 seconds</item>
|
<string name="sftp_internal_storage">내부 저장소</string>
|
||||||
<item>20 seconds</item>
|
<string name="sftp_all_files">모든 파일</string>
|
||||||
<item>30 seconds</item>
|
<string name="sftp_sdcard_num">SD 카드 %d</string>
|
||||||
<item>1 minute</item>
|
<string name="sftp_sdcard">SD 카드</string>
|
||||||
<item>2 minutes</item>
|
<string name="sftp_readonly">(읽기 전용)</string>
|
||||||
</string-array>
|
<string name="sftp_camera">카메라 사진</string>
|
||||||
|
<string name="add_host">호스트/IP 주소 추가</string>
|
||||||
|
<string name="no_players_connected">재생기를 찾을 수 없음</string>
|
||||||
|
<string name="custom_dev_list_help">장치를 자동으로 인식할 수 없을 때 이 옵션을 사용하십시오. IP 주소나 호스트 이름을 입력하고 단추를 누르면 목록에 추가합니다. 목록에 있는 항목을 누르면 삭제합니다.</string>
|
||||||
|
<string name="mpris_player_on_device">%2$s의 %1$s</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -1,5 +1,10 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string-array name="mousepad_tap_entries">
|
||||||
|
<item>Right click</item>
|
||||||
|
<item>Middle click</item>
|
||||||
|
<item>Nothing</item>
|
||||||
|
</string-array>
|
||||||
<string-array name="mpris_time_entries">
|
<string-array name="mpris_time_entries">
|
||||||
<item>10 seconds</item>
|
<item>10 seconds</item>
|
||||||
<item>20 seconds</item>
|
<item>20 seconds</item>
|
||||||
|
@@ -27,16 +27,21 @@
|
|||||||
<string name="send_ping">Ping verzenden</string>
|
<string name="send_ping">Ping verzenden</string>
|
||||||
<string name="open_mpris_controls">Afstandsbediening openen</string>
|
<string name="open_mpris_controls">Afstandsbediening openen</string>
|
||||||
<string name="open_mousepad">Afstandsbediening van touchpad openen</string>
|
<string name="open_mousepad">Afstandsbediening van touchpad openen</string>
|
||||||
<string name="mousepad_info">Veeg met een vinger op het scherm om de muiscursor te verplaatsen</string>
|
<string name="mousepad_info">Veeg met een vinger op het scherm om de muiscursor te verplaatsen. Tik om te klikken en gebruik twee/drie vingers voor rechter en middelste knop. Druk lang voor slepen en loslaten.</string>
|
||||||
<string name="mousepad_double_tap_settings_title">Klopactie met twee vingers instellen</string>
|
<string name="mousepad_double_tap_settings_title">Tikactie met twee vingers instellen</string>
|
||||||
<string name="mousepad_triple_tap_settings_title">Klopactie met drie vingers instellen</string>
|
<string name="mousepad_triple_tap_settings_title">Tikactie met drie vingers instellen</string>
|
||||||
<string name="mousepad_right_click">Rechter muisklik</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
<string name="mousepad_middle_click">Middelste muisklik</string>
|
<item>Rechter muisklik</item>
|
||||||
|
<item>Middelste muisklik</item>
|
||||||
|
<item>Niets</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="mousepad_double_default">rechts</string>
|
||||||
|
<string name="mousepad_triple_default">midden</string>
|
||||||
<string name="category_connected_devices">Verbonden apparaten</string>
|
<string name="category_connected_devices">Verbonden apparaten</string>
|
||||||
<string name="category_not_paired_devices">Geen gepaarde apparaten</string>
|
<string name="category_not_paired_devices">Beschikbare apparaten</string>
|
||||||
<string name="category_remembered_devices">Onthouden apparaten</string>
|
<string name="category_remembered_devices">Onthouden apparaten</string>
|
||||||
<string name="plugins_failed_to_load">Laden van plug-ins is mislukt (tap voor meer informatie):</string>
|
<string name="plugins_failed_to_load">Laden van plug-ins is mislukt (tap voor meer informatie):</string>
|
||||||
<string name="device_menu_plugins">Plug-ins selecteren</string>
|
<string name="device_menu_plugins">Plugin-instellingen</string>
|
||||||
<string name="device_menu_unpair">Paar uit elkaar halen</string>
|
<string name="device_menu_unpair">Paar uit elkaar halen</string>
|
||||||
<string name="device_not_reachable">Gepaard apparaat niet bereikbaar</string>
|
<string name="device_not_reachable">Gepaard apparaat niet bereikbaar</string>
|
||||||
<string name="unknown_device">Onbekend apparaat</string>
|
<string name="unknown_device">Onbekend apparaat</string>
|
||||||
@@ -54,8 +59,14 @@
|
|||||||
<string name="received_url_text">Tap om \'%1s\' te openen</string>
|
<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_title">Inkomend bestand van %1s</string>
|
||||||
<string name="incoming_file_text">%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_text">%1s</string>
|
||||||
<string name="received_file_title">Bestand ontvangen van %1s</string>
|
<string name="received_file_title">Bestand ontvangen van %1s</string>
|
||||||
<string name="received_file_text">Tap om \'%1s\' te openen</string>
|
<string name="received_file_text">Tap om \'%1s\' te openen</string>
|
||||||
|
<string name="sent_file_title">Bestand verzonden naar %1s</string>
|
||||||
|
<string name="sent_file_text">%1s</string>
|
||||||
|
<string name="sent_file_failed_title">Verzenden van bestand %1s is mislukt</string>
|
||||||
|
<string name="sent_file_failed_text">%1s</string>
|
||||||
<string name="tap_to_answer">Tap om te antwoorden</string>
|
<string name="tap_to_answer">Tap om te antwoorden</string>
|
||||||
<string name="reconnect">Opnieuw verbinden</string>
|
<string name="reconnect">Opnieuw verbinden</string>
|
||||||
<string name="right_click">Verstuur een rechter muisklik</string>
|
<string name="right_click">Verstuur een rechter muisklik</string>
|
||||||
@@ -76,8 +87,15 @@
|
|||||||
<string name="mpris_next">Volgende</string>
|
<string name="mpris_next">Volgende</string>
|
||||||
<string name="mpris_volume">Volume</string>
|
<string name="mpris_volume">Volume</string>
|
||||||
<string name="mpris_settings">Instellingen voor multimedia</string>
|
<string name="mpris_settings">Instellingen voor multimedia</string>
|
||||||
<string name="mpris_time_settings_title">Intervaltijd</string>
|
<string name="mpris_time_settings_title">Knoppen vooruit/terug</string>
|
||||||
<string name="mpris_time_settings_summary">Pas de tijd aan om snel voorwaarts te gaan or terug te spoelen in een multimedia bestand.</string>
|
<string name="mpris_time_settings_summary">Pas de tijd aan om snel voorwaarts/terug te gaan bij indrukken.</string>
|
||||||
|
<string-array name="mpris_time_entries">
|
||||||
|
<item>10 seconden</item>
|
||||||
|
<item>20 seconden</item>
|
||||||
|
<item>30 seconden</item>
|
||||||
|
<item>1 minuut</item>
|
||||||
|
<item>2 minuten</item>
|
||||||
|
</string-array>
|
||||||
<string name="share_to">Delen met...</string>
|
<string name="share_to">Delen met...</string>
|
||||||
<string name="protocol_version_older">Dit apparaat gebruikt een oude protocolversie</string>
|
<string name="protocol_version_older">Dit apparaat gebruikt een oude protocolversie</string>
|
||||||
<string name="protocol_version_newer">Dit apparaat gebruikt een nieuwere protocolversie</string>
|
<string name="protocol_version_newer">Dit apparaat gebruikt een nieuwere protocolversie</string>
|
||||||
@@ -89,10 +107,11 @@
|
|||||||
<string name="invalid_device_name">Ongeldige apparaatnaam</string>
|
<string name="invalid_device_name">Ongeldige apparaatnaam</string>
|
||||||
<string name="shareplugin_text_saved">Oontvangen tekst, opgeslagen op klembord</string>
|
<string name="shareplugin_text_saved">Oontvangen tekst, opgeslagen op klembord</string>
|
||||||
<string name="custom_devices_settings">Aangepaste lijst apparaten</string>
|
<string name="custom_devices_settings">Aangepaste lijst apparaten</string>
|
||||||
<string name="custom_device_list">Aangepaste lijst apparaten</string>
|
<string name="custom_device_list">Voeg apparaten toe per IP-adres</string>
|
||||||
<string name="custom_device_list_summary">Aangepaste lijst apparaten</string>
|
|
||||||
<string name="share_notification_preference">Luidruchtige meldingen</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_notification_preference_summary">Vibreer en speel een geluidje bij ontvangen van een bestand</string>
|
||||||
|
<string name="title_activity_notification_filter">Filter voor meldingen</string>
|
||||||
|
<string name="filter_apps_info">Meldingen zullen gesynchroniseerd worden voor de geselecteerde apps.</string>
|
||||||
<string name="sftp_internal_storage">Interne opslag</string>
|
<string name="sftp_internal_storage">Interne opslag</string>
|
||||||
<string name="sftp_all_files">Alle bestanden</string>
|
<string name="sftp_all_files">Alle bestanden</string>
|
||||||
<string name="sftp_sdcard_num">SD-kaartje %d</string>
|
<string name="sftp_sdcard_num">SD-kaartje %d</string>
|
||||||
@@ -100,12 +119,8 @@
|
|||||||
<string name="sftp_readonly">(alleen-lezen)</string>
|
<string name="sftp_readonly">(alleen-lezen)</string>
|
||||||
<string name="sftp_camera">Afbeeldingen van camera</string>
|
<string name="sftp_camera">Afbeeldingen van camera</string>
|
||||||
<string name="add_host">Host/IP-adres toevoegen</string>
|
<string name="add_host">Host/IP-adres toevoegen</string>
|
||||||
|
<string name="add_host_hint">Hostnaam of IP-adres</string>
|
||||||
|
<string name="no_players_connected">Geen spelers gevonden</string>
|
||||||
<string name="custom_dev_list_help">Deze optie alleen gebruiken als uw apparaat niet automatisch gedetecteerd wordt. Voer IP-adres of hostnaam hieronder in en klik op de knop om het aan de lijst toe te voegen. Klik op een bestaand item om het uit de lijst te verwijderen.</string>
|
<string name="custom_dev_list_help">Deze optie alleen gebruiken als uw apparaat niet automatisch gedetecteerd wordt. Voer IP-adres of hostnaam hieronder in en klik op de knop om het aan de lijst toe te voegen. Klik op een bestaand item om het uit de lijst te verwijderen.</string>
|
||||||
<string-array name="mpris_time_entries">
|
<string name="mpris_player_on_device">%1$s op %2$s</string>
|
||||||
<item>10 seconden</item>
|
|
||||||
<item>20 seconden</item>
|
|
||||||
<item>30 seconden</item>
|
|
||||||
<item>1 minuut</item>
|
|
||||||
<item>2 minuten</item>
|
|
||||||
</string-array>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -27,16 +27,21 @@
|
|||||||
<string name="send_ping">Wyślij ping</string>
|
<string name="send_ping">Wyślij ping</string>
|
||||||
<string name="open_mpris_controls">Otwórz zdalne sterowanie</string>
|
<string name="open_mpris_controls">Otwórz zdalne sterowanie</string>
|
||||||
<string name="open_mousepad">Otwórz sterowanie gładzikiem</string>
|
<string name="open_mousepad">Otwórz sterowanie gładzikiem</string>
|
||||||
<string name="mousepad_info">Przesuń kciukiem po ekranie, aby przesunąć wskaźnik myszy</string>
|
<string name="mousepad_info">Przesuń palcem po ekranie, aby przesunąć wskaźnik myszy. Stuknij, aby wywołać naciśniecie lewym przyciskiem myszy i użyj dwóch/trzech palców, aby wywołać naciśniecie prawym i środkowym przyciskiem myszy. Przyciśnij na dłużej, aby przeciągnąć i upuścić.</string>
|
||||||
<string name="mousepad_double_tap_settings_title">Ustaw działanie po dwukrotnym stuknięciu palcem</string>
|
<string name="mousepad_double_tap_settings_title">Ustaw działanie po dwukrotnym stuknięciu palcem</string>
|
||||||
<string name="mousepad_triple_tap_settings_title">Ustaw działanie po trzykrotnym stuknięciu palcem</string>
|
<string name="mousepad_triple_tap_settings_title">Ustaw działanie po trzykrotnym stuknięciu palcem</string>
|
||||||
<string name="mousepad_right_click">Naciśnięcie prawym</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
<string name="mousepad_middle_click">Naciśnięcie środkowym</string>
|
<item>Naciśnięcie prawym</item>
|
||||||
|
<item>Naciśnięcie środkowym</item>
|
||||||
|
<item>Nic</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="mousepad_double_default">prawo</string>
|
||||||
|
<string name="mousepad_triple_default">środek</string>
|
||||||
<string name="category_connected_devices">Podłączone urządzenia</string>
|
<string name="category_connected_devices">Podłączone urządzenia</string>
|
||||||
<string name="category_not_paired_devices">Brak sparowanych urządzeń</string>
|
<string name="category_not_paired_devices">Dostępne urządzenia</string>
|
||||||
<string name="category_remembered_devices">Zapamiętane urządzenia</string>
|
<string name="category_remembered_devices">Zapamiętane urządzenia</string>
|
||||||
<string name="plugins_failed_to_load">Nieudane wczytywanie wtyczki (stuknij po więcej informacji):</string>
|
<string name="plugins_failed_to_load">Nieudane wczytywanie wtyczki (stuknij po więcej informacji):</string>
|
||||||
<string name="device_menu_plugins">Wybierz wtyczki</string>
|
<string name="device_menu_plugins">Ustawienia wtyczki</string>
|
||||||
<string name="device_menu_unpair">Odparuj</string>
|
<string name="device_menu_unpair">Odparuj</string>
|
||||||
<string name="device_not_reachable">Sparowane urządzenie nieosiągalne</string>
|
<string name="device_not_reachable">Sparowane urządzenie nieosiągalne</string>
|
||||||
<string name="unknown_device">Nieznane urządzenie</string>
|
<string name="unknown_device">Nieznane urządzenie</string>
|
||||||
@@ -54,8 +59,14 @@
|
|||||||
<string name="received_url_text">Znacznik do otwarcia \'%1s\'</string>
|
<string name="received_url_text">Znacznik do otwarcia \'%1s\'</string>
|
||||||
<string name="incoming_file_title">Plik przychodzący od %1s</string>
|
<string name="incoming_file_title">Plik przychodzący od %1s</string>
|
||||||
<string name="incoming_file_text">%1s</string>
|
<string name="incoming_file_text">%1s</string>
|
||||||
|
<string name="outgoing_file_title">Wysyłanie pliku do %1s</string>
|
||||||
|
<string name="outgoing_file_text">%1s</string>
|
||||||
<string name="received_file_title">Odebrano plik od %1s</string>
|
<string name="received_file_title">Odebrano plik od %1s</string>
|
||||||
<string name="received_file_text">Znacznik do otwarcia \'%1s\'</string>
|
<string name="received_file_text">Znacznik do otwarcia \'%1s\'</string>
|
||||||
|
<string name="sent_file_title">Plik wysłano do %1s</string>
|
||||||
|
<string name="sent_file_text">%1s</string>
|
||||||
|
<string name="sent_file_failed_title">Nieudane wysyłanie pliku %1s</string>
|
||||||
|
<string name="sent_file_failed_text">%1s</string>
|
||||||
<string name="tap_to_answer">Stuknij, aby odpowiedzieć</string>
|
<string name="tap_to_answer">Stuknij, aby odpowiedzieć</string>
|
||||||
<string name="reconnect">Połącz ponownie</string>
|
<string name="reconnect">Połącz ponownie</string>
|
||||||
<string name="right_click">Wyślij naciskając prawym</string>
|
<string name="right_click">Wyślij naciskając prawym</string>
|
||||||
@@ -76,8 +87,15 @@
|
|||||||
<string name="mpris_next">Następny</string>
|
<string name="mpris_next">Następny</string>
|
||||||
<string name="mpris_volume">Głośność</string>
|
<string name="mpris_volume">Głośność</string>
|
||||||
<string name="mpris_settings">Ustawienia multimediów</string>
|
<string name="mpris_settings">Ustawienia multimediów</string>
|
||||||
<string name="mpris_time_settings_title">Czas okresu</string>
|
<string name="mpris_time_settings_title">Przyciski naprzód/wstecz</string>
|
||||||
<string name="mpris_time_settings_summary">Dostosuj czas do przewijania wprzód lub wstecz w pliku multimedialnym.</string>
|
<string name="mpris_time_settings_summary">Dostosuj czas do przewijania wprzód lub wstecz po naciśnięciu.</string>
|
||||||
|
<string-array name="mpris_time_entries">
|
||||||
|
<item>10 sekund</item>
|
||||||
|
<item>20 sekund</item>
|
||||||
|
<item>30 sekund</item>
|
||||||
|
<item>1 minuta</item>
|
||||||
|
<item>2 minuty</item>
|
||||||
|
</string-array>
|
||||||
<string name="share_to">Współdziel z...</string>
|
<string name="share_to">Współdziel z...</string>
|
||||||
<string name="protocol_version_older">Urządzenie to używa starej wersji protokołu</string>
|
<string name="protocol_version_older">Urządzenie to używa starej wersji protokołu</string>
|
||||||
<string name="protocol_version_newer">Urządzenie to używa nowszej wersji protokołu</string>
|
<string name="protocol_version_newer">Urządzenie to używa nowszej wersji protokołu</string>
|
||||||
@@ -89,10 +107,11 @@
|
|||||||
<string name="invalid_device_name">Nieprawidłowa nazwa urządzenia</string>
|
<string name="invalid_device_name">Nieprawidłowa nazwa urządzenia</string>
|
||||||
<string name="shareplugin_text_saved">Otrzymano tekst, zapisano do schowka</string>
|
<string name="shareplugin_text_saved">Otrzymano tekst, zapisano do schowka</string>
|
||||||
<string name="custom_devices_settings">Lista własnych urządzeń</string>
|
<string name="custom_devices_settings">Lista własnych urządzeń</string>
|
||||||
<string name="custom_device_list">Lista własnych urządzeń</string>
|
<string name="custom_device_list">Dodaj urządzenia po numerze IP</string>
|
||||||
<string name="custom_device_list_summary">Lista własnych urządzeń</string>
|
|
||||||
<string name="share_notification_preference">Hałaśliwe powiadomienia</string>
|
<string name="share_notification_preference">Hałaśliwe powiadomienia</string>
|
||||||
<string name="share_notification_preference_summary">Zadrżyj i odegraj dźwięk przy odebraniu pliku</string>
|
<string name="share_notification_preference_summary">Zadrżyj i odegraj dźwięk przy odebraniu pliku</string>
|
||||||
|
<string name="title_activity_notification_filter">Filtr powiadomień</string>
|
||||||
|
<string name="filter_apps_info">Powiadomienia zostaną zsynchronizowane z wybranymi aplikacjami.</string>
|
||||||
<string name="sftp_internal_storage">"Pamięć wewnętrzna "</string>
|
<string name="sftp_internal_storage">"Pamięć wewnętrzna "</string>
|
||||||
<string name="sftp_all_files">Wszystkie pliki</string>
|
<string name="sftp_all_files">Wszystkie pliki</string>
|
||||||
<string name="sftp_sdcard_num">Karta SD %d</string>
|
<string name="sftp_sdcard_num">Karta SD %d</string>
|
||||||
@@ -100,12 +119,8 @@
|
|||||||
<string name="sftp_readonly">(tylko do odczytu)</string>
|
<string name="sftp_readonly">(tylko do odczytu)</string>
|
||||||
<string name="sftp_camera">Zdjęcia z aparatu</string>
|
<string name="sftp_camera">Zdjęcia z aparatu</string>
|
||||||
<string name="add_host">Dodaj gospodarza/IP</string>
|
<string name="add_host">Dodaj gospodarza/IP</string>
|
||||||
|
<string name="add_host_hint">Gospodarz lub IP</string>
|
||||||
|
<string name="no_players_connected">Nie znaleziono żadnego odtwarzacza</string>
|
||||||
<string name="custom_dev_list_help">Użyj tej opcji tylko wtedy, gdy twoje urządzenie nie jest samoczynnie wykrywane. Podaj adres IP i nazwę gospodarza poniżej i dotknij przycisku, aby dodać je do listy. Dotknij istniejącego elementu, aby usunąć go z listy.</string>
|
<string name="custom_dev_list_help">Użyj tej opcji tylko wtedy, gdy twoje urządzenie nie jest samoczynnie wykrywane. Podaj adres IP i nazwę gospodarza poniżej i dotknij przycisku, aby dodać je do listy. Dotknij istniejącego elementu, aby usunąć go z listy.</string>
|
||||||
<string-array name="mpris_time_entries">
|
<string name="mpris_player_on_device">%1$s na %2$s</string>
|
||||||
<item>10 sekund</item>
|
|
||||||
<item>20 sekund</item>
|
|
||||||
<item>30 sekund</item>
|
|
||||||
<item>1 minuta</item>
|
|
||||||
<item>2 minuty</item>
|
|
||||||
</string-array>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -27,16 +27,21 @@
|
|||||||
<string name="send_ping">Enviar ping</string>
|
<string name="send_ping">Enviar ping</string>
|
||||||
<string name="open_mpris_controls">Abra o controle remoto</string>
|
<string name="open_mpris_controls">Abra o controle remoto</string>
|
||||||
<string name="open_mousepad">Abrir o controle do touchpad</string>
|
<string name="open_mousepad">Abrir o controle do touchpad</string>
|
||||||
<string name="mousepad_info">Mova um dedo na tela para mover o ponteiro do mouse</string>
|
<string name="mousepad_info">Mova um dedo pelo tela para mover o ponteiro do mouse. Dê um toque para clicar e use dois/três dedos para os botões da direita e do meio. Use uma pressão longa para arrastar e soltar.</string>
|
||||||
<string name="mousepad_double_tap_settings_title">Definir a ação do toque com dois dedos</string>
|
<string name="mousepad_double_tap_settings_title">Definir a ação do toque com dois dedos</string>
|
||||||
<string name="mousepad_triple_tap_settings_title">Definir a ação do toque com três dedos</string>
|
<string name="mousepad_triple_tap_settings_title">Definir a ação do toque com três dedos</string>
|
||||||
<string name="mousepad_right_click">Botão direito</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
<string name="mousepad_middle_click">Botão do meio</string>
|
<item>Botão direito</item>
|
||||||
|
<item>Botão do meio</item>
|
||||||
|
<item>Nada</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="mousepad_double_default">direita</string>
|
||||||
|
<string name="mousepad_triple_default">meio</string>
|
||||||
<string name="category_connected_devices">Dispositivos conectados</string>
|
<string name="category_connected_devices">Dispositivos conectados</string>
|
||||||
<string name="category_not_paired_devices">Dispositivos não emparelhados</string>
|
<string name="category_not_paired_devices">Dispositivos disponíveis</string>
|
||||||
<string name="category_remembered_devices">Dispositivos lembrados</string>
|
<string name="category_remembered_devices">Dispositivos lembrados</string>
|
||||||
<string name="plugins_failed_to_load">Plugins não carregados (toque para mais informações):</string>
|
<string name="plugins_failed_to_load">Plugins não carregados (toque para mais informações):</string>
|
||||||
<string name="device_menu_plugins">Selecionar plugins</string>
|
<string name="device_menu_plugins">Configurações do plugin</string>
|
||||||
<string name="device_menu_unpair">Cancelar emparelhamento</string>
|
<string name="device_menu_unpair">Cancelar emparelhamento</string>
|
||||||
<string name="device_not_reachable">O dispositivo pareado está inacessível</string>
|
<string name="device_not_reachable">O dispositivo pareado está inacessível</string>
|
||||||
<string name="unknown_device">Dispositivo desconhecido</string>
|
<string name="unknown_device">Dispositivo desconhecido</string>
|
||||||
@@ -54,8 +59,14 @@
|
|||||||
<string name="received_url_text">Toque para abrir o \'%1s\'</string>
|
<string name="received_url_text">Toque para abrir o \'%1s\'</string>
|
||||||
<string name="incoming_file_title">Arquivo recebido de %1s</string>
|
<string name="incoming_file_title">Arquivo recebido de %1s</string>
|
||||||
<string name="incoming_file_text">%1s</string>
|
<string name="incoming_file_text">%1s</string>
|
||||||
|
<string name="outgoing_file_title">Enviando arquivo para %1s</string>
|
||||||
|
<string name="outgoing_file_text">%1s</string>
|
||||||
<string name="received_file_title">Arquivo recebido de %1s</string>
|
<string name="received_file_title">Arquivo recebido de %1s</string>
|
||||||
<string name="received_file_text">Toque para abrir o \'%1s\'</string>
|
<string name="received_file_text">Toque para abrir o \'%1s\'</string>
|
||||||
|
<string name="sent_file_title">Enviar arquivo para %1s</string>
|
||||||
|
<string name="sent_file_text">%1s</string>
|
||||||
|
<string name="sent_file_failed_title">Falha ao enviar o arquivo %1s</string>
|
||||||
|
<string name="sent_file_failed_text">%1s</string>
|
||||||
<string name="tap_to_answer">Toque para responder</string>
|
<string name="tap_to_answer">Toque para responder</string>
|
||||||
<string name="reconnect">Reconectar</string>
|
<string name="reconnect">Reconectar</string>
|
||||||
<string name="right_click">Enviar um Botão Direito</string>
|
<string name="right_click">Enviar um Botão Direito</string>
|
||||||
@@ -76,8 +87,15 @@
|
|||||||
<string name="mpris_next">Próximo</string>
|
<string name="mpris_next">Próximo</string>
|
||||||
<string name="mpris_volume">Volume</string>
|
<string name="mpris_volume">Volume</string>
|
||||||
<string name="mpris_settings">Configurações de multimídia</string>
|
<string name="mpris_settings">Configurações de multimídia</string>
|
||||||
<string name="mpris_time_settings_title">Intervalo de tempo</string>
|
<string name="mpris_time_settings_title">Botões para avançar/voltar</string>
|
||||||
<string name="mpris_time_settings_summary">Ajuste o tempo para avançar ou retroceder um arquivo multimídia.</string>
|
<string name="mpris_time_settings_summary">Ajuste o tempo para avançar ou retroceder quando pressionar.</string>
|
||||||
|
<string-array name="mpris_time_entries">
|
||||||
|
<item>10 segundos</item>
|
||||||
|
<item>20 segundos</item>
|
||||||
|
<item>30 segundos</item>
|
||||||
|
<item>1 minuto</item>
|
||||||
|
<item>2 minutos</item>
|
||||||
|
</string-array>
|
||||||
<string name="share_to">Compartilhar com...</string>
|
<string name="share_to">Compartilhar com...</string>
|
||||||
<string name="protocol_version_older">Este dispositivo usa uma versão antiga do protocolo</string>
|
<string name="protocol_version_older">Este dispositivo usa uma versão antiga do protocolo</string>
|
||||||
<string name="protocol_version_newer">Este dispositivo usa uma versão mais recente do protocolo</string>
|
<string name="protocol_version_newer">Este dispositivo usa uma versão mais recente do protocolo</string>
|
||||||
@@ -89,10 +107,11 @@
|
|||||||
<string name="invalid_device_name">Nome do dispositivo inválido</string>
|
<string name="invalid_device_name">Nome do dispositivo inválido</string>
|
||||||
<string name="shareplugin_text_saved">Texto recebido e salvo na área de transferência</string>
|
<string name="shareplugin_text_saved">Texto recebido e salvo na área de transferência</string>
|
||||||
<string name="custom_devices_settings">Lista de dispositivos personalizada</string>
|
<string name="custom_devices_settings">Lista de dispositivos personalizada</string>
|
||||||
<string name="custom_device_list">Lista de dispositivos personalizada</string>
|
<string name="custom_device_list">Adicionar dispositivos pelo IP</string>
|
||||||
<string name="custom_device_list_summary">Lista de dispositivos personalizada</string>
|
|
||||||
<string name="share_notification_preference">Notificações barulhentas</string>
|
<string name="share_notification_preference">Notificações barulhentas</string>
|
||||||
<string name="share_notification_preference_summary">Vibrar e tocar um som ao receber um arquivo</string>
|
<string name="share_notification_preference_summary">Vibrar e tocar um som ao receber um arquivo</string>
|
||||||
|
<string name="title_activity_notification_filter">Filtro de notificações</string>
|
||||||
|
<string name="filter_apps_info">As notificações serão sincronizadas para os aplicativos selecionados.</string>
|
||||||
<string name="sftp_internal_storage">Armazenamento interno</string>
|
<string name="sftp_internal_storage">Armazenamento interno</string>
|
||||||
<string name="sftp_all_files">Todos os arquivos</string>
|
<string name="sftp_all_files">Todos os arquivos</string>
|
||||||
<string name="sftp_sdcard_num">Cartão SD %d</string>
|
<string name="sftp_sdcard_num">Cartão SD %d</string>
|
||||||
@@ -100,12 +119,8 @@
|
|||||||
<string name="sftp_readonly">(somente leitura)</string>
|
<string name="sftp_readonly">(somente leitura)</string>
|
||||||
<string name="sftp_camera">Imagens da câmera</string>
|
<string name="sftp_camera">Imagens da câmera</string>
|
||||||
<string name="add_host">Adicionar máquina/IP</string>
|
<string name="add_host">Adicionar máquina/IP</string>
|
||||||
|
<string name="add_host_hint">Máquina ou IP</string>
|
||||||
|
<string name="no_players_connected">Nenhum reprodutor encontrado</string>
|
||||||
<string name="custom_dev_list_help">Use esta opção apenas se o seu dispositivo não for detectado automaticamente. Digite o endereço IP ou nome da máquina no campo abaixo e toque o botão para adicioná-lo à lista. Toque em um item existente para removê-lo da lista.</string>
|
<string name="custom_dev_list_help">Use esta opção apenas se o seu dispositivo não for detectado automaticamente. Digite o endereço IP ou nome da máquina no campo abaixo e toque o botão para adicioná-lo à lista. Toque em um item existente para removê-lo da lista.</string>
|
||||||
<string-array name="mpris_time_entries">
|
<string name="mpris_player_on_device">%1$s em %2$s</string>
|
||||||
<item>10 segundos</item>
|
|
||||||
<item>20 segundos</item>
|
|
||||||
<item>30 segundos</item>
|
|
||||||
<item>1 minuto</item>
|
|
||||||
<item>2 minutos</item>
|
|
||||||
</string-array>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -27,16 +27,21 @@
|
|||||||
<string name="send_ping">Enviar um pedido de contacto</string>
|
<string name="send_ping">Enviar um pedido de contacto</string>
|
||||||
<string name="open_mpris_controls">Abrir o comando à distância</string>
|
<string name="open_mpris_controls">Abrir o comando à distância</string>
|
||||||
<string name="open_mousepad">Abrir o controlo do painel do rato</string>
|
<string name="open_mousepad">Abrir o controlo do painel do rato</string>
|
||||||
<string name="mousepad_info">Mova um dedo no ecrã para mover o cursor do rato</string>
|
<string name="mousepad_info">Mova um dedo pelo ecrã para mover o cursor do rato. Dê um toque para carregar no botão esquerdo e use dois/três dedos para os botões direito e do meio. Use uma pressão longa para arrastar e largar.</string>
|
||||||
<string name="mousepad_double_tap_settings_title">Definir a Acção do Toque com Dois Dedos</string>
|
<string name="mousepad_double_tap_settings_title">Definir a acção do toque com dois dedos</string>
|
||||||
<string name="mousepad_triple_tap_settings_title">Definir a Acção do Toque com Três Dedos</string>
|
<string name="mousepad_triple_tap_settings_title">Definir a acção do toque com três dedos</string>
|
||||||
<string name="mousepad_right_click">Botão direito</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
<string name="mousepad_middle_click">Botão do meio</string>
|
<item>Botão direito</item>
|
||||||
|
<item>Botão do meio</item>
|
||||||
|
<item>Nada</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="mousepad_double_default">direita</string>
|
||||||
|
<string name="mousepad_triple_default">meio</string>
|
||||||
<string name="category_connected_devices">Dispositivos ligados</string>
|
<string name="category_connected_devices">Dispositivos ligados</string>
|
||||||
<string name="category_not_paired_devices">Dispositivos não emparelhados</string>
|
<string name="category_not_paired_devices">Dispositivos disponíveis</string>
|
||||||
<string name="category_remembered_devices">Dispositivos recordados</string>
|
<string name="category_remembered_devices">Dispositivos recordados</string>
|
||||||
<string name="plugins_failed_to_load">Não foi possível carregar os \'plugin\' (toque para mais informações):</string>
|
<string name="plugins_failed_to_load">Não foi possível carregar os \'plugin\' (toque para mais informações):</string>
|
||||||
<string name="device_menu_plugins">Seleccionar os \'plugins\'</string>
|
<string name="device_menu_plugins">Configuração do \'plugin\'</string>
|
||||||
<string name="device_menu_unpair">Desemparelhar</string>
|
<string name="device_menu_unpair">Desemparelhar</string>
|
||||||
<string name="device_not_reachable">O dispositivo emparelhado está inacessível</string>
|
<string name="device_not_reachable">O dispositivo emparelhado está inacessível</string>
|
||||||
<string name="unknown_device">Dispositivo desconhecido</string>
|
<string name="unknown_device">Dispositivo desconhecido</string>
|
||||||
@@ -54,8 +59,14 @@
|
|||||||
<string name="received_url_text">Toque para abrir o \'%1s\'</string>
|
<string name="received_url_text">Toque para abrir o \'%1s\'</string>
|
||||||
<string name="incoming_file_title">Ficheiro recebido de %1s</string>
|
<string name="incoming_file_title">Ficheiro recebido de %1s</string>
|
||||||
<string name="incoming_file_text">%1s</string>
|
<string name="incoming_file_text">%1s</string>
|
||||||
|
<string name="outgoing_file_title">A enviar o ficheiro para o %1s</string>
|
||||||
|
<string name="outgoing_file_text">%1s</string>
|
||||||
<string name="received_file_title">Ficheiro recebido de %1s</string>
|
<string name="received_file_title">Ficheiro recebido de %1s</string>
|
||||||
<string name="received_file_text">Toque para abrir o \'%1s\'</string>
|
<string name="received_file_text">Toque para abrir o \'%1s\'</string>
|
||||||
|
<string name="sent_file_title">O ficheiro foi enviado para %1s</string>
|
||||||
|
<string name="sent_file_text">%1s</string>
|
||||||
|
<string name="sent_file_failed_title">Não foi possível enviar o ficheiro %1s</string>
|
||||||
|
<string name="sent_file_failed_text">%1s</string>
|
||||||
<string name="tap_to_answer">Toque para responder</string>
|
<string name="tap_to_answer">Toque para responder</string>
|
||||||
<string name="reconnect">Ligar de Novo</string>
|
<string name="reconnect">Ligar de Novo</string>
|
||||||
<string name="right_click">Enviar um Botão Direito</string>
|
<string name="right_click">Enviar um Botão Direito</string>
|
||||||
@@ -76,8 +87,15 @@
|
|||||||
<string name="mpris_next">Seguinte</string>
|
<string name="mpris_next">Seguinte</string>
|
||||||
<string name="mpris_volume">Volume</string>
|
<string name="mpris_volume">Volume</string>
|
||||||
<string name="mpris_settings">Configuração Multimédia</string>
|
<string name="mpris_settings">Configuração Multimédia</string>
|
||||||
<string name="mpris_time_settings_title">Tempo do Intervalo</string>
|
<string name="mpris_time_settings_title">Botões para avançar/recuar</string>
|
||||||
<string name="mpris_time_settings_summary">Ajusta o tempo de avanço ou de recuo de um ficheiro multimédia.</string>
|
<string name="mpris_time_settings_summary">Ajusta o tempo para o avanço/recuo quando pressionar.</string>
|
||||||
|
<string-array name="mpris_time_entries">
|
||||||
|
<item>10 segundos</item>
|
||||||
|
<item>20 segundos</item>
|
||||||
|
<item>30 segundos</item>
|
||||||
|
<item>1 minuto</item>
|
||||||
|
<item>2 minutos</item>
|
||||||
|
</string-array>
|
||||||
<string name="share_to">Partilhar Com...</string>
|
<string name="share_to">Partilhar Com...</string>
|
||||||
<string name="protocol_version_older">Este dispositivo usa uma versão antiga do protocolo</string>
|
<string name="protocol_version_older">Este dispositivo usa uma versão antiga do protocolo</string>
|
||||||
<string name="protocol_version_newer">Este dispositivo usa uma versão mais recente do protocolo</string>
|
<string name="protocol_version_newer">Este dispositivo usa uma versão mais recente do protocolo</string>
|
||||||
@@ -89,10 +107,11 @@
|
|||||||
<string name="invalid_device_name">Nome do dispositivo inválido</string>
|
<string name="invalid_device_name">Nome do dispositivo inválido</string>
|
||||||
<string name="shareplugin_text_saved">Texto recebido e guardado na área de transferência</string>
|
<string name="shareplugin_text_saved">Texto recebido e guardado na área de transferência</string>
|
||||||
<string name="custom_devices_settings">Lista de dispositivos personalizada</string>
|
<string name="custom_devices_settings">Lista de dispositivos personalizada</string>
|
||||||
<string name="custom_device_list">Lista de dispositivos personalizada</string>
|
<string name="custom_device_list">Adicionar dispositivos pelo IP</string>
|
||||||
<string name="custom_device_list_summary">Lista de dispositivos personalizada</string>
|
|
||||||
<string name="share_notification_preference">Notificações com ruído</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_notification_preference_summary">Vibrar e tocar um som ao receber um ficheiro</string>
|
||||||
|
<string name="title_activity_notification_filter">Filtro de notificações</string>
|
||||||
|
<string name="filter_apps_info">As notificações serão sincronizadas para as aplicações seleccionadas.</string>
|
||||||
<string name="sftp_internal_storage">Armazenamento interno</string>
|
<string name="sftp_internal_storage">Armazenamento interno</string>
|
||||||
<string name="sftp_all_files">Todos os ficheiros</string>
|
<string name="sftp_all_files">Todos os ficheiros</string>
|
||||||
<string name="sftp_sdcard_num">Cartão SD %d</string>
|
<string name="sftp_sdcard_num">Cartão SD %d</string>
|
||||||
@@ -100,12 +119,8 @@
|
|||||||
<string name="sftp_readonly">(apenas para leitura)</string>
|
<string name="sftp_readonly">(apenas para leitura)</string>
|
||||||
<string name="sftp_camera">Fotografias</string>
|
<string name="sftp_camera">Fotografias</string>
|
||||||
<string name="add_host">Adicionar uma máquina/IP</string>
|
<string name="add_host">Adicionar uma máquina/IP</string>
|
||||||
|
<string name="add_host_hint">Nome ou IP da máquina</string>
|
||||||
|
<string name="no_players_connected">Não foram encontrados leitores</string>
|
||||||
<string name="custom_dev_list_help">Use esta opção apenas se o seu dispositivo não for detectado automaticamente. Indique o endereço IP ou nome da máquina em baixo e carregue no botão para a adicionar à lista. Carregue sobre um item existente para o remover da lista.</string>
|
<string name="custom_dev_list_help">Use esta opção apenas se o seu dispositivo não for detectado automaticamente. Indique o endereço IP ou nome da máquina em baixo e carregue no botão para a adicionar à lista. Carregue sobre um item existente para o remover da lista.</string>
|
||||||
<string-array name="mpris_time_entries">
|
<string name="mpris_player_on_device">%1$s em %2$s</string>
|
||||||
<item>10 segundos</item>
|
|
||||||
<item>20 segundos</item>
|
|
||||||
<item>30 segundos</item>
|
|
||||||
<item>1 minuto</item>
|
|
||||||
<item>2 minutos</item>
|
|
||||||
</string-array>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -8,7 +8,6 @@
|
|||||||
<string name="pref_plugin_sftp_desc">Vă permite să răsfoiți de la distanță sistemul de fișiere al dispozitivului</string>
|
<string name="pref_plugin_sftp_desc">Vă permite să răsfoiți de la distanță sistemul de fișiere al dispozitivului</string>
|
||||||
<string name="pref_plugin_clipboard">Sincronizare clipboard</string>
|
<string name="pref_plugin_clipboard">Sincronizare clipboard</string>
|
||||||
<string name="pref_plugin_clipboard_desc">Partajează conținutul clipboardului</string>
|
<string name="pref_plugin_clipboard_desc">Partajează conținutul clipboardului</string>
|
||||||
<string name="pref_plugin_mousepad">Control de la distanță</string>
|
|
||||||
<string name="pref_plugin_mpris">Controale multimedia distante</string>
|
<string name="pref_plugin_mpris">Controale multimedia distante</string>
|
||||||
<string name="pref_plugin_mpris_desc">Controlați audio/video de pe telefon</string>
|
<string name="pref_plugin_mpris_desc">Controlați audio/video de pe telefon</string>
|
||||||
<string name="pref_plugin_ping">Ping</string>
|
<string name="pref_plugin_ping">Ping</string>
|
||||||
@@ -23,14 +22,15 @@
|
|||||||
<string name="no_permissions">Trebuie să acordați permisiunea pentru accesarea notificărilor</string>
|
<string name="no_permissions">Trebuie să acordați permisiunea pentru accesarea notificărilor</string>
|
||||||
<string name="send_ping">Trimite ping</string>
|
<string name="send_ping">Trimite ping</string>
|
||||||
<string name="open_mpris_controls">Deschide controlul de la distanță</string>
|
<string name="open_mpris_controls">Deschide controlul de la distanță</string>
|
||||||
<string name="open_mousepad">Deschide controlul de la distanță</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
|
<item>Right click</item>
|
||||||
|
<item>Middle click</item>
|
||||||
|
<item>Nothing</item>
|
||||||
|
</string-array>
|
||||||
<string name="category_connected_devices">Dispozitive conectate</string>
|
<string name="category_connected_devices">Dispozitive conectate</string>
|
||||||
<string name="category_not_paired_devices">Dispozitive neasociate</string>
|
|
||||||
<string name="category_remembered_devices">Dispozitive memorizate</string>
|
<string name="category_remembered_devices">Dispozitive memorizate</string>
|
||||||
<string name="plugins_failed_to_load">Încărcarea extensiilor a eșuat (atingeți pentru mai multe informații):</string>
|
<string name="plugins_failed_to_load">Încărcarea extensiilor a eșuat (atingeți pentru mai multe informații):</string>
|
||||||
<string name="device_menu_plugins">Alege extensii</string>
|
|
||||||
<string name="device_menu_unpair">Dezasociază</string>
|
<string name="device_menu_unpair">Dezasociază</string>
|
||||||
<string name="device_not_reachable">Dispozitivul nu e accesibil</string>
|
|
||||||
<string name="unknown_device">Dispozitiv necunoscut</string>
|
<string name="unknown_device">Dispozitiv necunoscut</string>
|
||||||
<string name="error_not_reachable">Dispozitivul nu e accesibil</string>
|
<string name="error_not_reachable">Dispozitivul nu e accesibil</string>
|
||||||
<string name="error_already_requested">Asocierea a fost cerută deja</string>
|
<string name="error_already_requested">Asocierea a fost cerută deja</string>
|
||||||
@@ -42,8 +42,6 @@
|
|||||||
<string name="error_invalid_key">Cheie nevalidă recepționată</string>
|
<string name="error_invalid_key">Cheie nevalidă recepționată</string>
|
||||||
<string name="pair_requested">Asociere cerută</string>
|
<string name="pair_requested">Asociere cerută</string>
|
||||||
<string name="pairing_request_from">Cerere de asociere de la %1s</string>
|
<string name="pairing_request_from">Cerere de asociere de la %1s</string>
|
||||||
<string name="incoming_file_title">Cerere de asociere de la %1s</string>
|
|
||||||
<string name="incoming_file_text">%s</string>
|
|
||||||
<string name="tap_to_answer">Atingeți pentru a răspunde</string>
|
<string name="tap_to_answer">Atingeți pentru a răspunde</string>
|
||||||
<string name="reconnect">Reconectează</string>
|
<string name="reconnect">Reconectează</string>
|
||||||
<string name="device_not_paired">Dispozitiv neasociat</string>
|
<string name="device_not_paired">Dispozitiv neasociat</string>
|
||||||
@@ -60,20 +58,6 @@
|
|||||||
<string name="mpris_ff">Derulare rapidă înainte</string>
|
<string name="mpris_ff">Derulare rapidă înainte</string>
|
||||||
<string name="mpris_next">Următor</string>
|
<string name="mpris_next">Următor</string>
|
||||||
<string name="mpris_volume">Volum</string>
|
<string name="mpris_volume">Volum</string>
|
||||||
<string name="mpris_settings">Controale multimedia distante</string>
|
|
||||||
<string name="share_to">Partajează cu...</string>
|
|
||||||
<string name="protocol_version_older">Acest dispozitiv folosește o versiune veche a protocolului</string>
|
|
||||||
<string name="protocol_version_newer">Acest dispozitiv folosește o versiune mai nouă a protocolului</string>
|
|
||||||
<string name="general_settings">Configurări generale</string>
|
|
||||||
<string name="plugin_settings">Configurări generale</string>
|
|
||||||
<string name="plugin_settings_with_name">Deschide configurările</string>
|
|
||||||
<string name="device_name">Denumire dispozitiv</string>
|
|
||||||
<string name="device_name_preference_summary">%s</string>
|
|
||||||
<string name="invalid_device_name">Denumire nevalidă a dispozitivului</string>
|
|
||||||
<string name="custom_devices_settings">Niciun dispozitiv</string>
|
|
||||||
<string name="custom_device_list">Niciun dispozitiv</string>
|
|
||||||
<string name="custom_device_list_summary">Niciun dispozitiv</string>
|
|
||||||
<string name="share_notification_preference">Sincronizare notificări</string>
|
|
||||||
<string-array name="mpris_time_entries">
|
<string-array name="mpris_time_entries">
|
||||||
<item>10 seconds</item>
|
<item>10 seconds</item>
|
||||||
<item>20 seconds</item>
|
<item>20 seconds</item>
|
||||||
@@ -81,4 +65,11 @@
|
|||||||
<item>1 minute</item>
|
<item>1 minute</item>
|
||||||
<item>2 minutes</item>
|
<item>2 minutes</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
<string name="share_to">Partajează cu...</string>
|
||||||
|
<string name="protocol_version_older">Acest dispozitiv folosește o versiune veche a protocolului</string>
|
||||||
|
<string name="protocol_version_newer">Acest dispozitiv folosește o versiune mai nouă a protocolului</string>
|
||||||
|
<string name="general_settings">Configurări generale</string>
|
||||||
|
<string name="device_name">Denumire dispozitiv</string>
|
||||||
|
<string name="device_name_preference_summary">%s</string>
|
||||||
|
<string name="invalid_device_name">Denumire nevalidă a dispozitivului</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -6,7 +6,6 @@
|
|||||||
<string name="pref_plugin_battery_desc">Периодически сообщать о состоянии батареи</string>
|
<string name="pref_plugin_battery_desc">Периодически сообщать о состоянии батареи</string>
|
||||||
<string name="pref_plugin_clipboard">Синхронизация буфера обмена</string>
|
<string name="pref_plugin_clipboard">Синхронизация буфера обмена</string>
|
||||||
<string name="pref_plugin_clipboard_desc">Сделать содержимое буфера обмена общим</string>
|
<string name="pref_plugin_clipboard_desc">Сделать содержимое буфера обмена общим</string>
|
||||||
<string name="pref_plugin_mousepad">Дистанционное управление</string>
|
|
||||||
<string name="pref_plugin_mpris">ДУ для мультимедия</string>
|
<string name="pref_plugin_mpris">ДУ для мультимедия</string>
|
||||||
<string name="pref_plugin_mpris_desc">Управление аудио/видео с устройства</string>
|
<string name="pref_plugin_mpris_desc">Управление аудио/видео с устройства</string>
|
||||||
<string name="pref_plugin_ping">Пинг</string>
|
<string name="pref_plugin_ping">Пинг</string>
|
||||||
@@ -21,14 +20,15 @@
|
|||||||
<string name="no_permissions">Вы должны разрешить доступ к уведомлениям</string>
|
<string name="no_permissions">Вы должны разрешить доступ к уведомлениям</string>
|
||||||
<string name="send_ping">Послать пинг</string>
|
<string name="send_ping">Послать пинг</string>
|
||||||
<string name="open_mpris_controls">Открыть дистанционное управление</string>
|
<string name="open_mpris_controls">Открыть дистанционное управление</string>
|
||||||
<string name="open_mousepad">Открыть дистанционное управление</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
|
<item>Right click</item>
|
||||||
|
<item>Middle click</item>
|
||||||
|
<item>Nothing</item>
|
||||||
|
</string-array>
|
||||||
<string name="category_connected_devices">Подключённые устройства</string>
|
<string name="category_connected_devices">Подключённые устройства</string>
|
||||||
<string name="category_not_paired_devices">Не спаренные устройства</string>
|
|
||||||
<string name="category_remembered_devices">Запомненные устройства</string>
|
<string name="category_remembered_devices">Запомненные устройства</string>
|
||||||
<string name="plugins_failed_to_load">Сбой загрузки следующих модулей (прикоснитесь чтобы получить подробности):</string>
|
<string name="plugins_failed_to_load">Сбой загрузки следующих модулей (прикоснитесь чтобы получить подробности):</string>
|
||||||
<string name="device_menu_plugins">Выбрать модули</string>
|
|
||||||
<string name="device_menu_unpair">Разделить спаренные устройства</string>
|
<string name="device_menu_unpair">Разделить спаренные устройства</string>
|
||||||
<string name="device_not_reachable">Устройство недоступно</string>
|
|
||||||
<string name="unknown_device">Неизвестное устройство</string>
|
<string name="unknown_device">Неизвестное устройство</string>
|
||||||
<string name="error_not_reachable">Устройство недоступно</string>
|
<string name="error_not_reachable">Устройство недоступно</string>
|
||||||
<string name="error_already_requested">Запрос на спаривание уже был сделан</string>
|
<string name="error_already_requested">Запрос на спаривание уже был сделан</string>
|
||||||
@@ -40,7 +40,6 @@
|
|||||||
<string name="error_invalid_key">Недопустимый получатель ключа</string>
|
<string name="error_invalid_key">Недопустимый получатель ключа</string>
|
||||||
<string name="pair_requested">Запрошено спаривание</string>
|
<string name="pair_requested">Запрошено спаривание</string>
|
||||||
<string name="pairing_request_from">Запрос на спаривание от %1s</string>
|
<string name="pairing_request_from">Запрос на спаривание от %1s</string>
|
||||||
<string name="incoming_file_title">Запрос на спаривание от %1s</string>
|
|
||||||
<string name="tap_to_answer">Коснитесь чтобы ответить</string>
|
<string name="tap_to_answer">Коснитесь чтобы ответить</string>
|
||||||
<string name="reconnect">Переподключить</string>
|
<string name="reconnect">Переподключить</string>
|
||||||
<string name="device_not_paired">Устройство не спарено</string>
|
<string name="device_not_paired">Устройство не спарено</string>
|
||||||
@@ -55,19 +54,6 @@
|
|||||||
<string name="mpris_previous">Предыдущий</string>
|
<string name="mpris_previous">Предыдущий</string>
|
||||||
<string name="mpris_next">Следующее</string>
|
<string name="mpris_next">Следующее</string>
|
||||||
<string name="mpris_volume">Громкость</string>
|
<string name="mpris_volume">Громкость</string>
|
||||||
<string name="mpris_settings">ДУ для мультимедия</string>
|
|
||||||
<string name="share_to">Сделать общим с...</string>
|
|
||||||
<string name="protocol_version_older">Это устройство использует старую версию протокола</string>
|
|
||||||
<string name="protocol_version_newer">Это устройство использует более свежую версию протокола</string>
|
|
||||||
<string name="general_settings">Открыть настройки</string>
|
|
||||||
<string name="plugin_settings">Открыть настройки</string>
|
|
||||||
<string name="plugin_settings_with_name">Открыть настройки</string>
|
|
||||||
<string name="device_name">Устройство не спарено</string>
|
|
||||||
<string name="invalid_device_name">Недопустимый получатель ключа</string>
|
|
||||||
<string name="custom_devices_settings">Нет устройств</string>
|
|
||||||
<string name="custom_device_list">Нет устройств</string>
|
|
||||||
<string name="custom_device_list_summary">Нет устройств</string>
|
|
||||||
<string name="share_notification_preference">Синхронизация уведомлений</string>
|
|
||||||
<string-array name="mpris_time_entries">
|
<string-array name="mpris_time_entries">
|
||||||
<item>10 seconds</item>
|
<item>10 seconds</item>
|
||||||
<item>20 seconds</item>
|
<item>20 seconds</item>
|
||||||
@@ -75,4 +61,7 @@
|
|||||||
<item>1 minute</item>
|
<item>1 minute</item>
|
||||||
<item>2 minutes</item>
|
<item>2 minutes</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
<string name="share_to">Сделать общим с...</string>
|
||||||
|
<string name="protocol_version_older">Это устройство использует старую версию протокола</string>
|
||||||
|
<string name="protocol_version_newer">Это устройство использует более свежую версию протокола</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -27,16 +27,20 @@
|
|||||||
<string name="send_ping">Poslať ping</string>
|
<string name="send_ping">Poslať ping</string>
|
||||||
<string name="open_mpris_controls">Otvoriť diaľkové ovládanie</string>
|
<string name="open_mpris_controls">Otvoriť diaľkové ovládanie</string>
|
||||||
<string name="open_mousepad">Otvoriť ovládanie touchpadu</string>
|
<string name="open_mousepad">Otvoriť ovládanie touchpadu</string>
|
||||||
<string name="mousepad_info">Presuňte prst na obrazovke na presun kurzora myši</string>
|
|
||||||
<string name="mousepad_double_tap_settings_title">Nastaviť akciu dvoch prstov</string>
|
<string name="mousepad_double_tap_settings_title">Nastaviť akciu dvoch prstov</string>
|
||||||
<string name="mousepad_triple_tap_settings_title">Nastaviť akciu troch prstov</string>
|
<string name="mousepad_triple_tap_settings_title">Nastaviť akciu troch prstov</string>
|
||||||
<string name="mousepad_right_click">Kliknutie pravým tlačidlom</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
<string name="mousepad_middle_click">Stredný klik</string>
|
<item>Kliknutie pravým tlačidlom</item>
|
||||||
|
<item>Stredný klik</item>
|
||||||
|
<item>Nič</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="mousepad_double_default">vpravo</string>
|
||||||
|
<string name="mousepad_triple_default">stred</string>
|
||||||
<string name="category_connected_devices">Pripojené zariadenia</string>
|
<string name="category_connected_devices">Pripojené zariadenia</string>
|
||||||
<string name="category_not_paired_devices">Nespárované zariadenia</string>
|
<string name="category_not_paired_devices">Dostupné zariadenia</string>
|
||||||
<string name="category_remembered_devices">Zapamätané zariadenia</string>
|
<string name="category_remembered_devices">Zapamätané zariadenia</string>
|
||||||
<string name="plugins_failed_to_load">Zlyhalo načítanie pluginov (tapnite pre viac info):</string>
|
<string name="plugins_failed_to_load">Zlyhalo načítanie pluginov (tapnite pre viac info):</string>
|
||||||
<string name="device_menu_plugins">Vybrať pluginy</string>
|
<string name="device_menu_plugins">Nastavenia pluginu</string>
|
||||||
<string name="device_menu_unpair">Odpárovať</string>
|
<string name="device_menu_unpair">Odpárovať</string>
|
||||||
<string name="device_not_reachable">Spárované zariadenie nedostupné</string>
|
<string name="device_not_reachable">Spárované zariadenie nedostupné</string>
|
||||||
<string name="unknown_device">Neznáme zariadenie</string>
|
<string name="unknown_device">Neznáme zariadenie</string>
|
||||||
@@ -54,8 +58,11 @@
|
|||||||
<string name="received_url_text">Ťuknite na otvorenie \'%1s\'</string>
|
<string name="received_url_text">Ťuknite na otvorenie \'%1s\'</string>
|
||||||
<string name="incoming_file_title">Prichádzajúci súbor od %s</string>
|
<string name="incoming_file_title">Prichádzajúci súbor od %s</string>
|
||||||
<string name="incoming_file_text">%1s</string>
|
<string name="incoming_file_text">%1s</string>
|
||||||
|
<string name="outgoing_file_text">%1s</string>
|
||||||
<string name="received_file_title">Prijatý súbor od %1s</string>
|
<string name="received_file_title">Prijatý súbor od %1s</string>
|
||||||
<string name="received_file_text">Ťuknite na otvorenie \'%1s\'</string>
|
<string name="received_file_text">Ťuknite na otvorenie \'%1s\'</string>
|
||||||
|
<string name="sent_file_text">%1s</string>
|
||||||
|
<string name="sent_file_failed_text">%1s</string>
|
||||||
<string name="tap_to_answer">Tapnite na odpoveď</string>
|
<string name="tap_to_answer">Tapnite na odpoveď</string>
|
||||||
<string name="reconnect">Znovu pripojiť</string>
|
<string name="reconnect">Znovu pripojiť</string>
|
||||||
<string name="right_click">Poslať kliknutie pravým</string>
|
<string name="right_click">Poslať kliknutie pravým</string>
|
||||||
@@ -76,8 +83,13 @@
|
|||||||
<string name="mpris_next">Nasledovné</string>
|
<string name="mpris_next">Nasledovné</string>
|
||||||
<string name="mpris_volume">Hlasitosť</string>
|
<string name="mpris_volume">Hlasitosť</string>
|
||||||
<string name="mpris_settings">Multimediálne nastavenia</string>
|
<string name="mpris_settings">Multimediálne nastavenia</string>
|
||||||
<string name="mpris_time_settings_title">Časový interval</string>
|
<string-array name="mpris_time_entries">
|
||||||
<string name="mpris_time_settings_summary">Prispôsobiť čas na pretáčanie dopredu alebo späť pre multimediálne súbory.</string>
|
<item>10 sekúnd</item>
|
||||||
|
<item>20 sekúnd</item>
|
||||||
|
<item>30 sekúnd</item>
|
||||||
|
<item>1 minúta</item>
|
||||||
|
<item>2 minúty</item>
|
||||||
|
</string-array>
|
||||||
<string name="share_to">Zdieľať pre...</string>
|
<string name="share_to">Zdieľať pre...</string>
|
||||||
<string name="protocol_version_older">Toto zariadenie používa starú verziu protokolu</string>
|
<string name="protocol_version_older">Toto zariadenie používa starú verziu protokolu</string>
|
||||||
<string name="protocol_version_newer">Toto zariadenie používa novšiu verziu protokolu</string>
|
<string name="protocol_version_newer">Toto zariadenie používa novšiu verziu protokolu</string>
|
||||||
@@ -89,8 +101,7 @@
|
|||||||
<string name="invalid_device_name">Neplatný názov zariadenia</string>
|
<string name="invalid_device_name">Neplatný názov zariadenia</string>
|
||||||
<string name="shareplugin_text_saved">Prijatý text, uložený do schránky</string>
|
<string name="shareplugin_text_saved">Prijatý text, uložený do schránky</string>
|
||||||
<string name="custom_devices_settings">Zoznam vlastných zariadení</string>
|
<string name="custom_devices_settings">Zoznam vlastných zariadení</string>
|
||||||
<string name="custom_device_list">Zoznam vlastných zariadení</string>
|
<string name="custom_device_list">Pridať zariadenia podľa IP</string>
|
||||||
<string name="custom_device_list_summary">Zoznam vlastných zariadení</string>
|
|
||||||
<string name="share_notification_preference">Hlučné pripomienky</string>
|
<string name="share_notification_preference">Hlučné pripomienky</string>
|
||||||
<string name="share_notification_preference_summary">Vibrovať a prehrať zvuk pri prijatí súboru</string>
|
<string name="share_notification_preference_summary">Vibrovať a prehrať zvuk pri prijatí súboru</string>
|
||||||
<string name="sftp_internal_storage">Interné úložisko</string>
|
<string name="sftp_internal_storage">Interné úložisko</string>
|
||||||
@@ -100,12 +111,7 @@
|
|||||||
<string name="sftp_readonly">(iba na čítanie)</string>
|
<string name="sftp_readonly">(iba na čítanie)</string>
|
||||||
<string name="sftp_camera">Obrázky fotoaparátu</string>
|
<string name="sftp_camera">Obrázky fotoaparátu</string>
|
||||||
<string name="add_host">Pridať hostiteľa/IP</string>
|
<string name="add_host">Pridať hostiteľa/IP</string>
|
||||||
|
<string name="no_players_connected">Nenašli sa žiadne prehrávače</string>
|
||||||
<string name="custom_dev_list_help">Túto voľbu použite iba vtedy, ak vaše zariadenie nie je automaticky detekované. Zadajte IP adresu alebo názov hostiteľa nižšie a kliknite na tlačidlo na pridanie do zoznamu. Kliknite na existujúcu položku na odstránenie jej zo zoznamu.</string>
|
<string name="custom_dev_list_help">Túto voľbu použite iba vtedy, ak vaše zariadenie nie je automaticky detekované. Zadajte IP adresu alebo názov hostiteľa nižšie a kliknite na tlačidlo na pridanie do zoznamu. Kliknite na existujúcu položku na odstránenie jej zo zoznamu.</string>
|
||||||
<string-array name="mpris_time_entries">
|
<string name="mpris_player_on_device">%1$s na %2$s</string>
|
||||||
<item>10 sekúnd</item>
|
|
||||||
<item>20 sekúnd</item>
|
|
||||||
<item>30 sekúnd</item>
|
|
||||||
<item>1 minúta</item>
|
|
||||||
<item>2 minúty</item>
|
|
||||||
</string-array>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -8,7 +8,8 @@
|
|||||||
<string name="pref_plugin_sftp_desc">Gör det möjligt att bläddra i telefonens filsystem från annan enhet</string>
|
<string name="pref_plugin_sftp_desc">Gör det möjligt att bläddra i telefonens filsystem från annan enhet</string>
|
||||||
<string name="pref_plugin_clipboard">Synkronisera klippbord</string>
|
<string name="pref_plugin_clipboard">Synkronisera klippbord</string>
|
||||||
<string name="pref_plugin_clipboard_desc">Dela klippbordets innehåll</string>
|
<string name="pref_plugin_clipboard_desc">Dela klippbordets innehåll</string>
|
||||||
<string name="pref_plugin_mousepad">Fjärrkontroll</string>
|
<string name="pref_plugin_mousepad">Fjärrinmatning</string>
|
||||||
|
<string name="pref_plugin_mousepad_desc">Använd telefonen som mus och tangentbord</string>
|
||||||
<string name="pref_plugin_mpris">Fjärrkontroll av multimedia</string>
|
<string name="pref_plugin_mpris">Fjärrkontroll av multimedia</string>
|
||||||
<string name="pref_plugin_mpris_desc">Styr ljud och video från telefonen</string>
|
<string name="pref_plugin_mpris_desc">Styr ljud och video från telefonen</string>
|
||||||
<string name="pref_plugin_ping">Ping</string>
|
<string name="pref_plugin_ping">Ping</string>
|
||||||
@@ -26,14 +27,21 @@
|
|||||||
<string name="send_ping">Skicka ping</string>
|
<string name="send_ping">Skicka ping</string>
|
||||||
<string name="open_mpris_controls">Öppna fjärrkontroll</string>
|
<string name="open_mpris_controls">Öppna fjärrkontroll</string>
|
||||||
<string name="open_mousepad">Öppna kontroll med tryckplatta</string>
|
<string name="open_mousepad">Öppna kontroll med tryckplatta</string>
|
||||||
<string name="mousepad_info">Flytta ett finger på skärmen för att flytta muspekaren</string>
|
<string name="mousepad_info">Flytta fingret på skärmen för att röra muspekaren. Rör för att klicka, och använd två eller tre fingrar för höger- och mittenknapparna. Använd en längre beröring för drag och släpp.</string>
|
||||||
<string name="mousepad_right_click">Skicka högerklick</string>
|
<string name="mousepad_double_tap_settings_title">Ställ in åtgärd vid två fingerberöringar</string>
|
||||||
<string name="mousepad_middle_click">Skicka mittenklick</string>
|
<string name="mousepad_triple_tap_settings_title">Ställ in åtgärd vid tre fingerberöringar</string>
|
||||||
|
<string-array name="mousepad_tap_entries">
|
||||||
|
<item>Högerklick</item>
|
||||||
|
<item>Mittenklick</item>
|
||||||
|
<item>Ingenting</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="mousepad_double_default">höger</string>
|
||||||
|
<string name="mousepad_triple_default">mitten</string>
|
||||||
<string name="category_connected_devices">Anslutna apparater</string>
|
<string name="category_connected_devices">Anslutna apparater</string>
|
||||||
<string name="category_not_paired_devices">Inga parade apparater</string>
|
<string name="category_not_paired_devices">Tillgängliga enheter</string>
|
||||||
<string name="category_remembered_devices">Ihågkomna apparater</string>
|
<string name="category_remembered_devices">Ihågkomna apparater</string>
|
||||||
<string name="plugins_failed_to_load">Misslyckades ladda insticksprogram (rör för mer information):</string>
|
<string name="plugins_failed_to_load">Misslyckades ladda insticksprogram (rör för mer information):</string>
|
||||||
<string name="device_menu_plugins">Välj insticksprogram</string>
|
<string name="device_menu_plugins">Inställningar av insticksprogram</string>
|
||||||
<string name="device_menu_unpair">Ta bort ihopparning</string>
|
<string name="device_menu_unpair">Ta bort ihopparning</string>
|
||||||
<string name="device_not_reachable">Ihopparad enhet kan inte nås</string>
|
<string name="device_not_reachable">Ihopparad enhet kan inte nås</string>
|
||||||
<string name="unknown_device">Okänd apparat</string>
|
<string name="unknown_device">Okänd apparat</string>
|
||||||
@@ -48,11 +56,17 @@
|
|||||||
<string name="pair_requested">Ihopparning begärd</string>
|
<string name="pair_requested">Ihopparning begärd</string>
|
||||||
<string name="pairing_request_from">Begäran om ihopparning från %1s</string>
|
<string name="pairing_request_from">Begäran om ihopparning från %1s</string>
|
||||||
<string name="received_url_title">Tog emot länk från %1s</string>
|
<string name="received_url_title">Tog emot länk från %1s</string>
|
||||||
<string name="received_url_text">Klicka för att öppna \'%1s\'</string>
|
<string name="received_url_text">Rör för att öppna \'%1s\'</string>
|
||||||
<string name="incoming_file_title">Inkommande fil från %1s</string>
|
<string name="incoming_file_title">Inkommande fil från %1s</string>
|
||||||
<string name="incoming_file_text">%1s</string>
|
<string name="incoming_file_text">%1s</string>
|
||||||
|
<string name="outgoing_file_title">Skickar fil till %1s</string>
|
||||||
|
<string name="outgoing_file_text">%1s</string>
|
||||||
<string name="received_file_title">Tog emot fil från %1s</string>
|
<string name="received_file_title">Tog emot fil från %1s</string>
|
||||||
<string name="received_file_text">Klicka för att öppna \'%1s\'</string>
|
<string name="received_file_text">Rör för att öppna \'%1s\'</string>
|
||||||
|
<string name="sent_file_title">Skickade fil till %1s</string>
|
||||||
|
<string name="sent_file_text">%1s</string>
|
||||||
|
<string name="sent_file_failed_title">Misslyckades skicka fil %1s</string>
|
||||||
|
<string name="sent_file_failed_text">%1s</string>
|
||||||
<string name="tap_to_answer">Rör för att svara</string>
|
<string name="tap_to_answer">Rör för att svara</string>
|
||||||
<string name="reconnect">Anslut igen</string>
|
<string name="reconnect">Anslut igen</string>
|
||||||
<string name="right_click">Skicka högerklick</string>
|
<string name="right_click">Skicka högerklick</string>
|
||||||
@@ -73,29 +87,8 @@
|
|||||||
<string name="mpris_next">Nästa</string>
|
<string name="mpris_next">Nästa</string>
|
||||||
<string name="mpris_volume">Volym</string>
|
<string name="mpris_volume">Volym</string>
|
||||||
<string name="mpris_settings">Multimediainställningar</string>
|
<string name="mpris_settings">Multimediainställningar</string>
|
||||||
<string name="mpris_time_settings_title">Intervalltid</string>
|
<string name="mpris_time_settings_title">Framåt- och bakåt-knappar</string>
|
||||||
<string name="mpris_time_settings_summary">Justera tiden för att snabbspola framåt eller tillbaka en multimediafil.</string>
|
<string name="mpris_time_settings_summary">Justera tiden för att snabbspola framåt eller tillbaka om nertryckt.</string>
|
||||||
<string name="share_to">Dela med...</string>
|
|
||||||
<string name="protocol_version_older">Apparaten använder en gammal protokollversion</string>
|
|
||||||
<string name="protocol_version_newer">Apparaten använder en nyare protokollversion</string>
|
|
||||||
<string name="general_settings">Allmänna inställningar</string>
|
|
||||||
<string name="plugin_settings">Inställningar</string>
|
|
||||||
<string name="plugin_settings_with_name">Öppna inställningarna</string>
|
|
||||||
<string name="device_name">Apparatnamn</string>
|
|
||||||
<string name="device_name_preference_summary">%s</string>
|
|
||||||
<string name="invalid_device_name">Ogiltigt apparatnamn</string>
|
|
||||||
<string name="shareplugin_text_saved">Tog emot text, spara på klippbordet</string>
|
|
||||||
<string name="custom_devices_settings">Inga apparater</string>
|
|
||||||
<string name="custom_device_list">Inga apparater</string>
|
|
||||||
<string name="custom_device_list_summary">Inga apparater</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="sftp_internal_storage">Intern lagring</string>
|
|
||||||
<string name="sftp_all_files">Alla filer</string>
|
|
||||||
<string name="sftp_sdcard_num">SD-kort %d</string>
|
|
||||||
<string name="sftp_sdcard">SD-kort</string>
|
|
||||||
<string name="sftp_readonly">(skrivskyddat)</string>
|
|
||||||
<string name="sftp_camera">Kamerabilder</string>
|
|
||||||
<string-array name="mpris_time_entries">
|
<string-array name="mpris_time_entries">
|
||||||
<item>10 sekunder</item>
|
<item>10 sekunder</item>
|
||||||
<item>20 sekunder</item>
|
<item>20 sekunder</item>
|
||||||
@@ -103,4 +96,31 @@
|
|||||||
<item>1 minut</item>
|
<item>1 minut</item>
|
||||||
<item>2 minuter</item>
|
<item>2 minuter</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
<string name="share_to">Dela med...</string>
|
||||||
|
<string name="protocol_version_older">Apparaten använder en gammal protokollversion</string>
|
||||||
|
<string name="protocol_version_newer">Apparaten använder en nyare protokollversion</string>
|
||||||
|
<string name="general_settings">Allmänna inställningar</string>
|
||||||
|
<string name="plugin_settings">Inställningar</string>
|
||||||
|
<string name="plugin_settings_with_name">Inställningar av %s</string>
|
||||||
|
<string name="device_name">Apparatnamn</string>
|
||||||
|
<string name="device_name_preference_summary">%s</string>
|
||||||
|
<string name="invalid_device_name">Ogiltigt apparatnamn</string>
|
||||||
|
<string name="shareplugin_text_saved">Tog emot text, spara på klippbordet</string>
|
||||||
|
<string name="custom_devices_settings">Egen apparatlista</string>
|
||||||
|
<string name="custom_device_list">Lägg till apparater enligt IP-adress</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="title_activity_notification_filter">Underrättelsefilter</string>
|
||||||
|
<string name="filter_apps_info">Underrättelser synkroniseras för markerade applikationer.</string>
|
||||||
|
<string name="sftp_internal_storage">Intern lagring</string>
|
||||||
|
<string name="sftp_all_files">Alla filer</string>
|
||||||
|
<string name="sftp_sdcard_num">SD-kort %d</string>
|
||||||
|
<string name="sftp_sdcard">SD-kort</string>
|
||||||
|
<string name="sftp_readonly">(skrivskyddat)</string>
|
||||||
|
<string name="sftp_camera">Kamerabilder</string>
|
||||||
|
<string name="add_host">Lägg till värddator/IP-adress</string>
|
||||||
|
<string name="add_host_hint">Värddatornamn eller IP-adress</string>
|
||||||
|
<string name="no_players_connected">Inga spelare hittades</string>
|
||||||
|
<string name="custom_dev_list_help">Använd bara alternativet om apparaten inte detekteras automatiskt. Skriv in IP-adress eller värddatornamn nedan och rör vid knappen för att lägga till den i listan. Rör vid ett befintligt objekt för att ta bort det från listan.</string>
|
||||||
|
<string name="mpris_player_on_device">%1$s på %2$s</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -27,16 +27,21 @@
|
|||||||
<string name="send_ping">Надіслати сигнал підтримання зв’язку</string>
|
<string name="send_ping">Надіслати сигнал підтримання зв’язку</string>
|
||||||
<string name="open_mpris_controls">Відкрити дистанційне керування</string>
|
<string name="open_mpris_controls">Відкрити дистанційне керування</string>
|
||||||
<string name="open_mousepad">Відкрити керування сенсорною панеллю</string>
|
<string name="open_mousepad">Відкрити керування сенсорною панеллю</string>
|
||||||
<string name="mousepad_info">Проведіть по екрану пальцем, щоб пересунути вказівник миші</string>
|
<string name="mousepad_info">Проведіть по екрану пальцем, щоб пересунути вказівник миші. Дотик одним пальцем означатиме клацання, дотиком двома або трьома пальцями можна імітувати праву і середню кнопки. Для перетягування зі скиданням скористайтеся тривалим натисканням.</string>
|
||||||
<string name="mousepad_double_tap_settings_title">Встановлення дії для торкання двома пальцями</string>
|
<string name="mousepad_double_tap_settings_title">Встановлення дії для торкання двома пальцями</string>
|
||||||
<string name="mousepad_triple_tap_settings_title">Встановлення дії для торкання трьома пальцями</string>
|
<string name="mousepad_triple_tap_settings_title">Встановлення дії для торкання трьома пальцями</string>
|
||||||
<string name="mousepad_right_click">Клацання правою</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
<string name="mousepad_middle_click">Клацання середньою</string>
|
<item>Клацання правою</item>
|
||||||
|
<item>Клацання середньою</item>
|
||||||
|
<item>Нічого</item>
|
||||||
|
</string-array>
|
||||||
|
<string name="mousepad_double_default">права</string>
|
||||||
|
<string name="mousepad_triple_default">середня</string>
|
||||||
<string name="category_connected_devices">З’єднані пристрої</string>
|
<string name="category_connected_devices">З’єднані пристрої</string>
|
||||||
<string name="category_not_paired_devices">Непов’язані пристрої</string>
|
<string name="category_not_paired_devices">Доступні пристрої</string>
|
||||||
<string name="category_remembered_devices">Відомі пристрої</string>
|
<string name="category_remembered_devices">Відомі пристрої</string>
|
||||||
<string name="plugins_failed_to_load">Додатки, які не вдалося завантажити (натисніть, щоб дізнатися більше):</string>
|
<string name="plugins_failed_to_load">Додатки, які не вдалося завантажити (натисніть, щоб дізнатися більше):</string>
|
||||||
<string name="device_menu_plugins">Виберіть додатки</string>
|
<string name="device_menu_plugins">Параметри додатків</string>
|
||||||
<string name="device_menu_unpair">Скасувати пов’язування</string>
|
<string name="device_menu_unpair">Скасувати пов’язування</string>
|
||||||
<string name="device_not_reachable">Немає доступу до пов’язаного пристрою</string>
|
<string name="device_not_reachable">Немає доступу до пов’язаного пристрою</string>
|
||||||
<string name="unknown_device">Невідомий пристрій</string>
|
<string name="unknown_device">Невідомий пристрій</string>
|
||||||
@@ -54,8 +59,14 @@
|
|||||||
<string name="received_url_text">Натисніть, щоб відкрити «%1s»</string>
|
<string name="received_url_text">Натисніть, щоб відкрити «%1s»</string>
|
||||||
<string name="incoming_file_title">Вхідний файл з %1s</string>
|
<string name="incoming_file_title">Вхідний файл з %1s</string>
|
||||||
<string name="incoming_file_text">%1s</string>
|
<string name="incoming_file_text">%1s</string>
|
||||||
|
<string name="outgoing_file_title">Надсилаємо файл до %1s</string>
|
||||||
|
<string name="outgoing_file_text">%1s</string>
|
||||||
<string name="received_file_title">Отримано файл з %1s</string>
|
<string name="received_file_title">Отримано файл з %1s</string>
|
||||||
<string name="received_file_text">Натисніть, щоб відкрити «%1s»</string>
|
<string name="received_file_text">Натисніть, щоб відкрити «%1s»</string>
|
||||||
|
<string name="sent_file_title">Файл надіслано до %1s</string>
|
||||||
|
<string name="sent_file_text">%1s</string>
|
||||||
|
<string name="sent_file_failed_title">Не вдалося надіслати файл %1s</string>
|
||||||
|
<string name="sent_file_failed_text">%1s</string>
|
||||||
<string name="tap_to_answer">Натисніть, щоб відповісти</string>
|
<string name="tap_to_answer">Натисніть, щоб відповісти</string>
|
||||||
<string name="reconnect">З\'єднати знову</string>
|
<string name="reconnect">З\'єднати знову</string>
|
||||||
<string name="right_click">Надіслати клацання правою кнопкою</string>
|
<string name="right_click">Надіслати клацання правою кнопкою</string>
|
||||||
@@ -76,8 +87,15 @@
|
|||||||
<string name="mpris_next">Далі</string>
|
<string name="mpris_next">Далі</string>
|
||||||
<string name="mpris_volume">Гучність</string>
|
<string name="mpris_volume">Гучність</string>
|
||||||
<string name="mpris_settings">Мультимедійні параметри</string>
|
<string name="mpris_settings">Мультимедійні параметри</string>
|
||||||
<string name="mpris_time_settings_title">Часовий інтервал</string>
|
<string name="mpris_time_settings_title">Кнопки «Вперед/Назад»</string>
|
||||||
<string name="mpris_time_settings_summary">Скоригувати час швидкого гортання вперед або назад у мультимедійному файлі.</string>
|
<string name="mpris_time_settings_summary">Скоригувати час швидкого гортання вперед або назад при натисканні.</string>
|
||||||
|
<string-array name="mpris_time_entries">
|
||||||
|
<item>10 секунд</item>
|
||||||
|
<item>20 секунд</item>
|
||||||
|
<item>30 секунд</item>
|
||||||
|
<item>1 хвилина</item>
|
||||||
|
<item>2 хвилини</item>
|
||||||
|
</string-array>
|
||||||
<string name="share_to">Спільно використовувати з…</string>
|
<string name="share_to">Спільно використовувати з…</string>
|
||||||
<string name="protocol_version_older">На цьому пристрої використовується стара версія протоколу</string>
|
<string name="protocol_version_older">На цьому пристрої використовується стара версія протоколу</string>
|
||||||
<string name="protocol_version_newer">На цьому пристрої використовується новіша версія протоколу</string>
|
<string name="protocol_version_newer">На цьому пристрої використовується новіша версія протоколу</string>
|
||||||
@@ -89,10 +107,11 @@
|
|||||||
<string name="invalid_device_name">Некоректна назва пристрою</string>
|
<string name="invalid_device_name">Некоректна назва пристрою</string>
|
||||||
<string name="shareplugin_text_saved">Отримано текст, збережено до буфера обміну даними</string>
|
<string name="shareplugin_text_saved">Отримано текст, збережено до буфера обміну даними</string>
|
||||||
<string name="custom_devices_settings">Список нетипових пристроїв</string>
|
<string name="custom_devices_settings">Список нетипових пристроїв</string>
|
||||||
<string name="custom_device_list">Список нетипових пристроїв</string>
|
<string name="custom_device_list">Додати пристрої за IP</string>
|
||||||
<string name="custom_device_list_summary">Список нетипових пристроїв</string>
|
|
||||||
<string name="share_notification_preference">Звукові сповіщення</string>
|
<string name="share_notification_preference">Звукові сповіщення</string>
|
||||||
<string name="share_notification_preference_summary">Вібрація і відтворення звуку у відповідь на отримання файла</string>
|
<string name="share_notification_preference_summary">Вібрація і відтворення звуку у відповідь на отримання файла</string>
|
||||||
|
<string name="title_activity_notification_filter">Фільтр сповіщень</string>
|
||||||
|
<string name="filter_apps_info">Сповіщення буде синхронізовано для позначених програм.</string>
|
||||||
<string name="sftp_internal_storage">Вбудоване сховище даних</string>
|
<string name="sftp_internal_storage">Вбудоване сховище даних</string>
|
||||||
<string name="sftp_all_files">Усі файли</string>
|
<string name="sftp_all_files">Усі файли</string>
|
||||||
<string name="sftp_sdcard_num">Картка SD %d</string>
|
<string name="sftp_sdcard_num">Картка SD %d</string>
|
||||||
@@ -100,12 +119,8 @@
|
|||||||
<string name="sftp_readonly">(лише читання)</string>
|
<string name="sftp_readonly">(лише читання)</string>
|
||||||
<string name="sftp_camera">Знімки фотоапарата</string>
|
<string name="sftp_camera">Знімки фотоапарата</string>
|
||||||
<string name="add_host">Додати вузол/IP</string>
|
<string name="add_host">Додати вузол/IP</string>
|
||||||
|
<string name="add_host_hint">Назва або IP вузла</string>
|
||||||
|
<string name="no_players_connected">Не знайдено програвачів</string>
|
||||||
<string name="custom_dev_list_help">Цим пунктом слід користуватися, лише якщо ваш пристрій не було визначено у автоматичному режимі. Введіть IP-адресу або назву вузла нижче і натисніть кнопку, щоб додати пункт до списку. Натисніть наявний пункт, щоб вилучити його зі списку.</string>
|
<string name="custom_dev_list_help">Цим пунктом слід користуватися, лише якщо ваш пристрій не було визначено у автоматичному режимі. Введіть IP-адресу або назву вузла нижче і натисніть кнопку, щоб додати пункт до списку. Натисніть наявний пункт, щоб вилучити його зі списку.</string>
|
||||||
<string-array name="mpris_time_entries">
|
<string name="mpris_player_on_device">%1$s на %2$s</string>
|
||||||
<item>10 секунд</item>
|
|
||||||
<item>20 секунд</item>
|
|
||||||
<item>30 секунд</item>
|
|
||||||
<item>1 хвилина</item>
|
|
||||||
<item>2 хвилини</item>
|
|
||||||
</string-array>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -28,22 +28,28 @@
|
|||||||
<string name="send_ping">Send ping</string>
|
<string name="send_ping">Send ping</string>
|
||||||
<string name="open_mpris_controls">Open remote control</string>
|
<string name="open_mpris_controls">Open remote control</string>
|
||||||
<string name="open_mousepad">Open touchpad control</string>
|
<string name="open_mousepad">Open touchpad control</string>
|
||||||
<string name="mousepad_info">Move a finger on the screen to move the mouse cursor</string>
|
<string name="mousepad_info">Move a finger on the screen to move the mouse cursor. Tap for a click, and use two/three fingers for right and middle buttons. Use a long press to drag\'n drop.</string>
|
||||||
|
<string name="mousepad_double_tap_settings_title">Set two finger tap action</string>
|
||||||
|
<string name="mousepad_triple_tap_settings_title">Set three finger tap action</string>
|
||||||
<string name="mousepad_double_tap_key" translatable="false">mousepad_double_tap_key</string>
|
<string name="mousepad_double_tap_key" translatable="false">mousepad_double_tap_key</string>
|
||||||
<string name="mousepad_triple_tap_key" translatable="false">mousepad_triple_tap_key</string>
|
<string name="mousepad_triple_tap_key" translatable="false">mousepad_triple_tap_key</string>
|
||||||
<string name="mousepad_right_value" translatable="false">right</string>
|
<string-array name="mousepad_tap_entries">
|
||||||
<string name="mousepad_middle_value" translatable="false">middle</string>
|
<item>Right click</item>
|
||||||
<string name="mousepad_double_tap_settings_title">Set Two Finger Tap Action</string>
|
<item>Middle click</item>
|
||||||
<string name="mousepad_double_default" translatable="false">@string/mousepad_right_value</string>
|
<item>Nothing</item>
|
||||||
<string name="mousepad_triple_default" translatable="false">@string/mousepad_middle_value</string>
|
</string-array>
|
||||||
<string name="mousepad_triple_tap_settings_title">Set Three Finger Tap Action</string>
|
<string name="mousepad_double_default">right</string>
|
||||||
<string name="mousepad_right_click">Right click</string>
|
<string name="mousepad_triple_default">middle</string>
|
||||||
<string name="mousepad_middle_click">Middle click</string>
|
<string-array name="mousepad_tap_values" translatable="false">
|
||||||
|
<item>right</item>
|
||||||
|
<item>middle</item>
|
||||||
|
<item>none</item>
|
||||||
|
</string-array>
|
||||||
<string name="category_connected_devices">Connected devices</string>
|
<string name="category_connected_devices">Connected devices</string>
|
||||||
<string name="category_not_paired_devices">Available devices</string>
|
<string name="category_not_paired_devices">Available devices</string>
|
||||||
<string name="category_remembered_devices">Remembered devices</string>
|
<string name="category_remembered_devices">Remembered devices</string>
|
||||||
<string name="plugins_failed_to_load">Plugins failed to load (tap for more info):</string>
|
<string name="plugins_failed_to_load">Plugins failed to load (tap for more info):</string>
|
||||||
<string name="device_menu_plugins">Select plugins</string>
|
<string name="device_menu_plugins">Plugin settings</string>
|
||||||
<string name="device_menu_unpair">Unpair</string>
|
<string name="device_menu_unpair">Unpair</string>
|
||||||
<string name="device_not_reachable">Paired device not reachable</string>
|
<string name="device_not_reachable">Paired device not reachable</string>
|
||||||
<string name="unknown_device">Unknown device</string>
|
<string name="unknown_device">Unknown device</string>
|
||||||
@@ -61,8 +67,14 @@
|
|||||||
<string name="received_url_text">Tap to open \'%1s\'</string>
|
<string name="received_url_text">Tap to open \'%1s\'</string>
|
||||||
<string name="incoming_file_title">Incoming file from %1s</string>
|
<string name="incoming_file_title">Incoming file from %1s</string>
|
||||||
<string name="incoming_file_text">%1s</string>
|
<string name="incoming_file_text">%1s</string>
|
||||||
|
<string name="outgoing_file_title">Sending file to %1s</string>
|
||||||
|
<string name="outgoing_file_text">%1s</string>
|
||||||
<string name="received_file_title">Received file from %1s</string>
|
<string name="received_file_title">Received file from %1s</string>
|
||||||
<string name="received_file_text">Tap to open \'%1s\'</string>
|
<string name="received_file_text">Tap to open \'%1s\'</string>
|
||||||
|
<string name="sent_file_title">Sent file to %1s</string>
|
||||||
|
<string name="sent_file_text">%1s</string>
|
||||||
|
<string name="sent_file_failed_title">Failed to send file %1s</string>
|
||||||
|
<string name="sent_file_failed_text">%1s</string>
|
||||||
<string name="tap_to_answer">Tap to answer</string>
|
<string name="tap_to_answer">Tap to answer</string>
|
||||||
<string name="reconnect">Reconnect</string>
|
<string name="reconnect">Reconnect</string>
|
||||||
<string name="right_click">Send Right Click</string>
|
<string name="right_click">Send Right Click</string>
|
||||||
@@ -83,17 +95,30 @@
|
|||||||
<string name="mpris_next">Next</string>
|
<string name="mpris_next">Next</string>
|
||||||
<string name="mpris_volume">Volume</string>
|
<string name="mpris_volume">Volume</string>
|
||||||
<string name="mpris_settings">Multimedia Settings</string>
|
<string name="mpris_settings">Multimedia Settings</string>
|
||||||
<string name="mpris_time_settings_title">Interval Time</string>
|
<string name="mpris_time_settings_title">Forward/rewind buttons</string>
|
||||||
<string name="mpris_time_settings_summary">Adjust the time to fast forward or rewind a multimedia file.</string>
|
<string name="mpris_time_settings_summary">Adjust the time to fast forward/rewind when pressed.</string>
|
||||||
<string name="mpris_time_key" translatable="false">mpris_interval_time</string>
|
<string name="mpris_time_key" translatable="false">mpris_interval_time</string>
|
||||||
|
<string-array name="mpris_time_entries">
|
||||||
|
<item>10 seconds</item>
|
||||||
|
<item>20 seconds</item>
|
||||||
|
<item>30 seconds</item>
|
||||||
|
<item>1 minute</item>
|
||||||
|
<item>2 minutes</item>
|
||||||
|
</string-array>
|
||||||
<string name="mpris_time_default" translatable="false">10000000</string>
|
<string name="mpris_time_default" translatable="false">10000000</string>
|
||||||
|
<string-array name="mpris_time_entries_values" translatable="false">
|
||||||
|
<item>10000000</item>
|
||||||
|
<item>20000000</item>
|
||||||
|
<item>30000000</item>
|
||||||
|
<item>60000000</item>
|
||||||
|
<item>120000000</item>
|
||||||
|
</string-array>
|
||||||
<string name="share_to">Share To...</string>
|
<string name="share_to">Share To...</string>
|
||||||
<string name="protocol_version_older">This device uses an old protocol version</string>
|
<string name="protocol_version_older">This device uses an old protocol version</string>
|
||||||
<string name="protocol_version_newer">This device uses a newer protocol version</string>
|
<string name="protocol_version_newer">This device uses a newer protocol version</string>
|
||||||
<string name="general_settings">General Settings</string>
|
<string name="general_settings">General Settings</string>
|
||||||
<string name="plugin_settings">Settings</string>
|
<string name="plugin_settings">Settings</string>
|
||||||
<string name="plugin_settings_with_name">%s settings</string>
|
<string name="plugin_settings_with_name">%s settings</string>
|
||||||
<string name="plugin_settings_key" translatable="false">_preferences</string>
|
|
||||||
<string name="device_name">Device name</string>
|
<string name="device_name">Device name</string>
|
||||||
<string name="device_name_preference_summary">%s</string>
|
<string name="device_name_preference_summary">%s</string>
|
||||||
<string name="invalid_device_name">Invalid device name</string>
|
<string name="invalid_device_name">Invalid device name</string>
|
||||||
@@ -102,6 +127,8 @@
|
|||||||
<string name="custom_device_list">Add devices by IP</string>
|
<string name="custom_device_list">Add devices by IP</string>
|
||||||
<string name="share_notification_preference">Noisy notifications</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_notification_preference_summary">Vibrate and play a sound when receiving a file</string>
|
||||||
|
<string name="title_activity_notification_filter">Notification filter</string>
|
||||||
|
<string name="filter_apps_info">Notifications will be synchronized for the selected apps.</string>
|
||||||
<string name="sftp_internal_storage">Internal storage</string>
|
<string name="sftp_internal_storage">Internal storage</string>
|
||||||
<string name="sftp_all_files">All files</string>
|
<string name="sftp_all_files">All files</string>
|
||||||
<string name="sftp_sdcard_num">SD card %d</string>
|
<string name="sftp_sdcard_num">SD card %d</string>
|
||||||
@@ -109,32 +136,9 @@
|
|||||||
<string name="sftp_readonly">(read only)</string>
|
<string name="sftp_readonly">(read only)</string>
|
||||||
<string name="sftp_camera">Camera pictures</string>
|
<string name="sftp_camera">Camera pictures</string>
|
||||||
<string name="add_host">Add host/IP</string>
|
<string name="add_host">Add host/IP</string>
|
||||||
|
<string name="add_host_hint">Hostname or IP</string>
|
||||||
|
<string name="no_players_connected">No players found</string>
|
||||||
<string name="custom_dev_list_help">Use this option only if your device is not automatically detected. Enter IP address or hostname below and touch the button to add it to the list. Touch an existing item to remove it from the list.</string>
|
<string name="custom_dev_list_help">Use this option only if your device is not automatically detected. Enter IP address or hostname below and touch the button to add it to the list. Touch an existing item to remove it from the list.</string>
|
||||||
|
<string name="mpris_player_on_device">%1$s on %2$s</string>
|
||||||
<string-array name="mpris_time_entries">
|
|
||||||
<item>10 seconds</item>
|
|
||||||
<item>20 seconds</item>
|
|
||||||
<item>30 seconds</item>
|
|
||||||
<item>1 minute</item>
|
|
||||||
<item>2 minutes</item>
|
|
||||||
</string-array>
|
|
||||||
|
|
||||||
<string-array name="mpris_time_entries_values" translatable="false">
|
|
||||||
<item>10000000</item>
|
|
||||||
<item>20000000</item>
|
|
||||||
<item>30000000</item>
|
|
||||||
<item>60000000</item>
|
|
||||||
<item>120000000</item>
|
|
||||||
</string-array>
|
|
||||||
|
|
||||||
<string-array name="mousepad_tap_entries" translatable="false">
|
|
||||||
<item>@string/mousepad_right_click</item>
|
|
||||||
<item>@string/mousepad_middle_click</item>
|
|
||||||
</string-array>
|
|
||||||
|
|
||||||
<string-array name="mousepad_tap_values" translatable="false">
|
|
||||||
<item>@string/mousepad_right_value</item>
|
|
||||||
<item>@string/mousepad_middle_value</item>
|
|
||||||
</string-array>
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
package org.kde.kdeconnect.Backends;
|
package org.kde.kdeconnect.Backends;
|
||||||
|
|
||||||
|
import org.kde.kdeconnect.Device;
|
||||||
import org.kde.kdeconnect.NetworkPackage;
|
import org.kde.kdeconnect.NetworkPackage;
|
||||||
|
|
||||||
import java.security.PrivateKey;
|
import java.security.PrivateKey;
|
||||||
@@ -71,7 +72,7 @@ public abstract class BaseLink {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//TO OVERRIDE, should be sync
|
//TO OVERRIDE, should be sync
|
||||||
public abstract boolean sendPackage(NetworkPackage np);
|
public abstract void sendPackage(NetworkPackage np,Device.SendPackageStatusCallback callback);
|
||||||
public abstract boolean sendPackageEncrypted(NetworkPackage np, PublicKey key);
|
public abstract void sendPackageEncrypted(NetworkPackage np,Device.SendPackageStatusCallback callback, PublicKey key);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -27,14 +27,20 @@ import org.apache.mina.core.session.IoSession;
|
|||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.kde.kdeconnect.Backends.BaseLink;
|
import org.kde.kdeconnect.Backends.BaseLink;
|
||||||
import org.kde.kdeconnect.Backends.BaseLinkProvider;
|
import org.kde.kdeconnect.Backends.BaseLinkProvider;
|
||||||
|
import org.kde.kdeconnect.Device;
|
||||||
import org.kde.kdeconnect.NetworkPackage;
|
import org.kde.kdeconnect.NetworkPackage;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.net.ServerSocket;
|
import java.net.ServerSocket;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
|
import java.nio.channels.NotYetConnectedException;
|
||||||
import java.security.PublicKey;
|
import java.security.PublicKey;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
import java.util.concurrent.TimeoutException;
|
||||||
|
|
||||||
public class LanLink extends BaseLink {
|
public class LanLink extends BaseLink {
|
||||||
|
|
||||||
@@ -51,141 +57,106 @@ public class LanLink extends BaseLink {
|
|||||||
this.session = session;
|
this.session = session;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Thread sendPayload(NetworkPackage np) {
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
final InputStream stream = np.getPayload();
|
|
||||||
|
|
||||||
ServerSocket candidateServer = null;
|
|
||||||
boolean success = false;
|
|
||||||
int tcpPort = 1739;
|
|
||||||
while(!success) {
|
|
||||||
try {
|
|
||||||
candidateServer = new ServerSocket();
|
|
||||||
candidateServer.bind(new InetSocketAddress(tcpPort));
|
|
||||||
success = true;
|
|
||||||
} catch(Exception e) {
|
|
||||||
Log.e("LanLink", "Exception openning serversocket: "+e);
|
|
||||||
tcpPort++;
|
|
||||||
if (tcpPort >= 1764) {
|
|
||||||
Log.e("LanLink", "No more ports available");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
JSONObject payloadTransferInfo = new JSONObject();
|
|
||||||
payloadTransferInfo.put("port", tcpPort);
|
|
||||||
|
|
||||||
final ServerSocket server = candidateServer;
|
|
||||||
Thread thread = new Thread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
//TODO: Timeout when waiting for a connection and close the socket
|
|
||||||
OutputStream socket = null;
|
|
||||||
try {
|
|
||||||
socket = server.accept().getOutputStream();
|
|
||||||
byte[] buffer = new byte[4096];
|
|
||||||
int bytesRead;
|
|
||||||
Log.e("LanLink","Beginning to send payload");
|
|
||||||
while ((bytesRead = stream.read(buffer)) != -1) {
|
|
||||||
//Log.e("ok",""+bytesRead);
|
|
||||||
socket.write(buffer, 0, bytesRead);
|
|
||||||
}
|
|
||||||
Log.e("LanLink","Finished sending payload");
|
|
||||||
} catch(Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
Log.e("LanLink", "Exception with payload upload socket");
|
|
||||||
} finally {
|
|
||||||
if (socket != null) {
|
|
||||||
try { socket.close(); } catch(Exception e) { }
|
|
||||||
}
|
|
||||||
try { server.close(); } catch(Exception e) { }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
thread.start();
|
|
||||||
|
|
||||||
np.setPayloadTransferInfo(payloadTransferInfo);
|
|
||||||
|
|
||||||
return thread;
|
|
||||||
|
|
||||||
} catch(Exception e) {
|
|
||||||
|
|
||||||
e.printStackTrace();
|
|
||||||
Log.e("LanLink", "Exception with payload upload socket");
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//Blocking, do not call from main thread
|
//Blocking, do not call from main thread
|
||||||
@Override
|
private void sendPackageInternal(NetworkPackage np, final Device.SendPackageStatusCallback callback, PublicKey key) {
|
||||||
public boolean sendPackage(final NetworkPackage np) {
|
|
||||||
|
|
||||||
if (session == null) {
|
if (session == null) {
|
||||||
Log.e("LanLink", "sendPackage failed: not yet connected");
|
Log.e("sendPackage", "Not yet connected");
|
||||||
return false;
|
callback.sendFailure(new NotYetConnectedException());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Thread thread = null;
|
|
||||||
|
//Prepare socket for the payload
|
||||||
|
final ServerSocket server;
|
||||||
if (np.hasPayload()) {
|
if (np.hasPayload()) {
|
||||||
thread = sendPayload(np);
|
server = openTcpSocketOnFreePort();
|
||||||
if (thread == null) return false;
|
JSONObject payloadTransferInfo = new JSONObject();
|
||||||
|
payloadTransferInfo.put("port", server.getLocalPort());
|
||||||
|
np.setPayloadTransferInfo(payloadTransferInfo);
|
||||||
|
} else {
|
||||||
|
server = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Encrypt if key provided
|
||||||
|
if (key != null) {
|
||||||
|
np = np.encrypt(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Send body of the network package
|
||||||
WriteFuture future = session.write(np.serialize());
|
WriteFuture future = session.write(np.serialize());
|
||||||
future.awaitUninterruptibly();
|
future.awaitUninterruptibly();
|
||||||
if (!future.isWritten()) return false;
|
if (!future.isWritten()) {
|
||||||
|
Log.e("sendPackage", "!future.isWritten()");
|
||||||
if (thread != null) {
|
callback.sendFailure(future.getException());
|
||||||
thread.join(); //Wait for thread to finish
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
//Send payload
|
||||||
|
if (server != null) {
|
||||||
|
OutputStream socket = null;
|
||||||
|
try {
|
||||||
|
//Wait a maximum of 10 seconds for the other end to establish a connection with our socket, close it afterwards
|
||||||
|
Timer timeout = new Timer();
|
||||||
|
timeout.schedule(new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Log.e("sendPackage","Timeout");
|
||||||
|
try { server.close(); } catch (Exception e) { }
|
||||||
|
callback.sendFailure(new TimeoutException("Timed out waiting for other end to establish a connection to receive the payload."));
|
||||||
|
}
|
||||||
|
},10*1000);
|
||||||
|
socket = server.accept().getOutputStream();
|
||||||
|
timeout.cancel();
|
||||||
|
|
||||||
|
Log.i("LanLink", "Beginning to send payload");
|
||||||
|
|
||||||
|
byte[] buffer = new byte[4096];
|
||||||
|
int bytesRead;
|
||||||
|
long progress = 0;
|
||||||
|
InputStream stream = np.getPayload();
|
||||||
|
while ((bytesRead = stream.read(buffer)) != -1) {
|
||||||
|
//Log.e("ok",""+bytesRead);
|
||||||
|
progress += bytesRead;
|
||||||
|
socket.write(buffer, 0, bytesRead);
|
||||||
|
if (np.getPayloadSize() > 0) {
|
||||||
|
callback.sendProgress((int)(progress / np.getPayloadSize()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Log.i("LanLink", "Finished sending payload");
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e("sendPackage", "Exception: "+e);
|
||||||
|
callback.sendFailure(e);
|
||||||
|
return;
|
||||||
|
} finally {
|
||||||
|
if (socket != null) {
|
||||||
|
try { socket.close(); } catch (Exception e) { }
|
||||||
|
}
|
||||||
|
try { server.close(); } catch (Exception e) { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
callback.sendSuccess();
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
if (callback != null) {
|
||||||
Log.e("LanLink", "sendPackage exception");
|
callback.sendFailure(e);
|
||||||
return false;
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Blocking, do not call from main thread
|
||||||
|
@Override
|
||||||
|
public void sendPackage(NetworkPackage np,Device.SendPackageStatusCallback callback) {
|
||||||
|
sendPackageInternal(np, callback, null);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Blocking, do not call from main thread
|
//Blocking, do not call from main thread
|
||||||
@Override
|
@Override
|
||||||
public boolean sendPackageEncrypted(NetworkPackage np, PublicKey key) {
|
public void sendPackageEncrypted(NetworkPackage np, Device.SendPackageStatusCallback callback, PublicKey key) {
|
||||||
|
sendPackageInternal(np, callback, key);
|
||||||
if (session == null) {
|
|
||||||
Log.e("LanLink", "sendPackage failed: not yet connected");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
Thread thread = null;
|
|
||||||
if (np.hasPayload()) {
|
|
||||||
thread = sendPayload(np);
|
|
||||||
if (thread == null) return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
np = np.encrypt(key);
|
|
||||||
WriteFuture future = session.write(np.serialize());
|
|
||||||
if (!future.await().isWritten()) return false;
|
|
||||||
|
|
||||||
if (thread != null) {
|
|
||||||
thread.join(); //Wait for thread to finish
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
Log.e("LanLink", "sendPackageEncrypted exception");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void injectNetworkPackage(NetworkPackage np) {
|
public void injectNetworkPackage(NetworkPackage np) {
|
||||||
@@ -218,4 +189,28 @@ public class LanLink extends BaseLink {
|
|||||||
|
|
||||||
packageReceived(np);
|
packageReceived(np);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static ServerSocket openTcpSocketOnFreePort() throws IOException {
|
||||||
|
boolean success = false;
|
||||||
|
int tcpPort = 1739;
|
||||||
|
ServerSocket candidateServer = null;
|
||||||
|
while(!success) {
|
||||||
|
try {
|
||||||
|
candidateServer = new ServerSocket();
|
||||||
|
candidateServer.bind(new InetSocketAddress(tcpPort));
|
||||||
|
success = true;
|
||||||
|
Log.i("LanLink", "Using port "+tcpPort);
|
||||||
|
} catch(IOException e) {
|
||||||
|
//Log.e("LanLink", "Exception openning serversocket: "+e);
|
||||||
|
tcpPort++;
|
||||||
|
if (tcpPort >= 1764) {
|
||||||
|
Log.e("LanLink", "No more ports available");
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return candidateServer;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -39,6 +39,7 @@ import org.apache.mina.transport.socket.nio.NioDatagramAcceptor;
|
|||||||
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
|
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
|
||||||
import org.apache.mina.transport.socket.nio.NioSocketConnector;
|
import org.apache.mina.transport.socket.nio.NioSocketConnector;
|
||||||
import org.kde.kdeconnect.Backends.BaseLinkProvider;
|
import org.kde.kdeconnect.Backends.BaseLinkProvider;
|
||||||
|
import org.kde.kdeconnect.Device;
|
||||||
import org.kde.kdeconnect.NetworkPackage;
|
import org.kde.kdeconnect.NetworkPackage;
|
||||||
import org.kde.kdeconnect.UserInterface.CustomDevicesActivity;
|
import org.kde.kdeconnect.UserInterface.CustomDevicesActivity;
|
||||||
|
|
||||||
@@ -66,15 +67,26 @@ public class LanLinkProvider extends BaseLinkProvider {
|
|||||||
@Override
|
@Override
|
||||||
public void sessionClosed(IoSession session) throws Exception {
|
public void sessionClosed(IoSession session) throws Exception {
|
||||||
|
|
||||||
LanLink brokenLink = nioSessions.get(session.getId());
|
final LanLink brokenLink = nioSessions.get(session.getId());
|
||||||
if (brokenLink != null) {
|
if (brokenLink != null) {
|
||||||
nioSessions.remove(session.getId());
|
nioSessions.remove(session.getId());
|
||||||
connectionLost(brokenLink);
|
|
||||||
brokenLink.disconnect();
|
brokenLink.disconnect();
|
||||||
String deviceId = brokenLink.getDeviceId();
|
String deviceId = brokenLink.getDeviceId();
|
||||||
if (visibleComputers.get(deviceId) == brokenLink) {
|
if (visibleComputers.get(deviceId) == brokenLink) {
|
||||||
visibleComputers.remove(deviceId);
|
visibleComputers.remove(deviceId);
|
||||||
}
|
}
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
//Wait a bit before emiting connectionLost, in case the same device re-appears
|
||||||
|
try {
|
||||||
|
Thread.sleep(200);
|
||||||
|
} catch (InterruptedException e) { }
|
||||||
|
connectionLost(brokenLink);
|
||||||
|
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -169,10 +181,19 @@ public class LanLinkProvider extends BaseLinkProvider {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
NetworkPackage np2 = NetworkPackage.createIdentityPackage(context);
|
NetworkPackage np2 = NetworkPackage.createIdentityPackage(context);
|
||||||
link.sendPackage(np2);
|
link.sendPackage(np2,new Device.SendPackageStatusCallback() {
|
||||||
|
@Override
|
||||||
|
protected void onSuccess() {
|
||||||
|
nioSessions.put(session.getId(), link);
|
||||||
|
addLink(identityPackage, link);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onFailure(Throwable e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
nioSessions.put(session.getId(), link);
|
|
||||||
addLink(identityPackage, link);
|
|
||||||
}
|
}
|
||||||
}).start();
|
}).start();
|
||||||
|
|
||||||
|
@@ -20,10 +20,9 @@
|
|||||||
|
|
||||||
package org.kde.kdeconnect.Backends.LoopbackBackend;
|
package org.kde.kdeconnect.Backends.LoopbackBackend;
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import org.kde.kdeconnect.Backends.BaseLink;
|
import org.kde.kdeconnect.Backends.BaseLink;
|
||||||
import org.kde.kdeconnect.Backends.BaseLinkProvider;
|
import org.kde.kdeconnect.Backends.BaseLinkProvider;
|
||||||
|
import org.kde.kdeconnect.Device;
|
||||||
import org.kde.kdeconnect.NetworkPackage;
|
import org.kde.kdeconnect.NetworkPackage;
|
||||||
|
|
||||||
import java.security.PublicKey;
|
import java.security.PublicKey;
|
||||||
@@ -35,29 +34,30 @@ public class LoopbackLink extends BaseLink {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean sendPackage(NetworkPackage in) {
|
public void sendPackage(NetworkPackage in, Device.SendPackageStatusCallback callback) {
|
||||||
String s = in.serialize();
|
sendPackageEncrypted(in, callback, null);
|
||||||
NetworkPackage out= NetworkPackage.unserialize(s);
|
|
||||||
if (in.hasPayload()) out.setPayload(in.getPayload(), in.getPayloadSize());
|
|
||||||
packageReceived(out);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean sendPackageEncrypted(NetworkPackage in, PublicKey key) {
|
public void sendPackageEncrypted(NetworkPackage in, Device.SendPackageStatusCallback callback, PublicKey key) {
|
||||||
try {
|
try {
|
||||||
in = in.encrypt(key);
|
if (key != null) {
|
||||||
|
in = in.encrypt(key);
|
||||||
|
}
|
||||||
String s = in.serialize();
|
String s = in.serialize();
|
||||||
NetworkPackage out= NetworkPackage.unserialize(s);
|
NetworkPackage out= NetworkPackage.unserialize(s);
|
||||||
out.decrypt(privateKey);
|
if (key != null) {
|
||||||
|
out = out.decrypt(privateKey);
|
||||||
|
}
|
||||||
packageReceived(out);
|
packageReceived(out);
|
||||||
if (in.hasPayload()) out.setPayload(in.getPayload(), in.getPayloadSize());
|
if (in.hasPayload()) {
|
||||||
return true;
|
callback.sendProgress(0);
|
||||||
|
out.setPayload(in.getPayload(), in.getPayloadSize());
|
||||||
|
callback.sendProgress(100);
|
||||||
|
}
|
||||||
|
callback.sendSuccess();
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
e.printStackTrace();
|
callback.sendFailure(e);
|
||||||
Log.e("LoopbackLink", "Encryption exception");
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -233,7 +233,7 @@ public class BackgroundService extends Service {
|
|||||||
SharedPreferences.Editor edit = settings.edit();
|
SharedPreferences.Editor edit = settings.edit();
|
||||||
edit.putString("publicKey",Base64.encodeToString(publicKey, 0).trim()+"\n");
|
edit.putString("publicKey",Base64.encodeToString(publicKey, 0).trim()+"\n");
|
||||||
edit.putString("privateKey",Base64.encodeToString(privateKey, 0));
|
edit.putString("privateKey",Base64.encodeToString(privateKey, 0));
|
||||||
edit.commit();
|
edit.apply();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -46,8 +46,6 @@ import java.security.PublicKey;
|
|||||||
import java.security.spec.PKCS8EncodedKeySpec;
|
import java.security.spec.PKCS8EncodedKeySpec;
|
||||||
import java.security.spec.X509EncodedKeySpec;
|
import java.security.spec.X509EncodedKeySpec;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
@@ -191,10 +189,9 @@ public class Device implements BaseLink.PackageReceiver {
|
|||||||
|
|
||||||
//Send our own public key
|
//Send our own public key
|
||||||
NetworkPackage np = NetworkPackage.createPublicKeyPackage(context);
|
NetworkPackage np = NetworkPackage.createPublicKeyPackage(context);
|
||||||
sendPackage(np, new SendPackageFinishedCallback(){
|
sendPackage(np, new SendPackageStatusCallback(){
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendSuccessful() {
|
public void onSuccess() {
|
||||||
if (pairingTimer != null) pairingTimer.cancel();
|
if (pairingTimer != null) pairingTimer.cancel();
|
||||||
pairingTimer = new Timer();
|
pairingTimer = new Timer();
|
||||||
pairingTimer.schedule(new TimerTask() {
|
pairingTimer.schedule(new TimerTask() {
|
||||||
@@ -211,7 +208,7 @@ public class Device implements BaseLink.PackageReceiver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendFailed() {
|
public void onFailure(Throwable e) {
|
||||||
for (PairingCallback cb : pairingCallback) {
|
for (PairingCallback cb : pairingCallback) {
|
||||||
cb.pairingFailed(context.getString(R.string.error_could_not_send_package));
|
cb.pairingFailed(context.getString(R.string.error_could_not_send_package));
|
||||||
}
|
}
|
||||||
@@ -233,7 +230,7 @@ public class Device implements BaseLink.PackageReceiver {
|
|||||||
pairStatus = PairStatus.NotPaired;
|
pairStatus = PairStatus.NotPaired;
|
||||||
|
|
||||||
SharedPreferences preferences = context.getSharedPreferences("trusted_devices", Context.MODE_PRIVATE);
|
SharedPreferences preferences = context.getSharedPreferences("trusted_devices", Context.MODE_PRIVATE);
|
||||||
preferences.edit().remove(deviceId).commit();
|
preferences.edit().remove(deviceId).apply();
|
||||||
|
|
||||||
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_PAIR);
|
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_PAIR);
|
||||||
np.set("pair", false);
|
np.set("pair", false);
|
||||||
@@ -255,14 +252,14 @@ public class Device implements BaseLink.PackageReceiver {
|
|||||||
|
|
||||||
//Store as trusted device
|
//Store as trusted device
|
||||||
SharedPreferences preferences = context.getSharedPreferences("trusted_devices", Context.MODE_PRIVATE);
|
SharedPreferences preferences = context.getSharedPreferences("trusted_devices", Context.MODE_PRIVATE);
|
||||||
preferences.edit().putBoolean(deviceId,true).commit();
|
preferences.edit().putBoolean(deviceId,true).apply();
|
||||||
|
|
||||||
//Store device information needed to create a Device object in a future
|
//Store device information needed to create a Device object in a future
|
||||||
SharedPreferences.Editor editor = settings.edit();
|
SharedPreferences.Editor editor = settings.edit();
|
||||||
editor.putString("deviceName", getName());
|
editor.putString("deviceName", getName());
|
||||||
String encodedPublicKey = Base64.encodeToString(publicKey.getEncoded(), 0);
|
String encodedPublicKey = Base64.encodeToString(publicKey.getEncoded(), 0);
|
||||||
editor.putString("publicKey", encodedPublicKey);
|
editor.putString("publicKey", encodedPublicKey);
|
||||||
editor.commit();
|
editor.apply();
|
||||||
|
|
||||||
reloadPluginsFromSettings();
|
reloadPluginsFromSettings();
|
||||||
|
|
||||||
@@ -278,13 +275,13 @@ public class Device implements BaseLink.PackageReceiver {
|
|||||||
|
|
||||||
//Send our own public key
|
//Send our own public key
|
||||||
NetworkPackage np = NetworkPackage.createPublicKeyPackage(context);
|
NetworkPackage np = NetworkPackage.createPublicKeyPackage(context);
|
||||||
sendPackage(np, new SendPackageFinishedCallback() {
|
sendPackage(np, new SendPackageStatusCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void sendSuccessful() {
|
protected void onSuccess() {
|
||||||
pairingDone();
|
pairingDone();
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void sendFailed() {
|
protected void onFailure(Throwable e) {
|
||||||
Log.e("Device","Unpairing (sendFailed B)");
|
Log.e("Device","Unpairing (sendFailed B)");
|
||||||
pairStatus = PairStatus.NotPaired;
|
pairStatus = PairStatus.NotPaired;
|
||||||
for (PairingCallback cb : pairingCallback) {
|
for (PairingCallback cb : pairingCallback) {
|
||||||
@@ -461,7 +458,7 @@ public class Device implements BaseLink.PackageReceiver {
|
|||||||
}
|
}
|
||||||
} else if (pairStatus == PairStatus.Paired) {
|
} else if (pairStatus == PairStatus.Paired) {
|
||||||
SharedPreferences preferences = context.getSharedPreferences("trusted_devices", Context.MODE_PRIVATE);
|
SharedPreferences preferences = context.getSharedPreferences("trusted_devices", Context.MODE_PRIVATE);
|
||||||
preferences.edit().remove(deviceId).commit();
|
preferences.edit().remove(deviceId).apply();
|
||||||
reloadPluginsFromSettings();
|
reloadPluginsFromSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -490,58 +487,65 @@ public class Device implements BaseLink.PackageReceiver {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface SendPackageFinishedCallback {
|
public static abstract class SendPackageStatusCallback {
|
||||||
void sendSuccessful();
|
protected abstract void onSuccess();
|
||||||
void sendFailed();
|
protected abstract void onFailure(Throwable e);
|
||||||
|
protected void onProgressChanged(int percent) { }
|
||||||
|
|
||||||
|
private boolean success = false;
|
||||||
|
public void sendSuccess() {
|
||||||
|
success = true;
|
||||||
|
onSuccess();
|
||||||
|
}
|
||||||
|
public void sendFailure(Throwable e) {
|
||||||
|
if (e != null) {
|
||||||
|
e.printStackTrace();
|
||||||
|
Log.e("sendPackage", "Exception: " + e.getMessage());
|
||||||
|
} else {
|
||||||
|
Log.e("sendPackage", "Unknown (null) exception");
|
||||||
|
}
|
||||||
|
onFailure(e);
|
||||||
|
}
|
||||||
|
public void sendProgress(int percent) { onProgressChanged(percent); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void sendPackage(NetworkPackage np) {
|
public void sendPackage(NetworkPackage np) {
|
||||||
sendPackage(np,null);
|
sendPackage(np,new SendPackageStatusCallback() {
|
||||||
|
@Override
|
||||||
|
protected void onSuccess() { }
|
||||||
|
@Override
|
||||||
|
protected void onFailure(Throwable e) { }
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//Async
|
//Async
|
||||||
public void sendPackage(final NetworkPackage np, final SendPackageFinishedCallback callback) {
|
public void sendPackage(final NetworkPackage np, final SendPackageStatusCallback callback) {
|
||||||
|
|
||||||
|
//Log.e("sendPackage", "Sending package...");
|
||||||
|
//Log.e("sendPackage", np.serialize());
|
||||||
|
|
||||||
final Exception backtrace = new Exception();
|
final Throwable backtrace = new Throwable();
|
||||||
new Thread(new Runnable() {
|
new Thread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|
||||||
//Log.e("sendPackage", "Sending package...");
|
|
||||||
//Log.e("sendPackage", np.serialize());
|
|
||||||
|
|
||||||
boolean useEncryption = (!np.getType().equals(NetworkPackage.PACKAGE_TYPE_PAIR) && isPaired());
|
boolean useEncryption = (!np.getType().equals(NetworkPackage.PACKAGE_TYPE_PAIR) && isPaired());
|
||||||
|
|
||||||
//We need a copy to avoid concurrent modification exception if the original list changes
|
//Make a copy to avoid concurrent modification exception if the original list changes
|
||||||
ArrayList<BaseLink> mLinks = new ArrayList<BaseLink>(links);
|
ArrayList<BaseLink> mLinks = new ArrayList<BaseLink>(links);
|
||||||
|
for (final BaseLink link : mLinks) {
|
||||||
boolean success = false;
|
if (useEncryption) {
|
||||||
try {
|
link.sendPackageEncrypted(np, callback, publicKey);
|
||||||
for (BaseLink link : mLinks) {
|
} else {
|
||||||
if (useEncryption) {
|
link.sendPackage(np, callback);
|
||||||
success = link.sendPackageEncrypted(np, publicKey);
|
|
||||||
} else {
|
|
||||||
success = link.sendPackage(np);
|
|
||||||
}
|
|
||||||
if (success) break;
|
|
||||||
}
|
}
|
||||||
} catch(Exception e) {
|
if (callback.success) break; //If the link didn't call sendSuccess(), try the next one
|
||||||
e.printStackTrace();
|
|
||||||
Log.e("sendPackage","Error while sending package");
|
|
||||||
success = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (success) {
|
if (!callback.success) {
|
||||||
// Log.e("sendPackage","Package sent");
|
Log.e("sendPackage", "No device link (of "+mLinks.size()+" available) could send the package. Package lost!");
|
||||||
} else {
|
|
||||||
backtrace.printStackTrace();
|
backtrace.printStackTrace();
|
||||||
Log.e("sendPackage","Error: Package could not be sent ("+mLinks.size()+" links available)");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (callback != null) {
|
|
||||||
if (success) callback.sendSuccessful();
|
|
||||||
else callback.sendFailed();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -549,16 +553,20 @@ public class Device implements BaseLink.PackageReceiver {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Plugin-related functions
|
// Plugin-related functions
|
||||||
//
|
//
|
||||||
|
|
||||||
public Plugin getPlugin(String name) {
|
public Plugin getPlugin(String name) {
|
||||||
return plugins.get(name);
|
return getPlugin(name, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Plugin getPlugin(String name, boolean includeFailed) {
|
||||||
|
Plugin plugin = plugins.get(name);
|
||||||
|
if (includeFailed && plugin == null) {
|
||||||
|
plugin = failedPlugins.get(name);
|
||||||
|
}
|
||||||
|
return plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void addPlugin(final String name) {
|
private synchronized void addPlugin(final String name) {
|
||||||
@@ -586,7 +594,6 @@ public class Device implements BaseLink.PackageReceiver {
|
|||||||
success = false;
|
success = false;
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Log.e("addPlugin", "Exception loading plugin " + name);
|
Log.e("addPlugin", "Exception loading plugin " + name);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
@@ -637,7 +644,7 @@ public class Device implements BaseLink.PackageReceiver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setPluginEnabled(String pluginName, boolean value) {
|
public void setPluginEnabled(String pluginName, boolean value) {
|
||||||
settings.edit().putBoolean(pluginName,value).commit();
|
settings.edit().putBoolean(pluginName,value).apply();
|
||||||
if (value && isPaired() && isReachable()) addPlugin(pluginName);
|
if (value && isPaired() && isReachable()) addPlugin(pluginName);
|
||||||
else removePlugin(pluginName);
|
else removePlugin(pluginName);
|
||||||
}
|
}
|
||||||
|
@@ -34,18 +34,38 @@ public class DeviceHelper {
|
|||||||
private final static HashMap<String,String> humanReadableNames = new HashMap<String,String>();
|
private final static HashMap<String,String> humanReadableNames = new HashMap<String,String>();
|
||||||
static {
|
static {
|
||||||
humanReadableNames.put("5860E","Coolpad Quattro 4G");
|
humanReadableNames.put("5860E","Coolpad Quattro 4G");
|
||||||
|
humanReadableNames.put("831C","HTC One M8");
|
||||||
|
humanReadableNames.put("9920","Star Alps S9920");
|
||||||
|
humanReadableNames.put("A0001","OnePlus One");
|
||||||
|
humanReadableNames.put("A1-810","Acer Iconia A1-810");
|
||||||
humanReadableNames.put("ADR6300","HTC Droid Incredible");
|
humanReadableNames.put("ADR6300","HTC Droid Incredible");
|
||||||
humanReadableNames.put("ADR6330VW","HTC Rhyme");
|
humanReadableNames.put("ADR6330VW","HTC Rhyme");
|
||||||
humanReadableNames.put("ADR6350","HTC Droid Incredible 2");
|
humanReadableNames.put("ADR6350","HTC Droid Incredible 2");
|
||||||
humanReadableNames.put("ADR6400L","HTC Thunderbolt");
|
humanReadableNames.put("ADR6400L","HTC Thunderbolt");
|
||||||
humanReadableNames.put("ADR6410LVW","HTC Droid Incredible 4G");
|
humanReadableNames.put("ADR6410LVW","HTC Droid Incredible 4G");
|
||||||
humanReadableNames.put("ADR6425LVW","HTC Rezound 4G");
|
humanReadableNames.put("ADR6425LVW","HTC Rezound 4G");
|
||||||
|
humanReadableNames.put("ALCATEL_ONE_TOUCH_5035X","Alcatel One Touch X Pop");
|
||||||
|
humanReadableNames.put("ALCATEL_ONE_TOUCH_7041X","Alcatel One Touch Pop C7");
|
||||||
|
humanReadableNames.put("Aquaris_E4.5","bq Aquaris E4.5");
|
||||||
humanReadableNames.put("ASUS_Transformer_Pad_TF300T","Asus Transformer Pad");
|
humanReadableNames.put("ASUS_Transformer_Pad_TF300T","Asus Transformer Pad");
|
||||||
|
humanReadableNames.put("bq_Aquaris_5","bq Aquaris 5");
|
||||||
|
humanReadableNames.put("bq_Aquaris_5_HD","bq Aquaris 5 HD");
|
||||||
|
humanReadableNames.put("C1905","Sony Xperia M");
|
||||||
|
humanReadableNames.put("C2105","Sony Xperia L");
|
||||||
humanReadableNames.put("C5155","Kyocera Rise");
|
humanReadableNames.put("C5155","Kyocera Rise");
|
||||||
humanReadableNames.put("C5170","Kyocera Hydro");
|
humanReadableNames.put("C5170","Kyocera Hydro");
|
||||||
|
humanReadableNames.put("C5303","Sony Xperia SP");
|
||||||
humanReadableNames.put("C6603","Sony Xperia Z");
|
humanReadableNames.put("C6603","Sony Xperia Z");
|
||||||
humanReadableNames.put("C6606","Sony Xperia Z");
|
humanReadableNames.put("C6606","Sony Xperia Z");
|
||||||
|
humanReadableNames.put("C6833","Sony Xperia Z Ultra");
|
||||||
humanReadableNames.put("C6903","Sony Xperia Z1");
|
humanReadableNames.put("C6903","Sony Xperia Z1");
|
||||||
|
humanReadableNames.put("C6916","Sony Xperia Z1S");
|
||||||
|
humanReadableNames.put("CM990","Huawei Evolution III");
|
||||||
|
humanReadableNames.put("CUBOT_ONE","Cubot One");
|
||||||
|
humanReadableNames.put("D2005","Sony Xperia E1");
|
||||||
|
humanReadableNames.put("D2303","Sony Xperia M2");
|
||||||
|
humanReadableNames.put("D5503","Sony Xperia Z1");
|
||||||
|
humanReadableNames.put("D5803","Sony Xperia Z3 Compact");
|
||||||
humanReadableNames.put("D6503","Sony Xperia Z2");
|
humanReadableNames.put("D6503","Sony Xperia Z2");
|
||||||
humanReadableNames.put("Desire_HD","HTC Desire HD");
|
humanReadableNames.put("Desire_HD","HTC Desire HD");
|
||||||
humanReadableNames.put("DROID2_GLOBAL","Motorola Droid 2 Global");
|
humanReadableNames.put("DROID2_GLOBAL","Motorola Droid 2 Global");
|
||||||
@@ -63,16 +83,23 @@ public class DeviceHelper {
|
|||||||
humanReadableNames.put("Galaxy_Nexus","Samsung Galaxy Nexus");
|
humanReadableNames.put("Galaxy_Nexus","Samsung Galaxy Nexus");
|
||||||
humanReadableNames.put("google_sdk","Android Emulator");
|
humanReadableNames.put("google_sdk","Android Emulator");
|
||||||
humanReadableNames.put("GT-I8160","Samsung Galaxy Ace 2");
|
humanReadableNames.put("GT-I8160","Samsung Galaxy Ace 2");
|
||||||
|
humanReadableNames.put("GT-I8190L","Samsung Galaxy S3 Mini");
|
||||||
humanReadableNames.put("GT-I8190N","Samsung Galaxy S III Mini");
|
humanReadableNames.put("GT-I8190N","Samsung Galaxy S III Mini");
|
||||||
humanReadableNames.put("GT-I8190","Samsung Galaxy S III Mini");
|
humanReadableNames.put("GT-I8190","Samsung Galaxy S III Mini");
|
||||||
|
humanReadableNames.put("GT-I8260","Samsung Galaxy Core");
|
||||||
|
humanReadableNames.put("GT-I8550L","Samsung Galaxy Win");
|
||||||
humanReadableNames.put("GT-I9000","Samsung Galaxy S");
|
humanReadableNames.put("GT-I9000","Samsung Galaxy S");
|
||||||
humanReadableNames.put("GT-I9001","Samsung Galaxy S Plus");
|
humanReadableNames.put("GT-I9001","Samsung Galaxy S Plus");
|
||||||
|
humanReadableNames.put("GT-I9060","Samsung Galaxy Grand Neo");
|
||||||
|
humanReadableNames.put("GT-I9063T","Samsung Galaxy Grand Neo Duos");
|
||||||
humanReadableNames.put("GT-I9070","Samsung Galaxy S Advance");
|
humanReadableNames.put("GT-I9070","Samsung Galaxy S Advance");
|
||||||
humanReadableNames.put("GT-I9082","Samsung Galaxy Grand");
|
humanReadableNames.put("GT-I9082","Samsung Galaxy Grand");
|
||||||
humanReadableNames.put("GT-I9100M","Samsung Galaxy S II");
|
humanReadableNames.put("GT-I9100M","Samsung Galaxy S II");
|
||||||
humanReadableNames.put("GT-I9100P","Samsung Galaxy S II");
|
humanReadableNames.put("GT-I9100P","Samsung Galaxy S II");
|
||||||
humanReadableNames.put("GT-I9100","Samsung Galaxy S II");
|
humanReadableNames.put("GT-I9100","Samsung Galaxy S II");
|
||||||
humanReadableNames.put("GT-I9100T","Samsung Galaxy S II");
|
humanReadableNames.put("GT-I9100T","Samsung Galaxy S II");
|
||||||
|
humanReadableNames.put("GT-I9105P","Samsung Galaxy S2 Plus");
|
||||||
|
humanReadableNames.put("GT-I9192","Samsung Galaxy S4 Mini Duos");
|
||||||
humanReadableNames.put("GT-I9195","Samsung Galaxy S4 Mini");
|
humanReadableNames.put("GT-I9195","Samsung Galaxy S4 Mini");
|
||||||
humanReadableNames.put("GT-I9300","Samsung Galaxy S III");
|
humanReadableNames.put("GT-I9300","Samsung Galaxy S III");
|
||||||
humanReadableNames.put("GT-I9300T","Samsung Galaxy S III");
|
humanReadableNames.put("GT-I9300T","Samsung Galaxy S III");
|
||||||
@@ -80,74 +107,118 @@ public class DeviceHelper {
|
|||||||
humanReadableNames.put("GT-I9305T","Samsung Galaxy S III");
|
humanReadableNames.put("GT-I9305T","Samsung Galaxy S III");
|
||||||
humanReadableNames.put("GT-I9500","Samsung Galaxy S4");
|
humanReadableNames.put("GT-I9500","Samsung Galaxy S4");
|
||||||
humanReadableNames.put("GT-I9505","Samsung Galaxy S4");
|
humanReadableNames.put("GT-I9505","Samsung Galaxy S4");
|
||||||
|
humanReadableNames.put("GT-I9506","Samsung Galaxy S4");
|
||||||
humanReadableNames.put("GT-N5110","Samsung Galaxy Note 8.0");
|
humanReadableNames.put("GT-N5110","Samsung Galaxy Note 8.0");
|
||||||
humanReadableNames.put("GT-N7000","Samsung Galaxy Note");
|
humanReadableNames.put("GT-N7000","Samsung Galaxy Note");
|
||||||
humanReadableNames.put("GT-N7100","Samsung Galaxy Note II");
|
humanReadableNames.put("GT-N7100","Samsung Galaxy Note II");
|
||||||
humanReadableNames.put("GT-N7105","Samsung Galaxy Note II");
|
humanReadableNames.put("GT-N7105","Samsung Galaxy Note II");
|
||||||
|
humanReadableNames.put("GT-N7105T","Samsung Galaxy Note II");
|
||||||
|
humanReadableNames.put("GT-N8010","Samsung Galaxy Note 10.1");
|
||||||
humanReadableNames.put("GT-N8013","Samsung Galaxy Note 10.1");
|
humanReadableNames.put("GT-N8013","Samsung Galaxy Note 10.1");
|
||||||
|
humanReadableNames.put("GT-P3100","Samsung Galaxy Tab 2");
|
||||||
|
humanReadableNames.put("GT-P3110","Samsung Galaxy Tab 2");
|
||||||
humanReadableNames.put("GT-P3113","Samsung Galaxy Tab 2 7.0");
|
humanReadableNames.put("GT-P3113","Samsung Galaxy Tab 2 7.0");
|
||||||
|
humanReadableNames.put("GT-P5110","Samsung Galaxy Tab 2");
|
||||||
humanReadableNames.put("GT-P5113","Samsnung Galaxy Tab 2 10.1");
|
humanReadableNames.put("GT-P5113","Samsnung Galaxy Tab 2 10.1");
|
||||||
humanReadableNames.put("GT-P5210","Samsung Galaxy Tab 3 10.1");
|
humanReadableNames.put("GT-P5210","Samsung Galaxy Tab 3 10.1");
|
||||||
humanReadableNames.put("GT-P7510","Samsung Galaxy Tab 10.1");
|
humanReadableNames.put("GT-P7510","Samsung Galaxy Tab 10.1");
|
||||||
|
humanReadableNames.put("GT-S5301L","Samsung Galaxy Pocket Plus");
|
||||||
humanReadableNames.put("GT-S5360","Samsung Galaxy Y");
|
humanReadableNames.put("GT-S5360","Samsung Galaxy Y");
|
||||||
humanReadableNames.put("GT-S5570","Samsung Galaxy Mini");
|
humanReadableNames.put("GT-S5570","Samsung Galaxy Mini");
|
||||||
humanReadableNames.put("GT-S5830i","Samsung Galaxy Ace");
|
humanReadableNames.put("GT-S5830i","Samsung Galaxy Ace");
|
||||||
humanReadableNames.put("GT-S5830","Samsung Galaxy Ace");
|
humanReadableNames.put("GT-S5830","Samsung Galaxy Ace");
|
||||||
|
humanReadableNames.put("GT-S6310N","Samsung Galaxy Young");
|
||||||
|
humanReadableNames.put("GT-S6310","Samsung Galaxy Young");
|
||||||
|
humanReadableNames.put("GT-S6810P","Samsung Galaxy Fame");
|
||||||
|
humanReadableNames.put("GT-S7560M","Samsung Galaxy Ace II X");
|
||||||
humanReadableNames.put("GT-S7562","Samsung Galaxy S Duos");
|
humanReadableNames.put("GT-S7562","Samsung Galaxy S Duos");
|
||||||
|
humanReadableNames.put("GT-S7580","Samsung Galaxy Trend Plus");
|
||||||
humanReadableNames.put("HTC6435LVW","HTC Droid DNA");
|
humanReadableNames.put("HTC6435LVW","HTC Droid DNA");
|
||||||
humanReadableNames.put("HTC6500LVW","HTC One");
|
humanReadableNames.put("HTC6500LVW","HTC One");
|
||||||
|
humanReadableNames.put("HTC6525LVW","HTC One M8");
|
||||||
|
humanReadableNames.put("HTC_Desire_500","HTC Desire 500");
|
||||||
humanReadableNames.put("HTC_Desire_HD_A9191","HTC Desire HD");
|
humanReadableNames.put("HTC_Desire_HD_A9191","HTC Desire HD");
|
||||||
humanReadableNames.put("HTCEVODesign4G","HTC Evo Design 4G");
|
humanReadableNames.put("HTCEVODesign4G","HTC Evo Design 4G");
|
||||||
humanReadableNames.put("HTCEVOV4G","HTC Evo V 4G");
|
humanReadableNames.put("HTCEVOV4G","HTC Evo V 4G");
|
||||||
humanReadableNames.put("HTCONE","HTC One");
|
humanReadableNames.put("HTCONE","HTC One");
|
||||||
|
humanReadableNames.put("HTC_One_mini","HTC One mini");
|
||||||
humanReadableNames.put("HTC_PH39100","HTC Vivid 4G");
|
humanReadableNames.put("HTC_PH39100","HTC Vivid 4G");
|
||||||
humanReadableNames.put("HTC_PN071","HTC One");
|
humanReadableNames.put("HTC_PN071","HTC One");
|
||||||
humanReadableNames.put("HTC_Sensation_Z710e","HTC Sensation");
|
humanReadableNames.put("HTC_Sensation_Z710e","HTC Sensation");
|
||||||
humanReadableNames.put("HTC_VLE_U","HTC One S");
|
humanReadableNames.put("HTC_VLE_U","HTC One S");
|
||||||
|
humanReadableNames.put("HUAWEI_G510-0251","Huawei Ascend G510");
|
||||||
|
humanReadableNames.put("HUAWEI_P6-U06","Huawei Ascend P6");
|
||||||
|
humanReadableNames.put("HUAWEI_Y300-0100","Huawei Ascend Y300");
|
||||||
humanReadableNames.put("KFJWA","Kindle Fire HD 8.9");
|
humanReadableNames.put("KFJWA","Kindle Fire HD 8.9");
|
||||||
humanReadableNames.put("KFJWI","Kindle Fire HD 8.9");
|
humanReadableNames.put("KFJWI","Kindle Fire HD 8.9");
|
||||||
humanReadableNames.put("KFOT","Kindle Fire");
|
humanReadableNames.put("KFOT","Kindle Fire");
|
||||||
humanReadableNames.put("KFTT","Kindle Fire HD 7");
|
humanReadableNames.put("KFTT","Kindle Fire HD 7");
|
||||||
humanReadableNames.put("LG-C800","LG myTouch Q");
|
humanReadableNames.put("LG-C800","LG myTouch Q");
|
||||||
|
humanReadableNames.put("LG-D415","LG Optimus L90");
|
||||||
|
humanReadableNames.put("LG-D620","LG G2 Mini");
|
||||||
|
humanReadableNames.put("LG-D686","LG G Pro Lite Dual");
|
||||||
humanReadableNames.put("LG-D800","LG G2");
|
humanReadableNames.put("LG-D800","LG G2");
|
||||||
humanReadableNames.put("LG-D801","LG G2");
|
humanReadableNames.put("LG-D801","LG G2");
|
||||||
humanReadableNames.put("LG-D802","LG G2");
|
humanReadableNames.put("LG-D802","LG G2");
|
||||||
|
humanReadableNames.put("LG-D850","LG G3");
|
||||||
|
humanReadableNames.put("LG-D851","LG G3");
|
||||||
|
humanReadableNames.put("LG-D855","LG G3");
|
||||||
|
humanReadableNames.put("LG-E411g","LG Optimus L1 II");
|
||||||
|
humanReadableNames.put("LG-E425g","LG Optimus L3 II");
|
||||||
|
humanReadableNames.put("LG-E440g","LG Optimus L4 II");
|
||||||
|
humanReadableNames.put("LG-E460","LG Optimus L5 II");
|
||||||
|
humanReadableNames.put("LG-E610","LG Optimus L5");
|
||||||
|
humanReadableNames.put("LG-E612g","LG Optimus L5 Dual");
|
||||||
humanReadableNames.put("LG-E739","LG MyTouch e739");
|
humanReadableNames.put("LG-E739","LG MyTouch e739");
|
||||||
humanReadableNames.put("LG-E970","LG Optimus G");
|
humanReadableNames.put("LG-E970","LG Optimus G");
|
||||||
humanReadableNames.put("LG-E980","LG Optimus G Pro");
|
humanReadableNames.put("LG-E980","LG Optimus G Pro");
|
||||||
humanReadableNames.put("LGL55C","LG LGL55C");
|
humanReadableNames.put("LGL55C","LG LGL55C");
|
||||||
|
humanReadableNames.put("LG-LG730","LG Venice");
|
||||||
|
humanReadableNames.put("LG-LS720","LG Optimus F3");
|
||||||
|
humanReadableNames.put("LGLS740","LG Volt");
|
||||||
humanReadableNames.put("LG-LS840","LG Viper");
|
humanReadableNames.put("LG-LS840","LG Viper");
|
||||||
humanReadableNames.put("LG-LS970","LG Optimus G");
|
humanReadableNames.put("LG-LS970","LG Optimus G");
|
||||||
humanReadableNames.put("LG-LS980","LG G2");
|
humanReadableNames.put("LG-LS980","LG G2");
|
||||||
|
humanReadableNames.put("LGMS323","LG Optimus L70");
|
||||||
|
humanReadableNames.put("LGMS500","LG Optimus F6");
|
||||||
humanReadableNames.put("LGMS769","LG Optimus L9");
|
humanReadableNames.put("LGMS769","LG Optimus L9");
|
||||||
humanReadableNames.put("LG-MS770","LG Motion 4G");
|
humanReadableNames.put("LG-MS770","LG Motion 4G");
|
||||||
humanReadableNames.put("LG-MS910","LG Esteem");
|
humanReadableNames.put("LG-MS910","LG Esteem");
|
||||||
humanReadableNames.put("LG-P509","LG Optimus T");
|
humanReadableNames.put("LG-P509","LG Optimus T");
|
||||||
|
humanReadableNames.put("LG-P760","LG Optimus L9");
|
||||||
|
humanReadableNames.put("LG-P768","LG Optimus L9");
|
||||||
humanReadableNames.put("LG-P769","LG Optimus L9");
|
humanReadableNames.put("LG-P769","LG Optimus L9");
|
||||||
humanReadableNames.put("LG-P999","LG G2X P999");
|
humanReadableNames.put("LG-P999","LG G2X P999");
|
||||||
humanReadableNames.put("LG-VM696","LG Optimus Elite");
|
humanReadableNames.put("LG-VM696","LG Optimus Elite");
|
||||||
humanReadableNames.put("LS670","LG Optimus S");
|
humanReadableNames.put("LS670","LG Optimus S");
|
||||||
|
humanReadableNames.put("LT22i","Sony Xperia P");
|
||||||
|
humanReadableNames.put("LT25i","Sony Xperia V");
|
||||||
humanReadableNames.put("LT26i","Sony Xperia S");
|
humanReadableNames.put("LT26i","Sony Xperia S");
|
||||||
humanReadableNames.put("MB855","Motorola Photon 4G");
|
humanReadableNames.put("MB855","Motorola Photon 4G");
|
||||||
humanReadableNames.put("MB860","Motorola Atrix 4G");
|
humanReadableNames.put("MB860","Motorola Atrix 4G");
|
||||||
humanReadableNames.put("MB865","Motorola Atrix 2");
|
humanReadableNames.put("MB865","Motorola Atrix 2");
|
||||||
humanReadableNames.put("MB886","Motorola Atrix HD");
|
humanReadableNames.put("MB886","Motorola Atrix HD");
|
||||||
|
humanReadableNames.put("ME173X","Asus MeMO Pad HD 7");
|
||||||
|
humanReadableNames.put("MI_3W","Xiaomi Mi 3");
|
||||||
humanReadableNames.put("MOTWX435KT","Motorola Triumph");
|
humanReadableNames.put("MOTWX435KT","Motorola Triumph");
|
||||||
humanReadableNames.put("myTouch_4G_Slide","HTC myTouch 4G Slide");
|
humanReadableNames.put("myTouch_4G_Slide","HTC myTouch 4G Slide");
|
||||||
|
humanReadableNames.put("N3","Star NO.1 N3");
|
||||||
humanReadableNames.put("N860","ZTE Warp N860");
|
humanReadableNames.put("N860","ZTE Warp N860");
|
||||||
humanReadableNames.put("Nexus_10","Nexus 10");
|
humanReadableNames.put("Nexus_10","Google Nexus 10");
|
||||||
humanReadableNames.put("Nexus_4","Nexus 4");
|
humanReadableNames.put("Nexus_4","Google Nexus 4");
|
||||||
humanReadableNames.put("Nexus_5","Nexus 5");
|
humanReadableNames.put("Nexus_7","Asus Nexus 7");
|
||||||
humanReadableNames.put("Nexus_7","Nexus 7");
|
humanReadableNames.put("Nexus_S_4G","Samsung Nexus S 4G");
|
||||||
humanReadableNames.put("Nexus_S_4G","Nexus S 4G");
|
humanReadableNames.put("Nexus_S","Samsung Nexus S");
|
||||||
humanReadableNames.put("Nexus_S","Nexus S");
|
humanReadableNames.put("Orange_Daytona","Huawei Ascend G510");
|
||||||
humanReadableNames.put("PantechP9070","Pantech Burst");
|
humanReadableNames.put("PantechP9070","Pantech Burst");
|
||||||
humanReadableNames.put("PC36100","HTC Evo 4G");
|
humanReadableNames.put("PC36100","HTC Evo 4G");
|
||||||
humanReadableNames.put("PG06100","HTC EVO Shift 4G");
|
humanReadableNames.put("PG06100","HTC EVO Shift 4G");
|
||||||
humanReadableNames.put("PG86100","HTC Evo 3D");
|
humanReadableNames.put("PG86100","HTC Evo 3D");
|
||||||
humanReadableNames.put("PH44100","HTC Evo Design 4G");
|
humanReadableNames.put("PH44100","HTC Evo Design 4G");
|
||||||
|
humanReadableNames.put("QMV7A","Verizon Ellipsis 7");
|
||||||
humanReadableNames.put("SAMSUNG-SGH-I317","Samsung Galaxy Note II");
|
humanReadableNames.put("SAMSUNG-SGH-I317","Samsung Galaxy Note II");
|
||||||
humanReadableNames.put("SAMSUNG-SGH-I337","Samsung Galaxy S4");
|
humanReadableNames.put("SAMSUNG-SGH-I337","Samsung Galaxy S4");
|
||||||
|
humanReadableNames.put("SAMSUNG-SGH-I527","Samsung Galaxy Mega");
|
||||||
humanReadableNames.put("SAMSUNG-SGH-I537","Samsung Galaxy S4 Active");
|
humanReadableNames.put("SAMSUNG-SGH-I537","Samsung Galaxy S4 Active");
|
||||||
humanReadableNames.put("SAMSUNG-SGH-I717","Samsung Galaxy Note");
|
humanReadableNames.put("SAMSUNG-SGH-I717","Samsung Galaxy Note");
|
||||||
humanReadableNames.put("SAMSUNG-SGH-I727","Samsung Skyrocket");
|
humanReadableNames.put("SAMSUNG-SGH-I727","Samsung Skyrocket");
|
||||||
@@ -156,19 +227,26 @@ public class DeviceHelper {
|
|||||||
humanReadableNames.put("SAMSUNG-SGH-I897","Samsung Captivate");
|
humanReadableNames.put("SAMSUNG-SGH-I897","Samsung Captivate");
|
||||||
humanReadableNames.put("SAMSUNG-SGH-I927","Samsung Captivate Glide");
|
humanReadableNames.put("SAMSUNG-SGH-I927","Samsung Captivate Glide");
|
||||||
humanReadableNames.put("SAMSUNG-SGH-I997","Samsung Infuse 4G");
|
humanReadableNames.put("SAMSUNG-SGH-I997","Samsung Infuse 4G");
|
||||||
|
humanReadableNames.put("SAMSUNG-SM-G730A","Samsung Galaxy S3 Mini");
|
||||||
|
humanReadableNames.put("SAMSUNG-SM-G870A","Samsung Galaxy S5 Active");
|
||||||
|
humanReadableNames.put("SAMSUNG-SM-G900A","Samsung Galaxy S5");
|
||||||
humanReadableNames.put("SAMSUNG-SM-N900A","Samsung Galaxy Note 3");
|
humanReadableNames.put("SAMSUNG-SM-N900A","Samsung Galaxy Note 3");
|
||||||
|
humanReadableNames.put("SAMSUNG-SM-N910A","Samsung Galaxy Note 4");
|
||||||
humanReadableNames.put("SCH-I200","Samsung Galaxy Stellar");
|
humanReadableNames.put("SCH-I200","Samsung Galaxy Stellar");
|
||||||
humanReadableNames.put("SCH-I405","Samsung Stratosphere");
|
humanReadableNames.put("SCH-I405","Samsung Stratosphere");
|
||||||
humanReadableNames.put("SCH-I415","Samsung Galaxy Stratosphere II");
|
humanReadableNames.put("SCH-I415","Samsung Galaxy Stratosphere II");
|
||||||
|
humanReadableNames.put("SCH-I435","Samsung Galaxy S4 Mini");
|
||||||
humanReadableNames.put("SCH-I500","Samsung Fascinate");
|
humanReadableNames.put("SCH-I500","Samsung Fascinate");
|
||||||
humanReadableNames.put("SCH-I510","Samsung Droid Charge");
|
humanReadableNames.put("SCH-I510","Samsung Droid Charge");
|
||||||
humanReadableNames.put("SCH-I535","Samsung Galaxy S III");
|
humanReadableNames.put("SCH-I535","Samsung Galaxy S III");
|
||||||
humanReadableNames.put("SCH-I545","Samsung Galaxy S4");
|
humanReadableNames.put("SCH-I545","Samsung Galaxy S4");
|
||||||
humanReadableNames.put("SCH-I605","Samsung Galaxy Note II");
|
humanReadableNames.put("SCH-I605","Samsung Galaxy Note II");
|
||||||
humanReadableNames.put("SCH-I800","Samsung Galaxy Tab 7.0");
|
humanReadableNames.put("SCH-I800","Samsung Galaxy Tab 7.0");
|
||||||
|
humanReadableNames.put("SCH-R530C","Samsung Galaxy S3");
|
||||||
humanReadableNames.put("SCH-R530M","Samsung Galaxy S III");
|
humanReadableNames.put("SCH-R530M","Samsung Galaxy S III");
|
||||||
humanReadableNames.put("SCH-R530U","Samsung Galaxy S III");
|
humanReadableNames.put("SCH-R530U","Samsung Galaxy S III");
|
||||||
humanReadableNames.put("SCH-R720","Samsung Admire");
|
humanReadableNames.put("SCH-R720","Samsung Admire");
|
||||||
|
humanReadableNames.put("SCH-R970","Samsung Galaxy S4");
|
||||||
humanReadableNames.put("SCH-S720C","Samsung Proclaim");
|
humanReadableNames.put("SCH-S720C","Samsung Proclaim");
|
||||||
humanReadableNames.put("SCH-S738C","Samsung Galaxy Centura");
|
humanReadableNames.put("SCH-S738C","Samsung Galaxy Centura");
|
||||||
humanReadableNames.put("SGH-I317M","Samsung Galaxy Note II");
|
humanReadableNames.put("SGH-I317M","Samsung Galaxy Note II");
|
||||||
@@ -176,6 +254,7 @@ public class DeviceHelper {
|
|||||||
humanReadableNames.put("SGH-I727R","Samsung Galaxy S II");
|
humanReadableNames.put("SGH-I727R","Samsung Galaxy S II");
|
||||||
humanReadableNames.put("SGH-I747M","Samsung Galaxy S III");
|
humanReadableNames.put("SGH-I747M","Samsung Galaxy S III");
|
||||||
humanReadableNames.put("SGH-M919","Samsung Galaxy S4");
|
humanReadableNames.put("SGH-M919","Samsung Galaxy S4");
|
||||||
|
humanReadableNames.put("SGH-T399","Samsung Galaxy Light");
|
||||||
humanReadableNames.put("SGH-T599N","Samsung Galaxy Exhibit");
|
humanReadableNames.put("SGH-T599N","Samsung Galaxy Exhibit");
|
||||||
humanReadableNames.put("SGH-T679","Samsung Exhibit II");
|
humanReadableNames.put("SGH-T679","Samsung Exhibit II");
|
||||||
humanReadableNames.put("SGH-T769","Samsung Galaxy S Blaze");
|
humanReadableNames.put("SGH-T769","Samsung Galaxy S Blaze");
|
||||||
@@ -187,13 +266,31 @@ public class DeviceHelper {
|
|||||||
humanReadableNames.put("SGH-T999L","Samsung Galaxy S III");
|
humanReadableNames.put("SGH-T999L","Samsung Galaxy S III");
|
||||||
humanReadableNames.put("SGH-T999","Samsung Galaxy S III");
|
humanReadableNames.put("SGH-T999","Samsung Galaxy S III");
|
||||||
humanReadableNames.put("SGH-T999V","Samsung Galaxy S III");
|
humanReadableNames.put("SGH-T999V","Samsung Galaxy S III");
|
||||||
|
humanReadableNames.put("SGP312","Sony Xperia Tablet Z");
|
||||||
|
humanReadableNames.put("SHV-E210K","Samsung Galaxy S3");
|
||||||
humanReadableNames.put("SHV-E210S","Samsung Galaxy S III");
|
humanReadableNames.put("SHV-E210S","Samsung Galaxy S III");
|
||||||
|
humanReadableNames.put("SHV-E250S","Samsung Galaxy Note II");
|
||||||
|
humanReadableNames.put("SM-G3815","Samsung Galaxy Express II");
|
||||||
|
humanReadableNames.put("SM-G7102","Samsung Galaxy Grand II");
|
||||||
|
humanReadableNames.put("SM-G900F","Samsung Galaxy S5");
|
||||||
|
humanReadableNames.put("SM-G900I","Samsung Galaxy S5");
|
||||||
|
humanReadableNames.put("SM-G900P","Samsung Galaxy S5");
|
||||||
|
humanReadableNames.put("SM-G900T","Samsung Galaxy S5");
|
||||||
|
humanReadableNames.put("SM-G900V","Samsung Galaxy S5");
|
||||||
|
humanReadableNames.put("SM-G900W8","Samsung Galaxy S5");
|
||||||
|
humanReadableNames.put("SM-N7505","Samsung Galaxy Note 3 Neo");
|
||||||
humanReadableNames.put("SM-N9005","Samsung Galaxy Note 3");
|
humanReadableNames.put("SM-N9005","Samsung Galaxy Note 3");
|
||||||
|
humanReadableNames.put("SM-N9006","Samsung Galaxy Note 3");
|
||||||
humanReadableNames.put("SM-N900P","Samsung Galaxy Note 3");
|
humanReadableNames.put("SM-N900P","Samsung Galaxy Note 3");
|
||||||
|
humanReadableNames.put("SM-N900","Samsung Galaxy Note 3");
|
||||||
humanReadableNames.put("SM-N900T","Samsung Galaxy Note 3");
|
humanReadableNames.put("SM-N900T","Samsung Galaxy Note 3");
|
||||||
humanReadableNames.put("SM-N900V","Samsung Galaxy Note 3");
|
humanReadableNames.put("SM-N900V","Samsung Galaxy Note 3");
|
||||||
humanReadableNames.put("SM-N900W8","Samsung Galaxy Note 3");
|
humanReadableNames.put("SM-N900W8","Samsung Galaxy Note 3");
|
||||||
|
humanReadableNames.put("SM-N910T","Samsung Galaxy Note 4");
|
||||||
|
humanReadableNames.put("SM-N910V","Samsung Galaxy Note 4");
|
||||||
|
humanReadableNames.put("SM-P600","Samsung Galaxy Note 10.1");
|
||||||
humanReadableNames.put("SM-T210R","Samsung Galaxy Tab 3 7.0");
|
humanReadableNames.put("SM-T210R","Samsung Galaxy Tab 3 7.0");
|
||||||
|
humanReadableNames.put("SM-T217S","Samsung Galaxy Tab 3 7.0");
|
||||||
humanReadableNames.put("SM-T310","Samsung Galaxy Tab 3 8.0");
|
humanReadableNames.put("SM-T310","Samsung Galaxy Tab 3 8.0");
|
||||||
humanReadableNames.put("SPH-D600","Samsung Conquer 4G");
|
humanReadableNames.put("SPH-D600","Samsung Conquer 4G");
|
||||||
humanReadableNames.put("SPH-D700","Samsung Epic 4G");
|
humanReadableNames.put("SPH-D700","Samsung Epic 4G");
|
||||||
@@ -203,21 +300,33 @@ public class DeviceHelper {
|
|||||||
humanReadableNames.put("SPH-L300","Samsung Galaxy Victory");
|
humanReadableNames.put("SPH-L300","Samsung Galaxy Victory");
|
||||||
humanReadableNames.put("SPH-L710","Samsung Galaxy S III");
|
humanReadableNames.put("SPH-L710","Samsung Galaxy S III");
|
||||||
humanReadableNames.put("SPH-L720","Samsung Galaxy S4");
|
humanReadableNames.put("SPH-L720","Samsung Galaxy S4");
|
||||||
|
humanReadableNames.put("SPH-L720T","Samsung Galaxy S4");
|
||||||
humanReadableNames.put("SPH-L900","Samsung Galaxy Note II");
|
humanReadableNames.put("SPH-L900","Samsung Galaxy Note II");
|
||||||
humanReadableNames.put("SPH-M820-BST","Samsung Galaxy Prevail");
|
humanReadableNames.put("SPH-M820-BST","Samsung Galaxy Prevail");
|
||||||
humanReadableNames.put("SPH-M830","Samsung Galaxy Rush");
|
humanReadableNames.put("SPH-M830","Samsung Galaxy Rush");
|
||||||
|
humanReadableNames.put("SPH-M840","Samsung Galaxy Prevail 2");
|
||||||
humanReadableNames.put("SPH-M930BST","Samsung Transform Ultra");
|
humanReadableNames.put("SPH-M930BST","Samsung Transform Ultra");
|
||||||
|
humanReadableNames.put("ST21i","Sony Xperia Tipo");
|
||||||
humanReadableNames.put("ST25i","Sony Xperia U");
|
humanReadableNames.put("ST25i","Sony Xperia U");
|
||||||
|
humanReadableNames.put("ST26i","Sony Xperia J");
|
||||||
humanReadableNames.put("Transformer_Prime_TF201","Asus Eee Pad Transformer Prime");
|
humanReadableNames.put("Transformer_Prime_TF201","Asus Eee Pad Transformer Prime");
|
||||||
humanReadableNames.put("Transformer_TF101","Asus Eee Pad Transformer");
|
humanReadableNames.put("Transformer_TF101","Asus Eee Pad Transformer");
|
||||||
humanReadableNames.put("VM670","LG Optimus V");
|
humanReadableNames.put("VM670","LG Optimus V");
|
||||||
humanReadableNames.put("VS840_4G","LG Lucid 4G");
|
humanReadableNames.put("VS840_4G","LG Lucid 4G");
|
||||||
humanReadableNames.put("VS910_4G","LG Revolution 4G");
|
humanReadableNames.put("VS910_4G","LG Revolution 4G");
|
||||||
humanReadableNames.put("VS920_4G","LG Spectrum 4G");
|
humanReadableNames.put("VS920_4G","LG Spectrum 4G");
|
||||||
|
humanReadableNames.put("VS930_4G","LG Spectrum 2");
|
||||||
humanReadableNames.put("VS980_4G","LG G2");
|
humanReadableNames.put("VS980_4G","LG G2");
|
||||||
|
humanReadableNames.put("VS985_4G","LG G3 4G");
|
||||||
humanReadableNames.put("Xoom","Motorola Xoom");
|
humanReadableNames.put("Xoom","Motorola Xoom");
|
||||||
|
humanReadableNames.put("XT1028","Motorola Moto G");
|
||||||
humanReadableNames.put("XT1030","Motorola Droid Mini");
|
humanReadableNames.put("XT1030","Motorola Droid Mini");
|
||||||
|
humanReadableNames.put("XT1031","Motorola Moto G");
|
||||||
humanReadableNames.put("XT1032","Motorola Moto G");
|
humanReadableNames.put("XT1032","Motorola Moto G");
|
||||||
|
humanReadableNames.put("XT1033","Motorola Moto G");
|
||||||
|
humanReadableNames.put("XT1049","Motorola Moto X");
|
||||||
|
humanReadableNames.put("XT1053","Motorola Moto X");
|
||||||
|
humanReadableNames.put("XT1056","Motorola Moto X");
|
||||||
humanReadableNames.put("XT1058","Motorola Moto X");
|
humanReadableNames.put("XT1058","Motorola Moto X");
|
||||||
humanReadableNames.put("XT1060","Motorola Moto X");
|
humanReadableNames.put("XT1060","Motorola Moto X");
|
||||||
humanReadableNames.put("XT1080","Motorola Droid Ultra");
|
humanReadableNames.put("XT1080","Motorola Droid Ultra");
|
||||||
|
12
src/org/kde/kdeconnect/Helpers/NotificationsHelper.java
Normal file
12
src/org/kde/kdeconnect/Helpers/NotificationsHelper.java
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
package org.kde.kdeconnect.Helpers;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
public class NotificationsHelper {
|
||||||
|
|
||||||
|
private final static AtomicInteger c = new AtomicInteger((int)System.currentTimeMillis());
|
||||||
|
public static int getUniqueId() {
|
||||||
|
return c.incrementAndGet();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -21,11 +21,9 @@
|
|||||||
package org.kde.kdeconnect.Helpers;
|
package org.kde.kdeconnect.Helpers;
|
||||||
|
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -39,8 +37,6 @@ import java.util.StringTokenizer;
|
|||||||
//modified to work on Lollipop and other devices
|
//modified to work on Lollipop and other devices
|
||||||
public class StorageHelper {
|
public class StorageHelper {
|
||||||
|
|
||||||
private static final String TAG = "StorageHelper";
|
|
||||||
|
|
||||||
public static class StorageInfo {
|
public static class StorageInfo {
|
||||||
|
|
||||||
public final String path;
|
public final String path;
|
||||||
@@ -66,7 +62,6 @@ public class StorageHelper {
|
|||||||
public static List<StorageInfo> getStorageList() {
|
public static List<StorageInfo> getStorageList() {
|
||||||
|
|
||||||
List<StorageInfo> list = new ArrayList<StorageInfo>();
|
List<StorageInfo> list = new ArrayList<StorageInfo>();
|
||||||
File def = Environment.getExternalStorageDirectory();
|
|
||||||
String def_path = Environment.getExternalStorageDirectory().getPath();
|
String def_path = Environment.getExternalStorageDirectory().getPath();
|
||||||
boolean def_path_removable = Environment.isExternalStorageRemovable();
|
boolean def_path_removable = Environment.isExternalStorageRemovable();
|
||||||
String def_path_state = Environment.getExternalStorageState();
|
String def_path_state = Environment.getExternalStorageState();
|
||||||
@@ -142,12 +137,12 @@ public class StorageHelper {
|
|||||||
|
|
||||||
for (String line : entries) {
|
for (String line : entries) {
|
||||||
StringTokenizer tokens = new StringTokenizer(line, " ");
|
StringTokenizer tokens = new StringTokenizer(line, " ");
|
||||||
String unused = tokens.nextToken(); //device
|
tokens.nextToken(); //device
|
||||||
String mount_point = tokens.nextToken(); //mount point
|
String mount_point = tokens.nextToken(); //mount point
|
||||||
if (paths.contains(mount_point)) {
|
if (paths.contains(mount_point)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
unused = tokens.nextToken(); //file system
|
tokens.nextToken(); //file system
|
||||||
List<String> flags = Arrays.asList(tokens.nextToken().split(",")); //flags
|
List<String> flags = Arrays.asList(tokens.nextToken().split(",")); //flags
|
||||||
boolean readonly = flags.contains("ro");
|
boolean readonly = flags.contains("ro");
|
||||||
|
|
||||||
|
@@ -37,46 +37,51 @@ public class KdeConnectBroadcastReceiver extends BroadcastReceiver
|
|||||||
|
|
||||||
String action = intent.getAction();
|
String action = intent.getAction();
|
||||||
|
|
||||||
if(action.equals(Intent.ACTION_PACKAGE_REPLACED)) {
|
switch(action) {
|
||||||
Log.i("KdeConnect", "UpdateReceiver");
|
case Intent.ACTION_PACKAGE_REPLACED:
|
||||||
if (!intent.getData().getSchemeSpecificPart().equals(context.getPackageName())) {
|
Log.i("KdeConnect", "UpdateReceiver");
|
||||||
Log.i("KdeConnect", "Ignoring, it's not me!");
|
if (!intent.getData().getSchemeSpecificPart().equals(context.getPackageName())) {
|
||||||
return;
|
Log.i("KdeConnect", "Ignoring, it's not me!");
|
||||||
}
|
return;
|
||||||
BackgroundService.RunCommand(context, new BackgroundService.InstanceCallback() {
|
}
|
||||||
@Override
|
BackgroundService.RunCommand(context, new BackgroundService.InstanceCallback() {
|
||||||
public void onServiceStart(BackgroundService service) {
|
@Override
|
||||||
|
public void onServiceStart(BackgroundService service) {
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
|
break;
|
||||||
Log.i("KdeConnect", "KdeConnectBroadcastReceiver");
|
case Intent.ACTION_BOOT_COMPLETED:
|
||||||
BackgroundService.RunCommand(context, new BackgroundService.InstanceCallback() {
|
Log.i("KdeConnect", "KdeConnectBroadcastReceiver");
|
||||||
@Override
|
BackgroundService.RunCommand(context, new BackgroundService.InstanceCallback() {
|
||||||
public void onServiceStart(BackgroundService service) {
|
@Override
|
||||||
|
public void onServiceStart(BackgroundService service) {
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)
|
break;
|
||||||
|| action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)
|
case WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION:
|
||||||
|| action.equals(ConnectivityManager.CONNECTIVITY_ACTION)
|
case WifiManager.WIFI_STATE_CHANGED_ACTION:
|
||||||
) {
|
case ConnectivityManager.CONNECTIVITY_ACTION:
|
||||||
Log.i("KdeConnect", "Connection state changed, trying to connect");
|
Log.i("KdeConnect", "Connection state changed, trying to connect");
|
||||||
BackgroundService.RunCommand(context, new BackgroundService.InstanceCallback() {
|
BackgroundService.RunCommand(context, new BackgroundService.InstanceCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onServiceStart(BackgroundService service) {
|
public void onServiceStart(BackgroundService service) {
|
||||||
service.onNetworkChange();
|
service.onNetworkChange();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (action.equals(Intent.ACTION_SCREEN_ON)) {
|
break;
|
||||||
BackgroundService.RunCommand(context, new BackgroundService.InstanceCallback() {
|
case Intent.ACTION_SCREEN_ON:
|
||||||
@Override
|
BackgroundService.RunCommand(context, new BackgroundService.InstanceCallback() {
|
||||||
public void onServiceStart(BackgroundService service) {
|
@Override
|
||||||
service.onNetworkChange();
|
public void onServiceStart(BackgroundService service) {
|
||||||
}
|
service.onNetworkChange();
|
||||||
});
|
}
|
||||||
} else {
|
});
|
||||||
Log.i("KdeConnectBroadcastReceiver", "Ignoring broadcast event: "+intent.getAction());
|
break;
|
||||||
|
default:
|
||||||
|
Log.i("BroadcastReceiver", "Ignoring broadcast event: "+intent.getAction());
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -28,6 +28,7 @@ import android.util.Base64;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.kde.kdeconnect.Helpers.DeviceHelper;
|
import org.kde.kdeconnect.Helpers.DeviceHelper;
|
||||||
import org.kde.kdeconnect.UserInterface.MainSettingsActivity;
|
import org.kde.kdeconnect.UserInterface.MainSettingsActivity;
|
||||||
@@ -35,6 +36,7 @@ import org.kde.kdeconnect.UserInterface.MainSettingsActivity;
|
|||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
import java.security.GeneralSecurityException;
|
||||||
import java.security.PrivateKey;
|
import java.security.PrivateKey;
|
||||||
import java.security.PublicKey;
|
import java.security.PublicKey;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -64,7 +66,7 @@ public class NetworkPackage {
|
|||||||
private JSONObject mBody;
|
private JSONObject mBody;
|
||||||
private InputStream mPayload;
|
private InputStream mPayload;
|
||||||
private JSONObject mPayloadTransferInfo;
|
private JSONObject mPayloadTransferInfo;
|
||||||
private int mPayloadSize;
|
private long mPayloadSize;
|
||||||
|
|
||||||
private NetworkPackage() {
|
private NetworkPackage() {
|
||||||
|
|
||||||
@@ -89,6 +91,8 @@ public class NetworkPackage {
|
|||||||
public void set(String key, String value) { if (value == null) return; try { mBody.put(key,value); } catch(Exception e) { } }
|
public void set(String key, String value) { if (value == null) return; try { mBody.put(key,value); } catch(Exception e) { } }
|
||||||
public int getInt(String key) { return mBody.optInt(key,-1); }
|
public int getInt(String key) { return mBody.optInt(key,-1); }
|
||||||
public int getInt(String key, int defaultValue) { return mBody.optInt(key,defaultValue); }
|
public int getInt(String key, int defaultValue) { return mBody.optInt(key,defaultValue); }
|
||||||
|
public long getLong(String key) { return mBody.optLong(key,-1); }
|
||||||
|
public long getLong(String key,long defaultValue) { return mBody.optLong(key,defaultValue); }
|
||||||
public void set(String key, int value) { try { mBody.put(key,value); } catch(Exception e) { } }
|
public void set(String key, int value) { try { mBody.put(key,value); } catch(Exception e) { } }
|
||||||
public boolean getBoolean(String key) { return mBody.optBoolean(key,false); }
|
public boolean getBoolean(String key) { return mBody.optBoolean(key,false); }
|
||||||
public boolean getBoolean(String key, boolean defaultValue) { return mBody.optBoolean(key,defaultValue); }
|
public boolean getBoolean(String key, boolean defaultValue) { return mBody.optBoolean(key,defaultValue); }
|
||||||
@@ -167,7 +171,7 @@ public class NetworkPackage {
|
|||||||
np.mBody = jo.getJSONObject("body");
|
np.mBody = jo.getJSONObject("body");
|
||||||
if (jo.has("payloadSize")) {
|
if (jo.has("payloadSize")) {
|
||||||
np.mPayloadTransferInfo = jo.getJSONObject("payloadTransferInfo");
|
np.mPayloadTransferInfo = jo.getJSONObject("payloadTransferInfo");
|
||||||
np.mPayloadSize = jo.getInt("payloadSize");
|
np.mPayloadSize = jo.getLong("payloadSize");
|
||||||
} else {
|
} else {
|
||||||
np.mPayloadTransferInfo = new JSONObject();
|
np.mPayloadTransferInfo = new JSONObject();
|
||||||
np.mPayloadSize = 0;
|
np.mPayloadSize = 0;
|
||||||
@@ -185,7 +189,7 @@ public class NetworkPackage {
|
|||||||
return np;
|
return np;
|
||||||
}
|
}
|
||||||
|
|
||||||
public NetworkPackage encrypt(PublicKey publicKey) throws Exception {
|
public NetworkPackage encrypt(PublicKey publicKey) throws GeneralSecurityException {
|
||||||
|
|
||||||
String serialized = serialize();
|
String serialized = serialize();
|
||||||
|
|
||||||
@@ -211,11 +215,12 @@ public class NetworkPackage {
|
|||||||
|
|
||||||
NetworkPackage encrypted = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_ENCRYPTED);
|
NetworkPackage encrypted = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_ENCRYPTED);
|
||||||
encrypted.set("data", chunks);
|
encrypted.set("data", chunks);
|
||||||
|
encrypted.setPayload(mPayload, mPayloadSize);
|
||||||
return encrypted;
|
return encrypted;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public NetworkPackage decrypt(PrivateKey privateKey) throws Exception {
|
public NetworkPackage decrypt(PrivateKey privateKey) throws GeneralSecurityException, JSONException {
|
||||||
|
|
||||||
JSONArray chunks = mBody.getJSONArray("data");
|
JSONArray chunks = mBody.getJSONArray("data");
|
||||||
|
|
||||||
@@ -229,7 +234,9 @@ public class NetworkPackage {
|
|||||||
decryptedJson += decryptedChunk;
|
decryptedJson += decryptedChunk;
|
||||||
}
|
}
|
||||||
|
|
||||||
return unserialize(decryptedJson);
|
NetworkPackage decrypted = unserialize(decryptedJson);
|
||||||
|
decrypted.setPayload(mPayload, mPayloadSize);
|
||||||
|
return decrypted;
|
||||||
}
|
}
|
||||||
|
|
||||||
static public NetworkPackage createIdentityPackage(Context context) {
|
static public NetworkPackage createIdentityPackage(Context context) {
|
||||||
@@ -273,7 +280,7 @@ public class NetworkPackage {
|
|||||||
setPayload(new ByteArrayInputStream(data), data.length);
|
setPayload(new ByteArrayInputStream(data), data.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPayload(InputStream stream, int size) {
|
public void setPayload(InputStream stream, long size) {
|
||||||
mPayload = stream;
|
mPayload = stream;
|
||||||
mPayloadSize = size;
|
mPayloadSize = size;
|
||||||
}
|
}
|
||||||
@@ -286,7 +293,7 @@ public class NetworkPackage {
|
|||||||
return mPayload;
|
return mPayload;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPayloadSize() {
|
public long getPayloadSize() {
|
||||||
return mPayloadSize;
|
return mPayloadSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -85,9 +85,9 @@ public class BatteryPlugin extends Plugin {
|
|||||||
int thresholdEvent = lowBattery? THRESHOLD_EVENT_BATTERY_LOW : THRESHOLD_EVENT_NONE;
|
int thresholdEvent = lowBattery? THRESHOLD_EVENT_BATTERY_LOW : THRESHOLD_EVENT_NONE;
|
||||||
|
|
||||||
if (lastInfo != null
|
if (lastInfo != null
|
||||||
&& isCharging != lastInfo.getBoolean("isCharging")
|
&& isCharging == lastInfo.getBoolean("isCharging")
|
||||||
&& currentCharge != lastInfo.getInt("currentCharge")
|
&& currentCharge == lastInfo.getInt("currentCharge")
|
||||||
&& thresholdEvent != lastInfo.getInt("thresholdEvent")
|
&& thresholdEvent == lastInfo.getInt("thresholdEvent")
|
||||||
) {
|
) {
|
||||||
|
|
||||||
//Do not send again if nothing has changed
|
//Do not send again if nothing has changed
|
||||||
|
@@ -22,7 +22,6 @@ package org.kde.kdeconnect.Plugins.ClibpoardPlugin;
|
|||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
|
||||||
|
@@ -23,7 +23,7 @@ package org.kde.kdeconnect.Plugins.MousePadPlugin;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.Log;
|
import android.util.SparseIntArray;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
@@ -31,15 +31,15 @@ import android.view.inputmethod.InputConnection;
|
|||||||
|
|
||||||
import org.kde.kdeconnect.BackgroundService;
|
import org.kde.kdeconnect.BackgroundService;
|
||||||
import org.kde.kdeconnect.Device;
|
import org.kde.kdeconnect.Device;
|
||||||
|
import org.kde.kdeconnect.NetworkPackage;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class KeyListenerView extends View {
|
public class KeyListenerView extends View {
|
||||||
|
|
||||||
private String deviceId;
|
private String deviceId;
|
||||||
|
|
||||||
private static HashMap<Integer, Integer> SpecialKeysMap = new HashMap<Integer, Integer>();
|
private static SparseIntArray SpecialKeysMap = new SparseIntArray();
|
||||||
static {
|
static {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
SpecialKeysMap.put(KeyEvent.KEYCODE_DEL, ++i); // 1
|
SpecialKeysMap.put(KeyEvent.KEYCODE_DEL, ++i); // 1
|
||||||
@@ -52,11 +52,29 @@ public class KeyListenerView extends View {
|
|||||||
SpecialKeysMap.put(KeyEvent.KEYCODE_PAGE_UP, ++i); // 8
|
SpecialKeysMap.put(KeyEvent.KEYCODE_PAGE_UP, ++i); // 8
|
||||||
SpecialKeysMap.put(KeyEvent.KEYCODE_PAGE_DOWN, ++i); // 9
|
SpecialKeysMap.put(KeyEvent.KEYCODE_PAGE_DOWN, ++i); // 9
|
||||||
if (Build.VERSION.SDK_INT >= 11) {
|
if (Build.VERSION.SDK_INT >= 11) {
|
||||||
SpecialKeysMap.put(KeyEvent.KEYCODE_MOVE_HOME, ++i); // 10
|
SpecialKeysMap.put(KeyEvent.KEYCODE_MOVE_HOME, ++i); // 10
|
||||||
SpecialKeysMap.put(KeyEvent.KEYCODE_MOVE_END, ++i); // 11
|
SpecialKeysMap.put(KeyEvent.KEYCODE_MOVE_END, ++i); // 11
|
||||||
SpecialKeysMap.put(KeyEvent.KEYCODE_NUMPAD_ENTER, ++i); // 12
|
SpecialKeysMap.put(KeyEvent.KEYCODE_NUMPAD_ENTER, ++i); // 12
|
||||||
SpecialKeysMap.put(KeyEvent.KEYCODE_FORWARD_DEL, ++i); // 13
|
SpecialKeysMap.put(KeyEvent.KEYCODE_FORWARD_DEL, ++i); // 13
|
||||||
SpecialKeysMap.put(KeyEvent.KEYCODE_ESCAPE, ++i); // 14
|
SpecialKeysMap.put(KeyEvent.KEYCODE_ESCAPE, ++i); // 14
|
||||||
|
SpecialKeysMap.put(KeyEvent.KEYCODE_SYSRQ, ++i); // 15
|
||||||
|
SpecialKeysMap.put(KeyEvent.KEYCODE_SCROLL_LOCK, ++i); // 16
|
||||||
|
++i; // 17
|
||||||
|
++i; // 18
|
||||||
|
++i; // 19
|
||||||
|
++i; // 20
|
||||||
|
SpecialKeysMap.put(KeyEvent.KEYCODE_F1, ++i); // 21
|
||||||
|
SpecialKeysMap.put(KeyEvent.KEYCODE_F2, ++i); // 22
|
||||||
|
SpecialKeysMap.put(KeyEvent.KEYCODE_F3, ++i); // 23
|
||||||
|
SpecialKeysMap.put(KeyEvent.KEYCODE_F4, ++i); // 24
|
||||||
|
SpecialKeysMap.put(KeyEvent.KEYCODE_F5, ++i); // 25
|
||||||
|
SpecialKeysMap.put(KeyEvent.KEYCODE_F6, ++i); // 26
|
||||||
|
SpecialKeysMap.put(KeyEvent.KEYCODE_F7, ++i); // 27
|
||||||
|
SpecialKeysMap.put(KeyEvent.KEYCODE_F8, ++i); // 28
|
||||||
|
SpecialKeysMap.put(KeyEvent.KEYCODE_F9, ++i); // 29
|
||||||
|
SpecialKeysMap.put(KeyEvent.KEYCODE_F10, ++i); // 30
|
||||||
|
SpecialKeysMap.put(KeyEvent.KEYCODE_F11, ++i); // 31
|
||||||
|
SpecialKeysMap.put(KeyEvent.KEYCODE_F12, ++i); // 21
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,38 +103,85 @@ public class KeyListenerView extends View {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
||||||
|
|
||||||
char utfChar = (char)event.getUnicodeChar();
|
|
||||||
if (utfChar == 9 || utfChar == 10) utfChar = 0; //Workaround to send enter and tab as special keys instead of characters
|
|
||||||
|
|
||||||
if (utfChar != 0) {
|
/* NOTE: Some keyboards, and specifically the Android default keyboard when
|
||||||
final String utfString = new String(new char[]{utfChar});
|
* entering non-ascii characters, will not trigger KeyEvent events as documented
|
||||||
BackgroundService.RunCommand(getContext(), new BackgroundService.InstanceCallback() {
|
* here: http://developer.android.com/reference/android/view/KeyEvent.html
|
||||||
@Override
|
*/
|
||||||
public void onServiceStart(BackgroundService service) {
|
//Log.e("KeyDown", "------------");
|
||||||
Device device = service.getDevice(deviceId);
|
//Log.e("KeyDown", "keyChar:" + (int) event.getDisplayLabel());
|
||||||
MousePadPlugin mousePadPlugin = (MousePadPlugin)device.getPlugin("plugin_mousepad");
|
//Log.e("KeyDown", "utfChar:" + (char)event.getUnicodeChar());
|
||||||
if (mousePadPlugin == null) return;
|
//Log.e("KeyDown", "intUtfChar:" + event.getUnicodeChar());
|
||||||
|
|
||||||
mousePadPlugin.sendKey(utfString);
|
final NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MOUSEPAD);
|
||||||
}
|
|
||||||
});
|
boolean modifier = false;
|
||||||
} else {
|
if (event.isAltPressed()) {
|
||||||
if (!SpecialKeysMap.containsKey(keyCode)) {
|
np.set("alt", true);
|
||||||
return false;
|
modifier = true;
|
||||||
|
}
|
||||||
|
if (Build.VERSION.SDK_INT >= 11) {
|
||||||
|
if (event.isCtrlPressed()) {
|
||||||
|
np.set("ctrl", true);
|
||||||
|
modifier = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modifier) {
|
||||||
|
|
||||||
|
//Only send shift in combination with other modifiers or special keys. Otherwise let it modify the letter itself and get the final result in utf.
|
||||||
|
if (event.isShiftPressed()) {
|
||||||
|
np.set("shift", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
final int specialKey = SpecialKeysMap.get(keyCode);
|
int specialKey = SpecialKeysMap.get(keyCode, -1);
|
||||||
BackgroundService.RunCommand(getContext(), new BackgroundService.InstanceCallback() {
|
if (specialKey != -1) {
|
||||||
@Override
|
np.set("specialKey", specialKey);
|
||||||
public void onServiceStart(BackgroundService service) {
|
} else if (event.getDisplayLabel() != 0) {
|
||||||
Device device = service.getDevice(deviceId);
|
//Alt will change the utf symbol to non-ascii characters, we want the plain original letter
|
||||||
MousePadPlugin mousePadPlugin = (MousePadPlugin)device.getPlugin("plugin_mousepad");
|
//Since getDisplayLabel will always have a value, we have to check for special keys before
|
||||||
if (mousePadPlugin == null) return;
|
char keyCharacter = event.getDisplayLabel();
|
||||||
mousePadPlugin.sendSpecialKey(specialKey);
|
np.set("key", new String(new char[]{keyCharacter}).toLowerCase());
|
||||||
|
} else {
|
||||||
|
return false; //We don't know what to send, better send nothing. Probably this is the modifier key itself.
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
//If it's not a modifier+key combination, we want the fancy (potentially utf) version of the key pressed
|
||||||
|
char utfChar = (char) event.getUnicodeChar();
|
||||||
|
|
||||||
|
//Workaround to send enter and tab as special keys instead of characters
|
||||||
|
if (utfChar == 9 || utfChar == 10) utfChar = 0;
|
||||||
|
|
||||||
|
if (utfChar != 0) {
|
||||||
|
String utfString = new String(new char[]{utfChar});
|
||||||
|
np.set("key", utfString);
|
||||||
|
} else {
|
||||||
|
int specialKey = SpecialKeysMap.get(keyCode, -1);
|
||||||
|
if (specialKey != -1) {
|
||||||
|
//Only send shift in combination with other modifiers or special keys. Otherwise let it modify the letter itself and get the final result in utf.
|
||||||
|
if (event.isShiftPressed()) {
|
||||||
|
np.set("shift", true);
|
||||||
|
}
|
||||||
|
//If it was not a displayable character, check if it was a special key
|
||||||
|
np.set("specialKey", specialKey);
|
||||||
|
} else {
|
||||||
|
return false; //We don't know what to send, better send nothing. Probably this is an unhandled special key.
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BackgroundService.RunCommand(getContext(), new BackgroundService.InstanceCallback() {
|
||||||
|
@Override
|
||||||
|
public void onServiceStart(BackgroundService service) {
|
||||||
|
Device device = service.getDevice(deviceId);
|
||||||
|
MousePadPlugin mousePadPlugin = (MousePadPlugin) device.getPlugin("plugin_mousepad");
|
||||||
|
if (mousePadPlugin == null) return;
|
||||||
|
mousePadPlugin.sendKeyboardPacket(np);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -22,10 +22,13 @@ package org.kde.kdeconnect.Plugins.MousePadPlugin;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.support.v7.app.ActionBarActivity;
|
import android.support.v7.app.ActionBarActivity;
|
||||||
import android.view.GestureDetector;
|
import android.view.GestureDetector;
|
||||||
|
import android.view.HapticFeedbackConstants;
|
||||||
|
import android.view.View;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
@@ -55,7 +58,16 @@ public class MousePadActivity extends ActionBarActivity implements GestureDetect
|
|||||||
|
|
||||||
KeyListenerView keyListenerView;
|
KeyListenerView keyListenerView;
|
||||||
|
|
||||||
enum ClickType {RIGHT,MIDDLE}
|
static enum ClickType {
|
||||||
|
RIGHT, MIDDLE, NONE;
|
||||||
|
static ClickType fromString(String s) {
|
||||||
|
switch(s) {
|
||||||
|
case "right": return RIGHT;
|
||||||
|
case "middle": return MIDDLE;
|
||||||
|
default: return NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private ClickType doubleTapAction, tripleTapAction;
|
private ClickType doubleTapAction, tripleTapAction;
|
||||||
|
|
||||||
@@ -67,6 +79,8 @@ public class MousePadActivity extends ActionBarActivity implements GestureDetect
|
|||||||
|
|
||||||
deviceId = getIntent().getStringExtra("deviceId");
|
deviceId = getIntent().getStringExtra("deviceId");
|
||||||
|
|
||||||
|
getWindow().getDecorView().setHapticFeedbackEnabled(true);
|
||||||
|
|
||||||
mDetector = new GestureDetector(this, this);
|
mDetector = new GestureDetector(this, this);
|
||||||
mMousePadGestureDetector = new MousePadGestureDetector(this, this);
|
mMousePadGestureDetector = new MousePadGestureDetector(this, this);
|
||||||
mDetector.setOnDoubleTapListener(this);
|
mDetector.setOnDoubleTapListener(this);
|
||||||
@@ -80,10 +94,36 @@ public class MousePadActivity extends ActionBarActivity implements GestureDetect
|
|||||||
String tripleTapSetting = prefs.getString(getString(R.string.mousepad_triple_tap_key),
|
String tripleTapSetting = prefs.getString(getString(R.string.mousepad_triple_tap_key),
|
||||||
getString(R.string.mousepad_triple_default));
|
getString(R.string.mousepad_triple_default));
|
||||||
|
|
||||||
doubleTapAction = getString(R.string.mousepad_right_value).equals(doubleTapSetting)?
|
doubleTapAction = ClickType.fromString(doubleTapSetting);
|
||||||
ClickType.RIGHT : ClickType.MIDDLE;
|
tripleTapAction = ClickType.fromString(tripleTapSetting);
|
||||||
tripleTapAction = getString(R.string.mousepad_right_value).equals(tripleTapSetting)?
|
|
||||||
ClickType.RIGHT : ClickType.MIDDLE;
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||||
|
final View decorView = getWindow().getDecorView();
|
||||||
|
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onSystemUiVisibilityChange(int visibility) {
|
||||||
|
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
|
||||||
|
|
||||||
|
int fullscreenType = 0;
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
|
||||||
|
fullscreenType |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
||||||
|
fullscreenType |= View.SYSTEM_UI_FLAG_FULLSCREEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||||
|
fullscreenType |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
|
||||||
|
}
|
||||||
|
|
||||||
|
getWindow().getDecorView().setSystemUiVisibility(fullscreenType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -110,8 +150,6 @@ public class MousePadActivity extends ActionBarActivity implements GestureDetect
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onTouchEvent(MotionEvent event) {
|
public boolean onTouchEvent(MotionEvent event) {
|
||||||
if (mMousePadGestureDetector.onTouchEvent(event)) {
|
if (mMousePadGestureDetector.onTouchEvent(event)) {
|
||||||
@@ -203,7 +241,18 @@ public class MousePadActivity extends ActionBarActivity implements GestureDetect
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLongPress(MotionEvent e) {
|
public void onLongPress(MotionEvent e) {
|
||||||
//From GestureDetector, left empty
|
|
||||||
|
getWindow().getDecorView().performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
|
||||||
|
|
||||||
|
BackgroundService.RunCommand(this, new BackgroundService.InstanceCallback() {
|
||||||
|
@Override
|
||||||
|
public void onServiceStart(BackgroundService service) {
|
||||||
|
Device device = service.getDevice(deviceId);
|
||||||
|
MousePadPlugin mousePadPlugin = (MousePadPlugin)device.getPlugin("plugin_mousepad");
|
||||||
|
if (mousePadPlugin == null) return;
|
||||||
|
mousePadPlugin.sendSingleHold();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -250,10 +299,10 @@ public class MousePadActivity extends ActionBarActivity implements GestureDetect
|
|||||||
case RIGHT:
|
case RIGHT:
|
||||||
sendRightClick();
|
sendRightClick();
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
case MIDDLE:
|
case MIDDLE:
|
||||||
sendMiddleClick();
|
sendMiddleClick();
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -261,13 +310,13 @@ public class MousePadActivity extends ActionBarActivity implements GestureDetect
|
|||||||
@Override
|
@Override
|
||||||
public boolean onDoubleFingerTap(MotionEvent ev) {
|
public boolean onDoubleFingerTap(MotionEvent ev) {
|
||||||
switch(doubleTapAction){
|
switch(doubleTapAction){
|
||||||
default:
|
|
||||||
case RIGHT:
|
case RIGHT:
|
||||||
sendRightClick();
|
sendRightClick();
|
||||||
break;
|
break;
|
||||||
case MIDDLE:
|
case MIDDLE:
|
||||||
sendMiddleClick();
|
sendMiddleClick();
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -290,12 +339,23 @@ public class MousePadActivity extends ActionBarActivity implements GestureDetect
|
|||||||
@Override
|
@Override
|
||||||
public void onServiceStart(BackgroundService service) {
|
public void onServiceStart(BackgroundService service) {
|
||||||
Device device = service.getDevice(deviceId);
|
Device device = service.getDevice(deviceId);
|
||||||
MousePadPlugin mousePadPlugin = (MousePadPlugin)device.getPlugin("plugin_mousepad");
|
MousePadPlugin mousePadPlugin = (MousePadPlugin) device.getPlugin("plugin_mousepad");
|
||||||
if (mousePadPlugin == null) return;
|
if (mousePadPlugin == null) return;
|
||||||
mousePadPlugin.sendRightClick();
|
mousePadPlugin.sendRightClick();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
private void sendSingleHold() {
|
||||||
|
BackgroundService.RunCommand(this, new BackgroundService.InstanceCallback() {
|
||||||
|
@Override
|
||||||
|
public void onServiceStart(BackgroundService service) {
|
||||||
|
Device device = service.getDevice(deviceId);
|
||||||
|
MousePadPlugin mousePadPlugin = (MousePadPlugin) device.getPlugin("plugin_mousepad");
|
||||||
|
if (mousePadPlugin == null) return;
|
||||||
|
mousePadPlugin.sendSingleHold();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private void showKeyboard() {
|
private void showKeyboard() {
|
||||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
@@ -30,8 +30,6 @@ public class MousePadGestureDetector {
|
|||||||
private static final int TAP_TIMEOUT = ViewConfiguration.getTapTimeout() + 100;
|
private static final int TAP_TIMEOUT = ViewConfiguration.getTapTimeout() + 100;
|
||||||
private OnGestureListener mGestureListener;
|
private OnGestureListener mGestureListener;
|
||||||
|
|
||||||
private Context mCtx;
|
|
||||||
|
|
||||||
private long mFirstDownTime = 0;
|
private long mFirstDownTime = 0;
|
||||||
|
|
||||||
private boolean mIsGestureHandled;
|
private boolean mIsGestureHandled;
|
||||||
@@ -48,7 +46,6 @@ public class MousePadGestureDetector {
|
|||||||
throw new IllegalArgumentException("gestureListener cannot be null");
|
throw new IllegalArgumentException("gestureListener cannot be null");
|
||||||
}
|
}
|
||||||
mGestureListener = gestureListener;
|
mGestureListener = gestureListener;
|
||||||
mCtx = ctx;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean onTouchEvent(MotionEvent event) {
|
public boolean onTouchEvent(MotionEvent event) {
|
||||||
|
@@ -22,7 +22,6 @@ package org.kde.kdeconnect.Plugins.MousePadPlugin;
|
|||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -128,6 +127,12 @@ public class MousePadPlugin extends Plugin {
|
|||||||
device.sendPackage(np);
|
device.sendPackage(np);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sendSingleHold(){
|
||||||
|
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MOUSEPAD);
|
||||||
|
np.set("singlehold", true);
|
||||||
|
device.sendPackage(np);
|
||||||
|
}
|
||||||
|
|
||||||
public void sendScroll(float dx, float dy) {
|
public void sendScroll(float dx, float dy) {
|
||||||
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MOUSEPAD);
|
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MOUSEPAD);
|
||||||
np.set("scroll", true);
|
np.set("scroll", true);
|
||||||
@@ -136,15 +141,7 @@ public class MousePadPlugin extends Plugin {
|
|||||||
device.sendPackage(np);
|
device.sendPackage(np);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendKey(String utfChar) {
|
public void sendKeyboardPacket(NetworkPackage np) {
|
||||||
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MOUSEPAD);
|
|
||||||
np.set("key", utfChar);
|
|
||||||
device.sendPackage(np);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sendSpecialKey(int specialKey) {
|
|
||||||
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MOUSEPAD);
|
|
||||||
np.set("specialKey", specialKey);
|
|
||||||
device.sendPackage(np);
|
device.sendPackage(np);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -20,7 +20,6 @@
|
|||||||
|
|
||||||
package org.kde.kdeconnect.Plugins.MprisPlugin;
|
package org.kde.kdeconnect.Plugins.MprisPlugin;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
@@ -48,34 +47,60 @@ import java.util.ArrayList;
|
|||||||
|
|
||||||
public class MprisActivity extends ActionBarActivity {
|
public class MprisActivity extends ActionBarActivity {
|
||||||
|
|
||||||
//TODO: Add a loading spinner at the beginning (to distinguish the loading state from a no-players state).
|
|
||||||
//TODO 2: Add a message when no players are detected after loading completes
|
|
||||||
|
|
||||||
private String deviceId;
|
private String deviceId;
|
||||||
|
private final Handler positionSeekUpdateHandler = new Handler();
|
||||||
|
private Runnable positionSeekUpdateRunnable = null;
|
||||||
|
private String targetPlayer = null;
|
||||||
|
|
||||||
|
private static String milisToProgress(long milis) {
|
||||||
|
int length = (int)(milis / 1000); //From milis to seconds
|
||||||
|
StringBuilder text = new StringBuilder();
|
||||||
|
int minutes = length / 60;
|
||||||
|
if (minutes > 60) {
|
||||||
|
int hours = minutes / 60;
|
||||||
|
minutes = minutes % 60;
|
||||||
|
text.append(hours).append(':');
|
||||||
|
if (minutes < 10) text.append('0');
|
||||||
|
}
|
||||||
|
text.append(minutes).append(':');
|
||||||
|
int seconds = (length % 60);
|
||||||
|
if(seconds < 10) text.append('0'); // needed to show length properly (eg 4:05 instead of 4:5)
|
||||||
|
text.append(seconds);
|
||||||
|
return text.toString();
|
||||||
|
}
|
||||||
protected void connectToPlugin() {
|
protected void connectToPlugin() {
|
||||||
|
|
||||||
final String deviceId = getIntent().getStringExtra("deviceId");
|
|
||||||
|
|
||||||
BackgroundService.RunCommand(this, new BackgroundService.InstanceCallback() {
|
BackgroundService.RunCommand(this, new BackgroundService.InstanceCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onServiceStart(BackgroundService service) {
|
public void onServiceStart(BackgroundService service) {
|
||||||
|
|
||||||
Device device = service.getDevice(deviceId);
|
final Device device = service.getDevice(deviceId);
|
||||||
final MprisPlugin mpris = (MprisPlugin) device.getPlugin("plugin_mpris");
|
final MprisPlugin mpris = (MprisPlugin) device.getPlugin("plugin_mpris");
|
||||||
if (mpris == null) {
|
if (mpris == null) {
|
||||||
Log.e("MprisActivity", "device has no mpris plugin!");
|
Log.e("MprisActivity", "device has no mpris plugin!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mpris.setPlayerStatusUpdatedHandler(new Handler() {
|
mpris.setPlayerStatusUpdatedHandler("activity", new Handler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleMessage(Message msg) {
|
public void handleMessage(Message msg) {
|
||||||
runOnUiThread(new Runnable() {
|
runOnUiThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
String s = mpris.getCurrentSong();
|
String song = mpris.getCurrentSong();
|
||||||
((TextView) findViewById(R.id.now_playing_textview)).setText(s);
|
((TextView) findViewById(R.id.now_playing_textview)).setText(song);
|
||||||
|
|
||||||
|
if (mpris.getLength() > -1 && mpris.getPosition() > -1 && !"Spotify".equals(mpris.getPlayer())) {
|
||||||
|
((TextView) findViewById(R.id.time_textview)).setText(milisToProgress(mpris.getLength()));
|
||||||
|
|
||||||
|
SeekBar positionSeek = (SeekBar)findViewById(R.id.positionSeek);
|
||||||
|
positionSeek.setMax((int)(mpris.getLength()));
|
||||||
|
positionSeek.setProgress((int)(mpris.getPosition()));
|
||||||
|
|
||||||
|
findViewById(R.id.progress_slider).setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
findViewById(R.id.progress_slider).setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
int volume = mpris.getVolume();
|
int volume = mpris.getVolume();
|
||||||
((SeekBar) findViewById(R.id.volume_seek)).setProgress(volume);
|
((SeekBar) findViewById(R.id.volume_seek)).setProgress(volume);
|
||||||
@@ -86,13 +111,12 @@ public class MprisActivity extends ActionBarActivity {
|
|||||||
} else {
|
} else {
|
||||||
((ImageButton) findViewById(R.id.play_button)).setImageResource(android.R.drawable.ic_media_play);
|
((ImageButton) findViewById(R.id.play_button)).setImageResource(android.R.drawable.ic_media_play);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
mpris.setPlayerListUpdatedHandler(new Handler() {
|
mpris.setPlayerListUpdatedHandler("activity", new Handler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleMessage(Message msg) {
|
public void handleMessage(Message msg) {
|
||||||
final ArrayList<String> playerList = mpris.getPlayerList();
|
final ArrayList<String> playerList = mpris.getPlayerList();
|
||||||
@@ -100,6 +124,7 @@ public class MprisActivity extends ActionBarActivity {
|
|||||||
android.R.layout.simple_spinner_item,
|
android.R.layout.simple_spinner_item,
|
||||||
playerList.toArray(new String[playerList.size()])
|
playerList.toArray(new String[playerList.size()])
|
||||||
);
|
);
|
||||||
|
|
||||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
runOnUiThread(new Runnable() {
|
runOnUiThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
@@ -108,6 +133,14 @@ public class MprisActivity extends ActionBarActivity {
|
|||||||
//String prevPlayer = (String)spinner.getSelectedItem();
|
//String prevPlayer = (String)spinner.getSelectedItem();
|
||||||
spinner.setAdapter(adapter);
|
spinner.setAdapter(adapter);
|
||||||
|
|
||||||
|
if(playerList.isEmpty()){
|
||||||
|
findViewById(R.id.no_players).setVisibility(View.VISIBLE);
|
||||||
|
spinner.setVisibility(View.GONE);
|
||||||
|
}else{
|
||||||
|
findViewById(R.id.no_players).setVisibility(View.GONE);
|
||||||
|
spinner.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onItemSelected(AdapterView<?> arg0, View arg1, int pos, long id) {
|
public void onItemSelected(AdapterView<?> arg0, View arg1, int pos, long id) {
|
||||||
@@ -118,14 +151,18 @@ public class MprisActivity extends ActionBarActivity {
|
|||||||
String player = playerList.get(pos);
|
String player = playerList.get(pos);
|
||||||
mpris.setPlayer(player);
|
mpris.setPlayer(player);
|
||||||
//Spotify doesn't support changing the volume yet...
|
//Spotify doesn't support changing the volume yet...
|
||||||
|
//Also doesn't support seeking and telling actual position...
|
||||||
if (player.equals("Spotify")) {
|
if (player.equals("Spotify")) {
|
||||||
findViewById(R.id.volume_layout).setVisibility(View.INVISIBLE);
|
findViewById(R.id.volume_layout).setVisibility(View.INVISIBLE);
|
||||||
findViewById(R.id.rew_button).setVisibility(View.GONE);
|
findViewById(R.id.rew_button).setVisibility(View.GONE);
|
||||||
findViewById(R.id.ff_button).setVisibility(View.GONE);
|
findViewById(R.id.ff_button).setVisibility(View.GONE);
|
||||||
|
findViewById(R.id.positionSeek).setVisibility(View.INVISIBLE);
|
||||||
|
findViewById(R.id.progress_slider).setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
findViewById(R.id.volume_layout).setVisibility(View.VISIBLE);
|
findViewById(R.id.volume_layout).setVisibility(View.VISIBLE);
|
||||||
findViewById(R.id.rew_button).setVisibility(View.VISIBLE);
|
findViewById(R.id.rew_button).setVisibility(View.VISIBLE);
|
||||||
findViewById(R.id.ff_button).setVisibility(View.VISIBLE);
|
findViewById(R.id.ff_button).setVisibility(View.VISIBLE);
|
||||||
|
findViewById(R.id.positionSeek).setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,11 +172,18 @@ public class MprisActivity extends ActionBarActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// restore the selected player
|
if (targetPlayer != null) {
|
||||||
int position = adapter.getPosition(mpris.getPlayer());
|
int targetIndex = adapter.getPosition(targetPlayer);
|
||||||
|
if (targetIndex >= 0) {
|
||||||
if (position >= 0) {
|
spinner.setSelection(targetIndex);
|
||||||
spinner.setSelection(position);
|
}
|
||||||
|
targetPlayer = null;
|
||||||
|
} else {
|
||||||
|
// restore last selected player
|
||||||
|
int position = adapter.getPosition(mpris.getPlayer());
|
||||||
|
if (position >= 0) {
|
||||||
|
spinner.setSelection(position);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -240,6 +284,8 @@ public class MprisActivity extends ActionBarActivity {
|
|||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.mpris_control);
|
setContentView(R.layout.mpris_control);
|
||||||
|
|
||||||
|
targetPlayer = getIntent().getStringExtra("player");
|
||||||
|
getIntent().removeExtra("player");
|
||||||
deviceId = getIntent().getStringExtra("deviceId");
|
deviceId = getIntent().getStringExtra("deviceId");
|
||||||
|
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
@@ -354,9 +400,60 @@ public class MprisActivity extends ActionBarActivity {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
positionSeekUpdateRunnable = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
final SeekBar positionSeek = (SeekBar)findViewById(R.id.positionSeek);
|
||||||
|
BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() {
|
||||||
|
@Override
|
||||||
|
public void onServiceStart(BackgroundService service) {
|
||||||
|
Device device = service.getDevice(deviceId);
|
||||||
|
MprisPlugin mpris = (MprisPlugin) device.getPlugin("plugin_mpris");
|
||||||
|
if (mpris != null) {
|
||||||
|
positionSeek.setProgress((int) (mpris.getPosition()));
|
||||||
|
}
|
||||||
|
positionSeekUpdateHandler.postDelayed(positionSeekUpdateRunnable, 1000);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
positionSeekUpdateHandler.postDelayed(positionSeekUpdateRunnable, 200);
|
||||||
|
|
||||||
|
((SeekBar)findViewById(R.id.positionSeek)).setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onProgressChanged(SeekBar seekBar, int progress, boolean byUser) {
|
||||||
|
((TextView)findViewById(R.id.progress_textview)).setText(milisToProgress(progress));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStartTrackingTouch(SeekBar seekBar) {
|
||||||
|
positionSeekUpdateHandler.removeCallbacks(positionSeekUpdateRunnable);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStopTrackingTouch(final SeekBar seekBar) {
|
||||||
|
BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() {
|
||||||
|
@Override
|
||||||
|
public void onServiceStart(BackgroundService service) {
|
||||||
|
Device device = service.getDevice(deviceId);
|
||||||
|
MprisPlugin mpris = (MprisPlugin) device.getPlugin("plugin_mpris");
|
||||||
|
if (mpris != null) {
|
||||||
|
mpris.setPosition(seekBar.getProgress());
|
||||||
|
}
|
||||||
|
positionSeekUpdateHandler.postDelayed(positionSeekUpdateRunnable, 200);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
positionSeekUpdateHandler.removeCallbacks(positionSeekUpdateRunnable);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -22,7 +22,6 @@ package org.kde.kdeconnect.Plugins.MprisPlugin;
|
|||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
@@ -36,19 +35,21 @@ import org.kde.kdeconnect.Plugins.Plugin;
|
|||||||
import org.kde.kdeconnect_tp.R;
|
import org.kde.kdeconnect_tp.R;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class MprisPlugin extends Plugin {
|
public class MprisPlugin extends Plugin {
|
||||||
|
|
||||||
private String currentSong = "";
|
|
||||||
private int volume = 50;
|
|
||||||
private Handler playerStatusUpdated = null;
|
|
||||||
|
|
||||||
private ArrayList<String> playerList = new ArrayList<String>();
|
|
||||||
private Handler playerListUpdated = null;
|
|
||||||
|
|
||||||
private String player = "";
|
private String player = "";
|
||||||
private boolean playing = false;
|
private boolean playing = false;
|
||||||
|
private String currentSong = "";
|
||||||
|
private int volume = 50;
|
||||||
|
private long length = -1;
|
||||||
|
private long lastPosition;
|
||||||
|
private long lastPositionTime;
|
||||||
|
private HashMap<String,Handler> playerStatusUpdated = new HashMap<String,Handler>();
|
||||||
|
|
||||||
|
private ArrayList<String> playerList = new ArrayList<String>();
|
||||||
|
private HashMap<String,Handler> playerListUpdated = new HashMap<String,Handler>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getPluginName() {
|
public String getPluginName() {
|
||||||
@@ -83,6 +84,7 @@ public class MprisPlugin extends Plugin {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onCreate() {
|
public boolean onCreate() {
|
||||||
requestPlayerList();
|
requestPlayerList();
|
||||||
|
lastPositionTime = System.currentTimeMillis();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,24 +93,36 @@ public class MprisPlugin extends Plugin {
|
|||||||
playerList.clear();
|
playerList.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendAction(String s) {
|
public void sendAction(String player, String action) {
|
||||||
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MPRIS);
|
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MPRIS);
|
||||||
np.set("player",player);
|
np.set("player", player);
|
||||||
np.set("action",s);
|
np.set("action", action);
|
||||||
device.sendPackage(np);
|
device.sendPackage(np);
|
||||||
}
|
}
|
||||||
|
public void sendAction(String action) {
|
||||||
|
sendAction(player, action);
|
||||||
|
}
|
||||||
|
|
||||||
public void setVolume(int volume) {
|
public void setVolume(int volume) {
|
||||||
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MPRIS);
|
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MPRIS);
|
||||||
np.set("player",player);
|
np.set("player", player);
|
||||||
np.set("setVolume",volume);
|
np.set("setVolume",volume);
|
||||||
device.sendPackage(np);
|
device.sendPackage(np);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setPosition(int position) {
|
||||||
|
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MPRIS);
|
||||||
|
np.set("player", player);
|
||||||
|
np.set("SetPosition", position);
|
||||||
|
device.sendPackage(np);
|
||||||
|
this.lastPosition = position;
|
||||||
|
this.lastPositionTime = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
public void Seek(int offset) {
|
public void Seek(int offset) {
|
||||||
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MPRIS);
|
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MPRIS);
|
||||||
np.set("player",player);
|
np.set("player", player);
|
||||||
np.set("Seek",offset);
|
np.set("Seek", offset);
|
||||||
device.sendPackage(np);
|
device.sendPackage(np);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,18 +130,23 @@ public class MprisPlugin extends Plugin {
|
|||||||
public boolean onPackageReceived(NetworkPackage np) {
|
public boolean onPackageReceived(NetworkPackage np) {
|
||||||
if (!np.getType().equals(NetworkPackage.PACKAGE_TYPE_MPRIS)) return false;
|
if (!np.getType().equals(NetworkPackage.PACKAGE_TYPE_MPRIS)) return false;
|
||||||
|
|
||||||
if (np.has("nowPlaying") || np.has("volume") || np.has("isPlaying")) {
|
if (np.has("nowPlaying") || np.has("volume") || np.has("isPlaying") || np.has("length") || np.has("pos")) {
|
||||||
if (np.getString("player").equals(player)) {
|
if (np.getString("player").equals(player)) {
|
||||||
currentSong = np.getString("nowPlaying", currentSong);
|
currentSong = np.getString("nowPlaying", currentSong);
|
||||||
volume = np.getInt("volume", volume);
|
volume = np.getInt("volume", volume);
|
||||||
|
length = np.getLong("length", length);
|
||||||
|
if(np.has("pos")){
|
||||||
|
lastPosition = np.getLong("pos", lastPosition);
|
||||||
|
lastPositionTime = System.currentTimeMillis();
|
||||||
|
}
|
||||||
playing = np.getBoolean("isPlaying", playing);
|
playing = np.getBoolean("isPlaying", playing);
|
||||||
if (playerStatusUpdated != null) {
|
for (String key : playerStatusUpdated.keySet()) {
|
||||||
try {
|
try {
|
||||||
playerStatusUpdated.dispatchMessage(new Message());
|
playerStatusUpdated.get(key).dispatchMessage(new Message());
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Log.e("MprisControl","Exception");
|
Log.e("MprisControl","Exception");
|
||||||
playerStatusUpdated = null;
|
playerStatusUpdated.remove(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -148,13 +167,13 @@ public class MprisPlugin extends Plugin {
|
|||||||
}
|
}
|
||||||
if (!equals) {
|
if (!equals) {
|
||||||
playerList = newPlayerList;
|
playerList = newPlayerList;
|
||||||
if (playerListUpdated != null) {
|
for (String key : playerListUpdated.keySet()) {
|
||||||
try {
|
try {
|
||||||
playerListUpdated.dispatchMessage(new Message());
|
playerListUpdated.get(key).dispatchMessage(new Message());
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Log.e("MprisControl","Exception");
|
Log.e("MprisControl","Exception");
|
||||||
playerListUpdated = null;
|
playerListUpdated.remove(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -163,41 +182,50 @@ public class MprisPlugin extends Plugin {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPlayerStatusUpdatedHandler(Handler h) {
|
public void setPlayerStatusUpdatedHandler(String id, Handler h) {
|
||||||
playerStatusUpdated = h;
|
playerStatusUpdated.put(id, h);
|
||||||
if (currentSong.length() > 0) h.dispatchMessage(new Message());
|
if (playerListUpdated.size() == 1) {
|
||||||
|
requestPlayerStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
h.dispatchMessage(new Message());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPlayerListUpdatedHandler(String id, Handler h) {
|
||||||
|
if (playerList.size() > 0) {
|
||||||
|
h.dispatchMessage(new Message());
|
||||||
|
}
|
||||||
|
|
||||||
|
playerListUpdated.put(id,h);
|
||||||
|
if (playerListUpdated.size() == 1) {
|
||||||
|
requestPlayerList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPlayer(String player) {
|
||||||
|
if (player == null || player.equals(this.player)) return;
|
||||||
|
this.player = player;
|
||||||
|
currentSong = "";
|
||||||
|
volume = 50;
|
||||||
|
playing = false;
|
||||||
|
for (String key : playerStatusUpdated.keySet()) {
|
||||||
|
try {
|
||||||
|
playerStatusUpdated.get(key).dispatchMessage(new Message());
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
Log.e("MprisControl","Exception");
|
||||||
|
playerStatusUpdated.remove(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
requestPlayerStatus();
|
requestPlayerStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCurrentSong() {
|
|
||||||
return currentSong;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlayerListUpdatedHandler(Handler h) {
|
|
||||||
playerListUpdated = h;
|
|
||||||
if (playerList.size() > 0) h.dispatchMessage(new Message());
|
|
||||||
requestPlayerList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArrayList<String> getPlayerList() {
|
public ArrayList<String> getPlayerList() {
|
||||||
return playerList;
|
return playerList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPlayer(String s) {
|
public String getCurrentSong() {
|
||||||
player = s;
|
return currentSong;
|
||||||
currentSong = "";
|
|
||||||
volume = 50;
|
|
||||||
playing = false;
|
|
||||||
if (playerStatusUpdated != null) {
|
|
||||||
try {
|
|
||||||
playerStatusUpdated.dispatchMessage(new Message());
|
|
||||||
} catch(Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
Log.e("MprisControl","Exception");
|
|
||||||
playerStatusUpdated = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
requestPlayerStatus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getPlayer() {
|
public String getPlayer() {
|
||||||
@@ -208,17 +236,26 @@ public class MprisPlugin extends Plugin {
|
|||||||
return volume;
|
return volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getLength(){ return length; }
|
||||||
|
|
||||||
public boolean isPlaying() {
|
public boolean isPlaying() {
|
||||||
return playing;
|
return playing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getPosition(){
|
||||||
|
if(playing) {
|
||||||
|
return lastPosition + (System.currentTimeMillis() - lastPositionTime);
|
||||||
|
} else {
|
||||||
|
return lastPosition;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void requestPlayerList() {
|
private void requestPlayerList() {
|
||||||
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MPRIS);
|
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MPRIS);
|
||||||
np.set("requestPlayerList",true);
|
np.set("requestPlayerList",true);
|
||||||
device.sendPackage(np);
|
device.sendPackage(np);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void requestPlayerStatus() {
|
private void requestPlayerStatus() {
|
||||||
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MPRIS);
|
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MPRIS);
|
||||||
np.set("player",player);
|
np.set("player",player);
|
||||||
|
@@ -0,0 +1,125 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015 Vineet Garg <grg.vineet@gmail.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of
|
||||||
|
* the License or (at your option) version 3 or any later version
|
||||||
|
* accepted by the membership of KDE e.V. (or its successor approved
|
||||||
|
* by the membership of KDE e.V.), which shall act as a proxy
|
||||||
|
* defined in Section 14 of version 3 of the license.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.kde.kdeconnect.Plugins.NotificationsPlugin;
|
||||||
|
|
||||||
|
import android.content.ContentValues;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
import android.database.sqlite.SQLiteOpenHelper;
|
||||||
|
|
||||||
|
public class AppDatabase {
|
||||||
|
|
||||||
|
public static final String KEY_ROW_ID = "id";
|
||||||
|
public static final String KEY_NAME = "app";
|
||||||
|
public static final String KEY_PACKAGE_NAME = "packageName";
|
||||||
|
public static final String KEY_IS_ENABLED = "isEnabled";
|
||||||
|
|
||||||
|
private static final String DATABASE_NAME = "Applications";
|
||||||
|
private static final String DATABASE_TABLE = "Applications";
|
||||||
|
private static final int DATABASE_VERSION = 1;
|
||||||
|
|
||||||
|
private final Context ourContext;
|
||||||
|
private SQLiteDatabase ourDatabase;
|
||||||
|
private DbHelper ourHelper;
|
||||||
|
|
||||||
|
public AppDatabase(Context c) {
|
||||||
|
ourContext = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class DbHelper extends SQLiteOpenHelper{
|
||||||
|
|
||||||
|
public DbHelper(Context context) {
|
||||||
|
super(context, DATABASE_NAME, null, DATABASE_VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(SQLiteDatabase db) {
|
||||||
|
db.execSQL("CREATE TABLE " + DATABASE_TABLE + "(" + KEY_ROW_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
|
||||||
|
+ KEY_NAME + " TEXT NOT NULL, " + KEY_PACKAGE_NAME + " TEXT NOT NULL, " + KEY_IS_ENABLED + " TEXT NOT NULL); ");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUpgrade(SQLiteDatabase db, int i, int i2) {
|
||||||
|
db.execSQL("DROP TABLE IF EXISTS "+ DATABASE_TABLE);
|
||||||
|
onCreate(db);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void open(){
|
||||||
|
ourHelper = new DbHelper(ourContext);
|
||||||
|
ourDatabase = ourHelper.getWritableDatabase();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void close(){
|
||||||
|
ourHelper.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Cursor getAllApplications()
|
||||||
|
{
|
||||||
|
String[] columns = new String []{KEY_ROW_ID,KEY_NAME,KEY_PACKAGE_NAME,KEY_IS_ENABLED};
|
||||||
|
Cursor res = ourDatabase.query(DATABASE_TABLE,columns,null,null,null,null,KEY_NAME);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long create(String appName, String packageName, boolean isEnabled) {
|
||||||
|
ContentValues cv = new ContentValues();
|
||||||
|
cv.put(KEY_NAME, appName);
|
||||||
|
cv.put(KEY_PACKAGE_NAME, packageName);
|
||||||
|
cv.put(KEY_IS_ENABLED, isEnabled?"true":"false");
|
||||||
|
return ourDatabase.insert(DATABASE_TABLE, null, cv);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long update(String packageName, boolean isEnabled) {
|
||||||
|
ContentValues cvUpdate = new ContentValues();
|
||||||
|
cvUpdate.put(KEY_IS_ENABLED, isEnabled?"true":"false");
|
||||||
|
return ourDatabase.update(DATABASE_TABLE,cvUpdate,KEY_PACKAGE_NAME + "=?",new String[]{packageName});
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean exists(String packageName) {
|
||||||
|
String[] columns = new String []{KEY_ROW_ID};
|
||||||
|
Cursor res = ourDatabase.query(DATABASE_TABLE,columns,KEY_PACKAGE_NAME + " =? ",new String[]{packageName},null,null,null);
|
||||||
|
int count = res.getCount();
|
||||||
|
res.close();
|
||||||
|
return (count != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEnabled(String packageName){
|
||||||
|
String[] columns = new String []{KEY_IS_ENABLED};
|
||||||
|
Cursor res = ourDatabase.query(DATABASE_TABLE,columns,KEY_PACKAGE_NAME + " =? ",new String[]{packageName},null,null,null);
|
||||||
|
boolean result = true; //Apps are enabled by default
|
||||||
|
if (res.getCount() > 0) {
|
||||||
|
res.moveToFirst();
|
||||||
|
result = (res.getString(res.getColumnIndex(KEY_IS_ENABLED))).equals("true");
|
||||||
|
}
|
||||||
|
res.close();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void delete(String packageName){
|
||||||
|
ourDatabase.delete(DATABASE_TABLE,KEY_PACKAGE_NAME + " =? ",new String[]{packageName} );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,157 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015 Vineet Garg <grg.vineet@gmail.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of
|
||||||
|
* the License or (at your option) version 3 or any later version
|
||||||
|
* accepted by the membership of KDE e.V. (or its successor approved
|
||||||
|
* by the membership of KDE e.V.), which shall act as a proxy
|
||||||
|
* defined in Section 14 of version 3 of the license.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.kde.kdeconnect.Plugins.NotificationsPlugin;
|
||||||
|
|
||||||
|
import android.content.pm.ApplicationInfo;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.support.v7.app.ActionBarActivity;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.AdapterView;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.ListView;
|
||||||
|
|
||||||
|
import org.kde.kdeconnect_tp.R;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class NotificationFilterActivity extends ActionBarActivity {
|
||||||
|
|
||||||
|
private AppDatabase appDatabase;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_notification_filter);
|
||||||
|
final ListView listView = (ListView)findViewById(R.id.lvFilterApps);
|
||||||
|
appDatabase = new AppDatabase(this);
|
||||||
|
|
||||||
|
deleteUninstalledApps();
|
||||||
|
addNewlyInstalledApps();
|
||||||
|
|
||||||
|
appDatabase.open();
|
||||||
|
Cursor res = appDatabase.getAllApplications();
|
||||||
|
res.moveToFirst();
|
||||||
|
|
||||||
|
String[] appName = new String[res.getCount()];
|
||||||
|
final String[] pkgName = new String[res.getCount()];
|
||||||
|
Boolean[] isFiltered = new Boolean[res.getCount()];
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
while(!res.isAfterLast()){
|
||||||
|
appName[i] = res.getString(res.getColumnIndex(AppDatabase.KEY_NAME));
|
||||||
|
pkgName[i] = res.getString(res.getColumnIndex(AppDatabase.KEY_PACKAGE_NAME));
|
||||||
|
isFiltered[i] = res.getString(res.getColumnIndex(AppDatabase.KEY_IS_ENABLED)).equals("true");
|
||||||
|
res.moveToNext();
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
appDatabase.close();
|
||||||
|
|
||||||
|
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
|
||||||
|
android.R.layout.simple_list_item_multiple_choice,android.R.id.text1, appName);
|
||||||
|
listView.setAdapter(adapter);
|
||||||
|
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
|
||||||
|
for (i = 0 ; i < res.getCount(); i++){
|
||||||
|
if (isFiltered[i]) {
|
||||||
|
listView.setItemChecked(i, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
|
||||||
|
boolean checked = listView.isItemChecked(i);
|
||||||
|
//Log.e("NotificationFilterActivity", pkgName[i] + ":" + checked);
|
||||||
|
appDatabase.open();
|
||||||
|
appDatabase.update(pkgName[i], checked);
|
||||||
|
appDatabase.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete apps from database which are uninstalled
|
||||||
|
private void deleteUninstalledApps(){
|
||||||
|
Cursor res;
|
||||||
|
appDatabase.open();
|
||||||
|
res = appDatabase.getAllApplications();
|
||||||
|
if (res != null) {
|
||||||
|
res.moveToFirst();
|
||||||
|
while (!res.isAfterLast()) {
|
||||||
|
String packageName = res.getString(res.getColumnIndex(AppDatabase.KEY_PACKAGE_NAME));
|
||||||
|
if (!isPackageInstalled(packageName)) {
|
||||||
|
appDatabase.delete(packageName);
|
||||||
|
}
|
||||||
|
res.moveToNext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
appDatabase.close();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adding newly installed apps in database
|
||||||
|
private void addNewlyInstalledApps() {
|
||||||
|
|
||||||
|
List<ApplicationInfo> PackList = getPackageManager().getInstalledApplications(0);
|
||||||
|
appDatabase.open();
|
||||||
|
|
||||||
|
for (int i=0; i < PackList.size(); i++)
|
||||||
|
{
|
||||||
|
ApplicationInfo PackInfo = PackList.get(i);
|
||||||
|
|
||||||
|
String appName = PackInfo.loadLabel(getPackageManager()).toString();
|
||||||
|
String packageName = PackInfo.packageName;
|
||||||
|
|
||||||
|
if ( (PackInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0 ) {
|
||||||
|
|
||||||
|
if (!appDatabase.exists(packageName)) {
|
||||||
|
appDatabase.create(appName, packageName, true);
|
||||||
|
}
|
||||||
|
//Log.e("App FLAG_UPDATED_SYSTEM_APP: " + Integer.toString(i), appName);
|
||||||
|
|
||||||
|
} else if ( (PackInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
|
||||||
|
|
||||||
|
//ignore these apps
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (!appDatabase.exists(packageName)) {
|
||||||
|
appDatabase.create(appName, packageName, true);
|
||||||
|
}
|
||||||
|
//Log.e("App : " + Integer.toString(i), appName);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
appDatabase.close();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isPackageInstalled(String packageName){
|
||||||
|
PackageManager pm = getPackageManager();
|
||||||
|
try {
|
||||||
|
pm.getPackageInfo(packageName, PackageManager.GET_META_DATA);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -23,9 +23,9 @@ package org.kde.kdeconnect.Plugins.NotificationsPlugin;
|
|||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.Notification;
|
import android.app.Notification;
|
||||||
import android.content.Context;
|
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -35,13 +35,19 @@ import android.util.Log;
|
|||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
|
||||||
import org.kde.kdeconnect.Helpers.AppsHelper;
|
import org.kde.kdeconnect.Helpers.AppsHelper;
|
||||||
|
import org.kde.kdeconnect.Helpers.ImagesHelper;
|
||||||
import org.kde.kdeconnect.NetworkPackage;
|
import org.kde.kdeconnect.NetworkPackage;
|
||||||
import org.kde.kdeconnect.Plugins.Plugin;
|
import org.kde.kdeconnect.Plugins.Plugin;
|
||||||
import org.kde.kdeconnect.UserInterface.DeviceActivity;
|
import org.kde.kdeconnect.UserInterface.DeviceActivity;
|
||||||
|
import org.kde.kdeconnect.UserInterface.SettingsActivity;
|
||||||
import org.kde.kdeconnect_tp.R;
|
import org.kde.kdeconnect_tp.R;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
|
||||||
public class NotificationsPlugin extends Plugin implements NotificationReceiver.NotificationListener {
|
public class NotificationsPlugin extends Plugin implements NotificationReceiver.NotificationListener {
|
||||||
|
|
||||||
|
private boolean sendIcons = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getPluginName() {
|
public String getPluginName() {
|
||||||
return "plugin_notifications";
|
return "plugin_notifications";
|
||||||
@@ -64,7 +70,17 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasSettings() {
|
public boolean hasSettings() {
|
||||||
return false;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void startPreferencesActivity(final SettingsActivity parentActivity) {
|
||||||
|
if (hasPermission()) {
|
||||||
|
Intent intent = new Intent(parentActivity, NotificationFilterActivity.class);
|
||||||
|
parentActivity.startActivity(intent);
|
||||||
|
} else {
|
||||||
|
getErrorDialog(parentActivity).show();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -72,8 +88,10 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean hasPermission() {
|
||||||
|
String notificationListenerList = Settings.Secure.getString(context.getContentResolver(), "enabled_notification_listeners");
|
||||||
|
return (notificationListenerList != null && notificationListenerList.contains(context.getPackageName()));
|
||||||
|
}
|
||||||
|
|
||||||
static class NotificationId {
|
static class NotificationId {
|
||||||
String packageName;
|
String packageName;
|
||||||
@@ -136,9 +154,7 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Check for permissions
|
if (hasPermission()) {
|
||||||
String notificationListenerList = Settings.Secure.getString(context.getContentResolver(), "enabled_notification_listeners");
|
|
||||||
if (notificationListenerList != null && notificationListenerList.contains(context.getPackageName())) {
|
|
||||||
NotificationReceiver.RunCommand(context, new NotificationReceiver.InstanceCallback() {
|
NotificationReceiver.RunCommand(context, new NotificationReceiver.InstanceCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onServiceStart(NotificationReceiver service) {
|
public void onServiceStart(NotificationReceiver service) {
|
||||||
@@ -149,9 +165,9 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
|||||||
sendNotification(notification, true);
|
sendNotification(notification, true);
|
||||||
}
|
}
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
e.printStackTrace();
|
|
||||||
Log.e("NotificationsPlugin","Exception");
|
Log.e("NotificationsPlugin","Exception");
|
||||||
}
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
@@ -199,42 +215,71 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
|||||||
public void sendNotification(StatusBarNotification statusBarNotification, boolean requestAnswer) {
|
public void sendNotification(StatusBarNotification statusBarNotification, boolean requestAnswer) {
|
||||||
|
|
||||||
Notification notification = statusBarNotification.getNotification();
|
Notification notification = statusBarNotification.getNotification();
|
||||||
|
AppDatabase appDatabase = new AppDatabase(context);
|
||||||
|
|
||||||
if ((notification.flags & Notification.FLAG_FOREGROUND_SERVICE) != 0
|
if ((notification.flags & Notification.FLAG_FOREGROUND_SERVICE) != 0
|
||||||
|| (notification.flags & Notification.FLAG_ONGOING_EVENT) != 0 ) {
|
|| (notification.flags & Notification.FLAG_ONGOING_EVENT) != 0
|
||||||
//This is not a notification!
|
|| (notification.flags & Notification.FLAG_LOCAL_ONLY) != 0) {
|
||||||
|
//This is not a notification we want!
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
appDatabase.open();
|
||||||
|
if (!appDatabase.isEnabled(statusBarNotification.getPackageName())){
|
||||||
|
return;
|
||||||
|
// we dont want notification from this app
|
||||||
|
}
|
||||||
|
appDatabase.close();
|
||||||
|
|
||||||
NotificationId id = NotificationId.fromNotification(statusBarNotification);
|
NotificationId id = NotificationId.fromNotification(statusBarNotification);
|
||||||
|
|
||||||
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_NOTIFICATION);
|
|
||||||
|
|
||||||
String packageName = statusBarNotification.getPackageName();
|
String packageName = statusBarNotification.getPackageName();
|
||||||
String appName = AppsHelper.appNameLookup(context, packageName);
|
String appName = AppsHelper.appNameLookup(context, packageName);
|
||||||
|
|
||||||
//TODO: Add support for displaying app icons to desktop plasmoid and uncomment this piece of code
|
if (id.serialize().equals("com.facebook.orca::10012") && notification.tickerText == null && appName.equals("Messenger")) {
|
||||||
/*
|
//HACK: Hide weird Facebook empty "Messenger" notification that is actually not shown in the phone
|
||||||
try {
|
return;
|
||||||
//TODO: Scale down app icon if too big and compress as JPG
|
}
|
||||||
Drawable drawableAppIcon = AppsHelper.appIconLookup(context, packageName);
|
|
||||||
Bitmap appIcon = ImagesHelper.drawableToBitmap(drawableAppIcon);
|
if (packageName.equals("com.google.android.googlequicksearchbox")) {
|
||||||
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
|
//HACK: Hide Google Now notifications that keep constantly popping up (and without text because we don't know how to read them properly)
|
||||||
appIcon.compress(Bitmap.CompressFormat.PNG, 90, outStream);
|
return;
|
||||||
byte[] bitmapData = outStream.toByteArray();
|
}
|
||||||
np.setPayload(bitmapData);
|
|
||||||
} catch(Exception e) {
|
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_NOTIFICATION);
|
||||||
e.printStackTrace();
|
|
||||||
Log.e("NotificationsPlugin","Error retrieving icon");
|
if (packageName.equals("org.kde.kdeconnect_tp"))
|
||||||
|
{
|
||||||
|
//Make our own notifications silent :)
|
||||||
|
np.set("silent", true);
|
||||||
|
np.set("requestAnswer", true); //For compatibility with old desktop versions of KDE Connect that don't support "silent"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sendIcons) {
|
||||||
|
try {
|
||||||
|
Drawable drawableAppIcon = AppsHelper.appIconLookup(context, packageName);
|
||||||
|
Bitmap appIcon = ImagesHelper.drawableToBitmap(drawableAppIcon);
|
||||||
|
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
|
||||||
|
if (appIcon.getWidth() > 128) {
|
||||||
|
appIcon = Bitmap.createScaledBitmap(appIcon, 96, 96, true);
|
||||||
|
}
|
||||||
|
appIcon.compress(Bitmap.CompressFormat.PNG, 90, outStream);
|
||||||
|
byte[] bitmapData = outStream.toByteArray();
|
||||||
|
np.setPayload(bitmapData);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
Log.e("NotificationsPlugin", "Error retrieving icon");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
np.set("id", id.serialize());
|
np.set("id", id.serialize());
|
||||||
np.set("appName", appName == null? packageName : appName);
|
np.set("appName", appName == null? packageName : appName);
|
||||||
np.set("isClearable", statusBarNotification.isClearable());
|
np.set("isClearable", statusBarNotification.isClearable());
|
||||||
np.set("ticker", getTickerText(notification));
|
np.set("ticker", getTickerText(notification));
|
||||||
np.set("time", Long.toString(statusBarNotification.getPostTime()));
|
np.set("time", Long.toString(statusBarNotification.getPostTime()));
|
||||||
if (requestAnswer) np.set("requestAnswer", true);
|
if (requestAnswer) {
|
||||||
|
np.set("requestAnswer", true);
|
||||||
|
np.set("silent", true);
|
||||||
|
}
|
||||||
|
|
||||||
device.sendPackage(np);
|
device.sendPackage(np);
|
||||||
}
|
}
|
||||||
@@ -255,9 +300,11 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
|||||||
try {
|
try {
|
||||||
Bundle extras = notification.extras;
|
Bundle extras = notification.extras;
|
||||||
String extraTitle = extras.getString(TITLE_KEY);
|
String extraTitle = extras.getString(TITLE_KEY);
|
||||||
String extraText = extras.getString(TEXT_KEY);
|
String extraText = null;
|
||||||
|
Object extraTextExtra = extras.get(TEXT_KEY);
|
||||||
|
if (extraTextExtra != null) extraText = extraTextExtra.toString();
|
||||||
|
|
||||||
if (extraTitle != null && extraText != null) {
|
if (extraTitle != null && extraText != null && !extraText.isEmpty()) {
|
||||||
ticker = extraTitle + " ‐ " + extraText;
|
ticker = extraTitle + " ‐ " + extraText;
|
||||||
} else if (extraTitle != null) {
|
} else if (extraTitle != null) {
|
||||||
ticker = extraTitle;
|
ticker = extraTitle;
|
||||||
@@ -265,7 +312,7 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
|||||||
ticker = extraText;
|
ticker = extraText;
|
||||||
}
|
}
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
Log.w("NotificationPlugin","problem parsing notification extras");
|
Log.w("NotificationPlugin","problem parsing notification extras for " + notification.tickerText);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -283,6 +330,10 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
|||||||
public boolean onPackageReceived(final NetworkPackage np) {
|
public boolean onPackageReceived(final NetworkPackage np) {
|
||||||
if (!np.getType().equals(NetworkPackage.PACKAGE_TYPE_NOTIFICATION)) return false;
|
if (!np.getType().equals(NetworkPackage.PACKAGE_TYPE_NOTIFICATION)) return false;
|
||||||
|
|
||||||
|
if (np.getBoolean("sendIcons")) {
|
||||||
|
sendIcons = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (np.getBoolean("request")) {
|
if (np.getBoolean("request")) {
|
||||||
|
|
||||||
NotificationReceiver.RunCommand(context, new NotificationReceiver.InstanceCallback() {
|
NotificationReceiver.RunCommand(context, new NotificationReceiver.InstanceCallback() {
|
||||||
|
@@ -23,18 +23,21 @@ package org.kde.kdeconnect.Plugins;
|
|||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
|
||||||
import org.kde.kdeconnect.Device;
|
import org.kde.kdeconnect.Device;
|
||||||
import org.kde.kdeconnect.NetworkPackage;
|
import org.kde.kdeconnect.NetworkPackage;
|
||||||
|
import org.kde.kdeconnect.UserInterface.PluginSettingsActivity;
|
||||||
|
import org.kde.kdeconnect.UserInterface.SettingsActivity;
|
||||||
|
|
||||||
public abstract class Plugin {
|
public abstract class Plugin {
|
||||||
|
|
||||||
protected Device device;
|
protected Device device;
|
||||||
protected Context context;
|
protected Context context;
|
||||||
|
|
||||||
public void setContext(Context context, Device device) {
|
public final void setContext(Context context, Device device) {
|
||||||
this.device = device;
|
this.device = device;
|
||||||
this.context = context;
|
this.context = context;
|
||||||
}
|
}
|
||||||
@@ -71,12 +74,24 @@ public abstract class Plugin {
|
|||||||
*/
|
*/
|
||||||
public abstract boolean isEnabledByDefault();
|
public abstract boolean isEnabledByDefault();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if this plugin needs an specific UI settings.
|
* Return true if this plugin needs an specific UI settings.
|
||||||
*/
|
*/
|
||||||
public abstract boolean hasSettings();
|
public abstract boolean hasSettings();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If hasSettings returns true, this will be called when the user
|
||||||
|
* wants to access this plugin preferences and should launch some
|
||||||
|
* kind of interface. The default implementation will launch a
|
||||||
|
* SettingsActivity with content from "yourplugin"_preferences.xml.
|
||||||
|
*/
|
||||||
|
public void startPreferencesActivity(SettingsActivity parentActivity) {
|
||||||
|
Intent intent = new Intent(parentActivity, PluginSettingsActivity.class);
|
||||||
|
intent.putExtra("plugin_display_name", getDisplayName());
|
||||||
|
intent.putExtra("plugin_name", getPluginName());
|
||||||
|
parentActivity.startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize the listeners and structures in your plugin.
|
* Initialize the listeners and structures in your plugin.
|
||||||
* Should return true if initialization was successful.
|
* Should return true if initialization was successful.
|
||||||
|
@@ -112,8 +112,8 @@ public class PluginFactory {
|
|||||||
availablePluginsInfo.put(pluginName, info); //Cache it
|
availablePluginsInfo.put(pluginName, info); //Cache it
|
||||||
return info;
|
return info;
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
e.printStackTrace();
|
|
||||||
Log.e("PluginFactory","getPluginInfo exception");
|
Log.e("PluginFactory","getPluginInfo exception");
|
||||||
|
e.printStackTrace();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -134,8 +134,8 @@ public class PluginFactory {
|
|||||||
plugin.setContext(context, device);
|
plugin.setContext(context, device);
|
||||||
return plugin;
|
return plugin;
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
e.printStackTrace();
|
|
||||||
Log.e("PluginFactory", "Could not instantiate plugin: "+pluginName);
|
Log.e("PluginFactory", "Could not instantiate plugin: "+pluginName);
|
||||||
|
e.printStackTrace();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -18,14 +18,23 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.kde.kdeconnect.UserInterface;
|
package org.kde.kdeconnect.Plugins.SharePlugin;
|
||||||
|
|
||||||
|
import android.app.Notification;
|
||||||
|
import android.app.NotificationManager;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
|
import android.support.v4.app.NotificationCompat;
|
||||||
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.ActionBar;
|
||||||
import android.support.v7.app.ActionBarActivity;
|
import android.support.v7.app.ActionBarActivity;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -51,12 +60,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
|
|
||||||
public class ShareToReceiver extends ActionBarActivity {
|
public class ShareActivity extends ActionBarActivity {
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Action bar
|
|
||||||
//
|
|
||||||
|
|
||||||
private MenuItem menuProgress;
|
private MenuItem menuProgress;
|
||||||
|
|
||||||
@@ -73,7 +77,7 @@ public class ShareToReceiver extends ActionBarActivity {
|
|||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.menu_refresh:
|
case R.id.menu_refresh:
|
||||||
updateComputerList();
|
updateComputerList();
|
||||||
BackgroundService.RunCommand(ShareToReceiver.this, new BackgroundService.InstanceCallback() {
|
BackgroundService.RunCommand(ShareActivity.this, new BackgroundService.InstanceCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onServiceStart(BackgroundService service) {
|
public void onServiceStart(BackgroundService service) {
|
||||||
service.onNetworkChange();
|
service.onNetworkChange();
|
||||||
@@ -132,7 +136,7 @@ public class ShareToReceiver extends ActionBarActivity {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
ListView list = (ListView) findViewById(R.id.listView1);
|
ListView list = (ListView) findViewById(R.id.listView1);
|
||||||
list.setAdapter(new ListAdapter(ShareToReceiver.this, items));
|
list.setAdapter(new ListAdapter(ShareActivity.this, items));
|
||||||
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
|
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
|
||||||
@@ -156,12 +160,22 @@ public class ShareToReceiver extends ActionBarActivity {
|
|||||||
queuedSendUriList(device, uriList);
|
queuedSendUriList(device, uriList);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
Log.e("ShareActivity", "Exception");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Log.e("ShareToReceiver", "Exception");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (extras.containsKey(Intent.EXTRA_TEXT)) {
|
} else if (extras.containsKey(Intent.EXTRA_TEXT)) {
|
||||||
String text = extras.getString(Intent.EXTRA_TEXT);
|
String text = extras.getString(Intent.EXTRA_TEXT);
|
||||||
|
String subject = extras.getString(Intent.EXTRA_SUBJECT);
|
||||||
|
|
||||||
|
//Hack: Detect shared youtube videos, so we can open them in the browser instead of as text
|
||||||
|
if (subject != null && subject.endsWith("YouTube")) {
|
||||||
|
int index = text.indexOf(": http://youtu.be/");
|
||||||
|
if (index > 0) {
|
||||||
|
text = text.substring(index+2); //Skip ": "
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
boolean isUrl;
|
boolean isUrl;
|
||||||
try {
|
try {
|
||||||
new URL(text);
|
new URL(text);
|
||||||
@@ -197,7 +211,22 @@ public class ShareToReceiver extends ActionBarActivity {
|
|||||||
InputStream inputStream = cr.openInputStream(uri);
|
InputStream inputStream = cr.openInputStream(uri);
|
||||||
|
|
||||||
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_SHARE);
|
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_SHARE);
|
||||||
int size = -1;
|
long size = -1;
|
||||||
|
|
||||||
|
final NotificationManager notificationManager = (NotificationManager)getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
|
final int notificationId = (int)System.currentTimeMillis();
|
||||||
|
final NotificationCompat.Builder builder ;
|
||||||
|
Resources res = getApplicationContext().getResources();
|
||||||
|
builder = new NotificationCompat.Builder(getApplicationContext())
|
||||||
|
.setContentTitle(res.getString(R.string.outgoing_file_title, device.getName()))
|
||||||
|
.setTicker(res.getString(R.string.outgoing_file_title, device.getName()))
|
||||||
|
.setSmallIcon(android.R.drawable.stat_sys_upload)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setOngoing(true)
|
||||||
|
.setProgress(100,0,true);
|
||||||
|
notificationManager.notify(notificationId,builder.build());
|
||||||
|
|
||||||
|
final Handler progressBarHandler = new Handler(Looper.getMainLooper());
|
||||||
|
|
||||||
if (uri.getScheme().equals("file")) {
|
if (uri.getScheme().equals("file")) {
|
||||||
// file:// is a non media uri, so we cannot query the ContentProvider
|
// file:// is a non media uri, so we cannot query the ContentProvider
|
||||||
@@ -205,11 +234,11 @@ public class ShareToReceiver extends ActionBarActivity {
|
|||||||
np.set("filename", uri.getLastPathSegment());
|
np.set("filename", uri.getLastPathSegment());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
size = (int)new File(uri.getPath()).length();
|
size = new File(uri.getPath()).length();
|
||||||
np.setPayload(inputStream, size);
|
np.setPayload(inputStream, size);
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
|
Log.e("ShareActivity", "Could not obtain file size");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Log.e("ShareToReceiver", "Could not obtain file size");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
@@ -223,10 +252,10 @@ public class ShareToReceiver extends ActionBarActivity {
|
|||||||
cursor.moveToFirst();
|
cursor.moveToFirst();
|
||||||
String path = cursor.getString(column_index);
|
String path = cursor.getString(column_index);
|
||||||
np.set("filename", Uri.parse(path).getLastPathSegment());
|
np.set("filename", Uri.parse(path).getLastPathSegment());
|
||||||
np.set("size", (int)new File(path).length());
|
size = new File(path).length();
|
||||||
} catch(Exception unused) {
|
} catch(Exception unused) {
|
||||||
|
|
||||||
Log.e("ShareToReceiver", "Could not resolve media to a file, trying to get info as media");
|
Log.e("ShareActivity", "Could not resolve media to a file, trying to get info as media");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME);
|
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME);
|
||||||
@@ -235,7 +264,7 @@ public class ShareToReceiver extends ActionBarActivity {
|
|||||||
np.set("filename", name);
|
np.set("filename", name);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Log.e("ShareToReceiver", "Could not obtain file name");
|
Log.e("ShareActivity", "Could not obtain file name");
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -244,8 +273,8 @@ public class ShareToReceiver extends ActionBarActivity {
|
|||||||
//For some reason this size can differ from the actual file size!
|
//For some reason this size can differ from the actual file size!
|
||||||
size = cursor.getInt(column_index);
|
size = cursor.getInt(column_index);
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
|
Log.e("ShareActivity", "Could not obtain file size");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Log.e("ShareToReceiver", "Could not obtain file size");
|
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
cursor.close();
|
cursor.close();
|
||||||
@@ -255,25 +284,88 @@ public class ShareToReceiver extends ActionBarActivity {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
device.sendPackage(np, new Device.SendPackageFinishedCallback() {
|
final String filename = np.getString("filename");
|
||||||
|
|
||||||
|
builder.setContentText(res.getString(R.string.outgoing_file_text,filename));
|
||||||
|
notificationManager.notify(notificationId,builder.build());
|
||||||
|
|
||||||
|
device.sendPackage(np, new Device.SendPackageStatusCallback() {
|
||||||
|
|
||||||
|
int prevProgress = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendSuccessful() {
|
public void onProgressChanged(final int progress) {
|
||||||
if (!uriList.isEmpty()) queuedSendUriList(device, uriList);
|
if (progress != prevProgress) {
|
||||||
else Log.e("ShareToReceiver", "All files sent");
|
prevProgress = progress;
|
||||||
|
progressBarHandler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
builder.setProgress(100, progress, false);
|
||||||
|
notificationManager.notify(notificationId, builder.build());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendFailed() {
|
public void onSuccess() {
|
||||||
Log.e("ShareToReceiver", "Failed to send file");
|
progressBarHandler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Resources res = getApplicationContext().getResources();
|
||||||
|
NotificationCompat.Builder builder1 = new NotificationCompat.Builder(getApplicationContext())
|
||||||
|
.setContentTitle(res.getString(R.string.sent_file_title, device.getName()))
|
||||||
|
.setContentText(res.getString(R.string.sent_file_text, filename))
|
||||||
|
.setTicker(res.getString(R.string.sent_file_title, device.getName()))
|
||||||
|
.setSmallIcon(android.R.drawable.stat_sys_upload_done)
|
||||||
|
.setOngoing(false)
|
||||||
|
.setAutoCancel(true);
|
||||||
|
|
||||||
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
|
||||||
|
if (prefs.getBoolean("share_notification_preference", true)) {
|
||||||
|
builder1.setDefaults(Notification.DEFAULT_ALL);
|
||||||
|
}
|
||||||
|
notificationManager.notify(notificationId, builder1.build());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!uriList.isEmpty()) queuedSendUriList(device, uriList);
|
||||||
|
else Log.i("ShareActivity", "All files sent");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Throwable e) {
|
||||||
|
progressBarHandler.post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
Resources res = getApplicationContext().getResources();
|
||||||
|
NotificationCompat.Builder builder2 = new NotificationCompat.Builder(getApplicationContext())
|
||||||
|
.setContentTitle(res.getString(R.string.sent_file_failed_title, device.getName()))
|
||||||
|
.setContentText(res.getString(R.string.sent_file_failed_text, filename))
|
||||||
|
.setTicker(res.getString(R.string.sent_file_title, device.getName()))
|
||||||
|
.setSmallIcon(android.R.drawable.stat_notify_error)
|
||||||
|
.setOngoing(false)
|
||||||
|
.setAutoCancel(true);
|
||||||
|
|
||||||
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
|
||||||
|
if (prefs.getBoolean("share_notification_preference", true)) {
|
||||||
|
builder2.setDefaults(Notification.DEFAULT_ALL);
|
||||||
|
}
|
||||||
|
notificationManager.notify(notificationId, builder2.build());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Log.e("ShareActivity", "Failed to send file");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
Log.e("ShareActivity", "Exception sending files");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Log.e("ShareToReceiver", "Exception sending files");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@@ -286,7 +378,6 @@ public class ShareToReceiver extends ActionBarActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStart() {
|
protected void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
@@ -320,4 +411,5 @@ public class ShareToReceiver extends ActionBarActivity {
|
|||||||
super.onResume();
|
super.onResume();
|
||||||
updateComputerList();
|
updateComputerList();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@@ -103,11 +103,11 @@ public class SharePlugin extends Plugin {
|
|||||||
try {
|
try {
|
||||||
if (np.hasPayload()) {
|
if (np.hasPayload()) {
|
||||||
|
|
||||||
Log.e("SharePlugin", "hasPayload");
|
Log.i("SharePlugin", "hasPayload");
|
||||||
|
|
||||||
final InputStream input = np.getPayload();
|
final InputStream input = np.getPayload();
|
||||||
final int fileLength = np.getPayloadSize();
|
final long fileLength = np.getPayloadSize();
|
||||||
final String filename = np.getString("filename", new Long(System.currentTimeMillis()).toString());
|
final String filename = np.getString("filename", Long.toString(System.currentTimeMillis()));
|
||||||
|
|
||||||
String deviceDir = FilesHelper.toFileSystemSafeName(device.getName());
|
String deviceDir = FilesHelper.toFileSystemSafeName(device.getName());
|
||||||
//Get the external storage and append "/kdeconnect/DEVICE_NAME/"
|
//Get the external storage and append "/kdeconnect/DEVICE_NAME/"
|
||||||
@@ -121,36 +121,42 @@ public class SharePlugin extends Plugin {
|
|||||||
//Append filename to the destination path
|
//Append filename to the destination path
|
||||||
final File destinationFullPath = new File(destinationDir, filename);
|
final File destinationFullPath = new File(destinationDir, filename);
|
||||||
|
|
||||||
Log.e("SharePlugin", "destinationFullPath:" + destinationFullPath);
|
//Log.e("SharePlugin", "destinationFullPath:" + destinationFullPath);
|
||||||
|
|
||||||
|
final NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
|
|
||||||
final int notificationId = (int)System.currentTimeMillis();
|
final int notificationId = (int)System.currentTimeMillis();
|
||||||
Resources res = context.getResources();
|
Resources res = context.getResources();
|
||||||
Notification noti = new NotificationCompat.Builder(context)
|
final NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
|
||||||
.setContentTitle(res.getString(R.string.incoming_file_title, device.getName()))
|
.setContentTitle(res.getString(R.string.incoming_file_title, device.getName()))
|
||||||
.setContentText(res.getString(R.string.incoming_file_text, filename))
|
.setContentText(res.getString(R.string.incoming_file_text, filename))
|
||||||
.setTicker(res.getString(R.string.incoming_file_title, device.getName()))
|
.setTicker(res.getString(R.string.incoming_file_title, device.getName()))
|
||||||
.setSmallIcon(android.R.drawable.ic_dialog_alert)
|
.setSmallIcon(android.R.drawable.stat_sys_download)
|
||||||
.setAutoCancel(true)
|
.setAutoCancel(true)
|
||||||
.build();
|
.setOngoing(true)
|
||||||
|
.setProgress(100,0,true);
|
||||||
|
|
||||||
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
notificationManager.notify(notificationId,builder.build());
|
||||||
notificationManager.notify(notificationId, noti);
|
|
||||||
|
|
||||||
new Thread(new Runnable() {
|
new Thread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
OutputStream output = new FileOutputStream(destinationFullPath.getPath());
|
OutputStream output = new FileOutputStream(destinationFullPath.getPath());
|
||||||
|
|
||||||
byte data[] = new byte[1024];
|
byte data[] = new byte[1024];
|
||||||
long total = 0;
|
long progress = 0, prevProgressPercentage = 0;
|
||||||
int count;
|
int count;
|
||||||
while ((count = input.read(data)) >= 0) {
|
while ((count = input.read(data)) >= 0) {
|
||||||
total += count;
|
progress += count;
|
||||||
output.write(data, 0, count);
|
output.write(data, 0, count);
|
||||||
if (fileLength > 0) {
|
if (fileLength > 0) {
|
||||||
if (total >= fileLength) break;
|
if (progress >= fileLength) break;
|
||||||
float progress = (total * 100 / fileLength);
|
long progressPercentage = (progress * 100 / fileLength);
|
||||||
|
if (progressPercentage != prevProgressPercentage) {
|
||||||
|
prevProgressPercentage = progressPercentage;
|
||||||
|
builder.setProgress(100, (int) progressPercentage, false);
|
||||||
|
notificationManager.notify(notificationId, builder.build());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//else Log.e("SharePlugin", "Infinite loop? :D");
|
//else Log.e("SharePlugin", "Infinite loop? :D");
|
||||||
}
|
}
|
||||||
@@ -159,7 +165,7 @@ public class SharePlugin extends Plugin {
|
|||||||
output.close();
|
output.close();
|
||||||
input.close();
|
input.close();
|
||||||
|
|
||||||
Log.e("SharePlugin", "Transfer finished");
|
Log.i("SharePlugin", "Transfer finished");
|
||||||
|
|
||||||
//Make sure it is added to the Android Gallery
|
//Make sure it is added to the Android Gallery
|
||||||
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
|
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
|
||||||
@@ -184,7 +190,7 @@ public class SharePlugin extends Plugin {
|
|||||||
.setContentText(res.getString(R.string.received_file_text, filename))
|
.setContentText(res.getString(R.string.received_file_text, filename))
|
||||||
.setContentIntent(resultPendingIntent)
|
.setContentIntent(resultPendingIntent)
|
||||||
.setTicker(res.getString(R.string.received_file_title, device.getName()))
|
.setTicker(res.getString(R.string.received_file_title, device.getName()))
|
||||||
.setSmallIcon(android.R.drawable.ic_dialog_alert)
|
.setSmallIcon(android.R.drawable.stat_sys_download_done)
|
||||||
.setAutoCancel(true);
|
.setAutoCancel(true);
|
||||||
|
|
||||||
|
|
||||||
@@ -195,9 +201,8 @@ public class SharePlugin extends Plugin {
|
|||||||
|
|
||||||
Notification noti = builder.build();
|
Notification noti = builder.build();
|
||||||
|
|
||||||
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
|
||||||
notificationManager.notify(notificationId, noti);
|
notificationManager.notify(notificationId, noti);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e("SharePlugin", "Receiver thread exception");
|
Log.e("SharePlugin", "Receiver thread exception");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -207,7 +212,7 @@ public class SharePlugin extends Plugin {
|
|||||||
}).start();
|
}).start();
|
||||||
|
|
||||||
} else if (np.has("text")) {
|
} else if (np.has("text")) {
|
||||||
Log.e("SharePlugin", "hasText");
|
Log.i("SharePlugin", "hasText");
|
||||||
|
|
||||||
String text = np.getString("text");
|
String text = np.getString("text");
|
||||||
if(android.os.Build.VERSION.SDK_INT >= 11) {
|
if(android.os.Build.VERSION.SDK_INT >= 11) {
|
||||||
@@ -222,13 +227,12 @@ public class SharePlugin extends Plugin {
|
|||||||
|
|
||||||
String url = np.getString("url");
|
String url = np.getString("url");
|
||||||
|
|
||||||
Log.e("SharePlugin", "hasUrl: "+url);
|
Log.i("SharePlugin", "hasUrl: "+url);
|
||||||
|
|
||||||
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
||||||
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
|
||||||
//Do not launch it directly, show a notification instead
|
//Do not launch url directly, show a notification instead
|
||||||
//context.startActivity(browserIntent);
|
|
||||||
|
|
||||||
Resources res = context.getResources();
|
Resources res = context.getResources();
|
||||||
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
|
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
|
||||||
|
@@ -27,6 +27,7 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.media.AudioManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.telephony.SmsMessage;
|
import android.telephony.SmsMessage;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
@@ -37,8 +38,15 @@ import org.kde.kdeconnect.NetworkPackage;
|
|||||||
import org.kde.kdeconnect.Plugins.Plugin;
|
import org.kde.kdeconnect.Plugins.Plugin;
|
||||||
import org.kde.kdeconnect_tp.R;
|
import org.kde.kdeconnect_tp.R;
|
||||||
|
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
|
||||||
public class TelephonyPlugin extends Plugin {
|
public class TelephonyPlugin extends Plugin {
|
||||||
|
|
||||||
|
private int lastState = TelephonyManager.CALL_STATE_IDLE;
|
||||||
|
private NetworkPackage lastPackage = null;
|
||||||
|
private boolean isMuted = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getPluginName() {
|
public String getPluginName() {
|
||||||
return "plugin_telephony";
|
return "plugin_telephony";
|
||||||
@@ -105,15 +113,9 @@ public class TelephonyPlugin extends Plugin {
|
|||||||
callBroadcastReceived(finalIntState, finalNumber);
|
callBroadcastReceived(finalIntState, finalNumber);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private int lastState = TelephonyManager.CALL_STATE_IDLE;
|
|
||||||
private NetworkPackage lastPackage = null;
|
|
||||||
|
|
||||||
public void callBroadcastReceived(int state, String phoneNumber) {
|
public void callBroadcastReceived(int state, String phoneNumber) {
|
||||||
|
|
||||||
//Log.e("TelephonyPlugin", "callBroadcastReceived");
|
//Log.e("TelephonyPlugin", "callBroadcastReceived");
|
||||||
@@ -126,6 +128,11 @@ public class TelephonyPlugin extends Plugin {
|
|||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case TelephonyManager.CALL_STATE_RINGING:
|
case TelephonyManager.CALL_STATE_RINGING:
|
||||||
|
if (isMuted) {
|
||||||
|
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
||||||
|
am.setStreamMute(AudioManager.STREAM_RING, false);
|
||||||
|
isMuted = false;
|
||||||
|
}
|
||||||
np.set("event", "ringing");
|
np.set("event", "ringing");
|
||||||
device.sendPackage(np);
|
device.sendPackage(np);
|
||||||
break;
|
break;
|
||||||
@@ -143,6 +150,20 @@ public class TelephonyPlugin extends Plugin {
|
|||||||
lastPackage.set("isCancel","true");
|
lastPackage.set("isCancel","true");
|
||||||
device.sendPackage(lastPackage);
|
device.sendPackage(lastPackage);
|
||||||
|
|
||||||
|
if (isMuted) {
|
||||||
|
Timer timer = new Timer();
|
||||||
|
timer.schedule(new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (isMuted) {
|
||||||
|
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
||||||
|
am.setStreamMute(AudioManager.STREAM_RING, false);
|
||||||
|
isMuted = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 500);
|
||||||
|
}
|
||||||
|
|
||||||
//Emit a missed call notification if needed
|
//Emit a missed call notification if needed
|
||||||
if (lastState == TelephonyManager.CALL_STATE_RINGING) {
|
if (lastState == TelephonyManager.CALL_STATE_RINGING) {
|
||||||
np.set("event","missedCall");
|
np.set("event","missedCall");
|
||||||
@@ -198,8 +219,19 @@ public class TelephonyPlugin extends Plugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onPackageReceived(NetworkPackage np) {
|
public boolean onPackageReceived(NetworkPackage np) {
|
||||||
|
if (!np.getType().equals(NetworkPackage.PACKAGE_TYPE_TELEPHONY)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (np.getString("action").equals("mute")) {
|
||||||
|
if (!isMuted) {
|
||||||
|
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
||||||
|
am.setStreamMute(AudioManager.STREAM_RING, true);
|
||||||
|
isMuted = true;
|
||||||
|
}
|
||||||
|
//Log.e("TelephonyPlugin", "mute");
|
||||||
|
}
|
||||||
//Do nothing
|
//Do nothing
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -53,7 +53,7 @@ public class CustomDevicesActivity extends ListActivity {
|
|||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
initializeDeviceList(this);
|
initializeDeviceList(this);
|
||||||
setContentView(R.layout.custom_ip_list);
|
setContentView(R.layout.custom_ip_list);
|
||||||
setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, ipAddressList));
|
setListAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, ipAddressList));
|
||||||
|
|
||||||
|
|
||||||
EditText ipEntryBox = (EditText)findViewById(R.id.ip_edittext);
|
EditText ipEntryBox = (EditText)findViewById(R.id.ip_edittext);
|
||||||
|
@@ -22,7 +22,6 @@ package org.kde.kdeconnect.UserInterface.List;
|
|||||||
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Button;
|
|
||||||
|
|
||||||
public class CustomItem implements ListAdapter.Item {
|
public class CustomItem implements ListAdapter.Item {
|
||||||
|
|
||||||
|
@@ -22,7 +22,6 @@ package org.kde.kdeconnect.UserInterface.List;
|
|||||||
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.kde.kdeconnect_tp.R;
|
import org.kde.kdeconnect_tp.R;
|
||||||
|
@@ -24,8 +24,6 @@ import android.view.LayoutInflater;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import android.R;
|
|
||||||
|
|
||||||
public class TextItem implements ListAdapter.Item {
|
public class TextItem implements ListAdapter.Item {
|
||||||
|
|
||||||
private final String title;
|
private final String title;
|
||||||
@@ -39,7 +37,7 @@ public class TextItem implements ListAdapter.Item {
|
|||||||
|
|
||||||
TextView v = new TextView(layoutInflater.getContext());
|
TextView v = new TextView(layoutInflater.getContext());
|
||||||
v.setText(title);
|
v.setText(title);
|
||||||
v.setTextAppearance(layoutInflater.getContext(), R.style.TextAppearance_DeviceDefault_Medium);
|
v.setTextAppearance(layoutInflater.getContext(), android.support.v7.appcompat.R.style.TextAppearance_AppCompat_Medium /*android.R.style.TextAppearance_DeviceDefault_Medium*/);
|
||||||
return v;
|
return v;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -24,7 +24,6 @@ import android.content.Context;
|
|||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.LinearLayout;
|
|
||||||
|
|
||||||
import org.kde.kdeconnect_tp.R;
|
import org.kde.kdeconnect_tp.R;
|
||||||
|
|
||||||
@@ -42,6 +41,7 @@ public class MaxWidthImageButton extends ImageButton {
|
|||||||
|
|
||||||
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.MaxWidthImageButton);
|
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.MaxWidthImageButton);
|
||||||
mMaxWidth = a.getDimensionPixelSize(R.styleable.MaxWidthImageButton_maxWidth, Integer.MAX_VALUE);
|
mMaxWidth = a.getDimensionPixelSize(R.styleable.MaxWidthImageButton_maxWidth, Integer.MAX_VALUE);
|
||||||
|
a.recycle();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -20,18 +20,23 @@
|
|||||||
|
|
||||||
package org.kde.kdeconnect.UserInterface;
|
package org.kde.kdeconnect.UserInterface;
|
||||||
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceActivity;
|
import android.preference.PreferenceActivity;
|
||||||
|
|
||||||
|
import org.kde.kdeconnect_tp.R;
|
||||||
|
|
||||||
public class PluginSettingsActivity extends PreferenceActivity {
|
public class PluginSettingsActivity extends PreferenceActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
String resource_name = getIntent().getStringExtra(Intent.EXTRA_INTENT);
|
String pluginDisplayName = getIntent().getStringExtra("plugin_display_name");
|
||||||
int resource_file = getResources().getIdentifier(resource_name, "xml", getPackageName());
|
setTitle(getString(R.string.plugin_settings_with_name, pluginDisplayName));
|
||||||
addPreferencesFromResource(resource_file);
|
|
||||||
|
String pluginName = getIntent().getStringExtra("plugin_name");
|
||||||
|
int resFile = getResources().getIdentifier(pluginName + "_preferences", "xml", getPackageName());
|
||||||
|
addPreferencesFromResource(resFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -20,7 +20,6 @@
|
|||||||
|
|
||||||
package org.kde.kdeconnect.UserInterface;
|
package org.kde.kdeconnect.UserInterface;
|
||||||
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.CheckBoxPreference;
|
import android.preference.CheckBoxPreference;
|
||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
@@ -31,6 +30,7 @@ import android.widget.AdapterView;
|
|||||||
|
|
||||||
import org.kde.kdeconnect.BackgroundService;
|
import org.kde.kdeconnect.BackgroundService;
|
||||||
import org.kde.kdeconnect.Device;
|
import org.kde.kdeconnect.Device;
|
||||||
|
import org.kde.kdeconnect.Plugins.Plugin;
|
||||||
import org.kde.kdeconnect.Plugins.PluginFactory;
|
import org.kde.kdeconnect.Plugins.PluginFactory;
|
||||||
import org.kde.kdeconnect_tp.R;
|
import org.kde.kdeconnect_tp.R;
|
||||||
|
|
||||||
@@ -72,7 +72,7 @@ public class SettingsActivity extends PreferenceActivity {
|
|||||||
|
|
||||||
if (info.hasSettings()) {
|
if (info.hasSettings()) {
|
||||||
final Preference pluginPreference = new Preference(getBaseContext());
|
final Preference pluginPreference = new Preference(getBaseContext());
|
||||||
pluginPreference.setKey(pluginName + getString(R.string.plugin_settings_key));
|
pluginPreference.setKey(pluginName + "_preferences");
|
||||||
pluginPreference.setSummary(getString(R.string.plugin_settings_with_name, info.getDisplayName()));
|
pluginPreference.setSummary(getString(R.string.plugin_settings_with_name, info.getDisplayName()));
|
||||||
preferences.add(pluginPreference);
|
preferences.add(pluginPreference);
|
||||||
preferenceScreen.addPreference(pluginPreference);
|
preferenceScreen.addPreference(pluginPreference);
|
||||||
@@ -84,16 +84,16 @@ public class SettingsActivity extends PreferenceActivity {
|
|||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
|
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
|
||||||
Preference pref = preferences.get(i);
|
Preference pref = preferences.get(i);
|
||||||
if (pref.getDependency() == null) { //Is a plugin check
|
if (pref.getDependency() == null) { //Is a check to enable/disable a plugin
|
||||||
CheckBoxPreference check = (CheckBoxPreference)pref;
|
CheckBoxPreference check = (CheckBoxPreference)pref;
|
||||||
boolean enabled = device.isPluginEnabled(pref.getKey());
|
boolean enabled = device.isPluginEnabled(pref.getKey());
|
||||||
device.setPluginEnabled(pref.getKey(), !enabled);
|
device.setPluginEnabled(pref.getKey(), !enabled);
|
||||||
check.setChecked(!enabled);
|
check.setChecked(!enabled);
|
||||||
} else { //Is a plugin suboption
|
} else { //Is a plugin suboption
|
||||||
if (pref.isEnabled()) {
|
if (pref.isEnabled()) {
|
||||||
Intent intent = new Intent(SettingsActivity.this, PluginSettingsActivity.class);
|
String pluginName = pref.getDependency(); //The parent pref will be named like the plugin
|
||||||
intent.putExtra(Intent.EXTRA_INTENT, pref.getKey());
|
Plugin plugin = device.getPlugin(pluginName, true);
|
||||||
startActivity(intent);
|
plugin.startPreferencesActivity(SettingsActivity.this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -102,6 +102,5 @@ public class SettingsActivity extends PreferenceActivity {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -21,10 +21,13 @@ for subdir in `cat l10n-kde4/subdirs`; do
|
|||||||
else
|
else
|
||||||
echo "Translation for $subdir changed"
|
echo "Translation for $subdir changed"
|
||||||
mv localized/$subdir.new.po localized/$subdir.po
|
mv localized/$subdir.new.po localized/$subdir.po
|
||||||
|
rm localized/$subdir.txt
|
||||||
|
msgexec 0 < localized/$subdir.po | xargs --null -I line echo line >> localized/$subdir.txt
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "New translation for $subdir"
|
echo "New translation for $subdir"
|
||||||
mv localized/$subdir.new.po localized/$subdir.po
|
mv localized/$subdir.new.po localized/$subdir.po
|
||||||
|
msgexec 0 < localized/$subdir.po | xargs --null -I line echo line >> localized/$subdir.txt
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@@ -21,19 +21,19 @@ msgstr ""
|
|||||||
|
|
||||||
#: dummy:2
|
#: dummy:2
|
||||||
msgid ""
|
msgid ""
|
||||||
"KDE Connect provides several features to integrate your phone and your computer:"
|
"KDE Connect provides several features to integrate your phone and your computer:\n"
|
||||||
""
|
"\n"
|
||||||
"- Share files and URLs to KDE from any app, without wires."
|
"- Share files and URLs to KDE from any app, without wires.\n"
|
||||||
"- Touchpad emulation: Use your phone screen as your computer's touchpad*."
|
"- Touchpad emulation: Use your phone screen as your computer's touchpad*.\n"
|
||||||
"- Notifications sync (4.3+): Read your Android notifications from the desktop."
|
"- Notifications sync (4.3+): Read your Android notifications from the desktop.\n"
|
||||||
"- Shared clipboard: copy and paste between your phone and your computer."
|
"- Shared clipboard: copy and paste between your phone and your computer.\n"
|
||||||
"- Multimedia remote control: Use your phone as a remote for Linux media players."
|
"- Multimedia remote control: Use your phone as a remote for Linux media players.\n"
|
||||||
"- WiFi connection: no usb wire or bluetooth needed."
|
"- WiFi connection: no usb wire or bluetooth needed.\n"
|
||||||
"- RSA Encryption: your information is safe."
|
"- RSA Encryption: your information is safe.\n"
|
||||||
""
|
"\n"
|
||||||
"Please note you will need to install KDE Connect on your computer for this app to work, and keep the desktop version up-to-date with the Android version for the latest features to work."
|
"Please note you will need to install KDE Connect on your computer for this app to work, and keep the desktop version up-to-date with the Android version for the latest features to work.\n"
|
||||||
""
|
"\n"
|
||||||
"*NOTE for Ubuntu users: The Ubuntu folks are not updating their repos as fast as this app gets updated. Some features will not work if the KDE Connect version in you desktop doesn't match the one in your phone. To make sure you always have the latest version on your desktop, use this PPA repository: https://code.launchpad.net/~vikoadi/+archive/ubuntu/ppa/"
|
"*NOTE for Ubuntu users: The Ubuntu folks are not updating their repos as fast as this app gets updated. Some features will not work if the KDE Connect version in you desktop doesn't match the one in your phone. To make sure you always have the latest version on your desktop, use this PPA repository: https://code.launchpad.net/~vikoadi/+archive/ubuntu/ppa/ \n"
|
||||||
""
|
"\n"
|
||||||
"This app is part of an open source project, visit the website to grab the sources."
|
"This app is part of an open source project, visit the website to grab the sources.\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
Reference in New Issue
Block a user