diff --git a/KdeConnect/src/main/AndroidManifest.xml b/KdeConnect/src/main/AndroidManifest.xml
index f6056a2c..3a1fd2da 100644
--- a/KdeConnect/src/main/AndroidManifest.xml
+++ b/KdeConnect/src/main/AndroidManifest.xml
@@ -14,7 +14,6 @@
android:theme="@style/AppTheme" >
-
@@ -25,6 +24,12 @@
+
+
+
diff --git a/KdeConnect/src/main/java/org/kde/connect/BackgroundService.java b/KdeConnect/src/main/java/org/kde/connect/BackgroundService.java
index f5cc1b3d..609fcc38 100644
--- a/KdeConnect/src/main/java/org/kde/connect/BackgroundService.java
+++ b/KdeConnect/src/main/java/org/kde/connect/BackgroundService.java
@@ -15,6 +15,7 @@ import org.kde.connect.PackageInterfaces.BasePackageInterface;
import org.kde.connect.PackageInterfaces.BatteryMonitorPackageInterface;
import org.kde.connect.PackageInterfaces.CallPackageInterface;
import org.kde.connect.PackageInterfaces.ClipboardPackageInterface;
+import org.kde.connect.PackageInterfaces.MprisControlPackageInterface;
import org.kde.connect.PackageInterfaces.PingPackageInterface;
import java.util.ArrayList;
@@ -24,36 +25,46 @@ public class BackgroundService extends Service {
SharedPreferences settings;
- ArrayList locators = new ArrayList();
+ ArrayList linkProviders = new ArrayList();
- ArrayList emitters = new ArrayList();
+ ArrayList packageInterfaces = new ArrayList();
HashMap devices = new HashMap();
- PingPackageInterface pingEmitter;
-
private void registerPackageInterfaces() {
if (settings.getBoolean("call_interface", true)) {
- emitters.add(new CallPackageInterface(getApplicationContext()));
+ packageInterfaces.add(new CallPackageInterface(getApplicationContext()));
}
if (settings.getBoolean("ping_interface", true)) {
- emitters.add(pingEmitter);
+ packageInterfaces.add(new PingPackageInterface(getApplicationContext()));
}
if (settings.getBoolean("clipboard_interface", true)) {
- emitters.add(new ClipboardPackageInterface(getApplicationContext()));
+ packageInterfaces.add(new ClipboardPackageInterface(getApplicationContext()));
}
if (settings.getBoolean("battery_interface", true)) {
- emitters.add(new BatteryMonitorPackageInterface(getApplicationContext()));
+ packageInterfaces.add(new BatteryMonitorPackageInterface(getApplicationContext()));
}
+ if (settings.getBoolean("mpris_interface", true)) {
+ packageInterfaces.add(new MprisControlPackageInterface(getApplicationContext()));
+ }
+
+
+ }
+
+ public BasePackageInterface getPackageInterface(Class c) {
+ for (BasePackageInterface pi : packageInterfaces) {
+ if (c.isInstance(pi)) return pi;
+ }
+ return null;
}
public void registerLinkProviders() {
if (settings.getBoolean("avahitcp_link", true)) {
- locators.add(new AvahiTcpLinkProvider(this));
+ linkProviders.add(new AvahiTcpLinkProvider(this));
}
}
@@ -78,7 +89,7 @@ public class BackgroundService extends Service {
private void startDiscovery() {
Log.i("StartDiscovery","Registering connection receivers");
- for (BaseLinkProvider a : locators) {
+ for (BaseLinkProvider a : linkProviders) {
a.reachComputers(new BaseLinkProvider.ConnectionReceiver() {
@Override
public void onConnectionAccepted(String deviceId, String name, BaseComputerLink link) {
@@ -91,7 +102,7 @@ public class BackgroundService extends Service {
Log.i("BackgroundService", "unknown device");
Device device = new Device(deviceId, name, link);
devices.put(deviceId, device);
- for (BasePackageInterface pe : emitters) {
+ for (BasePackageInterface pe : packageInterfaces) {
pe.addDevice(device);
device.addPackageReceiver(pe);
}
@@ -112,10 +123,6 @@ public class BackgroundService extends Service {
}
}
- public void sendPing() {
- pingEmitter.sendPing();
- }
-
//This will called only once, even if we launch the service intent several times
@Override
public void onCreate() {
@@ -125,8 +132,6 @@ public class BackgroundService extends Service {
settings = getSharedPreferences("KdeConnect", 0);
- pingEmitter = new PingPackageInterface(getApplicationContext());
-
registerPackageInterfaces();
registerLinkProviders();
startDiscovery();
diff --git a/KdeConnect/src/main/java/org/kde/connect/MainActivity.java b/KdeConnect/src/main/java/org/kde/connect/MainActivity.java
index 65567c5b..a353a442 100644
--- a/KdeConnect/src/main/java/org/kde/connect/MainActivity.java
+++ b/KdeConnect/src/main/java/org/kde/connect/MainActivity.java
@@ -1,19 +1,15 @@
package org.kde.connect;
import android.app.Activity;
-import android.content.ComponentName;
import android.content.Intent;
-import android.content.ServiceConnection;
-import android.net.nsd.NsdServiceInfo;
import android.os.Bundle;
-import android.os.IBinder;
-import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
+import org.kde.connect.PackageInterfaces.PingPackageInterface;
import org.kde.kdeconnect.R;
public class MainActivity extends Activity {
@@ -33,7 +29,6 @@ public class MainActivity extends Activity {
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
- Log.i("MainActivity","Button1");
BackgroundService.RunCommand(MainActivity.this, new BackgroundService.InstanceCallback() {
@Override
public void onServiceStart(BackgroundService service) {
@@ -46,24 +41,34 @@ public class MainActivity extends Activity {
findViewById(R.id.button2).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
- Log.i("MainActivity","Button2");
BackgroundService.RunCommand(MainActivity.this, new BackgroundService.InstanceCallback() {
@Override
public void onServiceStart(BackgroundService service) {
- service.sendPing();
+ PingPackageInterface pi = (PingPackageInterface) service.getPackageInterface(PingPackageInterface.class);
+ pi.sendPing();
}
});
}
});
- final ListView list = (ListView)findViewById(R.id.listView1);
-
-
findViewById(R.id.button3).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
- Log.i("MainActivity","Button3");
+ BackgroundService.RunCommand(MainActivity.this, new BackgroundService.InstanceCallback() {
+ @Override
+ public void onServiceStart(BackgroundService service) {
+ Intent intent = new Intent(MainActivity.this, MprisActivity.class);
+ startActivity(intent);
+ }
+ });
+
+ }
+ });
+
+ findViewById(R.id.button4).setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
BackgroundService.RunCommand(MainActivity.this, new BackgroundService.InstanceCallback() {
@Override
public void onServiceStart(final BackgroundService service) {
@@ -71,6 +76,7 @@ public class MainActivity extends Activity {
@Override
public void run() {
String[] listContent = service.getVisibleDevices().toArray(new String[0]);
+ ListView list = (ListView)findViewById(R.id.listView1);
list.setAdapter(new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, listContent));
}
});
diff --git a/KdeConnect/src/main/java/org/kde/connect/MprisActivity.java b/KdeConnect/src/main/java/org/kde/connect/MprisActivity.java
new file mode 100644
index 00000000..341cb9aa
--- /dev/null
+++ b/KdeConnect/src/main/java/org/kde/connect/MprisActivity.java
@@ -0,0 +1,60 @@
+package org.kde.connect;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+import org.kde.connect.PackageInterfaces.MprisControlPackageInterface;
+import org.kde.kdeconnect.R;
+
+public class MprisActivity extends Activity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.mpris_control);
+
+ findViewById(R.id.play_button).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() {
+ @Override
+ public void onServiceStart(BackgroundService service) {
+ MprisControlPackageInterface mpris = (MprisControlPackageInterface)service.getPackageInterface(MprisControlPackageInterface.class);
+ mpris.sendAction("PlayPause");
+ }
+ });
+ }
+ });
+
+ findViewById(R.id.prev_button).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() {
+ @Override
+ public void onServiceStart(BackgroundService service) {
+ MprisControlPackageInterface mpris = (MprisControlPackageInterface)service.getPackageInterface(MprisControlPackageInterface.class);
+ mpris.sendAction("Previous");
+ }
+ });
+ }
+ });
+
+ findViewById(R.id.next_button).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() {
+ @Override
+ public void onServiceStart(BackgroundService service) {
+ MprisControlPackageInterface mpris = (MprisControlPackageInterface)service.getPackageInterface(MprisControlPackageInterface.class);
+ mpris.sendAction("Next");
+ }
+ });
+ }
+ });
+ }
+
+}
diff --git a/KdeConnect/src/main/java/org/kde/connect/NetworkPackage.java b/KdeConnect/src/main/java/org/kde/connect/NetworkPackage.java
index 3d098946..ed8e05b9 100644
--- a/KdeConnect/src/main/java/org/kde/connect/NetworkPackage.java
+++ b/KdeConnect/src/main/java/org/kde/connect/NetworkPackage.java
@@ -18,6 +18,7 @@ public class NetworkPackage {
public final static String PACKAGE_TYPE_BATTERY = "kdeconnect.battery";
public final static String PACKAGE_TYPE_CALL = "kdeconnect.call";
public final static String PACKAGE_TYPE_CLIPBOARD = "kdeconnect.clipboard";
+ public final static String PACKAGE_TYPE_MPRIS = "kdeconnect.mpris";
private long mId;
private String mType;
diff --git a/KdeConnect/src/main/java/org/kde/connect/PackageInterfaces/MprisControlPackageInterface.java b/KdeConnect/src/main/java/org/kde/connect/PackageInterfaces/MprisControlPackageInterface.java
new file mode 100644
index 00000000..b64ffded
--- /dev/null
+++ b/KdeConnect/src/main/java/org/kde/connect/PackageInterfaces/MprisControlPackageInterface.java
@@ -0,0 +1,35 @@
+package org.kde.connect.PackageInterfaces;
+
+import android.R;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.util.Log;
+
+import org.kde.connect.Device;
+import org.kde.connect.NetworkPackage;
+
+
+public class MprisControlPackageInterface extends BasePackageInterface {
+
+ Context context;
+
+ public MprisControlPackageInterface(Context ctx) {
+ context = ctx;
+ }
+
+ public void sendAction(String s) {
+ NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_MPRIS);
+ np.set("action",s);
+ sendPackage(np);
+ }
+
+ @Override
+ public boolean onPackageReceived(Device d, NetworkPackage np) {
+ if (np.getType().equals(NetworkPackage.PACKAGE_TYPE_MPRIS)) {
+ //TODO
+ }
+ return false;
+ }
+
+}
diff --git a/KdeConnect/src/main/java/org/kde/connect/PackageInterfaces/PingPackageInterface.java b/KdeConnect/src/main/java/org/kde/connect/PackageInterfaces/PingPackageInterface.java
index 88f33dd4..0d2c60b5 100644
--- a/KdeConnect/src/main/java/org/kde/connect/PackageInterfaces/PingPackageInterface.java
+++ b/KdeConnect/src/main/java/org/kde/connect/PackageInterfaces/PingPackageInterface.java
@@ -27,9 +27,9 @@ public class PingPackageInterface extends BasePackageInterface {
@Override
public boolean onPackageReceived(Device d, NetworkPackage np) {
- Log.e("PingPackageReceiver", "onPackageReceived");
+ //Log.e("PingPackageReceiver", "onPackageReceived");
if (np.getType().equals(NetworkPackage.PACKAGE_TYPE_PING)) {
- Log.e("PingPackageReceiver", "was a ping!");
+ //Log.e("PingPackageReceiver", "was a ping!");
Notification noti = new Notification.Builder(context)
.setContentTitle(d.getName())
diff --git a/KdeConnect/src/main/res/layout/activity_main.xml b/KdeConnect/src/main/res/layout/activity_main.xml
index dcc73874..b8e10079 100644
--- a/KdeConnect/src/main/res/layout/activity_main.xml
+++ b/KdeConnect/src/main/res/layout/activity_main.xml
@@ -11,8 +11,8 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file