mirror of
https://github.com/KDE/kdeconnect-android
synced 2025-09-02 07:05:09 +00:00
Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a15cad9ec5 | ||
|
e98100f5f0 | ||
|
d19e7d2052 | ||
|
4e02c674f8 | ||
|
6aa49757fc | ||
|
3c10312d15 | ||
|
26e3363b30 | ||
|
4033233ec1 | ||
|
34e53576e1 | ||
|
a15d76c588 | ||
|
1acea73383 |
@@ -25,37 +25,37 @@
|
|||||||
<output url="file://$MODULE_DIR$/build/classes/debug" />
|
<output url="file://$MODULE_DIR$/build/classes/debug" />
|
||||||
<exclude-output />
|
<exclude-output />
|
||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<sourceFolder url="file://$MODULE_DIR$/build/source/r/debug" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/build/source/r/debug" isTestSource="false" generated="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/build/source/aidl/debug" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/build/source/aidl/debug" isTestSource="false" generated="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/build/source/rs/debug" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/build/source/rs/debug" isTestSource="false" generated="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/build/source/buildConfig/debug" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/build/source/buildConfig/debug" isTestSource="false" generated="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/build/res/rs/debug" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/build/res/rs/debug" type="java-resource" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/build/source/r/test" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/build/source/r/test" isTestSource="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/build/source/aidl/test" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/build/source/aidl/test" isTestSource="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/build/source/rs/test" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/build/source/rs/test" isTestSource="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/build/source/buildConfig/test" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/build/source/buildConfig/test" isTestSource="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/build/res/rs/test" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/build/res/rs/test" type="java-test-resource" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" isTestSource="false" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" isTestSource="false" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/res" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/aidl" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/aidl" isTestSource="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/assets" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/assets" isTestSource="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/java" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/java" isTestSource="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/jni" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/jni" isTestSource="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/rs" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/rs" isTestSource="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/res" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/res" type="java-test-resource" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/resources" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/instrumentTest/resources" type="java-test-resource" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/.git" />
|
<excludeFolder url="file://$MODULE_DIR$/.git" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
|
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/.idea" />
|
<excludeFolder url="file://$MODULE_DIR$/.idea" />
|
||||||
@@ -67,6 +67,7 @@
|
|||||||
<excludeFolder url="file://$MODULE_DIR$/build/incremental" />
|
<excludeFolder url="file://$MODULE_DIR$/build/incremental" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/libs" />
|
<excludeFolder url="file://$MODULE_DIR$/build/libs" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/manifests" />
|
<excludeFolder url="file://$MODULE_DIR$/build/manifests" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/res" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/symbols" />
|
<excludeFolder url="file://$MODULE_DIR$/build/symbols" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
|
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
|
||||||
</content>
|
</content>
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="org.kde.kdeconnect_tp"
|
package="org.kde.kdeconnect_tp"
|
||||||
android:versionCode="10"
|
android:versionCode="11"
|
||||||
android:versionName="0.4.1">
|
android:versionName="0.4.2">
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="9"
|
<uses-sdk android:minSdkVersion="9"
|
||||||
android:targetSdkVersion="18" />
|
android:targetSdkVersion="18" />
|
||||||
@@ -25,6 +25,7 @@
|
|||||||
<uses-permission android:name="android.permission.BATTERY_STATS" />
|
<uses-permission android:name="android.permission.BATTERY_STATS" />
|
||||||
<uses-permission android:name="android.permission.RECEIVE_SMS" android:required="false" />
|
<uses-permission android:name="android.permission.RECEIVE_SMS" android:required="false" />
|
||||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||||
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
|
@@ -529,7 +529,7 @@ public class Device implements BaseLink.PackageReceiver {
|
|||||||
return plugins.get(name);
|
return plugins.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addPlugin(final String name) {
|
private synchronized void addPlugin(final String name) {
|
||||||
Plugin existing = plugins.get(name);
|
Plugin existing = plugins.get(name);
|
||||||
if (existing != null) {
|
if (existing != null) {
|
||||||
Log.w("addPlugin","plugin already present:" + name);
|
Log.w("addPlugin","plugin already present:" + name);
|
||||||
@@ -575,7 +575,7 @@ public class Device implements BaseLink.PackageReceiver {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean removePlugin(String name) {
|
private synchronized boolean removePlugin(String name) {
|
||||||
|
|
||||||
Plugin plugin = plugins.remove(name);
|
Plugin plugin = plugins.remove(name);
|
||||||
Plugin failedPlugin = failedPlugins.remove(name);
|
Plugin failedPlugin = failedPlugins.remove(name);
|
||||||
|
@@ -17,9 +17,11 @@ import org.kde.kdeconnect_tp.R;
|
|||||||
|
|
||||||
public class BatteryPlugin extends Plugin {
|
public class BatteryPlugin extends Plugin {
|
||||||
|
|
||||||
private NetworkPackage lastPackage = null;
|
// keep these fields in sync with kdeconnect-kded:BatteryPlugin.h:ThresholdBatteryEvent
|
||||||
|
private static final int THRESHOLD_EVENT_NONE= 0;
|
||||||
|
private static final int THRESHOLD_EVENT_BATTERY_LOW = 1;
|
||||||
|
|
||||||
private IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
|
NetworkPackage lastInfo = null;
|
||||||
|
|
||||||
/*static {
|
/*static {
|
||||||
PluginFactory.registerPlugin(BatteryPlugin.class);
|
PluginFactory.registerPlugin(BatteryPlugin.class);
|
||||||
@@ -50,36 +52,36 @@ public class BatteryPlugin extends Plugin {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private BroadcastReceiver receiver = new BroadcastReceiver() {
|
private BroadcastReceiver receiver = new BroadcastReceiver() {
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent batteryIntent) {
|
||||||
|
|
||||||
Log.i("BatteryPlugin", "Battery event");
|
Intent batteryChargeIntent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
|
||||||
|
int level = batteryChargeIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
|
||||||
|
int scale = batteryChargeIntent.getIntExtra(BatteryManager.EXTRA_SCALE, 1);
|
||||||
|
int currentCharge = level*100 / scale;
|
||||||
|
boolean isCharging = (0 != batteryChargeIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0));
|
||||||
|
boolean lowBattery = Intent.ACTION_BATTERY_LOW.equals(batteryIntent.getAction());
|
||||||
|
int thresholdEvent = lowBattery? THRESHOLD_EVENT_BATTERY_LOW : THRESHOLD_EVENT_NONE;
|
||||||
|
|
||||||
boolean isCharging = (0 != intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0));
|
if (lastInfo != null
|
||||||
|
&& isCharging != lastInfo.getBoolean("isCharging")
|
||||||
int currentCharge = 100;
|
&& currentCharge != lastInfo.getInt("currentCharge")
|
||||||
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
|
&& thresholdEvent != lastInfo.getInt("thresholdEvent")
|
||||||
if (status != BatteryManager.BATTERY_STATUS_FULL) {
|
|
||||||
Intent batteryStatus = context.registerReceiver(null, filter);
|
|
||||||
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
|
|
||||||
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
|
|
||||||
currentCharge = level*100 / scale;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Only notify if change is meaningful enough
|
|
||||||
if (lastPackage == null
|
|
||||||
|| (
|
|
||||||
isCharging != lastPackage.getBoolean("isCharging")
|
|
||||||
|| currentCharge != lastPackage.getInt("currentCharge")
|
|
||||||
)
|
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
//Do not send again if nothing has changed
|
||||||
|
return;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_BATTERY);
|
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_BATTERY);
|
||||||
np.set("isCharging", isCharging);
|
|
||||||
np.set("currentCharge", currentCharge);
|
np.set("currentCharge", currentCharge);
|
||||||
|
np.set("isCharging", isCharging);
|
||||||
|
np.set("thresholdEvent", thresholdEvent);
|
||||||
device.sendPackage(np);
|
device.sendPackage(np);
|
||||||
lastPackage = np;
|
lastInfo = np;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -87,12 +89,14 @@ public class BatteryPlugin extends Plugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreate() {
|
public boolean onCreate() {
|
||||||
context.registerReceiver(receiver, filter);
|
context.registerReceiver(receiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
|
||||||
|
context.registerReceiver(receiver, new IntentFilter(Intent.ACTION_BATTERY_LOW));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
|
//It's okay to call this only once, even though we registered it for two filters
|
||||||
context.unregisterReceiver(receiver);
|
context.unregisterReceiver(receiver);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,8 +105,8 @@ public class BatteryPlugin extends Plugin {
|
|||||||
if (!np.getType().equals(NetworkPackage.PACKAGE_TYPE_BATTERY)) return false;
|
if (!np.getType().equals(NetworkPackage.PACKAGE_TYPE_BATTERY)) return false;
|
||||||
|
|
||||||
if (np.getBoolean("request")) {
|
if (np.getBoolean("request")) {
|
||||||
if (lastPackage != null) {
|
if (lastInfo != null) {
|
||||||
device.sendPackage(lastPackage);
|
device.sendPackage(lastInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -24,6 +24,7 @@ import org.kde.kdeconnect_tp.R;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.ConcurrentModificationException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class DeviceActivity extends ActionBarActivity {
|
public class DeviceActivity extends ActionBarActivity {
|
||||||
@@ -63,18 +64,25 @@ public class DeviceActivity extends ActionBarActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
//Buttons list
|
try {
|
||||||
ArrayList<ListAdapter.Item> items = new ArrayList<ListAdapter.Item>();
|
//Buttons list
|
||||||
final Collection<Plugin> plugins = device.getLoadedPlugins().values();
|
ArrayList<ListAdapter.Item> items = new ArrayList<ListAdapter.Item>();
|
||||||
for (Plugin p : plugins) {
|
final Collection<Plugin> plugins = device.getLoadedPlugins().values();
|
||||||
Button b = p.getInterfaceButton(DeviceActivity.this);
|
for (Plugin p : plugins) {
|
||||||
if (b != null) {
|
Button b = p.getInterfaceButton(DeviceActivity.this);
|
||||||
items.add(new SectionItem(p.getDisplayName()));
|
if (b != null) {
|
||||||
items.add(new ButtonItem(b));
|
items.add(new SectionItem(p.getDisplayName()));
|
||||||
|
items.add(new ButtonItem(b));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ListView buttonsList = (ListView)findViewById(R.id.buttons_list);
|
||||||
|
buttonsList.setAdapter(new ListAdapter(DeviceActivity.this, items));
|
||||||
|
|
||||||
|
} catch(ConcurrentModificationException e) {
|
||||||
|
Log.e("DeviceActivity", "ConcurrentModificationException");
|
||||||
|
this.run(); //Try again
|
||||||
}
|
}
|
||||||
ListView buttonsList = (ListView)findViewById(R.id.buttons_list);
|
|
||||||
buttonsList.setAdapter(new ListAdapter(DeviceActivity.this, items));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@@ -180,6 +180,9 @@ public class ShareToReceiver extends ActionBarActivity {
|
|||||||
|
|
||||||
if (uri.getScheme().equals("file")) {
|
if (uri.getScheme().equals("file")) {
|
||||||
// file:// is a non media uri, so we cannot query the ContentProvider
|
// file:// is a non media uri, so we cannot query the ContentProvider
|
||||||
|
|
||||||
|
np.set("filename", uri.getLastPathSegment());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
size = (int)new File(uri.getPath()).length();
|
size = (int)new File(uri.getPath()).length();
|
||||||
np.setPayload(inputStream, size);
|
np.setPayload(inputStream, size);
|
||||||
@@ -187,35 +190,23 @@ public class ShareToReceiver extends ActionBarActivity {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Log.e("ShareToReceiver", "Could not obtain file size");
|
Log.e("ShareToReceiver", "Could not obtain file size");
|
||||||
}
|
}
|
||||||
try{
|
|
||||||
np.set("filename", uri.getLastPathSegment());
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
Log.e("ShareToReceiver", "Could not obtain file name");
|
|
||||||
}
|
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
// Probably a content:// uri, so we query the Media content provider
|
// Probably a content:// uri, so we query the Media content provider
|
||||||
String[] proj = { MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.SIZE, MediaStore.MediaColumns.DISPLAY_NAME };
|
|
||||||
Cursor cursor = managedQuery(uri, proj, null, null, null);
|
|
||||||
try {
|
|
||||||
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE);
|
|
||||||
cursor.moveToFirst();
|
|
||||||
size = cursor.getInt(column_index);
|
|
||||||
} catch(Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
Log.e("ShareToReceiver", "Could not obtain file size");
|
|
||||||
}
|
|
||||||
|
|
||||||
//Log.e("ShareToReceiver", "Size "+size);
|
|
||||||
np.setPayload(inputStream, size);
|
|
||||||
|
|
||||||
|
Cursor cursor = null;
|
||||||
try {
|
try {
|
||||||
|
String[] proj = { MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.SIZE, MediaStore.MediaColumns.DISPLAY_NAME };
|
||||||
|
cursor = getContentResolver().query(uri, proj, null, null, null);
|
||||||
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
|
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
|
||||||
cursor.moveToFirst();
|
cursor.moveToFirst();
|
||||||
String path = cursor.getString(column_index);
|
String path = cursor.getString(column_index);
|
||||||
np.set("filename", Uri.parse(path).getLastPathSegment());
|
np.set("filename", Uri.parse(path).getLastPathSegment());
|
||||||
|
np.set("size", (int)new File(path).length());
|
||||||
} catch(Exception _) {
|
} catch(Exception _) {
|
||||||
|
|
||||||
|
Log.e("ShareToReceiver", "Could not resolve media to a file, trying to get info as media");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME);
|
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME);
|
||||||
cursor.moveToFirst();
|
cursor.moveToFirst();
|
||||||
@@ -225,9 +216,22 @@ public class ShareToReceiver extends ActionBarActivity {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Log.e("ShareToReceiver", "Could not obtain file name");
|
Log.e("ShareToReceiver", "Could not obtain file name");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE);
|
||||||
|
cursor.moveToFirst();
|
||||||
|
//For some reason this size can differ from the actual file size!
|
||||||
|
size = cursor.getInt(column_index);
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
Log.e("ShareToReceiver", "Could not obtain file size");
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
cursor.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
cursor.close();
|
np.setPayload(inputStream, size);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
device.sendPackage(np, new Device.SendPackageFinishedCallback() {
|
device.sendPackage(np, new Device.SendPackageFinishedCallback() {
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
<string name="pref_plugin_clipboard">Abgleich der Zwischenablage</string>
|
<string name="pref_plugin_clipboard">Abgleich der Zwischenablage</string>
|
||||||
<string name="pref_plugin_clipboard_desc">Inhalt der Zwischenablage freigeben</string>
|
<string name="pref_plugin_clipboard_desc">Inhalt der Zwischenablage freigeben</string>
|
||||||
<string name="pref_plugin_mpris">Multimedia-Fernbedienungen</string>
|
<string name="pref_plugin_mpris">Multimedia-Fernbedienungen</string>
|
||||||
|
<string name="pref_plugin_mpris_desc">Audio und Video mit Ihrem Telefon steuern</string>
|
||||||
<string name="pref_plugin_ping">Ping</string>
|
<string name="pref_plugin_ping">Ping</string>
|
||||||
<string name="pref_plugin_ping_desc">Senden und Empfangen von Pings</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">Benachrichtigungs-Abgleich</string>
|
||||||
@@ -16,10 +17,12 @@
|
|||||||
<string name="ok">OK</string>
|
<string name="ok">OK</string>
|
||||||
<string name="cancel">Abbrechen</string>
|
<string name="cancel">Abbrechen</string>
|
||||||
<string name="open_settings">Einstellungen öffnen</string>
|
<string name="open_settings">Einstellungen öffnen</string>
|
||||||
|
<string name="no_permissions">Sie müssen die Erlaubnis zum Zugriff auf Benachrichtigungen erteilen</string>
|
||||||
<string name="send_ping">Ping senden</string>
|
<string name="send_ping">Ping senden</string>
|
||||||
<string name="open_mpris_controls">Fernbedienung öffnen</string>
|
<string name="open_mpris_controls">Fernbedienung öffnen</string>
|
||||||
<string name="category_connected_devices">Verbundene Geräte</string>
|
<string name="category_connected_devices">Verbundene Geräte</string>
|
||||||
<string name="category_not_paired_devices">Keine angeschlossenen Geräte</string>
|
<string name="category_not_paired_devices">Keine angeschlossenen Geräte</string>
|
||||||
|
<string name="category_remembered_devices">Gemerkte Geräte</string>
|
||||||
<string name="device_menu_plugins">Module auswählen</string>
|
<string name="device_menu_plugins">Module auswählen</string>
|
||||||
<string name="device_menu_unpair">Verbindung trennen</string>
|
<string name="device_menu_unpair">Verbindung trennen</string>
|
||||||
<string name="unknown_device">Unbekanntes Gerät</string>
|
<string name="unknown_device">Unbekanntes Gerät</string>
|
||||||
|
@@ -49,12 +49,15 @@
|
|||||||
<string name="settings">Nastavenia KDE Connect</string>
|
<string name="settings">Nastavenia KDE Connect</string>
|
||||||
<string name="mpris_play">Prehrať</string>
|
<string name="mpris_play">Prehrať</string>
|
||||||
<string name="mpris_previous">Predošlé</string>
|
<string name="mpris_previous">Predošlé</string>
|
||||||
|
<string name="mpris_rew">Pretočiť dozadu</string>
|
||||||
|
<string name="mpris_ff">Pretočiť dopredu</string>
|
||||||
<string name="mpris_next">Nasledovné</string>
|
<string name="mpris_next">Nasledovné</string>
|
||||||
<string name="mpris_volume">Hlasitosť</string>
|
<string name="mpris_volume">Hlasitosť</string>
|
||||||
<string name="share_to">Zdieľať pre...</string>
|
<string name="share_to">Zdieľať pre...</string>
|
||||||
<string name="protocol_version_older">Toto zariadenie používa starú verziu protokolu</string>
|
<string name="protocol_version_older">Toto zariadenie používa starú verziu protokolu</string>
|
||||||
<string name="protocol_version_newer">Toto zariadenie používa novšiu verziu protokolu</string>
|
<string name="protocol_version_newer">Toto zariadenie používa novšiu verziu protokolu</string>
|
||||||
<string name="general_settings">Otvoriť nastavenia</string>
|
<string name="general_settings">Všeobecné nastavenia</string>
|
||||||
<string name="device_name">Zariadenie nespárované</string>
|
<string name="device_name">Názov zariadenia</string>
|
||||||
<string name="invalid_device_name">Získaný nesprávny kľúč</string>
|
<string name="device_name_preference_summary">%s</string>
|
||||||
|
<string name="invalid_device_name">Neplatný názov zariadenia</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Reference in New Issue
Block a user