diff --git a/KdeConnect/src/main/java/org/kde/connect/BackgroundService.java b/KdeConnect/src/main/java/org/kde/connect/BackgroundService.java index c2afcee8..6150822d 100644 --- a/KdeConnect/src/main/java/org/kde/connect/BackgroundService.java +++ b/KdeConnect/src/main/java/org/kde/connect/BackgroundService.java @@ -58,38 +58,37 @@ public class BackgroundService extends Service { @Override public void onConnectionReceived(final NetworkPackage identityPackage, final BaseComputerLink link) { - Log.i("BackgroundService", "Connection accepted!"); + Log.e("BackgroundService", "Connection accepted!"); - runOnMainThread(new Runnable() { //Some plugins that create Handlers will crash if started from a different thread! - @Override - public void run() { + new Throwable().printStackTrace(); - String deviceId = identityPackage.getString("deviceId"); - String name = identityPackage.getString("deviceName"); + String deviceId = identityPackage.getString("deviceId"); - if (devices.containsKey(deviceId)) { - Log.i("BackgroundService", "known device"); - Device device = devices.get(deviceId); - if (!device.hasName()) device.setName(identityPackage.getString("deviceName")); - device.addLink(link); - } else { - Log.i("BackgroundService", "unknown device"); - Device device = new Device(getBaseContext(), deviceId, name, link); - devices.put(deviceId, device); - } - } - }); + Device device = devices.get(deviceId); + if (device != null) { + Log.e("BackgroundService", "addLink, known device: "+deviceId); + if (!device.hasName()) device.setName(identityPackage.getString("deviceName")); + device.addLink(link); + } else { + Log.e("BackgroundService", "addLink,unknown device: "+deviceId); + String name = identityPackage.getString("deviceName"); + device = new Device(getBaseContext(), deviceId, name, link); + devices.put(deviceId, device); + } } @Override public void onConnectionLost(BaseComputerLink link) { Device d = devices.get(link.getDeviceId()); + Log.e("onConnectionLost","removeLink, deviceId: "+link.getDeviceId()); if (d != null) { d.removeLink(link); if (!d.isReachable() && !d.isTrusted()) { devices.remove(link.getDeviceId()); } + } else { + Log.e("onConnectionLost","Removing connection to unknown device, this should not happen"); } } @@ -189,10 +188,4 @@ public class BackgroundService extends Service { c.startService(serviceIntent); } - - Handler mainHandler = new Handler(Looper.getMainLooper()); - private void runOnMainThread(Runnable runnable) { - mainHandler.post(runnable); - } - } diff --git a/KdeConnect/src/main/java/org/kde/connect/Device.java b/KdeConnect/src/main/java/org/kde/connect/Device.java index cb3e60f7..5ccabd1f 100644 --- a/KdeConnect/src/main/java/org/kde/connect/Device.java +++ b/KdeConnect/src/main/java/org/kde/connect/Device.java @@ -117,10 +117,12 @@ public class Device implements BaseComputerLink.PackageReceiver { // public void addLink(BaseComputerLink link) { - Log.e("Device","addLink "+link.getLinkProvider().getName()+" -> "+getName()); links.add(link); + Log.e("Device","addLink "+link.getLinkProvider().getName()+" -> "+getName() + " active links: "+ links.size()); + + Collections.sort(links, new Comparator() { @Override public int compare(BaseComputerLink o, BaseComputerLink o2) { @@ -138,6 +140,7 @@ public class Device implements BaseComputerLink.PackageReceiver { public void removeLink(BaseComputerLink link) { link.removePackageReceiver(this); links.remove(link); + Log.e("Device","removeLink: "+link.getLinkProvider().getName() + " -> "+getName() + " active links: "+ links.size()); if (links.isEmpty()) { reloadPluginsFromSettings(); } diff --git a/KdeConnect/src/main/java/org/kde/connect/LinkProviders/BroadcastTcpLinkProvider.java b/KdeConnect/src/main/java/org/kde/connect/LinkProviders/BroadcastTcpLinkProvider.java index a25e565d..91aaa3ac 100644 --- a/KdeConnect/src/main/java/org/kde/connect/LinkProviders/BroadcastTcpLinkProvider.java +++ b/KdeConnect/src/main/java/org/kde/connect/LinkProviders/BroadcastTcpLinkProvider.java @@ -48,6 +48,7 @@ public class BroadcastTcpLinkProvider extends BaseLinkProvider { String deviceId = brokenLink.getDeviceId(); if (visibleComputers.get(deviceId) == brokenLink) { visibleComputers.remove(deviceId); + connectionLost(brokenLink); } } @@ -158,8 +159,8 @@ public class BroadcastTcpLinkProvider extends BaseLinkProvider { }; private void addLink(NetworkPackage identityPackage, NioSessionComputerLink link) { - Log.e("BroadcastTcpLinkProvider","addLink to "+identityPackage.getString("deviceName")); String deviceId = identityPackage.getString("deviceId"); + Log.e("BroadcastTcpLinkProvider","addLink to "+deviceId); BaseComputerLink oldLink = visibleComputers.get(deviceId); if (oldLink != null) { Log.e("BroadcastTcpLinkProvider","Removing old connection to same device"); diff --git a/KdeConnect/src/main/java/org/kde/connect/MprisActivity.java b/KdeConnect/src/main/java/org/kde/connect/MprisActivity.java index 934b4018..24712b35 100644 --- a/KdeConnect/src/main/java/org/kde/connect/MprisActivity.java +++ b/KdeConnect/src/main/java/org/kde/connect/MprisActivity.java @@ -13,6 +13,8 @@ import android.widget.SeekBar; import android.widget.Spinner; import android.widget.TextView; +import org.kde.connect.ComputerLinks.BaseComputerLink; +import org.kde.connect.LinkProviders.BaseLinkProvider; import org.kde.connect.Plugins.MprisPlugin; import org.kde.kdeconnect.R; @@ -20,23 +22,20 @@ import java.util.ArrayList; public class MprisActivity extends Activity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.mpris_control); + protected void connectToPlugin() { final String deviceId = getIntent().getStringExtra("deviceId"); - BackgroundService.RunCommand(this, new BackgroundService.InstanceCallback() { @Override public void onServiceStart(BackgroundService service) { + Log.e("MprisActivity", "onService start"); + Device device = service.getDevice(deviceId); final MprisPlugin mpris = (MprisPlugin) device.getPlugin("plugin_mpris"); if (mpris == null) { - Log.e("MprisActivity","device has no mpris plugin!"); - //TODO: Show error + Log.e("MprisActivity", "device has no mpris plugin!"); return; } @@ -66,6 +65,7 @@ public class MprisActivity extends Activity { mpris.setPlayerListUpdatedHandler(new Handler() { boolean firstLoad = true; + @Override public void handleMessage(Message msg) { final ArrayList playerList = mpris.getPlayerList(); @@ -81,11 +81,14 @@ public class MprisActivity extends Activity { //String prevPlayer = (String)spinner.getSelectedItem(); spinner.setAdapter(adapter); + Log.e("MprisActivity", "playerListUpdatedHandler"); + spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView arg0, View arg1, int pos, long id) { ((TextView) findViewById(R.id.now_playing_textview)).setText(""); String player = playerList.get(pos); + Log.e("MprisActivity", "onPlayerSelected: " + player); mpris.setPlayer(player); //Spotify doesn't support changing the volume yet... if (player.equals("Spotify")) { @@ -114,6 +117,33 @@ public class MprisActivity extends Activity { } }); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.mpris_control); + + final String deviceId = getIntent().getStringExtra("deviceId"); + + BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() { + @Override + public void onServiceStart(BackgroundService service) { + service.addConnectionListener(new BaseLinkProvider.ConnectionReceiver() { + @Override + public void onConnectionReceived(NetworkPackage identityPackage, BaseComputerLink link) { + connectToPlugin(); + } + + @Override + public void onConnectionLost(BaseComputerLink link) { + + } + }); + } + }); + connectToPlugin(); + findViewById(R.id.play_button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { diff --git a/KdeConnect/src/main/java/org/kde/connect/Plugins/ClipboardPlugin.java b/KdeConnect/src/main/java/org/kde/connect/Plugins/ClipboardPlugin.java index 7c150faf..9fc835d8 100644 --- a/KdeConnect/src/main/java/org/kde/connect/Plugins/ClipboardPlugin.java +++ b/KdeConnect/src/main/java/org/kde/connect/Plugins/ClipboardPlugin.java @@ -92,6 +92,7 @@ public class ClipboardPlugin extends Plugin { @Override public boolean onPackageReceived(NetworkPackage np) { + if (!np.getType().equals(NetworkPackage.PACKAGE_TYPE_CLIPBOARD)) { return false; } diff --git a/KdeConnect/src/main/java/org/kde/connect/Plugins/NotificationsPlugin.java b/KdeConnect/src/main/java/org/kde/connect/Plugins/NotificationsPlugin.java index eb056854..c4cd018f 100644 --- a/KdeConnect/src/main/java/org/kde/connect/Plugins/NotificationsPlugin.java +++ b/KdeConnect/src/main/java/org/kde/connect/Plugins/NotificationsPlugin.java @@ -190,11 +190,11 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver. byte[] bitmapData = outStream.toByteArray(); byte[] serializedBitmapData = Base64.encode(bitmapData, Base64.NO_WRAP); String stringBitmapData = new String(serializedBitmapData, Charset.defaultCharset()); - //Es super gran lol, millor ho fem quan puguem enviar arxius + //The icon is super big, better sending it as a file transfer when we support that //np.set("base64icon", stringBitmapData); } catch(Exception e) { e.printStackTrace(); - Log.e("NotificationsPlugin","Error retrieveing icon"); + Log.e("NotificationsPlugin","Error retrieving icon"); } np.set("id", id.serialize()); @@ -251,33 +251,33 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver. if (Build.VERSION.SDK_INT < 18) { return new AlertDialog.Builder(baseContext) - .setTitle("Notifications Plugin") - .setMessage("This plugin is not compatible with Android 4.3") - .setPositiveButton("Ok",new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { + .setTitle("Notifications Plugin") + .setMessage("This plugin is not compatible with Android 4.3") + .setPositiveButton("Ok",new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { - } - }) - .create(); + } + }) + .create(); } else { return new AlertDialog.Builder(baseContext) - .setTitle("Notifications Plugin") - .setMessage("You need to grant permission to access notifications") - .setPositiveButton("Open settings",new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - Intent intent=new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"); - baseContext.startActivity(intent); - } - }) - .setNegativeButton("Cancel",new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - //Do nothing - } - }) - .create(); + .setTitle("Notifications Plugin") + .setMessage("You need to grant permission to access notifications") + .setPositiveButton("Open settings",new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + Intent intent=new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"); + baseContext.startActivity(intent); + } + }) + .setNegativeButton("Cancel",new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + //Do nothing + } + }) + .create(); } }