mirror of
https://github.com/KDE/kdeconnect-android
synced 2025-08-22 09:58:08 +00:00
Added battery reporting interface
This commit is contained in:
parent
96f913ba79
commit
4176d9b15e
@ -55,6 +55,7 @@
|
|||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||||
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
|
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
|
||||||
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
|
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
|
||||||
|
<uses-permission android:name="android.permission.BATTERY_STATS" />
|
||||||
|
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
@ -12,6 +12,7 @@ import org.kde.connect.ComputerLinks.BaseComputerLink;
|
|||||||
import org.kde.connect.LinkProviders.AvahiTcpLinkProvider;
|
import org.kde.connect.LinkProviders.AvahiTcpLinkProvider;
|
||||||
import org.kde.connect.LinkProviders.BaseLinkProvider;
|
import org.kde.connect.LinkProviders.BaseLinkProvider;
|
||||||
import org.kde.connect.PackageInterfaces.BasePackageInterface;
|
import org.kde.connect.PackageInterfaces.BasePackageInterface;
|
||||||
|
import org.kde.connect.PackageInterfaces.BatteryMonitorPackageInterface;
|
||||||
import org.kde.connect.PackageInterfaces.CallPackageInterface;
|
import org.kde.connect.PackageInterfaces.CallPackageInterface;
|
||||||
import org.kde.connect.PackageInterfaces.ClipboardPackageInterface;
|
import org.kde.connect.PackageInterfaces.ClipboardPackageInterface;
|
||||||
import org.kde.connect.PackageInterfaces.PingPackageInterface;
|
import org.kde.connect.PackageInterfaces.PingPackageInterface;
|
||||||
@ -43,6 +44,11 @@ public class BackgroundService extends Service {
|
|||||||
if (settings.getBoolean("clipboard_interface", true)) {
|
if (settings.getBoolean("clipboard_interface", true)) {
|
||||||
emitters.add(new ClipboardPackageInterface(getApplicationContext()));
|
emitters.add(new ClipboardPackageInterface(getApplicationContext()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (settings.getBoolean("battery_interface", true)) {
|
||||||
|
emitters.add(new BatteryMonitorPackageInterface(getApplicationContext()));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerLinkProviders() {
|
public void registerLinkProviders() {
|
||||||
|
@ -63,7 +63,7 @@ public class TcpComputerLink extends BaseComputerLink {
|
|||||||
//Wait unit it is connected (this call makes it blocking, but we are on a thread anyway)
|
//Wait unit it is connected (this call makes it blocking, but we are on a thread anyway)
|
||||||
future.awaitUninterruptibly();
|
future.awaitUninterruptibly();
|
||||||
if (!future.isConnected()) Log.e("TcpComputerLink","Could not connect");
|
if (!future.isConnected()) Log.e("TcpComputerLink","Could not connect");
|
||||||
Log.e("TcpComputerLink","connected");
|
else Log.e("TcpComputerLink","connected");
|
||||||
session = future.getSession();
|
session = future.getSession();
|
||||||
}
|
}
|
||||||
}).run();
|
}).run();
|
||||||
|
@ -85,7 +85,7 @@ public class Device {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}.execute();
|
}.execute();
|
||||||
Log.e("Device","/sendPackage");
|
|
||||||
return true; //FIXME
|
return true; //FIXME
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ public class NetworkPackage {
|
|||||||
public final static String PACKAGE_TYPE_IDENTITY = "kdeconnect.identity";
|
public final static String PACKAGE_TYPE_IDENTITY = "kdeconnect.identity";
|
||||||
public final static String PACKAGE_TYPE_PING = "kdeconnect.ping";
|
public final static String PACKAGE_TYPE_PING = "kdeconnect.ping";
|
||||||
public final static String PACKAGE_TYPE_NOTIFICATION = "kdeconnect.notification";
|
public final static String PACKAGE_TYPE_NOTIFICATION = "kdeconnect.notification";
|
||||||
|
public final static String PACKAGE_TYPE_BATTERY = "kdeconnect.battery";
|
||||||
public final static String PACKAGE_TYPE_CALL = "kdeconnect.call";
|
public final static String PACKAGE_TYPE_CALL = "kdeconnect.call";
|
||||||
public final static String PACKAGE_TYPE_CLIPBOARD = "kdeconnect.clipboard";
|
public final static String PACKAGE_TYPE_CLIPBOARD = "kdeconnect.clipboard";
|
||||||
|
|
||||||
@ -51,6 +52,9 @@ public class NetworkPackage {
|
|||||||
public boolean getBoolean(String key) { return mBody.optBoolean(key,false); }
|
public boolean getBoolean(String key) { return mBody.optBoolean(key,false); }
|
||||||
public boolean getBoolean(String key, boolean defaultValue) { return mBody.optBoolean(key,defaultValue); }
|
public boolean getBoolean(String key, boolean defaultValue) { return mBody.optBoolean(key,defaultValue); }
|
||||||
public void set(String key, boolean value) { try { mBody.put(key,value); } catch(Exception e) { } }
|
public void set(String key, boolean value) { try { mBody.put(key,value); } catch(Exception e) { } }
|
||||||
|
public double getDouble(String key) { return mBody.optDouble(key,Double.NaN); }
|
||||||
|
public double getDouble(String key, double defaultValue) { return mBody.optDouble(key,defaultValue); }
|
||||||
|
public void set(String key, double value) { try { mBody.put(key,value); } catch(Exception e) { } }
|
||||||
|
|
||||||
public String serialize() {
|
public String serialize() {
|
||||||
JSONObject jo = new JSONObject();
|
JSONObject jo = new JSONObject();
|
||||||
|
@ -34,6 +34,6 @@ public abstract class BasePackageInterface {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//To override
|
//To override, returns true if package was handled
|
||||||
public abstract void onPackageReceived(Device d, NetworkPackage np);
|
public abstract boolean onPackageReceived(Device d, NetworkPackage np);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,55 @@
|
|||||||
|
package org.kde.connect.PackageInterfaces;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
|
import android.os.BatteryManager;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import org.kde.connect.Device;
|
||||||
|
import org.kde.connect.NetworkPackage;
|
||||||
|
|
||||||
|
public class BatteryMonitorPackageInterface extends BasePackageInterface {
|
||||||
|
|
||||||
|
public BatteryMonitorPackageInterface(final Context context) {
|
||||||
|
final IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
|
||||||
|
context.registerReceiver(new BroadcastReceiver() {
|
||||||
|
public int oldCurrentCharge;
|
||||||
|
public boolean oldIsCharging;
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
|
||||||
|
Log.e("BatteryMonitorPackageInterface", "Battery event");
|
||||||
|
|
||||||
|
boolean isCharging = (0 != intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0));
|
||||||
|
|
||||||
|
int currentCharge = 100;
|
||||||
|
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
|
||||||
|
if (status != BatteryManager.BATTERY_STATUS_FULL) {
|
||||||
|
Intent batteryStatus = context.registerReceiver(null, ifilter);
|
||||||
|
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 (isCharging != oldIsCharging || currentCharge != oldCurrentCharge) {
|
||||||
|
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_BATTERY);
|
||||||
|
np.set("isCharging", isCharging);
|
||||||
|
np.set("currentCharge", currentCharge);
|
||||||
|
sendPackage(np);
|
||||||
|
oldIsCharging = isCharging;
|
||||||
|
oldCurrentCharge = currentCharge;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, ifilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onPackageReceived(Device d, NetworkPackage np) {
|
||||||
|
//Do nothing
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -101,7 +101,8 @@ public class CallPackageInterface extends BasePackageInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPackageReceived(Device d, NetworkPackage np) {
|
public boolean onPackageReceived(Device d, NetworkPackage np) {
|
||||||
//Do nothing
|
//Do nothing
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,10 +37,12 @@ public class ClipboardPackageInterface extends BasePackageInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPackageReceived(Device d, NetworkPackage np) {
|
public boolean onPackageReceived(Device d, NetworkPackage np) {
|
||||||
if (np.getType().equals(NetworkPackage.PACKAGE_TYPE_CLIPBOARD)) {
|
if (np.getType().equals(NetworkPackage.PACKAGE_TYPE_CLIPBOARD)) {
|
||||||
ignore_next_clipboard_change = true;
|
ignore_next_clipboard_change = true;
|
||||||
cm.setText(np.getString("content"));
|
cm.setText(np.getString("content"));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ public class PingPackageInterface extends BasePackageInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPackageReceived(Device d, NetworkPackage np) {
|
public boolean onPackageReceived(Device d, NetworkPackage np) {
|
||||||
Log.e("PingPackageReceiver", "onPackageReceived");
|
Log.e("PingPackageReceiver", "onPackageReceived");
|
||||||
if (np.getType().equals(NetworkPackage.PACKAGE_TYPE_PING)) {
|
if (np.getType().equals(NetworkPackage.PACKAGE_TYPE_PING)) {
|
||||||
Log.e("PingPackageReceiver", "was a ping!");
|
Log.e("PingPackageReceiver", "was a ping!");
|
||||||
@ -42,8 +42,9 @@ public class PingPackageInterface extends BasePackageInterface {
|
|||||||
|
|
||||||
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
notificationManager.notify(0, noti);
|
notificationManager.notify(0, noti);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module external.linked.project.path="$MODULE_DIR$/build.gradle" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
|
<module external.linked.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
|
||||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
<exclude-output />
|
<exclude-output />
|
||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
Loading…
x
Reference in New Issue
Block a user