kdeconnect-kde/plugins
Yuchen Shi b9a089344e Add config for clipboard plugin on content types to share.
## Summary

This MR adds a config dialog for the Clipboard plugin, where the user can toggle
whether to share password and/or anything else with other devices.

Implements !39

BUG: 458063

According to previous discussion at !39 (and the bug linked), some users want to
skip sending passwords to other devices while others rely on the existing behavior.
This MR addresses that by allowing users to control those two types separately and
will replace !39 if merged.

![Screenshot with new config dialog](/uploads/3dfc6c6d69b86e6512e6a8948320a839/Screenshot_1661407807.png)

Borrowing the idea from !39, the `x-kde-passwordManagerHint` MIME data hint is used
to determine whether the content is considered secret. I've tested this method with
KeepassXC which [sets this correctly](a6d3f973fa/src/gui/Clipboard.cpp (L62)). See test plan below.

In theory, MIME also can be used to test for images and another checkbox can
be easily added should we decided to support images later. For now though, the
enum and the config supports only passwords or "anything else". Both defaults to true,
thus keeping full backwards compatibility. I've been keeping both unchecked since
I only share in one direction (Android to Linux), which wasn't possible until this MR.
Others may want to make their own choices.

## Test Plan

Please reference the screenshot above for the steps.

From the indicator, right-click and select `Configure`. Select a device from the
left side (or pair one if needed). In "available plugins", make sure "Clipboard"
is checked, and verify that a "Configure" icon button is now shown on the right.

Clicking that icon should bring up the new config dialog, where the two check boxes
can be toggled as desired. Click on "OK" to save and apply the settings. Clicking on
"Defaults" should bring both back to checked (the default behavior).

Copy normal plain text from your favorite text editor and it should be sent to another
device if the "anything else" checkbox is checked. I've tested this on an Android phone
but I see no reason it won't work elsewhere given the code for sending has not been changed.
(Feel free to test on other devices.)

Open KeepassXC and select an entry, right click and select "Copy password". This sets
the MIME hint so it should be treated as a password, controlled by the "passwords" checkbox.
I've toggled the settings multiple times on and off. Once "OK" is clicked, the next clipboard
change should pick up the latest settings.

I've only tested on Linux desktops (Arch Linux) since I do not own a Mac. I don't believe any
OS X application sets `x-kde-passwordManagerHint` at all, so they may be controlled by "anything else".
2022-10-17 21:04:20 +00:00
..
battery SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
bigscreen SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
clipboard Add config for clipboard plugin on content types to share. 2022-10-17 21:04:20 +00:00
connectivity-report SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
contacts SVN_SILENT made messages (.desktop file) - always resolve ours 2022-10-16 01:56:08 +00:00
findmyphone SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
findthisdevice SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
lockdevice SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
mousepad SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
mpriscontrol SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-23 01:43:42 +00:00
mprisremote SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
notifications [plasmoid] Add inline reply for notifications instead of opening a dialog 2022-09-26 19:51:28 +00:00
pausemusic SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-24 01:45:58 +00:00
photo SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
ping SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
presenter SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
remotecommands SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
remotecontrol SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
remotekeyboard SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-23 01:43:42 +00:00
remotesystemvolume SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
runcommand SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
screensaver-inhibit Add and make use of ECM's clang-format integration 2022-09-11 23:21:58 +00:00
sendnotifications Add and make use of ECM's clang-format integration 2022-09-11 23:21:58 +00:00
sftp Add and make use of ECM's clang-format integration 2022-09-11 23:21:58 +00:00
share Add and make use of ECM's clang-format integration 2022-09-11 23:21:58 +00:00
sms SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
systemvolume SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
telephony SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-23 01:43:42 +00:00
virtualmonitor virtualmonitor: Make sure we clean up m_process after deleting 2022-10-17 00:33:33 +02:00
CMakeLists.txt Introduce the VirtualMonitor plugin 2022-05-25 00:04:47 +02:00
kdeconnect.notifyrc SVN_SILENT made messages (.desktop file) - always resolve ours 2022-09-30 01:47:48 +00:00
Messages.sh Figure out Messages.sh after code refactoring 2014-06-17 18:45:47 +02:00
README.txt Update README.txt in Plugins to include the current method to build a skeleton for a Plugin 2020-03-27 21:02:16 +05:30

Writing a plugin for KDE Connect
=================================

For the desktop client (this project):
--------------------------------------

1. Enter the "plugins" directory.
2. Copy the "ping" under a different name ("findmyphone" in this example).
3. Add "add_subdirectory(findmyphone)" to CMakeLists.txt after the others "add_subdirectory".
4. Enter the new "findmyphone" directory.
5. Edit CMakeLists.txt by replacing "ping" with "findmyphone".
6. Rename other files in this directory by replacing "ping" with "findmyphone"
7. Write a description of your plugin into "README"
8. Edit findmyphoneplugin.cpp and findmyphoneplugin.h.
  A. Change license header.
  B. Replace (case sensitive) "ping" with "findmyphone", "PingPlugin" with "FindMyPhonePlugin" and "PING" with "FINDMYPHONE".
9. Edit kdeconnect_findmyphone.json file:
  A. Replace "ping" with "findmyphone".
  B. Change name, description, icon, author, email, version, website, license info.
  C. Remove all the translations
  D. Set X-KDEConnect-SupportedPacketType and X-KDEConnect-OutgoingPacketType to the packet type your plugin will receive
     and send, respectively. In this example this is "kdeconnect.findmyphone". Make sure that this matches what is defined in
     the findmyplugin.h file (in the line "#define PACKET_TYPE_..."), and also in Android.
10. Now you have an empty skeleton to implement your new plugin logic.

For Android (project kdeconnect-android):
-----------------------------------------

1. Change directory to src/org/kde/kdeconnect/Plugins.
2. Copy "PingPlugin" under a different name ("FindMyPhonePlugin" in this example).
3. Enter the new "FindMyPhonePlugin" directory.
4. Rename "PingPlugin.java" to "FindMyPhonePlugin.java"
5. Edit it. Replace (case sensitive) "Ping" with "FindMyPhone", "ping" with "findmyphone", "PING" with "FINDMYPHONE"
   and "plugin_ping" with "plugin_findmyphone".
6. Open res/values/strings.xml. Find and copy the lines "pref_plugin_ping_desc" and "pref_plugin_ping" replacing "ping"
   with "findmyphone" and edit the plugin name and description between <string> </string>).
7. Now you have an empty skeleton to implement your new plugin logic.