diff --git a/build.gradle b/build.gradle index eb0e4adf..c167b6a7 100644 --- a/build.gradle +++ b/build.gradle @@ -83,6 +83,9 @@ dependencies { implementation 'com.jakewharton:butterknife:10.0.0' annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0' + implementation 'org.atteo.classindex:classindex:3.6' + annotationProcessor 'org.atteo.classindex:classindex:3.6' + // Testing androidTestImplementation 'org.mockito:mockito-core:1.10.19' androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.1'// Because mockito has some problems with dex environment diff --git a/proguard-rules.pro b/proguard-rules.pro index 02c0919a..838aab66 100644 --- a/proguard-rules.pro +++ b/proguard-rules.pro @@ -43,3 +43,4 @@ -dontwarn sun.reflect.** -dontwarn android.test.** -dontwarn java.lang.management.** +-dontwarn javax.** diff --git a/src/org/kde/kdeconnect/BackgroundService.java b/src/org/kde/kdeconnect/BackgroundService.java index 7d3920bd..1aff1e7c 100644 --- a/src/org/kde/kdeconnect/BackgroundService.java +++ b/src/org/kde/kdeconnect/BackgroundService.java @@ -42,6 +42,7 @@ import org.kde.kdeconnect.Helpers.NotificationHelper; import org.kde.kdeconnect.Helpers.SecurityHelpers.RsaHelper; import org.kde.kdeconnect.Helpers.SecurityHelpers.SslHelper; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect.UserInterface.MainActivity; import org.kde.kdeconnect_tp.R; @@ -284,6 +285,7 @@ public class BackgroundService extends Service { Log.i("KDE/BackgroundService", "Service not started yet, initializing..."); + PluginFactory.initPluginInfo(getBaseContext()); initializeSecurityParameters(); NotificationHelper.initializeChannels(this); loadRememberedDevicesFromSettings(); diff --git a/src/org/kde/kdeconnect/Device.java b/src/org/kde/kdeconnect/Device.java index fb4b898f..36c1ec79 100644 --- a/src/org/kde/kdeconnect/Device.java +++ b/src/org/kde/kdeconnect/Device.java @@ -513,7 +513,7 @@ public class Device implements BaseLink.PacketReceiver { Set outgoingCapabilities = identityPacket.getStringSet("outgoingCapabilities", null); Set incomingCapabilities = identityPacket.getStringSet("incomingCapabilities", null); if (incomingCapabilities != null && outgoingCapabilities != null) { - m_supportedPlugins = new Vector<>(PluginFactory.pluginsForCapabilities(context, incomingCapabilities, outgoingCapabilities)); + m_supportedPlugins = new Vector<>(PluginFactory.pluginsForCapabilities(incomingCapabilities, outgoingCapabilities)); } else { m_supportedPlugins = new Vector<>(PluginFactory.getAvailablePlugins()); } @@ -808,7 +808,7 @@ public class Device implements BaseLink.PacketReceiver { } public boolean isPluginEnabled(String pluginKey) { - boolean enabledByDefault = PluginFactory.getPluginInfo(context, pluginKey).isEnabledByDefault(); + boolean enabledByDefault = PluginFactory.getPluginInfo(pluginKey).isEnabledByDefault(); return settings.getBoolean(pluginKey, enabledByDefault); } @@ -820,7 +820,7 @@ public class Device implements BaseLink.PacketReceiver { for (String pluginKey : m_supportedPlugins) { - PluginFactory.PluginInfo pluginInfo = PluginFactory.getPluginInfo(context, pluginKey); + PluginFactory.PluginInfo pluginInfo = PluginFactory.getPluginInfo(pluginKey); boolean pluginEnabled = false; boolean listenToUnpaired = pluginInfo.listenToUnpaired(); diff --git a/src/org/kde/kdeconnect/NetworkPacket.java b/src/org/kde/kdeconnect/NetworkPacket.java index 4ca3da8e..af5b9bb9 100644 --- a/src/org/kde/kdeconnect/NetworkPacket.java +++ b/src/org/kde/kdeconnect/NetworkPacket.java @@ -276,8 +276,8 @@ public class NetworkPacket { np.mBody.put("deviceName", DeviceHelper.getDeviceName(context)); np.mBody.put("protocolVersion", NetworkPacket.ProtocolVersion); np.mBody.put("deviceType", DeviceHelper.getDeviceType(context).toString()); - np.mBody.put("incomingCapabilities", new JSONArray(PluginFactory.getIncomingCapabilities(context))); - np.mBody.put("outgoingCapabilities", new JSONArray(PluginFactory.getOutgoingCapabilities(context))); + np.mBody.put("incomingCapabilities", new JSONArray(PluginFactory.getIncomingCapabilities())); + np.mBody.put("outgoingCapabilities", new JSONArray(PluginFactory.getOutgoingCapabilities())); } catch (Exception e) { e.printStackTrace(); Log.e("NetworkPacakge", "Exception on createIdentityPacket"); diff --git a/src/org/kde/kdeconnect/Plugins/BatteryPlugin/BatteryPlugin.java b/src/org/kde/kdeconnect/Plugins/BatteryPlugin/BatteryPlugin.java index 5df0bfa5..fd0a9f0f 100644 --- a/src/org/kde/kdeconnect/Plugins/BatteryPlugin/BatteryPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/BatteryPlugin/BatteryPlugin.java @@ -28,9 +28,10 @@ import android.os.BatteryManager; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect_tp.R; - +@PluginFactory.LoadablePlugin public class BatteryPlugin extends Plugin { private final static String PACKET_TYPE_BATTERY = "kdeconnect.battery"; diff --git a/src/org/kde/kdeconnect/Plugins/ClibpoardPlugin/ClipboardPlugin.java b/src/org/kde/kdeconnect/Plugins/ClibpoardPlugin/ClipboardPlugin.java index 8031566f..aa9a1987 100644 --- a/src/org/kde/kdeconnect/Plugins/ClibpoardPlugin/ClipboardPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/ClibpoardPlugin/ClipboardPlugin.java @@ -22,8 +22,10 @@ package org.kde.kdeconnect.Plugins.ClibpoardPlugin; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect_tp.R; +@PluginFactory.LoadablePlugin public class ClipboardPlugin extends Plugin { private final static String PACKET_TYPE_CLIPBOARD = "kdeconnect.clipboard"; diff --git a/src/org/kde/kdeconnect/Plugins/ContactsPlugin/ContactsPlugin.java b/src/org/kde/kdeconnect/Plugins/ContactsPlugin/ContactsPlugin.java index 6de93fa0..265658a1 100644 --- a/src/org/kde/kdeconnect/Plugins/ContactsPlugin/ContactsPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/ContactsPlugin/ContactsPlugin.java @@ -34,6 +34,7 @@ import org.kde.kdeconnect.Helpers.ContactsHelper.VCardBuilder; import org.kde.kdeconnect.Helpers.ContactsHelper.uID; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect_tp.R; import java.util.ArrayList; @@ -43,6 +44,7 @@ import java.util.Map; import java.util.Set; @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) +@PluginFactory.LoadablePlugin public class ContactsPlugin extends Plugin { /** diff --git a/src/org/kde/kdeconnect/Plugins/FindMyPhonePlugin/FindMyPhonePlugin.java b/src/org/kde/kdeconnect/Plugins/FindMyPhonePlugin/FindMyPhonePlugin.java index f32ddd5a..61730b14 100644 --- a/src/org/kde/kdeconnect/Plugins/FindMyPhonePlugin/FindMyPhonePlugin.java +++ b/src/org/kde/kdeconnect/Plugins/FindMyPhonePlugin/FindMyPhonePlugin.java @@ -25,9 +25,11 @@ import android.content.Intent; import org.kde.kdeconnect.Helpers.DeviceHelper; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect.UserInterface.PluginSettingsFragment; import org.kde.kdeconnect_tp.R; +@PluginFactory.LoadablePlugin public class FindMyPhonePlugin extends Plugin { public final static String PACKET_TYPE_FINDMYPHONE_REQUEST = "kdeconnect.findmyphone.request"; diff --git a/src/org/kde/kdeconnect/Plugins/FindRemoteDevicePlugin/FindRemoteDevicePlugin.java b/src/org/kde/kdeconnect/Plugins/FindRemoteDevicePlugin/FindRemoteDevicePlugin.java index 56e53a7a..c1f1de3f 100644 --- a/src/org/kde/kdeconnect/Plugins/FindRemoteDevicePlugin/FindRemoteDevicePlugin.java +++ b/src/org/kde/kdeconnect/Plugins/FindRemoteDevicePlugin/FindRemoteDevicePlugin.java @@ -25,9 +25,10 @@ import android.app.Activity; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.FindMyPhonePlugin.FindMyPhonePlugin; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect_tp.R; - +@PluginFactory.LoadablePlugin public class FindRemoteDevicePlugin extends Plugin { @Override diff --git a/src/org/kde/kdeconnect/Plugins/MousePadPlugin/MousePadPlugin.java b/src/org/kde/kdeconnect/Plugins/MousePadPlugin/MousePadPlugin.java index 486b4af7..7d35c8ec 100644 --- a/src/org/kde/kdeconnect/Plugins/MousePadPlugin/MousePadPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/MousePadPlugin/MousePadPlugin.java @@ -26,10 +26,12 @@ import android.graphics.drawable.Drawable; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect_tp.R; import androidx.core.content.ContextCompat; +@PluginFactory.LoadablePlugin public class MousePadPlugin extends Plugin { //public final static String PACKET_TYPE_MOUSEPAD = "kdeconnect.mousepad"; diff --git a/src/org/kde/kdeconnect/Plugins/MprisPlugin/MprisPlugin.java b/src/org/kde/kdeconnect/Plugins/MprisPlugin/MprisPlugin.java index a36495eb..44e0d4e7 100644 --- a/src/org/kde/kdeconnect/Plugins/MprisPlugin/MprisPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/MprisPlugin/MprisPlugin.java @@ -30,6 +30,7 @@ import android.util.Log; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect_tp.R; import java.net.MalformedURLException; @@ -42,6 +43,7 @@ import java.util.List; import androidx.core.content.ContextCompat; +@PluginFactory.LoadablePlugin public class MprisPlugin extends Plugin { public class MprisPlayer { private String player = ""; diff --git a/src/org/kde/kdeconnect/Plugins/MprisReceiverPlugin/MprisReceiverPlugin.java b/src/org/kde/kdeconnect/Plugins/MprisReceiverPlugin/MprisReceiverPlugin.java index d67d87cc..f230414c 100644 --- a/src/org/kde/kdeconnect/Plugins/MprisReceiverPlugin/MprisReceiverPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/MprisReceiverPlugin/MprisReceiverPlugin.java @@ -46,6 +46,7 @@ import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) +//@PluginFactory.LoadablePlugin public class MprisReceiverPlugin extends Plugin implements MediaSessionManager.OnActiveSessionsChangedListener { private final static String PACKET_TYPE_MPRIS = "kdeconnect.mpris"; diff --git a/src/org/kde/kdeconnect/Plugins/NotificationsPlugin/NotificationsPlugin.java b/src/org/kde/kdeconnect/Plugins/NotificationsPlugin/NotificationsPlugin.java index 170ab685..1d71bb33 100644 --- a/src/org/kde/kdeconnect/Plugins/NotificationsPlugin/NotificationsPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/NotificationsPlugin/NotificationsPlugin.java @@ -42,6 +42,7 @@ import android.util.Log; import org.kde.kdeconnect.Helpers.AppsHelper; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect.UserInterface.AlertDialogFragment; import org.kde.kdeconnect.UserInterface.MainActivity; import org.kde.kdeconnect.UserInterface.PluginSettingsFragment; @@ -61,6 +62,7 @@ import androidx.annotation.RequiresApi; import androidx.core.app.NotificationCompat; @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) +@PluginFactory.LoadablePlugin public class NotificationsPlugin extends Plugin implements NotificationReceiver.NotificationListener { private final static String PACKET_TYPE_NOTIFICATION = "kdeconnect.notification"; diff --git a/src/org/kde/kdeconnect/Plugins/PingPlugin/PingPlugin.java b/src/org/kde/kdeconnect/Plugins/PingPlugin/PingPlugin.java index b486d410..266d30f5 100644 --- a/src/org/kde/kdeconnect/Plugins/PingPlugin/PingPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/PingPlugin/PingPlugin.java @@ -31,12 +31,13 @@ import android.util.Log; import org.kde.kdeconnect.Helpers.NotificationHelper; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect.UserInterface.MainActivity; import org.kde.kdeconnect_tp.R; import androidx.core.app.NotificationCompat; - +@PluginFactory.LoadablePlugin public class PingPlugin extends Plugin { private final static String PACKET_TYPE_PING = "kdeconnect.ping"; diff --git a/src/org/kde/kdeconnect/Plugins/PluginFactory.java b/src/org/kde/kdeconnect/Plugins/PluginFactory.java index 72938dc0..bfb0fd85 100644 --- a/src/org/kde/kdeconnect/Plugins/PluginFactory.java +++ b/src/org/kde/kdeconnect/Plugins/PluginFactory.java @@ -24,25 +24,9 @@ import android.content.Context; import android.graphics.drawable.Drawable; import android.util.Log; +import org.atteo.classindex.ClassIndex; +import org.atteo.classindex.IndexAnnotated; import org.kde.kdeconnect.Device; -import org.kde.kdeconnect.Plugins.BatteryPlugin.BatteryPlugin; -import org.kde.kdeconnect.Plugins.ClibpoardPlugin.ClipboardPlugin; -import org.kde.kdeconnect.Plugins.ContactsPlugin.ContactsPlugin; -import org.kde.kdeconnect.Plugins.FindMyPhonePlugin.FindMyPhonePlugin; -import org.kde.kdeconnect.Plugins.FindRemoteDevicePlugin.FindRemoteDevicePlugin; -import org.kde.kdeconnect.Plugins.MousePadPlugin.MousePadPlugin; -import org.kde.kdeconnect.Plugins.MprisPlugin.MprisPlugin; -import org.kde.kdeconnect.Plugins.NotificationsPlugin.NotificationsPlugin; -import org.kde.kdeconnect.Plugins.PingPlugin.PingPlugin; -import org.kde.kdeconnect.Plugins.PresenterPlugin.PresenterPlugin; -import org.kde.kdeconnect.Plugins.ReceiveNotificationsPlugin.ReceiveNotificationsPlugin; -import org.kde.kdeconnect.Plugins.RemoteKeyboardPlugin.RemoteKeyboardPlugin; -import org.kde.kdeconnect.Plugins.RunCommandPlugin.RunCommandPlugin; -import org.kde.kdeconnect.Plugins.SftpPlugin.SftpPlugin; -import org.kde.kdeconnect.Plugins.SharePlugin.SharePlugin; -import org.kde.kdeconnect.Plugins.SystemvolumePlugin.SystemvolumePlugin; -import org.kde.kdeconnect.Plugins.SMSPlugin.SMSPlugin; -import org.kde.kdeconnect.Plugins.TelephonyPlugin.TelephonyPlugin; import java.util.Collections; import java.util.HashSet; @@ -52,11 +36,15 @@ import java.util.concurrent.ConcurrentHashMap; public class PluginFactory { + @IndexAnnotated + public @interface LoadablePlugin { } //Annotate plugins with this so PluginFactory finds them + public static class PluginInfo { PluginInfo(String displayName, String description, Drawable icon, boolean enabledByDefault, boolean hasSettings, boolean listenToUnpaired, - String[] supportedPacketTypes, String[] outgoingPacketTypes) { + String[] supportedPacketTypes, String[] outgoingPacketTypes, + Class instantiableClass) { this.displayName = displayName; this.description = description; this.icon = icon; @@ -69,6 +57,7 @@ public class PluginFactory { HashSet outgoing = new HashSet<>(); if (outgoingPacketTypes != null) Collections.addAll(outgoing, outgoingPacketTypes); this.outgoingPacketTypes = Collections.unmodifiableSet(outgoing); + this.instantiableClass = instantiableClass; } public String getDisplayName() { @@ -103,6 +92,10 @@ public class PluginFactory { return supportedPacketTypes; } + Class getInstantiableClass() { + return instantiableClass; + } + private final String displayName; private final String description; private final Drawable icon; @@ -111,70 +104,40 @@ public class PluginFactory { private final boolean listenToUnpaired; private final Set supportedPacketTypes; private final Set outgoingPacketTypes; + private final Class instantiableClass; } - private static final Map availablePlugins = new ConcurrentHashMap<>(); - private static final Map pluginInfoCache = new ConcurrentHashMap<>(); + private static final Map pluginInfo = new ConcurrentHashMap<>(); - static { - PluginFactory.registerPlugin(TelephonyPlugin.class); - PluginFactory.registerPlugin(PingPlugin.class); - PluginFactory.registerPlugin(MprisPlugin.class); - PluginFactory.registerPlugin(ClipboardPlugin.class); - PluginFactory.registerPlugin(BatteryPlugin.class); - PluginFactory.registerPlugin(SftpPlugin.class); - PluginFactory.registerPlugin(NotificationsPlugin.class); - PluginFactory.registerPlugin(ReceiveNotificationsPlugin.class); - PluginFactory.registerPlugin(MousePadPlugin.class); - PluginFactory.registerPlugin(PresenterPlugin.class); - PluginFactory.registerPlugin(SharePlugin.class); - PluginFactory.registerPlugin(SMSPlugin.class); - PluginFactory.registerPlugin(FindMyPhonePlugin.class); - PluginFactory.registerPlugin(RunCommandPlugin.class); - PluginFactory.registerPlugin(ContactsPlugin.class); - PluginFactory.registerPlugin(RemoteKeyboardPlugin.class); - PluginFactory.registerPlugin(SystemvolumePlugin.class); - //PluginFactory.registerPlugin(MprisReceiverPlugin.class); - PluginFactory.registerPlugin(FindRemoteDevicePlugin.class); + public static PluginInfo getPluginInfo(String pluginKey) { + return pluginInfo.get(pluginKey); } - public static PluginInfo getPluginInfo(Context context, String pluginKey) { - - PluginInfo info = pluginInfoCache.get(pluginKey); //Is it cached? - if (info != null) { - return info; - } - + public static void initPluginInfo(Context context) { try { - Plugin p = ((Plugin) availablePlugins.get(pluginKey).newInstance()); - p.setContext(context, null); - info = new PluginInfo(p.getDisplayName(), p.getDescription(), p.getIcon(), - p.isEnabledByDefault(), p.hasSettings(), p.listensToUnpairedDevices(), - p.getSupportedPacketTypes(), p.getOutgoingPacketTypes()); - pluginInfoCache.put(pluginKey, info); //Cache it - return info; + for (Class pluginClass : ClassIndex.getAnnotated(LoadablePlugin.class)) { + Plugin p = ((Plugin) pluginClass.newInstance()); + p.setContext(context, null); + PluginInfo info = new PluginInfo(p.getDisplayName(), p.getDescription(), p.getIcon(), + p.isEnabledByDefault(), p.hasSettings(), p.listensToUnpairedDevices(), + p.getSupportedPacketTypes(), p.getOutgoingPacketTypes(), p.getClass()); + pluginInfo.put(p.getPluginKey(), info); + } } catch (Exception e) { - Log.e("PluginFactory", "getPluginInfo exception"); - e.printStackTrace(); throw new RuntimeException(e); } - + Log.i("PluginFactory","Loaded "+pluginInfo.size()+" plugins"); } public static Set getAvailablePlugins() { - return availablePlugins.keySet(); + return pluginInfo.keySet(); } public static Plugin instantiatePluginForDevice(Context context, String pluginKey, Device device) { - Class c = availablePlugins.get(pluginKey); - if (c == null) { - Log.e("PluginFactory", "Plugin not found: " + pluginKey); - return null; - } - + PluginInfo info = pluginInfo.get(pluginKey); try { - Plugin plugin = (Plugin) c.newInstance(); + Plugin plugin = info.getInstantiableClass().newInstance(); plugin.setContext(context, device); return plugin; } catch (Exception e) { @@ -182,46 +145,32 @@ public class PluginFactory { e.printStackTrace(); return null; } - } - private static void registerPlugin(Class pluginClass) { - try { - String pluginKey = Plugin.getPluginKey(pluginClass); - availablePlugins.put(pluginKey, pluginClass); - } catch (Exception e) { - Log.e("PluginFactory", "addPlugin exception"); - e.printStackTrace(); - } - } - - - public static Set getIncomingCapabilities(Context context) { + public static Set getIncomingCapabilities() { HashSet capabilities = new HashSet<>(); - for (String pluginId : availablePlugins.keySet()) { - PluginInfo plugin = getPluginInfo(context, pluginId); + for (PluginInfo plugin : pluginInfo.values()) { capabilities.addAll(plugin.getSupportedPacketTypes()); } - return capabilities; } - public static Set getOutgoingCapabilities(Context context) { + public static Set getOutgoingCapabilities() { HashSet capabilities = new HashSet<>(); - for (String pluginId : availablePlugins.keySet()) { - PluginInfo plugin = getPluginInfo(context, pluginId); + for (PluginInfo plugin : pluginInfo.values()) { capabilities.addAll(plugin.getOutgoingPacketTypes()); } return capabilities; } - public static Set pluginsForCapabilities(Context context, Set incoming, Set outgoing) { + public static Set pluginsForCapabilities(Set incoming, Set outgoing) { HashSet plugins = new HashSet<>(); - for (String pluginId : availablePlugins.keySet()) { - PluginInfo plugin = getPluginInfo(context, pluginId); + for (Map.Entry entry : pluginInfo.entrySet()) { + String pluginId = entry.getKey(); + PluginInfo info = entry.getValue(); //Check incoming against outgoing - if (Collections.disjoint(outgoing, plugin.getSupportedPacketTypes()) - && Collections.disjoint(incoming, plugin.getOutgoingPacketTypes())) { + if (Collections.disjoint(outgoing, info.getSupportedPacketTypes()) + && Collections.disjoint(incoming, info.getOutgoingPacketTypes())) { Log.i("PluginFactory", "Won't load " + pluginId + " because of unmatched capabilities"); continue; //No capabilities in common, do not load this plugin } diff --git a/src/org/kde/kdeconnect/Plugins/PresenterPlugin/PresenterPlugin.java b/src/org/kde/kdeconnect/Plugins/PresenterPlugin/PresenterPlugin.java index 0645a59e..f36e5229 100644 --- a/src/org/kde/kdeconnect/Plugins/PresenterPlugin/PresenterPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/PresenterPlugin/PresenterPlugin.java @@ -28,12 +28,14 @@ import android.view.KeyEvent; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect_tp.R; import androidx.core.content.ContextCompat; import static org.kde.kdeconnect.Plugins.MousePadPlugin.KeyListenerView.SpecialKeysMap; +@PluginFactory.LoadablePlugin public class PresenterPlugin extends Plugin { private final static String PACKET_TYPE_MOUSEPAD_REQUEST = "kdeconnect.mousepad.request"; diff --git a/src/org/kde/kdeconnect/Plugins/ReceiveNotificationsPlugin/ReceiveNotificationsPlugin.java b/src/org/kde/kdeconnect/Plugins/ReceiveNotificationsPlugin/ReceiveNotificationsPlugin.java index b82f66a1..15702e87 100644 --- a/src/org/kde/kdeconnect/Plugins/ReceiveNotificationsPlugin/ReceiveNotificationsPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/ReceiveNotificationsPlugin/ReceiveNotificationsPlugin.java @@ -32,6 +32,7 @@ import android.util.Log; import org.kde.kdeconnect.Helpers.NotificationHelper; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect.UserInterface.MainActivity; import org.kde.kdeconnect_tp.R; @@ -39,6 +40,7 @@ import java.io.InputStream; import androidx.core.app.NotificationCompat; +@PluginFactory.LoadablePlugin public class ReceiveNotificationsPlugin extends Plugin { private final static String PACKET_TYPE_NOTIFICATION = "kdeconnect.notification"; diff --git a/src/org/kde/kdeconnect/Plugins/RemoteKeyboardPlugin/RemoteKeyboardPlugin.java b/src/org/kde/kdeconnect/Plugins/RemoteKeyboardPlugin/RemoteKeyboardPlugin.java index 9ee33f2b..0d391cd6 100644 --- a/src/org/kde/kdeconnect/Plugins/RemoteKeyboardPlugin/RemoteKeyboardPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/RemoteKeyboardPlugin/RemoteKeyboardPlugin.java @@ -33,6 +33,7 @@ import android.view.inputmethod.InputConnection; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect_tp.R; import java.util.ArrayList; @@ -41,6 +42,7 @@ import java.util.concurrent.locks.ReentrantLock; import androidx.core.content.ContextCompat; import androidx.core.util.Pair; +@PluginFactory.LoadablePlugin public class RemoteKeyboardPlugin extends Plugin { private final static String PACKET_TYPE_MOUSEPAD_REQUEST = "kdeconnect.mousepad.request"; diff --git a/src/org/kde/kdeconnect/Plugins/RunCommandPlugin/RunCommandPlugin.java b/src/org/kde/kdeconnect/Plugins/RunCommandPlugin/RunCommandPlugin.java index 569f3008..967ed3f3 100644 --- a/src/org/kde/kdeconnect/Plugins/RunCommandPlugin/RunCommandPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/RunCommandPlugin/RunCommandPlugin.java @@ -29,6 +29,7 @@ import org.json.JSONException; import org.json.JSONObject; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect_tp.R; import java.util.ArrayList; @@ -37,6 +38,7 @@ import java.util.Iterator; import androidx.core.content.ContextCompat; +@PluginFactory.LoadablePlugin public class RunCommandPlugin extends Plugin { private final static String PACKET_TYPE_RUNCOMMAND = "kdeconnect.runcommand"; diff --git a/src/org/kde/kdeconnect/Plugins/SMSPlugin/SMSPlugin.java b/src/org/kde/kdeconnect/Plugins/SMSPlugin/SMSPlugin.java index 05795c90..bc33d199 100644 --- a/src/org/kde/kdeconnect/Plugins/SMSPlugin/SMSPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/SMSPlugin/SMSPlugin.java @@ -44,6 +44,7 @@ import org.kde.kdeconnect.Helpers.ContactsHelper; import org.kde.kdeconnect.Helpers.SMSHelper; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect.Plugins.TelephonyPlugin.TelephonyPlugin; import org.kde.kdeconnect_tp.BuildConfig; import org.kde.kdeconnect_tp.R; @@ -59,6 +60,7 @@ import androidx.core.content.ContextCompat; import static org.kde.kdeconnect.Plugins.TelephonyPlugin.TelephonyPlugin.PACKET_TYPE_TELEPHONY; +@PluginFactory.LoadablePlugin public class SMSPlugin extends Plugin { /** diff --git a/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java b/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java index 714db0cb..1c4508aa 100644 --- a/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/SftpPlugin/SftpPlugin.java @@ -27,12 +27,14 @@ import android.os.Environment; import org.kde.kdeconnect.Helpers.StorageHelper; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect_tp.R; import java.io.File; import java.util.ArrayList; import java.util.List; +@PluginFactory.LoadablePlugin public class SftpPlugin extends Plugin { private final static String PACKET_TYPE_SFTP = "kdeconnect.sftp"; diff --git a/src/org/kde/kdeconnect/Plugins/SharePlugin/SharePlugin.java b/src/org/kde/kdeconnect/Plugins/SharePlugin/SharePlugin.java index 4beb2d5f..8ad4aca0 100644 --- a/src/org/kde/kdeconnect/Plugins/SharePlugin/SharePlugin.java +++ b/src/org/kde/kdeconnect/Plugins/SharePlugin/SharePlugin.java @@ -43,6 +43,7 @@ import android.widget.Toast; import org.kde.kdeconnect.Helpers.NotificationHelper; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect.UserInterface.PluginSettingsFragment; import org.kde.kdeconnect_tp.R; @@ -57,6 +58,7 @@ import androidx.annotation.WorkerThread; import androidx.core.app.NotificationCompat; import androidx.core.content.ContextCompat; +@PluginFactory.LoadablePlugin public class SharePlugin extends Plugin { private final static String PACKET_TYPE_SHARE_REQUEST = "kdeconnect.share.request"; final static String PACKET_TYPE_SHARE_REQUEST_UPDATE = "kdeconnect.share.request.update"; diff --git a/src/org/kde/kdeconnect/Plugins/SystemvolumePlugin/SystemvolumePlugin.java b/src/org/kde/kdeconnect/Plugins/SystemvolumePlugin/SystemvolumePlugin.java index e8a4444b..01b81b22 100644 --- a/src/org/kde/kdeconnect/Plugins/SystemvolumePlugin/SystemvolumePlugin.java +++ b/src/org/kde/kdeconnect/Plugins/SystemvolumePlugin/SystemvolumePlugin.java @@ -25,13 +25,14 @@ import org.json.JSONException; import org.json.JSONObject; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect_tp.R; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; - +@PluginFactory.LoadablePlugin public class SystemvolumePlugin extends Plugin { private final static String PACKET_TYPE_SYSTEMVOLUME = "kdeconnect.systemvolume"; diff --git a/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java b/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java index 549fddc2..5b885496 100644 --- a/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java @@ -37,6 +37,7 @@ import android.util.Log; import org.kde.kdeconnect.Helpers.ContactsHelper; import org.kde.kdeconnect.NetworkPacket; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect.Plugins.PluginFactory; import org.kde.kdeconnect_tp.R; import java.util.Map; @@ -45,6 +46,7 @@ import java.util.TimerTask; import androidx.core.content.ContextCompat; +@PluginFactory.LoadablePlugin public class TelephonyPlugin extends Plugin { diff --git a/src/org/kde/kdeconnect/UserInterface/PluginPreference.java b/src/org/kde/kdeconnect/UserInterface/PluginPreference.java index 581703a2..3c1da8fa 100644 --- a/src/org/kde/kdeconnect/UserInterface/PluginPreference.java +++ b/src/org/kde/kdeconnect/UserInterface/PluginPreference.java @@ -26,7 +26,7 @@ class PluginPreference extends CheckBoxPreference { this.device = device; this.pluginKey = pluginKey; - PluginFactory.PluginInfo info = PluginFactory.getPluginInfo(context, pluginKey); + PluginFactory.PluginInfo info = PluginFactory.getPluginInfo(pluginKey); setTitle(info.getDisplayName()); setSummary(info.getDescription()); setIcon(android.R.color.transparent); diff --git a/src/org/kde/kdeconnect/UserInterface/PluginSettingsFragment.java b/src/org/kde/kdeconnect/UserInterface/PluginSettingsFragment.java index ef5c3c82..b7e51703 100644 --- a/src/org/kde/kdeconnect/UserInterface/PluginSettingsFragment.java +++ b/src/org/kde/kdeconnect/UserInterface/PluginSettingsFragment.java @@ -75,7 +75,7 @@ public class PluginSettingsFragment extends PreferenceFragmentCompat { public void onResume() { super.onResume(); - PluginFactory.PluginInfo info = PluginFactory.getPluginInfo(requireContext(), pluginKey); + PluginFactory.PluginInfo info = PluginFactory.getPluginInfo(pluginKey); requireActivity().setTitle(getString(R.string.plugin_settings_with_name, info.getDisplayName())); } }