mirror of
https://github.com/KDE/kdeconnect-android
synced 2025-08-22 09:58:08 +00:00
Added a packageinterface and activity to send basic mpris commands
This commit is contained in:
parent
4176d9b15e
commit
fc3f3fc86e
@ -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">
|
||||
|
@ -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();
|
||||
|
@ -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));
|
||||
}
|
||||
});
|
||||
|
60
KdeConnect/src/main/java/org/kde/connect/MprisActivity.java
Normal file
60
KdeConnect/src/main/java/org/kde/connect/MprisActivity.java
Normal 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");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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())
|
||||
|
@ -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"
|
||||
|
60
KdeConnect/src/main/res/layout/mpris_control.xml
Normal file
60
KdeConnect/src/main/res/layout/mpris_control.xml
Normal 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>
|
Loading…
x
Reference in New Issue
Block a user