From fc3f3fc86e546ea29e7ddea4efcdc282e824a84c Mon Sep 17 00:00:00 2001 From: Albert Vaca Date: Mon, 29 Jul 2013 18:42:12 +0200 Subject: [PATCH] Added a packageinterface and activity to send basic mpris commands --- KdeConnect/src/main/AndroidManifest.xml | 7 ++- .../org/kde/connect/BackgroundService.java | 39 ++++++------ .../java/org/kde/connect/MainActivity.java | 30 ++++++---- .../java/org/kde/connect/MprisActivity.java | 60 +++++++++++++++++++ .../java/org/kde/connect/NetworkPackage.java | 1 + .../MprisControlPackageInterface.java | 35 +++++++++++ .../PingPackageInterface.java | 4 +- .../src/main/res/layout/activity_main.xml | 4 +- .../src/main/res/layout/mpris_control.xml | 60 +++++++++++++++++++ 9 files changed, 206 insertions(+), 34 deletions(-) create mode 100644 KdeConnect/src/main/java/org/kde/connect/MprisActivity.java create mode 100644 KdeConnect/src/main/java/org/kde/connect/PackageInterfaces/MprisControlPackageInterface.java create mode 100644 KdeConnect/src/main/res/layout/mpris_control.xml 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 @@