From 086839459659fe4b3a3ad62ba80257f28476b10e Mon Sep 17 00:00:00 2001 From: Ashish Bansal Date: Wed, 19 Aug 2015 21:27:27 +0530 Subject: [PATCH] Changed abstract plugin to receive packages from unpaired device Now plugin can register to receive network packages from unpaired devices. REVIEW: 124819 --- src/org/kde/kdeconnect/Device.java | 22 +++++++++++++++++++++- src/org/kde/kdeconnect/Plugins/Plugin.java | 8 ++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/org/kde/kdeconnect/Device.java b/src/org/kde/kdeconnect/Device.java index 9402e593..09c7549f 100644 --- a/src/org/kde/kdeconnect/Device.java +++ b/src/org/kde/kdeconnect/Device.java @@ -548,12 +548,21 @@ public class Device implements BaseLink.PackageReceiver { } else { - Log.e("KDE/onPackageReceived","Device not paired, ignoring package!"); + Log.e("KDE/onPackageReceived","Device not paired, will pass package to unpairedPackageListeners"); if (pairStatus != PairStatus.Requested) { unpair(); } + for (Plugin plugin : unpairedPackageListeners) { + try { + plugin.onUnpairedDevicePackageReceived(np); + } catch (Exception e) { + e.printStackTrace(); + Log.e("KDE/Device", "Exception in "+plugin.getDisplayName()+"'s onPackageReceived() in unPairedPackageListeners"); + } + } + } } @@ -716,6 +725,10 @@ public class Device implements BaseLink.PackageReceiver { Log.e("KDE/removePlugin","Exception calling onDestroy for plugin "+pluginKey); } + if (unpairedPackageListeners.contains(plugin)) { + unpairedPackageListeners.remove(plugin); + } + for (PluginsChangedListener listener : pluginsChangedListeners) { listener.onPluginsChanged(this); } @@ -782,4 +795,11 @@ public class Device implements BaseLink.PackageReceiver { pluginsChangedListeners.remove(listener); } + private final ArrayList unpairedPackageListeners = new ArrayList<>(); + + public void registerUnpairedPackageListener(Plugin p) { + Log.e("KDE/registerUnpairedPackageListener", p.getPluginKey() + " plugin registered to receive package from unpaired device"); + unpairedPackageListeners.add(p); + } + } diff --git a/src/org/kde/kdeconnect/Plugins/Plugin.java b/src/org/kde/kdeconnect/Plugins/Plugin.java index 556e89d2..eff176f5 100644 --- a/src/org/kde/kdeconnect/Plugins/Plugin.java +++ b/src/org/kde/kdeconnect/Plugins/Plugin.java @@ -43,6 +43,14 @@ public abstract class Plugin { this.context = context; } + /** + * To receive the network package from the unpaired device, Register your plugin + * using Device::registerUnpairedPackageListener and override this method. + */ + public boolean onUnpairedDevicePackageReceived(NetworkPackage np) { + return false; + } + /** * Return the internal plugin name, that will be used as a * unique key to distinguish it. Use the class name as key.