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

Compare commits

..

22 Commits
v0.6 ... v0.6.4

Author SHA1 Message Date
Albert Vaca
0311163829 Updated version number to release 2014-05-14 01:23:34 +02:00
Albert Vaca
76fd6d1e08 Better exception handling in sendMessage 2014-05-14 01:21:28 +02:00
l10n daemon script
a79e8f83ce SVN_SILENT made messages (after extraction) 2014-05-05 01:59:18 +00:00
Albert Vaca
3f6ec6a2d7 Broadcast device name after changing it 2014-04-12 20:50:19 +02:00
Albert Vaca
726f623eea Project settings: changed from release to debug 2014-04-12 20:44:39 +02:00
l10n daemon script
0db8f7c1d4 SVN_SILENT made messages (after extraction) 2014-03-29 01:59:41 +00:00
Albert Vaca
7a289fbe38 Fixed silly stuff reported by the lint analyzer 2014-03-29 01:47:15 +01:00
Albert Vaca
41bb2ed916 Increased version number to release 2014-03-27 23:19:58 +01:00
Sven Nobis
4598f080a2 Read notifications ticker text from extras Bundle.
Many Apps don't set a useful ticker text. On Android version KitKat or
newer, the title and text of a notification is stored in the extras Bundle.
This patch make use of it, to provide a better ticker text.
2014-03-27 23:18:56 +01:00
l10n daemon script
ecf22e889b SVN_SILENT made messages (after extraction) 2014-03-26 01:55:42 +00:00
l10n daemon script
8598cf5f2e SVN_SILENT made messages (after extraction) 2014-03-24 01:49:14 +00:00
l10n daemon script
1def9cc9ce SVN_SILENT made messages (after extraction) 2014-03-20 01:52:22 +00:00
l10n daemon script
0772a37f4e SVN_SILENT made messages (after extraction) 2014-03-19 04:23:04 +00:00
l10n daemon script
16edb35a0e SVN_SILENT made messages (after extraction) 2014-03-18 01:46:41 +00:00
Albert Vaca
8f9bad7a0f Increased version number to release 2014-03-15 17:47:50 +01:00
Mariusz Fik
4fd96062f6 Fix crash when user tries to unload plugin, which is not supported by platform. 2014-03-15 17:32:16 +01:00
l10n daemon script
a0a9eca060 SVN_SILENT made messages (after extraction) 2014-03-10 01:56:44 +00:00
Albert Vaca
5999ef7c8e Increased version number to release 2014-03-08 00:21:17 +01:00
Albert Vaca
9542597424 Updated project to latest version of Android build tools 2014-03-08 00:21:06 +01:00
Mariusz Fik
11e5563d9a Use hardware buttons to control multimedia player volume.
REVIEW: 116652
2014-03-07 23:27:01 +01:00
Albert Vaca
f31afdb6d0 Increased version number to release 2014-03-07 23:25:42 +01:00
l10n daemon script
27ec7c5bfb SVN_SILENT made messages (after extraction) 2014-03-03 01:48:29 +00:00
40 changed files with 447 additions and 116 deletions

View File

