diff --git a/src/org/kde/kdeconnect/Plugins/PingPlugin/PingPlugin.java b/src/org/kde/kdeconnect/Plugins/PingPlugin/PingPlugin.java deleted file mode 100644 index 3b29009e..00000000 --- a/src/org/kde/kdeconnect/Plugins/PingPlugin/PingPlugin.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2014 Albert Vaca Cintora - * - * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL - */ - -package org.kde.kdeconnect.Plugins.PingPlugin; - -import android.Manifest; -import android.app.Activity; -import android.app.Notification; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.os.Build; -import android.os.Handler; -import android.os.Looper; -import android.util.Log; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.core.app.NotificationCompat; -import androidx.core.content.ContextCompat; - -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 java.util.Objects; - -@PluginFactory.LoadablePlugin -public class PingPlugin extends Plugin { - - private final static String PACKET_TYPE_PING = "kdeconnect.ping"; - - @Override - public @NonNull String getDisplayName() { - return context.getResources().getString(R.string.pref_plugin_ping); - } - - @Override - public @NonNull String getDescription() { - return context.getResources().getString(R.string.pref_plugin_ping_desc); - } - - @Override - public boolean onPacketReceived(@NonNull NetworkPacket np) { - - if (!np.getType().equals(PACKET_TYPE_PING)) { - Log.e("PingPlugin", "Ping plugin should not receive packets other than pings!"); - return false; - } - - //Log.e("PingPacketReceiver", "was a ping!"); - - PendingIntent resultPendingIntent = PendingIntent.getActivity( - context, - 0, - new Intent(context, MainActivity.class), - PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE - ); - - int id; - String message; - if (np.has("message")) { - message = np.getString("message"); - id = (int) System.currentTimeMillis(); - } else { - message = "Ping!"; - id = 42; //A unique id to create only one notification - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - int permissionResult = ContextCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS); - if (permissionResult != PackageManager.PERMISSION_GRANTED) { - // If notifications are not allowed, show a toast instead of a notification - new Handler(Looper.getMainLooper()).post(() -> Toast.makeText(context, message, Toast.LENGTH_LONG).show()); - return true; - } - } - - NotificationManager notificationManager = ContextCompat.getSystemService(context, NotificationManager.class); - - Notification noti = new NotificationCompat.Builder(context, NotificationHelper.Channels.DEFAULT) - .setContentTitle(getDevice().getName()) - .setContentText(message) - .setContentIntent(resultPendingIntent) - .setTicker(message) - .setSmallIcon(R.drawable.ic_notification) - .setAutoCancel(true) - .setDefaults(Notification.DEFAULT_ALL) - .setStyle(new NotificationCompat.BigTextStyle().bigText(message)) - .build(); - - NotificationHelper.notifyCompat(notificationManager, id, noti); - - return true; - - } - - @Override - public @NonNull String getActionName() { - return context.getString(R.string.send_ping); - } - - @Override - public void startMainActivity(Activity activity) { - if (isDeviceInitialized()) { - getDevice().sendPacket(new NetworkPacket(PACKET_TYPE_PING)); - } - } - - @Override - public boolean displayInContextMenu() { - return true; - } - - @Override - public @NonNull String[] getSupportedPacketTypes() { - return new String[]{PACKET_TYPE_PING}; - } - - @Override - public @NonNull String[] getOutgoingPacketTypes() { - return new String[]{PACKET_TYPE_PING}; - } - -} diff --git a/src/org/kde/kdeconnect/Plugins/PingPlugin/PingPlugin.kt b/src/org/kde/kdeconnect/Plugins/PingPlugin/PingPlugin.kt new file mode 100644 index 00000000..85383ec6 --- /dev/null +++ b/src/org/kde/kdeconnect/Plugins/PingPlugin/PingPlugin.kt @@ -0,0 +1,108 @@ +/* + * SPDX-FileCopyrightText: 2014 Albert Vaca Cintora + * + * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL + */ +package org.kde.kdeconnect.Plugins.PingPlugin + +import android.Manifest +import android.app.Activity +import android.app.Notification +import android.app.NotificationManager +import android.app.PendingIntent +import android.content.Intent +import android.content.pm.PackageManager +import android.os.Build +import android.os.Handler +import android.os.Looper +import android.util.Log +import android.widget.Toast +import androidx.core.app.NotificationCompat +import androidx.core.content.ContextCompat +import androidx.core.content.ContextCompat.getSystemService +import androidx.core.content.getSystemService +import org.kde.kdeconnect.Helpers.NotificationHelper +import org.kde.kdeconnect.NetworkPacket +import org.kde.kdeconnect.Plugins.Plugin +import org.kde.kdeconnect.Plugins.PluginFactory.LoadablePlugin +import org.kde.kdeconnect.UserInterface.MainActivity +import org.kde.kdeconnect_tp.R + +@LoadablePlugin +class PingPlugin : Plugin() { + override val displayName: String + get() = context.resources.getString(R.string.pref_plugin_ping) + + override val description: String + get() = context.resources.getString(R.string.pref_plugin_ping_desc) + + override fun onPacketReceived(np: NetworkPacket): Boolean { + if (np.type != PACKET_TYPE_PING) { + Log.e(LOG_TAG, "Ping plugin should not receive packets other than pings!") + return false + } + + val mutableUpdateFlags = PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE + val resultPendingIntent = PendingIntent.getActivity(context, 0, Intent(context, MainActivity::class.java), mutableUpdateFlags) + + val (id: Int, message: String) = if (np.has("message")) { + val id = System.currentTimeMillis().toInt() + Pair(id, np.getString("message")) + } else { + val id = 42 // A unique id to create only one notification + Pair(id, "Ping!") + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + val permissionResult = ContextCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) + if (permissionResult != PackageManager.PERMISSION_GRANTED) { + // If notifications are not allowed, show a toast instead of a notification + Handler(Looper.getMainLooper()).post { + Toast.makeText(context, message, Toast.LENGTH_LONG).show() + } + return true + } + } + + val notificationManager = context.getSystemService() + + val notification = NotificationCompat.Builder(context, NotificationHelper.Channels.DEFAULT) + .setContentTitle(device.name) + .setContentText(message) + .setContentIntent(resultPendingIntent) + .setTicker(message) + .setSmallIcon(R.drawable.ic_notification) + .setAutoCancel(true) + .setDefaults(Notification.DEFAULT_ALL) + .setStyle(NotificationCompat.BigTextStyle().bigText(message)) + .build() + + NotificationHelper.notifyCompat(notificationManager, id, notification) + + return true + } + + override val actionName: String + get() = context.getString(R.string.send_ping) + + override fun startMainActivity(parentActivity: Activity) { + if (isDeviceInitialized) { + device.sendPacket(NetworkPacket(PACKET_TYPE_PING)) + } + } + + override fun displayInContextMenu(): Boolean { + return true + } + + override val supportedPacketTypes: Array + get() = arrayOf(PACKET_TYPE_PING) + + override val outgoingPacketTypes: Array + get() = arrayOf(PACKET_TYPE_PING) + + companion object { + private const val PACKET_TYPE_PING = "kdeconnect.ping" + private const val LOG_TAG = "PingPlugin" + } +}