migrate to pigeon

This commit is contained in:
2026-01-13 22:53:42 -08:00
parent b0736478cd
commit 2a3652d808
17 changed files with 2111 additions and 225 deletions
@@ -0,0 +1,330 @@
// Autogenerated from Pigeon (v26.1.5), do not edit directly.
// See also: https://pub.dev/packages/pigeon
package flutter.plugins.vibrate;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import io.flutter.plugin.common.BasicMessageChannel;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MessageCodec;
import io.flutter.plugin.common.StandardMessageCodec;
import java.io.ByteArrayOutputStream;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/** Generated class from Pigeon. */
@SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression", "serial"})
public class Messages {
/** Error class for passing custom error details to Flutter via a thrown PlatformException. */
public static class FlutterError extends RuntimeException {
/** The error code. */
public final String code;
/** The error details. Must be a datatype supported by the api codec. */
public final Object details;
public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details)
{
super(message);
this.code = code;
this.details = details;
}
}
@NonNull
protected static ArrayList<Object> wrapError(@NonNull Throwable exception) {
ArrayList<Object> errorList = new ArrayList<>(3);
if (exception instanceof FlutterError) {
FlutterError error = (FlutterError) exception;
errorList.add(error.code);
errorList.add(error.getMessage());
errorList.add(error.details);
} else {
errorList.add(exception.toString());
errorList.add(exception.getClass().getSimpleName());
errorList.add(
"Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception));
}
return errorList;
}
private static class PigeonCodec extends StandardMessageCodec {
public static final PigeonCodec INSTANCE = new PigeonCodec();
private PigeonCodec() {}
@Override
protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) {
switch (type) {
default:
return super.readValueOfType(type, buffer);
}
}
@Override
protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) {
{
super.writeValue(stream, value);
}
}
}
/** Generated interface from Pigeon that represents a handler of messages from Flutter. */
public interface VibrateApi {
@NonNull
Boolean canVibrate();
void vibrate(@NonNull Long duration);
void impact();
void selection();
void success();
void warning();
void error();
void heavy();
void medium();
void light();
/** The codec used by VibrateApi. */
static @NonNull MessageCodec<Object> getCodec() {
return PigeonCodec.INSTANCE;
}
/**Sets up an instance of `VibrateApi` to handle messages through the `binaryMessenger`. */
static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable VibrateApi api) {
setUp(binaryMessenger, "", api);
}
static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String messageChannelSuffix, @Nullable VibrateApi api) {
messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix;
{
BasicMessageChannel<Object> channel =
new BasicMessageChannel<>(
binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.canVibrate" + messageChannelSuffix, getCodec());
if (api != null) {
channel.setMessageHandler(
(message, reply) -> {
ArrayList<Object> wrapped = new ArrayList<>();
try {
Boolean output = api.canVibrate();
wrapped.add(0, output);
}
catch (Throwable exception) {
wrapped = wrapError(exception);
}
reply.reply(wrapped);
});
} else {
channel.setMessageHandler(null);
}
}
{
BasicMessageChannel<Object> channel =
new BasicMessageChannel<>(
binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.vibrate" + messageChannelSuffix, getCodec());
if (api != null) {
channel.setMessageHandler(
(message, reply) -> {
ArrayList<Object> wrapped = new ArrayList<>();
ArrayList<Object> args = (ArrayList<Object>) message;
Long durationArg = (Long) args.get(0);
try {
api.vibrate(durationArg);
wrapped.add(0, null);
}
catch (Throwable exception) {
wrapped = wrapError(exception);
}
reply.reply(wrapped);
});
} else {
channel.setMessageHandler(null);
}
}
{
BasicMessageChannel<Object> channel =
new BasicMessageChannel<>(
binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.impact" + messageChannelSuffix, getCodec());
if (api != null) {
channel.setMessageHandler(
(message, reply) -> {
ArrayList<Object> wrapped = new ArrayList<>();
try {
api.impact();
wrapped.add(0, null);
}
catch (Throwable exception) {
wrapped = wrapError(exception);
}
reply.reply(wrapped);
});
} else {
channel.setMessageHandler(null);
}
}
{
BasicMessageChannel<Object> channel =
new BasicMessageChannel<>(
binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.selection" + messageChannelSuffix, getCodec());
if (api != null) {
channel.setMessageHandler(
(message, reply) -> {
ArrayList<Object> wrapped = new ArrayList<>();
try {
api.selection();
wrapped.add(0, null);
}
catch (Throwable exception) {
wrapped = wrapError(exception);
}
reply.reply(wrapped);
});
} else {
channel.setMessageHandler(null);
}
}
{
BasicMessageChannel<Object> channel =
new BasicMessageChannel<>(
binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.success" + messageChannelSuffix, getCodec());
if (api != null) {
channel.setMessageHandler(
(message, reply) -> {
ArrayList<Object> wrapped = new ArrayList<>();
try {
api.success();
wrapped.add(0, null);
}
catch (Throwable exception) {
wrapped = wrapError(exception);
}
reply.reply(wrapped);
});
} else {
channel.setMessageHandler(null);
}
}
{
BasicMessageChannel<Object> channel =
new BasicMessageChannel<>(
binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.warning" + messageChannelSuffix, getCodec());
if (api != null) {
channel.setMessageHandler(
(message, reply) -> {
ArrayList<Object> wrapped = new ArrayList<>();
try {
api.warning();
wrapped.add(0, null);
}
catch (Throwable exception) {
wrapped = wrapError(exception);
}
reply.reply(wrapped);
});
} else {
channel.setMessageHandler(null);
}
}
{
BasicMessageChannel<Object> channel =
new BasicMessageChannel<>(
binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.error" + messageChannelSuffix, getCodec());
if (api != null) {
channel.setMessageHandler(
(message, reply) -> {
ArrayList<Object> wrapped = new ArrayList<>();
try {
api.error();
wrapped.add(0, null);
}
catch (Throwable exception) {
wrapped = wrapError(exception);
}
reply.reply(wrapped);
});
} else {
channel.setMessageHandler(null);
}
}
{
BasicMessageChannel<Object> channel =
new BasicMessageChannel<>(
binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.heavy" + messageChannelSuffix, getCodec());
if (api != null) {
channel.setMessageHandler(
(message, reply) -> {
ArrayList<Object> wrapped = new ArrayList<>();
try {
api.heavy();
wrapped.add(0, null);
}
catch (Throwable exception) {
wrapped = wrapError(exception);
}
reply.reply(wrapped);
});
} else {
channel.setMessageHandler(null);
}
}
{
BasicMessageChannel<Object> channel =
new BasicMessageChannel<>(
binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.medium" + messageChannelSuffix, getCodec());
if (api != null) {
channel.setMessageHandler(
(message, reply) -> {
ArrayList<Object> wrapped = new ArrayList<>();
try {
api.medium();
wrapped.add(0, null);
}
catch (Throwable exception) {
wrapped = wrapError(exception);
}
reply.reply(wrapped);
});
} else {
channel.setMessageHandler(null);
}
}
{
BasicMessageChannel<Object> channel =
new BasicMessageChannel<>(
binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.light" + messageChannelSuffix, getCodec());
if (api != null) {
channel.setMessageHandler(
(message, reply) -> {
ArrayList<Object> wrapped = new ArrayList<>();
try {
api.light();
wrapped.add(0, null);
}
catch (Throwable exception) {
wrapped = wrapError(exception);
}
reply.reply(wrapped);
});
} else {
channel.setMessageHandler(null);
}
}
}
}
}
@@ -5,10 +5,7 @@ import android.os.Vibrator;
import android.os.VibrationEffect;
import android.view.HapticFeedbackConstants;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
class VibrateMethodCallHandler implements MethodChannel.MethodCallHandler {
public class VibrateMethodCallHandler implements Messages.VibrateApi {
private final Vibrator vibrator;
private final boolean hasVibrator;
private final boolean legacyVibrator;
@@ -26,88 +23,77 @@ class VibrateMethodCallHandler implements MethodChannel.MethodCallHandler {
}
@SuppressWarnings("deprecation")
private void vibrate(int duration) {
@Override
public void vibrate(Long duration) {
if (hasVibrator) {
if (legacyVibrator) {
vibrator.vibrate(duration);
vibrator.vibrate(duration.intValue()); // Deprecated method takes int
} else {
vibrator.vibrate(VibrationEffect.createOneShot(duration, VibrationEffect.DEFAULT_AMPLITUDE));
}
}
}
@Override
public Boolean canVibrate() {
return hasVibrator;
}
private void feedback(int feedbackConstant) {
if (activity != null) {
activity.getWindow().getDecorView().performHapticFeedback(feedbackConstant);
} else {
// Fallback to vibrator if no activity/view (though unlikely in a running app)
// or just ignore if strictly view-based.
// For now, let's fallback to the old vibration logic for consistency if View is not ready,
// although the user specifically wants View feedback.
// Actually, the old logic was calling vibrate(int) for specific types.
// We can map some to vibrate(int) if really needed, but let's assume Activity is there.
}
}
@Override
public void onMethodCall(MethodCall call, MethodChannel.Result result) {
switch (call.method) {
case "canVibrate":
result.success(hasVibrator);
break;
case "vibrate":
final int duration = call.argument("duration");
vibrate(d);
result.success(null);
break;
case "impact":
feedback(HapticFeedbackConstants.VIRTUAL_KEY);
result.success(null);
break;
case "selection":
feedback(HapticFeedbackConstants.KEYBOARD_TAP);
result.success(null);
break;
case "success":
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
feedback(HapticFeedbackConstants.CONFIRM);
} else {
vibrate(50);
}
result.success(null);
break;
case "warning":
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
feedback(HapticFeedbackConstants.REJECT);
} else {
vibrate(250);
}
result.success(null);
break;
case "error":
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
feedback(HapticFeedbackConstants.REJECT);
} else {
vibrate(500);
}
result.success(null);
break;
case "heavy":
feedback(HapticFeedbackConstants.LONG_PRESS);
result.success(null);
break;
case "medium":
feedback(HapticFeedbackConstants.VIRTUAL_KEY);
result.success(null);
break;
case "light":
feedback(HapticFeedbackConstants.CLOCK_TICK);
result.success(null);
break;
default:
result.notImplemented();
break;
}
public void impact() {
feedback(HapticFeedbackConstants.VIRTUAL_KEY);
}
@Override
public void selection() {
feedback(HapticFeedbackConstants.KEYBOARD_TAP);
}
@Override
public void success() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
feedback(HapticFeedbackConstants.CONFIRM);
} else {
vibrate(50L);
}
}
@Override
public void warning() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
feedback(HapticFeedbackConstants.REJECT);
} else {
vibrate(250L);
}
}
@Override
public void error() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
feedback(HapticFeedbackConstants.REJECT);
} else {
vibrate(500L);
}
}
@Override
public void heavy() {
feedback(HapticFeedbackConstants.LONG_PRESS);
}
@Override
public void medium() {
feedback(HapticFeedbackConstants.VIRTUAL_KEY);
}
@Override
public void light() {
feedback(HapticFeedbackConstants.CLOCK_TICK);
}
}
@@ -8,7 +8,6 @@ import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MethodChannel;
public class VibratePlugin implements FlutterPlugin, io.flutter.embedding.engine.plugins.activity.ActivityAware {
private MethodChannel methodChannel;
private VibrateMethodCallHandler methodCallHandler;
@Override
@@ -18,14 +17,12 @@ public class VibratePlugin implements FlutterPlugin, io.flutter.embedding.engine
final Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
methodCallHandler = new VibrateMethodCallHandler(vibrator);
this.methodChannel = new MethodChannel(messenger, "vibrate");
this.methodChannel.setMethodCallHandler(methodCallHandler);
Messages.VibrateApi.setUp(messenger, methodCallHandler);
}
@Override
public void onDetachedFromEngine(FlutterPluginBinding binding) {
this.methodChannel.setMethodCallHandler(null);
this.methodChannel = null;
Messages.VibrateApi.setUp(binding.getBinaryMessenger(), null);
this.methodCallHandler = null;
}
@@ -0,0 +1,244 @@
// Autogenerated from Pigeon (v26.1.5), do not edit directly.
// See also: https://pub.dev/packages/pigeon
@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass")
package flutter.plugins.vibrate
import android.util.Log
import io.flutter.plugin.common.BasicMessageChannel
import io.flutter.plugin.common.BinaryMessenger
import io.flutter.plugin.common.EventChannel
import io.flutter.plugin.common.MessageCodec
import io.flutter.plugin.common.StandardMethodCodec
import io.flutter.plugin.common.StandardMessageCodec
import java.io.ByteArrayOutputStream
import java.nio.ByteBuffer
private object MessagesPigeonUtils {
fun wrapResult(result: Any?): List<Any?> {
return listOf(result)
}
fun wrapError(exception: Throwable): List<Any?> {
return if (exception is FlutterError) {
listOf(
exception.code,
exception.message,
exception.details
)
} else {
listOf(
exception.javaClass.simpleName,
exception.toString(),
"Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception)
)
}
}
}
/**
* Error class for passing custom error details to Flutter via a thrown PlatformException.
* @property code The error code.
* @property message The error message.
* @property details The error details. Must be a datatype supported by the api codec.
*/
class FlutterError (
val code: String,
override val message: String? = null,
val details: Any? = null
) : Throwable()
private open class MessagesPigeonCodec : StandardMessageCodec() {
override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? {
return super.readValueOfType(type, buffer)
}
override fun writeValue(stream: ByteArrayOutputStream, value: Any?) {
super.writeValue(stream, value)
}
}
/** Generated interface from Pigeon that represents a handler of messages from Flutter. */
interface VibrateApi {
fun canVibrate(): Boolean
fun vibrate(duration: Long)
fun impact()
fun selection()
fun success()
fun warning()
fun error()
fun heavy()
fun medium()
fun light()
companion object {
/** The codec used by VibrateApi. */
val codec: MessageCodec<Any?> by lazy {
MessagesPigeonCodec()
}
/** Sets up an instance of `VibrateApi` to handle messages through the `binaryMessenger`. */
@JvmOverloads
fun setUp(binaryMessenger: BinaryMessenger, api: VibrateApi?, messageChannelSuffix: String = "") {
val separatedMessageChannelSuffix = if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else ""
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.canVibrate$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List<Any?> = try {
listOf(api.canVibrate())
} catch (exception: Throwable) {
MessagesPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
} else {
channel.setMessageHandler(null)
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.vibrate$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { message, reply ->
val args = message as List<Any?>
val durationArg = args[0] as Long
val wrapped: List<Any?> = try {
api.vibrate(durationArg)
listOf(null)
} catch (exception: Throwable) {
MessagesPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
} else {
channel.setMessageHandler(null)
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.impact$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List<Any?> = try {
api.impact()
listOf(null)
} catch (exception: Throwable) {
MessagesPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
} else {
channel.setMessageHandler(null)
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.selection$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List<Any?> = try {
api.selection()
listOf(null)
} catch (exception: Throwable) {
MessagesPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
} else {
channel.setMessageHandler(null)
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.success$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List<Any?> = try {
api.success()
listOf(null)
} catch (exception: Throwable) {
MessagesPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
} else {
channel.setMessageHandler(null)
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.warning$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List<Any?> = try {
api.warning()
listOf(null)
} catch (exception: Throwable) {
MessagesPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
} else {
channel.setMessageHandler(null)
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.error$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List<Any?> = try {
api.error()
listOf(null)
} catch (exception: Throwable) {
MessagesPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
} else {
channel.setMessageHandler(null)
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.heavy$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List<Any?> = try {
api.heavy()
listOf(null)
} catch (exception: Throwable) {
MessagesPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
} else {
channel.setMessageHandler(null)
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.medium$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List<Any?> = try {
api.medium()
listOf(null)
} catch (exception: Throwable) {
MessagesPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
} else {
channel.setMessageHandler(null)
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_vibrate.VibrateApi.light$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { _, reply ->
val wrapped: List<Any?> = try {
api.light()
listOf(null)
} catch (exception: Throwable) {
MessagesPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
} else {
channel.setMessageHandler(null)
}
}
}
}
}