@@ -3,7 +3,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:0.7.+' classpath 'com.android.tools.build:gradle:0.9.+'
} }
} }
@@ -11,7 +11,7 @@ apply plugin: 'android'
android { android {
compileSdkVersion 19 compileSdkVersion 19
buildToolsVersion "19" buildToolsVersion "19.0.3"
defaultConfig { defaultConfig {
minSdkVersion 9 minSdkVersion 9
@@ -24,14 +24,18 @@ android {
exclude "META-INF/LICENSE.txt" exclude "META-INF/LICENSE.txt"
exclude "META-INF/NOTICE.txt" exclude "META-INF/NOTICE.txt"
} }
lintOptions {
abortOnError false
}
} }
dependencies { dependencies {
repositories { repositories {
mavenCentral() mavenCentral()
} }
compile "com.android.support:support-v4:19.0.+" compile "com.android.support:support-v4:19.1.+"
compile "com.android.support:appcompat-v7:19.0.+" compile "com.android.support:appcompat-v7:19.1.+"
compile "org.apache.mina:mina-core:2.0.+" compile "org.apache.mina:mina-core:2.0.+"
compile 'org.bouncycastle:bcprov-jdk16:1.45' compile 'org.bouncycastle:bcprov-jdk16:1.45'
compile 'org.apache.sshd:sshd-core:0.8.0' compile 'org.apache.sshd:sshd-core:0.8.0'

View File

@@ -1,6 +1,6 @@
#Sun Jan 12 12:44:14 MSK 2014 #Fri Mar 07 23:56:17 CET 2014
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=http\://services.gradle.org/distributions/gradle-1.9-all.zip distributionUrl=http\://services.gradle.org/distributions/gradle-1.11-all.zip

View File

@@ -35,27 +35,27 @@
<sourceFolder url="file://$MODULE_DIR$/build/source/buildConfig/test/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/source/buildConfig/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/source/rs/test/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/source/rs/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/res/rs/test/debug" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/build/res/rs/test/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/assets" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/aidl" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/assets" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/java" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/jni" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/resources" type="java-test-resource" />
<excludeFolder url="file://$MODULE_DIR$/.git" /> <excludeFolder url="file://$MODULE_DIR$/.git" />
<excludeFolder url="file://$MODULE_DIR$/.gradle" /> <excludeFolder url="file://$MODULE_DIR$/.gradle" />
<excludeFolder url="file://$MODULE_DIR$/.idea" /> <excludeFolder url="file://$MODULE_DIR$/.idea" />
@@ -74,12 +74,12 @@
<orderEntry type="jdk" jdkName="Android API 19 Platform" jdkType="Android SDK" /> <orderEntry type="jdk" jdkName="Android API 19 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="sshd-core-0.8.0" level="project" /> <orderEntry type="library" exported="" name="sshd-core-0.8.0" level="project" />
<orderEntry type="library" exported="" name="appcompat-v7-19.0.1" level="project" />
<orderEntry type="library" exported="" name="tomcat-apr-5.5.15" level="project" /> <orderEntry type="library" exported="" name="tomcat-apr-5.5.15" level="project" />
<orderEntry type="library" exported="" name="slf4j-api-1.6.6" level="project" /> <orderEntry type="library" exported="" name="slf4j-api-1.6.6" level="project" />
<orderEntry type="library" exported="" name="appcompat-v7-19.1.0" level="project" />
<orderEntry type="library" exported="" name="support-v4-19.1.0" level="project" />
<orderEntry type="library" exported="" name="bcprov-jdk16-1.45" level="project" /> <orderEntry type="library" exported="" name="bcprov-jdk16-1.45" level="project" />
<orderEntry type="library" exported="" name="mina-core-2.0.7" level="project" /> <orderEntry type="library" exported="" name="mina-core-2.0.7" level="project" />
<orderEntry type="library" exported="" name="support-v4-19.0.1" level="project" />
</component> </component>
</module> </module>

View File

@@ -1,11 +1,11 @@
<?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="14" android:versionCode="20"
android:versionName="0.6"> android:versionName="0.6.4">
<uses-sdk android:minSdkVersion="9" <uses-sdk android:minSdkVersion="9"
android:targetSdkVersion="18" /> android:targetSdkVersion="19" />
<supports-screens <supports-screens
android:smallScreens="true" android:smallScreens="true"
@@ -32,7 +32,6 @@
android:allowBackup="true" android:allowBackup="true"
android:icon="@drawable/icon" android:icon="@drawable/icon"
android:label="KDE Connect" android:label="KDE Connect"
android:debuggable="false"
> >
<service <service

View File

@@ -1,23 +1,17 @@
package org.kde.kdeconnect.Backends; package org.kde.kdeconnect.Backends;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Base64;
import org.kde.kdeconnect.NetworkPackage; import org.kde.kdeconnect.NetworkPackage;
import java.security.KeyFactory;
import java.security.PrivateKey; import java.security.PrivateKey;
import java.security.PublicKey; import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.ArrayList; import java.util.ArrayList;
public abstract class BaseLink { public abstract class BaseLink {
private BaseLinkProvider linkProvider; private final BaseLinkProvider linkProvider;
private String deviceId; private final String deviceId;
private ArrayList<PackageReceiver> receivers = new ArrayList<PackageReceiver>(); private final ArrayList<PackageReceiver> receivers = new ArrayList<PackageReceiver>();
protected PrivateKey privateKey; protected PrivateKey privateKey;
protected BaseLink(String deviceId, BaseLinkProvider linkProvider) { protected BaseLink(String deviceId, BaseLinkProvider linkProvider) {

View File

@@ -9,7 +9,7 @@ import java.util.ArrayList;
public abstract class BaseLinkProvider { public abstract class BaseLinkProvider {
private ArrayList<ConnectionReceiver> connectionReceivers = new ArrayList<ConnectionReceiver>(); private final ArrayList<ConnectionReceiver> connectionReceivers = new ArrayList<ConnectionReceiver>();
public interface ConnectionReceiver { public interface ConnectionReceiver {
public void onConnectionReceived(NetworkPackage identityPackage, BaseLink link); public void onConnectionReceived(NetworkPackage identityPackage, BaseLink link);

View File

@@ -3,6 +3,7 @@ package org.kde.kdeconnect.Backends.LanBackend;
import android.content.Context; import android.content.Context;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.util.Log; import android.util.Log;
import android.support.v4.util.LongSparseArray;
import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.future.IoFuture; import org.apache.mina.core.future.IoFuture;
@@ -30,9 +31,9 @@ public class LanLinkProvider extends BaseLinkProvider {
private final static int port = 1714; private final static int port = 1714;
private Context context; private final Context context;
private HashMap<String, LanLink> visibleComputers = new HashMap<String, LanLink>(); private final HashMap<String, LanLink> visibleComputers = new HashMap<String, LanLink>();
private HashMap<Long, LanLink> nioSessions = new HashMap<Long, LanLink>(); private final LongSparseArray<LanLink> nioSessions = new LongSparseArray<LanLink>();
private NioSocketAcceptor tcpAcceptor = null; private NioSocketAcceptor tcpAcceptor = null;
private NioDatagramAcceptor udpAcceptor = null; private NioDatagramAcceptor udpAcceptor = null;
@@ -41,8 +42,9 @@ public class LanLinkProvider extends BaseLinkProvider {
@Override @Override
public void sessionClosed(IoSession session) throws Exception { public void sessionClosed(IoSession session) throws Exception {
LanLink brokenLink = nioSessions.remove(session.getId()); LanLink brokenLink = nioSessions.get(session.getId());
if (brokenLink != null) { if (brokenLink != null) {
nioSessions.remove(session.getId());
connectionLost(brokenLink); connectionLost(brokenLink);
brokenLink.disconnect(); brokenLink.disconnect();
String deviceId = brokenLink.getDeviceId(); String deviceId = brokenLink.getDeviceId();
@@ -92,7 +94,7 @@ public class LanLinkProvider extends BaseLinkProvider {
} }
}; };
private IoHandler udpHandler = new IoHandlerAdapter() { private final IoHandler udpHandler = new IoHandlerAdapter() {
@Override @Override
public void messageReceived(IoSession udpSession, Object message) throws Exception { public void messageReceived(IoSession udpSession, Object message) throws Exception {
super.messageReceived(udpSession, message); super.messageReceived(udpSession, message);

View File

@@ -7,7 +7,7 @@ import org.kde.kdeconnect.NetworkPackage;
public class LoopbackLinkProvider extends BaseLinkProvider { public class LoopbackLinkProvider extends BaseLinkProvider {
private Context context; private final Context context;
public LoopbackLinkProvider(Context context) { public LoopbackLinkProvider(Context context) {
this.context = context; this.context = context;

View File

@@ -26,11 +26,11 @@ import java.util.concurrent.locks.ReentrantLock;
public class BackgroundService extends Service { public class BackgroundService extends Service {
private ArrayList<BaseLinkProvider> linkProviders = new ArrayList<BaseLinkProvider>(); private final ArrayList<BaseLinkProvider> linkProviders = new ArrayList<BaseLinkProvider>();
private HashMap<String, Device> devices = new HashMap<String, Device>(); private final HashMap<String, Device> devices = new HashMap<String, Device>();
private Device.PairingCallback devicePairingCallback = new Device.PairingCallback() { private final Device.PairingCallback devicePairingCallback = new Device.PairingCallback() {
@Override @Override
public void incomingRequest() { public void incomingRequest() {
if (deviceListChangedCallback != null) deviceListChangedCallback.onDeviceListChanged(); if (deviceListChangedCallback != null) deviceListChangedCallback.onDeviceListChanged();
@@ -63,7 +63,7 @@ public class BackgroundService extends Service {
} }
} }
public void registerLinkProviders() { private void registerLinkProviders() {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
@@ -81,7 +81,7 @@ public class BackgroundService extends Service {
return devices.get(id); return devices.get(id);
} }
private BaseLinkProvider.ConnectionReceiver deviceListener = new BaseLinkProvider.ConnectionReceiver() { private final BaseLinkProvider.ConnectionReceiver deviceListener = new BaseLinkProvider.ConnectionReceiver() {
@Override @Override
public void onConnectionReceived(final NetworkPackage identityPackage, final BaseLink link) { public void onConnectionReceived(final NetworkPackage identityPackage, final BaseLink link) {
@@ -266,9 +266,9 @@ public class BackgroundService extends Service {
void onServiceStart(BackgroundService service); void onServiceStart(BackgroundService service);
} }
private static ArrayList<InstanceCallback> callbacks = new ArrayList<InstanceCallback>(); private final static ArrayList<InstanceCallback> callbacks = new ArrayList<InstanceCallback>();
private static final Lock mutex = new ReentrantLock(true); private final static Lock mutex = new ReentrantLock(true);
@Override @Override
public int onStartCommand(Intent intent, int flags, int startId) { public int onStartCommand(Intent intent, int flags, int startId) {

View File

@@ -35,10 +35,10 @@ import java.util.TimerTask;
public class Device implements BaseLink.PackageReceiver { public class Device implements BaseLink.PackageReceiver {
private Context context; private final Context context;
private String deviceId; private final String deviceId;
private String name; private final String name;
public PublicKey publicKey; public PublicKey publicKey;
private int notificationId; private int notificationId;
private int protocolVersion; private int protocolVersion;
@@ -61,11 +61,11 @@ public class Device implements BaseLink.PackageReceiver {
private ArrayList<PairingCallback> pairingCallback = new ArrayList<PairingCallback>(); private ArrayList<PairingCallback> pairingCallback = new ArrayList<PairingCallback>();
private Timer pairingTimer; private Timer pairingTimer;
private ArrayList<BaseLink> links = new ArrayList<BaseLink>(); private final ArrayList<BaseLink> links = new ArrayList<BaseLink>();
private HashMap<String, Plugin> plugins = new HashMap<String, Plugin>(); private final HashMap<String, Plugin> plugins = new HashMap<String, Plugin>();
private HashMap<String, Plugin> failedPlugins = new HashMap<String, Plugin>(); private final HashMap<String, Plugin> failedPlugins = new HashMap<String, Plugin>();
SharedPreferences settings; private final SharedPreferences settings;
//Remembered trusted device, we need to wait for a incoming devicelink to communicate //Remembered trusted device, we need to wait for a incoming devicelink to communicate
Device(Context context, String deviceId) { Device(Context context, String deviceId) {
@@ -491,13 +491,19 @@ public class Device implements BaseLink.PackageReceiver {
ArrayList<BaseLink> mLinks = new ArrayList<BaseLink>(links); ArrayList<BaseLink> mLinks = new ArrayList<BaseLink>(links);
boolean success = false; boolean success = false;
for(BaseLink link : mLinks) { try {
if (useEncryption) { for (BaseLink link : mLinks) {
success = link.sendPackageEncrypted(np, publicKey); if (useEncryption) {
} else { success = link.sendPackageEncrypted(np, publicKey);
success = link.sendPackage(np); } else {
success = link.sendPackage(np);
}
if (success) break;
} }
if (success) break; } catch(Exception e) {
e.printStackTrace();
Log.e("sendPackage","Error while sending package");
success = false;
} }
if (success) { if (success) {
@@ -653,7 +659,7 @@ public class Device implements BaseLink.PackageReceiver {
void onPluginsChanged(Device device); void onPluginsChanged(Device device);
} }
private ArrayList<PluginsChangedListener> pluginsChangedListeners = new ArrayList<PluginsChangedListener>(); private final ArrayList<PluginsChangedListener> pluginsChangedListeners = new ArrayList<PluginsChangedListener>();
public void addPluginsChangedListener(PluginsChangedListener listener) { public void addPluginsChangedListener(PluginsChangedListener listener) {
pluginsChangedListeners.add(listener); pluginsChangedListeners.add(listener);

View File

@@ -13,7 +13,7 @@ public class AppsHelper {
try { try {
PackageManager pm = context.getPackageManager(); PackageManager pm = context.getPackageManager();
ApplicationInfo ai = pm.getApplicationInfo( packageName, 0); ApplicationInfo ai = pm.getApplicationInfo(packageName, 0);
return pm.getApplicationLabel(ai).toString(); return pm.getApplicationLabel(ai).toString();

View File

@@ -3,9 +3,7 @@ package org.kde.kdeconnect.Helpers;
import android.content.Context; import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.PhoneLookup; import android.provider.ContactsContract.PhoneLookup;
import android.util.Log;
public class ContactsHelper { public class ContactsHelper {
@@ -31,7 +29,7 @@ public class ContactsHelper {
// Take the first match only // Take the first match only
if (cursor != null && cursor.moveToFirst()) { if (cursor != null && cursor.moveToFirst()) {
int nameIndex = cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME); int nameIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);
if (nameIndex != -1) { if (nameIndex != -1) {
String name = cursor.getString(nameIndex); String name = cursor.getString(nameIndex);
//Log.e("PhoneNumberLookup", "success: " + name); //Log.e("PhoneNumberLookup", "success: " + name);

View File

@@ -11,7 +11,7 @@ public class DeviceHelper {
//from https://github.com/meetup/android-device-names //from https://github.com/meetup/android-device-names
//Converted to java using: //Converted to java using:
//cat android_models.properties | awk -F'=' '{sub(/ *$/, "", $1)} sub(/^ */, "", $2) { if ($2 != "") print "humanReadableNames.put(\""$1"\",\"" $2 "\");"}' //cat android_models.properties | awk -F'=' '{sub(/ *$/, "", $1)} sub(/^ */, "", $2) { if ($2 != "") print "humanReadableNames.put(\""$1"\",\"" $2 "\");"}'
private 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("ADR6300","HTC Droid Incredible"); humanReadableNames.put("ADR6300","HTC Droid Incredible");

View File

@@ -8,7 +8,6 @@ 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;

View File

@@ -8,7 +8,6 @@ import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.BatteryManager; import android.os.BatteryManager;
import android.util.Log;
import android.widget.Button; import android.widget.Button;
import org.kde.kdeconnect.NetworkPackage; import org.kde.kdeconnect.NetworkPackage;
@@ -21,7 +20,7 @@ public class BatteryPlugin extends Plugin {
private static final int THRESHOLD_EVENT_NONE= 0; private static final int THRESHOLD_EVENT_NONE= 0;
private static final int THRESHOLD_EVENT_BATTERY_LOW = 1; private static final int THRESHOLD_EVENT_BATTERY_LOW = 1;
NetworkPackage lastInfo = null; private NetworkPackage lastInfo = null;
/*static { /*static {
PluginFactory.registerPlugin(BatteryPlugin.class); PluginFactory.registerPlugin(BatteryPlugin.class);
@@ -52,7 +51,7 @@ public class BatteryPlugin extends Plugin {
return true; return true;
} }
private BroadcastReceiver receiver = new BroadcastReceiver() { private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, Intent batteryIntent) { public void onReceive(Context context, Intent batteryIntent) {

View File

@@ -10,11 +10,11 @@ import org.kde.kdeconnect.NetworkPackage;
public class ClipboardListener { public class ClipboardListener {
private Context context; private final Context context;
private String currentContent; private String currentContent;
private ClipboardManager cm = null; private ClipboardManager cm = null;
ClipboardManager.OnPrimaryClipChangedListener listener; private ClipboardManager.OnPrimaryClipChangedListener listener;
ClipboardListener(final Context ctx, final Device device) { ClipboardListener(final Context ctx, final Device device) {
context = ctx; context = ctx;

View File

@@ -5,6 +5,7 @@ import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.util.Log; import android.util.Log;
import android.view.KeyEvent;
import android.view.View; import android.view.View;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
@@ -27,6 +28,8 @@ public class MprisActivity extends Activity {
//TODO: Add a loading spinner at the begginning (to distinguish the loading state from a no-players state). //TODO: Add a loading spinner at the begginning (to distinguish the loading state from a no-players state).
//TODO 2: Add a message when no players are detected after loading completes //TODO 2: Add a message when no players are detected after loading completes
private String deviceId;
protected void connectToPlugin() { protected void connectToPlugin() {
final String deviceId = getIntent().getStringExtra("deviceId"); final String deviceId = getIntent().getStringExtra("deviceId");
@@ -123,7 +126,7 @@ public class MprisActivity extends Activity {
} }
BaseLinkProvider.ConnectionReceiver connectionReceiver = new BaseLinkProvider.ConnectionReceiver() { private final BaseLinkProvider.ConnectionReceiver connectionReceiver = new BaseLinkProvider.ConnectionReceiver() {
@Override @Override
public void onConnectionReceived(NetworkPackage identityPackage, BaseLink link) { public void onConnectionReceived(NetworkPackage identityPackage, BaseLink link) {
connectToPlugin(); connectToPlugin();
@@ -146,12 +149,73 @@ public class MprisActivity extends Activity {
}); });
} }
/**
* Change current volume with provided step.
*
* @param mpris multimedia controller
* @param step step size volume change
*/
private void updateVolume(MprisPlugin mpris, int step) {
final int currentVolume = mpris.getVolume();
if(currentVolume < 100 || currentVolume > 0) {
int newVolume = currentVolume + step;
if(newVolume > 100) {
newVolume = 100;
} else if (newVolume <0 ) {
newVolume = 0;
}
mpris.setVolume(newVolume);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
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) return;
updateVolume(mpris, 5);
}
});
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
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) return;
updateVolume(mpris, -5);
}
});
return true;
default:
return super.onKeyDown(keyCode, event);
}
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
return true;
default:
return super.onKeyUp(keyCode, event);
}
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.mpris_control); setContentView(R.layout.mpris_control);
final String deviceId = getIntent().getStringExtra("deviceId"); deviceId = getIntent().getStringExtra("deviceId");
BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() { BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() {
@Override @Override
@@ -238,10 +302,12 @@ public class MprisActivity extends Activity {
((SeekBar)findViewById(R.id.volume_seek)).setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { ((SeekBar)findViewById(R.id.volume_seek)).setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override @Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) { } public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
@Override @Override
public void onStartTrackingTouch(SeekBar seekBar) { } public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override @Override
public void onStopTrackingTouch(final SeekBar seekBar) { public void onStopTrackingTouch(final SeekBar seekBar) {
@@ -253,12 +319,14 @@ public class MprisActivity extends Activity {
if (mpris == null) return; if (mpris == null) return;
mpris.setVolume(seekBar.getProgress()); mpris.setVolume(seekBar.getProgress());
} }
}); });
} }
}); });
} }
} }

View File

@@ -5,7 +5,6 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.service.notification.NotificationListenerService; import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification; import android.service.notification.StatusBarNotification;
import android.util.Log;
import java.util.ArrayList; import java.util.ArrayList;
@@ -16,7 +15,7 @@ public class NotificationReceiver extends NotificationListenerService {
void onNotificationRemoved(StatusBarNotification statusBarNotification); void onNotificationRemoved(StatusBarNotification statusBarNotification);
} }
private ArrayList<NotificationListener> listeners = new ArrayList<NotificationListener>(); private final ArrayList<NotificationListener> listeners = new ArrayList<NotificationListener>();
public void addListener(NotificationListener listener) { public void addListener(NotificationListener listener) {
listeners.add(listener); listeners.add(listener);
@@ -61,7 +60,7 @@ public class NotificationReceiver extends NotificationListenerService {
void onServiceStart(NotificationReceiver service); void onServiceStart(NotificationReceiver service);
} }
private static ArrayList<InstanceCallback> callbacks = new ArrayList<InstanceCallback>(); private final static ArrayList<InstanceCallback> callbacks = new ArrayList<InstanceCallback>();
public static void Start(Context c) { public static void Start(Context c) {
RunCommand(c, null); RunCommand(c, null);

View File

@@ -6,25 +6,19 @@ import android.app.Notification;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager;
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.provider.Settings; import android.provider.Settings;
import android.service.notification.StatusBarNotification; import android.service.notification.StatusBarNotification;
import android.util.Base64;
import android.util.Log; 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_tp.R; import org.kde.kdeconnect_tp.R;
import java.io.ByteArrayOutputStream;
import java.nio.charset.Charset;
public class NotificationsPlugin extends Plugin implements NotificationReceiver.NotificationListener { public class NotificationsPlugin extends Plugin implements NotificationReceiver.NotificationListener {
/*static { /*static {
@@ -116,7 +110,9 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
@Override @Override
public boolean onCreate() { public boolean onCreate() {
if (Build.VERSION.SDK_INT < 18) return false; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
return false;
}
//Check for permissions //Check for permissions
String notificationListenerList = Settings.Secure.getString(context.getContentResolver(), "enabled_notification_listeners"); String notificationListenerList = Settings.Secure.getString(context.getContentResolver(), "enabled_notification_listeners");
@@ -146,6 +142,11 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
@Override @Override
public void onDestroy() { public void onDestroy() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
return;
}
NotificationReceiver.RunCommand(context, new NotificationReceiver.InstanceCallback() { NotificationReceiver.RunCommand(context, new NotificationReceiver.InstanceCallback() {
@Override @Override
public void onServiceStart(NotificationReceiver service) { public void onServiceStart(NotificationReceiver service) {
@@ -209,7 +210,7 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
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", (notification != null && notification.tickerText != null)? notification.tickerText.toString() : ""); 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);
@@ -217,7 +218,38 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
} }
/**
* Returns the ticker text of the notification.
* If device android version is KitKat or newer, the title and text of the notification is used
* instead the ticker text.
*/
private String getTickerText(Notification notification) {
final String TITLE_KEY = "android.title";
final String TEXT_KEY = "android.text";
String ticker = "";
if(notification != null) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Bundle extras = notification.extras;
String extraTitle = extras.getString(TITLE_KEY);
String extraText = extras.getString(TEXT_KEY);
if(extraTitle != null && extraText != null) {
ticker = extraTitle + " " + extraText;
} else if(extraTitle != null) {
ticker = extraTitle;
} else if(extraText != null) {
ticker = extraText;
}
}
if (ticker.isEmpty()) {
ticker = (notification.tickerText != null)? notification.tickerText.toString() : "";
}
}
return ticker;
}
@Override @Override

View File

@@ -50,11 +50,11 @@ public class PluginFactory {
return enabledByDefault; return enabledByDefault;
} }
private String pluginName; private final String pluginName;
private String displayName; private final String displayName;
private String description; private final String description;
private final Drawable icon; private final Drawable icon;
private boolean enabledByDefault; private final boolean enabledByDefault;
} }

View File

@@ -10,7 +10,6 @@ import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.telephony.SmsMessage; import android.telephony.SmsMessage;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Button; import android.widget.Button;
import org.kde.kdeconnect.Helpers.ContactsHelper; import org.kde.kdeconnect.Helpers.ContactsHelper;
@@ -49,7 +48,7 @@ public class TelephonyPlugin extends Plugin {
return true; return true;
} }
private BroadcastReceiver receiver = new BroadcastReceiver() { private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {

View File

@@ -32,7 +32,7 @@ public class DeviceActivity extends ActionBarActivity {
static private String deviceId; //Static because if we get here by using the back button in the action bar, the extra deviceId will not be set. static private String deviceId; //Static because if we get here by using the back button in the action bar, the extra deviceId will not be set.
private Device device; private Device device;
private Device.PluginsChangedListener pluginsChangedListener = new Device.PluginsChangedListener() { private final Device.PluginsChangedListener pluginsChangedListener = new Device.PluginsChangedListener() {
@Override @Override
public void onPluginsChanged(final Device device) { public void onPluginsChanged(final Device device) {
@@ -59,6 +59,7 @@ public class DeviceActivity extends ActionBarActivity {
errorList.setOnItemClickListener(new AdapterView.OnItemClickListener() { errorList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override @Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
if (position == 0) return;
Plugin p = failedPlugins.get(ids[position - 1]); //Header is position 0, so we have to subtract one Plugin p = failedPlugins.get(ids[position - 1]); //Header is position 0, so we have to subtract one
p.getErrorDialog(DeviceActivity.this).show(); p.getErrorDialog(DeviceActivity.this).show();
} }

View File

@@ -1,15 +1,9 @@
package org.kde.kdeconnect.UserInterface.List; package org.kde.kdeconnect.UserInterface.List;
import android.app.Activity;
import android.content.Intent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.UserInterface.DeviceActivity;
import org.kde.kdeconnect.UserInterface.PairActivity;
import org.kde.kdeconnect_tp.R; import org.kde.kdeconnect_tp.R;
public class EntryItem implements ListAdapter.Item { public class EntryItem implements ListAdapter.Item {

View File

@@ -14,8 +14,8 @@ public class ListAdapter extends ArrayAdapter<ListAdapter.Item> {
public View inflateView(LayoutInflater layoutInflater); public View inflateView(LayoutInflater layoutInflater);
} }
private ArrayList<Item> items; private final ArrayList<Item> items;
private LayoutInflater layoutInflater; private final LayoutInflater layoutInflater;
public ListAdapter(Context context, ArrayList<Item> items) { public ListAdapter(Context context, ArrayList<Item> items) {
super(context, 0, items); super(context, 0, items);

View File

@@ -6,7 +6,6 @@ import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
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.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
@@ -145,12 +144,13 @@ public class MainActivity extends ActionBarActivity {
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) {
view.callOnClick(); view.performClick();
} }
}); });
} }
}); });
} }
}); });
} }

View File

@@ -13,10 +13,11 @@ import android.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.Helpers.DeviceHelper; import org.kde.kdeconnect.Helpers.DeviceHelper;
import org.kde.kdeconnect_tp.R; import org.kde.kdeconnect_tp.R;
public class MainSettingsActivity extends PreferenceActivity{ public class MainSettingsActivity extends PreferenceActivity {
public static final String KEY_DEVICE_NAME_PREFERENCE = "device_name_preference"; public static final String KEY_DEVICE_NAME_PREFERENCE = "device_name_preference";
@@ -55,6 +56,14 @@ public class MainSettingsActivity extends PreferenceActivity{
deviceNamePref.setSummary(getString( deviceNamePref.setSummary(getString(
R.string.device_name_preference_summary, R.string.device_name_preference_summary,
newDeviceName.toString())); newDeviceName.toString()));
//Broadcast the device information again since it has changed
BackgroundService.RunCommand(MainSettingsActivity.this, new BackgroundService.InstanceCallback() {
@Override
public void onServiceStart(BackgroundService service) {
service.onNetworkChange();
}
});
return true; return true;
} }
} }
@@ -67,7 +76,7 @@ public class MainSettingsActivity extends PreferenceActivity{
/** /**
* Until now it sets only the default deviceName (if not already set). * Until now it sets only the default deviceName (if not already set).
* It's safe to call this multiple time because doesn't override any previous value. * It's safe to call this multiple time because doesn't override any previous value.
* @param context * @param context the application context
*/ */
public static void initializeDeviceName(Context context){ public static void initializeDeviceName(Context context){
// I could have used getDefaultSharedPreferences(context).contains but we need to check // I could have used getDefaultSharedPreferences(context).contains but we need to check
@@ -84,7 +93,7 @@ public class MainSettingsActivity extends PreferenceActivity{
} }
@TargetApi(Build.VERSION_CODES.HONEYCOMB) @TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class GeneralPrefsFragment extends PreferenceFragment { private static class GeneralPrefsFragment extends PreferenceFragment {
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);

View File

@@ -18,7 +18,7 @@ public class PairActivity extends ActionBarActivity {
private String deviceId; private String deviceId;
private Device device = null; private Device device = null;
private Device.PairingCallback pairingCallback = new Device.PairingCallback() { private final Device.PairingCallback pairingCallback = new Device.PairingCallback() {
@Override @Override
public void incomingRequest() { public void incomingRequest() {

View File

@@ -2,7 +2,6 @@ package org.kde.kdeconnect.UserInterface;
import android.content.Context; import android.content.Context;
import android.preference.Preference; import android.preference.Preference;
import android.util.Log;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
@@ -12,7 +11,7 @@ import java.util.ArrayList;
public class PreferenceListAdapter extends ArrayAdapter<Preference> { public class PreferenceListAdapter extends ArrayAdapter<Preference> {
private ArrayList<Preference> localList; private final ArrayList<Preference> localList;
public PreferenceListAdapter(Context context, ArrayList<Preference> items) { public PreferenceListAdapter(Context context, ArrayList<Preference> items) {
super(context,0, items); super(context,0, items);

View File

@@ -4,7 +4,6 @@ import android.app.ListActivity;
import android.os.Bundle; import android.os.Bundle;
import android.preference.CheckBoxPreference; import android.preference.CheckBoxPreference;
import android.preference.Preference; import android.preference.Preference;
import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.AdapterView; import android.widget.AdapterView;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 750 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 365 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -5,7 +5,7 @@
android:id="@+id/menu_refresh" android:id="@+id/menu_refresh"
android:icon="@drawable/ic_action_refresh" android:icon="@drawable/ic_action_refresh"
android:orderInCategory="200" android:orderInCategory="200"
kdeconnect:showAsAction="always" kdeconnect:showAsAction="ifRoom"
android:title="@string/reconnect" android:title="@string/reconnect"
/> />
@@ -13,7 +13,7 @@
android:id="@+id/menu_progress" android:id="@+id/menu_progress"
android:orderInCategory="200" android:orderInCategory="200"
android:visible="false" android:visible="false"
kdeconnect:showAsAction="always" kdeconnect:showAsAction="ifRoom"
kdeconnect:actionViewClass="android.widget.ProgressBar" kdeconnect:actionViewClass="android.widget.ProgressBar"
/> />

View File

@@ -1,31 +1,62 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<resources> <resources>
<string name="pref_plugin_telephony">Oznamování telefonie</string>
<string name="pref_plugin_telephony_desc">Posílat upozorňování na SMS a hovory</string>
<string name="pref_plugin_battery">Hlášení baterie</string> <string name="pref_plugin_battery">Hlášení baterie</string>
<string name="pref_plugin_battery_desc">Periodicky hlásit stav baterky</string>
<string name="pref_plugin_sftp_desc">Umožní vám vzdáleně prohlížet souborový systém telefonu</string>
<string name="pref_plugin_clipboard">Synchronizace schránky</string>
<string name="pref_plugin_clipboard_desc">Sdílet obsah schránky</string>
<string name="pref_plugin_mpris">Vzdálené ovládání multimédií</string>
<string name="pref_plugin_mpris_desc">Ovládejte audio/video z vašeho telefonu</string>
<string name="pref_plugin_ping">Ping</string> <string name="pref_plugin_ping">Ping</string>
<string name="pref_plugin_ping_desc">Posílat a přijímat ping</string> <string name="pref_plugin_ping_desc">Posílat a přijímat ping</string>
<string name="pref_plugin_notifications">Synchronizace hlášení</string>
<string name="pref_plugin_notifications_desc">Zpřístupněte si upozornění z jiných zařízení</string>
<string name="plugin_not_available">Tato vlastnost není pro vaši verzi Androidu platná</string>
<string name="device_list_empty">Žádná zařízení</string> <string name="device_list_empty">Žádná zařízení</string>
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="cancel">Zrušit</string> <string name="cancel">Zrušit</string>
<string name="open_settings">Otevřít nastavení</string> <string name="open_settings">Otevřít nastavení</string>
<string name="no_permissions">Pro zpřístupnění upozornění potřebujete oprávnění</string>
<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="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">Nespárovaná 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="device_menu_plugins">Vyberte moduly</string> <string name="device_menu_plugins">Vyberte moduly</string>
<string name="device_menu_unpair">Zrušit párování</string>
<string name="unknown_device">Neznámé zařízení</string> <string name="unknown_device">Neznámé zařízení</string>
<string name="error_not_reachable">Zařízení je nedostupné</string>
<string name="error_already_requested">Párování již bylo vyžádáno</string>
<string name="error_already_paired">Zařízení je již spárované</string>
<string name="error_could_not_send_package">Balíček nelze poslat</string>
<string name="error_timed_out">Čas vypršel</string> <string name="error_timed_out">Čas vypršel</string>
<string name="error_canceled_by_user">Přerušeno uživatelem</string> <string name="error_canceled_by_user">Přerušeno uživatelem</string>
<string name="error_canceled_by_other_peer">Přerušeno druhým uživatelem</string>
<string name="error_invalid_key">Byl přijat neplatný klíč</string>
<string name="pair_requested">Bylo vyžádáno párování</string>
<string name="pairing_request_from">Požadavek o párování z %1s</string>
<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="device_not_paired">Zařízení není spárované</string>
<string name="request_pairing">Vyžádat párování</string>
<string name="pairing_accept">Přijmout</string> <string name="pairing_accept">Přijmout</string>
<string name="pairing_reject">Odmítnout</string> <string name="pairing_reject">Odmítnout</string>
<string name="device">Zařízení</string> <string name="device">Zařízení</string>
<string name="pair_device">Spárovat zařízení</string>
<string name="remote_control">Vzdálené ovládání</string> <string name="remote_control">Vzdálené ovládání</string>
<string name="settings">Nastavení KDE Connect</string>
<string name="mpris_play">Přehrát</string> <string name="mpris_play">Přehrát</string>
<string name="mpris_previous">Předchozí</string> <string name="mpris_previous">Předchozí</string>
<string name="mpris_rew">Přetočit zpět</string> <string name="mpris_rew">Přetočit zpět</string>
<string name="mpris_ff">Rychle vpřed</string> <string name="mpris_ff">Rychle vpřed</string>
<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="share_to">Sdílet s...</string>
<string name="protocol_version_older">Toto zařízení používá starou verzi protokolu</string>
<string name="protocol_version_newer">Toto zařízení používá novější verzi protokolu</string>
<string name="general_settings">Obecná nastavení</string> <string name="general_settings">Obecná nastavení</string>
<string name="device_name">Název zařízení</string> <string name="device_name">Název zařízení</string>
<string name="device_name_preference_summary">%s</string> <string name="device_name_preference_summary">%s</string>

View File

@@ -4,12 +4,14 @@
<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>
<string name="pref_plugin_sftp">Exposer le système de fichiers</string>
<string name="pref_plugin_sftp_desc">Permettre de parcourir le système de fichiers du téléphone à distance</string>
<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_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="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>

View File

@@ -0,0 +1,2 @@
<?xml version='1.0' encoding='utf-8'?>
<resources/>

View File

@@ -0,0 +1,65 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="pref_plugin_telephony">전화 알림이</string>
<string name="pref_plugin_telephony_desc">문자 메시지와 통화 알림 보내기</string>
<string name="pref_plugin_battery">배터리 보고</string>
<string name="pref_plugin_battery_desc">주기적으로 배터리 상태 보고</string>
<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_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="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="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_plugins">플러그인 선택</string>
<string name="device_menu_unpair">페어링 해제</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="tap_to_answer">눌러서 응답하기</string>
<string name="reconnect">다시 연결</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">KDE Connect 설정</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="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>

View File

@@ -0,0 +1,65 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="pref_plugin_telephony">Powiadomienie telefonu</string>
<string name="pref_plugin_telephony_desc">Wysyłaj powiadomienia dla SMS i połączeń</string>
<string name="pref_plugin_battery">Zgłaszanie baterii</string>
<string name="pref_plugin_battery_desc">Okresowo zgłaszaj stan baterii</string>
<string name="pref_plugin_sftp">Eksponowanie systemu plików</string>
<string name="pref_plugin_sftp_desc">Zezwala na zdalne przeglądanie systemu plików telefonu</string>
<string name="pref_plugin_clipboard">Synchronizacja schowka</string>
<string name="pref_plugin_clipboard_desc">Udostępnij zawartość schowka</string>
<string name="pref_plugin_mpris">Zdalne sterowanie multimediami</string>
<string name="pref_plugin_mpris_desc">Steruj dźwiękiem/obrazem ze swojego telefonu</string>
<string name="pref_plugin_ping">Ping</string>
<string name="pref_plugin_ping_desc">Wysyłaj i otrzymuj pingi</string>
<string name="pref_plugin_notifications">Powiadomienia synchronizacji</string>
<string name="pref_plugin_notifications_desc">Uzyskaj dostęp do swoich powiadomień z innego urządzenia</string>
<string name="plugin_not_available">Funkcja ta nie jest dostępna w twojej wersji Androida</string>
<string name="device_list_empty">Brak urządzeń</string>
<string name="ok">OK</string>
<string name="cancel">Anuluj</string>
<string name="open_settings">Otwórz ustawienia</string>
<string name="no_permissions">Musisz przydzielić uprawnienia, aby uzyskać dostęp do powiadomień</string>
<string name="send_ping">Wyślij ping</string>
<string name="open_mpris_controls">Otwórz zdalne sterowanie</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_remembered_devices">Zapamiętane urządzenia</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_unpair">Odparuj</string>
<string name="unknown_device">Nieznane urządzenie</string>
<string name="error_not_reachable">Urządzenie nieosiągalne</string>
<string name="error_already_requested">Już zażądano parowania</string>
<string name="error_already_paired">Urządzenie już sparowano</string>
<string name="error_could_not_send_package">Nie można wysłać pakietu</string>
<string name="error_timed_out">Przekroczono czasu odpowiedzi</string>
<string name="error_canceled_by_user">Anulowane przez użytkownika</string>
<string name="error_canceled_by_other_peer">Anulowane przez innego partnera</string>
<string name="error_invalid_key">Otrzymano nieprawidłowy klucz</string>
<string name="pair_requested">Zażądano parowania</string>
<string name="pairing_request_from">Żądanie parowania z %1s</string>
<string name="tap_to_answer">Stuknij, aby odpowiedzieć</string>
<string name="reconnect">Połącz ponownie</string>
<string name="device_not_paired">Urządzenie niesparowane</string>
<string name="request_pairing">Zażądaj sparowania</string>
<string name="pairing_accept">Przyjmij</string>
<string name="pairing_reject">Odrzuć</string>
<string name="device">Urządzenie</string>
<string name="pair_device">Sparuj urządzenie</string>
<string name="remote_control">Zdalne sterowanie</string>
<string name="settings">Ustawienia KDE Connect</string>
<string name="mpris_play">Odtwórz</string>
<string name="mpris_previous">Poprzedni</string>
<string name="mpris_rew">Przewiń</string>
<string name="mpris_ff">Przewiń do przodu</string>
<string name="mpris_next">Następny</string>
<string name="mpris_volume">Głośność</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_newer">Urządzenie to używa nowszej wersji protokołu</string>
<string name="general_settings">Ustawienia ogólne</string>
<string name="device_name">Nazwa urządzenia</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Nieprawidłowa nazwa urządzenia</string>
</resources>

View File

@@ -0,0 +1,65 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="pref_plugin_telephony">Notificator de telefonie</string>
<string name="pref_plugin_telephony_desc">Trimite notificări pentru SMS-uri și apeluri</string>
<string name="pref_plugin_battery">Raport acumulator</string>
<string name="pref_plugin_battery_desc">Raportează periodic starea acumulatorului</string>
<string name="pref_plugin_sftp">Expunere sistem de fișiere</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_desc">Partajează conținutul clipboardului</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_ping">Ping</string>
<string name="pref_plugin_ping_desc">Trimite și primește ping-uri</string>
<string name="pref_plugin_notifications">Sincronizare notificări</string>
<string name="pref_plugin_notifications_desc">Accesați-vă notificările de pe alte dispozitive</string>
<string name="plugin_not_available">Această caracteristică nu este disponibilă în versiunea dumneavoastră de Android</string>
<string name="device_list_empty">Niciun dispozitiv</string>
<string name="ok">Bine</string>
<string name="cancel">Renunță</string>
<string name="open_settings">Deschide configurările</string>
<string name="no_permissions">Trebuie să acordați permisiunea pentru accesarea notificărilor</string>
<string name="send_ping">Trimite ping</string>
<string name="open_mpris_controls">Deschide controlul de la distanță</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="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="unknown_device">Dispozitiv necunoscut</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_paired">Dispozitiv asociat deja</string>
<string name="error_could_not_send_package">Pachetul nu a putut fi trimis</string>
<string name="error_timed_out">A expirat</string>
<string name="error_canceled_by_user">Anulat de către utilizator</string>
<string name="error_canceled_by_other_peer">Anulat de către partener</string>
<string name="error_invalid_key">Cheie nevalidă recepționată</string>
<string name="pair_requested">Asociere cerută</string>
<string name="pairing_request_from">Cerere de asociere de la %1s</string>
<string name="tap_to_answer">Atingeți pentru a răspunde</string>
<string name="reconnect">Reconectează</string>
<string name="device_not_paired">Dispozitiv neasociat</string>
<string name="request_pairing">Cere asocierea</string>
<string name="pairing_accept">Acceptă</string>
<string name="pairing_reject">Respinge</string>
<string name="device">Dispozitiv</string>
<string name="pair_device">Asociază dispozitiv</string>
<string name="remote_control">Control de la distanță</string>
<string name="settings">Configurări KDE Connect</string>
<string name="mpris_play">Redă</string>
<string name="mpris_previous">Precedent</string>
<string name="mpris_rew">Derulează</string>
<string name="mpris_ff">Derulare rapidă înainte</string>
<string name="mpris_next">Următor</string>
<string name="mpris_volume">Volum</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="device_name">Denumire dispozitiv</string>
<string name="device_name_preference_summary">%s</string>
<string name="invalid_device_name">Denumire nevalidă a dispozitivului</string>
</resources>