2
0
mirror of https://github.com/KDE/kdeconnect-android synced 2025-08-22 18:07:55 +00:00

Added battery reporting interface

This commit is contained in:
Albert Vaca 2013-07-26 16:23:26 +02:00
parent 96f913ba79
commit 4176d9b15e
11 changed files with 79 additions and 9 deletions

View File

@ -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>

View File

@ -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() {

View File

@ -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();

View File

@ -85,7 +85,7 @@ public class Device {
return null; return null;
} }
}.execute(); }.execute();
Log.e("Device","/sendPackage");
return true; //FIXME return true; //FIXME
} }

View File

@ -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();

View File

@ -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);
} }

View File

@ -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;
}
}

View File

@ -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;
} }
} }

View File

@ -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;
} }
} }

View File

@ -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;
} }
} }

View File

@ -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$">