Compare commits
82 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
debbe4fe2c | ||
|
5724a66561 | ||
|
91fe9d63b0 | ||
|
a90928188a | ||
|
256ca60036 | ||
|
05fd6fe5b0 | ||
|
6b9a691f24 | ||
|
d18b61f2a1 | ||
|
6448258648 | ||
|
e5e9490f19 | ||
|
9f7c5be533 | ||
|
f690105181 | ||
|
dafe9eb023 | ||
|
cfbe6775d0 | ||
|
6365143c2c | ||
|
f3fbe4d035 | ||
|
2862e5164e | ||
|
6fae1d350d | ||
|
647f71bf98 | ||
|
343b2ed5e8 | ||
|
eb7351a803 | ||
|
7e7d6c4d82 | ||
|
59d01763c7 | ||
|
5b2756b7f8 | ||
|
5912611aab | ||
|
54d24848e5 | ||
|
638c9df328 | ||
|
9943c36877 | ||
|
03bcfecb88 | ||
|
1b4ade0ae1 | ||
|
b9890210ad | ||
|
1509bfaf6d | ||
|
a22ffd611a | ||
|
adb88560b5 | ||
|
03ede77bd1 | ||
|
6afbe93c2d | ||
|
dd4421dce2 | ||
|
262f811bba | ||
|
0b52cbe36f | ||
|
8542aaf4fa | ||
|
c9d11f650c | ||
|
6c5ed3094b | ||
|
5aaec15e79 | ||
|
b0a632fe10 | ||
|
4d1464484e | ||
|
d6cc84ccfb | ||
|
624cee5d87 | ||
|
a8664d01ec | ||
|
bd68f71af6 | ||
|
8ec828d6e4 | ||
|
a44d48d527 | ||
|
804642c5fc | ||
|
8e0daa69cc | ||
|
400b35216d | ||
|
4a5545529a | ||
|
b2fa8ab506 | ||
|
b9a0b3d2f0 | ||
|
e8c6784ce0 | ||
|
e3b8bb5ffc | ||
|
103bc69347 | ||
|
2b45c82a2e | ||
|
0d3232a5a1 | ||
|
ed5ddc37c8 | ||
|
48bc56f52a | ||
|
5de10b05e7 | ||
|
1fe2590ec8 | ||
|
d02684c714 | ||
|
80ed8a58d5 | ||
|
962501fe38 | ||
|
60c1e67e66 | ||
|
318b82941f | ||
|
acdf8d467e | ||
|
ceee1ee1f6 | ||
|
071f71cb9c | ||
|
4adf2cfbbd | ||
|
de4fa31b2a | ||
|
4deba4ea4f | ||
|
07a8b107eb | ||
|
3b750c78ab | ||
|
47790a710a | ||
|
92451df32f | ||
|
55eada9dfc |
18
build.gradle
@@ -1,18 +1,17 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:0.11.+'
|
||||
classpath 'com.android.tools.build:gradle:0.12.+'
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'android'
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 19
|
||||
buildToolsVersion "19.1.0"
|
||||
|
||||
buildToolsVersion '20.0.0'
|
||||
defaultConfig {
|
||||
minSdkVersion 9
|
||||
targetSdkVersion 19
|
||||
@@ -27,16 +26,17 @@ android {
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
compile "com.android.support:support-v4:19.1.+"
|
||||
compile "com.android.support:appcompat-v7:19.1.+"
|
||||
compile "org.apache.mina:mina-core:2.0.+"
|
||||
compile 'com.android.support:support-v4:19.1.+'
|
||||
compile 'com.android.support:appcompat-v7:19.1.+'
|
||||
compile 'org.apache.mina:mina-core:2.0.+'
|
||||
compile 'org.bouncycastle:bcprov-jdk16:1.45'
|
||||
compile 'org.apache.sshd:sshd-core:0.8.0'
|
||||
compile 'tomcat:tomcat-apr:5.5.+'
|
||||
|
@@ -8,6 +8,7 @@
|
||||
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugJava" />
|
||||
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugTest" />
|
||||
<option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" />
|
||||
<option name="TEST_SOURCE_GEN_TASK_NAME" value="generateDebugTestSources" />
|
||||
<option name="ALLOW_USER_CONFIGURATION" value="false" />
|
||||
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
|
||||
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
|
||||
@@ -37,53 +38,55 @@
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/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/assets" type="java-resource" />
|
||||
<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/java" 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/main/res" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
|
||||
<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/java" 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/androidTest/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/apk" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/assets" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/classes" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/dependency-cache" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/dex" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/exploded-aar" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/incremental" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/libs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/lint-results-release-fatal_files" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/manifests" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/ndk" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/pre-dexed" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/res" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/rs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/source" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/symbols" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Android API 19 Platform" jdkType="Android SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" exported="" name="support-v4-19.1.0" level="project" />
|
||||
<orderEntry type="library" exported="" name="sshd-core-0.8.0" level="project" />
|
||||
<orderEntry type="library" exported="" name="bcprov-jdk16-1.45" level="project" />
|
||||
<orderEntry type="library" exported="" name="appcompat-v7-19.1.0" level="project" />
|
||||
<orderEntry type="library" exported="" name="mina-core-2.0.8" 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="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="mina-core-2.0.7" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
|
||||
|
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.kde.kdeconnect_tp"
|
||||
android:versionCode="711"
|
||||
android:versionName="0.7.1">
|
||||
android:versionCode="732"
|
||||
android:versionName="0.7.3.2">
|
||||
|
||||
<uses-sdk android:minSdkVersion="9"
|
||||
android:targetSdkVersion="19" />
|
||||
@@ -88,6 +88,15 @@
|
||||
android:value="org.kde.kdeconnect.UserInterface.DeviceActivity" />
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name="org.kde.kdeconnect.UserInterface.PluginSettingsActivity"
|
||||
android:label="@string/mpris_settings"
|
||||
android:parentActivityName="org.kde.kdeconnect.UserInterface.SettingsActivity"
|
||||
>
|
||||
<meta-data android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value="org.kde.kdeconnect.UserInterface.SettingsActivity" />
|
||||
</activity>
|
||||
|
||||
<receiver android:name="org.kde.kdeconnect.KdeConnectBroadcastReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.PACKAGE_REPLACED" />
|
||||
@@ -129,6 +138,8 @@
|
||||
android:theme="@style/Theme.AppCompat"
|
||||
android:name="org.kde.kdeconnect.Plugins.MousePadPlugin.MousePadActivity"
|
||||
android:label="@string/remote_control"
|
||||
android:windowSoftInputMode="stateHidden|adjustResize"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:screenOrientation="fullSensor"
|
||||
android:parentActivityName="org.kde.kdeconnect.UserInterface.DeviceActivity"
|
||||
>
|
||||
|
@@ -43,7 +43,7 @@ public abstract class BaseLinkProvider {
|
||||
public abstract void onStop();
|
||||
public abstract void onNetworkChange();
|
||||
|
||||
public abstract int getPriority();
|
||||
//public abstract int getPriority();
|
||||
public abstract String getName();
|
||||
|
||||
}
|
||||
|
@@ -167,6 +167,10 @@ public class LanLinkProvider extends BaseLinkProvider {
|
||||
String deviceId = identityPackage.getString("deviceId");
|
||||
Log.i("LanLinkProvider","addLink to "+deviceId);
|
||||
LanLink oldLink = visibleComputers.get(deviceId);
|
||||
if (oldLink == link) {
|
||||
Log.e("KDEConnect", "LanLinkProvider: oldLink == link. This should not happen!");
|
||||
return;
|
||||
}
|
||||
visibleComputers.put(deviceId, link);
|
||||
connectionAccepted(identityPackage, link);
|
||||
if (oldLink != null) {
|
||||
@@ -263,25 +267,21 @@ public class LanLinkProvider extends BaseLinkProvider {
|
||||
|
||||
@Override
|
||||
public void onNetworkChange() {
|
||||
|
||||
onStop();
|
||||
onStart();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
|
||||
udpAcceptor.unbind();
|
||||
tcpAcceptor.unbind();
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
@Override
|
||||
public int getPriority() {
|
||||
return 1000;
|
||||
}
|
||||
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
return "LanLinkProvider";
|
||||
|
@@ -20,22 +20,19 @@ public class LoopbackLinkProvider extends BaseLinkProvider {
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNetworkChange() {
|
||||
|
||||
NetworkPackage np = NetworkPackage.createIdentityPackage(context);
|
||||
connectionAccepted(np, new LoopbackLink(this));
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
@Override
|
||||
public int getPriority() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
return "LoopbackLinkProvider";
|
||||
|
@@ -96,7 +96,6 @@ public class BackgroundService extends Service {
|
||||
device.addLink(identityPackage, link);
|
||||
} else {
|
||||
Log.i("BackgroundService", "addLink,unknown device: " + deviceId);
|
||||
String name = identityPackage.getString("deviceName");
|
||||
device = new Device(BackgroundService.this, identityPackage, link);
|
||||
devices.put(deviceId, device);
|
||||
device.addPairingCallback(devicePairingCallback);
|
||||
@@ -273,7 +272,6 @@ public class BackgroundService extends Service {
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
//This will be called for each intent launch, even if the service is already started and it is reused
|
||||
Log.i("BackgroundService","onStartCommand");
|
||||
mutex.lock();
|
||||
for (InstanceCallback c : callbacks) {
|
||||
c.onServiceStart(this);
|
||||
|
@@ -321,12 +321,14 @@ public class Device implements BaseLink.PackageReceiver {
|
||||
|
||||
Log.i("Device","addLink "+link.getLinkProvider().getName()+" -> "+getName() + " active links: "+ links.size());
|
||||
|
||||
/*
|
||||
Collections.sort(links, new Comparator<BaseLink>() {
|
||||
@Override
|
||||
public int compare(BaseLink o, BaseLink o2) {
|
||||
return o2.getLinkProvider().getPriority() - o.getLinkProvider().getPriority();
|
||||
}
|
||||
});
|
||||
*/
|
||||
|
||||
link.addPackageReceiver(this);
|
||||
|
||||
@@ -406,7 +408,7 @@ public class Device implements BaseLink.PackageReceiver {
|
||||
.setTicker(res.getString(R.string.pair_requested))
|
||||
.setSmallIcon(android.R.drawable.ic_menu_help)
|
||||
.setAutoCancel(true)
|
||||
.setDefaults(Notification.DEFAULT_SOUND)
|
||||
.setDefaults(Notification.DEFAULT_ALL)
|
||||
.build();
|
||||
|
||||
|
||||
@@ -557,24 +559,25 @@ public class Device implements BaseLink.PackageReceiver {
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
boolean success;
|
||||
try {
|
||||
boolean success = plugin.onCreate();
|
||||
if (!success) {
|
||||
Log.e("addPlugin", "plugin failed to load " + name);
|
||||
failedPlugins.put(name, plugin);
|
||||
return;
|
||||
}
|
||||
success = plugin.onCreate();
|
||||
} catch (Exception e) {
|
||||
failedPlugins.put(name, plugin);
|
||||
success = false;
|
||||
e.printStackTrace();
|
||||
Log.e("addPlugin", "Exception loading plugin " + name);
|
||||
return;
|
||||
}
|
||||
|
||||
//Log.e("addPlugin","added " + name);
|
||||
|
||||
failedPlugins.remove(name);
|
||||
plugins.put(name, plugin);
|
||||
if (success) {
|
||||
//Log.e("addPlugin","added " + name);
|
||||
failedPlugins.remove(name);
|
||||
plugins.put(name, plugin);
|
||||
} else {
|
||||
Log.e("addPlugin", "plugin failed to load " + name);
|
||||
plugins.remove(name);
|
||||
failedPlugins.put(name, plugin);
|
||||
}
|
||||
|
||||
for (PluginsChangedListener listener : pluginsChangedListeners) {
|
||||
listener.onPluginsChanged(Device.this);
|
||||
@@ -592,6 +595,7 @@ public class Device implements BaseLink.PackageReceiver {
|
||||
|
||||
if (plugin == null) {
|
||||
if (failedPlugin == null) {
|
||||
//Not found
|
||||
return false;
|
||||
}
|
||||
plugin = failedPlugin;
|
||||
@@ -599,20 +603,17 @@ public class Device implements BaseLink.PackageReceiver {
|
||||
|
||||
try {
|
||||
plugin.onDestroy();
|
||||
//Log.e("removePlugin","removed " + name);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
Log.e("removePlugin","Exception calling onDestroy for plugin "+name);
|
||||
return false;
|
||||
}
|
||||
|
||||
//Log.e("removePlugin","removed " + name);
|
||||
|
||||
for (PluginsChangedListener listener : pluginsChangedListeners) {
|
||||
listener.onPluginsChanged(this);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
public void setPluginEnabled(String pluginName, boolean value) {
|
||||
@@ -627,6 +628,9 @@ public class Device implements BaseLink.PackageReceiver {
|
||||
return enabled;
|
||||
}
|
||||
|
||||
public boolean hasPluginsLoaded() {
|
||||
return !plugins.isEmpty() || !failedPlugins.isEmpty();
|
||||
}
|
||||
|
||||
public void reloadPluginsFromSettings() {
|
||||
|
||||
@@ -646,9 +650,7 @@ public class Device implements BaseLink.PackageReceiver {
|
||||
}
|
||||
}
|
||||
|
||||
for (PluginsChangedListener listener : pluginsChangedListeners) {
|
||||
listener.onPluginsChanged(this);
|
||||
}
|
||||
//No need to call PluginsChangedListeners because addPlugin and removePlugin already do so
|
||||
}
|
||||
|
||||
public HashMap<String,Plugin> getLoadedPlugins() {
|
||||
|
@@ -23,11 +23,11 @@ public class FilesHelper {
|
||||
* @param name
|
||||
* @param dirSeparators
|
||||
* @param maxFileLength
|
||||
* @return the resulting string
|
||||
* @return
|
||||
*/
|
||||
public static String toFileSystemSafeName(String name, boolean dirSeparators, int maxFileLength) {
|
||||
int size = name.length();
|
||||
StringBuffer rc = new StringBuffer(size * 2);
|
||||
StringBuilder rc = new StringBuilder(size * 2);
|
||||
for (int i = 0; i < size; i++) {
|
||||
char c = name.charAt(i);
|
||||
boolean valid = c >= 'a' && c <= 'z';
|
||||
|
101
src/main/java/org/kde/kdeconnect/Helpers/StorageHelper.java
Normal file
@@ -0,0 +1,101 @@
|
||||
package org.kde.kdeconnect.Helpers;
|
||||
|
||||
import android.os.Environment;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
//Code from http://stackoverflow.com/questions/9340332/how-can-i-get-the-list-of-mounted-external-storage-of-android-device/19982338#19982338
|
||||
public class StorageHelper {
|
||||
|
||||
private static final String TAG = "StorageHelper";
|
||||
|
||||
public static class StorageInfo {
|
||||
|
||||
public final String path;
|
||||
public final boolean readonly;
|
||||
public final boolean removable;
|
||||
public final int number;
|
||||
|
||||
StorageInfo(String path, boolean readonly, boolean removable, int number) {
|
||||
this.path = path;
|
||||
this.readonly = readonly;
|
||||
this.removable = removable;
|
||||
this.number = number;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static List<StorageInfo> getStorageList() {
|
||||
|
||||
List<StorageInfo> list = new ArrayList<StorageInfo>();
|
||||
String def_path = Environment.getExternalStorageDirectory().getPath();
|
||||
boolean def_path_removable = Environment.isExternalStorageRemovable();
|
||||
String def_path_state = Environment.getExternalStorageState();
|
||||
boolean def_path_available = def_path_state.equals(Environment.MEDIA_MOUNTED)
|
||||
|| def_path_state.equals(Environment.MEDIA_MOUNTED_READ_ONLY);
|
||||
boolean def_path_readonly = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED_READ_ONLY);
|
||||
|
||||
HashSet<String> paths = new HashSet<String>();
|
||||
int cur_removable_number = 1;
|
||||
|
||||
if (def_path_available) {
|
||||
paths.add(def_path);
|
||||
list.add(0, new StorageInfo(def_path, def_path_readonly, def_path_removable, def_path_removable ? cur_removable_number++ : -1));
|
||||
}
|
||||
|
||||
BufferedReader buf_reader = null;
|
||||
try {
|
||||
buf_reader = new BufferedReader(new FileReader("/proc/mounts"));
|
||||
String line;
|
||||
Log.d(TAG, "/proc/mounts");
|
||||
while ((line = buf_reader.readLine()) != null) {
|
||||
Log.d(TAG, line);
|
||||
if (line.contains("vfat") || line.contains("/mnt")) {
|
||||
StringTokenizer tokens = new StringTokenizer(line, " ");
|
||||
String unused = tokens.nextToken(); //device
|
||||
String mount_point = tokens.nextToken(); //mount point
|
||||
if (paths.contains(mount_point)) {
|
||||
continue;
|
||||
}
|
||||
unused = tokens.nextToken(); //file system
|
||||
List<String> flags = Arrays.asList(tokens.nextToken().split(",")); //flags
|
||||
boolean readonly = flags.contains("ro");
|
||||
|
||||
if (line.contains("/dev/block/vold")) {
|
||||
if (!line.contains("/mnt/secure")
|
||||
&& !line.contains("/mnt/asec")
|
||||
&& !line.contains("/mnt/obb")
|
||||
&& !line.contains("/dev/mapper")
|
||||
&& !line.contains("tmpfs")) {
|
||||
paths.add(mount_point);
|
||||
list.add(new StorageInfo(mount_point, readonly, true, cur_removable_number++));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch (FileNotFoundException ex) {
|
||||
ex.printStackTrace();
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
} finally {
|
||||
if (buf_reader != null) {
|
||||
try {
|
||||
buf_reader.close();
|
||||
} catch (IOException ex) {}
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
}
|
@@ -22,10 +22,6 @@ public class BatteryPlugin extends Plugin {
|
||||
|
||||
private NetworkPackage lastInfo = null;
|
||||
|
||||
/*static {
|
||||
PluginFactory.registerPlugin(BatteryPlugin.class);
|
||||
}*/
|
||||
|
||||
@Override
|
||||
public String getPluginName() {
|
||||
return "plugin_battery";
|
||||
@@ -46,6 +42,11 @@ public class BatteryPlugin extends Plugin {
|
||||
return context.getResources().getDrawable(R.drawable.icon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSettings() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabledByDefault() {
|
||||
return true;
|
||||
@@ -113,7 +114,7 @@ public class BatteryPlugin extends Plugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlertDialog getErrorDialog(Context baseContext) {
|
||||
public AlertDialog getErrorDialog(Activity deviceActivity) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@@ -12,10 +12,6 @@ import org.kde.kdeconnect_tp.R;
|
||||
|
||||
public class ClipboardPlugin extends Plugin {
|
||||
|
||||
/*static {
|
||||
PluginFactory.registerPlugin(ClipboardPlugin.class);
|
||||
}*/
|
||||
|
||||
@Override
|
||||
public String getPluginName() {
|
||||
return "plugin_clipboard";
|
||||
@@ -35,6 +31,11 @@ public class ClipboardPlugin extends Plugin {
|
||||
return context.getResources().getDrawable(R.drawable.icon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSettings() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabledByDefault() {
|
||||
//Disabled by default due to just one direction sync(incoming clipboard change) in early version of android.
|
||||
@@ -67,7 +68,7 @@ public class ClipboardPlugin extends Plugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlertDialog getErrorDialog(Context baseContext) { return null; }
|
||||
public AlertDialog getErrorDialog(Activity deviceActivity) { return null; }
|
||||
|
||||
@Override
|
||||
public Button getInterfaceButton(Activity activity) {
|
||||
|
@@ -0,0 +1,103 @@
|
||||
package org.kde.kdeconnect.Plugins.MousePadPlugin;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.view.inputmethod.InputConnection;
|
||||
|
||||
import org.kde.kdeconnect.BackgroundService;
|
||||
import org.kde.kdeconnect.Device;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class KeyListenerView extends View {
|
||||
|
||||
private String deviceId;
|
||||
|
||||
private static HashMap<Integer, Integer> SpecialKeysMap = new HashMap<Integer, Integer>();
|
||||
static {
|
||||
int i = 0;
|
||||
SpecialKeysMap.put(KeyEvent.KEYCODE_DEL, ++i); // 1
|
||||
SpecialKeysMap.put(KeyEvent.KEYCODE_TAB, ++i); // 2
|
||||
SpecialKeysMap.put(KeyEvent.KEYCODE_ENTER, 12); ++i; // 3 is not used, return is 12 instead
|
||||
SpecialKeysMap.put(KeyEvent.KEYCODE_DPAD_LEFT, ++i); // 4
|
||||
SpecialKeysMap.put(KeyEvent.KEYCODE_DPAD_UP, ++i); // 5
|
||||
SpecialKeysMap.put(KeyEvent.KEYCODE_DPAD_RIGHT, ++i); // 6
|
||||
SpecialKeysMap.put(KeyEvent.KEYCODE_DPAD_DOWN, ++i); // 7
|
||||
SpecialKeysMap.put(KeyEvent.KEYCODE_PAGE_UP, ++i); // 8
|
||||
SpecialKeysMap.put(KeyEvent.KEYCODE_PAGE_DOWN, ++i); // 9
|
||||
if (Build.VERSION.SDK_INT >= 11) {
|
||||
SpecialKeysMap.put(KeyEvent.KEYCODE_MOVE_HOME, ++i); // 10
|
||||
SpecialKeysMap.put(KeyEvent.KEYCODE_MOVE_END, ++i); // 11
|
||||
SpecialKeysMap.put(KeyEvent.KEYCODE_NUMPAD_ENTER, ++i); // 12
|
||||
SpecialKeysMap.put(KeyEvent.KEYCODE_FORWARD_DEL, ++i); // 13
|
||||
SpecialKeysMap.put(KeyEvent.KEYCODE_ESCAPE, ++i); // 14
|
||||
}
|
||||
}
|
||||
|
||||
public void setDeviceId(String id) {
|
||||
deviceId = id;
|
||||
}
|
||||
|
||||
public KeyListenerView(Context context, AttributeSet set) {
|
||||
super(context, set);
|
||||
|
||||
setFocusable(true);
|
||||
setFocusableInTouchMode(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
|
||||
outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_FULLSCREEN;
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCheckIsTextEditor() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
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) {
|
||||
final String utfString = new String(new char[]{utfChar});
|
||||
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.sendKey(utfString);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (!SpecialKeysMap.containsKey(keyCode)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
final int specialKey = SpecialKeysMap.get(keyCode);
|
||||
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.sendSpecialKey(specialKey);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
@@ -1,8 +1,10 @@
|
||||
package org.kde.kdeconnect.Plugins.MousePadPlugin;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.view.GestureDetector;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
@@ -12,7 +14,9 @@ import org.kde.kdeconnect.BackgroundService;
|
||||
import org.kde.kdeconnect.Device;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
public class MousePadActivity extends Activity implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener {
|
||||
public class MousePadActivity extends ActionBarActivity implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener, MousePadGestureDetector.OnGestureListener {
|
||||
|
||||
String deviceId;
|
||||
|
||||
private final static float MinDistanceToSendScroll = 2.5f;
|
||||
|
||||
@@ -22,20 +26,28 @@ public class MousePadActivity extends Activity implements GestureDetector.OnGest
|
||||
private float mCurrentY;
|
||||
|
||||
boolean isScrolling = false;
|
||||
|
||||
float accumulatedDistanceY = 0;
|
||||
|
||||
private String deviceId;
|
||||
|
||||
private GestureDetector mDetector;
|
||||
private MousePadGestureDetector mMousePadGestureDetector;
|
||||
|
||||
KeyListenerView keyListenerView;
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setContentView(R.layout.activity_mousepad);
|
||||
|
||||
deviceId = getIntent().getStringExtra("deviceId");
|
||||
|
||||
mDetector = new GestureDetector(this, this);
|
||||
mMousePadGestureDetector = new MousePadGestureDetector(this, this);
|
||||
mDetector.setOnDoubleTapListener(this);
|
||||
|
||||
keyListenerView = (KeyListenerView)findViewById(R.id.keyListener);
|
||||
keyListenerView.setDeviceId(deviceId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -49,39 +61,32 @@ public class MousePadActivity extends Activity implements GestureDetector.OnGest
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.menu_right_click:
|
||||
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.sendRightClick();
|
||||
}
|
||||
});
|
||||
break;
|
||||
sendRightClick();
|
||||
return true;
|
||||
case R.id.menu_middle_click:
|
||||
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.sendMiddleClick();
|
||||
}
|
||||
});
|
||||
break;
|
||||
sendMiddleClick();
|
||||
return true;
|
||||
case R.id.menu_show_keyboard:
|
||||
showKeyboard();
|
||||
return true;
|
||||
default:
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
if (mMousePadGestureDetector.onTouchEvent(event)) {
|
||||
return true;
|
||||
}
|
||||
if ( mDetector.onTouchEvent(event) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
int actionType = event.getAction();
|
||||
final float x = event.getX();
|
||||
final float y = event.getY();
|
||||
|
||||
if (isScrolling) {
|
||||
if (actionType == MotionEvent.ACTION_UP) {
|
||||
isScrolling = false;
|
||||
@@ -90,21 +95,22 @@ public class MousePadActivity extends Activity implements GestureDetector.OnGest
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
switch (actionType) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
mPrevX = x;
|
||||
mPrevY = y;
|
||||
mPrevX = event.getX();
|
||||
mPrevY = event.getY();
|
||||
break;
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
mCurrentX = x;
|
||||
mCurrentY = y;
|
||||
mCurrentX = event.getX();
|
||||
mCurrentY = event.getY();
|
||||
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.sendPoints(mCurrentX - mPrevX, mCurrentY - mPrevY);
|
||||
mousePadPlugin.sendMouseDelta(mCurrentX - mPrevX, mCurrentY - mPrevY);
|
||||
mPrevX = mCurrentX;
|
||||
mPrevY = mCurrentY;
|
||||
}
|
||||
@@ -121,7 +127,7 @@ public class MousePadActivity extends Activity implements GestureDetector.OnGest
|
||||
|
||||
@Override
|
||||
public void onShowPress(MotionEvent e) {
|
||||
|
||||
//From GestureDetector, left empty
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -161,7 +167,7 @@ public class MousePadActivity extends Activity implements GestureDetector.OnGest
|
||||
|
||||
@Override
|
||||
public void onLongPress(MotionEvent e) {
|
||||
|
||||
//From GestureDetector, left empty
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -201,4 +207,48 @@ public class MousePadActivity extends Activity implements GestureDetector.OnGest
|
||||
public boolean onDoubleTapEvent(MotionEvent e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTripleFingerTap(MotionEvent ev) {
|
||||
sendMiddleClick();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onDoubleFingerTap(MotionEvent ev) {
|
||||
sendRightClick();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private void sendMiddleClick() {
|
||||
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.sendMiddleClick();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void sendRightClick() {
|
||||
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.sendRightClick();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void showKeyboard() {
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
imm.toggleSoftInputFromWindow(keyListenerView.getWindowToken(), 0, 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,59 @@
|
||||
package org.kde.kdeconnect.Plugins.MousePadPlugin;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.ViewConfiguration;
|
||||
|
||||
|
||||
public class MousePadGestureDetector {
|
||||
|
||||
private static final int TAP_TIMEOUT = ViewConfiguration.getTapTimeout() + 100;
|
||||
private OnGestureListener mGestureListener;
|
||||
|
||||
private Context mCtx;
|
||||
|
||||
private long mFirstDownTime = 0;
|
||||
|
||||
private boolean mIsGestureHandled;
|
||||
|
||||
public interface OnGestureListener {
|
||||
|
||||
boolean onTripleFingerTap(MotionEvent ev);
|
||||
|
||||
boolean onDoubleFingerTap(MotionEvent ev);
|
||||
}
|
||||
|
||||
public MousePadGestureDetector(Context ctx, OnGestureListener gestureListener) {
|
||||
if (gestureListener == null) {
|
||||
throw new IllegalArgumentException("gestureListener cannot be null");
|
||||
}
|
||||
mGestureListener = gestureListener;
|
||||
mCtx = ctx;
|
||||
}
|
||||
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
int action = event.getAction();
|
||||
switch (action & MotionEvent.ACTION_MASK) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
mIsGestureHandled = false;
|
||||
mFirstDownTime = event.getEventTime();
|
||||
break;
|
||||
case MotionEvent.ACTION_POINTER_UP:
|
||||
int count = event.getPointerCount();
|
||||
if (event.getEventTime() - mFirstDownTime <= TAP_TIMEOUT) {
|
||||
if (count == 3) {
|
||||
if (!mIsGestureHandled) {
|
||||
mIsGestureHandled = mGestureListener.onTripleFingerTap(event);
|
||||
}
|
||||
} else if (count == 2) {
|
||||
if (!mIsGestureHandled) {
|
||||
mIsGestureHandled = mGestureListener.onDoubleFingerTap(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
mFirstDownTime = 0;
|
||||
break;
|
||||
}
|
||||
return mIsGestureHandled;
|
||||
}
|
||||
}
|
@@ -13,6 +13,7 @@ import org.kde.kdeconnect.Plugins.Plugin;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
public class MousePadPlugin extends Plugin {
|
||||
|
||||
@Override
|
||||
public String getPluginName() {
|
||||
return "plugin_mousepad";
|
||||
@@ -38,6 +39,11 @@ public class MousePadPlugin extends Plugin {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSettings() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreate() {
|
||||
return true;
|
||||
@@ -50,14 +56,28 @@ public class MousePadPlugin extends Plugin {
|
||||
|
||||
@Override
|
||||
public boolean onPackageReceived(NetworkPackage np) {
|
||||
if (!np.getType().equals(NetworkPackage.PACKAGE_TYPE_MOUSEPAD)) return false;
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlertDialog getErrorDialog(Context baseContext) { return null; }
|
||||
public AlertDialog getErrorDialog(Activity deviceActivity) { return null; }
|
||||
|
||||
public void sendPoints(float dx, float dy) {
|
||||
@Override
|
||||
public Button getInterfaceButton(final Activity activity) {
|
||||
Button button = new Button(activity);
|
||||
button.setText(R.string.open_mousepad);
|
||||
button.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(activity, MousePadActivity.class);
|
||||
intent.putExtra("deviceId", device.getDeviceId());
|
||||
activity.startActivity(intent);
|
||||
}
|
||||
});
|
||||
return button;
|
||||
}
|
||||
|
||||
public void sendMouseDelta(float dx, float dy) {
|
||||
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MOUSEPAD);
|
||||
np.set("dx", dx);
|
||||
np.set("dy", dy);
|
||||
@@ -96,18 +116,16 @@ public class MousePadPlugin extends Plugin {
|
||||
device.sendPackage(np);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Button getInterfaceButton(final Activity activity) {
|
||||
Button button = new Button(activity);
|
||||
button.setText(R.string.open_mousepad);
|
||||
button.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(activity, MousePadActivity.class);
|
||||
intent.putExtra("deviceId", device.getDeviceId());
|
||||
activity.startActivity(intent);
|
||||
}
|
||||
});
|
||||
return button;
|
||||
public void sendKey(String utfChar) {
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,9 +1,11 @@
|
||||
package org.kde.kdeconnect.Plugins.MprisPlugin;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
@@ -25,7 +27,7 @@ import java.util.ArrayList;
|
||||
|
||||
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 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;
|
||||
@@ -70,8 +72,6 @@ public class MprisActivity extends Activity {
|
||||
});
|
||||
|
||||
mpris.setPlayerListUpdatedHandler(new Handler() {
|
||||
boolean firstLoad = true;
|
||||
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
final ArrayList<String> playerList = mpris.getPlayerList();
|
||||
@@ -107,17 +107,18 @@ public class MprisActivity extends Activity {
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> arg0) {
|
||||
|
||||
mpris.setPlayer(null);
|
||||
}
|
||||
});
|
||||
|
||||
// restore the selected player
|
||||
int position = adapter.getPosition(mpris.getPlayer());
|
||||
|
||||
if (position >= 0) {
|
||||
spinner.setSelection(position);
|
||||
}
|
||||
}
|
||||
});
|
||||
if (firstLoad) {
|
||||
firstLoad = false;
|
||||
if (playerList.size() > 0) {
|
||||
mpris.setPlayer(playerList.get(0));
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -217,6 +218,11 @@ public class MprisActivity extends Activity {
|
||||
|
||||
deviceId = getIntent().getStringExtra("deviceId");
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
String interval_time_str = prefs.getString(getString(R.string.mpris_time_key),
|
||||
getString(R.string.mpris_time_default));
|
||||
final int interval_time = Integer.parseInt(interval_time_str);
|
||||
|
||||
BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() {
|
||||
@Override
|
||||
public void onServiceStart(BackgroundService service) {
|
||||
@@ -264,7 +270,7 @@ public class MprisActivity extends Activity {
|
||||
Device device = service.getDevice(deviceId);
|
||||
MprisPlugin mpris = (MprisPlugin)device.getPlugin("plugin_mpris");
|
||||
if (mpris == null) return;
|
||||
mpris.Seek(-10000000); // -10 seconds. TODO: plugin settings UI?
|
||||
mpris.Seek(interval_time * -1);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -279,7 +285,7 @@ public class MprisActivity extends Activity {
|
||||
Device device = service.getDevice(deviceId);
|
||||
MprisPlugin mpris = (MprisPlugin)device.getPlugin("plugin_mpris");
|
||||
if (mpris == null) return;
|
||||
mpris.Seek(10000000); // 10 seconds. TODO: plugin settings UI?
|
||||
mpris.Seek(interval_time);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@@ -30,10 +30,6 @@ public class MprisPlugin extends Plugin {
|
||||
private String player = "";
|
||||
private boolean playing = false;
|
||||
|
||||
/*static {
|
||||
PluginFactory.registerPlugin(MprisPlugin.class);
|
||||
}*/
|
||||
|
||||
@Override
|
||||
public String getPluginName() {
|
||||
return "plugin_mpris";
|
||||
@@ -54,6 +50,11 @@ public class MprisPlugin extends Plugin {
|
||||
return context.getResources().getDrawable(R.drawable.icon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSettings() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabledByDefault() {
|
||||
return true;
|
||||
@@ -179,6 +180,10 @@ public class MprisPlugin extends Plugin {
|
||||
requestPlayerStatus();
|
||||
}
|
||||
|
||||
public String getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public int getVolume() {
|
||||
return volume;
|
||||
}
|
||||
@@ -203,7 +208,7 @@ public class MprisPlugin extends Plugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlertDialog getErrorDialog(Context baseContext) {
|
||||
public AlertDialog getErrorDialog(Activity deviceActivity) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@@ -17,14 +17,11 @@ import android.widget.Button;
|
||||
import org.kde.kdeconnect.Helpers.AppsHelper;
|
||||
import org.kde.kdeconnect.NetworkPackage;
|
||||
import org.kde.kdeconnect.Plugins.Plugin;
|
||||
import org.kde.kdeconnect.UserInterface.DeviceActivity;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
public class NotificationsPlugin extends Plugin implements NotificationReceiver.NotificationListener {
|
||||
|
||||
/*static {
|
||||
PluginFactory.registerPlugin(NotificationsPlugin.class);
|
||||
}*/
|
||||
|
||||
@Override
|
||||
public String getPluginName() {
|
||||
return "plugin_notifications";
|
||||
@@ -45,6 +42,11 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
||||
return context.getResources().getDrawable(R.drawable.icon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSettings() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabledByDefault() {
|
||||
return true;
|
||||
@@ -318,10 +320,10 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
||||
|
||||
|
||||
@Override
|
||||
public AlertDialog getErrorDialog(final Context baseContext) {
|
||||
public AlertDialog getErrorDialog(final Activity deviceActivity) {
|
||||
|
||||
if (Build.VERSION.SDK_INT < 18) {
|
||||
return new AlertDialog.Builder(baseContext)
|
||||
return new AlertDialog.Builder(deviceActivity)
|
||||
.setTitle(R.string.pref_plugin_notifications)
|
||||
.setMessage(R.string.plugin_not_available)
|
||||
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
|
||||
@@ -332,14 +334,14 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
||||
})
|
||||
.create();
|
||||
} else {
|
||||
return new AlertDialog.Builder(baseContext)
|
||||
return new AlertDialog.Builder(deviceActivity)
|
||||
.setTitle(R.string.pref_plugin_notifications)
|
||||
.setMessage(R.string.no_permissions)
|
||||
.setPositiveButton(R.string.open_settings, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
|
||||
baseContext.startActivity(intent);
|
||||
deviceActivity.startActivityForResult(intent, DeviceActivity.RESULT_NEEDS_RELOAD);
|
||||
}
|
||||
})
|
||||
.setNegativeButton(R.string.cancel,new DialogInterface.OnClickListener() {
|
||||
|
@@ -21,10 +21,6 @@ import org.kde.kdeconnect_tp.R;
|
||||
|
||||
public class PingPlugin extends Plugin {
|
||||
|
||||
/*static {
|
||||
PluginFactory.registerPlugin(PingPlugin.class);
|
||||
}*/
|
||||
|
||||
@Override
|
||||
public String getPluginName() {
|
||||
return "plugin_ping";
|
||||
@@ -45,6 +41,11 @@ public class PingPlugin extends Plugin {
|
||||
return context.getResources().getDrawable(R.drawable.icon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSettings() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabledByDefault() {
|
||||
return true;
|
||||
@@ -75,18 +76,28 @@ public class PingPlugin extends Plugin {
|
||||
PendingIntent.FLAG_UPDATE_CURRENT
|
||||
);
|
||||
|
||||
int id;
|
||||
String message;
|
||||
if (np.has("message")) {
|
||||
message = np.getString("message");
|
||||
id = (int)System.currentTimeMillis();
|
||||
} else {
|
||||
message = "Ping!";
|
||||
id = 42; //A unique id to create only one notification
|
||||
}
|
||||
|
||||
Notification noti = new NotificationCompat.Builder(context)
|
||||
.setContentTitle(device.getName())
|
||||
.setContentText("Ping!")
|
||||
.setContentText(message)
|
||||
.setContentIntent(resultPendingIntent)
|
||||
.setTicker("Ping!")
|
||||
.setTicker(message)
|
||||
.setSmallIcon(android.R.drawable.ic_dialog_alert)
|
||||
.setAutoCancel(true)
|
||||
.setDefaults(Notification.DEFAULT_SOUND)
|
||||
.setDefaults(Notification.DEFAULT_ALL)
|
||||
.build();
|
||||
|
||||
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
notificationManager.notify(42 /*a unique id to create only one notification*/, noti);
|
||||
notificationManager.notify(id, noti);
|
||||
return true;
|
||||
|
||||
}
|
||||
@@ -94,7 +105,7 @@ public class PingPlugin extends Plugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlertDialog getErrorDialog(Context baseContext) {
|
||||
public AlertDialog getErrorDialog(Activity deviceActivity) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@@ -51,6 +51,12 @@ public abstract class Plugin {
|
||||
*/
|
||||
public abstract boolean isEnabledByDefault();
|
||||
|
||||
|
||||
/**
|
||||
* Return true if this plugin needs an specific UI settings.
|
||||
*/
|
||||
public abstract boolean hasSettings();
|
||||
|
||||
/**
|
||||
* Initialize the listeners and structures in your plugin.
|
||||
* Should return true if initialization was successful.
|
||||
@@ -73,7 +79,7 @@ public abstract class Plugin {
|
||||
* If onCreate returns false, should create a dialog explaining
|
||||
* the problem (and how to fix it, if possible) to the user.
|
||||
*/
|
||||
public abstract AlertDialog getErrorDialog(Context baseContext);
|
||||
public abstract AlertDialog getErrorDialog(Activity deviceActivity);
|
||||
|
||||
/**
|
||||
* Creates a button that will be displayed in the user interface
|
||||
|
@@ -7,7 +7,6 @@ import android.util.Log;
|
||||
|
||||
import org.kde.kdeconnect.Device;
|
||||
import org.kde.kdeconnect.Plugins.BatteryPlugin.BatteryPlugin;
|
||||
import org.kde.kdeconnect.Plugins.MousePadPlugin.MousePadActivity;
|
||||
import org.kde.kdeconnect.Plugins.MousePadPlugin.MousePadPlugin;
|
||||
import org.kde.kdeconnect.Plugins.SftpPlugin.SftpPlugin;
|
||||
import org.kde.kdeconnect.Plugins.ClibpoardPlugin.ClipboardPlugin;
|
||||
@@ -25,12 +24,14 @@ public class PluginFactory {
|
||||
|
||||
public static class PluginInfo {
|
||||
|
||||
public PluginInfo(String pluginName, String displayName, String description, Drawable icon, boolean enabledByDefault) {
|
||||
public PluginInfo(String pluginName, String displayName, String description, Drawable icon,
|
||||
boolean enabledByDefault, boolean hasSettings) {
|
||||
this.pluginName = pluginName;
|
||||
this.displayName = displayName;
|
||||
this.description = description;
|
||||
this.icon = icon;
|
||||
this.enabledByDefault = enabledByDefault;
|
||||
this.hasSettings = hasSettings;
|
||||
}
|
||||
|
||||
public String getPluginName() {
|
||||
@@ -49,6 +50,8 @@ public class PluginFactory {
|
||||
return icon;
|
||||
}
|
||||
|
||||
public boolean hasSettings() { return hasSettings; }
|
||||
|
||||
public boolean isEnabledByDefault() {
|
||||
return enabledByDefault;
|
||||
}
|
||||
@@ -58,6 +61,7 @@ public class PluginFactory {
|
||||
private final String description;
|
||||
private final Drawable icon;
|
||||
private final boolean enabledByDefault;
|
||||
private final boolean hasSettings;
|
||||
|
||||
}
|
||||
|
||||
@@ -65,7 +69,7 @@ public class PluginFactory {
|
||||
private static final Map<String, PluginInfo> availablePluginsInfo = new TreeMap<String, PluginInfo>();
|
||||
|
||||
static {
|
||||
//TODO: Avoid this factory having to know every plugin
|
||||
//TODO: Use reflection to find all subclasses of Plugin, instead of adding them manually
|
||||
PluginFactory.registerPlugin(TelephonyPlugin.class);
|
||||
PluginFactory.registerPlugin(PingPlugin.class);
|
||||
PluginFactory.registerPlugin(MprisPlugin.class);
|
||||
@@ -83,7 +87,8 @@ public class PluginFactory {
|
||||
try {
|
||||
Plugin p = ((Plugin)availablePlugins.get(pluginName).newInstance());
|
||||
p.setContext(context, null);
|
||||
info = new PluginInfo(pluginName, p.getDisplayName(), p.getDescription(), p.getIcon(), p.isEnabledByDefault());
|
||||
info = new PluginInfo(pluginName, p.getDisplayName(), p.getDescription(), p.getIcon(),
|
||||
p.isEnabledByDefault(), p.hasSettings());
|
||||
availablePluginsInfo.put(pluginName, info); //Cache it
|
||||
return info;
|
||||
} catch(Exception e) {
|
||||
|
@@ -7,18 +7,19 @@ import android.graphics.drawable.Drawable;
|
||||
import android.os.Environment;
|
||||
import android.widget.Button;
|
||||
|
||||
import org.kde.kdeconnect.Helpers.StorageHelper;
|
||||
import org.kde.kdeconnect.NetworkPackage;
|
||||
import org.kde.kdeconnect.Plugins.Plugin;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class SftpPlugin extends Plugin {
|
||||
|
||||
private static final SimpleSftpServer server = new SimpleSftpServer();
|
||||
|
||||
/*static {
|
||||
PluginFactory.registerPlugin(SftpPlugin.class);
|
||||
}*/
|
||||
|
||||
@Override
|
||||
public String getPluginName() {return "plugin_sftp";}
|
||||
|
||||
@@ -38,7 +39,12 @@ public class SftpPlugin extends Plugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabledByDefault() {return true;}
|
||||
public boolean hasSettings() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabledByDefault() { return true; }
|
||||
|
||||
@Override
|
||||
public boolean onCreate() {
|
||||
@@ -57,13 +63,56 @@ public class SftpPlugin extends Plugin {
|
||||
|
||||
if (np.getBoolean("startBrowsing")) {
|
||||
if (server.start()) {
|
||||
|
||||
NetworkPackage np2 = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_SFTP);
|
||||
|
||||
np2.set("ip", server.getLocalIpAddress());
|
||||
np2.set("port", server.port);
|
||||
np2.set("user", server.passwordAuth.getUser());
|
||||
np2.set("password", server.passwordAuth.getPassword());
|
||||
|
||||
//Kept for compatibility, but new desktop clients will read "multiPaths" instead,
|
||||
// that supports devices with more than one external storage
|
||||
np2.set("path", Environment.getExternalStorageDirectory().getAbsolutePath());
|
||||
|
||||
List<StorageHelper.StorageInfo> storageList = StorageHelper.getStorageList();
|
||||
ArrayList<String> paths = new ArrayList<String>();
|
||||
ArrayList<String> pathNames = new ArrayList<String>();
|
||||
|
||||
for (StorageHelper.StorageInfo storage : storageList) {
|
||||
paths.add(storage.path);
|
||||
StringBuilder res = new StringBuilder();
|
||||
|
||||
if (storageList.size() > 1) {
|
||||
if (!storage.removable) {
|
||||
res.append(context.getString(R.string.sftp_internal_storage));
|
||||
} else if (storage.number > 1) {
|
||||
res.append(context.getString(R.string.sftp_sdcard_num, storage.number));
|
||||
} else {
|
||||
res.append(context.getString(R.string.sftp_sdcard));
|
||||
}
|
||||
} else {
|
||||
res.append(context.getString(R.string.sftp_all_files));
|
||||
}
|
||||
if (storage.readonly) {
|
||||
res.append(" ");
|
||||
res.append(context.getString(R.string.sftp_readonly));
|
||||
}
|
||||
pathNames.add(res.toString());
|
||||
}
|
||||
|
||||
//Shortcut for users that only want to browse camera pictures
|
||||
String cameraDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera";
|
||||
if (new File(cameraDir).exists()) {
|
||||
paths.add(cameraDir);
|
||||
pathNames.add(context.getString(R.string.sftp_camera));
|
||||
}
|
||||
|
||||
np2.set("multiPaths", paths);
|
||||
np2.set("pathNames", pathNames);
|
||||
|
||||
device.sendPackage(np2);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -71,9 +120,9 @@ public class SftpPlugin extends Plugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlertDialog getErrorDialog(Context baseContext) {return null;}
|
||||
public AlertDialog getErrorDialog(Activity deviceActivity) { return null; }
|
||||
|
||||
@Override
|
||||
public Button getInterfaceButton(Activity activity) {return null;}
|
||||
public Button getInterfaceButton(Activity activity) { return null; }
|
||||
|
||||
}
|
||||
|
@@ -8,10 +8,12 @@ import android.app.PendingIntent;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Environment;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.support.v4.app.TaskStackBuilder;
|
||||
import android.util.Log;
|
||||
@@ -31,13 +33,9 @@ import java.io.OutputStream;
|
||||
|
||||
public class SharePlugin extends Plugin {
|
||||
|
||||
/*static {
|
||||
PluginFactory.registerPlugin(PingPlugin.class);
|
||||
}*/
|
||||
|
||||
@Override
|
||||
public String getPluginName() {
|
||||
return "share_ping";
|
||||
return "plugin_share";
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -55,6 +53,11 @@ public class SharePlugin extends Plugin {
|
||||
return context.getResources().getDrawable(R.drawable.icon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSettings() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabledByDefault() {
|
||||
return true;
|
||||
@@ -109,6 +112,7 @@ public class SharePlugin extends Plugin {
|
||||
.setSmallIcon(android.R.drawable.ic_dialog_alert)
|
||||
.setAutoCancel(true)
|
||||
.build();
|
||||
|
||||
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
notificationManager.notify(notificationId, noti);
|
||||
|
||||
@@ -154,15 +158,23 @@ public class SharePlugin extends Plugin {
|
||||
);
|
||||
|
||||
Resources res = context.getResources();
|
||||
Notification noti = new NotificationCompat.Builder(context)
|
||||
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
|
||||
.setContentTitle(res.getString(R.string.received_file_title, device.getName()))
|
||||
.setContentText(res.getString(R.string.received_file_text, filename))
|
||||
.setContentIntent(resultPendingIntent)
|
||||
.setTicker(res.getString(R.string.received_file_title, device.getName()))
|
||||
.setSmallIcon(android.R.drawable.ic_dialog_alert)
|
||||
.setAutoCancel(true)
|
||||
.setDefaults(Notification.DEFAULT_SOUND)
|
||||
.build();
|
||||
.setAutoCancel(true);
|
||||
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
if (prefs.getBoolean("share_notification_preference", true)) {
|
||||
builder.setDefaults(Notification.DEFAULT_ALL);
|
||||
}
|
||||
|
||||
Notification noti = builder.build();
|
||||
|
||||
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
notificationManager.notify(notificationId, noti);
|
||||
|
||||
@@ -213,7 +225,7 @@ public class SharePlugin extends Plugin {
|
||||
.setTicker(res.getString(R.string.received_url_title, device.getName()))
|
||||
.setSmallIcon(android.R.drawable.ic_dialog_alert)
|
||||
.setAutoCancel(true)
|
||||
.setDefaults(Notification.DEFAULT_SOUND)
|
||||
.setDefaults(Notification.DEFAULT_ALL)
|
||||
.build();
|
||||
|
||||
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
@@ -233,7 +245,7 @@ public class SharePlugin extends Plugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlertDialog getErrorDialog(Context baseContext) {
|
||||
public AlertDialog getErrorDialog(Activity deviceActivity) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@@ -19,10 +19,6 @@ import org.kde.kdeconnect_tp.R;
|
||||
|
||||
public class TelephonyPlugin extends Plugin {
|
||||
|
||||
/*static {
|
||||
PluginFactory.registerPlugin(TelephonyPlugin.class);
|
||||
}*/
|
||||
|
||||
@Override
|
||||
public String getPluginName() {
|
||||
return "plugin_telephony";
|
||||
@@ -48,6 +44,11 @@ public class TelephonyPlugin extends Plugin {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSettings() {
|
||||
return false;
|
||||
}
|
||||
|
||||
private final BroadcastReceiver receiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
@@ -182,7 +183,7 @@ public class TelephonyPlugin extends Plugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlertDialog getErrorDialog(Context baseContext) {
|
||||
public AlertDialog getErrorDialog(Activity deviceActivity) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
package org.kde.kdeconnect.UserInterface;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.ActionBar;
|
||||
@@ -8,8 +9,6 @@ import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Button;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
@@ -18,21 +17,26 @@ import org.kde.kdeconnect.BackgroundService;
|
||||
import org.kde.kdeconnect.Device;
|
||||
import org.kde.kdeconnect.Plugins.Plugin;
|
||||
import org.kde.kdeconnect.UserInterface.List.ButtonItem;
|
||||
import org.kde.kdeconnect.UserInterface.List.CustomItem;
|
||||
import org.kde.kdeconnect.UserInterface.List.ListAdapter;
|
||||
import org.kde.kdeconnect.UserInterface.List.SectionItem;
|
||||
import org.kde.kdeconnect.UserInterface.List.SmallEntryItem;
|
||||
import org.kde.kdeconnect.UserInterface.List.TextItem;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.ConcurrentModificationException;
|
||||
import java.util.HashMap;
|
||||
|
||||
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.
|
||||
private Device device;
|
||||
|
||||
public static final int RESULT_NEEDS_RELOAD = Activity.RESULT_FIRST_USER;
|
||||
|
||||
TextView errorHeader;
|
||||
|
||||
private final Device.PluginsChangedListener pluginsChangedListener = new Device.PluginsChangedListener() {
|
||||
@Override
|
||||
public void onPluginsChanged(final Device device) {
|
||||
@@ -42,45 +46,10 @@ public class DeviceActivity extends ActionBarActivity {
|
||||
public void run() {
|
||||
|
||||
try {
|
||||
|
||||
//Errors list
|
||||
final HashMap<String, Plugin> failedPlugins = device.getFailedPlugins();
|
||||
final String[] ids = failedPlugins.keySet().toArray(new String[failedPlugins.size()]);
|
||||
String[] names = new String[failedPlugins.size()];
|
||||
for(int i = 0; i < ids.length; i++) {
|
||||
Plugin p = failedPlugins.get(ids[i]);
|
||||
names[i] = p.getDisplayName();
|
||||
}
|
||||
ListView errorList = (ListView)findViewById(R.id.errors_list);
|
||||
if (!failedPlugins.isEmpty() && errorList.getHeaderViewsCount() == 0) {
|
||||
TextView header = new TextView(DeviceActivity.this);
|
||||
header.setPadding(0,24,0,0);
|
||||
header.setText(getResources().getString(R.string.plugins_failed_to_load));
|
||||
errorList.addHeaderView(header);
|
||||
}
|
||||
errorList.setAdapter(new ArrayAdapter<String>(DeviceActivity.this, android.R.layout.simple_list_item_1, names));
|
||||
errorList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||
@Override
|
||||
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
|
||||
p.getErrorDialog(DeviceActivity.this).show();
|
||||
}
|
||||
});
|
||||
|
||||
//Buttons list
|
||||
ArrayList<ListAdapter.Item> items = new ArrayList<ListAdapter.Item>();
|
||||
|
||||
if (device.isReachable()) {
|
||||
final Collection<Plugin> plugins = device.getLoadedPlugins().values();
|
||||
for (Plugin p : plugins) {
|
||||
Button b = p.getInterfaceButton(DeviceActivity.this);
|
||||
if (b != null) {
|
||||
items.add(new SectionItem(p.getDisplayName()));
|
||||
items.add(new ButtonItem(b));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!device.isReachable()) {
|
||||
//Not reachable, show unpair button
|
||||
Button b = new Button(DeviceActivity.this);
|
||||
b.setText(R.string.device_menu_unpair);
|
||||
b.setOnClickListener(new View.OnClickListener() {
|
||||
@@ -92,10 +61,42 @@ public class DeviceActivity extends ActionBarActivity {
|
||||
});
|
||||
items.add(new TextItem(getString(R.string.device_not_reachable)));
|
||||
items.add(new ButtonItem(b));
|
||||
} else {
|
||||
//Plugins button list
|
||||
final Collection<Plugin> plugins = device.getLoadedPlugins().values();
|
||||
for (Plugin p : plugins) {
|
||||
Button b = p.getInterfaceButton(DeviceActivity.this);
|
||||
if (b != null) {
|
||||
items.add(new SectionItem(p.getDisplayName()));
|
||||
items.add(new ButtonItem(b));
|
||||
}
|
||||
}
|
||||
|
||||
//Failed plugins List
|
||||
final Collection<Plugin> failed = device.getFailedPlugins().values();
|
||||
if (!failed.isEmpty()) {
|
||||
if (errorHeader == null) {
|
||||
errorHeader = new TextView(DeviceActivity.this);
|
||||
errorHeader.setPadding(0, 48, 0, 0);
|
||||
errorHeader.setOnClickListener(null);
|
||||
errorHeader.setOnLongClickListener(null);
|
||||
errorHeader.setText(getResources().getString(R.string.plugins_failed_to_load));
|
||||
}
|
||||
items.add(new CustomItem(errorHeader));
|
||||
for (final Plugin p : failed) {
|
||||
items.add(new SmallEntryItem(p.getDisplayName(), new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
p.getErrorDialog(DeviceActivity.this).show();
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ListView buttonsList = (ListView)findViewById(R.id.buttons_list);
|
||||
buttonsList.setAdapter(new ListAdapter(DeviceActivity.this, items));
|
||||
ListAdapter adapter = new ListAdapter(DeviceActivity.this, items);
|
||||
buttonsList.setAdapter(adapter);
|
||||
|
||||
} catch(ConcurrentModificationException e) {
|
||||
Log.e("DeviceActivity", "ConcurrentModificationException");
|
||||
@@ -129,6 +130,9 @@ public class DeviceActivity extends ActionBarActivity {
|
||||
setTitle(device.getName());
|
||||
device.addPluginsChangedListener(pluginsChangedListener);
|
||||
pluginsChangedListener.onPluginsChanged(device);
|
||||
if (!device.hasPluginsLoaded()) {
|
||||
device.reloadPluginsFromSettings();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -140,6 +144,7 @@ public class DeviceActivity extends ActionBarActivity {
|
||||
@Override
|
||||
public void onServiceStart(BackgroundService service) {
|
||||
Device device = service.getDevice(deviceId);
|
||||
if (device == null) return;
|
||||
device.removePluginsChangedListener(pluginsChangedListener);
|
||||
}
|
||||
});
|
||||
@@ -150,7 +155,7 @@ public class DeviceActivity extends ActionBarActivity {
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
super.onPrepareOptionsMenu(menu);
|
||||
menu.clear();
|
||||
if (device.isPaired()) {
|
||||
if (device != null && device.isPaired()) {
|
||||
menu.add(R.string.device_menu_plugins).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem menuItem) {
|
||||
@@ -172,6 +177,25 @@ public class DeviceActivity extends ActionBarActivity {
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
switch (requestCode)
|
||||
{
|
||||
case RESULT_NEEDS_RELOAD:
|
||||
BackgroundService.RunCommand(DeviceActivity.this, new BackgroundService.InstanceCallback() {
|
||||
@Override
|
||||
public void onServiceStart(BackgroundService service) {
|
||||
Device device = service.getDevice(deviceId);
|
||||
device.reloadPluginsFromSettings();
|
||||
}
|
||||
});
|
||||
break;
|
||||
default:
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,20 @@
|
||||
package org.kde.kdeconnect.UserInterface.List;
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
public class CustomItem implements ListAdapter.Item {
|
||||
|
||||
private final View view;
|
||||
|
||||
public CustomItem(View v) {
|
||||
this.view = v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View inflateView(LayoutInflater layoutInflater) {
|
||||
return view;
|
||||
}
|
||||
|
||||
}
|
@@ -4,6 +4,7 @@ package org.kde.kdeconnect.UserInterface.List;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
@@ -24,7 +25,10 @@ public class DeviceItem implements ListAdapter.Item {
|
||||
|
||||
@Override
|
||||
public View inflateView(LayoutInflater layoutInflater) {
|
||||
View v = layoutInflater.inflate(R.layout.list_item_entry, null);
|
||||
final View v = layoutInflater.inflate(R.layout.list_item_entry, null);
|
||||
|
||||
//Highlight when selected effect
|
||||
v.setBackgroundDrawable(layoutInflater.getContext().getResources().getDrawable(R.drawable.kitkatcompatselector_list_selector_holo_dark));
|
||||
|
||||
TextView titleView = (TextView)v.findViewById(R.id.list_item_entry_title);
|
||||
if (titleView != null) titleView.setText(device.getName());
|
||||
|
@@ -9,11 +9,11 @@ import org.kde.kdeconnect_tp.R;
|
||||
public class SectionItem implements ListAdapter.Item {
|
||||
|
||||
private final String title;
|
||||
public boolean isEmpty;
|
||||
public boolean isSectionEmpty;
|
||||
|
||||
public SectionItem(String title) {
|
||||
this.title = title;
|
||||
this.isEmpty = false;
|
||||
this.isSectionEmpty = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -21,14 +21,14 @@ public class SectionItem implements ListAdapter.Item {
|
||||
|
||||
View v = layoutInflater.inflate(R.layout.list_item_category, null);
|
||||
|
||||
//Make it not selectable
|
||||
v.setOnClickListener(null);
|
||||
v.setOnLongClickListener(null);
|
||||
v.setLongClickable(false);
|
||||
|
||||
TextView sectionView = (TextView) v.findViewById(R.id.list_item_category_text);
|
||||
sectionView.setText(title);
|
||||
|
||||
if (isEmpty) {
|
||||
if (isSectionEmpty) {
|
||||
v.findViewById(R.id.list_item_category_empty_placeholder).setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,40 @@
|
||||
package org.kde.kdeconnect.UserInterface.List;
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
public class SmallEntryItem implements ListAdapter.Item {
|
||||
|
||||
private final String title;
|
||||
private final View.OnClickListener clickListener;
|
||||
|
||||
public SmallEntryItem(String title) {
|
||||
this.title = title;
|
||||
this.clickListener = null;
|
||||
}
|
||||
|
||||
public SmallEntryItem(String title, View.OnClickListener clickListener) {
|
||||
this.title = title;
|
||||
this.clickListener = clickListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View inflateView(LayoutInflater layoutInflater) {
|
||||
View v = layoutInflater.inflate(android.R.layout.simple_list_item_1, null);
|
||||
|
||||
TextView titleView = (TextView)v.findViewById(android.R.id.text1);
|
||||
if (titleView != null) titleView.setText(title);
|
||||
if (clickListener != null) {
|
||||
titleView.setOnClickListener(clickListener);
|
||||
v.setBackgroundDrawable(layoutInflater.getContext().getResources().getDrawable(R.drawable.kitkatcompatselector_list_selector_holo_dark));
|
||||
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
}
|
@@ -104,36 +104,36 @@ public class MainActivity extends ActionBarActivity {
|
||||
Resources res = getResources();
|
||||
|
||||
section = new SectionItem(res.getString(R.string.category_connected_devices));
|
||||
section.isEmpty = true;
|
||||
section.isSectionEmpty = true;
|
||||
items.add(section);
|
||||
for(Device d : devices) {
|
||||
if (d.isReachable() && d.isPaired()) {
|
||||
items.add(new DeviceItem(MainActivity.this, d));
|
||||
section.isEmpty = false;
|
||||
section.isSectionEmpty = false;
|
||||
}
|
||||
}
|
||||
|
||||
section = new SectionItem(res.getString(R.string.category_not_paired_devices));
|
||||
section.isEmpty = true;
|
||||
section.isSectionEmpty = true;
|
||||
items.add(section);
|
||||
for(Device d : devices) {
|
||||
if (d.isReachable() && !d.isPaired()) {
|
||||
items.add(new DeviceItem(MainActivity.this, d));
|
||||
section.isEmpty = false;
|
||||
section.isSectionEmpty = false;
|
||||
}
|
||||
}
|
||||
|
||||
section = new SectionItem(res.getString(R.string.category_remembered_devices));
|
||||
section.isEmpty = true;
|
||||
section.isSectionEmpty = true;
|
||||
items.add(section);
|
||||
for(Device d : devices) {
|
||||
if (!d.isReachable() && d.isPaired()) {
|
||||
items.add(new DeviceItem(MainActivity.this, d));
|
||||
section.isEmpty = false;
|
||||
section.isSectionEmpty = false;
|
||||
}
|
||||
}
|
||||
if (section.isEmpty) {
|
||||
items.remove(items.size()-1); //Remove section
|
||||
if (section.isSectionEmpty) {
|
||||
items.remove(items.size()-1); //Remove remembered devices section if empty
|
||||
}
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
|
@@ -93,7 +93,7 @@ public class MainSettingsActivity extends PreferenceActivity {
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||
private static class GeneralPrefsFragment extends PreferenceFragment {
|
||||
public static class GeneralPrefsFragment extends PreferenceFragment {
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
@@ -0,0 +1,35 @@
|
||||
package org.kde.kdeconnect.UserInterface;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
public class MaxWidthImageButton extends ImageButton {
|
||||
|
||||
int mMaxWidth = Integer.MAX_VALUE;
|
||||
|
||||
public MaxWidthImageButton(Context context) {
|
||||
|
||||
super(context);
|
||||
}
|
||||
|
||||
public MaxWidthImageButton(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
|
||||
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.MaxWidthImageButton);
|
||||
mMaxWidth = a.getDimensionPixelSize(R.styleable.MaxWidthImageButton_maxWidth, Integer.MAX_VALUE);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
if(getMeasuredWidth() > mMaxWidth){
|
||||
setMeasuredDimension(mMaxWidth, getMeasuredHeight());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -76,6 +76,7 @@ public class PairActivity extends ActionBarActivity {
|
||||
@Override
|
||||
public void onServiceStart(BackgroundService service) {
|
||||
device = service.getDevice(deviceId);
|
||||
if (device == null) return;
|
||||
setTitle(device.getName());
|
||||
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
notificationManager.cancel(device.getNotificationId());
|
||||
@@ -94,6 +95,7 @@ public class PairActivity extends ActionBarActivity {
|
||||
@Override
|
||||
public void onServiceStart(BackgroundService service) {
|
||||
device = service.getDevice(deviceId);
|
||||
if (device == null) return;
|
||||
device.requestPairing();
|
||||
}
|
||||
});
|
||||
@@ -134,6 +136,8 @@ public class PairActivity extends ActionBarActivity {
|
||||
BackgroundService.RunCommand(PairActivity.this, new BackgroundService.InstanceCallback() {
|
||||
@Override
|
||||
public void onServiceStart(BackgroundService service) {
|
||||
device = service.getDevice(deviceId);
|
||||
if (device == null) return;
|
||||
device.addPairingCallback(pairingCallback);
|
||||
}
|
||||
});
|
||||
|
@@ -0,0 +1,17 @@
|
||||
package org.kde.kdeconnect.UserInterface;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceActivity;
|
||||
|
||||
public class PluginSettingsActivity extends PreferenceActivity {
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
String resource_name = getIntent().getStringExtra(Intent.EXTRA_INTENT);
|
||||
int resource_file = getResources().getIdentifier(resource_name, "xml", getPackageName());
|
||||
addPreferencesFromResource(resource_file);
|
||||
}
|
||||
}
|
@@ -1,27 +0,0 @@
|
||||
package org.kde.kdeconnect.UserInterface;
|
||||
|
||||
import android.content.Context;
|
||||
import android.preference.Preference;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class PreferenceListAdapter extends ArrayAdapter<Preference> {
|
||||
|
||||
|
||||
private final ArrayList<Preference> localList;
|
||||
|
||||
public PreferenceListAdapter(Context context, ArrayList<Preference> items) {
|
||||
super(context,0, items);
|
||||
localList = items;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
Preference preference = localList.get(position);
|
||||
return preference.getView(convertView, parent);
|
||||
}
|
||||
|
||||
}
|
@@ -1,26 +1,36 @@
|
||||
package org.kde.kdeconnect.UserInterface;
|
||||
|
||||
import android.app.ListActivity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
|
||||
import org.kde.kdeconnect.BackgroundService;
|
||||
import org.kde.kdeconnect.Device;
|
||||
import org.kde.kdeconnect.Plugins.PluginFactory;
|
||||
import org.kde.kdeconnect_tp.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Set;
|
||||
|
||||
public class SettingsActivity extends ListActivity {
|
||||
public class SettingsActivity extends PreferenceActivity {
|
||||
|
||||
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.
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
final PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen(this);
|
||||
setPreferenceScreen(preferenceScreen);
|
||||
|
||||
if (getIntent().hasExtra("deviceId")) {
|
||||
deviceId = getIntent().getStringExtra("deviceId");
|
||||
}
|
||||
|
||||
final String deviceId = getIntent().getStringExtra("deviceId");
|
||||
BackgroundService.RunCommand(getApplicationContext(), new BackgroundService.InstanceCallback() {
|
||||
@Override
|
||||
public void onServiceStart(BackgroundService service) {
|
||||
@@ -30,40 +40,49 @@ public class SettingsActivity extends ListActivity {
|
||||
|
||||
final ArrayList<Preference> preferences = new ArrayList<Preference>();
|
||||
for (final String pluginName : plugins) {
|
||||
CheckBoxPreference pref = new CheckBoxPreference(getBaseContext());
|
||||
final CheckBoxPreference pref = new CheckBoxPreference(getBaseContext());
|
||||
|
||||
PluginFactory.PluginInfo info = PluginFactory.getPluginInfo(getBaseContext(), pluginName);
|
||||
pref.setKey(pluginName);
|
||||
pref.setTitle(info.getDisplayName());
|
||||
pref.setSummary(info.getDescription());
|
||||
pref.setChecked(device.isPluginEnabled(pluginName));
|
||||
preferences.add(pref);
|
||||
preferenceScreen.addPreference(pref);
|
||||
|
||||
if (info.hasSettings()) {
|
||||
final Preference pluginPreference = new Preference(getBaseContext());
|
||||
pluginPreference.setKey(pluginName + getString(R.string.plugin_settings_key));
|
||||
pluginPreference.setTitle(info.getDisplayName());
|
||||
pluginPreference.setSummary(R.string.plugin_settings);
|
||||
preferences.add(pluginPreference);
|
||||
preferenceScreen.addPreference(pluginPreference);
|
||||
pluginPreference.setDependency(pref.getKey());
|
||||
}
|
||||
}
|
||||
|
||||
setListAdapter(new PreferenceListAdapter(SettingsActivity.this, preferences));
|
||||
getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
|
||||
|
||||
CheckBoxPreference pref = (CheckBoxPreference)preferences.get(i);
|
||||
|
||||
boolean enabled = device.isPluginEnabled(pref.getKey());
|
||||
device.setPluginEnabled(pref.getKey(), !enabled);
|
||||
|
||||
pref.setChecked(!enabled);
|
||||
|
||||
getListAdapter().getView(i, view, null); //This will refresh the view (yes, this is the way to do it)
|
||||
|
||||
Preference pref = preferences.get(i);
|
||||
if (pref.getDependency() == null) { //Is a plugin check
|
||||
CheckBoxPreference check = (CheckBoxPreference)pref;
|
||||
boolean enabled = device.isPluginEnabled(pref.getKey());
|
||||
device.setPluginEnabled(pref.getKey(), !enabled);
|
||||
check.setChecked(!enabled);
|
||||
} else { //Is a plugin suboption
|
||||
if (pref.isEnabled()) {
|
||||
Intent intent = new Intent(SettingsActivity.this, PluginSettingsActivity.class);
|
||||
intent.putExtra(Intent.EXTRA_INTENT, pref.getKey());
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
getListView().setPadding(16,16,16,16);
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -136,7 +136,8 @@ public class ShareToReceiver extends ActionBarActivity {
|
||||
queuedSendUriList(device, uriList);
|
||||
|
||||
} catch (Exception e) {
|
||||
Log.e(this.getClass().getName(), e.toString());
|
||||
e.printStackTrace();
|
||||
Log.e("ShareToReceiver", "Exception");
|
||||
}
|
||||
|
||||
} else if (extras.containsKey(Intent.EXTRA_TEXT)) {
|
||||
@@ -203,7 +204,7 @@ public class ShareToReceiver extends ActionBarActivity {
|
||||
String path = cursor.getString(column_index);
|
||||
np.set("filename", Uri.parse(path).getLastPathSegment());
|
||||
np.set("size", (int)new File(path).length());
|
||||
} catch(Exception _) {
|
||||
} catch(Exception unused) {
|
||||
|
||||
Log.e("ShareToReceiver", "Could not resolve media to a file, trying to get info as media");
|
||||
|
||||
|
BIN
src/main/res/drawable-hdpi/ic_action_keyboard.png
Normal file
After Width: | Height: | Size: 351 B |
After Width: | Height: | Size: 115 B |
After Width: | Height: | Size: 139 B |
After Width: | Height: | Size: 115 B |
After Width: | Height: | Size: 115 B |
After Width: | Height: | Size: 189 B |
BIN
src/main/res/drawable-mdpi/ic_action_keyboard.png
Normal file
After Width: | Height: | Size: 431 B |
After Width: | Height: | Size: 110 B |
After Width: | Height: | Size: 117 B |
After Width: | Height: | Size: 110 B |
After Width: | Height: | Size: 110 B |
After Width: | Height: | Size: 172 B |
BIN
src/main/res/drawable-xhdpi/ic_action_keyboard.png
Normal file
After Width: | Height: | Size: 451 B |
After Width: | Height: | Size: 121 B |
After Width: | Height: | Size: 154 B |
After Width: | Height: | Size: 121 B |
After Width: | Height: | Size: 121 B |
After Width: | Height: | Size: 190 B |
BIN
src/main/res/drawable-xxhdpi/ic_action_keyboard.png
Normal file
After Width: | Height: | Size: 468 B |
After Width: | Height: | Size: 133 B |
After Width: | Height: | Size: 158 B |
After Width: | Height: | Size: 133 B |
After Width: | Height: | Size: 133 B |
After Width: | Height: | Size: 273 B |
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2008 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_activated="true" android:drawable="@drawable/kitkatcompatselector_list_activated_holo" />
|
||||
<item android:drawable="@android:color/transparent" />
|
||||
</selector>
|
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2010 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
|
||||
<item android:state_focused="true" android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/kitkatcompatselector_list_selector_disabled_holo_dark" />
|
||||
<item android:state_focused="true" android:state_enabled="false" android:drawable="@drawable/kitkatcompatselector_list_selector_disabled_holo_dark" />
|
||||
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/kitkatcompatselector_list_selector_background_transition_holo_dark" />
|
||||
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/kitkatcompatselector_list_selector_background_transition_holo_dark" />
|
||||
<item android:state_focused="true" android:drawable="@drawable/kitkatcompatselector_list_focused_holo" />
|
||||
<item android:drawable="@android:color/transparent" />
|
||||
</selector>
|
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2010 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<transition xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/kitkatcompatselector_list_pressed_holo_dark" />
|
||||
<item android:drawable="@drawable/kitkatcompatselector_list_longpressed_holo" />
|
||||
</transition>
|
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2010 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:state_window_focused="false" android:drawable="@android:color/transparent" />
|
||||
|
||||
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
|
||||
<item android:state_focused="true" android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/kitkatcompatselector_list_selector_disabled_holo_dark" />
|
||||
<item android:state_focused="true" android:state_enabled="false" android:drawable="@drawable/kitkatcompatselector_list_selector_disabled_holo_dark" />
|
||||
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/kitkatcompatselector_list_selector_background_transition_holo_dark" />
|
||||
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/kitkatcompatselector_list_selector_background_transition_holo_dark" />
|
||||
<item android:state_focused="true" android:drawable="@drawable/kitkatcompatselector_list_focused_holo" />
|
||||
</selector>
|
@@ -1,26 +1,13 @@
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/buttons_list"
|
||||
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"
|
||||
android:fillViewport="true"
|
||||
android:divider="@null"
|
||||
tools:context=".MainActivity"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ListView
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:id="@+id/buttons_list"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
|
||||
<ListView
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:id="@+id/errors_list"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
/>
|
@@ -1,8 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical" android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/mousepad_view">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
@@ -12,4 +14,14 @@
|
||||
style="@android:style/TextAppearance.Medium"
|
||||
android:layout_centerInParent="true"
|
||||
android:padding="12dip" />
|
||||
|
||||
<view
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
class="org.kde.kdeconnect.Plugins.MousePadPlugin.KeyListenerView"
|
||||
android:id="@+id/keyListener"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginTop="58dp" />
|
||||
|
||||
</RelativeLayout>
|
@@ -1,43 +1,52 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/mpris_control_view"
|
||||
android:gravity="center">
|
||||
android:gravity="center"
|
||||
android:paddingLeft="60dip"
|
||||
android:paddingTop="5dip"
|
||||
android:paddingRight="60dip"
|
||||
android:paddingBottom="5dip">
|
||||
|
||||
<Spinner
|
||||
android:layout_width="200dip"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/player_spinner"
|
||||
android:layout_gravity="center"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:id="@+id/now_playing_textview"
|
||||
android:singleLine="true"
|
||||
android:gravity="center"
|
||||
android:padding="5dip"
|
||||
android:padding="8dip"
|
||||
android:layout_gravity="center"
|
||||
/>
|
||||
|
||||
<ImageButton
|
||||
android:layout_width="200dip"
|
||||
<org.kde.kdeconnect.UserInterface.MaxWidthImageButton
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="75dip"
|
||||
app:maxWidth="300dip"
|
||||
android:id="@+id/play_button"
|
||||
android:src="@android:drawable/ic_media_play"
|
||||
android:contentDescription="@string/mpris_play"
|
||||
android:layout_gravity="center"
|
||||
/>
|
||||
android:layout_weight="0"
|
||||
android:clickable="false"
|
||||
android:adjustViewBounds="false"
|
||||
android:baselineAlignBottom="true" />
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="200dip"
|
||||
android:layout_height="50dip"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dip"
|
||||
android:layout_gravity="center"
|
||||
>
|
||||
|
||||
@@ -81,17 +90,18 @@
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="200dip"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="70dip"
|
||||
android:id="@+id/volume_layout"
|
||||
android:layout_gravity="center">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="50dip"
|
||||
android:layout_height="50dip"
|
||||
android:layout_width="30dip"
|
||||
android:layout_height="30dip"
|
||||
android:maxWidth="30dip"
|
||||
android:layout_marginRight="10dip"
|
||||
android:id="@+id/imageView"
|
||||
android:layout_weight="1"
|
||||
android:layout_weight="0"
|
||||
android:layout_gravity="left|center_vertical"
|
||||
android:contentDescription="@string/mpris_volume"
|
||||
android:src="@drawable/ic_volume"
|
||||
@@ -99,7 +109,7 @@
|
||||
|
||||
|
||||
<SeekBar
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/volume_seek"
|
||||
android:layout_weight="1"
|
||||
|
@@ -2,6 +2,11 @@
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:kdeconnect="http://schemas.android.com/apk/res-auto/android">
|
||||
|
||||
<item android:id="@+id/menu_show_keyboard"
|
||||
android:title="@string/show_keyboard"
|
||||
android:icon="@drawable/ic_action_keyboard"
|
||||
kdeconnect:showAsAction="ifRoom" />
|
||||
|
||||
<item android:id="@+id/menu_right_click"
|
||||
android:title="@string/right_click"
|
||||
kdeconnect:showAsAction="never" />
|
||||
@@ -9,4 +14,5 @@ xmlns:kdeconnect="http://schemas.android.com/apk/res-auto/android">
|
||||
<item android:id="@+id/menu_middle_click"
|
||||
android:title="@string/middle_click"
|
||||
kdeconnect:showAsAction="never" />
|
||||
</menu>
|
||||
|
||||
</menu>
|
||||
|
@@ -42,6 +42,8 @@
|
||||
<string name="error_invalid_key">Получен е неправилен ключ</string>
|
||||
<string name="pair_requested">Заявено е сдвояване</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="reconnect">Ново свързване</string>
|
||||
<string name="device_not_paired">Устройството не е сдвоено</string>
|
||||
@@ -58,11 +60,21 @@
|
||||
<string name="mpris_ff">Превъртане напред</string>
|
||||
<string name="mpris_next">Следващ</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="device_name">Име на устройството</string>
|
||||
<string name="device_name_preference_summary">%s</string>
|
||||
<string name="invalid_device_name">Невалидно име на устройство</string>
|
||||
<string name="share_notification_preference">Синхронизиране на уведомленията</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>
|
||||
</resources>
|
||||
|
@@ -5,4 +5,12 @@
|
||||
<string name="pref_plugin_ping">Ping</string>
|
||||
<string name="pref_plugin_ping_desc">Šalji i primaj ping-ove</string>
|
||||
<string name="pref_plugin_notifications">Sinhronizovano obavještenje</string>
|
||||
<string name="share_notification_preference">Sinhronizovano obavještenje</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>
|
||||
</resources>
|
||||
|
@@ -16,18 +16,20 @@
|
||||
<string name="pref_plugin_ping_desc">Envia i rep els pings</string>
|
||||
<string name="pref_plugin_notifications">Sincronitza les notificacions</string>
|
||||
<string name="pref_plugin_notifications_desc">Accedeix a les vostres notificacions des d\'altres dispositius</string>
|
||||
<string name="pref_plugin_sharereceiver">Receptor de compartits</string>
|
||||
<string name="pref_plugin_sharereceiver_desc">Desa els fitxers entrants a l\'emmagatzematge del telèfon</string>
|
||||
<string name="plugin_not_available">Aquesta característica no està disponible en la vostra versió d\'Android</string>
|
||||
<string name="device_list_empty">No hi ha dispositius</string>
|
||||
<string name="device_list_empty">No hi ha cap dispositiu</string>
|
||||
<string name="ok">D\'acord</string>
|
||||
<string name="cancel">Cancel·la</string>
|
||||
<string name="open_settings">Obre l\'arranjament</string>
|
||||
<string name="no_permissions">Us caldrà concedir permís per accedir a les notificacions</string>
|
||||
<string name="send_ping">Envia un ping</string>
|
||||
<string name="open_mpris_controls">Obre el comandament a distància</string>
|
||||
<string name="open_mousepad">Obre el control per a la catifa del ratolí</string>
|
||||
<string name="mousepad_info">Moveu el dit per la pantalla per a moure el cursor del ratolí</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="category_connected_devices">Dispositius connectats</string>
|
||||
<string name="category_not_paired_devices">No hi ha dispositius aparellats</string>
|
||||
<string name="category_not_paired_devices">Dispositius sense aparellar</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="device_menu_plugins">Selecció dels connectors</string>
|
||||
@@ -44,8 +46,17 @@
|
||||
<string name="error_invalid_key">S\'ha rebut una clau no vàlida</string>
|
||||
<string name="pair_requested">S\'ha demanat aparellar</string>
|
||||
<string name="pairing_request_from">S\'ha demanat aparellar des de %1s</string>
|
||||
<string name="received_url_title">S\'ha rebut un vincle des de %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_text">%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="tap_to_answer">Puntegeu per a respondre</string>
|
||||
<string name="reconnect">Reconnecta</string>
|
||||
<string name="right_click">Envia un clic del botó dret</string>
|
||||
<string name="middle_click">Envia un clic del botó del mig</string>
|
||||
<string name="show_keyboard">Mostra el teclat</string>
|
||||
<string name="device_not_paired">El dispositiu no està aparellat</string>
|
||||
<string name="request_pairing">Demana aparellar</string>
|
||||
<string name="pairing_accept">Accepta</string>
|
||||
@@ -60,11 +71,31 @@
|
||||
<string name="mpris_ff">Avanç ràpid</string>
|
||||
<string name="mpris_next">Següent</string>
|
||||
<string name="mpris_volume">Volum</string>
|
||||
<string name="mpris_settings">Arranjament multimèdia</string>
|
||||
<string name="mpris_time_settings_title">Interval de temps</string>
|
||||
<string name="mpris_time_settings_summary">Ajusta el temps per avançar o rebobinar un fitxer multimèdia.</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="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="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-array name="mpris_time_entries">
|
||||
<item>10 segons</item>
|
||||
<item>20 segons</item>
|
||||
<item>30 segons</item>
|
||||
<item>1 minut</item>
|
||||
<item>2 minuts</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
@@ -1,20 +1,23 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<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_telephony">Upozornění telefonie</string>
|
||||
<string name="pref_plugin_telephony_desc">Posílat upozornění na SMS a hovory</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">Přístup k souborovému systému</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_mousepad">Vzdálené ovládání</string>
|
||||
<string name="pref_plugin_mousepad">Vzdálené ovládání myši</string>
|
||||
<string name="pref_plugin_mousepad_desc">Ovládejte svou myš vzdáleně</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_desc">Posílat a přijímat ping</string>
|
||||
<string name="pref_plugin_notifications">Synchronizace hlášení</string>
|
||||
<string name="pref_plugin_notifications">Synchronizace upozornění</string>
|
||||
<string name="pref_plugin_notifications_desc">Zpřístupněte si upozornění z jiných zařízení</string>
|
||||
<string name="pref_plugin_sharereceiver">Sdílet příjemce</string>
|
||||
<string name="pref_plugin_sharereceiver_desc">Ukládat příchozí soubory do úložiště telefonu</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="ok">OK</string>
|
||||
@@ -23,7 +26,8 @@
|
||||
<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="open_mpris_controls">Otevřít vzdálené ovládání</string>
|
||||
<string name="open_mousepad">Otevřít vzdálené 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="category_connected_devices">Připojená zařízení</string>
|
||||
<string name="category_not_paired_devices">Nespárovaná zařízení</string>
|
||||
<string name="category_remembered_devices">Zapamatovaná zařízení</string>
|
||||
@@ -42,8 +46,17 @@
|
||||
<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="received_url_title">Přijat odkaz od %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_text">%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="tap_to_answer">Ťukněte pro odpovězení</string>
|
||||
<string name="reconnect">Znovu připojit</string>
|
||||
<string name="right_click">Poslat kliknutí pravým tlačítkem</string>
|
||||
<string name="middle_click">Poslat kliknutí prostředním tlačítkem</string>
|
||||
<string name="show_keyboard">Zobrazit klávesnici</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>
|
||||
@@ -58,11 +71,31 @@
|
||||
<string name="mpris_ff">Rychle vpřed</string>
|
||||
<string name="mpris_next">Následující</string>
|
||||
<string name="mpris_volume">Hlasitost</string>
|
||||
<string name="mpris_settings">Nastavení multimédií</string>
|
||||
<string name="mpris_time_settings_title">Časový interval</string>
|
||||
<string name="mpris_time_settings_summary">Upravit čas pro rychlý posun multimediálním souborem vpřed a zpět.</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="plugin_settings">Nastavení</string>
|
||||
<string name="device_name">Název zařízení</string>
|
||||
<string name="device_name_preference_summary">%s</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="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="sftp_internal_storage">Interní úložiště</string>
|
||||
<string name="sftp_all_files">Všechny soubory</string>
|
||||
<string name="sftp_sdcard_num">SD karta %d</string>
|
||||
<string name="sftp_sdcard">SD karta</string>
|
||||
<string name="sftp_readonly">(pouze ke čtení)</string>
|
||||
<string name="sftp_camera">Obrázky z fotoaparátu</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>
|
||||
</resources>
|
||||
|
@@ -16,6 +16,8 @@
|
||||
<string name="pref_plugin_ping_desc">Send og modtag ping</string>
|
||||
<string name="pref_plugin_notifications">Synk. af bekendtgørelser</string>
|
||||
<string name="pref_plugin_notifications_desc">Tilgå dine bekendtgørelser fra andre enheder</string>
|
||||
<string name="pref_plugin_sharereceiver">Del modtager</string>
|
||||
<string name="pref_plugin_sharereceiver_desc">Gem indkommende filer til telefonens lager</string>
|
||||
<string name="plugin_not_available">Denne funktion er ikke tilgængelig i din Android-version</string>
|
||||
<string name="device_list_empty">Ingen enheder</string>
|
||||
<string name="ok">O.k.</string>
|
||||
@@ -24,8 +26,8 @@
|
||||
<string name="no_permissions">Du skal give tilladelse for at tilgå bekendtgørelser</string>
|
||||
<string name="send_ping">Send ping</string>
|
||||
<string name="open_mpris_controls">Åbn fjernbetjening</string>
|
||||
<string name="open_mousepad">Åbn museplade-kontrol</string>
|
||||
<string name="mousepad_info">Bevæg din tommelfinger på skærmen for at flytte musemarkøren</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="category_connected_devices">Forbundne enheder</string>
|
||||
<string name="category_not_paired_devices">Ikke parrede enheder</string>
|
||||
<string name="category_remembered_devices">Huskede enheder</string>
|
||||
@@ -44,8 +46,17 @@
|
||||
<string name="error_invalid_key">Ugyldige nøgle modtaget</string>
|
||||
<string name="pair_requested">Anmodet om parring</string>
|
||||
<string name="pairing_request_from">Parringsanmodning fra %1s</string>
|
||||
<string name="received_url_title">Modtog link fra %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_text">%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="tap_to_answer">Tap for at svare</string>
|
||||
<string name="reconnect">Forbind igen</string>
|
||||
<string name="right_click">Send højreklik</string>
|
||||
<string name="middle_click">Send midterklik</string>
|
||||
<string name="show_keyboard">Vis tastatur</string>
|
||||
<string name="device_not_paired">Enhed ikke parret</string>
|
||||
<string name="request_pairing">Anmod om parring</string>
|
||||
<string name="pairing_accept">Acceptér</string>
|
||||
@@ -60,11 +71,22 @@
|
||||
<string name="mpris_ff">Spol frem</string>
|
||||
<string name="mpris_next">Næste</string>
|
||||
<string name="mpris_volume">Lydstyrke</string>
|
||||
<string name="mpris_settings">Fjernbetjening af multimedie</string>
|
||||
<string name="share_to">Del på...</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="general_settings">Generelle indstillinger</string>
|
||||
<string name="plugin_settings">Generelle indstillinger</string>
|
||||
<string name="device_name">Enhedsnavn</string>
|
||||
<string name="device_name_preference_summary">%s</string>
|
||||
<string name="invalid_device_name">Ugyldigt enhedsnavn</string>
|
||||
<string name="shareplugin_text_saved">Modtog tekst, gemt til udklipsholder</string>
|
||||
<string name="share_notification_preference">Synk. af bekendtgørelser</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>
|
||||
</resources>
|
||||
|
@@ -8,13 +8,14 @@
|
||||
<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_desc">Inhalt der Zwischenablage freigeben</string>
|
||||
<string name="pref_plugin_mousepad">Fernbedienung</string>
|
||||
<string name="pref_plugin_mousepad">Maus-Fernbedienung</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_ping">Ping</string>
|
||||
<string name="pref_plugin_ping_desc">Senden und Empfangen von Pings</string>
|
||||
<string name="pref_plugin_notifications">Benachrichtigungs-Abgleich</string>
|
||||
<string name="pref_plugin_notifications_desc">Zugriff auf Ihre Benachrichtigungen von anderen Geräten</string>
|
||||
<string name="pref_plugin_sharereceiver_desc">Eingehende Dateien auf dem Telefonspeicher ablegen</string>
|
||||
<string name="plugin_not_available">Diese Funktion ist in Ihrer Android-Version nicht verfügbar</string>
|
||||
<string name="device_list_empty">Keine Geräte</string>
|
||||
<string name="ok">OK</string>
|
||||
@@ -23,14 +24,14 @@
|
||||
<string name="no_permissions">Sie müssen die Erlaubnis zum Zugriff auf Benachrichtigungen erteilen</string>
|
||||
<string name="send_ping">Ping senden</string>
|
||||
<string name="open_mpris_controls">Fernbedienung öffnen</string>
|
||||
<string name="open_mousepad">Fernbedienung öffnen</string>
|
||||
<string name="open_mousepad">Touchpad-Steuerung öffnen</string>
|
||||
<string name="category_connected_devices">Verbundene Geräte</string>
|
||||
<string name="category_not_paired_devices">Keine angeschlossenen 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="device_menu_plugins">Module auswählen</string>
|
||||
<string name="device_menu_unpair">Verbindung trennen</string>
|
||||
<string name="device_not_reachable">Das 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="error_not_reachable">Das Gerät ist nicht erreichbar</string>
|
||||
<string name="error_already_requested">Die Verbindung wurde bereits angefragt</string>
|
||||
@@ -42,8 +43,15 @@
|
||||
<string name="error_invalid_key">Ungültiger Schlüssel empfangen</string>
|
||||
<string name="pair_requested">Verbindung angefordert</string>
|
||||
<string name="pairing_request_from">Verbindungsanfrage von %1s</string>
|
||||
<string name="received_url_title">Verknüpfung von %1s erhalten</string>
|
||||
<string name="incoming_file_title">Eingehende Datei von %1s</string>
|
||||
<string name="incoming_file_text">%1s</string>
|
||||
<string name="received_file_title">Datei von %1s erhalten</string>
|
||||
<string name="tap_to_answer">Tippen zum Antworten</string>
|
||||
<string name="reconnect">Erneut verbinden</string>
|
||||
<string name="right_click">Rechtsklick senden</string>
|
||||
<string name="middle_click">Mittelklick senden</string>
|
||||
<string name="show_keyboard">Tastatur anzeigen</string>
|
||||
<string name="device_not_paired">Das Gerät ist nicht verbunden</string>
|
||||
<string name="request_pairing">Verbindung angefordert</string>
|
||||
<string name="pairing_accept">Annehmen</string>
|
||||
@@ -58,11 +66,29 @@
|
||||
<string name="mpris_ff">Vorlauf</string>
|
||||
<string name="mpris_next">Weiter</string>
|
||||
<string name="mpris_volume">Lautstärke</string>
|
||||
<string name="mpris_settings">Multimedia-Einstellungen</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_newer">Dieses Gerät verwendet ein neuere Protokollversion</string>
|
||||
<string name="general_settings">Allgemeine Einstellungen</string>
|
||||
<string name="plugin_settings">Einstellungen</string>
|
||||
<string name="device_name">Gerätename</string>
|
||||
<string name="device_name_preference_summary">%s</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="share_notification_preference">Benachrichtigungs-Abgleich</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_all_files">Alle Dateien</string>
|
||||
<string name="sftp_sdcard_num">SD-Karte %d</string>
|
||||
<string name="sftp_sdcard">SD-Karte</string>
|
||||
<string name="sftp_readonly">(Nur lesen)</string>
|
||||
<string name="sftp_camera">Kamerabilder</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>
|
||||
</resources>
|
||||
|
@@ -5,17 +5,20 @@
|
||||
<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_sftp">Revelar el sistema de archivos</string>
|
||||
<string name="pref_plugin_sftp_desc">Permite explorar 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_desc">Compartir el contenido del portapapeles</string>
|
||||
<string name="pref_plugin_mousepad">Control remoto</string>
|
||||
<string name="pref_plugin_mousepad">Control remoto del ratón</string>
|
||||
<string name="pref_plugin_mousepad_desc">Controlar su ratón remotamente</string>
|
||||
<string name="pref_plugin_mpris">Controles remotos multimedia</string>
|
||||
<string name="pref_plugin_mpris_desc">Controlar audio y vídeo desde el teléfono</string>
|
||||
<string name="pref_plugin_ping">Ping</string>
|
||||
<string name="pref_plugin_ping_desc">Enviar y recibir pings</string>
|
||||
<string name="pref_plugin_notifications">Sincronizar notificaciones</string>
|
||||
<string name="pref_plugin_notifications_desc">Acceder a las notificaciones desde otros dispositivos</string>
|
||||
<string name="plugin_not_available">Esta función no está disponible en su versión de Android</string>
|
||||
<string name="pref_plugin_sharereceiver">Compartir receptor</string>
|
||||
<string name="pref_plugin_sharereceiver_desc">Guardar archivos entrantes en el almacenamiento del teléfono</string>
|
||||
<string name="plugin_not_available">Esta funcionalidad no está disponible en su versión de Android</string>
|
||||
<string name="device_list_empty">Ningún dispositivo</string>
|
||||
<string name="ok">Aceptar</string>
|
||||
<string name="cancel">Cancelar</string>
|
||||
@@ -23,7 +26,8 @@
|
||||
<string name="no_permissions">Debe otorgar permiso para acceder a las notificaciones</string>
|
||||
<string name="send_ping">Enviar ping</string>
|
||||
<string name="open_mpris_controls">Abrir control remoto</string>
|
||||
<string name="open_mousepad">Abrir control remoto</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="category_connected_devices">Dispositivos conectados</string>
|
||||
<string name="category_not_paired_devices">Dispositivos no vinculados</string>
|
||||
<string name="category_remembered_devices">Dispositivos recordados</string>
|
||||
@@ -42,8 +46,17 @@
|
||||
<string name="error_invalid_key">Se ha recibido una clave no valida</string>
|
||||
<string name="pair_requested">Vinculación solicitada</string>
|
||||
<string name="pairing_request_from">Solicitud de vinculación de %1s</string>
|
||||
<string name="received_url_title">Enlace recibido desde %1s</string>
|
||||
<string name="received_url_text">Pulse para abrir «%1s»</string>
|
||||
<string name="incoming_file_title">Archivo entrante desde %1s</string>
|
||||
<string name="incoming_file_text">%1s</string>
|
||||
<string name="received_file_title">Archivo recibido desde %1s</string>
|
||||
<string name="received_file_text">Pulse para abrir «%1s»</string>
|
||||
<string name="tap_to_answer">Toque para responder</string>
|
||||
<string name="reconnect">Reconectar</string>
|
||||
<string name="right_click">Enviar clic derecho</string>
|
||||
<string name="middle_click">Enviar clic del botón central</string>
|
||||
<string name="show_keyboard">Mostrar teclado</string>
|
||||
<string name="device_not_paired">Dispositivo no vinculado</string>
|
||||
<string name="request_pairing">Solicitar vinculación</string>
|
||||
<string name="pairing_accept">Aceptar</string>
|
||||
@@ -58,11 +71,25 @@
|
||||
<string name="mpris_ff">Avance rápido</string>
|
||||
<string name="mpris_next">Siguiente</string>
|
||||
<string name="mpris_volume">Volumen</string>
|
||||
<string name="mpris_settings">Preferencias multimedia</string>
|
||||
<string name="mpris_time_settings_title">Intervalo de tiempo</string>
|
||||
<string name="mpris_time_settings_summary">Ajustar el tiempo a avanzar o rebobinar un archivo multimedia.</string>
|
||||
<string name="share_to">Compartir con...</string>
|
||||
<string name="protocol_version_older">Este dispositivo usa una versión antigua del protocolo</string>
|
||||
<string name="protocol_version_newer">Este dispositivo usa una versión más reciente del protocolo</string>
|
||||
<string name="general_settings">Preferencias generales</string>
|
||||
<string name="plugin_settings">Preferencias</string>
|
||||
<string name="device_name">Nombre de dispositivo</string>
|
||||
<string name="device_name_preference_summary">%s</string>
|
||||
<string name="invalid_device_name">Nombre de dispositivo no valido</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="share_notification_preference">Notificaciones ruidosas</string>
|
||||
<string name="share_notification_preference_summary">Vibrar y reproducir un sonido cuando se reciba un archivo</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>
|
||||
</resources>
|
||||
|
@@ -8,7 +8,8 @@
|
||||
<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_desc">Jaa leikepöydän sisältö</string>
|
||||
<string name="pref_plugin_mousepad">Kauko-ohjain</string>
|
||||
<string name="pref_plugin_mousepad">Hiiren kauko-ohjain</string>
|
||||
<string name="pref_plugin_mousepad_desc">Kauko-ohjaa hiirtä</string>
|
||||
<string name="pref_plugin_mpris">Multimediakauko-ohjaimet</string>
|
||||
<string name="pref_plugin_mpris_desc">Ohjaa ääntä ja videota puhelimestasi</string>
|
||||
<string name="pref_plugin_ping">Tiedustelupaketti</string>
|
||||
@@ -23,7 +24,8 @@
|
||||
<string name="no_permissions">Sinun on annettava lupa ilmoitusten näkemiseen</string>
|
||||
<string name="send_ping">Lähetä tiedustelupaketti</string>
|
||||
<string name="open_mpris_controls">Avaa kauko-ohjain</string>
|
||||
<string name="open_mousepad">Avaa kauko-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="category_connected_devices">Yhdistetyt laitteet</string>
|
||||
<string name="category_not_paired_devices">Ei laitepareja</string>
|
||||
<string name="category_remembered_devices">Muistetut laitteet</string>
|
||||
@@ -42,8 +44,11 @@
|
||||
<string name="error_invalid_key">Vastaanotettiin väärä avain</string>
|
||||
<string name="pair_requested">Parituspyyntö</string>
|
||||
<string name="pairing_request_from">Parituspyyntö kohteesta %1s</string>
|
||||
<string name="incoming_file_title">Parituspyyntö kohteesta %1s</string>
|
||||
<string name="incoming_file_text">%1s</string>
|
||||
<string name="tap_to_answer">Vastaa napsauttamalla</string>
|
||||
<string name="reconnect">Yhdistä uudelleen</string>
|
||||
<string name="show_keyboard">Näytä näppäimistö</string>
|
||||
<string name="device_not_paired">Ei laiteparia</string>
|
||||
<string name="request_pairing">Pyydä paritusta</string>
|
||||
<string name="pairing_accept">Hyväksy</string>
|
||||
@@ -58,11 +63,21 @@
|
||||
<string name="mpris_ff">Nopeasti eteenpäin</string>
|
||||
<string name="mpris_next">Seuraava</string>
|
||||
<string name="mpris_volume">Äänenvoimakkuus</string>
|
||||
<string name="mpris_settings">Multimedia-asetukset</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_newer">Laite käyttää uudempaa yhteyskäytäntöversiota</string>
|
||||
<string name="general_settings">Yleisasetukset</string>
|
||||
<string name="plugin_settings">Asetukset</string>
|
||||
<string name="device_name">Laitenimi</string>
|
||||
<string name="device_name_preference_summary">%s</string>
|
||||
<string name="invalid_device_name">Virheellinen laitenimi</string>
|
||||
<string name="share_notification_preference">Äänekkäät ilmoitukset</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>
|
||||
</resources>
|
||||
|
@@ -42,6 +42,8 @@
|
||||
<string name="error_invalid_key">Clé reçue non valable</string>
|
||||
<string name="pair_requested">Paire demandée</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">%s</string>
|
||||
<string name="tap_to_answer">Cliquer pour répondre</string>
|
||||
<string name="reconnect">Reconnecter</string>
|
||||
<string name="device_not_paired">Périphérique non apparié</string>
|
||||
@@ -58,11 +60,21 @@
|
||||
<string name="mpris_ff">Avance rapide</string>
|
||||
<string name="mpris_next">Suivant</string>
|
||||
<string name="mpris_volume">Volume</string>
|
||||
<string name="mpris_settings">Contrôles distants multimédia</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_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="plugin_settings">Paramètres généraux</string>
|
||||
<string name="device_name">Nom du périphérique</string>
|
||||
<string name="device_name_preference_summary">%s</string>
|
||||
<string name="invalid_device_name">Nom de périphérique non valable</string>
|
||||
<string name="share_notification_preference">Synchronisation des notifications</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>
|
||||
</resources>
|
||||
|
@@ -8,13 +8,16 @@
|
||||
<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_desc">A vágólap tartalmának megosztása</string>
|
||||
<string name="pref_plugin_mousepad">Távirányító</string>
|
||||
<string name="pref_plugin_mousepad">Egér távirányító</string>
|
||||
<string name="pref_plugin_mousepad_desc">Az egér vezérlése távolról</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_ping">Ping</string>
|
||||
<string name="pref_plugin_ping_desc">Pingek küldése és fogadása</string>
|
||||
<string name="pref_plugin_notifications">Értesítés szinkronizáció</string>
|
||||
<string name="pref_plugin_notifications_desc">Hozzáférés az értesítésekhez más eszközökről</string>
|
||||
<string name="pref_plugin_sharereceiver">Megosztás vevő</string>
|
||||
<string name="pref_plugin_sharereceiver_desc">Bejövő fájlok mentése a telefon háttértárára</string>
|
||||
<string name="plugin_not_available">Ez a funkció nem érhető el az ön Android verziójában</string>
|
||||
<string name="device_list_empty">Nincsenek eszközök</string>
|
||||
<string name="ok">OK</string>
|
||||
@@ -23,7 +26,8 @@
|
||||
<string name="no_permissions">Jogot kell adnia az értesítésekhez való hozzáféréshez</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_mousepad">Távirányító 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 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>
|
||||
@@ -42,8 +46,16 @@
|
||||
<string name="error_invalid_key">Érvénytelen kulcs érkezett</string>
|
||||
<string name="pair_requested">Párosítás kérve</string>
|
||||
<string name="pairing_request_from">Párosítási kérés innen: %1s</string>
|
||||
<string name="received_url_title">Hivatkozás érkezett innen: %1s</string>
|
||||
<string name="received_url_text">Koppintson „%1s” megnyitásához</string>
|
||||
<string name="incoming_file_title">Bejövő fájl innen: %1s</string>
|
||||
<string name="incoming_file_text">%1s</string>
|
||||
<string name="received_file_title">Fájl érkezett innen: %1s</string>
|
||||
<string name="received_file_text">Koppintson „%1s” megnyitásához</string>
|
||||
<string name="tap_to_answer">Érintse meg a válaszhoz</string>
|
||||
<string name="reconnect">Újracsatlakozás</string>
|
||||
<string name="right_click">Jobb kattintás küldése</string>
|
||||
<string name="middle_click">Középső kattintás küldése</string>
|
||||
<string name="device_not_paired">Az eszköz nincs párosítva</string>
|
||||
<string name="request_pairing">Párosítás kérése</string>
|
||||
<string name="pairing_accept">Elfogadás</string>
|
||||
@@ -58,11 +70,22 @@
|
||||
<string name="mpris_ff">Gyors előretekerés</string>
|
||||
<string name="mpris_next">Következő</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="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="share_notification_preference">Értesítés szinkronizáció</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>
|
||||
</resources>
|
||||
|
@@ -40,6 +40,8 @@
|
||||
<string name="error_invalid_key">Ricevuta chiave non valida</string>
|
||||
<string name="pair_requested">Richiesta di associazione</string>
|
||||
<string name="pairing_request_from">Richiesta associazione da %1s</string>
|
||||
<string name="incoming_file_title">Richiesta associazione da %1s</string>
|
||||
<string name="incoming_file_text">%s</string>
|
||||
<string name="tap_to_answer">Tocca per rispondere</string>
|
||||
<string name="reconnect">Riconnetti</string>
|
||||
<string name="device_not_paired">Dispositivo non associato</string>
|
||||
@@ -56,11 +58,21 @@
|
||||
<string name="mpris_ff">Avanti veloce</string>
|
||||
<string name="mpris_next">Successivo</string>
|
||||
<string name="mpris_volume">Volume</string>
|
||||
<string name="mpris_settings">Telecomando multimediale</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_newer">Questo dispositivo usa una nuova versione del protocollo di rete</string>
|
||||
<string name="general_settings">Impostazioni generali</string>
|
||||
<string name="plugin_settings">Impostazioni generali</string>
|
||||
<string name="device_name">Nome dispositivo</string>
|
||||
<string name="device_name_preference_summary">%s</string>
|
||||
<string name="invalid_device_name">Nome non valido</string>
|
||||
<string name="share_notification_preference">Sincronizzazione notifiche</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>
|
||||
</resources>
|
||||
|
@@ -1,2 +1,10 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources/>
|
||||
<resources>
|
||||
<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>
|
||||
</resources>
|
||||
|
@@ -42,6 +42,8 @@
|
||||
<string name="error_invalid_key">잘못된 키 받음</string>
|
||||
<string name="pair_requested">페어링 요청됨</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="reconnect">다시 연결</string>
|
||||
<string name="device_not_paired">장치가 페어링되지 않음</string>
|
||||
@@ -58,11 +60,21 @@
|
||||
<string name="mpris_ff">빨리 감기</string>
|
||||
<string name="mpris_next">다음</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="device_name">장치 이름</string>
|
||||
<string name="device_name_preference_summary">%s</string>
|
||||
<string name="invalid_device_name">잘못된 장치 이름</string>
|
||||
<string name="share_notification_preference">알림 동기화</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>
|
||||
</resources>
|
||||
|
@@ -1,2 +1,10 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources/>
|
||||
<resources>
|
||||
<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>
|
||||
</resources>
|
||||
|
@@ -16,6 +16,8 @@
|
||||
<string name="pref_plugin_ping_desc">Pings verzenden en ontvangen</string>
|
||||
<string name="pref_plugin_notifications">Synchronisatie van meldingen</string>
|
||||
<string name="pref_plugin_notifications_desc">Bekijk uw meldingen van andere apparaten</string>
|
||||
<string name="pref_plugin_sharereceiver">Ontvanger delen</string>
|
||||
<string name="pref_plugin_sharereceiver_desc">Inkomende bestanden opslaan naar de opslag van de telefoon</string>
|
||||
<string name="plugin_not_available">Deze functie is niet beschikbaar in uw versie van Android</string>
|
||||
<string name="device_list_empty">Geen apparaten</string>
|
||||
<string name="ok">OK</string>
|
||||
@@ -24,8 +26,8 @@
|
||||
<string name="no_permissions">U moet toestemming geven voor toegang tot meldingen</string>
|
||||
<string name="send_ping">Ping verzenden</string>
|
||||
<string name="open_mpris_controls">Afstandsbediening openen</string>
|
||||
<string name="open_mousepad">Afstandsbediening van muispad openen</string>
|
||||
<string name="mousepad_info">Verplaats uw vinger op het scherm om de muiscursor te verplaatsen</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="category_connected_devices">Verbonden apparaten</string>
|
||||
<string name="category_not_paired_devices">Geen gepaarde apparaten</string>
|
||||
<string name="category_remembered_devices">Onthouden apparaten</string>
|
||||
@@ -44,8 +46,17 @@
|
||||
<string name="error_invalid_key">Ongeldige sleutel ontvangen</string>
|
||||
<string name="pair_requested">Paar gevraagd</string>
|
||||
<string name="pairing_request_from">Verzoek om een paar te maken van %1s</string>
|
||||
<string name="received_url_title">Ontvangen koppeling van %1s</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_text">%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="tap_to_answer">Tap om te antwoorden</string>
|
||||
<string name="reconnect">Opnieuw verbinden</string>
|
||||
<string name="right_click">Verstuur een rechter muisklik</string>
|
||||
<string name="middle_click">Verstuur een middelste muisklik</string>
|
||||
<string name="show_keyboard">Toetsenbord tonen</string>
|
||||
<string name="device_not_paired">Apparaat is niet gepaard</string>
|
||||
<string name="request_pairing">Verzoek voor maken van paar</string>
|
||||
<string name="pairing_accept">Accepteren</string>
|
||||
@@ -60,11 +71,31 @@
|
||||
<string name="mpris_ff">Snel vooruit</string>
|
||||
<string name="mpris_next">Volgende</string>
|
||||
<string name="mpris_volume">Volume</string>
|
||||
<string name="mpris_settings">Instellingen voor multimedia</string>
|
||||
<string name="mpris_time_settings_title">Intervaltijd</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="share_to">Delen met...</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="general_settings">Algemene instellingen</string>
|
||||
<string name="plugin_settings">Instellingen</string>
|
||||
<string name="device_name">Apparaatnaam</string>
|
||||
<string name="device_name_preference_summary">%s</string>
|
||||
<string name="invalid_device_name">Ongeldige apparaatnaam</string>
|
||||
<string name="shareplugin_text_saved">Oontvangen tekst, opgeslagen op klembord</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="sftp_internal_storage">Interne opslag</string>
|
||||
<string name="sftp_all_files">Alle bestanden</string>
|
||||
<string name="sftp_sdcard_num">SD-kaartje %d</string>
|
||||
<string name="sftp_sdcard">SD-kaartje</string>
|
||||
<string name="sftp_readonly">(alleen-lezen)</string>
|
||||
<string name="sftp_camera">Afbeeldingen van camera</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>
|
||||
</resources>
|
||||
|
@@ -8,13 +8,16 @@
|
||||
<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_mousepad">Zdalne sterowanie</string>
|
||||
<string name="pref_plugin_mousepad">Zdalne sterowanie myszą</string>
|
||||
<string name="pref_plugin_mousepad_desc">Steruj swoją myszą zdalnie</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="pref_plugin_sharereceiver">Udostępnij odbiornik</string>
|
||||
<string name="pref_plugin_sharereceiver_desc">Zapisz przychodzące pliki do pamięci telefonu</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>
|
||||
@@ -23,7 +26,8 @@
|
||||
<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="open_mousepad">Otwórz zdalne sterowanie</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="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>
|
||||
@@ -42,8 +46,17 @@
|
||||
<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="received_url_title">Odebrano odsyłacz od %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_text">%1s</string>
|
||||
<string name="received_file_title">Odebrano plik od %1s</string>
|
||||
<string name="received_file_text">Znacznik do otwarcia \'%1s\'</string>
|
||||
<string name="tap_to_answer">Stuknij, aby odpowiedzieć</string>
|
||||
<string name="reconnect">Połącz ponownie</string>
|
||||
<string name="right_click">Wyślij naciskając prawym</string>
|
||||
<string name="middle_click">Wyślij naciskając środkowym</string>
|
||||
<string name="show_keyboard">Pokaż klawiaturę</string>
|
||||
<string name="device_not_paired">Urządzenie niesparowane</string>
|
||||
<string name="request_pairing">Zażądaj sparowania</string>
|
||||
<string name="pairing_accept">Przyjmij</string>
|
||||
@@ -58,11 +71,31 @@
|
||||
<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="mpris_settings">Ustawienia multimediów</string>
|
||||
<string name="mpris_time_settings_title">Czas okresu</string>
|
||||
<string name="mpris_time_settings_summary">Dostosuj czas do przewijania wprzód lub wstecz w pliku multimedialnym.</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="plugin_settings">Ustawienia</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>
|
||||
<string name="shareplugin_text_saved">Otrzymano tekst, zapisano do schowka</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="sftp_internal_storage">"Pamięć wewnętrzna "</string>
|
||||
<string name="sftp_all_files">Wszystkie pliki</string>
|
||||
<string name="sftp_sdcard_num">Karta SD %d</string>
|
||||
<string name="sftp_sdcard">Karta SD</string>
|
||||
<string name="sftp_readonly">(tylko do odczytu)</string>
|
||||
<string name="sftp_camera">Zdjęcia z aparatu</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>
|
||||
</resources>
|
||||
|
@@ -16,6 +16,8 @@
|
||||
<string name="pref_plugin_ping_desc">Envia e recebe pings</string>
|
||||
<string name="pref_plugin_notifications">Sincronização de notificações</string>
|
||||
<string name="pref_plugin_notifications_desc">Acesse suas notificações a partir de outros dispositivos</string>
|
||||
<string name="pref_plugin_sharereceiver">Destinatário do compartilhamento</string>
|
||||
<string name="pref_plugin_sharereceiver_desc">Salvar os arquivos recebidos no armazenamento do celular</string>
|
||||
<string name="plugin_not_available">Esta funcionalidade não está disponível na sua versão do Android</string>
|
||||
<string name="device_list_empty">Sem dispositivos</string>
|
||||
<string name="ok">OK</string>
|
||||
@@ -24,8 +26,8 @@
|
||||
<string name="no_permissions">Você precisa conceder permissão para acessar as notificações</string>
|
||||
<string name="send_ping">Enviar ping</string>
|
||||
<string name="open_mpris_controls">Abra o controle remoto</string>
|
||||
<string name="open_mousepad">Abrir o controle do mousepad</string>
|
||||
<string name="mousepad_info">Mova seu dedo na tela para mover o ponteiro do mouse</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="category_connected_devices">Dispositivos conectados</string>
|
||||
<string name="category_not_paired_devices">Dispositivos não emparelhados</string>
|
||||
<string name="category_remembered_devices">Dispositivos lembrados</string>
|
||||
@@ -44,8 +46,17 @@
|
||||
<string name="error_invalid_key">Chave inválida recebida</string>
|
||||
<string name="pair_requested">Emparelhamento solicitado</string>
|
||||
<string name="pairing_request_from">Emparelhando solicitação de %1s</string>
|
||||
<string name="received_url_title">Link recebido de %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_text">%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="tap_to_answer">Toque para responder</string>
|
||||
<string name="reconnect">Reconectar</string>
|
||||
<string name="right_click">Enviar um Botão Direito</string>
|
||||
<string name="middle_click">Enviar um Botão do Meio</string>
|
||||
<string name="show_keyboard">Mostrar teclado</string>
|
||||
<string name="device_not_paired">Dispositivo não emparelhado</string>
|
||||
<string name="request_pairing">Solicitar emparelhamento</string>
|
||||
<string name="pairing_accept">Aceitar</string>
|
||||
@@ -60,11 +71,31 @@
|
||||
<string name="mpris_ff">Avançar rapidamente</string>
|
||||
<string name="mpris_next">Próximo</string>
|
||||
<string name="mpris_volume">Volume</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_summary">Ajuste o tempo para avançar ou retroceder um arquivo multimídia.</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_newer">Este dispositivo usa uma versão mais recente do protocolo</string>
|
||||
<string name="general_settings">Configurações gerais</string>
|
||||
<string name="plugin_settings">Configurações</string>
|
||||
<string name="device_name">Nome do dispositivo</string>
|
||||
<string name="device_name_preference_summary">%s</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="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="sftp_internal_storage">Armazenamento interno</string>
|
||||
<string name="sftp_all_files">Todos os arquivos</string>
|
||||
<string name="sftp_sdcard_num">Cartão SD %d</string>
|
||||
<string name="sftp_sdcard">Cartão SD</string>
|
||||
<string name="sftp_readonly">(somente leitura)</string>
|
||||
<string name="sftp_camera">Imagens da câmera</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>
|
||||
</resources>
|
||||
|
@@ -16,6 +16,8 @@
|
||||
<string name="pref_plugin_ping_desc">Enviar e receber pedidos de contacto (\'ping\')</string>
|
||||
<string name="pref_plugin_notifications">Sincronização da notificação</string>
|
||||
<string name="pref_plugin_notifications_desc">Aceder às suas notificações a partir de outros dispositivos</string>
|
||||
<string name="pref_plugin_sharereceiver">Destinatário da partilha</string>
|
||||
<string name="pref_plugin_sharereceiver_desc">Gravar os ficheiros recebidos no armazenamento do telemóvel</string>
|
||||
<string name="plugin_not_available">Esta funcionalidade não está disponível na sua versão do Android</string>
|
||||
<string name="device_list_empty">Sem dispositivos</string>
|
||||
<string name="ok">OK</string>
|
||||
@@ -25,7 +27,7 @@
|
||||
<string name="send_ping">Enviar um pedido de contacto</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="mousepad_info">Mova o seu dedo no ecrã para mover o cursor do rato</string>
|
||||
<string name="mousepad_info">Mova um dedo no ecrã para mover o cursor do rato</string>
|
||||
<string name="category_connected_devices">Dispositivos ligados</string>
|
||||
<string name="category_not_paired_devices">Dispositivos não emparelhados</string>
|
||||
<string name="category_remembered_devices">Dispositivos recordados</string>
|
||||
@@ -44,8 +46,17 @@
|
||||
<string name="error_invalid_key">Chave inválida recebida</string>
|
||||
<string name="pair_requested">Emparelhamento pedido</string>
|
||||
<string name="pairing_request_from">Pedido de emparelhamento de %1s</string>
|
||||
<string name="received_url_title">Ligação recebida de %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_text">%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="tap_to_answer">Toque para responder</string>
|
||||
<string name="reconnect">Ligar de Novo</string>
|
||||
<string name="right_click">Enviar um Botão Direito</string>
|
||||
<string name="middle_click">Enviar um Botão do Meio</string>
|
||||
<string name="show_keyboard">Mostrar o Teclado</string>
|
||||
<string name="device_not_paired">Dispositivo não emparelhado</string>
|
||||
<string name="request_pairing">Pedir o emparelhamento</string>
|
||||
<string name="pairing_accept">Aceitar</string>
|
||||
@@ -60,11 +71,31 @@
|
||||
<string name="mpris_ff">Avançar</string>
|
||||
<string name="mpris_next">Seguinte</string>
|
||||
<string name="mpris_volume">Volume</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_summary">Ajusta o tempo de avanço ou de recuo de um ficheiro multimédia.</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_newer">Este dispositivo usa uma versão mais recente do protocolo</string>
|
||||
<string name="general_settings">Configuração Geral</string>
|
||||
<string name="plugin_settings">Configuração</string>
|
||||
<string name="device_name">Nome do dispositivo</string>
|
||||
<string name="device_name_preference_summary">%s</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="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="sftp_internal_storage">Armazenamento interno</string>
|
||||
<string name="sftp_all_files">Todos os ficheiros</string>
|
||||
<string name="sftp_sdcard_num">Cartão SD %d</string>
|
||||
<string name="sftp_sdcard">Cartão SD</string>
|
||||
<string name="sftp_readonly">(apenas para leitura)</string>
|
||||
<string name="sftp_camera">Fotografias</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>
|
||||
</resources>
|
||||
|
@@ -42,6 +42,8 @@
|
||||
<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="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="reconnect">Reconectează</string>
|
||||
<string name="device_not_paired">Dispozitiv neasociat</string>
|
||||
@@ -58,11 +60,21 @@
|
||||
<string name="mpris_ff">Derulare rapidă înainte</string>
|
||||
<string name="mpris_next">Următor</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="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="share_notification_preference">Sincronizare notificări</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>
|
||||
</resources>
|
||||
|
@@ -40,6 +40,7 @@
|
||||
<string name="error_invalid_key">Недопустимый получатель ключа</string>
|
||||
<string name="pair_requested">Запрошено спаривание</string>
|
||||
<string name="pairing_request_from">Запрос на спаривание от %1s</string>
|
||||
<string name="incoming_file_title">Запрос на спаривание от %1s</string>
|
||||
<string name="tap_to_answer">Коснитесь чтобы ответить</string>
|
||||
<string name="reconnect">Переподключить</string>
|
||||
<string name="device_not_paired">Устройство не спарено</string>
|
||||
@@ -54,10 +55,20 @@
|
||||
<string name="mpris_previous">Предыдущий</string>
|
||||
<string name="mpris_next">Следующее</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="device_name">Устройство не спарено</string>
|
||||
<string name="invalid_device_name">Недопустимый получатель ключа</string>
|
||||
<string name="share_notification_preference">Синхронизация уведомлений</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>
|
||||
</resources>
|
||||
|
@@ -8,13 +8,16 @@
|
||||
<string name="pref_plugin_sftp_desc">Umožní prístup na súborový systém telefónu vzdialene</string>
|
||||
<string name="pref_plugin_clipboard">Synchronizácia schránky</string>
|
||||
<string name="pref_plugin_clipboard_desc">Zdieľať obsah schránky</string>
|
||||
<string name="pref_plugin_mousepad">Diaľkové ovládanie</string>
|
||||
<string name="pref_plugin_mousepad">Diaľkové ovládanie myšou</string>
|
||||
<string name="pref_plugin_mousepad_desc">Ovládať vašu myš vzdialene</string>
|
||||
<string name="pref_plugin_mpris">Multimediálne diaľkové ovládače</string>
|
||||
<string name="pref_plugin_mpris_desc">Ovládať audio/video z vášho telefónu</string>
|
||||
<string name="pref_plugin_ping">Ping</string>
|
||||
<string name="pref_plugin_ping_desc">Poslať a prijať pingy</string>
|
||||
<string name="pref_plugin_notifications">Synchronizácia pripomienok</string>
|
||||
<string name="pref_plugin_notifications_desc">Prístup k vašim pripomienkam z iných zariadení</string>
|
||||
<string name="pref_plugin_sharereceiver">Zdieľať prijímač</string>
|
||||
<string name="pref_plugin_sharereceiver_desc">Uložiť prichádzajúce súbory na úložiska telefónu</string>
|
||||
<string name="plugin_not_available">Táto funkcia nie je dostupná vo vašej verzii Androidu</string>
|
||||
<string name="device_list_empty">Žiadne zariadenia</string>
|
||||
<string name="ok">OK</string>
|
||||
@@ -23,7 +26,8 @@
|
||||
<string name="no_permissions">Musíte povoliť oprávnenia na prístup k pripomienkam</string>
|
||||
<string name="send_ping">Poslať ping</string>
|
||||
<string name="open_mpris_controls">Otvoriť diaľkové ovládanie</string>
|
||||
<string name="open_mousepad">Otvoriť diaľkové ovládanie</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="category_connected_devices">Pripojené zariadenia</string>
|
||||
<string name="category_not_paired_devices">Nespárované zariadenia</string>
|
||||
<string name="category_remembered_devices">Zapamätané zariadenia</string>
|
||||
@@ -42,8 +46,17 @@
|
||||
<string name="error_invalid_key">Získaný nesprávny kľúč</string>
|
||||
<string name="pair_requested">Spárovanie vyžiadané</string>
|
||||
<string name="pairing_request_from">Požiadavka na spárovanie od %1s</string>
|
||||
<string name="received_url_title">Prijatý odkaz od %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_text">%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="tap_to_answer">Tapnite na odpoveď</string>
|
||||
<string name="reconnect">Znovu pripojiť</string>
|
||||
<string name="right_click">Poslať kliknutie pravým</string>
|
||||
<string name="middle_click">Poslať kliknutie stredným</string>
|
||||
<string name="show_keyboard">Zobraziť klávesnicu</string>
|
||||
<string name="device_not_paired">Zariadenie nespárované</string>
|
||||
<string name="request_pairing">Požiadavka na spárovanie</string>
|
||||
<string name="pairing_accept">Prijať</string>
|
||||
@@ -58,11 +71,31 @@
|
||||
<string name="mpris_ff">Pretočiť dopredu</string>
|
||||
<string name="mpris_next">Nasledovné</string>
|
||||
<string name="mpris_volume">Hlasitosť</string>
|
||||
<string name="mpris_settings">Multimediálne nastavenia</string>
|
||||
<string name="mpris_time_settings_title">Časový interval</string>
|
||||
<string name="mpris_time_settings_summary">Prispôsobiť čas na pretáčanie dopredu alebo späť pre multimediálne súbory.</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_newer">Toto zariadenie používa novšiu verziu protokolu</string>
|
||||
<string name="general_settings">Všeobecné nastavenia</string>
|
||||
<string name="plugin_settings">Nastavenia</string>
|
||||
<string name="device_name">Názov zariadenia</string>
|
||||
<string name="device_name_preference_summary">%s</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="share_notification_preference">Hlučné pripomienky</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_all_files">Všetky súbory</string>
|
||||
<string name="sftp_sdcard_num">SD karta %d</string>
|
||||
<string name="sftp_sdcard">SD karta</string>
|
||||
<string name="sftp_readonly">(iba na čítanie)</string>
|
||||
<string name="sftp_camera">Obrázky fotoaparátu</string>
|
||||
<string-array name="mpris_time_entries">
|
||||
<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>
|
||||
|
@@ -16,6 +16,8 @@
|
||||
<string name="pref_plugin_ping_desc">Skicka och ta emot ping</string>
|
||||
<string name="pref_plugin_notifications">Synkronisering av underrättelser</string>
|
||||
<string name="pref_plugin_notifications_desc">Kom åt underrättelser från andra apparater</string>
|
||||
<string name="pref_plugin_sharereceiver">Dela mottagare</string>
|
||||
<string name="pref_plugin_sharereceiver_desc">Spara inkommande filer i telefonens minne</string>
|
||||
<string name="plugin_not_available">Funktionen är inte tillgänglig i Android-versionen</string>
|
||||
<string name="device_list_empty">Inga apparater</string>
|
||||
<string name="ok">Ok</string>
|
||||
@@ -24,8 +26,8 @@
|
||||
<string name="no_permissions">Du måste ge rättighet att komma åt underrättelser</string>
|
||||
<string name="send_ping">Skicka ping</string>
|
||||
<string name="open_mpris_controls">Öppna fjärrkontroll</string>
|
||||
<string name="open_mousepad">Öppna kontroll med musplatta</string>
|
||||
<string name="mousepad_info">Flytta tummen över skärmen för att flytta muspekaren</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="category_connected_devices">Anslutna apparater</string>
|
||||
<string name="category_not_paired_devices">Inga parade apparater</string>
|
||||
<string name="category_remembered_devices">Ihågkomna apparater</string>
|
||||
@@ -44,8 +46,17 @@
|
||||
<string name="error_invalid_key">Ogiltig nyckel mottagen</string>
|
||||
<string name="pair_requested">Ihopparning begärd</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_text">Klicka för att öppna \'%1s\'</string>
|
||||
<string name="incoming_file_title">Inkommande fil från %1s</string>
|
||||
<string name="incoming_file_text">%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="tap_to_answer">Rör för att svara</string>
|
||||
<string name="reconnect">Anslut igen</string>
|
||||
<string name="right_click">Skicka högerklick</string>
|
||||
<string name="middle_click">Skicka mittenklick</string>
|
||||
<string name="show_keyboard">Visa tangentbord</string>
|
||||
<string name="device_not_paired">Apparat inte ihopparad</string>
|
||||
<string name="request_pairing">Begära ihopparning</string>
|
||||
<string name="pairing_accept">Acceptera</string>
|
||||
@@ -60,11 +71,31 @@
|
||||
<string name="mpris_ff">Snabbspola framåt</string>
|
||||
<string name="mpris_next">Nästa</string>
|
||||
<string name="mpris_volume">Volym</string>
|
||||
<string name="mpris_settings">Multimediainställningar</string>
|
||||
<string name="mpris_time_settings_title">Intervalltid</string>
|
||||
<string name="mpris_time_settings_summary">Justera tiden för att snabbspola framåt eller tillbaka en multimediafil.</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="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="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">
|
||||
<item>10 sekunder</item>
|
||||
<item>20 sekunder</item>
|
||||
<item>30 sekunder</item>
|
||||
<item>1 minut</item>
|
||||
<item>2 minuter</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
@@ -16,6 +16,8 @@
|
||||
<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">Ця можливість є недоступною для вашої версії для Android</string>
|
||||
<string name="device_list_empty">Немає пристроїв</string>
|
||||
<string name="ok">Гаразд</string>
|
||||
@@ -24,7 +26,7 @@
|
||||
<string name="no_permissions">Вам слід надати доступ до сповіщень</string>
|
||||
<string name="send_ping">Надіслати сигнал підтримання зв’язку</string>
|
||||
<string name="open_mpris_controls">Відкрити дистанційне керування</string>
|
||||
<string name="open_mousepad">Відкрити керування килимком для миші</string>
|
||||
<string name="open_mousepad">Відкрити керування сенсорною панеллю</string>
|
||||
<string name="mousepad_info">Проведіть по екрану пальцем, щоб пересунути вказівник миші</string>
|
||||
<string name="category_connected_devices">З’єднані пристрої</string>
|
||||
<string name="category_not_paired_devices">Непов’язані пристрої</string>
|
||||
@@ -44,8 +46,17 @@
|
||||
<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>
|
||||
@@ -60,11 +71,31 @@
|
||||
<string name="mpris_ff">Повний вперед</string>
|
||||
<string name="mpris_next">Далі</string>
|
||||
<string name="mpris_volume">Гучність</string>
|
||||
<string name="mpris_settings">Мультимедійні параметри</string>
|
||||
<string name="mpris_time_settings_title">Часовий інтервал</string>
|
||||
<string name="mpris_time_settings_summary">Скоригувати час швидкого гортання вперед або назад у мультимедійному файлі.</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="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="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-array name="mpris_time_entries">
|
||||
<item>10 секунд</item>
|
||||
<item>20 секунд</item>
|
||||
<item>30 секунд</item>
|
||||
<item>1 хвилина</item>
|
||||
<item>2 хвилини</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
14
src/main/res/values-v11/themes_kitkatcompatselector.xml
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- Generated with http://android-holo-colors.com -->
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<style name="KitKatCompatSelector" parent="Theme.AppCompat">
|
||||
|
||||
<item name="android:listChoiceBackgroundIndicator">@drawable/kitkatcompatselector_list_selector_holo_dark</item>
|
||||
|
||||
<item name="android:activatedBackgroundIndicator">@drawable/kitkatcompatselector_activated_background_holo_dark</item>
|
||||
|
||||
</style>
|
||||
|
||||
</resources>
|
6
src/main/res/values/attrs.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<declare-styleable name="MaxWidthImageButton">
|
||||
<attr name="maxWidth" format="dimension" />
|
||||
</declare-styleable>
|
||||
</resources>
|
4
src/main/res/values/colors_kitkatcompatselector.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="kitkatcompatselector_color">#33b5e5</color>
|
||||
</resources>
|
@@ -57,6 +57,7 @@
|
||||
<string name="reconnect">Reconnect</string>
|
||||
<string name="right_click">Send Right Click</string>
|
||||
<string name="middle_click">Send Middle Click</string>
|
||||
<string name="show_keyboard">Show Keyboard</string>
|
||||
<string name="device_not_paired">Device not paired</string>
|
||||
<string name="request_pairing">Request pairing</string>
|
||||
<string name="pairing_accept">Accept</string>
|
||||
@@ -71,13 +72,44 @@
|
||||
<string name="mpris_ff">Fast-forward</string>
|
||||
<string name="mpris_next">Next</string>
|
||||
<string name="mpris_volume">Volume</string>
|
||||
<string name="mpris_settings">Multimedia Settings</string>
|
||||
<string name="mpris_time_settings_title">Interval Time</string>
|
||||
<string name="mpris_time_settings_summary">Adjust the time to fast forward or rewind a multimedia file.</string>
|
||||
<string name="mpris_time_key" translatable="false">mpris_interval_time</string>
|
||||
<string name="mpris_time_default" translatable="false">10000000</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_newer">This device uses a newer protocol version</string>
|
||||
<string name="general_settings">General Settings</string>
|
||||
<string name="plugin_settings">Settings</string>
|
||||
<string name="plugin_settings_key" translatable="false">_preferences</string>
|
||||
<string name="device_name">Device name</string>
|
||||
<string name="device_name_preference_summary">%s</string>
|
||||
<string name="invalid_device_name">Invalid device name</string>
|
||||
<string name="shareplugin_text_saved">Received text, saved to clipboard</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="sftp_internal_storage">Internal storage</string>
|
||||
<string name="sftp_all_files">All files</string>
|
||||
<string name="sftp_sdcard_num">SD card %d</string>
|
||||
<string name="sftp_sdcard">SD card</string>
|
||||
<string name="sftp_readonly">(read only)</string>
|
||||
<string name="sftp_camera">Camera pictures</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>
|
||||
|
||||
</resources>
|
||||
|
18
src/main/res/values/styles_kitkatcompatselector.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- Generated with http://android-holo-colors.com -->
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<style name="ListViewKitKatCompatSelector" parent="android:Widget.ListView">
|
||||
<item name="android:listSelector">@drawable/kitkatcompatselector_list_selector_holo_dark</item>
|
||||
</style>
|
||||
|
||||
<style name="ListViewKitKatCompatSelector.White" parent="android:Widget.ListView.White">
|
||||
<item name="android:listSelector">@drawable/kitkatcompatselector_list_selector_holo_dark</item>
|
||||
</style>
|
||||
|
||||
<style name="SpinnerItemKitKatCompatSelector" parent="android:TextAppearance.Widget.TextView.SpinnerItem">
|
||||
<item name="android:textColor">#ffffff</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
16
src/main/res/values/themes_kitkatcompatselector.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- Generated with http://android-holo-colors.com -->
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<style name="KitKatCompatSelector" parent="Theme.AppCompat">
|
||||
|
||||
<item name="android:listViewStyle">@style/ListViewKitKatCompatSelector</item>
|
||||
|
||||
<item name="android:listViewWhiteStyle">@style/ListViewKitKatCompatSelector.White</item>
|
||||
|
||||
<item name="android:spinnerItemStyle">@style/SpinnerItemKitKatCompatSelector</item>
|
||||
|
||||
</style>
|
||||
|
||||
</resources>
|
15
src/main/res/xml/plugin_mpris_preferences.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ListPreference
|
||||
android:id="@+id/mpris_time_preference"
|
||||
android:key="@string/mpris_time_key"
|
||||
android:title="@string/mpris_time_settings_title"
|
||||
android:summary="@string/mpris_time_settings_summary"
|
||||
android:entries="@array/mpris_time_entries"
|
||||
android:entryValues="@array/mpris_time_entries_values"
|
||||
android:defaultValue="@string/mpris_time_default" />
|
||||
|
||||
</PreferenceScreen>
|