Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: update to alpha.17, typed mobile plugin IPC arguments #676

Merged
merged 23 commits into from
Oct 29, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
update to new args class syntax :( [skip ci]
  • Loading branch information
lucasfernog committed Oct 22, 2023
commit 45f5e4079818e0093a18c8cd9dc82df556f79ab5
19 changes: 10 additions & 9 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import app.tauri.Logger
import app.tauri.PermissionState
import app.tauri.annotation.ActivityCallback
import app.tauri.annotation.Command
import app.tauri.annotation.InvokeArg
import app.tauri.annotation.Permission
import app.tauri.annotation.PermissionCallback
import app.tauri.annotation.TauriPlugin
Expand All @@ -57,7 +58,12 @@ private const val PERMISSION_ALIAS_CAMERA = "camera"
private const val PERMISSION_NAME = Manifest.permission.CAMERA
private const val PREFS_PERMISSION_FIRST_TIME_ASKING = "PREFS_PERMISSION_FIRST_TIME_ASKING"

class ScanOptions(val formats: Array<String>?, val windowed: Boolean?, val cameraDirection: String?)
@InvokeArg
class ScanOptions {
var formats: Array<String>? = null
var windowed: Boolean = false
var cameraDirection: String? = null
}

@TauriPlugin(
permissions = [
Expand Down Expand Up @@ -344,7 +350,7 @@ class BarcodeScannerPlugin(private val activity: Activity) : Plugin(activity),
throw Exception("No permission to use camera. Did you request it yet?")
} else {
webViewBackground = null
prepare(args.cameraDirection ?: "back", args.windowed ?: false)
prepare(args.cameraDirection ?: "back", args.windowed)
configureCamera(getFormats(args))
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import android.content.ClipDescription
import android.content.ClipboardManager
import android.content.Context
import app.tauri.annotation.Command
import app.tauri.annotation.InvokeArg
import app.tauri.annotation.TauriPlugin
import app.tauri.plugin.Invoke
import app.tauri.plugin.Plugin
Expand All @@ -26,15 +27,21 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize
import com.fasterxml.jackson.databind.ser.std.StdSerializer
import java.io.IOException

@InvokeArg
@JsonDeserialize(using = WriteOptionsDeserializer::class)
sealed class WriteOptions {
@JsonDeserialize
class PlainText(val text: String, val label: String?): WriteOptions()
class PlainText: WriteOptions() {
lateinit var text: String
var label: String? = null
}
}

@JsonSerialize(using = ReadClipDataSerializer::class)
sealed class ReadClipData {
class PlainText(val text: String): ReadClipData()
class PlainText: ReadClipData() {
lateinit var text: String
}
}

internal class ReadClipDataSerializer @JvmOverloads constructor(t: Class<ReadClipData>? = null) :
Expand Down Expand Up @@ -103,7 +110,9 @@ class ClipboardPlugin(private val activity: Activity) : Plugin(activity) {
val data = if (manager.hasPrimaryClip()) {
if (manager.primaryClipDescription?.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN) == true) {
val item: ClipData.Item = manager.primaryClip!!.getItemAt(0)
ReadClipData.PlainText(item.text.toString())
val data = ReadClipData.PlainText()
data.text = item.text.toString()
data
} else {
// TODO
invoke.reject("Clipboard content reader not implemented")
Expand Down
6 changes: 5 additions & 1 deletion plugins/deep-link/android/src/main/java/DeepLinkPlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,18 @@ import android.app.Activity
import android.content.Intent
import android.webkit.WebView
import app.tauri.Logger
import app.tauri.annotation.InvokeArg
import app.tauri.annotation.Command
import app.tauri.annotation.TauriPlugin
import app.tauri.plugin.Channel
import app.tauri.plugin.JSObject
import app.tauri.plugin.Plugin
import app.tauri.plugin.Invoke

class SetEventHandlerArgs(val handler: Channel)
@InvokeArg
class SetEventHandlerArgs {
lateinit var handler: Channel
}

@TauriPlugin
class DeepLinkPlugin(private val activity: Activity): Plugin(activity) {
Expand Down
14 changes: 12 additions & 2 deletions plugins/dialog/android/src/main/java/DialogPlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,26 @@ import androidx.activity.result.ActivityResult
import app.tauri.Logger
import app.tauri.annotation.ActivityCallback
import app.tauri.annotation.Command
import app.tauri.annotation.InvokeArg
import app.tauri.annotation.TauriPlugin
import app.tauri.plugin.Invoke
import app.tauri.plugin.JSArray
import app.tauri.plugin.JSObject
import app.tauri.plugin.Plugin

class Filter(val extensions: Array<String>)
@InvokeArg
class Filter {
lateinit var extensions: Array<String>
}

class FilePickerOptions(val filters: Array<Filter>, val multiple: Boolean?, val readData: Boolean?)
@InvokeArg
class FilePickerOptions {
lateinit var filters: Array<Filter>
var multiple: Boolean? = null
var readData: Boolean? = null
}

@InvokeArg
class MessageOptions(val title: String?, val message: String, val okButtonLabel: String?, val cancelButtonLabel: String?)

@TauriPlugin
Expand Down
54 changes: 29 additions & 25 deletions plugins/notification/android/src/main/java/ChannelManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import android.media.AudioAttributes
import android.net.Uri
import android.os.Build
import app.tauri.Logger
import app.tauri.annotation.InvokeArg
import app.tauri.plugin.Invoke
import com.fasterxml.jackson.annotation.JsonValue

Expand All @@ -30,19 +31,23 @@ enum class Visibility(@JsonValue val value: Int) {
Public(1);
}

class Channel(
val id: String,
val name: String,
val description: String?,
val sound: String?,
val lights: Boolean?,
val lightsColor: String?,
val vibration: Boolean?,
val importance: Importance?,
val visibility: Visibility?
)
@InvokeArg
class Channel {
lateinit var id: String
lateinit var name: String
var description: String? = null
var sound: String? = null
var lights: Boolean? = null
var lightsColor: String? = null
var vibration: Boolean? = null
var importance: Importance? = null
var visibility: Visibility? = null
}

class DeleteChannelArgs(val id: String)
@InvokeArg
class DeleteChannelArgs {
lateinit var id: String
}

class ChannelManager(private var context: Context) {
private var notificationManager: NotificationManager? = null
Expand Down Expand Up @@ -120,20 +125,19 @@ class ChannelManager(private var context: Context) {
val channels = mutableListOf<Channel>()

for (notificationChannel in notificationChannels) {
val channel = Channel(
notificationChannel.id,
notificationChannel.name.toString(),
notificationChannel.description,
notificationChannel.sound.toString(),
notificationChannel.shouldShowLights(),
String.format(
"#%06X",
0xFFFFFF and notificationChannel.lightColor
),
notificationChannel.shouldVibrate(),
Importance.values().firstOrNull { it.value == notificationChannel.importance },
Visibility.values().firstOrNull { it.value == notificationChannel.lockscreenVisibility }
val channel = Channel()
channel.id = notificationChannel.id
channel.name = notificationChannel.name.toString()
channel.description = notificationChannel.description
channel.sound = notificationChannel.sound.toString()
channel.lights = notificationChannel.shouldShowLights()
String.format(
"#%06X",
0xFFFFFF and notificationChannel.lightColor
)
channel.vibration = notificationChannel.shouldVibrate()
channel.importance = Importance.values().firstOrNull { it.value == notificationChannel.importance }
channel.visibility = Visibility.values().firstOrNull { it.value == notificationChannel.lockscreenVisibility }

channels.add(channel)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,15 @@ import android.content.ContentResolver
import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import app.tauri.annotation.InvokeArg
import app.tauri.plugin.JSArray
import app.tauri.plugin.JSObject
import org.json.JSONException
import org.json.JSONObject

class Notification(var id: Int) {
@InvokeArg
class Notification {
var id: Int = 0
var title: String? = null
var body: String? = null
var largeBody: String? = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import android.os.Build
import android.webkit.WebView
import app.tauri.PermissionState
import app.tauri.annotation.Command
import app.tauri.annotation.InvokeArg
import app.tauri.annotation.Permission
import app.tauri.annotation.PermissionCallback
import app.tauri.annotation.TauriPlugin
Expand All @@ -24,21 +25,51 @@ import app.tauri.plugin.Plugin

const val LOCAL_NOTIFICATIONS = "permissionState"

class PluginConfig(val icon: String?, val sound: String?, val iconColor: String?)
@InvokeArg
class PluginConfig {
var icon: String? = null
var sound: String? = null
var iconColor: String? = null
}

class BatchArgs(val notifications: List<Notification>)
@InvokeArg
class BatchArgs {
lateinit var notifications: List<Notification>
}

class CancelArgs(val notifications: List<Int>)
@InvokeArg
class CancelArgs {
lateinit var notifications: List<Int>
}

class NotificationAction(val id: String, val title: String?, val input: Boolean?)
@InvokeArg
class NotificationAction {
lateinit var id: String
var title: String? = null
var input: Boolean? = null
}

class ActionType(val id: String, val actions: List<NotificationAction>)
@InvokeArg
class ActionType {
lateinit var id: String
lateinit var actions: List<NotificationAction>
}

class RegisterActionTypesArgs(val types: List<ActionType>)
@InvokeArg
class RegisterActionTypesArgs {
lateinit var types: List<ActionType>
}

class ActiveNotification(val id: Int, val tag: String?)
@InvokeArg
class ActiveNotification {
var id: Int = 0
var tag: String? = null
}

class RemoveActiveArgs(val notifications: List<ActiveNotification>)
@InvokeArg
class RemoveActiveArgs {
var notifications: List<ActiveNotification> = listOf()
}

@TauriPlugin(
permissions = [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,12 @@ class NotificationStorage(private val context: Context) {
val id = storage.getString("id$i", "")
val title = storage.getString("title$i", "")
val input = storage.getBoolean("input$i", false)
actions[i] = NotificationAction(id ?: "", title, input)

val action = NotificationAction()
action.id = id ?: ""
action.title = title
action.input = input
actions[i] = action
}
return actions
}
Expand Down
6 changes: 5 additions & 1 deletion shared/template/android/src/main/java/ExamplePlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,16 @@ package {{android_package_id}}

import android.app.Activity
import app.tauri.annotation.Command
import app.tauri.annotation.InvokeArg
import app.tauri.annotation.TauriPlugin
import app.tauri.plugin.JSObject
import app.tauri.plugin.Plugin
import app.tauri.plugin.Invoke

class PingArgs(val value: String?)
@InvokeArg
class PingArgs {
var value: String? = null
}

@TauriPlugin
class ExamplePlugin(private val activity: Activity): Plugin(activity) {
Expand Down