From 4ea5bf31ddc30c9b87b43058781dd07e192d5b0e Mon Sep 17 00:00:00 2001 From: amannegi Date: Mon, 23 Jan 2023 15:17:46 +0530 Subject: [PATCH 01/16] [shared_preferences]: Switched to Piegon, created setters --- .../plugins/sharedpreferences/Messages.java | 269 ++++++++++++++++++ .../SharedPreferencesPlugin.java | 108 +++++-- .../lib/messages.g.dart | 207 ++++++++++++++ .../lib/pigeon.dart | 0 .../pigeons/copyright.txt | 3 + .../pigeons/messages.dart | 38 +++ .../shared_preferences_android/pubspec.yaml | 2 + .../test/messages_test.g.dart | 164 +++++++++++ 8 files changed, 774 insertions(+), 17 deletions(-) create mode 100644 packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java create mode 100644 packages/shared_preferences/shared_preferences_android/lib/messages.g.dart create mode 100644 packages/shared_preferences/shared_preferences_android/lib/pigeon.dart create mode 100644 packages/shared_preferences/shared_preferences_android/pigeons/copyright.txt create mode 100644 packages/shared_preferences/shared_preferences_android/pigeons/messages.dart create mode 100644 packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart diff --git a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java new file mode 100644 index 000000000000..c880cec52965 --- /dev/null +++ b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java @@ -0,0 +1,269 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// Autogenerated from Pigeon (v3.2.9), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +package io.flutter.plugins.sharedpreferences; + +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.Arrays; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.HashMap; + +/** Generated class from Pigeon. */ +@SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"}) +public class Messages { + private static class SharedPreferencesApiCodec extends StandardMessageCodec { + public static final SharedPreferencesApiCodec INSTANCE = new SharedPreferencesApiCodec(); + private SharedPreferencesApiCodec() {} + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ + public interface SharedPreferencesApi { + @NonNull Boolean remove(@NonNull String key); + @Nullable Boolean setBool(@NonNull String key, @NonNull Boolean value); + @Nullable Boolean setString(@NonNull String key, @NonNull String value); + @Nullable Boolean setInt(@NonNull String key, @NonNull Object value); + @Nullable Boolean setDouble(@NonNull String key, @NonNull Double value); + @Nullable Boolean setStringList(@NonNull String key, @NonNull List value); + @Nullable Boolean clear(); + @Nullable Map getAll(); + + /** The codec used by SharedPreferencesApi. */ + static MessageCodec getCodec() { + return SharedPreferencesApiCodec.INSTANCE; + } + + /** Sets up an instance of `SharedPreferencesApi` to handle messages through the `binaryMessenger`. */ + static void setup(BinaryMessenger binaryMessenger, SharedPreferencesApi api) { + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.remove", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + String keyArg = (String)args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Boolean output = api.remove(keyArg); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setBool", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + String keyArg = (String)args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Boolean valueArg = (Boolean)args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setBool(keyArg, valueArg); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setString", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + String keyArg = (String)args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + String valueArg = (String)args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setString(keyArg, valueArg); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setInt", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + String keyArg = (String)args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Object valueArg = (Object)args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setInt(keyArg, valueArg); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setDouble", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + String keyArg = (String)args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Double valueArg = (Double)args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setDouble(keyArg, valueArg); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setStringList", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + ArrayList args = (ArrayList)message; + String keyArg = (String)args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + List valueArg = (List)args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setStringList(keyArg, valueArg); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.clear", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + Boolean output = api.clear(); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.getAll", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler((message, reply) -> { + Map wrapped = new HashMap<>(); + try { + Map output = api.getAll(); + wrapped.put("result", output); + } + catch (Error | RuntimeException exception) { + wrapped.put("error", wrapError(exception)); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + private static Map wrapError(Throwable exception) { + Map errorMap = new HashMap<>(); + errorMap.put("message", exception.toString()); + errorMap.put("code", exception.getClass().getSimpleName()); + errorMap.put("details", "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + return errorMap; + } +} diff --git a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java index 9545fe95c54b..1183fed11741 100644 --- a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java +++ b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java @@ -8,39 +8,113 @@ import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodChannel; +import android.content.SharedPreferences; + + +import io.flutter.plugins.sharedpreferences.Messages.SharedPreferencesApi; /** SharedPreferencesPlugin */ -public class SharedPreferencesPlugin implements FlutterPlugin { - private static final String CHANNEL_NAME = "plugins.flutter.io/shared_preferences_android"; - private MethodChannel channel; - private MethodCallHandlerImpl handler; +public class SharedPreferencesPlugin implements FlutterPlugin , SharedPreferencesApi{ + + + private static final String SHARED_PREFERENCES_NAME = "FlutterSharedPreferences"; + + // Fun fact: The following is a base64 encoding of the string "This is the prefix for a list." + private static final String LIST_IDENTIFIER = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu"; + private static final String BIG_INTEGER_PREFIX = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBCaWdJbnRlZ2Vy"; + private static final String DOUBLE_PREFIX = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBEb3VibGUu"; + + private final android.content.SharedPreferences preferences; + + SharedPreferencesPlugin(){ + preferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); + } + + // private static final String CHANNEL_NAME = "plugins.flutter.io/shared_preferences_android"; + // private MethodChannel channel; + + // private MethodCallHandlerImpl handler; + + private void setup(BinaryMessenger messenger, Context context) { + TaskQueue taskQueue = messenger.makeBackgroundTaskQueue(); + + try { + SharedPreferencesApi.setup(messenger, this); + } catch (Exception ex) { + Log.e(TAG, "Received exception while setting up SharedPreferencesPlugin", ex); + } + + // this.context = context; + } @SuppressWarnings("deprecation") public static void registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar) { final SharedPreferencesPlugin plugin = new SharedPreferencesPlugin(); - plugin.setupChannel(registrar.messenger(), registrar.context()); + plugin.setup(registrar.messenger(), registrar.context()); } @Override public void onAttachedToEngine(FlutterPlugin.FlutterPluginBinding binding) { - setupChannel(binding.getBinaryMessenger(), binding.getApplicationContext()); + setup(binding.getBinaryMessenger(), binding.getApplicationContext()); } - @Override + @Override public void onDetachedFromEngine(FlutterPlugin.FlutterPluginBinding binding) { - teardownChannel(); + SharedPreferencesApi.setup(binding.getBinaryMessenger(), null); + } + + @Override + public Boolean setBool(String key, Boolean value){ + return preferences.edit().putBoolean(key, value).commit(); + } + @Override + public Boolean setString(String key, String value){ + if (value.startsWith(LIST_IDENTIFIER) + || value.startsWith(BIG_INTEGER_PREFIX) + || value.startsWith(DOUBLE_PREFIX)) { + result.error( + "StorageError", + "This string cannot be stored as it clashes with special identifier prefixes.", + null); + return false; + } + return preferences.edit().putString(key, value).commit(); } - private void setupChannel(BinaryMessenger messenger, Context context) { - channel = new MethodChannel(messenger, CHANNEL_NAME); - handler = new MethodCallHandlerImpl(context); - channel.setMethodCallHandler(handler); + @Override + public Boolean setInt(String key, Object value){ + Number number = value; + if (number instanceof BigInteger) { + BigInteger integerValue = (BigInteger) number; + return preferences.edit().putString(key, BIG_INTEGER_PREFIX + integerValue.toString(Character.MAX_RADIX)).commit(); + } else { + return preferences.edit().putLong(key, number.longValue()).commit(); + } } - private void teardownChannel() { - handler.teardown(); - handler = null; - channel.setMethodCallHandler(null); - channel = null; + @Override + public Boolean setDouble(String key, double value){ + String doubleValueStr = Double.toString(value); + return preferences.edit().putString(key, DOUBLE_PREFIX + doubleValueStr).commit(); } + + @Override + public Boolean setStringList(String key,List value){ + return preferences.edit().putString(key, LIST_IDENTIFIER + encodeList(list)).commit(); + } + + + + // private void setupChannel(BinaryMessenger messenger, Context context) { + // channel = new MethodChannel(messenger, CHANNEL_NAME); + // handler = new MethodCallHandlerImpl(context); + // channel.setMethodCallHandler(handler); + // } + + // private void teardownChannel() { + // handler.teardown(); + // handler = null; + // channel.setMethodCallHandler(null); + // channel = null; + // } } diff --git a/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart b/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart new file mode 100644 index 000000000000..324d01dca3c3 --- /dev/null +++ b/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart @@ -0,0 +1,207 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// Autogenerated from Pigeon (v3.2.9), do not edit directly. +// See also: https://pub.dev/packages/pigeon +// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import +import 'dart:async'; +import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List; + +import 'package:flutter/foundation.dart' show WriteBuffer, ReadBuffer; +import 'package:flutter/services.dart'; + +class _SharedPreferencesApiCodec extends StandardMessageCodec { + const _SharedPreferencesApiCodec(); +} + +class SharedPreferencesApi { + /// Constructor for [SharedPreferencesApi]. The [binaryMessenger] named argument is + /// available for dependency injection. If it is left null, the default + /// BinaryMessenger will be used which routes to the host platform. + SharedPreferencesApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; + + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec codec = _SharedPreferencesApiCodec(); + + Future remove(String arg_key) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.remove', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_key]) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else if (replyMap['result'] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (replyMap['result'] as bool?)!; + } + } + + Future setBool(String arg_key, bool arg_value) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.setBool', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_key, arg_value]) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else { + return (replyMap['result'] as bool?); + } + } + + Future setString(String arg_key, String arg_value) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.setString', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_key, arg_value]) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else { + return (replyMap['result'] as bool?); + } + } + + Future setInt(String arg_key, Object arg_value) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.setInt', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_key, arg_value]) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else { + return (replyMap['result'] as bool?); + } + } + + Future setDouble(String arg_key, double arg_value) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.setDouble', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_key, arg_value]) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else { + return (replyMap['result'] as bool?); + } + } + + Future setStringList(String arg_key, List arg_value) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.setStringList', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send([arg_key, arg_value]) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else { + return (replyMap['result'] as bool?); + } + } + + Future clear() async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.clear', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send(null) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else { + return (replyMap['result'] as bool?); + } + } + + Future?> getAll() async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.getAll', codec, binaryMessenger: _binaryMessenger); + final Map? replyMap = + await channel.send(null) as Map?; + if (replyMap == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyMap['error'] != null) { + final Map error = (replyMap['error'] as Map?)!; + throw PlatformException( + code: (error['code'] as String?)!, + message: error['message'] as String?, + details: error['details'], + ); + } else { + return (replyMap['result'] as Map?)?.cast(); + } + } +} diff --git a/packages/shared_preferences/shared_preferences_android/lib/pigeon.dart b/packages/shared_preferences/shared_preferences_android/lib/pigeon.dart new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/shared_preferences/shared_preferences_android/pigeons/copyright.txt b/packages/shared_preferences/shared_preferences_android/pigeons/copyright.txt new file mode 100644 index 000000000000..1236b63caf3a --- /dev/null +++ b/packages/shared_preferences/shared_preferences_android/pigeons/copyright.txt @@ -0,0 +1,3 @@ +Copyright 2013 The Flutter Authors. All rights reserved. +Use of this source code is governed by a BSD-style license that can be +found in the LICENSE file. diff --git a/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart b/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart new file mode 100644 index 000000000000..8563fea54f32 --- /dev/null +++ b/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart @@ -0,0 +1,38 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:pigeon/pigeon.dart'; + +@ConfigurePigeon(PigeonOptions( + input: 'pigeons/messages.dart', + javaOut: + 'android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java', + javaOptions: JavaOptions( + className: 'Messages', package: 'io.flutter.plugins.sharedpreferences'), + dartOut: 'lib/messages.g.dart', + dartTestOut: 'test/messages_test.g.dart', + copyrightHeader: 'pigeons/copyright.txt', +)) +@HostApi(dartHostTestHandler: 'TestSharedPreferencesApi') +abstract class SharedPreferencesApi { + @TaskQueue(type: TaskQueueType.serialBackgroundThread) + bool remove(String key); + @TaskQueue(type: TaskQueueType.serialBackgroundThread) + bool? setBool(String key, bool value); + @TaskQueue(type: TaskQueueType.serialBackgroundThread) + bool? setString(String key, String value); + @TaskQueue(type: TaskQueueType.serialBackgroundThread) + bool? setInt(String key, Object value); + + @TaskQueue(type: TaskQueueType.serialBackgroundThread) + bool? setDouble(String key, double value); + + @TaskQueue(type: TaskQueueType.serialBackgroundThread) + bool? setStringList (String key, Listvalue); + + @TaskQueue(type: TaskQueueType.serialBackgroundThread) + bool? clear(); + @TaskQueue(type: TaskQueueType.serialBackgroundThread) + Map? getAll(); +} diff --git a/packages/shared_preferences/shared_preferences_android/pubspec.yaml b/packages/shared_preferences/shared_preferences_android/pubspec.yaml index 589c5b2f15fd..dac69bf9707c 100644 --- a/packages/shared_preferences/shared_preferences_android/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_android/pubspec.yaml @@ -25,3 +25,5 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter + pigeon: ^3.1.5 + test: ^1.16.0 \ No newline at end of file diff --git a/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart b/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart new file mode 100644 index 000000000000..6c1d3726e6c4 --- /dev/null +++ b/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart @@ -0,0 +1,164 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// Autogenerated from Pigeon (v3.2.9), do not edit directly. +// See also: https://pub.dev/packages/pigeon +// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import +// ignore_for_file: avoid_relative_lib_imports +import 'dart:async'; +import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List; +import 'package:flutter/foundation.dart' show WriteBuffer, ReadBuffer; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:shared_preferences_android/messages.g.dart'; + +class _TestSharedPreferencesApiCodec extends StandardMessageCodec { + const _TestSharedPreferencesApiCodec(); +} +abstract class TestSharedPreferencesApi { + static const MessageCodec codec = _TestSharedPreferencesApiCodec(); + + bool remove(String key); + bool? setBool(String key, bool value); + bool? setString(String key, String value); + bool? setInt(String key, Object value); + bool? setDouble(String key, double value); + bool? setStringList(String key, List value); + bool? clear(); + Map? getAll(); + static void setup(TestSharedPreferencesApi? api, {BinaryMessenger? binaryMessenger}) { + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.remove', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.remove was null.'); + final List args = (message as List?)!; + final String? arg_key = (args[0] as String?); + assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.remove was null, expected non-null String.'); + final bool output = api.remove(arg_key!); + return {'result': output}; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.setBool', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null.'); + final List args = (message as List?)!; + final String? arg_key = (args[0] as String?); + assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null, expected non-null String.'); + final bool? arg_value = (args[1] as bool?); + assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null, expected non-null bool.'); + final bool? output = api.setBool(arg_key!, arg_value!); + return {'result': output}; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.setString', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null.'); + final List args = (message as List?)!; + final String? arg_key = (args[0] as String?); + assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null, expected non-null String.'); + final String? arg_value = (args[1] as String?); + assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null, expected non-null String.'); + final bool? output = api.setString(arg_key!, arg_value!); + return {'result': output}; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.setInt', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null.'); + final List args = (message as List?)!; + final String? arg_key = (args[0] as String?); + assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null, expected non-null String.'); + final Object? arg_value = (args[1] as Object?); + assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null, expected non-null Object.'); + final bool? output = api.setInt(arg_key!, arg_value!); + return {'result': output}; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.setDouble', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null.'); + final List args = (message as List?)!; + final String? arg_key = (args[0] as String?); + assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null, expected non-null String.'); + final double? arg_value = (args[1] as double?); + assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null, expected non-null double.'); + final bool? output = api.setDouble(arg_key!, arg_value!); + return {'result': output}; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.setStringList', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + assert(message != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null.'); + final List args = (message as List?)!; + final String? arg_key = (args[0] as String?); + assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null, expected non-null String.'); + final List? arg_value = (args[1] as List?)?.cast(); + assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null, expected non-null List.'); + final bool? output = api.setStringList(arg_key!, arg_value!); + return {'result': output}; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.clear', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + // ignore message + final bool? output = api.clear(); + return {'result': output}; + }); + } + } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.SharedPreferencesApi.getAll', codec, binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMockMessageHandler(null); + } else { + channel.setMockMessageHandler((Object? message) async { + // ignore message + final Map? output = api.getAll(); + return {'result': output}; + }); + } + } + } +} From bd8a0df030fb78f0d8893091aa669e11e7196f19 Mon Sep 17 00:00:00 2001 From: amannegi Date: Tue, 24 Jan 2023 11:04:27 +0530 Subject: [PATCH 02/16] [shared_preferences] Convert shared_preferences_android to Pigeon #117914 --- .../shared_preferences_android/AUTHORS | 1 + .../plugins/sharedpreferences/Messages.java | 379 ++++++++++-------- .../MethodCallHandlerImpl.java | 224 ----------- .../SharedPreferencesPlugin.java | 240 ++++++++--- .../lib/messages.g.dart | 191 +++++---- .../lib/shared_preferences_android.dart | 43 +- .../pigeons/messages.dart | 7 +- .../shared_preferences_android/pubspec.yaml | 3 +- .../test/messages_test.g.dart | 118 ++++-- .../test/shared_preferences_android_test.dart | 195 ++++----- 10 files changed, 695 insertions(+), 706 deletions(-) delete mode 100644 packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java diff --git a/packages/shared_preferences/shared_preferences_android/AUTHORS b/packages/shared_preferences/shared_preferences_android/AUTHORS index 493a0b4ef9c2..2351dda62bd0 100644 --- a/packages/shared_preferences/shared_preferences_android/AUTHORS +++ b/packages/shared_preferences/shared_preferences_android/AUTHORS @@ -64,3 +64,4 @@ Aleksandr Yurkovskiy Anton Borries Alex Li Rahul Raj <64.rahulraj@gmail.com> +Aman Negi diff --git a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java index c880cec52965..bcaa30d101f5 100644 --- a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java +++ b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v3.2.9), do not edit directly. +// Autogenerated from Pigeon (v7.0.2), do not edit directly. // See also: https://pub.dev/packages/pigeon package io.flutter.plugins.sharedpreferences; @@ -15,59 +15,82 @@ import io.flutter.plugin.common.StandardMessageCodec; import java.io.ByteArrayOutputStream; import java.nio.ByteBuffer; -import java.util.Arrays; 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.HashMap; /** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"}) public class Messages { - private static class SharedPreferencesApiCodec extends StandardMessageCodec { - public static final SharedPreferencesApiCodec INSTANCE = new SharedPreferencesApiCodec(); - private SharedPreferencesApiCodec() {} + @NonNull + private static ArrayList wrapError(@NonNull Throwable exception) { + ArrayList errorList = new ArrayList<>(3); + errorList.add(exception.toString()); + errorList.add(exception.getClass().getSimpleName()); + errorList.add( + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + return errorList; } - - /** Generated interface from Pigeon that represents a handler of messages from Flutter.*/ + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface SharedPreferencesApi { - @NonNull Boolean remove(@NonNull String key); - @Nullable Boolean setBool(@NonNull String key, @NonNull Boolean value); - @Nullable Boolean setString(@NonNull String key, @NonNull String value); - @Nullable Boolean setInt(@NonNull String key, @NonNull Object value); - @Nullable Boolean setDouble(@NonNull String key, @NonNull Double value); - @Nullable Boolean setStringList(@NonNull String key, @NonNull List value); - @Nullable Boolean clear(); - @Nullable Map getAll(); + + @Nullable + Boolean remove(@NonNull String key); + + @Nullable + Boolean setBool(@NonNull String key, @NonNull Boolean value); + + @Nullable + Boolean setString(@NonNull String key, @NonNull String value); + + @Nullable + Boolean setInt(@NonNull String key, @NonNull Object value); + + @Nullable + Boolean setDouble(@NonNull String key, @NonNull Double value); + + @Nullable + Boolean setStringList(@NonNull String key, @NonNull List value) throws RuntimeException; + + @Nullable + Boolean clear() throws RuntimeException; + + @NonNull + Map getAll() throws RuntimeException; /** The codec used by SharedPreferencesApi. */ static MessageCodec getCodec() { - return SharedPreferencesApiCodec.INSTANCE; + return new StandardMessageCodec(); } - - /** Sets up an instance of `SharedPreferencesApi` to handle messages through the `binaryMessenger`. */ + /**Sets up an instance of `SharedPreferencesApi` to handle messages through the `binaryMessenger`. */ static void setup(BinaryMessenger binaryMessenger, SharedPreferencesApi api) { { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.remove", getCodec(), taskQueue); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.remove", getCodec(), taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - String keyArg = (String)args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Boolean output = api.remove(keyArg); - wrapped.put("result", output); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Boolean output = api.remove(keyArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } @@ -75,28 +98,31 @@ static void setup(BinaryMessenger binaryMessenger, SharedPreferencesApi api) { { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setBool", getCodec(), taskQueue); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setBool", getCodec(), taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - String keyArg = (String)args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Boolean valueArg = (Boolean)args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setBool(keyArg, valueArg); - wrapped.put("result", output); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Boolean valueArg = (Boolean) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setBool(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } @@ -104,28 +130,31 @@ static void setup(BinaryMessenger binaryMessenger, SharedPreferencesApi api) { { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setString", getCodec(), taskQueue); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setString", getCodec(), taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - String keyArg = (String)args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - String valueArg = (String)args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setString(keyArg, valueArg); - wrapped.put("result", output); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + String valueArg = (String) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setString(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } @@ -133,28 +162,31 @@ static void setup(BinaryMessenger binaryMessenger, SharedPreferencesApi api) { { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setInt", getCodec(), taskQueue); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setInt", getCodec(), taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - String keyArg = (String)args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Object valueArg = (Object)args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setInt(keyArg, valueArg); - wrapped.put("result", output); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Object valueArg = args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setInt(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } @@ -162,28 +194,31 @@ static void setup(BinaryMessenger binaryMessenger, SharedPreferencesApi api) { { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setDouble", getCodec(), taskQueue); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setDouble", getCodec(), taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - String keyArg = (String)args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Double valueArg = (Double)args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setDouble(keyArg, valueArg); - wrapped.put("result", output); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Double valueArg = (Double) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setDouble(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } @@ -191,28 +226,31 @@ static void setup(BinaryMessenger binaryMessenger, SharedPreferencesApi api) { { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setStringList", getCodec(), taskQueue); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setStringList", getCodec(), taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - ArrayList args = (ArrayList)message; - String keyArg = (String)args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - List valueArg = (List)args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setStringList(keyArg, valueArg); - wrapped.put("result", output); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + List valueArg = (List) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setStringList(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } @@ -220,19 +258,21 @@ static void setup(BinaryMessenger binaryMessenger, SharedPreferencesApi api) { { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.clear", getCodec(), taskQueue); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.clear", getCodec(), taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - Boolean output = api.clear(); - wrapped.put("result", output); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + Boolean output = api.clear(); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } @@ -240,30 +280,25 @@ static void setup(BinaryMessenger binaryMessenger, SharedPreferencesApi api) { { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); BasicMessageChannel channel = - new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.getAll", getCodec(), taskQueue); + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.getAll", getCodec(), taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - Map wrapped = new HashMap<>(); - try { - Map output = api.getAll(); - wrapped.put("result", output); - } - catch (Error | RuntimeException exception) { - wrapped.put("error", wrapError(exception)); - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + Map output = api.getAll(); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } } } - private static Map wrapError(Throwable exception) { - Map errorMap = new HashMap<>(); - errorMap.put("message", exception.toString()); - errorMap.put("code", exception.getClass().getSimpleName()); - errorMap.put("details", "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); - return errorMap; - } } diff --git a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java deleted file mode 100644 index cea3f34b9b96..000000000000 --- a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java +++ /dev/null @@ -1,224 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package io.flutter.plugins.sharedpreferences; - -import android.content.Context; -import android.content.SharedPreferences; -import android.os.Handler; -import android.os.Looper; -import android.util.Base64; -import io.flutter.plugin.common.MethodCall; -import io.flutter.plugin.common.MethodChannel; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -/** - * Implementation of the {@link MethodChannel.MethodCallHandler} for the plugin. It is also - * responsible of managing the {@link android.content.SharedPreferences}. - */ -@SuppressWarnings("unchecked") -class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { - - private static final String SHARED_PREFERENCES_NAME = "FlutterSharedPreferences"; - - // Fun fact: The following is a base64 encoding of the string "This is the prefix for a list." - private static final String LIST_IDENTIFIER = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu"; - private static final String BIG_INTEGER_PREFIX = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBCaWdJbnRlZ2Vy"; - private static final String DOUBLE_PREFIX = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBEb3VibGUu"; - - private final android.content.SharedPreferences preferences; - - private final ExecutorService executor; - private final Handler handler; - - /** - * Constructs a {@link MethodCallHandlerImpl} instance. Creates a {@link - * android.content.SharedPreferences} based on the {@code context}. - */ - MethodCallHandlerImpl(Context context) { - preferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); - executor = - new ThreadPoolExecutor(0, 1, 30L, TimeUnit.SECONDS, new LinkedBlockingQueue()); - handler = new Handler(Looper.getMainLooper()); - } - - @Override - public void onMethodCall(MethodCall call, MethodChannel.Result result) { - String key = call.argument("key"); - try { - switch (call.method) { - case "setBool": - commitAsync(preferences.edit().putBoolean(key, (boolean) call.argument("value")), result); - break; - case "setDouble": - double doubleValue = ((Number) call.argument("value")).doubleValue(); - String doubleValueStr = Double.toString(doubleValue); - commitAsync(preferences.edit().putString(key, DOUBLE_PREFIX + doubleValueStr), result); - break; - case "setInt": - Number number = call.argument("value"); - if (number instanceof BigInteger) { - BigInteger integerValue = (BigInteger) number; - commitAsync( - preferences - .edit() - .putString( - key, BIG_INTEGER_PREFIX + integerValue.toString(Character.MAX_RADIX)), - result); - } else { - commitAsync(preferences.edit().putLong(key, number.longValue()), result); - } - break; - case "setString": - String value = (String) call.argument("value"); - if (value.startsWith(LIST_IDENTIFIER) - || value.startsWith(BIG_INTEGER_PREFIX) - || value.startsWith(DOUBLE_PREFIX)) { - result.error( - "StorageError", - "This string cannot be stored as it clashes with special identifier prefixes.", - null); - return; - } - commitAsync(preferences.edit().putString(key, value), result); - break; - case "setStringList": - List list = call.argument("value"); - commitAsync( - preferences.edit().putString(key, LIST_IDENTIFIER + encodeList(list)), result); - break; - case "commit": - // We've been committing the whole time. - result.success(true); - break; - case "getAll": - result.success(getAllPrefs()); - return; - case "remove": - commitAsync(preferences.edit().remove(key), result); - break; - case "clear": - Set keySet = getAllPrefs().keySet(); - SharedPreferences.Editor clearEditor = preferences.edit(); - for (String keyToDelete : keySet) { - clearEditor.remove(keyToDelete); - } - commitAsync(clearEditor, result); - break; - default: - result.notImplemented(); - break; - } - } catch (IOException e) { - result.error("IOException encountered", call.method, e); - } - } - - public void teardown() { - handler.removeCallbacksAndMessages(null); - executor.shutdown(); - } - - private void commitAsync( - final SharedPreferences.Editor editor, final MethodChannel.Result result) { - executor.execute( - new Runnable() { - @Override - public void run() { - final boolean response = editor.commit(); - handler.post( - new Runnable() { - @Override - public void run() { - result.success(response); - } - }); - } - }); - } - - private List decodeList(String encodedList) throws IOException { - ObjectInputStream stream = null; - try { - stream = new ObjectInputStream(new ByteArrayInputStream(Base64.decode(encodedList, 0))); - return (List) stream.readObject(); - } catch (ClassNotFoundException e) { - throw new IOException(e); - } finally { - if (stream != null) { - stream.close(); - } - } - } - - private String encodeList(List list) throws IOException { - ObjectOutputStream stream = null; - try { - ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); - stream = new ObjectOutputStream(byteStream); - stream.writeObject(list); - stream.flush(); - return Base64.encodeToString(byteStream.toByteArray(), 0); - } finally { - if (stream != null) { - stream.close(); - } - } - } - - // Filter preferences to only those set by the flutter app. - private Map getAllPrefs() throws IOException { - Map allPrefs = preferences.getAll(); - Map filteredPrefs = new HashMap<>(); - for (String key : allPrefs.keySet()) { - if (key.startsWith("flutter.")) { - Object value = allPrefs.get(key); - if (value instanceof String) { - String stringValue = (String) value; - if (stringValue.startsWith(LIST_IDENTIFIER)) { - value = decodeList(stringValue.substring(LIST_IDENTIFIER.length())); - } else if (stringValue.startsWith(BIG_INTEGER_PREFIX)) { - String encoded = stringValue.substring(BIG_INTEGER_PREFIX.length()); - value = new BigInteger(encoded, Character.MAX_RADIX); - } else if (stringValue.startsWith(DOUBLE_PREFIX)) { - String doubleStr = stringValue.substring(DOUBLE_PREFIX.length()); - value = Double.valueOf(doubleStr); - } - } else if (value instanceof Set) { - // This only happens for previous usage of setStringSet. The app expects a list. - List listValue = new ArrayList<>((Set) value); - // Let's migrate the value too while we are at it. - boolean success = - preferences - .edit() - .remove(key) - .putString(key, LIST_IDENTIFIER + encodeList(listValue)) - .commit(); - if (!success) { - // If we are unable to migrate the existing preferences, it means we potentially lost them. - // In this case, an error from getAllPrefs() is appropriate since it will alert the app during plugin initialization. - throw new IOException("Could not migrate set to list"); - } - value = listValue; - } - filteredPrefs.put(key, value); - } - } - return filteredPrefs; - } -} diff --git a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java index 1183fed11741..cfd7490d6bbb 100644 --- a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java +++ b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java @@ -5,50 +5,69 @@ package io.flutter.plugins.sharedpreferences; import android.content.Context; +import android.content.Context; +import android.content.SharedPreferences; +import android.util.Base64; +import android.util.Log; import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.common.BinaryMessenger.TaskQueue; import io.flutter.plugin.common.MethodChannel; -import android.content.SharedPreferences; - - import io.flutter.plugins.sharedpreferences.Messages.SharedPreferencesApi; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; /** SharedPreferencesPlugin */ -public class SharedPreferencesPlugin implements FlutterPlugin , SharedPreferencesApi{ +public class SharedPreferencesPlugin + implements FlutterPlugin, SharedPreferencesApi { + static final String TAG = "SharedPreferencesPlugin"; - private static final String SHARED_PREFERENCES_NAME = "FlutterSharedPreferences"; + private static final String SHARED_PREFERENCES_NAME = + "FlutterSharedPreferences"; // Fun fact: The following is a base64 encoding of the string "This is the prefix for a list." - private static final String LIST_IDENTIFIER = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu"; - private static final String BIG_INTEGER_PREFIX = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBCaWdJbnRlZ2Vy"; - private static final String DOUBLE_PREFIX = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBEb3VibGUu"; + private static final String LIST_IDENTIFIER = + "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu"; + private static final String BIG_INTEGER_PREFIX = + "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBCaWdJbnRlZ2Vy"; + private static final String DOUBLE_PREFIX = + "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBEb3VibGUu"; - private final android.content.SharedPreferences preferences; - - SharedPreferencesPlugin(){ - preferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); - } - - // private static final String CHANNEL_NAME = "plugins.flutter.io/shared_preferences_android"; - // private MethodChannel channel; - - // private MethodCallHandlerImpl handler; + private android.content.SharedPreferences preferences; private void setup(BinaryMessenger messenger, Context context) { TaskQueue taskQueue = messenger.makeBackgroundTaskQueue(); + preferences = + context.getSharedPreferences( + SHARED_PREFERENCES_NAME, + Context.MODE_PRIVATE + ); try { SharedPreferencesApi.setup(messenger, this); } catch (Exception ex) { - Log.e(TAG, "Received exception while setting up SharedPreferencesPlugin", ex); + Log.e( + TAG, + "Received exception while setting up SharedPreferencesPlugin", + ex + ); } - - // this.context = context; } @SuppressWarnings("deprecation") - public static void registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar) { + public static void registerWith( + io.flutter.plugin.common.PluginRegistry.Registrar registrar + ) { final SharedPreferencesPlugin plugin = new SharedPreferencesPlugin(); plugin.setup(registrar.messenger(), registrar.context()); } @@ -58,63 +77,176 @@ public void onAttachedToEngine(FlutterPlugin.FlutterPluginBinding binding) { setup(binding.getBinaryMessenger(), binding.getApplicationContext()); } - @Override + @Override public void onDetachedFromEngine(FlutterPlugin.FlutterPluginBinding binding) { SharedPreferencesApi.setup(binding.getBinaryMessenger(), null); - } + } @Override - public Boolean setBool(String key, Boolean value){ + public Boolean setBool(String key, Boolean value) { return preferences.edit().putBoolean(key, value).commit(); } - @Override - public Boolean setString(String key, String value){ - if (value.startsWith(LIST_IDENTIFIER) - || value.startsWith(BIG_INTEGER_PREFIX) - || value.startsWith(DOUBLE_PREFIX)) { - result.error( - "StorageError", - "This string cannot be stored as it clashes with special identifier prefixes.", - null); - return false; - } + + @Override + public Boolean setString(String key, String value) { + if ( + value.startsWith(LIST_IDENTIFIER) || + value.startsWith(BIG_INTEGER_PREFIX) || + value.startsWith(DOUBLE_PREFIX) + ) { + throw new RuntimeException( + "StorageError: This string cannot be stored as it clashes with special identifier prefixes" + ); + } return preferences.edit().putString(key, value).commit(); } @Override - public Boolean setInt(String key, Object value){ - Number number = value; + public Boolean setInt(String key, Object value) { + Number number = (Number) value; if (number instanceof BigInteger) { BigInteger integerValue = (BigInteger) number; - return preferences.edit().putString(key, BIG_INTEGER_PREFIX + integerValue.toString(Character.MAX_RADIX)).commit(); + return preferences + .edit() + .putString( + key, + BIG_INTEGER_PREFIX + integerValue.toString(Character.MAX_RADIX) + ) + .commit(); } else { return preferences.edit().putLong(key, number.longValue()).commit(); } } @Override - public Boolean setDouble(String key, double value){ + public Boolean setDouble(String key, Double value) { String doubleValueStr = Double.toString(value); - return preferences.edit().putString(key, DOUBLE_PREFIX + doubleValueStr).commit(); + return preferences + .edit() + .putString(key, DOUBLE_PREFIX + doubleValueStr) + .commit(); } @Override - public Boolean setStringList(String key,List value){ - return preferences.edit().putString(key, LIST_IDENTIFIER + encodeList(list)).commit(); + public Boolean setStringList(String key, List value) + throws RuntimeException { + try { + Boolean success = preferences + .edit() + .putString(key, LIST_IDENTIFIER + encodeList(value)) + .commit(); + return success; + } catch (RuntimeException e) { + throw e; + } } + @Override + public Map getAll() throws RuntimeException { + try { + Map data = getAllPrefs(); + return data; + } catch (RuntimeException e) { + throw e; + } + } + + @Override + public Boolean remove(String key) { + return preferences.edit().remove(key).commit(); + } + + @Override + public Boolean clear() throws RuntimeException { + try { + Set keySet = getAllPrefs().keySet(); + SharedPreferences.Editor clearEditor = preferences.edit(); + for (String keyToDelete : keySet) { + clearEditor.remove(keyToDelete); + } + return clearEditor.commit(); + } catch (RuntimeException e) { + throw e; + } + } + + // Filter preferences to only those set by the flutter app. + @SuppressWarnings("unchecked") + private Map getAllPrefs() throws RuntimeException { + Map allPrefs = preferences.getAll(); + Map filteredPrefs = new HashMap<>(); + for (String key : allPrefs.keySet()) { + if (key.startsWith("flutter.")) { + Object value = allPrefs.get(key); + if (value instanceof String) { + String stringValue = (String) value; + if (stringValue.startsWith(LIST_IDENTIFIER)) { + value = decodeList(stringValue.substring(LIST_IDENTIFIER.length())); + } else if (stringValue.startsWith(BIG_INTEGER_PREFIX)) { + String encoded = stringValue.substring(BIG_INTEGER_PREFIX.length()); + value = new BigInteger(encoded, Character.MAX_RADIX); + } else if (stringValue.startsWith(DOUBLE_PREFIX)) { + String doubleStr = stringValue.substring(DOUBLE_PREFIX.length()); + value = Double.valueOf(doubleStr); + } + } else if (value instanceof Set) { + // This only happens for previous usage of setStringSet. The app expects a list. + List listValue = new ArrayList((Set) value); + // Let's migrate the value too while we are at it. + try { + preferences + .edit() + .remove(key) + .putString(key, LIST_IDENTIFIER + encodeList(listValue)) + .commit(); + } catch (RuntimeException e) { + // If we are unable to migrate the existing preferences, it means we potentially lost them. + // In this case, an error from getAllPrefs() is appropriate since it will alert the app during plugin initialization. + throw e; + } + value = listValue; + } + filteredPrefs.put(key, value); + } + } + return filteredPrefs; + } - // private void setupChannel(BinaryMessenger messenger, Context context) { - // channel = new MethodChannel(messenger, CHANNEL_NAME); - // handler = new MethodCallHandlerImpl(context); - // channel.setMethodCallHandler(handler); - // } + @SuppressWarnings("unchecked") + private List decodeList(String encodedList) throws RuntimeException { + ObjectInputStream stream = null; + try { + stream = + new ObjectInputStream( + new ByteArrayInputStream(Base64.decode(encodedList, 0)) + ); + List data = (List) stream.readObject(); + if (stream != null) { + stream.close(); + } + + return data; + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + } - // private void teardownChannel() { - // handler.teardown(); - // handler = null; - // channel.setMethodCallHandler(null); - // channel = null; - // } + private String encodeList(List list) throws RuntimeException { + ObjectOutputStream stream = null; + try { + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + stream = new ObjectOutputStream(byteStream); + stream.writeObject(list); + stream.flush(); + String data = Base64.encodeToString(byteStream.toByteArray(), 0); + if (stream != null) { + stream.close(); + } + + return data; + } catch (IOException e) { + throw new RuntimeException(e); + } + } } diff --git a/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart b/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart index 324d01dca3c3..02345966734d 100644 --- a/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart +++ b/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart @@ -1,207 +1,204 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v3.2.9), do not edit directly. +// Autogenerated from Pigeon (v7.0.2), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import + import 'dart:async'; -import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List; +import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; -import 'package:flutter/foundation.dart' show WriteBuffer, ReadBuffer; +import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; import 'package:flutter/services.dart'; -class _SharedPreferencesApiCodec extends StandardMessageCodec { - const _SharedPreferencesApiCodec(); -} - class SharedPreferencesApi { /// Constructor for [SharedPreferencesApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - SharedPreferencesApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; - + SharedPreferencesApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; - static const MessageCodec codec = _SharedPreferencesApiCodec(); + static const MessageCodec codec = StandardMessageCodec(); - Future remove(String arg_key) async { + Future remove(String arg_key) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.remove', codec, binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_key]) as Map?; - if (replyMap == null) { + 'dev.flutter.pigeon.SharedPreferencesApi.remove', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_key]) as List?; + if (replyList == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); - } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; - throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], - ); - } else if (replyMap['result'] == null) { + } else if (replyList.length > 1) { throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], ); } else { - return (replyMap['result'] as bool?)!; + return (replyList[0] as bool?); } } Future setBool(String arg_key, bool arg_value) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.setBool', codec, binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_key, arg_value]) as Map?; - if (replyMap == null) { + 'dev.flutter.pigeon.SharedPreferencesApi.setBool', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_key, arg_value]) as List?; + if (replyList == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); - } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + } else if (replyList.length > 1) { throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], ); } else { - return (replyMap['result'] as bool?); + return (replyList[0] as bool?); } } Future setString(String arg_key, String arg_value) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.setString', codec, binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_key, arg_value]) as Map?; - if (replyMap == null) { + 'dev.flutter.pigeon.SharedPreferencesApi.setString', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_key, arg_value]) as List?; + if (replyList == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); - } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + } else if (replyList.length > 1) { throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], ); } else { - return (replyMap['result'] as bool?); + return (replyList[0] as bool?); } } Future setInt(String arg_key, Object arg_value) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.setInt', codec, binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_key, arg_value]) as Map?; - if (replyMap == null) { + 'dev.flutter.pigeon.SharedPreferencesApi.setInt', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_key, arg_value]) as List?; + if (replyList == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); - } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + } else if (replyList.length > 1) { throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], ); } else { - return (replyMap['result'] as bool?); + return (replyList[0] as bool?); } } Future setDouble(String arg_key, double arg_value) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.setDouble', codec, binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_key, arg_value]) as Map?; - if (replyMap == null) { + 'dev.flutter.pigeon.SharedPreferencesApi.setDouble', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_key, arg_value]) as List?; + if (replyList == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); - } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + } else if (replyList.length > 1) { throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], ); } else { - return (replyMap['result'] as bool?); + return (replyList[0] as bool?); } } Future setStringList(String arg_key, List arg_value) async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.setStringList', codec, binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_key, arg_value]) as Map?; - if (replyMap == null) { + 'dev.flutter.pigeon.SharedPreferencesApi.setStringList', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send([arg_key, arg_value]) as List?; + if (replyList == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); - } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + } else if (replyList.length > 1) { throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], ); } else { - return (replyMap['result'] as bool?); + return (replyList[0] as bool?); } } Future clear() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.clear', codec, binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send(null) as Map?; - if (replyMap == null) { + 'dev.flutter.pigeon.SharedPreferencesApi.clear', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send(null) as List?; + if (replyList == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); - } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + } else if (replyList.length > 1) { throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], ); } else { - return (replyMap['result'] as bool?); + return (replyList[0] as bool?); } } - Future?> getAll() async { + Future> getAll() async { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.getAll', codec, binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send(null) as Map?; - if (replyMap == null) { + 'dev.flutter.pigeon.SharedPreferencesApi.getAll', codec, + binaryMessenger: _binaryMessenger); + final List? replyList = + await channel.send(null) as List?; + if (replyList == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); - } else if (replyMap['error'] != null) { - final Map error = (replyMap['error'] as Map?)!; + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else if (replyList[0] == null) { throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', ); } else { - return (replyMap['result'] as Map?)?.cast(); + return (replyList[0] as Map?)!.cast(); } } } diff --git a/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart b/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart index da5147d32da2..312968a99b9e 100644 --- a/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart +++ b/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart @@ -7,13 +7,14 @@ import 'dart:async'; import 'package:flutter/services.dart'; import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart'; -const MethodChannel _kChannel = - MethodChannel('plugins.flutter.io/shared_preferences_android'); +import 'messages.g.dart'; /// The Android implementation of [SharedPreferencesStorePlatform]. /// /// This class implements the `package:shared_preferences` functionality for Android. class SharedPreferencesAndroid extends SharedPreferencesStorePlatform { + final SharedPreferencesApi _api = SharedPreferencesApi(); + /// Registers this class as the default instance of [SharedPreferencesStorePlatform]. static void registerWith() { SharedPreferencesStorePlatform.instance = SharedPreferencesAndroid(); @@ -21,33 +22,47 @@ class SharedPreferencesAndroid extends SharedPreferencesStorePlatform { @override Future remove(String key) async { - return (await _kChannel.invokeMethod( - 'remove', - {'key': key}, - ))!; + return (await _api.remove(key)) ?? false; } @override Future setValue(String valueType, String key, Object value) async { - return (await _kChannel.invokeMethod( - 'set$valueType', - {'key': key, 'value': value}, - ))!; + return (await _handleSetValue(valueType, key, value)) ?? false; } @override Future clear() async { - return (await _kChannel.invokeMethod('clear'))!; + return (await _api.clear()) ?? false; } @override Future> getAll() async { - final Map? preferences = - await _kChannel.invokeMapMethod('getAll'); - + final Map data = await _api.getAll(); + final Map preferences = data.cast(); if (preferences == null) { return {}; } + return preferences; } + + Future _handleSetValue( + String dataType, String key, Object value) async { + switch (dataType) { + case 'String': + return _api.setString(key, value as String); + case 'Bool': + return _api.setBool(key, value as bool); + case 'Int': + return _api.setInt(key, value as int); + case 'Double': + return _api.setDouble(key, value as double); + case 'StringList': + return _api.setStringList(key, value as List); + } + + throw PlatformException( + code: 'InvalidOperation', + message: '"$dataType" is not a supported type.'); + } } diff --git a/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart b/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart index 8563fea54f32..73ca9e837d26 100644 --- a/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart +++ b/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart @@ -17,22 +17,19 @@ import 'package:pigeon/pigeon.dart'; @HostApi(dartHostTestHandler: 'TestSharedPreferencesApi') abstract class SharedPreferencesApi { @TaskQueue(type: TaskQueueType.serialBackgroundThread) - bool remove(String key); + bool? remove(String key); @TaskQueue(type: TaskQueueType.serialBackgroundThread) bool? setBool(String key, bool value); @TaskQueue(type: TaskQueueType.serialBackgroundThread) bool? setString(String key, String value); @TaskQueue(type: TaskQueueType.serialBackgroundThread) bool? setInt(String key, Object value); - @TaskQueue(type: TaskQueueType.serialBackgroundThread) bool? setDouble(String key, double value); - @TaskQueue(type: TaskQueueType.serialBackgroundThread) bool? setStringList (String key, Listvalue); - @TaskQueue(type: TaskQueueType.serialBackgroundThread) bool? clear(); @TaskQueue(type: TaskQueueType.serialBackgroundThread) - Map? getAll(); + Map getAll(); } diff --git a/packages/shared_preferences/shared_preferences_android/pubspec.yaml b/packages/shared_preferences/shared_preferences_android/pubspec.yaml index dac69bf9707c..df8b8804f226 100644 --- a/packages/shared_preferences/shared_preferences_android/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_android/pubspec.yaml @@ -25,5 +25,4 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - pigeon: ^3.1.5 - test: ^1.16.0 \ No newline at end of file + pigeon: ^7.0.2 diff --git a/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart b/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart index 6c1d3726e6c4..b1b4a48593b8 100644 --- a/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart +++ b/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart @@ -1,162 +1,192 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v3.2.9), do not edit directly. +// Autogenerated from Pigeon (v7.0.2), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import // ignore_for_file: avoid_relative_lib_imports import 'dart:async'; -import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List; -import 'package:flutter/foundation.dart' show WriteBuffer, ReadBuffer; +import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; +import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:shared_preferences_android/messages.g.dart'; -class _TestSharedPreferencesApiCodec extends StandardMessageCodec { - const _TestSharedPreferencesApiCodec(); -} abstract class TestSharedPreferencesApi { - static const MessageCodec codec = _TestSharedPreferencesApiCodec(); + static const MessageCodec codec = StandardMessageCodec(); + + bool? remove(String key); - bool remove(String key); bool? setBool(String key, bool value); + bool? setString(String key, String value); + bool? setInt(String key, Object value); + bool? setDouble(String key, double value); + bool? setStringList(String key, List value); + bool? clear(); - Map? getAll(); + + Map getAll(); + static void setup(TestSharedPreferencesApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.remove', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SharedPreferencesApi.remove', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.remove was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.remove was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); - assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.remove was null, expected non-null String.'); - final bool output = api.remove(arg_key!); - return {'result': output}; + assert(arg_key != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.remove was null, expected non-null String.'); + final bool? output = api.remove(arg_key!); + return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.setBool', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SharedPreferencesApi.setBool', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); - assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null, expected non-null String.'); + assert(arg_key != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null, expected non-null String.'); final bool? arg_value = (args[1] as bool?); - assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null, expected non-null bool.'); + assert(arg_value != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null, expected non-null bool.'); final bool? output = api.setBool(arg_key!, arg_value!); - return {'result': output}; + return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.setString', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SharedPreferencesApi.setString', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); - assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null, expected non-null String.'); + assert(arg_key != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null, expected non-null String.'); final String? arg_value = (args[1] as String?); - assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null, expected non-null String.'); + assert(arg_value != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null, expected non-null String.'); final bool? output = api.setString(arg_key!, arg_value!); - return {'result': output}; + return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.setInt', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SharedPreferencesApi.setInt', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); - assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null, expected non-null String.'); + assert(arg_key != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null, expected non-null String.'); final Object? arg_value = (args[1] as Object?); - assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null, expected non-null Object.'); + assert(arg_value != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null, expected non-null Object.'); final bool? output = api.setInt(arg_key!, arg_value!); - return {'result': output}; + return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.setDouble', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SharedPreferencesApi.setDouble', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); - assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null, expected non-null String.'); + assert(arg_key != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null, expected non-null String.'); final double? arg_value = (args[1] as double?); - assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null, expected non-null double.'); + assert(arg_value != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null, expected non-null double.'); final bool? output = api.setDouble(arg_key!, arg_value!); - return {'result': output}; + return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.setStringList', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SharedPreferencesApi.setStringList', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { - assert(message != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null.'); + assert(message != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); - assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null, expected non-null String.'); + assert(arg_key != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null, expected non-null String.'); final List? arg_value = (args[1] as List?)?.cast(); - assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null, expected non-null List.'); + assert(arg_value != null, + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null, expected non-null List.'); final bool? output = api.setStringList(arg_key!, arg_value!); - return {'result': output}; + return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.clear', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SharedPreferencesApi.clear', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { // ignore message final bool? output = api.clear(); - return {'result': output}; + return [output]; }); } } { final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.SharedPreferencesApi.getAll', codec, binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.SharedPreferencesApi.getAll', codec, + binaryMessenger: binaryMessenger); if (api == null) { channel.setMockMessageHandler(null); } else { channel.setMockMessageHandler((Object? message) async { // ignore message - final Map? output = api.getAll(); - return {'result': output}; + final Map output = api.getAll(); + return [output]; }); } } diff --git a/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart b/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart index fb6764893651..c28db3bac67e 100644 --- a/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart +++ b/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart @@ -8,63 +8,67 @@ import 'package:shared_preferences_android/shared_preferences_android.dart'; import 'package:shared_preferences_platform_interface/method_channel_shared_preferences.dart'; import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart'; +import '../test/messages_test.g.dart'; + +class _MockAPI extends TestSharedPreferencesApi { + final Map items = {}; + + @override + bool? clear() { + items.clear(); + return true; + } + + @override + Map getAll() { + return items; + } + + @override + bool? remove(String key) { + items.remove(key); + return true; + } + + @override + bool? setBool(String key, bool value) { + items[key] = value; + return true; + } + + @override + bool? setDouble(String key, double value) { + items[key] = value; + return true; + } + + @override + bool? setInt(String key, Object value) { + items[key] = value; + return true; + } + + @override + bool? setString(String key, String value) { + items[key] = value; + return true; + } + + @override + bool? setStringList(String key, List value) { + items[key] = value; + return true; + } +} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); + late _MockAPI api; group(MethodChannelSharedPreferencesStore, () { - const MethodChannel channel = MethodChannel( - 'plugins.flutter.io/shared_preferences_android', - ); - - const Map kTestValues = { - 'flutter.String': 'hello world', - 'flutter.Bool': true, - 'flutter.Int': 42, - 'flutter.Double': 3.14159, - 'flutter.StringList': ['foo', 'bar'], - }; - // Create a dummy in-memory implementation to back the mocked method channel - // API to simplify validation of the expected calls. - late InMemorySharedPreferencesStore testData; - - final List log = []; - late SharedPreferencesStorePlatform store; - setUp(() async { - testData = InMemorySharedPreferencesStore.empty(); - - Map getArgumentDictionary(MethodCall call) { - return (call.arguments as Map) - .cast(); - } - - channel.setMockMethodCallHandler((MethodCall methodCall) async { - log.add(methodCall); - if (methodCall.method == 'getAll') { - return testData.getAll(); - } - if (methodCall.method == 'remove') { - final Map arguments = - getArgumentDictionary(methodCall); - final String key = arguments['key']! as String; - return testData.remove(key); - } - if (methodCall.method == 'clear') { - return testData.clear(); - } - final RegExp setterRegExp = RegExp(r'set(.*)'); - final Match? match = setterRegExp.matchAsPrefix(methodCall.method); - if (match?.groupCount == 1) { - final String valueType = match!.group(1)!; - final Map arguments = - getArgumentDictionary(methodCall); - final String key = arguments['key']! as String; - final Object value = arguments['value']!; - return testData.setValue(valueType, key, value); - } - fail('Unexpected method call: ${methodCall.method}'); - }); - log.clear(); + api = _MockAPI(); + TestSharedPreferencesApi.setup(api); }); test('registered instance', () { @@ -72,55 +76,58 @@ void main() { expect(SharedPreferencesStorePlatform.instance, isA()); }); + test('remove', () async { + final SharedPreferencesAndroid plugin = SharedPreferencesAndroid(); + api.items['flutter.hi'] = 'world'; + expect(await plugin.remove('flutter.hi'), isTrue); + expect(api.items.containsKey('flutter.hi'), isFalse); + }); - test('getAll', () async { - store = SharedPreferencesAndroid(); - testData = InMemorySharedPreferencesStore.withData(kTestValues); - expect(await store.getAll(), kTestValues); - expect(log.single.method, 'getAll'); + test('clear', () async { + final SharedPreferencesAndroid plugin = SharedPreferencesAndroid(); + api.items['flutter.hi'] = 'world'; + expect(await plugin.clear(), isTrue); + expect(api.items.containsKey('flutter.hi'), isFalse); }); - test('remove', () async { - store = SharedPreferencesAndroid(); - testData = InMemorySharedPreferencesStore.withData(kTestValues); - expect(await store.remove('flutter.String'), true); - expect(await store.remove('flutter.Bool'), true); - expect(await store.remove('flutter.Int'), true); - expect(await store.remove('flutter.Double'), true); - expect(await testData.getAll(), { - 'flutter.StringList': ['foo', 'bar'], - }); - - expect(log, hasLength(4)); - for (final MethodCall call in log) { - expect(call.method, 'remove'); - } + test('getAll', () async { + final SharedPreferencesAndroid plugin = SharedPreferencesAndroid(); + api.items['flutter.aBool'] = true; + api.items['flutter.aDouble'] = 3.14; + api.items['flutter.anInt'] = 42; + api.items['flutter.aString'] = 'hello world'; + api.items['flutter.aStringList'] = ['hello', 'world']; + final Map all = await plugin.getAll(); + expect(all.length, 5); + expect(all['flutter.aBool'], api.items['flutter.aBool']); + expect(all['flutter.aDouble'], + closeTo(api.items['flutter.aDouble']! as num, 0.0001)); + expect(all['flutter.anInt'], api.items['flutter.anInt']); + expect(all['flutter.aString'], api.items['flutter.aString']); + expect(all['flutter.aStringList'], api.items['flutter.aStringList']); }); test('setValue', () async { - store = SharedPreferencesAndroid(); - expect(await testData.getAll(), isEmpty); - for (final String key in kTestValues.keys) { - final Object value = kTestValues[key]!; - expect(await store.setValue(key.split('.').last, key, value), true); - } - expect(await testData.getAll(), kTestValues); - - expect(log, hasLength(5)); - expect(log[0].method, 'setString'); - expect(log[1].method, 'setBool'); - expect(log[2].method, 'setInt'); - expect(log[3].method, 'setDouble'); - expect(log[4].method, 'setStringList'); + final SharedPreferencesAndroid plugin = SharedPreferencesAndroid(); + expect(await plugin.setValue('Bool', 'flutter.Bool', true), isTrue); + expect(api.items['flutter.Bool'], true); + expect(await plugin.setValue('Double', 'flutter.Double', 1.5), isTrue); + expect(api.items['flutter.Double'], 1.5); + expect(await plugin.setValue('Int', 'flutter.Int', 12), isTrue); + expect(api.items['flutter.Int'], 12); + expect(await plugin.setValue('String', 'flutter.String', 'hi'), isTrue); + expect(api.items['flutter.String'], 'hi'); + expect( + await plugin + .setValue('StringList', 'flutter.StringList', ['hi']), + isTrue); + expect(api.items['flutter.StringList'], ['hi']); }); - - test('clear', () async { - store = SharedPreferencesAndroid(); - testData = InMemorySharedPreferencesStore.withData(kTestValues); - expect(await testData.getAll(), isNotEmpty); - expect(await store.clear(), true); - expect(await testData.getAll(), isEmpty); - expect(log.single.method, 'clear'); + test('setValue with unsupported type', () { + final SharedPreferencesAndroid plugin = SharedPreferencesAndroid(); + expect(() async { + await plugin.setValue('Map', 'flutter.key', {}); + }, throwsA(isA())); }); }); } From c6af29c05d4f37ac0d6a1f69c30eaab2862836da Mon Sep 17 00:00:00 2001 From: amannegi Date: Tue, 24 Jan 2023 13:44:58 +0530 Subject: [PATCH 03/16] shared_preferences] Upgraded the version `pubspec.yaml` --- .../shared_preferences/shared_preferences_android/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared_preferences/shared_preferences_android/pubspec.yaml b/packages/shared_preferences/shared_preferences_android/pubspec.yaml index df8b8804f226..57f1985f7375 100644 --- a/packages/shared_preferences/shared_preferences_android/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_android/pubspec.yaml @@ -2,7 +2,7 @@ name: shared_preferences_android description: Android implementation of the shared_preferences plugin repository: https://github.com/flutter/plugins/tree/main/packages/shared_preferences/shared_preferences_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.0.15 +version: 2.0.16 environment: sdk: ">=2.14.0 <3.0.0" From 04d86757926744ffa25999997eeaad0f914e72c3 Mon Sep 17 00:00:00 2001 From: amannegi Date: Tue, 24 Jan 2023 13:54:38 +0530 Subject: [PATCH 04/16] [shared_preferences] Updated `CHANGELOG.md` --- .../shared_preferences/shared_preferences_android/AUTHORS | 3 +-- .../shared_preferences_android/CHANGELOG.md | 4 ++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_android/AUTHORS b/packages/shared_preferences/shared_preferences_android/AUTHORS index 2351dda62bd0..c1c25f874403 100644 --- a/packages/shared_preferences/shared_preferences_android/AUTHORS +++ b/packages/shared_preferences/shared_preferences_android/AUTHORS @@ -63,5 +63,4 @@ Juan Alvarez Aleksandr Yurkovskiy Anton Borries Alex Li -Rahul Raj <64.rahulraj@gmail.com> -Aman Negi +Rahul Raj <64.rahulraj@gmail.com> \ No newline at end of file diff --git a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md index 1e348a124702..095f2794b4af 100644 --- a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.16 + +* Converted `SharedPreferencesAndroid` to Pigeon. + ## 2.0.15 * Updates code for stricter lint checks. From 091ec6209ac5f01ea13d0db34046eac79efe1ae4 Mon Sep 17 00:00:00 2001 From: amannegi Date: Tue, 24 Jan 2023 13:59:38 +0530 Subject: [PATCH 05/16] shared_preferences] Added helper comments --- .../shared_preferences_android/lib/pigeon.dart | 0 .../lib/shared_preferences_android.dart | 1 + .../shared_preferences_android/pigeons/messages.dart | 1 + .../test/shared_preferences_android_test.dart | 1 + 4 files changed, 3 insertions(+) delete mode 100644 packages/shared_preferences/shared_preferences_android/lib/pigeon.dart diff --git a/packages/shared_preferences/shared_preferences_android/lib/pigeon.dart b/packages/shared_preferences/shared_preferences_android/lib/pigeon.dart deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart b/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart index 312968a99b9e..3ac95e6d40c2 100644 --- a/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart +++ b/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart @@ -46,6 +46,7 @@ class SharedPreferencesAndroid extends SharedPreferencesStorePlatform { return preferences; } + // Call the function according to the type of value provided Future _handleSetValue( String dataType, String key, Object value) async { switch (dataType) { diff --git a/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart b/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart index 73ca9e837d26..4fd597dd2fce 100644 --- a/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart +++ b/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart @@ -14,6 +14,7 @@ import 'package:pigeon/pigeon.dart'; dartTestOut: 'test/messages_test.g.dart', copyrightHeader: 'pigeons/copyright.txt', )) + @HostApi(dartHostTestHandler: 'TestSharedPreferencesApi') abstract class SharedPreferencesApi { @TaskQueue(type: TaskQueueType.serialBackgroundThread) diff --git a/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart b/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart index c28db3bac67e..28b9e1b792ba 100644 --- a/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart +++ b/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart @@ -10,6 +10,7 @@ import 'package:shared_preferences_platform_interface/shared_preferences_platfor import '../test/messages_test.g.dart'; +// Mock Implementation of the SharedPreferencesApi class _MockAPI extends TestSharedPreferencesApi { final Map items = {}; From 5d900ada4af37c86ac3fdc3951ece81b77e45112 Mon Sep 17 00:00:00 2001 From: amannegi Date: Tue, 24 Jan 2023 14:11:51 +0530 Subject: [PATCH 06/16] [shared_preferences] Formatted Document According to Error Request --- .../lib/messages.g.dart | 9 ++++----- .../pigeons/messages.dart | 3 +-- .../test/messages_test.g.dart | 18 ++++++++++-------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart b/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart index 02345966734d..d5c9551ea9e9 100644 --- a/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart +++ b/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart @@ -157,8 +157,7 @@ class SharedPreferencesApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.SharedPreferencesApi.clear', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -179,8 +178,7 @@ class SharedPreferencesApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.SharedPreferencesApi.getAll', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -198,7 +196,8 @@ class SharedPreferencesApi { message: 'Host platform returned null value for non-null return value.', ); } else { - return (replyList[0] as Map?)!.cast(); + return (replyList[0] as Map?)! + .cast(); } } } diff --git a/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart b/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart index 4fd597dd2fce..cc86f4f17e25 100644 --- a/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart +++ b/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart @@ -14,7 +14,6 @@ import 'package:pigeon/pigeon.dart'; dartTestOut: 'test/messages_test.g.dart', copyrightHeader: 'pigeons/copyright.txt', )) - @HostApi(dartHostTestHandler: 'TestSharedPreferencesApi') abstract class SharedPreferencesApi { @TaskQueue(type: TaskQueueType.serialBackgroundThread) @@ -28,7 +27,7 @@ abstract class SharedPreferencesApi { @TaskQueue(type: TaskQueueType.serialBackgroundThread) bool? setDouble(String key, double value); @TaskQueue(type: TaskQueueType.serialBackgroundThread) - bool? setStringList (String key, Listvalue); + bool? setStringList(String key, List value); @TaskQueue(type: TaskQueueType.serialBackgroundThread) bool? clear(); @TaskQueue(type: TaskQueueType.serialBackgroundThread) diff --git a/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart b/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart index b1b4a48593b8..de1ef22c8f35 100644 --- a/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart +++ b/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart @@ -32,7 +32,8 @@ abstract class TestSharedPreferencesApi { Map getAll(); - static void setup(TestSharedPreferencesApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestSharedPreferencesApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.SharedPreferencesApi.remove', codec, @@ -42,7 +43,7 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.remove was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.remove was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, @@ -61,7 +62,7 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, @@ -83,7 +84,7 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, @@ -105,7 +106,7 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, @@ -127,7 +128,7 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, @@ -149,12 +150,13 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null, expected non-null String.'); - final List? arg_value = (args[1] as List?)?.cast(); + final List? arg_value = + (args[1] as List?)?.cast(); assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null, expected non-null List.'); final bool? output = api.setStringList(arg_key!, arg_value!); From a874e29834190db48c42b9639d035cf70fd8e7ab Mon Sep 17 00:00:00 2001 From: amannegi Date: Tue, 24 Jan 2023 14:35:16 +0530 Subject: [PATCH 07/16] shared_preferences] Updated Code Format --- .../plugins/sharedpreferences/Messages.java | 406 ++++++++++-------- 1 file changed, 217 insertions(+), 189 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java index bcaa30d101f5..6a4998f396f6 100644 --- a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java +++ b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java @@ -23,278 +23,306 @@ import java.util.Map; /** Generated class from Pigeon. */ -@SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"}) +@SuppressWarnings( + { "unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression" } +) public class Messages { + @NonNull private static ArrayList wrapError(@NonNull Throwable exception) { ArrayList errorList = new ArrayList<>(3); errorList.add(exception.toString()); errorList.add(exception.getClass().getSimpleName()); errorList.add( - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + "Cause: " + + exception.getCause() + + ", Stacktrace: " + + Log.getStackTraceString(exception) + ); return errorList; } + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ public interface SharedPreferencesApi { - - @Nullable + @Nullable Boolean remove(@NonNull String key); - @Nullable + @Nullable Boolean setBool(@NonNull String key, @NonNull Boolean value); - @Nullable + @Nullable Boolean setString(@NonNull String key, @NonNull String value); - @Nullable + @Nullable Boolean setInt(@NonNull String key, @NonNull Object value); - @Nullable + @Nullable Boolean setDouble(@NonNull String key, @NonNull Double value); - @Nullable - Boolean setStringList(@NonNull String key, @NonNull List value) throws RuntimeException; + @Nullable + Boolean setStringList(@NonNull String key, @NonNull List value) + throws RuntimeException; - @Nullable + @Nullable Boolean clear() throws RuntimeException; - @NonNull + @NonNull Map getAll() throws RuntimeException; /** The codec used by SharedPreferencesApi. */ static MessageCodec getCodec() { return new StandardMessageCodec(); } + /**Sets up an instance of `SharedPreferencesApi` to handle messages through the `binaryMessenger`. */ - static void setup(BinaryMessenger binaryMessenger, SharedPreferencesApi api) { + static void setup( + BinaryMessenger binaryMessenger, + SharedPreferencesApi api + ) { { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.remove", getCodec(), taskQueue); + BasicMessageChannel channel = new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.remove", + getCodec(), + taskQueue + ); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Boolean output = api.remove(keyArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Boolean output = api.remove(keyArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setBool", getCodec(), taskQueue); + BasicMessageChannel channel = new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.setBool", + getCodec(), + taskQueue + ); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Boolean valueArg = (Boolean) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setBool(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Boolean valueArg = (Boolean) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setBool(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setString", getCodec(), taskQueue); + BasicMessageChannel channel = new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.setString", + getCodec(), + taskQueue + ); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - String valueArg = (String) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setString(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + String valueArg = (String) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setString(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setInt", getCodec(), taskQueue); + BasicMessageChannel channel = new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.setInt", + getCodec(), + taskQueue + ); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Object valueArg = args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setInt(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Object valueArg = args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setInt(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setDouble", getCodec(), taskQueue); + BasicMessageChannel channel = new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.setDouble", + getCodec(), + taskQueue + ); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Double valueArg = (Double) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setDouble(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Double valueArg = (Double) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setDouble(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setStringList", getCodec(), taskQueue); + BasicMessageChannel channel = new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.setStringList", + getCodec(), + taskQueue + ); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - List valueArg = (List) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setStringList(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + List valueArg = (List) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setStringList(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.clear", getCodec(), taskQueue); + BasicMessageChannel channel = new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.clear", + getCodec(), + taskQueue + ); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - Boolean output = api.clear(); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + Boolean output = api.clear(); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.getAll", getCodec(), taskQueue); + BasicMessageChannel channel = new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.getAll", + getCodec(), + taskQueue + ); if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - Map output = api.getAll(); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler((message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + Map output = api.getAll(); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } From 0c3f92b4f1507a7b9efaecbd0ef6a4db25f0e770 Mon Sep 17 00:00:00 2001 From: amannegi Date: Tue, 24 Jan 2023 17:06:02 +0530 Subject: [PATCH 08/16] [shared_preferences] Reformatted Code according to Google Format --- .../plugins/sharedpreferences/Messages.java | 420 +++++++++--------- .../SharedPreferencesPlugin.java | 80 +--- 2 files changed, 232 insertions(+), 268 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java index 6a4998f396f6..382ee3c94cb6 100644 --- a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java +++ b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java @@ -13,19 +13,12 @@ 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; /** Generated class from Pigeon. */ -@SuppressWarnings( - { "unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression" } -) +@SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"}) public class Messages { @NonNull @@ -34,11 +27,7 @@ private static ArrayList wrapError(@NonNull Throwable exception) { errorList.add(exception.toString()); errorList.add(exception.getClass().getSimpleName()); errorList.add( - "Cause: " + - exception.getCause() + - ", Stacktrace: " + - Log.getStackTraceString(exception) - ); + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); return errorList; } @@ -60,8 +49,7 @@ public interface SharedPreferencesApi { Boolean setDouble(@NonNull String key, @NonNull Double value); @Nullable - Boolean setStringList(@NonNull String key, @NonNull List value) - throws RuntimeException; + Boolean setStringList(@NonNull String key, @NonNull List value) throws RuntimeException; @Nullable Boolean clear() throws RuntimeException; @@ -74,255 +62,263 @@ static MessageCodec getCodec() { return new StandardMessageCodec(); } - /**Sets up an instance of `SharedPreferencesApi` to handle messages through the `binaryMessenger`. */ - static void setup( - BinaryMessenger binaryMessenger, - SharedPreferencesApi api - ) { + /** + * Sets up an instance of `SharedPreferencesApi` to handle messages through the + * `binaryMessenger`. + */ + static void setup(BinaryMessenger binaryMessenger, SharedPreferencesApi api) { { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.remove", - getCodec(), - taskQueue - ); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.remove", + getCodec(), + taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Boolean output = api.remove(keyArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Boolean output = api.remove(keyArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.setBool", - getCodec(), - taskQueue - ); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.setBool", + getCodec(), + taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Boolean valueArg = (Boolean) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setBool(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Boolean valueArg = (Boolean) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setBool(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.setString", - getCodec(), - taskQueue - ); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.setString", + getCodec(), + taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - String valueArg = (String) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setString(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + String valueArg = (String) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setString(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.setInt", - getCodec(), - taskQueue - ); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.setInt", + getCodec(), + taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Object valueArg = args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setInt(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Object valueArg = args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setInt(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.setDouble", - getCodec(), - taskQueue - ); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.setDouble", + getCodec(), + taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Double valueArg = (Double) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setDouble(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Double valueArg = (Double) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setDouble(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.setStringList", - getCodec(), - taskQueue - ); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.setStringList", + getCodec(), + taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - List valueArg = (List) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setStringList(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + List valueArg = (List) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setStringList(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.clear", - getCodec(), - taskQueue - ); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.clear", + getCodec(), + taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - Boolean output = api.clear(); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + Boolean output = api.clear(); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } } { BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.getAll", - getCodec(), - taskQueue - ); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.getAll", + getCodec(), + taskQueue); if (api != null) { - channel.setMessageHandler((message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - Map output = api.getAll(); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + Map output = api.getAll(); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); } else { channel.setMessageHandler(null); } diff --git a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java index cfd7490d6bbb..662e37dfb867 100644 --- a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java +++ b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java @@ -4,7 +4,6 @@ package io.flutter.plugins.sharedpreferences; -import android.content.Context; import android.content.Context; import android.content.SharedPreferences; import android.util.Base64; @@ -12,7 +11,6 @@ import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.BinaryMessenger.TaskQueue; -import io.flutter.plugin.common.MethodChannel; import io.flutter.plugins.sharedpreferences.Messages.SharedPreferencesApi; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -27,47 +25,32 @@ import java.util.Set; /** SharedPreferencesPlugin */ -public class SharedPreferencesPlugin - implements FlutterPlugin, SharedPreferencesApi { +public class SharedPreferencesPlugin implements FlutterPlugin, SharedPreferencesApi { static final String TAG = "SharedPreferencesPlugin"; - private static final String SHARED_PREFERENCES_NAME = - "FlutterSharedPreferences"; + private static final String SHARED_PREFERENCES_NAME = "FlutterSharedPreferences"; // Fun fact: The following is a base64 encoding of the string "This is the prefix for a list." - private static final String LIST_IDENTIFIER = - "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu"; - private static final String BIG_INTEGER_PREFIX = - "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBCaWdJbnRlZ2Vy"; - private static final String DOUBLE_PREFIX = - "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBEb3VibGUu"; + private static final String LIST_IDENTIFIER = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu"; + private static final String BIG_INTEGER_PREFIX = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBCaWdJbnRlZ2Vy"; + private static final String DOUBLE_PREFIX = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBEb3VibGUu"; private android.content.SharedPreferences preferences; private void setup(BinaryMessenger messenger, Context context) { TaskQueue taskQueue = messenger.makeBackgroundTaskQueue(); - preferences = - context.getSharedPreferences( - SHARED_PREFERENCES_NAME, - Context.MODE_PRIVATE - ); + preferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); try { SharedPreferencesApi.setup(messenger, this); } catch (Exception ex) { - Log.e( - TAG, - "Received exception while setting up SharedPreferencesPlugin", - ex - ); + Log.e(TAG, "Received exception while setting up SharedPreferencesPlugin", ex); } } @SuppressWarnings("deprecation") - public static void registerWith( - io.flutter.plugin.common.PluginRegistry.Registrar registrar - ) { + public static void registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar) { final SharedPreferencesPlugin plugin = new SharedPreferencesPlugin(); plugin.setup(registrar.messenger(), registrar.context()); } @@ -89,14 +72,11 @@ public Boolean setBool(String key, Boolean value) { @Override public Boolean setString(String key, String value) { - if ( - value.startsWith(LIST_IDENTIFIER) || - value.startsWith(BIG_INTEGER_PREFIX) || - value.startsWith(DOUBLE_PREFIX) - ) { + if (value.startsWith(LIST_IDENTIFIER) + || value.startsWith(BIG_INTEGER_PREFIX) + || value.startsWith(DOUBLE_PREFIX)) { throw new RuntimeException( - "StorageError: This string cannot be stored as it clashes with special identifier prefixes" - ); + "StorageError: This string cannot be stored as it clashes with special identifier prefixes"); } return preferences.edit().putString(key, value).commit(); } @@ -107,12 +87,9 @@ public Boolean setInt(String key, Object value) { if (number instanceof BigInteger) { BigInteger integerValue = (BigInteger) number; return preferences - .edit() - .putString( - key, - BIG_INTEGER_PREFIX + integerValue.toString(Character.MAX_RADIX) - ) - .commit(); + .edit() + .putString(key, BIG_INTEGER_PREFIX + integerValue.toString(Character.MAX_RADIX)) + .commit(); } else { return preferences.edit().putLong(key, number.longValue()).commit(); } @@ -121,20 +98,14 @@ public Boolean setInt(String key, Object value) { @Override public Boolean setDouble(String key, Double value) { String doubleValueStr = Double.toString(value); - return preferences - .edit() - .putString(key, DOUBLE_PREFIX + doubleValueStr) - .commit(); + return preferences.edit().putString(key, DOUBLE_PREFIX + doubleValueStr).commit(); } @Override - public Boolean setStringList(String key, List value) - throws RuntimeException { + public Boolean setStringList(String key, List value) throws RuntimeException { try { - Boolean success = preferences - .edit() - .putString(key, LIST_IDENTIFIER + encodeList(value)) - .commit(); + Boolean success = + preferences.edit().putString(key, LIST_IDENTIFIER + encodeList(value)).commit(); return success; } catch (RuntimeException e) { throw e; @@ -195,10 +166,10 @@ private Map getAllPrefs() throws RuntimeException { // Let's migrate the value too while we are at it. try { preferences - .edit() - .remove(key) - .putString(key, LIST_IDENTIFIER + encodeList(listValue)) - .commit(); + .edit() + .remove(key) + .putString(key, LIST_IDENTIFIER + encodeList(listValue)) + .commit(); } catch (RuntimeException e) { // If we are unable to migrate the existing preferences, it means we potentially lost them. // In this case, an error from getAllPrefs() is appropriate since it will alert the app during plugin initialization. @@ -217,10 +188,7 @@ private Map getAllPrefs() throws RuntimeException { private List decodeList(String encodedList) throws RuntimeException { ObjectInputStream stream = null; try { - stream = - new ObjectInputStream( - new ByteArrayInputStream(Base64.decode(encodedList, 0)) - ); + stream = new ObjectInputStream(new ByteArrayInputStream(Base64.decode(encodedList, 0))); List data = (List) stream.readObject(); if (stream != null) { stream.close(); From a4fb46ee7a652a34e002aed5b718024fff65dada Mon Sep 17 00:00:00 2001 From: amannegi Date: Wed, 25 Jan 2023 16:58:19 +0530 Subject: [PATCH 09/16] [shared_preferences] Added android tests and fixed changes requested --- .../shared_preferences_android/CHANGELOG.md | 2 +- .../plugins/sharedpreferences/Messages.java | 573 +++++++++--------- .../MethodCallHandlerImpl.java | 199 ++++++ .../SharedPreferencesPlugin.java | 268 +++----- .../SharedPreferencesTest.java | 130 +++- .../lib/messages.g.dart | 72 ++- .../lib/shared_preferences_android.dart | 6 +- .../pigeons/messages.dart | 14 +- .../test/messages_test.g.dart | 46 +- .../test/shared_preferences_android_test.dart | 14 +- 10 files changed, 770 insertions(+), 554 deletions(-) create mode 100644 packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java diff --git a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md index 095f2794b4af..0f379f331027 100644 --- a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md @@ -1,6 +1,6 @@ ## 2.0.16 -* Converted `SharedPreferencesAndroid` to Pigeon. +* Converts `SharedPreferencesAndroid` to Pigeon. ## 2.0.15 diff --git a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java index 382ee3c94cb6..6cff34c0b1b0 100644 --- a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java +++ b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java @@ -7,322 +7,305 @@ package io.flutter.plugins.sharedpreferences; import android.util.Log; + import androidx.annotation.NonNull; -import androidx.annotation.Nullable; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + 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.util.ArrayList; -import java.util.List; -import java.util.Map; -/** Generated class from Pigeon. */ +/** + * Generated class from Pigeon. + */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"}) public class Messages { - - @NonNull - private static ArrayList wrapError(@NonNull Throwable exception) { - ArrayList errorList = new ArrayList<>(3); - errorList.add(exception.toString()); - errorList.add(exception.getClass().getSimpleName()); - errorList.add( - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); - return errorList; - } - - /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ - public interface SharedPreferencesApi { - @Nullable - Boolean remove(@NonNull String key); - - @Nullable - Boolean setBool(@NonNull String key, @NonNull Boolean value); - - @Nullable - Boolean setString(@NonNull String key, @NonNull String value); - - @Nullable - Boolean setInt(@NonNull String key, @NonNull Object value); - - @Nullable - Boolean setDouble(@NonNull String key, @NonNull Double value); - - @Nullable - Boolean setStringList(@NonNull String key, @NonNull List value) throws RuntimeException; - - @Nullable - Boolean clear() throws RuntimeException; - @NonNull - Map getAll() throws RuntimeException; - - /** The codec used by SharedPreferencesApi. */ - static MessageCodec getCodec() { - return new StandardMessageCodec(); + private static ArrayList wrapError(@NonNull Throwable exception) { + ArrayList errorList = new ArrayList<>(3); + errorList.add(exception.toString()); + errorList.add(exception.getClass().getSimpleName()); + errorList.add( + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + return errorList; } /** - * Sets up an instance of `SharedPreferencesApi` to handle messages through the - * `binaryMessenger`. + * Generated interface from Pigeon that represents a handler of messages from Flutter. */ - static void setup(BinaryMessenger binaryMessenger, SharedPreferencesApi api) { - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.remove", - getCodec(), - taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Boolean output = api.remove(keyArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); + public interface SharedPreferencesApi { + + /** + * The codec used by SharedPreferencesApi. + */ + static MessageCodec getCodec() { + return new StandardMessageCodec(); } - } - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.setBool", - getCodec(), - taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Boolean valueArg = (Boolean) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setBool(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; + + /** + * Sets up an instance of `SharedPreferencesApi` to handle messages through the `binaryMessenger`. + */ + static void setup(BinaryMessenger binaryMessenger, SharedPreferencesApi api) { + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.remove", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Boolean output = api.remove(keyArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.setString", - getCodec(), - taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - String valueArg = (String) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setString(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setBool", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Boolean valueArg = (Boolean) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setBool(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.setInt", - getCodec(), - taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Object valueArg = args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setInt(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setString", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + String valueArg = (String) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setString(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.setDouble", - getCodec(), - taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Double valueArg = (Double) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setDouble(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setInt", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Object valueArg = args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setInt(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.setStringList", - getCodec(), - taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - List valueArg = (List) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setStringList(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setDouble", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Double valueArg = (Double) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setDouble(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.clear", - getCodec(), - taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - Boolean output = api.clear(); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setStringList", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + List valueArg = (List) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setStringList(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); - } - } - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, - "dev.flutter.pigeon.SharedPreferencesApi.getAll", - getCodec(), - taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - Map output = api.getAll(); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.clear", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + Boolean output = api.clear(); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.getAll", getCodec(), taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + Map output = api.getAll(); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } } - } + + @NonNull + Boolean remove(@NonNull String key); + + @NonNull + Boolean setBool(@NonNull String key, @NonNull Boolean value); + + @NonNull + Boolean setString(@NonNull String key, @NonNull String value); + + @NonNull + Boolean setInt(@NonNull String key, @NonNull Object value); + + @NonNull + Boolean setDouble(@NonNull String key, @NonNull Double value); + + @NonNull + Boolean setStringList(@NonNull String key, @NonNull List value); + + @NonNull + Boolean clear(); + + @NonNull + Map getAll(); } - } } diff --git a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java new file mode 100644 index 000000000000..b13dc2a6e746 --- /dev/null +++ b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java @@ -0,0 +1,199 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.sharedpreferences; + +import android.content.Context; +import android.content.SharedPreferences; +import android.util.Base64; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Helper class to save data to `android.content.SharedPreferences` + */ + +// Rename class and file to match it's purpose, preferably SharedPreferencesHelper +@SuppressWarnings("unchecked") +class MethodCallHandlerImpl { + + private static final String SHARED_PREFERENCES_NAME = + "FlutterSharedPreferences"; + + // Fun fact: The following is a base64 encoding of the string "This is the prefix for a list." + private static final String LIST_IDENTIFIER = + "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu"; + private static final String BIG_INTEGER_PREFIX = + "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBCaWdJbnRlZ2Vy"; + private static final String DOUBLE_PREFIX = + "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBEb3VibGUu"; + + private final android.content.SharedPreferences preferences; + + MethodCallHandlerImpl(Context context) { + preferences = + context.getSharedPreferences( + SHARED_PREFERENCES_NAME, + Context.MODE_PRIVATE + ); + } + + public Boolean setBool(String key, Boolean value) { + return preferences.edit().putBoolean(key, value).commit(); + } + + public Boolean setString(String key, String value) { + if ( + value.startsWith(LIST_IDENTIFIER) || + value.startsWith(BIG_INTEGER_PREFIX) || + value.startsWith(DOUBLE_PREFIX) + ) { + throw new RuntimeException( + "StorageError: This string cannot be stored as it clashes with special identifier prefixes" + ); + } + return preferences.edit().putString(key, value).commit(); + } + + public Boolean setInt(String key, Object value) { + Number number = (Number) value; + if (number instanceof BigInteger) { + BigInteger integerValue = (BigInteger) number; + return preferences + .edit() + .putString( + key, + BIG_INTEGER_PREFIX + integerValue.toString(Character.MAX_RADIX) + ) + .commit(); + } else { + return preferences.edit().putLong(key, number.longValue()).commit(); + } + } + + public Boolean setDouble(String key, Double value) { + String doubleValueStr = Double.toString(value); + return preferences + .edit() + .putString(key, DOUBLE_PREFIX + doubleValueStr) + .commit(); + } + + public Boolean setStringList(String key, List value) + throws RuntimeException { + Boolean success = preferences + .edit() + .putString(key, LIST_IDENTIFIER + encodeList(value)) + .commit(); + return success; + } + + public Map getAll() throws RuntimeException { + Map data = getAllPrefs(); + return data; + } + + public Boolean remove(String key) { + return preferences.edit().remove(key).commit(); + } + + public Boolean clear() throws RuntimeException { + Set keySet = getAllPrefs().keySet(); + SharedPreferences.Editor clearEditor = preferences.edit(); + for (String keyToDelete : keySet) { + clearEditor.remove(keyToDelete); + } + return clearEditor.commit(); + } + + // Filter preferences to only those set by the flutter app. + @SuppressWarnings("unchecked") + private Map getAllPrefs() throws RuntimeException { + Map allPrefs = preferences.getAll(); + Map filteredPrefs = new HashMap<>(); + for (String key : allPrefs.keySet()) { + if (key.startsWith("flutter.")) { + Object value = allPrefs.get(key); + if (value instanceof String) { + String stringValue = (String) value; + if (stringValue.startsWith(LIST_IDENTIFIER)) { + value = decodeList(stringValue.substring(LIST_IDENTIFIER.length())); + } else if (stringValue.startsWith(BIG_INTEGER_PREFIX)) { + String encoded = stringValue.substring(BIG_INTEGER_PREFIX.length()); + value = new BigInteger(encoded, Character.MAX_RADIX); + } else if (stringValue.startsWith(DOUBLE_PREFIX)) { + String doubleStr = stringValue.substring(DOUBLE_PREFIX.length()); + value = Double.valueOf(doubleStr); + } + } else if (value instanceof Set) { + // This only happens for previous usage of setStringSet. The app expects a list. + List listValue = new ArrayList((Set) value); + // Let's migrate the value too while we are at it. + try { + preferences + .edit() + .remove(key) + .putString(key, LIST_IDENTIFIER + encodeList(listValue)) + .commit(); + } catch (RuntimeException e) { + // If we are unable to migrate the existing preferences, it means we potentially lost them. + // In this case, an error from getAllPrefs() is appropriate since it will alert the app during plugin initialization. + throw e; + } + value = listValue; + } + filteredPrefs.put(key, value); + } + } + + return filteredPrefs; + } + + @SuppressWarnings("unchecked") + private List decodeList(String encodedList) throws RuntimeException { + ObjectInputStream stream = null; + try { + stream = + new ObjectInputStream( + new ByteArrayInputStream(Base64.decode(encodedList, 0)) + ); + List data = (List) stream.readObject(); + if (stream != null) { + stream.close(); + } + + return data; + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + private String encodeList(List list) throws RuntimeException { + ObjectOutputStream stream = null; + try { + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + stream = new ObjectOutputStream(byteStream); + stream.writeObject(list); + stream.flush(); + String data = Base64.encodeToString(byteStream.toByteArray(), 0); + if (stream != null) { + stream.close(); + } + + return data; + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java index 662e37dfb867..b2e3c42859e9 100644 --- a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java +++ b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java @@ -4,217 +4,97 @@ package io.flutter.plugins.sharedpreferences; +import android.annotation.SuppressLint; import android.content.Context; -import android.content.SharedPreferences; -import android.util.Base64; import android.util.Log; -import io.flutter.embedding.engine.plugins.FlutterPlugin; -import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugin.common.BinaryMessenger.TaskQueue; -import io.flutter.plugins.sharedpreferences.Messages.SharedPreferencesApi; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.HashMap; + import java.util.List; import java.util.Map; -import java.util.Set; - -/** SharedPreferencesPlugin */ -public class SharedPreferencesPlugin implements FlutterPlugin, SharedPreferencesApi { - - static final String TAG = "SharedPreferencesPlugin"; - private static final String SHARED_PREFERENCES_NAME = "FlutterSharedPreferences"; +import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugins.sharedpreferences.Messages.SharedPreferencesApi; - // Fun fact: The following is a base64 encoding of the string "This is the prefix for a list." - private static final String LIST_IDENTIFIER = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu"; - private static final String BIG_INTEGER_PREFIX = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBCaWdJbnRlZ2Vy"; - private static final String DOUBLE_PREFIX = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBEb3VibGUu"; +/** + * SharedPreferencesPlugin + */ +public class SharedPreferencesPlugin + implements FlutterPlugin, SharedPreferencesApi { + final String TAG = "SharedPreferencesPlugin.java"; + + // SharedPreferences Helper Object, exposes SharedPreferences methods + private MethodCallHandlerImpl preferences; + + @SuppressWarnings("deprecation") + public static void registerWith( + io.flutter.plugin.common.PluginRegistry.Registrar registrar + ) { + final SharedPreferencesPlugin plugin = new SharedPreferencesPlugin(); + plugin.setup(registrar.messenger(), registrar.context()); + } - private android.content.SharedPreferences preferences; + @SuppressLint("LongLogTag") + private void setup(BinaryMessenger messenger, Context context) { + preferences = new MethodCallHandlerImpl(context); + try { + SharedPreferencesApi.setup(messenger, this); + } catch (Exception ex) { + Log.e( + TAG, + "Received exception while setting up SharedPreferencesPlugin", + ex + ); + } + } - private void setup(BinaryMessenger messenger, Context context) { - TaskQueue taskQueue = messenger.makeBackgroundTaskQueue(); - preferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); + @Override + public void onAttachedToEngine(FlutterPlugin.FlutterPluginBinding binding) { + setup(binding.getBinaryMessenger(), binding.getApplicationContext()); + } - try { - SharedPreferencesApi.setup(messenger, this); - } catch (Exception ex) { - Log.e(TAG, "Received exception while setting up SharedPreferencesPlugin", ex); + @Override + public void onDetachedFromEngine(FlutterPlugin.FlutterPluginBinding binding) { + SharedPreferencesApi.setup(binding.getBinaryMessenger(), null); } - } - - @SuppressWarnings("deprecation") - public static void registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar) { - final SharedPreferencesPlugin plugin = new SharedPreferencesPlugin(); - plugin.setup(registrar.messenger(), registrar.context()); - } - - @Override - public void onAttachedToEngine(FlutterPlugin.FlutterPluginBinding binding) { - setup(binding.getBinaryMessenger(), binding.getApplicationContext()); - } - - @Override - public void onDetachedFromEngine(FlutterPlugin.FlutterPluginBinding binding) { - SharedPreferencesApi.setup(binding.getBinaryMessenger(), null); - } - - @Override - public Boolean setBool(String key, Boolean value) { - return preferences.edit().putBoolean(key, value).commit(); - } - - @Override - public Boolean setString(String key, String value) { - if (value.startsWith(LIST_IDENTIFIER) - || value.startsWith(BIG_INTEGER_PREFIX) - || value.startsWith(DOUBLE_PREFIX)) { - throw new RuntimeException( - "StorageError: This string cannot be stored as it clashes with special identifier prefixes"); + + @Override + public Boolean setBool(String key, Boolean value) { + return preferences.setBool(key, value); } - return preferences.edit().putString(key, value).commit(); - } - - @Override - public Boolean setInt(String key, Object value) { - Number number = (Number) value; - if (number instanceof BigInteger) { - BigInteger integerValue = (BigInteger) number; - return preferences - .edit() - .putString(key, BIG_INTEGER_PREFIX + integerValue.toString(Character.MAX_RADIX)) - .commit(); - } else { - return preferences.edit().putLong(key, number.longValue()).commit(); + + @Override + public Boolean setString(String key, String value) { + return preferences.setString(key, value); } - } - - @Override - public Boolean setDouble(String key, Double value) { - String doubleValueStr = Double.toString(value); - return preferences.edit().putString(key, DOUBLE_PREFIX + doubleValueStr).commit(); - } - - @Override - public Boolean setStringList(String key, List value) throws RuntimeException { - try { - Boolean success = - preferences.edit().putString(key, LIST_IDENTIFIER + encodeList(value)).commit(); - return success; - } catch (RuntimeException e) { - throw e; + + @Override + public Boolean setInt(String key, Object value) { + return preferences.setInt(key, value); } - } - - @Override - public Map getAll() throws RuntimeException { - try { - Map data = getAllPrefs(); - return data; - } catch (RuntimeException e) { - throw e; + + @Override + public Boolean setDouble(String key, Double value) { + return preferences.setDouble(key, value); } - } - - @Override - public Boolean remove(String key) { - return preferences.edit().remove(key).commit(); - } - - @Override - public Boolean clear() throws RuntimeException { - try { - Set keySet = getAllPrefs().keySet(); - SharedPreferences.Editor clearEditor = preferences.edit(); - for (String keyToDelete : keySet) { - clearEditor.remove(keyToDelete); - } - return clearEditor.commit(); - } catch (RuntimeException e) { - throw e; + + @Override + public Boolean remove(String key) { + return preferences.remove(key); } - } - - // Filter preferences to only those set by the flutter app. - @SuppressWarnings("unchecked") - private Map getAllPrefs() throws RuntimeException { - Map allPrefs = preferences.getAll(); - Map filteredPrefs = new HashMap<>(); - for (String key : allPrefs.keySet()) { - if (key.startsWith("flutter.")) { - Object value = allPrefs.get(key); - if (value instanceof String) { - String stringValue = (String) value; - if (stringValue.startsWith(LIST_IDENTIFIER)) { - value = decodeList(stringValue.substring(LIST_IDENTIFIER.length())); - } else if (stringValue.startsWith(BIG_INTEGER_PREFIX)) { - String encoded = stringValue.substring(BIG_INTEGER_PREFIX.length()); - value = new BigInteger(encoded, Character.MAX_RADIX); - } else if (stringValue.startsWith(DOUBLE_PREFIX)) { - String doubleStr = stringValue.substring(DOUBLE_PREFIX.length()); - value = Double.valueOf(doubleStr); - } - } else if (value instanceof Set) { - // This only happens for previous usage of setStringSet. The app expects a list. - List listValue = new ArrayList((Set) value); - // Let's migrate the value too while we are at it. - try { - preferences - .edit() - .remove(key) - .putString(key, LIST_IDENTIFIER + encodeList(listValue)) - .commit(); - } catch (RuntimeException e) { - // If we are unable to migrate the existing preferences, it means we potentially lost them. - // In this case, an error from getAllPrefs() is appropriate since it will alert the app during plugin initialization. - throw e; - } - value = listValue; - } - filteredPrefs.put(key, value); - } + + @Override + public Boolean setStringList(String key, List value) + throws RuntimeException { + return preferences.setStringList(key, value); } - return filteredPrefs; - } - - @SuppressWarnings("unchecked") - private List decodeList(String encodedList) throws RuntimeException { - ObjectInputStream stream = null; - try { - stream = new ObjectInputStream(new ByteArrayInputStream(Base64.decode(encodedList, 0))); - List data = (List) stream.readObject(); - if (stream != null) { - stream.close(); - } - - return data; - } catch (IOException | ClassNotFoundException e) { - throw new RuntimeException(e); + @Override + public Map getAll() throws RuntimeException { + return preferences.getAll(); } - } - - private String encodeList(List list) throws RuntimeException { - ObjectOutputStream stream = null; - try { - ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); - stream = new ObjectOutputStream(byteStream); - stream.writeObject(list); - stream.flush(); - String data = Base64.encodeToString(byteStream.toByteArray(), 0); - if (stream != null) { - stream.close(); - } - - return data; - } catch (IOException e) { - throw new RuntimeException(e); + + @Override + public Boolean clear() throws RuntimeException { + return preferences.clear(); } - } } diff --git a/packages/shared_preferences/shared_preferences_android/android/src/test/java/io/flutter/plugins/sharedpreferences/SharedPreferencesTest.java b/packages/shared_preferences/shared_preferences_android/android/src/test/java/io/flutter/plugins/sharedpreferences/SharedPreferencesTest.java index 13d0ff8b40c1..7d2b38f1c092 100644 --- a/packages/shared_preferences/shared_preferences_android/android/src/test/java/io/flutter/plugins/sharedpreferences/SharedPreferencesTest.java +++ b/packages/shared_preferences/shared_preferences_android/android/src/test/java/io/flutter/plugins/sharedpreferences/SharedPreferencesTest.java @@ -4,12 +4,132 @@ package io.flutter.plugins.sharedpreferences; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import androidx.annotation.NonNull; + import org.junit.Test; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +// Class Mocking SharedPreferencesAPI +class MockAPI implements Messages.SharedPreferencesApi { + + Map items = new HashMap(); + + @Override + public Boolean remove(@NonNull String key) { + items.remove(key); + return true; + } + + @Override + public Boolean setBool(@NonNull String key, @NonNull Boolean value) { + items.put(key, value); + return true; + } + + @Override + public Boolean setString(@NonNull String key, @NonNull String value) { + items.put(key, value); + return true; + } + + @Override + public Boolean setInt(@NonNull String key, @NonNull Object value) { + items.put(key, value); + return true; + } + + @Override + public Boolean setDouble(@NonNull String key, @NonNull Double value) { + items.put(key, value); + return true; + } + + @Override + public Boolean setStringList(@NonNull String key, @NonNull List value) { + items.put(key, value); + return true; + } + + @Override + public Boolean clear() { + items.clear(); + return true; + } + + @Override + public Map getAll() { + return items; + } +} + public class SharedPreferencesTest { - // This is only a placeholder test and doesn't actually initialize the plugin. - @Test - public void initPluginDoesNotThrow() { - final SharedPreferencesPlugin plugin = new SharedPreferencesPlugin(); - } + + MockAPI api = new MockAPI(); + + Map data = new HashMap() {{ + put("Language", "Java"); + put("Counter", 0); + put("Pie", 3.14); + put("Names", Arrays.asList("Flutter", "Dart")); + put("NewToFlutter", false); + }}; + + @Test + public void initPluginDoesNotThrow() { + final SharedPreferencesPlugin plugin = new SharedPreferencesPlugin(); + } + + @Test + public void testAddValues() { + assertEquals(api.getAll().size(), 0); + + addData(api); + + assertEquals(api.getAll().size(), 5); + assertEquals(api.getAll().get("Language"), "Java"); + assertEquals(api.getAll().get("Counter"), 0); + assertEquals(api.getAll().get("Pie"), 3.14); + assertEquals(api.getAll().get("Names"), Arrays.asList("Flutter", "Dart")); + assertEquals(api.getAll().get("NewToFlutter"), false); + } + + @Test + public void testGetAllData() { + assertEquals(api.getAll(), new HashMap()); + addData(api); + + assertEquals(api.getAll(), data); + } + + @Test + public void testClear() { + addData(api); + assertEquals(api.getAll().size(), 5); + api.clear(); + assertEquals(api.getAll().size(), 0); + } + + @Test + public void testRemove() { + api.setBool("isJava", true); + api.remove("isJava"); + assertFalse(api.getAll().containsKey("isJava")); + } + + public void addData(MockAPI api) { + api.setString("Language", "Java"); + api.setInt("Counter", 0); + api.setDouble("Pie", 3.14); + api.setStringList("Names", Arrays.asList("Flutter", "Dart")); + api.setBool("NewToFlutter", false); + } + + } diff --git a/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart b/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart index d5c9551ea9e9..61c6f80203da 100644 --- a/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart +++ b/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart @@ -21,7 +21,7 @@ class SharedPreferencesApi { static const MessageCodec codec = StandardMessageCodec(); - Future remove(String arg_key) async { + Future remove(String arg_key) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.SharedPreferencesApi.remove', codec, binaryMessenger: _binaryMessenger); @@ -38,12 +38,17 @@ class SharedPreferencesApi { message: replyList[1] as String?, details: replyList[2], ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); } else { - return (replyList[0] as bool?); + return (replyList[0] as bool?)!; } } - Future setBool(String arg_key, bool arg_value) async { + Future setBool(String arg_key, bool arg_value) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.SharedPreferencesApi.setBool', codec, binaryMessenger: _binaryMessenger); @@ -60,12 +65,17 @@ class SharedPreferencesApi { message: replyList[1] as String?, details: replyList[2], ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); } else { - return (replyList[0] as bool?); + return (replyList[0] as bool?)!; } } - Future setString(String arg_key, String arg_value) async { + Future setString(String arg_key, String arg_value) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.SharedPreferencesApi.setString', codec, binaryMessenger: _binaryMessenger); @@ -82,12 +92,17 @@ class SharedPreferencesApi { message: replyList[1] as String?, details: replyList[2], ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); } else { - return (replyList[0] as bool?); + return (replyList[0] as bool?)!; } } - Future setInt(String arg_key, Object arg_value) async { + Future setInt(String arg_key, Object arg_value) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.SharedPreferencesApi.setInt', codec, binaryMessenger: _binaryMessenger); @@ -104,12 +119,17 @@ class SharedPreferencesApi { message: replyList[1] as String?, details: replyList[2], ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); } else { - return (replyList[0] as bool?); + return (replyList[0] as bool?)!; } } - Future setDouble(String arg_key, double arg_value) async { + Future setDouble(String arg_key, double arg_value) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.SharedPreferencesApi.setDouble', codec, binaryMessenger: _binaryMessenger); @@ -126,12 +146,17 @@ class SharedPreferencesApi { message: replyList[1] as String?, details: replyList[2], ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); } else { - return (replyList[0] as bool?); + return (replyList[0] as bool?)!; } } - Future setStringList(String arg_key, List arg_value) async { + Future setStringList(String arg_key, List arg_value) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.SharedPreferencesApi.setStringList', codec, binaryMessenger: _binaryMessenger); @@ -148,16 +173,22 @@ class SharedPreferencesApi { message: replyList[1] as String?, details: replyList[2], ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); } else { - return (replyList[0] as bool?); + return (replyList[0] as bool?)!; } } - Future clear() async { + Future clear() async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.SharedPreferencesApi.clear', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send(null) as List?; + final List? replyList = + await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -169,8 +200,13 @@ class SharedPreferencesApi { message: replyList[1] as String?, details: replyList[2], ); + } else if (replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); } else { - return (replyList[0] as bool?); + return (replyList[0] as bool?)!; } } @@ -178,7 +214,8 @@ class SharedPreferencesApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.SharedPreferencesApi.getAll', codec, binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send(null) as List?; + final List? replyList = + await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -196,8 +233,7 @@ class SharedPreferencesApi { message: 'Host platform returned null value for non-null return value.', ); } else { - return (replyList[0] as Map?)! - .cast(); + return (replyList[0] as Map?)!.cast(); } } } diff --git a/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart b/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart index 3ac95e6d40c2..e7eee65a201e 100644 --- a/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart +++ b/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart @@ -22,17 +22,17 @@ class SharedPreferencesAndroid extends SharedPreferencesStorePlatform { @override Future remove(String key) async { - return (await _api.remove(key)) ?? false; + return _api.remove(key); } @override Future setValue(String valueType, String key, Object value) async { - return (await _handleSetValue(valueType, key, value)) ?? false; + return await _handleSetValue(valueType, key, value) ?? false; } @override Future clear() async { - return (await _api.clear()) ?? false; + return _api.clear(); } @override diff --git a/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart b/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart index cc86f4f17e25..f3b6d250fde4 100644 --- a/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart +++ b/packages/shared_preferences/shared_preferences_android/pigeons/messages.dart @@ -17,19 +17,19 @@ import 'package:pigeon/pigeon.dart'; @HostApi(dartHostTestHandler: 'TestSharedPreferencesApi') abstract class SharedPreferencesApi { @TaskQueue(type: TaskQueueType.serialBackgroundThread) - bool? remove(String key); + bool remove(String key); @TaskQueue(type: TaskQueueType.serialBackgroundThread) - bool? setBool(String key, bool value); + bool setBool(String key, bool value); @TaskQueue(type: TaskQueueType.serialBackgroundThread) - bool? setString(String key, String value); + bool setString(String key, String value); @TaskQueue(type: TaskQueueType.serialBackgroundThread) - bool? setInt(String key, Object value); + bool setInt(String key, Object value); @TaskQueue(type: TaskQueueType.serialBackgroundThread) - bool? setDouble(String key, double value); + bool setDouble(String key, double value); @TaskQueue(type: TaskQueueType.serialBackgroundThread) - bool? setStringList(String key, List value); + bool setStringList(String key, List value); @TaskQueue(type: TaskQueueType.serialBackgroundThread) - bool? clear(); + bool clear(); @TaskQueue(type: TaskQueueType.serialBackgroundThread) Map getAll(); } diff --git a/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart b/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart index de1ef22c8f35..fa8f0853daf6 100644 --- a/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart +++ b/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart @@ -16,24 +16,23 @@ import 'package:shared_preferences_android/messages.g.dart'; abstract class TestSharedPreferencesApi { static const MessageCodec codec = StandardMessageCodec(); - bool? remove(String key); + bool remove(String key); - bool? setBool(String key, bool value); + bool setBool(String key, bool value); - bool? setString(String key, String value); + bool setString(String key, String value); - bool? setInt(String key, Object value); + bool setInt(String key, Object value); - bool? setDouble(String key, double value); + bool setDouble(String key, double value); - bool? setStringList(String key, List value); + bool setStringList(String key, List value); - bool? clear(); + bool clear(); Map getAll(); - static void setup(TestSharedPreferencesApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestSharedPreferencesApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.SharedPreferencesApi.remove', codec, @@ -43,12 +42,12 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.remove was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.remove was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.remove was null, expected non-null String.'); - final bool? output = api.remove(arg_key!); + final bool output = api.remove(arg_key!); return [output]; }); } @@ -62,7 +61,7 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, @@ -70,7 +69,7 @@ abstract class TestSharedPreferencesApi { final bool? arg_value = (args[1] as bool?); assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null, expected non-null bool.'); - final bool? output = api.setBool(arg_key!, arg_value!); + final bool output = api.setBool(arg_key!, arg_value!); return [output]; }); } @@ -84,7 +83,7 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, @@ -92,7 +91,7 @@ abstract class TestSharedPreferencesApi { final String? arg_value = (args[1] as String?); assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null, expected non-null String.'); - final bool? output = api.setString(arg_key!, arg_value!); + final bool output = api.setString(arg_key!, arg_value!); return [output]; }); } @@ -106,7 +105,7 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, @@ -114,7 +113,7 @@ abstract class TestSharedPreferencesApi { final Object? arg_value = (args[1] as Object?); assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null, expected non-null Object.'); - final bool? output = api.setInt(arg_key!, arg_value!); + final bool output = api.setInt(arg_key!, arg_value!); return [output]; }); } @@ -128,7 +127,7 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, @@ -136,7 +135,7 @@ abstract class TestSharedPreferencesApi { final double? arg_value = (args[1] as double?); assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null, expected non-null double.'); - final bool? output = api.setDouble(arg_key!, arg_value!); + final bool output = api.setDouble(arg_key!, arg_value!); return [output]; }); } @@ -150,16 +149,15 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null, expected non-null String.'); - final List? arg_value = - (args[1] as List?)?.cast(); + final List? arg_value = (args[1] as List?)?.cast(); assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null, expected non-null List.'); - final bool? output = api.setStringList(arg_key!, arg_value!); + final bool output = api.setStringList(arg_key!, arg_value!); return [output]; }); } @@ -173,7 +171,7 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { // ignore message - final bool? output = api.clear(); + final bool output = api.clear(); return [output]; }); } diff --git a/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart b/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart index 28b9e1b792ba..c260c2817a48 100644 --- a/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart +++ b/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart @@ -15,7 +15,7 @@ class _MockAPI extends TestSharedPreferencesApi { final Map items = {}; @override - bool? clear() { + bool clear() { items.clear(); return true; } @@ -26,37 +26,37 @@ class _MockAPI extends TestSharedPreferencesApi { } @override - bool? remove(String key) { + bool remove(String key) { items.remove(key); return true; } @override - bool? setBool(String key, bool value) { + bool setBool(String key, bool value) { items[key] = value; return true; } @override - bool? setDouble(String key, double value) { + bool setDouble(String key, double value) { items[key] = value; return true; } @override - bool? setInt(String key, Object value) { + bool setInt(String key, Object value) { items[key] = value; return true; } @override - bool? setString(String key, String value) { + bool setString(String key, String value) { items[key] = value; return true; } @override - bool? setStringList(String key, List value) { + bool setStringList(String key, List value) { items[key] = value; return true; } From 4ae807959c5131ba89800a63d3279dfddf04c8cd Mon Sep 17 00:00:00 2001 From: amannegi Date: Wed, 25 Jan 2023 17:15:48 +0530 Subject: [PATCH 10/16] [shared_preferences] Formatted Code using the format command --- .../MainActivityTest.java | 7 +++++-- .../lib/messages.g.dart | 9 ++++----- .../test/messages_test.g.dart | 18 ++++++++++-------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java b/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java index 304ee4c33326..6fe4a4d5ef27 100644 --- a/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java +++ b/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java @@ -1,4 +1,4 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. +// Copyright 2011 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -14,6 +14,9 @@ @DartIntegrationTest @RunWith(FlutterTestRunner.class) public class MainActivityTest { + @Rule - public ActivityTestRule rule = new ActivityTestRule<>(FlutterActivity.class); + public ActivityTestRule rule = new ActivityTestRule<>( + FlutterActivity.class + ); } diff --git a/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart b/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart index 61c6f80203da..592304f9f8d3 100644 --- a/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart +++ b/packages/shared_preferences/shared_preferences_android/lib/messages.g.dart @@ -187,8 +187,7 @@ class SharedPreferencesApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.SharedPreferencesApi.clear', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -214,8 +213,7 @@ class SharedPreferencesApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.SharedPreferencesApi.getAll', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send(null) as List?; + final List? replyList = await channel.send(null) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -233,7 +231,8 @@ class SharedPreferencesApi { message: 'Host platform returned null value for non-null return value.', ); } else { - return (replyList[0] as Map?)!.cast(); + return (replyList[0] as Map?)! + .cast(); } } } diff --git a/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart b/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart index fa8f0853daf6..9a300592503b 100644 --- a/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart +++ b/packages/shared_preferences/shared_preferences_android/test/messages_test.g.dart @@ -32,7 +32,8 @@ abstract class TestSharedPreferencesApi { Map getAll(); - static void setup(TestSharedPreferencesApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestSharedPreferencesApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.SharedPreferencesApi.remove', codec, @@ -42,7 +43,7 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.remove was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.remove was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, @@ -61,7 +62,7 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setBool was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, @@ -83,7 +84,7 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setString was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, @@ -105,7 +106,7 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setInt was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, @@ -127,7 +128,7 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setDouble was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, @@ -149,12 +150,13 @@ abstract class TestSharedPreferencesApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null.'); + 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null.'); final List args = (message as List?)!; final String? arg_key = (args[0] as String?); assert(arg_key != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null, expected non-null String.'); - final List? arg_value = (args[1] as List?)?.cast(); + final List? arg_value = + (args[1] as List?)?.cast(); assert(arg_value != null, 'Argument for dev.flutter.pigeon.SharedPreferencesApi.setStringList was null, expected non-null List.'); final bool output = api.setStringList(arg_key!, arg_value!); From 4ded5c08d1a4c2211954a33464a1d42da0adb6c5 Mon Sep 17 00:00:00 2001 From: amannegi Date: Wed, 25 Jan 2023 17:40:08 +0530 Subject: [PATCH 11/16] [shared_preferences] Formatted Code --- .../sharedpreferencesexample/MainActivityTest.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java b/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java index 6fe4a4d5ef27..7c569d8cae65 100644 --- a/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java +++ b/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java @@ -5,18 +5,20 @@ package io.flutter.plugins.sharedpreferences; import androidx.test.rule.ActivityTestRule; + +import org.junit.Rule; +import org.junit.runner.RunWith; + import dev.flutter.plugins.integration_test.FlutterTestRunner; import io.flutter.embedding.android.FlutterActivity; import io.flutter.plugins.DartIntegrationTest; -import org.junit.Rule; -import org.junit.runner.RunWith; @DartIntegrationTest @RunWith(FlutterTestRunner.class) public class MainActivityTest { - @Rule - public ActivityTestRule rule = new ActivityTestRule<>( - FlutterActivity.class - ); + @Rule + public ActivityTestRule rule = new ActivityTestRule<>( + FlutterActivity.class + ); } From 19d61cbd0822bd5bec6dcf05da5b119e840ce510 Mon Sep 17 00:00:00 2001 From: amannegi Date: Wed, 25 Jan 2023 18:15:04 +0530 Subject: [PATCH 12/16] [shared_preferences] Restored error causing file --- .../MainActivityTest.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java b/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java index 7c569d8cae65..e20e7356a8ab 100644 --- a/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java +++ b/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java @@ -1,24 +1,19 @@ -// Copyright 2011 The Flutter Authors. All rights reserved. +// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package io.flutter.plugins.sharedpreferences; import androidx.test.rule.ActivityTestRule; - -import org.junit.Rule; -import org.junit.runner.RunWith; - import dev.flutter.plugins.integration_test.FlutterTestRunner; import io.flutter.embedding.android.FlutterActivity; import io.flutter.plugins.DartIntegrationTest; +import org.junit.Rule; +import org.junit.runner.RunWith; @DartIntegrationTest @RunWith(FlutterTestRunner.class) public class MainActivityTest { - - @Rule - public ActivityTestRule rule = new ActivityTestRule<>( - FlutterActivity.class - ); -} + @Rule + public ActivityTestRule rule = new ActivityTestRule<>(FlutterActivity.class); +} \ No newline at end of file From 7a2c7d4b4d4cfd3497faa5f78464629614a198ac Mon Sep 17 00:00:00 2001 From: amannegi Date: Wed, 25 Jan 2023 22:57:31 +0530 Subject: [PATCH 13/16] [shared_preferences] Fixed all Formatting errors --- .../shared_preferences_android/CHANGELOG.md | 28 +- .../plugins/sharedpreferences/Messages.java | 560 +++++++++--------- .../MethodCallHandlerImpl.java | 292 +++++---- .../SharedPreferencesPlugin.java | 158 +++-- .../SharedPreferencesTest.java | 223 ++++--- .../MainActivityTest.java | 2 +- 6 files changed, 620 insertions(+), 643 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md index c2b20067154a..2281fcd25bbf 100644 --- a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md @@ -1,42 +1,42 @@ -## NEXT +## 2.0.16 -* Updates minimum Flutter version to 3.0. +- Converts `SharedPreferencesAndroid` to Pigeon. -## 2.0.16 +## NEXT -* Converts `SharedPreferencesAndroid` to Pigeon. +- Updates minimum Flutter version to 3.0. ## 2.0.15 -* Updates code for stricter lint checks. +- Updates code for stricter lint checks. ## 2.0.14 -* Fixes typo in `SharedPreferencesAndroid` docs. -* Updates code for `no_leading_underscores_for_local_identifiers` lint. +- Fixes typo in `SharedPreferencesAndroid` docs. +- Updates code for `no_leading_underscores_for_local_identifiers` lint. ## 2.0.13 -* Updates gradle to 7.2.2. -* Updates minimum Flutter version to 2.10. +- Updates gradle to 7.2.2. +- Updates minimum Flutter version to 2.10. ## 2.0.12 -* Fixes library_private_types_in_public_api, sort_child_properties_last and use_key_in_widget_constructors +- Fixes library_private_types_in_public_api, sort_child_properties_last and use_key_in_widget_constructors lint warnings. ## 2.0.11 -* Switches to an in-package method channel implementation. +- Switches to an in-package method channel implementation. ## 2.0.10 -* Removes dependency on `meta`. +- Removes dependency on `meta`. ## 2.0.9 -* Updates compileSdkVersion to 31. +- Updates compileSdkVersion to 31. ## 2.0.8 -* Split from `shared_preferences` as a federated implementation. +- Split from `shared_preferences` as a federated implementation. diff --git a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java index 6cff34c0b1b0..ab1b359e27a2 100644 --- a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java +++ b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/Messages.java @@ -7,305 +7,321 @@ package io.flutter.plugins.sharedpreferences; import android.util.Log; - import androidx.annotation.NonNull; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - 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.util.ArrayList; +import java.util.List; +import java.util.Map; -/** - * Generated class from Pigeon. - */ +/** Generated class from Pigeon. */ @SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"}) public class Messages { - @NonNull - private static ArrayList wrapError(@NonNull Throwable exception) { - ArrayList errorList = new ArrayList<>(3); - errorList.add(exception.toString()); - errorList.add(exception.getClass().getSimpleName()); - errorList.add( - "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); - return errorList; + @NonNull + private static ArrayList wrapError(@NonNull Throwable exception) { + ArrayList errorList = new ArrayList<>(3); + errorList.add(exception.toString()); + errorList.add(exception.getClass().getSimpleName()); + errorList.add( + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + return errorList; + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface SharedPreferencesApi { + + /** The codec used by SharedPreferencesApi. */ + static MessageCodec getCodec() { + return new StandardMessageCodec(); } /** - * Generated interface from Pigeon that represents a handler of messages from Flutter. + * Sets up an instance of `SharedPreferencesApi` to handle messages through the + * `binaryMessenger`. */ - public interface SharedPreferencesApi { - - /** - * The codec used by SharedPreferencesApi. - */ - static MessageCodec getCodec() { - return new StandardMessageCodec(); - } - - /** - * Sets up an instance of `SharedPreferencesApi` to handle messages through the `binaryMessenger`. - */ - static void setup(BinaryMessenger binaryMessenger, SharedPreferencesApi api) { - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.remove", getCodec(), taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Boolean output = api.remove(keyArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); + static void setup(BinaryMessenger binaryMessenger, SharedPreferencesApi api) { + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.remove", + getCodec(), + taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Boolean output = api.remove(keyArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; } - } - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setBool", getCodec(), taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Boolean valueArg = (Boolean) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setBool(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.setBool", + getCodec(), + taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Boolean valueArg = (Boolean) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setBool(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; } - } - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setString", getCodec(), taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - String valueArg = (String) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setString(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.setString", + getCodec(), + taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + String valueArg = (String) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setString(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; } - } - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setInt", getCodec(), taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Object valueArg = args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setInt(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.setInt", + getCodec(), + taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Object valueArg = args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setInt(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; } - } - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setDouble", getCodec(), taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - Double valueArg = (Double) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setDouble(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.setDouble", + getCodec(), + taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + Double valueArg = (Double) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setDouble(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; } - } - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.setStringList", getCodec(), taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - ArrayList args = (ArrayList) message; - assert args != null; - String keyArg = (String) args.get(0); - if (keyArg == null) { - throw new NullPointerException("keyArg unexpectedly null."); - } - List valueArg = (List) args.get(1); - if (valueArg == null) { - throw new NullPointerException("valueArg unexpectedly null."); - } - Boolean output = api.setStringList(keyArg, valueArg); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.setStringList", + getCodec(), + taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + ArrayList args = (ArrayList) message; + assert args != null; + String keyArg = (String) args.get(0); + if (keyArg == null) { + throw new NullPointerException("keyArg unexpectedly null."); + } + List valueArg = (List) args.get(1); + if (valueArg == null) { + throw new NullPointerException("valueArg unexpectedly null."); + } + Boolean output = api.setStringList(keyArg, valueArg); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; } - } - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.clear", getCodec(), taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - Boolean output = api.clear(); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.clear", + getCodec(), + taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + Boolean output = api.clear(); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; } - } - { - BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); - BasicMessageChannel channel = - new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.SharedPreferencesApi.getAll", getCodec(), taskQueue); - if (api != null) { - channel.setMessageHandler( - (message, reply) -> { - ArrayList wrapped = new ArrayList<>(); - try { - Map output = api.getAll(); - wrapped.add(0, output); - } catch (Error | RuntimeException exception) { - ArrayList wrappedError = wrapError(exception); - wrapped = wrappedError; - } - reply.reply(wrapped); - }); - } else { - channel.setMessageHandler(null); + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BinaryMessenger.TaskQueue taskQueue = binaryMessenger.makeBackgroundTaskQueue(); + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.SharedPreferencesApi.getAll", + getCodec(), + taskQueue); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + try { + Map output = api.getAll(); + wrapped.add(0, output); + } catch (Error | RuntimeException exception) { + ArrayList wrappedError = wrapError(exception); + wrapped = wrappedError; } - } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); } + } + } - @NonNull - Boolean remove(@NonNull String key); + @NonNull + Boolean remove(@NonNull String key); - @NonNull - Boolean setBool(@NonNull String key, @NonNull Boolean value); + @NonNull + Boolean setBool(@NonNull String key, @NonNull Boolean value); - @NonNull - Boolean setString(@NonNull String key, @NonNull String value); + @NonNull + Boolean setString(@NonNull String key, @NonNull String value); - @NonNull - Boolean setInt(@NonNull String key, @NonNull Object value); + @NonNull + Boolean setInt(@NonNull String key, @NonNull Object value); - @NonNull - Boolean setDouble(@NonNull String key, @NonNull Double value); + @NonNull + Boolean setDouble(@NonNull String key, @NonNull Double value); - @NonNull - Boolean setStringList(@NonNull String key, @NonNull List value); + @NonNull + Boolean setStringList(@NonNull String key, @NonNull List value); - @NonNull - Boolean clear(); + @NonNull + Boolean clear(); - @NonNull - Map getAll(); - } + @NonNull + Map getAll(); + } } diff --git a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java index b13dc2a6e746..69dc6d09fdf4 100644 --- a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java +++ b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java @@ -7,7 +7,6 @@ import android.content.Context; import android.content.SharedPreferences; import android.util.Base64; - import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -20,180 +19,155 @@ import java.util.Map; import java.util.Set; -/** - * Helper class to save data to `android.content.SharedPreferences` - */ +/** Helper class to save data to `android.content.SharedPreferences` */ // Rename class and file to match it's purpose, preferably SharedPreferencesHelper @SuppressWarnings("unchecked") class MethodCallHandlerImpl { - private static final String SHARED_PREFERENCES_NAME = - "FlutterSharedPreferences"; - - // Fun fact: The following is a base64 encoding of the string "This is the prefix for a list." - private static final String LIST_IDENTIFIER = - "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu"; - private static final String BIG_INTEGER_PREFIX = - "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBCaWdJbnRlZ2Vy"; - private static final String DOUBLE_PREFIX = - "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBEb3VibGUu"; - - private final android.content.SharedPreferences preferences; - - MethodCallHandlerImpl(Context context) { - preferences = - context.getSharedPreferences( - SHARED_PREFERENCES_NAME, - Context.MODE_PRIVATE - ); - } - - public Boolean setBool(String key, Boolean value) { - return preferences.edit().putBoolean(key, value).commit(); - } + private static final String SHARED_PREFERENCES_NAME = "FlutterSharedPreferences"; - public Boolean setString(String key, String value) { - if ( - value.startsWith(LIST_IDENTIFIER) || - value.startsWith(BIG_INTEGER_PREFIX) || - value.startsWith(DOUBLE_PREFIX) - ) { - throw new RuntimeException( - "StorageError: This string cannot be stored as it clashes with special identifier prefixes" - ); - } - return preferences.edit().putString(key, value).commit(); - } + // Fun fact: The following is a base64 encoding of the string "This is the prefix for a list." + private static final String LIST_IDENTIFIER = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu"; + private static final String BIG_INTEGER_PREFIX = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBCaWdJbnRlZ2Vy"; + private static final String DOUBLE_PREFIX = "VGhpcyBpcyB0aGUgcHJlZml4IGZvciBEb3VibGUu"; - public Boolean setInt(String key, Object value) { - Number number = (Number) value; - if (number instanceof BigInteger) { - BigInteger integerValue = (BigInteger) number; - return preferences - .edit() - .putString( - key, - BIG_INTEGER_PREFIX + integerValue.toString(Character.MAX_RADIX) - ) - .commit(); - } else { - return preferences.edit().putLong(key, number.longValue()).commit(); - } - } + private final android.content.SharedPreferences preferences; - public Boolean setDouble(String key, Double value) { - String doubleValueStr = Double.toString(value); - return preferences - .edit() - .putString(key, DOUBLE_PREFIX + doubleValueStr) - .commit(); - } + MethodCallHandlerImpl(Context context) { + preferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); + } - public Boolean setStringList(String key, List value) - throws RuntimeException { - Boolean success = preferences - .edit() - .putString(key, LIST_IDENTIFIER + encodeList(value)) - .commit(); - return success; - } + public Boolean setBool(String key, Boolean value) { + return preferences.edit().putBoolean(key, value).commit(); + } - public Map getAll() throws RuntimeException { - Map data = getAllPrefs(); - return data; + public Boolean setString(String key, String value) { + if (value.startsWith(LIST_IDENTIFIER) + || value.startsWith(BIG_INTEGER_PREFIX) + || value.startsWith(DOUBLE_PREFIX)) { + throw new RuntimeException( + "StorageError: This string cannot be stored as it clashes with special identifier prefixes"); } - - public Boolean remove(String key) { - return preferences.edit().remove(key).commit(); + return preferences.edit().putString(key, value).commit(); + } + + public Boolean setInt(String key, Object value) { + Number number = (Number) value; + if (number instanceof BigInteger) { + BigInteger integerValue = (BigInteger) number; + return preferences + .edit() + .putString(key, BIG_INTEGER_PREFIX + integerValue.toString(Character.MAX_RADIX)) + .commit(); + } else { + return preferences.edit().putLong(key, number.longValue()).commit(); } - - public Boolean clear() throws RuntimeException { - Set keySet = getAllPrefs().keySet(); - SharedPreferences.Editor clearEditor = preferences.edit(); - for (String keyToDelete : keySet) { - clearEditor.remove(keyToDelete); - } - return clearEditor.commit(); + } + + public Boolean setDouble(String key, Double value) { + String doubleValueStr = Double.toString(value); + return preferences.edit().putString(key, DOUBLE_PREFIX + doubleValueStr).commit(); + } + + public Boolean setStringList(String key, List value) throws RuntimeException { + Boolean success = + preferences.edit().putString(key, LIST_IDENTIFIER + encodeList(value)).commit(); + return success; + } + + public Map getAll() throws RuntimeException { + Map data = getAllPrefs(); + return data; + } + + public Boolean remove(String key) { + return preferences.edit().remove(key).commit(); + } + + public Boolean clear() throws RuntimeException { + Set keySet = getAllPrefs().keySet(); + SharedPreferences.Editor clearEditor = preferences.edit(); + for (String keyToDelete : keySet) { + clearEditor.remove(keyToDelete); } - - // Filter preferences to only those set by the flutter app. - @SuppressWarnings("unchecked") - private Map getAllPrefs() throws RuntimeException { - Map allPrefs = preferences.getAll(); - Map filteredPrefs = new HashMap<>(); - for (String key : allPrefs.keySet()) { - if (key.startsWith("flutter.")) { - Object value = allPrefs.get(key); - if (value instanceof String) { - String stringValue = (String) value; - if (stringValue.startsWith(LIST_IDENTIFIER)) { - value = decodeList(stringValue.substring(LIST_IDENTIFIER.length())); - } else if (stringValue.startsWith(BIG_INTEGER_PREFIX)) { - String encoded = stringValue.substring(BIG_INTEGER_PREFIX.length()); - value = new BigInteger(encoded, Character.MAX_RADIX); - } else if (stringValue.startsWith(DOUBLE_PREFIX)) { - String doubleStr = stringValue.substring(DOUBLE_PREFIX.length()); - value = Double.valueOf(doubleStr); - } - } else if (value instanceof Set) { - // This only happens for previous usage of setStringSet. The app expects a list. - List listValue = new ArrayList((Set) value); - // Let's migrate the value too while we are at it. - try { - preferences - .edit() - .remove(key) - .putString(key, LIST_IDENTIFIER + encodeList(listValue)) - .commit(); - } catch (RuntimeException e) { - // If we are unable to migrate the existing preferences, it means we potentially lost them. - // In this case, an error from getAllPrefs() is appropriate since it will alert the app during plugin initialization. - throw e; - } - value = listValue; - } - filteredPrefs.put(key, value); - } + return clearEditor.commit(); + } + + // Filter preferences to only those set by the flutter app. + @SuppressWarnings("unchecked") + private Map getAllPrefs() throws RuntimeException { + Map allPrefs = preferences.getAll(); + Map filteredPrefs = new HashMap<>(); + for (String key : allPrefs.keySet()) { + if (key.startsWith("flutter.")) { + Object value = allPrefs.get(key); + if (value instanceof String) { + String stringValue = (String) value; + if (stringValue.startsWith(LIST_IDENTIFIER)) { + value = decodeList(stringValue.substring(LIST_IDENTIFIER.length())); + } else if (stringValue.startsWith(BIG_INTEGER_PREFIX)) { + String encoded = stringValue.substring(BIG_INTEGER_PREFIX.length()); + value = new BigInteger(encoded, Character.MAX_RADIX); + } else if (stringValue.startsWith(DOUBLE_PREFIX)) { + String doubleStr = stringValue.substring(DOUBLE_PREFIX.length()); + value = Double.valueOf(doubleStr); + } + } else if (value instanceof Set) { + // This only happens for previous usage of setStringSet. The app expects a list. + List listValue = new ArrayList((Set) value); + // Let's migrate the value too while we are at it. + try { + preferences + .edit() + .remove(key) + .putString(key, LIST_IDENTIFIER + encodeList(listValue)) + .commit(); + } catch (RuntimeException e) { + // If we are unable to migrate the existing preferences, it means we potentially lost them. + // In this case, an error from getAllPrefs() is appropriate since it will alert the app during plugin initialization. + throw e; + } + value = listValue; } - - return filteredPrefs; + filteredPrefs.put(key, value); + } } - @SuppressWarnings("unchecked") - private List decodeList(String encodedList) throws RuntimeException { - ObjectInputStream stream = null; - try { - stream = - new ObjectInputStream( - new ByteArrayInputStream(Base64.decode(encodedList, 0)) - ); - List data = (List) stream.readObject(); - if (stream != null) { - stream.close(); - } - - return data; - } catch (IOException | ClassNotFoundException e) { - throw new RuntimeException(e); - } + return filteredPrefs; + } + + @SuppressWarnings("unchecked") + private List decodeList(String encodedList) throws RuntimeException { + ObjectInputStream stream = null; + try { + stream = new ObjectInputStream(new ByteArrayInputStream(Base64.decode(encodedList, 0))); + List data = (List) stream.readObject(); + if (stream != null) { + stream.close(); + } + + return data; + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); } - - private String encodeList(List list) throws RuntimeException { - ObjectOutputStream stream = null; - try { - ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); - stream = new ObjectOutputStream(byteStream); - stream.writeObject(list); - stream.flush(); - String data = Base64.encodeToString(byteStream.toByteArray(), 0); - if (stream != null) { - stream.close(); - } - - return data; - } catch (IOException e) { - throw new RuntimeException(e); - } + } + + private String encodeList(List list) throws RuntimeException { + ObjectOutputStream stream = null; + try { + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + stream = new ObjectOutputStream(byteStream); + stream.writeObject(list); + stream.flush(); + String data = Base64.encodeToString(byteStream.toByteArray(), 0); + if (stream != null) { + stream.close(); + } + + return data; + } catch (IOException e) { + throw new RuntimeException(e); } + } } diff --git a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java index b2e3c42859e9..dc1a0139f76c 100644 --- a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java +++ b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java @@ -7,94 +7,82 @@ import android.annotation.SuppressLint; import android.content.Context; import android.util.Log; - -import java.util.List; -import java.util.Map; - import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.sharedpreferences.Messages.SharedPreferencesApi; +import java.util.List; +import java.util.Map; -/** - * SharedPreferencesPlugin - */ -public class SharedPreferencesPlugin - implements FlutterPlugin, SharedPreferencesApi { - final String TAG = "SharedPreferencesPlugin.java"; - - // SharedPreferences Helper Object, exposes SharedPreferences methods - private MethodCallHandlerImpl preferences; - - @SuppressWarnings("deprecation") - public static void registerWith( - io.flutter.plugin.common.PluginRegistry.Registrar registrar - ) { - final SharedPreferencesPlugin plugin = new SharedPreferencesPlugin(); - plugin.setup(registrar.messenger(), registrar.context()); - } - - @SuppressLint("LongLogTag") - private void setup(BinaryMessenger messenger, Context context) { - preferences = new MethodCallHandlerImpl(context); - try { - SharedPreferencesApi.setup(messenger, this); - } catch (Exception ex) { - Log.e( - TAG, - "Received exception while setting up SharedPreferencesPlugin", - ex - ); - } - } - - @Override - public void onAttachedToEngine(FlutterPlugin.FlutterPluginBinding binding) { - setup(binding.getBinaryMessenger(), binding.getApplicationContext()); - } - - @Override - public void onDetachedFromEngine(FlutterPlugin.FlutterPluginBinding binding) { - SharedPreferencesApi.setup(binding.getBinaryMessenger(), null); - } - - @Override - public Boolean setBool(String key, Boolean value) { - return preferences.setBool(key, value); - } - - @Override - public Boolean setString(String key, String value) { - return preferences.setString(key, value); - } - - @Override - public Boolean setInt(String key, Object value) { - return preferences.setInt(key, value); - } - - @Override - public Boolean setDouble(String key, Double value) { - return preferences.setDouble(key, value); - } - - @Override - public Boolean remove(String key) { - return preferences.remove(key); - } - - @Override - public Boolean setStringList(String key, List value) - throws RuntimeException { - return preferences.setStringList(key, value); - } - - @Override - public Map getAll() throws RuntimeException { - return preferences.getAll(); - } - - @Override - public Boolean clear() throws RuntimeException { - return preferences.clear(); +/** SharedPreferencesPlugin */ +public class SharedPreferencesPlugin implements FlutterPlugin, SharedPreferencesApi { + final String TAG = "SharedPreferencesPlugin.java"; + + // SharedPreferences Helper Object, exposes SharedPreferences methods + private MethodCallHandlerImpl preferences; + + @SuppressWarnings("deprecation") + public static void registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar) { + final SharedPreferencesPlugin plugin = new SharedPreferencesPlugin(); + plugin.setup(registrar.messenger(), registrar.context()); + } + + @SuppressLint("LongLogTag") + private void setup(BinaryMessenger messenger, Context context) { + preferences = new MethodCallHandlerImpl(context); + try { + SharedPreferencesApi.setup(messenger, this); + } catch (Exception ex) { + Log.e(TAG, "Received exception while setting up SharedPreferencesPlugin", ex); } + } + + @Override + public void onAttachedToEngine(FlutterPlugin.FlutterPluginBinding binding) { + setup(binding.getBinaryMessenger(), binding.getApplicationContext()); + } + + @Override + public void onDetachedFromEngine(FlutterPlugin.FlutterPluginBinding binding) { + SharedPreferencesApi.setup(binding.getBinaryMessenger(), null); + } + + @Override + public Boolean setBool(String key, Boolean value) { + return preferences.setBool(key, value); + } + + @Override + public Boolean setString(String key, String value) { + return preferences.setString(key, value); + } + + @Override + public Boolean setInt(String key, Object value) { + return preferences.setInt(key, value); + } + + @Override + public Boolean setDouble(String key, Double value) { + return preferences.setDouble(key, value); + } + + @Override + public Boolean remove(String key) { + return preferences.remove(key); + } + + @Override + public Boolean setStringList(String key, List value) throws RuntimeException { + return preferences.setStringList(key, value); + } + + @Override + public Map getAll() throws RuntimeException { + return preferences.getAll(); + } + + @Override + public Boolean clear() throws RuntimeException { + return preferences.clear(); + } } diff --git a/packages/shared_preferences/shared_preferences_android/android/src/test/java/io/flutter/plugins/sharedpreferences/SharedPreferencesTest.java b/packages/shared_preferences/shared_preferences_android/android/src/test/java/io/flutter/plugins/sharedpreferences/SharedPreferencesTest.java index 7d2b38f1c092..ed61902274ed 100644 --- a/packages/shared_preferences/shared_preferences_android/android/src/test/java/io/flutter/plugins/sharedpreferences/SharedPreferencesTest.java +++ b/packages/shared_preferences/shared_preferences_android/android/src/test/java/io/flutter/plugins/sharedpreferences/SharedPreferencesTest.java @@ -8,128 +8,127 @@ import static org.junit.Assert.assertFalse; import androidx.annotation.NonNull; - -import org.junit.Test; - import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.junit.Test; // Class Mocking SharedPreferencesAPI class MockAPI implements Messages.SharedPreferencesApi { - Map items = new HashMap(); - - @Override - public Boolean remove(@NonNull String key) { - items.remove(key); - return true; - } - - @Override - public Boolean setBool(@NonNull String key, @NonNull Boolean value) { - items.put(key, value); - return true; - } - - @Override - public Boolean setString(@NonNull String key, @NonNull String value) { - items.put(key, value); - return true; - } - - @Override - public Boolean setInt(@NonNull String key, @NonNull Object value) { - items.put(key, value); - return true; - } - - @Override - public Boolean setDouble(@NonNull String key, @NonNull Double value) { - items.put(key, value); - return true; - } - - @Override - public Boolean setStringList(@NonNull String key, @NonNull List value) { - items.put(key, value); - return true; - } - - @Override - public Boolean clear() { - items.clear(); - return true; - } - - @Override - public Map getAll() { - return items; - } + Map items = new HashMap(); + + @Override + public Boolean remove(@NonNull String key) { + items.remove(key); + return true; + } + + @Override + public Boolean setBool(@NonNull String key, @NonNull Boolean value) { + items.put(key, value); + return true; + } + + @Override + public Boolean setString(@NonNull String key, @NonNull String value) { + items.put(key, value); + return true; + } + + @Override + public Boolean setInt(@NonNull String key, @NonNull Object value) { + items.put(key, value); + return true; + } + + @Override + public Boolean setDouble(@NonNull String key, @NonNull Double value) { + items.put(key, value); + return true; + } + + @Override + public Boolean setStringList(@NonNull String key, @NonNull List value) { + items.put(key, value); + return true; + } + + @Override + public Boolean clear() { + items.clear(); + return true; + } + + @Override + public Map getAll() { + return items; + } } public class SharedPreferencesTest { - MockAPI api = new MockAPI(); - - Map data = new HashMap() {{ - put("Language", "Java"); - put("Counter", 0); - put("Pie", 3.14); - put("Names", Arrays.asList("Flutter", "Dart")); - put("NewToFlutter", false); - }}; - - @Test - public void initPluginDoesNotThrow() { - final SharedPreferencesPlugin plugin = new SharedPreferencesPlugin(); - } - - @Test - public void testAddValues() { - assertEquals(api.getAll().size(), 0); - - addData(api); - - assertEquals(api.getAll().size(), 5); - assertEquals(api.getAll().get("Language"), "Java"); - assertEquals(api.getAll().get("Counter"), 0); - assertEquals(api.getAll().get("Pie"), 3.14); - assertEquals(api.getAll().get("Names"), Arrays.asList("Flutter", "Dart")); - assertEquals(api.getAll().get("NewToFlutter"), false); - } - - @Test - public void testGetAllData() { - assertEquals(api.getAll(), new HashMap()); - addData(api); - - assertEquals(api.getAll(), data); - } - - @Test - public void testClear() { - addData(api); - assertEquals(api.getAll().size(), 5); - api.clear(); - assertEquals(api.getAll().size(), 0); - } - - @Test - public void testRemove() { - api.setBool("isJava", true); - api.remove("isJava"); - assertFalse(api.getAll().containsKey("isJava")); - } - - public void addData(MockAPI api) { - api.setString("Language", "Java"); - api.setInt("Counter", 0); - api.setDouble("Pie", 3.14); - api.setStringList("Names", Arrays.asList("Flutter", "Dart")); - api.setBool("NewToFlutter", false); - } - - + MockAPI api = new MockAPI(); + + Map data = + new HashMap() { + { + put("Language", "Java"); + put("Counter", 0); + put("Pie", 3.14); + put("Names", Arrays.asList("Flutter", "Dart")); + put("NewToFlutter", false); + } + }; + + @Test + public void initPluginDoesNotThrow() { + final SharedPreferencesPlugin plugin = new SharedPreferencesPlugin(); + } + + @Test + public void testAddValues() { + assertEquals(api.getAll().size(), 0); + + addData(api); + + assertEquals(api.getAll().size(), 5); + assertEquals(api.getAll().get("Language"), "Java"); + assertEquals(api.getAll().get("Counter"), 0); + assertEquals(api.getAll().get("Pie"), 3.14); + assertEquals(api.getAll().get("Names"), Arrays.asList("Flutter", "Dart")); + assertEquals(api.getAll().get("NewToFlutter"), false); + } + + @Test + public void testGetAllData() { + assertEquals(api.getAll(), new HashMap()); + addData(api); + + assertEquals(api.getAll(), data); + } + + @Test + public void testClear() { + addData(api); + assertEquals(api.getAll().size(), 5); + api.clear(); + assertEquals(api.getAll().size(), 0); + } + + @Test + public void testRemove() { + api.setBool("isJava", true); + api.remove("isJava"); + assertFalse(api.getAll().containsKey("isJava")); + } + + public void addData(MockAPI api) { + api.setString("Language", "Java"); + api.setInt("Counter", 0); + api.setDouble("Pie", 3.14); + api.setStringList("Names", Arrays.asList("Flutter", "Dart")); + api.setBool("NewToFlutter", false); + } } diff --git a/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java b/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java index e20e7356a8ab..304ee4c33326 100644 --- a/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java +++ b/packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java @@ -16,4 +16,4 @@ public class MainActivityTest { @Rule public ActivityTestRule rule = new ActivityTestRule<>(FlutterActivity.class); -} \ No newline at end of file +} From 2b62b5f7d9beafccef8bf50675c5f5ee2f8c982d Mon Sep 17 00:00:00 2001 From: amannegi Date: Wed, 25 Jan 2023 23:08:10 +0530 Subject: [PATCH 14/16] [shared_preferences] Updated the release Notes --- .../shared_preferences_android/CHANGELOG.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md index 2281fcd25bbf..143e5b713da7 100644 --- a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md @@ -1,10 +1,7 @@ ## 2.0.16 -- Converts `SharedPreferencesAndroid` to Pigeon. - -## NEXT - - Updates minimum Flutter version to 3.0. +- Converts `SharedPreferencesAndroid` to Pigeon. ## 2.0.15 From 40614ee7a24a8ea596987bbe5659f93897cfa694 Mon Sep 17 00:00:00 2001 From: amannegi Date: Wed, 25 Jan 2023 23:35:05 +0530 Subject: [PATCH 15/16] [shared_preferences] Fixed the AUTHORS file --- packages/shared_preferences/shared_preferences_android/AUTHORS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared_preferences/shared_preferences_android/AUTHORS b/packages/shared_preferences/shared_preferences_android/AUTHORS index c1c25f874403..493a0b4ef9c2 100644 --- a/packages/shared_preferences/shared_preferences_android/AUTHORS +++ b/packages/shared_preferences/shared_preferences_android/AUTHORS @@ -63,4 +63,4 @@ Juan Alvarez Aleksandr Yurkovskiy Anton Borries Alex Li -Rahul Raj <64.rahulraj@gmail.com> \ No newline at end of file +Rahul Raj <64.rahulraj@gmail.com> From 9290ed15f14113ad01df2b76a6096276a05f611e Mon Sep 17 00:00:00 2001 From: amannegi Date: Thu, 26 Jan 2023 09:13:44 +0530 Subject: [PATCH 16/16] [shared_preferences] Fixed Linter Formatting Issue in CHANGELOG.md --- .../shared_preferences_android/CHANGELOG.md | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md index 143e5b713da7..c3b4ce33e52b 100644 --- a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md @@ -1,39 +1,39 @@ -## 2.0.16 +## 2.0.16 -- Updates minimum Flutter version to 3.0. -- Converts `SharedPreferencesAndroid` to Pigeon. +* Updates minimum Flutter version to 3.0. +* Converts `SharedPreferencesAndroid` to Pigeon. ## 2.0.15 -- Updates code for stricter lint checks. +* Updates code for stricter lint checks. ## 2.0.14 -- Fixes typo in `SharedPreferencesAndroid` docs. -- Updates code for `no_leading_underscores_for_local_identifiers` lint. +* Fixes typo in `SharedPreferencesAndroid` docs. +* Updates code for `no_leading_underscores_for_local_identifiers` lint. ## 2.0.13 -- Updates gradle to 7.2.2. -- Updates minimum Flutter version to 2.10. +* Updates gradle to 7.2.2. +* Updates minimum Flutter version to 2.10. ## 2.0.12 -- Fixes library_private_types_in_public_api, sort_child_properties_last and use_key_in_widget_constructors +* Fixes library_private_types_in_public_api, sort_child_properties_last and use_key_in_widget_constructors lint warnings. ## 2.0.11 -- Switches to an in-package method channel implementation. +* Switches to an in-package method channel implementation. ## 2.0.10 -- Removes dependency on `meta`. +* Removes dependency on `meta`. ## 2.0.9 -- Updates compileSdkVersion to 31. +* Updates compileSdkVersion to 31. ## 2.0.8 -- Split from `shared_preferences` as a federated implementation. +* Split from `shared_preferences` as a federated implementation.