2
0
mirror of https://github.com/KDE/kdeconnect-android synced 2025-08-22 01:51:47 +00:00

Added a packageinterface and activity to send basic mpris commands

This commit is contained in:
Albert Vaca 2013-07-29 18:42:12 +02:00
parent 4176d9b15e
commit fc3f3fc86e
9 changed files with 206 additions and 34 deletions

View File

@ -14,7 +14,6 @@
android:theme="@style/AppTheme" >
<activity
android:name="org.kde.connect.MainActivity"
android:label="@string/app_name" >
@ -25,6 +24,12 @@
</intent-filter>
</activity>
<activity
android:name="org.kde.connect.MprisActivity"
android:label="KdeConnect - Mpris controls"
/>
<service
android:enabled="true"
android:name="org.kde.connect.BackgroundService">

View File

@ -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<BaseLinkProvider> locators = new ArrayList<BaseLinkProvider>();
ArrayList<BaseLinkProvider> linkProviders = new ArrayList<BaseLinkProvider>();
ArrayList<BasePackageInterface> emitters = new ArrayList<BasePackageInterface>();
ArrayList<BasePackageInterface> packageInterfaces = new ArrayList<BasePackageInterface>();
HashMap<String, Device> devices = new HashMap<String, Device>();
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();

View File

@ -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<String>(MainActivity.this, android.R.layout.simple_list_item_1, listContent));
}
});

View File

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

View File

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

View File

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

View File

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

View File

@ -11,8 +11,8 @@
<Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Restart service"/>
<Button android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Send ping"/>
<Button android:id="@+id/button3" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="List paired computers"/>
<Button android:id="@+id/button3" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Mpris controls"/>
<Button android:id="@+id/button4" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="List paired computers"/>
<ListView
android:layout_width="fill_parent"

View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/textView"
android:layout_gravity="center"/>
<ImageButton
android:layout_width="200dip"
android:layout_height="75dip"
android:id="@+id/play_button"
android:src="@android:drawable/ic_media_play"
android:layout_gravity="center"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="200dip"
android:layout_height="70dip"
android:layout_gravity="center">
<ImageButton
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:id="@+id/prev_button"
android:src="@android:drawable/ic_media_rew"
android:layout_weight="0.5"/>
<ImageButton
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:id="@+id/next_button"
android:src="@android:drawable/ic_media_ff"
android:layout_gravity="center"
android:layout_weight="0.5"/>
</LinearLayout>
<!--
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/pause_button"
android:src="@android:drawable/ic_media_pause"
android:layout_gravity="center"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/pause_button"
android:src="@android:drawable/ic_media_stop"
android:layout_gravity="center"/>
-->
</LinearLayout>