mirror of
https://invent.kde.org/network/kdeconnect-android.git
synced 2025-10-06 00:23:01 +02:00
Rewritten old package emitters and receivers using the new package format
Splitted up ping receiver from notification receiver in KDE Improved pausemusic receiver Fixed same computer being discovered multiple times Fixed some other minor bugs and compilation warnings
This commit is contained in:
@@ -18,7 +18,6 @@ import org.kde.connect.PackageEmitters.CallPackageEmitter;
|
||||
import org.kde.connect.PackageEmitters.PingPackageEmitter;
|
||||
import org.kde.connect.PackageReceivers.BasePackageReceiver;
|
||||
import org.kde.connect.PackageReceivers.PingPackageReceiver;
|
||||
import org.kde.connect.Types.NetworkPackage;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -34,21 +33,23 @@ public class BackgroundService extends Service {
|
||||
|
||||
PingPackageEmitter pingEmitter;
|
||||
|
||||
private void clearComputerLinks() {
|
||||
Log.i("BackgroundService","clearComputerLinks");
|
||||
for(BasePackageEmitter pe : emitters) pe.clearComputerLinks();
|
||||
computerLinks.clear();
|
||||
}
|
||||
|
||||
private void removeComputerLink(BaseComputerLink cl) {
|
||||
Log.i("BackgroundService","removeComputerLink");
|
||||
for(BasePackageEmitter pe : emitters) pe.removeComputerLink(cl);
|
||||
computerLinks.remove(cl);
|
||||
}
|
||||
|
||||
private void addComputerLink(BaseComputerLink cl) {
|
||||
|
||||
Log.i("BackgroundService","addComputerLink");
|
||||
|
||||
computerLinks.add(cl);
|
||||
|
||||
for(BasePackageEmitter pe : emitters) pe.addComputerLink(cl);
|
||||
for(BasePackageReceiver pr : receivers) cl.addPackageReceiver(pr);
|
||||
|
||||
Log.i("BackgroundService","sending ping after connection");
|
||||
|
||||
//NetworkPackage p = new NetworkPackage(System.currentTimeMillis());
|
||||
//p.setType(NetworkPackage.Type.PING);
|
||||
//cl.sendPackage(p);
|
||||
|
||||
}
|
||||
|
||||
private void registerEmitters() {
|
||||
@@ -73,15 +74,19 @@ public class BackgroundService extends Service {
|
||||
}
|
||||
}
|
||||
|
||||
//This will be called for each intent launch, even if the service is already started and is reused
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
Log.e("BackgroundService","Starting");
|
||||
instance=this;
|
||||
attendCallbacks();
|
||||
Log.e("BackgroundService","Running callbacks waiting service to be ready");
|
||||
for (InstanceCallback c : callbacks) {
|
||||
c.onServiceStart(this);
|
||||
}
|
||||
callbacks.clear();
|
||||
return Service.START_STICKY;
|
||||
}
|
||||
|
||||
public void reachComputers() {
|
||||
clearComputerLinks();
|
||||
for (BaseLinkProvider a : locators) {
|
||||
a.reachComputers(new BaseLinkProvider.ConnectionReceiver() {
|
||||
@Override
|
||||
@@ -98,11 +103,12 @@ public class BackgroundService extends Service {
|
||||
pingEmitter.sendPing();
|
||||
}
|
||||
|
||||
//This will called only once, even if we launch the service intent several times
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
|
||||
Log.e("BackgroundService","Creating");
|
||||
Log.e("BackgroundService","Service not started yet, initializing...");
|
||||
|
||||
settings = getSharedPreferences("KdeConnect", 0);
|
||||
|
||||
@@ -112,77 +118,39 @@ public class BackgroundService extends Service {
|
||||
registerReceivers();
|
||||
registerAnnouncers();
|
||||
|
||||
instance = this;
|
||||
attendCallbacks();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
Log.e("BackgroundService","Destroying");
|
||||
Log.e("BackgroundService", "Destroying");
|
||||
super.onDestroy();
|
||||
instance = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBinder onBind (Intent intent) {
|
||||
return new Binder();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//All kind of black magic to make the service a singleton
|
||||
//To use the service from the gui
|
||||
|
||||
public interface InstanceCallback {
|
||||
void onServiceStart(BackgroundService service);
|
||||
}
|
||||
|
||||
private static BackgroundService instance = null;
|
||||
private static ArrayList<InstanceCallback> callbacks = new ArrayList<InstanceCallback>();
|
||||
|
||||
private static void attendCallbacks() {
|
||||
for (InstanceCallback c : callbacks) {
|
||||
c.onServiceStart(instance);
|
||||
}
|
||||
callbacks.clear();
|
||||
}
|
||||
|
||||
/*
|
||||
public static void Start(Context c) {
|
||||
RunCommand(c, null);
|
||||
}
|
||||
|
||||
*/
|
||||
public static void RunCommand(Context c, final InstanceCallback callback) {
|
||||
|
||||
if (callback != null) callbacks.add(callback);
|
||||
|
||||
if (instance == null) {
|
||||
Intent serviceIntent = new Intent(c, BackgroundService.class);
|
||||
c.startService(serviceIntent);
|
||||
try {
|
||||
c.bindService(serviceIntent, new ServiceConnection() {
|
||||
public void onServiceDisconnected(ComponentName name) {
|
||||
instance = null;
|
||||
}
|
||||
public void onServiceConnected(ComponentName name, IBinder binder) {
|
||||
instance = ((LocalBinder) binder).getInstance();
|
||||
attendCallbacks();
|
||||
}
|
||||
}, Service.BIND_AUTO_CREATE);
|
||||
} catch(Exception e) {
|
||||
|
||||
}
|
||||
} else {
|
||||
attendCallbacks();
|
||||
}
|
||||
Intent serviceIntent = new Intent(c, BackgroundService.class);
|
||||
c.startService(serviceIntent);
|
||||
}
|
||||
|
||||
private class LocalBinder extends Binder {
|
||||
public BackgroundService getInstance() {
|
||||
return BackgroundService.this;
|
||||
}
|
||||
}
|
||||
|
||||
private IBinder mBinder = new LocalBinder();
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
return mBinder;
|
||||
}
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
package org.kde.connect.ComputerLinks;
|
||||
|
||||
import org.kde.connect.PackageReceivers.BasePackageReceiver;
|
||||
import org.kde.connect.Types.NetworkPackage;
|
||||
import org.kde.connect.NetworkPackage;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
@@ -3,9 +3,8 @@ package org.kde.connect.ComputerLinks;
|
||||
import android.os.AsyncTask;
|
||||
import android.util.Log;
|
||||
|
||||
import org.kde.connect.Types.NetworkPackage;
|
||||
import org.kde.connect.NetworkPackage;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.DatagramPacket;
|
||||
import java.net.DatagramSocket;
|
||||
import java.net.InetAddress;
|
||||
|
@@ -3,11 +3,10 @@ package org.kde.connect.LinkProviders;
|
||||
import android.content.Context;
|
||||
import android.net.nsd.NsdManager;
|
||||
import android.net.nsd.NsdServiceInfo;
|
||||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
|
||||
import org.kde.connect.ComputerLinks.UdpComputerLink;
|
||||
import org.kde.connect.Types.NetworkPackage;
|
||||
import org.kde.connect.NetworkPackage;
|
||||
|
||||
import java.lang.Override;
|
||||
import java.util.ArrayList;
|
||||
@@ -30,6 +29,8 @@ public class AvahiLinkProvider implements BaseLinkProvider {
|
||||
@Override
|
||||
public void reachComputers(final ConnectionReceiver cr) {
|
||||
|
||||
visibleComputers.clear();
|
||||
|
||||
Log.e("AvahiLinkProvider", "Discovering computers...");
|
||||
|
||||
final NsdManager.ResolveListener mResolveListener = new NsdManager.ResolveListener() {
|
||||
|
@@ -1,4 +1,4 @@
|
||||
package org.kde.connect.Types;
|
||||
package org.kde.connect;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
@@ -8,13 +8,15 @@ import android.util.Log;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.TimeZone;
|
||||
|
||||
public class NetworkPackage {
|
||||
|
||||
private final static int CURRENT_PACKAGE_VERSION = 1;
|
||||
|
||||
public final static String PACKAGE_TYPE_IDENTITY = "kdeconnect.identity";
|
||||
public final static String PACKAGE_TYPE_PING = "kdeconnect.ping";
|
||||
public final static String PACKAGE_TYPE_NOTIFICATION = "kdeconnect.notification";
|
||||
public final static String PACKAGE_TYPE_CALL = "kdeconnect.call";
|
||||
|
||||
private long mId;
|
||||
private String mType;
|
||||
private JSONObject mBody;
|
||||
@@ -82,7 +84,7 @@ public class NetworkPackage {
|
||||
|
||||
static public NetworkPackage createIdentityPackage(Context context) {
|
||||
|
||||
NetworkPackage np = new NetworkPackage("kdeconnect.identity");
|
||||
NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_IDENTITY);
|
||||
|
||||
final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
|
||||
try {
|
@@ -1,7 +1,7 @@
|
||||
package org.kde.connect.PackageEmitters;
|
||||
|
||||
import org.kde.connect.ComputerLinks.BaseComputerLink;
|
||||
import org.kde.connect.Types.NetworkPackage;
|
||||
import org.kde.connect.NetworkPackage;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -12,6 +12,12 @@ public class BasePackageEmitter {
|
||||
public void addComputerLink(BaseComputerLink cl) {
|
||||
mBaseComputerLinks.add(cl);
|
||||
}
|
||||
public void removeComputerLink(BaseComputerLink cl) {
|
||||
mBaseComputerLinks.remove(cl);
|
||||
}
|
||||
public void clearComputerLinks() {
|
||||
mBaseComputerLinks.clear();
|
||||
}
|
||||
|
||||
protected int countLinkedComputers() {
|
||||
return mBaseComputerLinks.size();
|
||||
|
@@ -5,7 +5,7 @@ import android.telephony.PhoneStateListener;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.util.Log;
|
||||
|
||||
import org.kde.connect.Types.NetworkPackage;
|
||||
import org.kde.connect.NetworkPackage;
|
||||
|
||||
|
||||
public class CallPackageEmitter extends BasePackageEmitter {
|
||||
@@ -17,7 +17,7 @@ public class CallPackageEmitter extends BasePackageEmitter {
|
||||
PhoneStateListener callStateListener = new PhoneStateListener() {
|
||||
|
||||
int lastState = TelephonyManager.CALL_STATE_IDLE;
|
||||
NetworkPackage lastPackage;
|
||||
NetworkPackage lastPackage = null;
|
||||
|
||||
@Override
|
||||
public void onCallStateChanged(int state, String phoneNumber) {
|
||||
@@ -26,12 +26,12 @@ public class CallPackageEmitter extends BasePackageEmitter {
|
||||
|
||||
case TelephonyManager.CALL_STATE_RINGING:
|
||||
|
||||
Log.e("IncomingCall", ":"+phoneNumber);
|
||||
Log.e("IncomingCall", ":" + phoneNumber);
|
||||
|
||||
lastPackage = new NetworkPackage("kdeconnect.notification");
|
||||
lastPackage = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_NOTIFICATION);
|
||||
|
||||
lastPackage.set("notificationType","ringing");
|
||||
lastPackage.set("phoneNumber",phoneNumber);
|
||||
lastPackage.set("notificationType", "ringing");
|
||||
lastPackage.set("phoneNumber", phoneNumber);
|
||||
|
||||
sendPackage(lastPackage);
|
||||
|
||||
@@ -41,14 +41,17 @@ public class CallPackageEmitter extends BasePackageEmitter {
|
||||
|
||||
Log.e("OngoingCall", ":"+phoneNumber);
|
||||
|
||||
/*
|
||||
//Actually we do not want to cancel it
|
||||
if (lastState == TelephonyManager.CALL_STATE_RINGING && lastPackage != null) {
|
||||
//Cancel previous ringing notification
|
||||
lastPackage.set("isCancel","true");
|
||||
sendPackage(lastPackage);
|
||||
}
|
||||
*/
|
||||
|
||||
//Emit a "call" package
|
||||
lastPackage = new NetworkPackage("kdeconnect.call");
|
||||
lastPackage = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_CALL);
|
||||
lastPackage.set("phoneNumber",phoneNumber);
|
||||
sendPackage(lastPackage);
|
||||
|
||||
@@ -56,19 +59,19 @@ public class CallPackageEmitter extends BasePackageEmitter {
|
||||
|
||||
case TelephonyManager.CALL_STATE_IDLE:
|
||||
|
||||
Log.e("EndedCall", ":"+phoneNumber);
|
||||
|
||||
if (lastState != TelephonyManager.CALL_STATE_IDLE && lastPackage != null) {
|
||||
|
||||
Log.e("EndedCall", ":"+phoneNumber);
|
||||
|
||||
//End last notification (can either be a ring notification or a call event)
|
||||
lastPackage.set("isCancel","true");
|
||||
sendPackage(lastPackage);
|
||||
|
||||
if (lastState == TelephonyManager.CALL_STATE_RINGING) {
|
||||
//Emit a missed call notification
|
||||
NetworkPackage missed = new NetworkPackage("kdeconnect.notification");
|
||||
NetworkPackage missed = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_NOTIFICATION);
|
||||
missed.set("notificationType","missedCall");
|
||||
missed.set("phoneNumber",lastPackage.getString("phoneNumber"));
|
||||
missed.set("phoneNumber", lastPackage.getString("phoneNumber"));
|
||||
sendPackage(missed);
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,19 @@
|
||||
package org.kde.connect.PackageEmitters;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
public class CliboardPackageEmitter extends BasePackageEmitter {
|
||||
|
||||
CliboardPackageEmitter(Context ctx) {
|
||||
|
||||
//ClipboardManager.addPrimaryClipChangedListener( {
|
||||
//NetworkPackage lastPackage = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_CLIPBOARD);
|
||||
//sendPackage(lastPackage);
|
||||
//})
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@@ -3,7 +3,7 @@ package org.kde.connect.PackageEmitters;
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import org.kde.connect.Types.NetworkPackage;
|
||||
import org.kde.connect.NetworkPackage;
|
||||
|
||||
|
||||
public class PingPackageEmitter extends BasePackageEmitter {
|
||||
@@ -14,7 +14,7 @@ public class PingPackageEmitter extends BasePackageEmitter {
|
||||
public void sendPing() {
|
||||
Log.e("PingPackageEmitter", "sendPing to "+countLinkedComputers());
|
||||
|
||||
NetworkPackage lastPackage = new NetworkPackage("kdeconnect.ping");
|
||||
NetworkPackage lastPackage = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_PING);
|
||||
sendPackage(lastPackage);
|
||||
}
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
package org.kde.connect.PackageReceivers;
|
||||
|
||||
import org.kde.connect.Types.NetworkPackage;
|
||||
import org.kde.connect.NetworkPackage;
|
||||
|
||||
public interface BasePackageReceiver {
|
||||
|
||||
|
@@ -3,7 +3,7 @@ package org.kde.connect.PackageReceivers;
|
||||
import android.content.Context;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.kde.connect.Types.NetworkPackage;
|
||||
import org.kde.connect.NetworkPackage;
|
||||
|
||||
public class PingPackageReceiver implements BasePackageReceiver {
|
||||
|
||||
|
@@ -23,10 +23,20 @@ public class ServiceLauncher extends BroadcastReceiver
|
||||
Log.e("KdeConnect", "Ignoring, it's not me!");
|
||||
return;
|
||||
}
|
||||
BackgroundService.Start(context);
|
||||
BackgroundService.RunCommand(context, new BackgroundService.InstanceCallback() {
|
||||
@Override
|
||||
public void onServiceStart(BackgroundService service) {
|
||||
service.reachComputers();
|
||||
}
|
||||
});
|
||||
} else if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
|
||||
Log.e("KdeConnect", "ServiceLauncher");
|
||||
BackgroundService.Start(context);
|
||||
BackgroundService.RunCommand(context, new BackgroundService.InstanceCallback() {
|
||||
@Override
|
||||
public void onServiceStart(BackgroundService service) {
|
||||
service.reachComputers();
|
||||
}
|
||||
});
|
||||
} else if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
|
||||
Log.e("KdeConnect", "Connection state changed, trying to connect");
|
||||
BackgroundService.RunCommand(context, new BackgroundService.InstanceCallback() {
|
||||
|
@@ -9,7 +9,7 @@
|
||||
tools:context=".MainActivity"
|
||||
android:orientation="vertical">
|
||||
|
||||
<Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Announce to network"/>
|
||||
<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"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
Reference in New Issue
Block a user