2
0
mirror of https://github.com/KDE/kdeconnect-android synced 2025-08-31 14:15:14 +00:00

Migrate PingPlugin to Kotlin

This commit is contained in:
TPJ Schikhof
2024-09-16 10:20:43 +00:00
committed by Albert Vaca Cintora
parent 2c0a9d262e
commit 409ef6b579
2 changed files with 108 additions and 132 deletions

View File

@@ -1,132 +0,0 @@
/*
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* 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};
}
}

View File

@@ -0,0 +1,108 @@
/*
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* 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<NotificationManager>()
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<String>
get() = arrayOf(PACKET_TYPE_PING)
override val outgoingPacketTypes: Array<String>
get() = arrayOf(PACKET_TYPE_PING)
companion object {
private const val PACKET_TYPE_PING = "kdeconnect.ping"
private const val LOG_TAG = "PingPlugin"
}
}