From 4f634a014415ee846cae260488f7963726cb5402 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 7 Oct 2019 10:31:43 -0700 Subject: [PATCH 01/13] migrate --- .../SharedPreferencesPlugin.java | 26 +++ .../MethodCallHandlerImpl.java | 201 ++++++++++++++++++ .../SharedPreferencesPlugin.java | 188 +--------------- .../android/app/src/main/AndroidManifest.xml | 7 + .../MainActivity.java | 14 ++ .../example/android/gradle.properties | 3 + 6 files changed, 254 insertions(+), 185 deletions(-) create mode 100644 packages/shared_preferences/android/src/main/java/dev/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java create mode 100644 packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java create mode 100644 packages/shared_preferences/example/android/app/src/main/java/dev/flutter/plugins/sharedpreferencesexample/MainActivity.java diff --git a/packages/shared_preferences/android/src/main/java/dev/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java b/packages/shared_preferences/android/src/main/java/dev/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java new file mode 100644 index 000000000000..f5867075dfce --- /dev/null +++ b/packages/shared_preferences/android/src/main/java/dev/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java @@ -0,0 +1,26 @@ +package dev.flutter.plugins.sharedpreferences; + +import androidx.annotation.NonNull; +import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugins.sharedpreferences.MethodCallHandlerImpl; + +/** + * Entry point of the plugin. It sets up the method call handler in {@link + * #onAttachedToEngine(FlutterPluginBinding)}. + */ +public class SharedPreferencesPlugin implements FlutterPlugin { + + private static final String CHANNEL_NAME = "plugins.flutter.io/shared_preferences"; + + @Override + public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { + MethodChannel channel = + new MethodChannel(binding.getFlutterEngine().getDartExecutor(), CHANNEL_NAME); + MethodCallHandlerImpl handler = new MethodCallHandlerImpl(binding.getApplicationContext()); + channel.setMethodCallHandler(handler); + } + + @Override + public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {} +} diff --git a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java new file mode 100644 index 000000000000..04c5c4778280 --- /dev/null +++ b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java @@ -0,0 +1,201 @@ +package io.flutter.plugins.sharedpreferences; + +import android.content.Context; +import android.content.SharedPreferences; +import android.os.AsyncTask; +import android.util.Base64; +import androidx.annotation.NonNull; +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; + +/** + * Implementation of the {@link MethodChannel.MethodCallHandler} for the plugin. It is also + * responsible of managing the {@link android.content.SharedPreferences}. + */ +//TODO(cyanglaz) Refactor out the code that handling the android.content.SharedPreferences to a different class and make this class purely handling method calls. +//https://github.com/flutter/flutter/issues/42115 +public 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; + + /** + * Constructs a {@link MethodCallHandlerImpl} instance. Creates a {@link + * android.content.SharedPreferences} based on the {@code context}. + */ + public MethodCallHandlerImpl(@NonNull Context context) { + preferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); + } + + @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)) { + 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); + } + } + + private void commitAsync( + final SharedPreferences.Editor editor, final MethodChannel.Result result) { + new AsyncTask() { + @Override + protected Boolean doInBackground(Void... voids) { + return editor.commit(); + } + + @Override + protected void onPostExecute(Boolean value) { + result.success(value); + } + }.execute(); + } + + 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/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java index affb56d33ce6..4675c9caaf76 100644 --- a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java +++ b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java @@ -4,200 +4,18 @@ package io.flutter.plugins.sharedpreferences; -import android.content.Context; -import android.content.SharedPreferences.Editor; -import android.os.AsyncTask; -import android.util.Base64; -import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; -import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.PluginRegistry; -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 */ @SuppressWarnings("unchecked") -public class SharedPreferencesPlugin implements MethodCallHandler { - private static final String SHARED_PREFERENCES_NAME = "FlutterSharedPreferences"; +public class SharedPreferencesPlugin { private static final String CHANNEL_NAME = "plugins.flutter.io/shared_preferences"; - // 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; - public static void registerWith(PluginRegistry.Registrar registrar) { MethodChannel channel = new MethodChannel(registrar.messenger(), CHANNEL_NAME); - SharedPreferencesPlugin instance = new SharedPreferencesPlugin(registrar.context()); - channel.setMethodCallHandler(instance); - } - - private SharedPreferencesPlugin(Context context) { - preferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); - } - - 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; - } - - private void commitAsync(final Editor editor, final MethodChannel.Result result) { - new AsyncTask() { - @Override - protected Boolean doInBackground(Void... voids) { - return editor.commit(); - } - - @Override - protected void onPostExecute(Boolean value) { - result.success(value); - } - }.execute(); - } - @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)) { - 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(); - 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); - } + MethodCallHandlerImpl handler = new MethodCallHandlerImpl(registrar.context()); + channel.setMethodCallHandler(handler); } } diff --git a/packages/shared_preferences/example/android/app/src/main/AndroidManifest.xml b/packages/shared_preferences/example/android/app/src/main/AndroidManifest.xml index 9640513d7d46..e9a3dfa7a257 100644 --- a/packages/shared_preferences/example/android/app/src/main/AndroidManifest.xml +++ b/packages/shared_preferences/example/android/app/src/main/AndroidManifest.xml @@ -10,6 +10,13 @@ android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> + + diff --git a/packages/shared_preferences/example/android/app/src/main/java/dev/flutter/plugins/sharedpreferencesexample/MainActivity.java b/packages/shared_preferences/example/android/app/src/main/java/dev/flutter/plugins/sharedpreferencesexample/MainActivity.java new file mode 100644 index 000000000000..de14d8f9bf9b --- /dev/null +++ b/packages/shared_preferences/example/android/app/src/main/java/dev/flutter/plugins/sharedpreferencesexample/MainActivity.java @@ -0,0 +1,14 @@ +package dev.flutter.plugins.sharedpreferencesexample; + +import dev.flutter.plugins.sharedpreferences.SharedPreferencesPlugin; +import io.flutter.embedding.android.FlutterActivity; +import io.flutter.embedding.engine.FlutterEngine; + +public class MainActivity extends FlutterActivity { + + @Override + public void configureFlutterEngine(FlutterEngine flutterEngine) { + super.configureFlutterEngine(flutterEngine); + flutterEngine.getPlugins().add(new SharedPreferencesPlugin()); + } +} diff --git a/packages/shared_preferences/example/android/gradle.properties b/packages/shared_preferences/example/android/gradle.properties index 8bd86f680510..a6738207fd15 100644 --- a/packages/shared_preferences/example/android/gradle.properties +++ b/packages/shared_preferences/example/android/gradle.properties @@ -1 +1,4 @@ org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true +android.enableR8=true From 08d5d6c87d028792f61a26e0dcd6f780a10bdecc Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 7 Oct 2019 11:53:02 -0700 Subject: [PATCH 02/13] add lisence header --- .../plugins/sharedpreferences/MethodCallHandlerImpl.java | 4 ++++ .../plugins/sharedpreferencesexample/MainActivity.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java index 04c5c4778280..4cb4f7364591 100644 --- a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java +++ b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java @@ -1,3 +1,7 @@ +// Copyright 2019 The Chromium 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; diff --git a/packages/shared_preferences/example/android/app/src/main/java/dev/flutter/plugins/sharedpreferencesexample/MainActivity.java b/packages/shared_preferences/example/android/app/src/main/java/dev/flutter/plugins/sharedpreferencesexample/MainActivity.java index de14d8f9bf9b..035203f1f2db 100644 --- a/packages/shared_preferences/example/android/app/src/main/java/dev/flutter/plugins/sharedpreferencesexample/MainActivity.java +++ b/packages/shared_preferences/example/android/app/src/main/java/dev/flutter/plugins/sharedpreferencesexample/MainActivity.java @@ -1,3 +1,7 @@ +// Copyright 2019 The Chromium 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 dev.flutter.plugins.sharedpreferencesexample; import dev.flutter.plugins.sharedpreferences.SharedPreferencesPlugin; From 69ab237cd15eeea78236148c3d9607ed69e1fdb5 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 7 Oct 2019 13:40:50 -0700 Subject: [PATCH 03/13] remove new package --- .../SharedPreferencesPlugin.java | 26 ------------------- .../SharedPreferencesPlugin.java | 15 ++++++++++- .../MainActivity.java | 2 +- 3 files changed, 15 insertions(+), 28 deletions(-) delete mode 100644 packages/shared_preferences/android/src/main/java/dev/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java diff --git a/packages/shared_preferences/android/src/main/java/dev/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java b/packages/shared_preferences/android/src/main/java/dev/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java deleted file mode 100644 index f5867075dfce..000000000000 --- a/packages/shared_preferences/android/src/main/java/dev/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java +++ /dev/null @@ -1,26 +0,0 @@ -package dev.flutter.plugins.sharedpreferences; - -import androidx.annotation.NonNull; -import io.flutter.embedding.engine.plugins.FlutterPlugin; -import io.flutter.plugin.common.MethodChannel; -import io.flutter.plugins.sharedpreferences.MethodCallHandlerImpl; - -/** - * Entry point of the plugin. It sets up the method call handler in {@link - * #onAttachedToEngine(FlutterPluginBinding)}. - */ -public class SharedPreferencesPlugin implements FlutterPlugin { - - private static final String CHANNEL_NAME = "plugins.flutter.io/shared_preferences"; - - @Override - public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { - MethodChannel channel = - new MethodChannel(binding.getFlutterEngine().getDartExecutor(), CHANNEL_NAME); - MethodCallHandlerImpl handler = new MethodCallHandlerImpl(binding.getApplicationContext()); - channel.setMethodCallHandler(handler); - } - - @Override - public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {} -} diff --git a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java index 4675c9caaf76..d76e204c4341 100644 --- a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java +++ b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java @@ -4,12 +4,14 @@ package io.flutter.plugins.sharedpreferences; +import androidx.annotation.NonNull; +import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.PluginRegistry; /** SharedPreferencesPlugin */ @SuppressWarnings("unchecked") -public class SharedPreferencesPlugin { +public class SharedPreferencesPlugin implements FlutterPlugin { private static final String CHANNEL_NAME = "plugins.flutter.io/shared_preferences"; public static void registerWith(PluginRegistry.Registrar registrar) { @@ -18,4 +20,15 @@ public static void registerWith(PluginRegistry.Registrar registrar) { MethodCallHandlerImpl handler = new MethodCallHandlerImpl(registrar.context()); channel.setMethodCallHandler(handler); } + + @Override + public void onAttachedToEngine(@NonNull FlutterPlugin.FlutterPluginBinding binding) { + MethodChannel channel = + new MethodChannel(binding.getFlutterEngine().getDartExecutor(), CHANNEL_NAME); + MethodCallHandlerImpl handler = new MethodCallHandlerImpl(binding.getApplicationContext()); + channel.setMethodCallHandler(handler); + } + + @Override + public void onDetachedFromEngine(@NonNull FlutterPlugin.FlutterPluginBinding binding) {} } diff --git a/packages/shared_preferences/example/android/app/src/main/java/dev/flutter/plugins/sharedpreferencesexample/MainActivity.java b/packages/shared_preferences/example/android/app/src/main/java/dev/flutter/plugins/sharedpreferencesexample/MainActivity.java index 035203f1f2db..522b69019cd0 100644 --- a/packages/shared_preferences/example/android/app/src/main/java/dev/flutter/plugins/sharedpreferencesexample/MainActivity.java +++ b/packages/shared_preferences/example/android/app/src/main/java/dev/flutter/plugins/sharedpreferencesexample/MainActivity.java @@ -4,9 +4,9 @@ package dev.flutter.plugins.sharedpreferencesexample; -import dev.flutter.plugins.sharedpreferences.SharedPreferencesPlugin; import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.engine.FlutterEngine; +import io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin; public class MainActivity extends FlutterActivity { From 5791375720fcdfd201197336497aeb68d9f810cf Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 7 Oct 2019 17:05:27 -0700 Subject: [PATCH 04/13] refactor --- .../SharedPreferencesPlugin.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java index d76e204c4341..c1486258bedc 100644 --- a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java +++ b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java @@ -4,8 +4,10 @@ package io.flutter.plugins.sharedpreferences; +import android.content.Context; import androidx.annotation.NonNull; import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.PluginRegistry; @@ -13,22 +15,26 @@ @SuppressWarnings("unchecked") public class SharedPreferencesPlugin implements FlutterPlugin { private static final String CHANNEL_NAME = "plugins.flutter.io/shared_preferences"; + private MethodChannel channel; public static void registerWith(PluginRegistry.Registrar registrar) { - MethodChannel channel = new MethodChannel(registrar.messenger(), CHANNEL_NAME); - - MethodCallHandlerImpl handler = new MethodCallHandlerImpl(registrar.context()); - channel.setMethodCallHandler(handler); + SharedPreferencesPlugin plugin = new SharedPreferencesPlugin(); + plugin.setupChannel(registrar.messenger(), registrar.context()); } @Override public void onAttachedToEngine(@NonNull FlutterPlugin.FlutterPluginBinding binding) { - MethodChannel channel = - new MethodChannel(binding.getFlutterEngine().getDartExecutor(), CHANNEL_NAME); - MethodCallHandlerImpl handler = new MethodCallHandlerImpl(binding.getApplicationContext()); - channel.setMethodCallHandler(handler); + setupChannel(binding.getFlutterEngine().getDartExecutor(), binding.getApplicationContext()); } @Override - public void onDetachedFromEngine(@NonNull FlutterPlugin.FlutterPluginBinding binding) {} + public void onDetachedFromEngine(@NonNull FlutterPlugin.FlutterPluginBinding binding) { + channel.setMethodCallHandler(null); + } + + private void setupChannel(BinaryMessenger messenger, Context context) { + channel = new MethodChannel(messenger, CHANNEL_NAME); + MethodCallHandlerImpl handler = new MethodCallHandlerImpl(context); + channel.setMethodCallHandler(handler); + } } From 96fc2f4d208e2de15ef4dd8ecc6e5907234cb58f Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Tue, 8 Oct 2019 13:03:54 -0700 Subject: [PATCH 05/13] rename activies --- .../android/app/src/main/AndroidManifest.xml | 4 ++-- .../sharedpreferencesexample/MainActivity.java | 18 ------------------ .../EmbeddingV1Activity.java | 18 ++++++++++++++++++ .../sharedpreferencesexample/MainActivity.java | 14 +++++++------- 4 files changed, 27 insertions(+), 27 deletions(-) delete mode 100644 packages/shared_preferences/example/android/app/src/main/java/dev/flutter/plugins/sharedpreferencesexample/MainActivity.java create mode 100644 packages/shared_preferences/example/android/app/src/main/java/io/flutter/plugins/sharedpreferencesexample/EmbeddingV1Activity.java diff --git a/packages/shared_preferences/example/android/app/src/main/AndroidManifest.xml b/packages/shared_preferences/example/android/app/src/main/AndroidManifest.xml index e9a3dfa7a257..f13d7f673793 100644 --- a/packages/shared_preferences/example/android/app/src/main/AndroidManifest.xml +++ b/packages/shared_preferences/example/android/app/src/main/AndroidManifest.xml @@ -4,14 +4,14 @@ - - Date: Tue, 8 Oct 2019 15:38:42 -0700 Subject: [PATCH 06/13] non public --- .../plugins/sharedpreferences/MethodCallHandlerImpl.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java index 4cb4f7364591..be6f21e519db 100644 --- a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java +++ b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java @@ -27,9 +27,7 @@ * Implementation of the {@link MethodChannel.MethodCallHandler} for the plugin. It is also * responsible of managing the {@link android.content.SharedPreferences}. */ -//TODO(cyanglaz) Refactor out the code that handling the android.content.SharedPreferences to a different class and make this class purely handling method calls. -//https://github.com/flutter/flutter/issues/42115 -public class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { +class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { private static final String SHARED_PREFERENCES_NAME = "FlutterSharedPreferences"; @@ -44,7 +42,7 @@ public class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { * Constructs a {@link MethodCallHandlerImpl} instance. Creates a {@link * android.content.SharedPreferences} based on the {@code context}. */ - public MethodCallHandlerImpl(@NonNull Context context) { + MethodCallHandlerImpl(@NonNull Context context) { preferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); } From ea68abf2871bb5f13288c6983f99e50b0618d07c Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Fri, 11 Oct 2019 13:57:58 -0700 Subject: [PATCH 07/13] fix gradle --- .../shared_preferences/android/build.gradle | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/shared_preferences/android/build.gradle b/packages/shared_preferences/android/build.gradle index 584d86abbbae..d7aca2cc8b68 100644 --- a/packages/shared_preferences/android/build.gradle +++ b/packages/shared_preferences/android/build.gradle @@ -53,3 +53,27 @@ android { disable 'InvalidPackage' } } + +afterEvaluate { + def containsEmbeddingDependencies = false + for (def configuration : configurations.all) { + for (def dependency : configuration.dependencies) { + if (dependency.group == 'io.flutter' && + dependency.name.startsWith('flutter_embedding') && + dependency.isTransitive()) + { + containsEmbeddingDependencies = true + break + } + } + } + if (!containsEmbeddingDependencies) { + android { + dependencies { + def lifecycle_version = "2.1.0" + api "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" + api "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" + } + } + } +} From b50066b5dbfde13fbea90b7138868efbcf3c2d88 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Fri, 11 Oct 2019 14:13:22 -0700 Subject: [PATCH 08/13] Update packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java Co-Authored-By: Maurice Parrish --- .../plugins/sharedpreferences/SharedPreferencesPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java index c1486258bedc..125de04aeca7 100644 --- a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java +++ b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java @@ -18,7 +18,7 @@ public class SharedPreferencesPlugin implements FlutterPlugin { private MethodChannel channel; public static void registerWith(PluginRegistry.Registrar registrar) { - SharedPreferencesPlugin plugin = new SharedPreferencesPlugin(); + final SharedPreferencesPlugin plugin = new SharedPreferencesPlugin(); plugin.setupChannel(registrar.messenger(), registrar.context()); } From a37694b49ac3f1035718e4c5c5d58c3a0ed166a6 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 14 Oct 2019 09:20:10 -0700 Subject: [PATCH 09/13] review fixes --- .../plugins/sharedpreferences/SharedPreferencesPlugin.java | 7 ++++++- .../example/android/app/src/main/AndroidManifest.xml | 1 - 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java index 125de04aeca7..901e96089130 100644 --- a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java +++ b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java @@ -29,7 +29,7 @@ public void onAttachedToEngine(@NonNull FlutterPlugin.FlutterPluginBinding bindi @Override public void onDetachedFromEngine(@NonNull FlutterPlugin.FlutterPluginBinding binding) { - channel.setMethodCallHandler(null); + teardownChannel(); } private void setupChannel(BinaryMessenger messenger, Context context) { @@ -37,4 +37,9 @@ private void setupChannel(BinaryMessenger messenger, Context context) { MethodCallHandlerImpl handler = new MethodCallHandlerImpl(context); channel.setMethodCallHandler(handler); } + + private void teardownChannel() { + channel.setMethodCallHandler(null); + channel = null; + } } diff --git a/packages/shared_preferences/example/android/app/src/main/AndroidManifest.xml b/packages/shared_preferences/example/android/app/src/main/AndroidManifest.xml index f13d7f673793..abb4a67db50c 100644 --- a/packages/shared_preferences/example/android/app/src/main/AndroidManifest.xml +++ b/packages/shared_preferences/example/android/app/src/main/AndroidManifest.xml @@ -12,7 +12,6 @@ android:windowSoftInputMode="adjustResize"> Date: Tue, 15 Oct 2019 16:10:14 -0700 Subject: [PATCH 10/13] Update MainActivity.java --- .../flutter/plugins/sharedpreferencesexample/MainActivity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/shared_preferences/example/android/app/src/main/java/io/flutter/plugins/sharedpreferencesexample/MainActivity.java b/packages/shared_preferences/example/android/app/src/main/java/io/flutter/plugins/sharedpreferencesexample/MainActivity.java index 61b96545cfd1..f40d0035c135 100644 --- a/packages/shared_preferences/example/android/app/src/main/java/io/flutter/plugins/sharedpreferencesexample/MainActivity.java +++ b/packages/shared_preferences/example/android/app/src/main/java/io/flutter/plugins/sharedpreferencesexample/MainActivity.java @@ -9,7 +9,8 @@ import io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin; public class MainActivity extends FlutterActivity { - + // TODO(cyanglaz): Remove this once v2 of GeneratedPluginRegistrant rolls to stable. + // https://github.com/flutter/flutter/issues/42694 @Override public void configureFlutterEngine(FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); From 0193360b0d65be27077df9e9226554a68001f1bc Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Tue, 15 Oct 2019 16:34:58 -0700 Subject: [PATCH 11/13] add e2e tests --- packages/shared_preferences/CHANGELOG.md | 6 ++++++ packages/shared_preferences/android/build.gradle | 1 + .../EmbeddingV1ActivityTest.java | 14 ++++++++++++++ .../MainActivityTest.java | 15 +++++++++++++++ packages/shared_preferences/example/pubspec.yaml | 6 ++++++ .../example/test/shared_preferences_test.dart | 11 ----------- .../shared_preferences_e2e.dart} | 6 ++---- .../test_driver/shared_preferences_e2e_test.dart | 15 +++++++++++++++ packages/shared_preferences/pubspec.yaml | 5 +++-- 9 files changed, 62 insertions(+), 17 deletions(-) create mode 100644 packages/shared_preferences/example/android/app/src/main/java/io/flutter/plugins/sharedpreferencesexample/EmbeddingV1ActivityTest.java create mode 100644 packages/shared_preferences/example/android/app/src/main/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java delete mode 100644 packages/shared_preferences/example/test/shared_preferences_test.dart rename packages/shared_preferences/example/{test/shared_preferences.dart => test_driver/shared_preferences_e2e.dart} (93%) create mode 100644 packages/shared_preferences/example/test_driver/shared_preferences_e2e_test.dart diff --git a/packages/shared_preferences/CHANGELOG.md b/packages/shared_preferences/CHANGELOG.md index 00d5adfce0a3..eae2bb6dc38a 100644 --- a/packages/shared_preferences/CHANGELOG.md +++ b/packages/shared_preferences/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.4.1 + +* Support the v2 Android embedder. +* Update to AndroidX. +* Migrate to using the new e2e test binding. + ## 0.5.3+4 * Copy `List` instances when reading and writing values to prevent mutations from propagating. diff --git a/packages/shared_preferences/android/build.gradle b/packages/shared_preferences/android/build.gradle index d7aca2cc8b68..437e44007556 100644 --- a/packages/shared_preferences/android/build.gradle +++ b/packages/shared_preferences/android/build.gradle @@ -54,6 +54,7 @@ android { } } +// TODO(cyanglaz): Remove this hack once androidx.lifecycle is included on stable. https://github.com/flutter/flutter/issues/42348 afterEvaluate { def containsEmbeddingDependencies = false for (def configuration : configurations.all) { diff --git a/packages/shared_preferences/example/android/app/src/main/java/io/flutter/plugins/sharedpreferencesexample/EmbeddingV1ActivityTest.java b/packages/shared_preferences/example/android/app/src/main/java/io/flutter/plugins/sharedpreferencesexample/EmbeddingV1ActivityTest.java new file mode 100644 index 000000000000..3eb677b21163 --- /dev/null +++ b/packages/shared_preferences/example/android/app/src/main/java/io/flutter/plugins/sharedpreferencesexample/EmbeddingV1ActivityTest.java @@ -0,0 +1,14 @@ + +package io.flutter.plugins.sharedpreferencesexample; + +import androidx.test.rule.ActivityTestRule; +import dev.flutter.plugins.e2e.FlutterRunner; +import org.junit.Rule; +import org.junit.runner.RunWith; + +@RunWith(FlutterRunner.class) +public class EmbeddingV1ActivityTest { + @Rule + public ActivityTestRule rule = + new ActivityTestRule<>(EmbeddingV1Activity.class); +} diff --git a/packages/shared_preferences/example/android/app/src/main/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java b/packages/shared_preferences/example/android/app/src/main/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java new file mode 100644 index 000000000000..dc6c826bca19 --- /dev/null +++ b/packages/shared_preferences/example/android/app/src/main/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java @@ -0,0 +1,15 @@ +// Copyright 2019 The Chromium 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.sharedpreferencesexample; + +import androidx.test.rule.ActivityTestRule; +import dev.flutter.plugins.e2e.FlutterRunner; +import org.junit.Rule; +import org.junit.runner.RunWith; + +@RunWith(FlutterRunner.class) +public class MainActivityTest { + @Rule public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class); +} diff --git a/packages/shared_preferences/example/pubspec.yaml b/packages/shared_preferences/example/pubspec.yaml index 866185589c8d..4243e08cba34 100644 --- a/packages/shared_preferences/example/pubspec.yaml +++ b/packages/shared_preferences/example/pubspec.yaml @@ -11,6 +11,12 @@ dev_dependencies: flutter_driver: sdk: flutter test: any + e2e: ^0.2.0 flutter: uses-material-design: true + +environment: + sdk: ">=2.0.0-dev.28.0 <3.0.0" + flutter: ">=1.9.1+hotfix.2 <2.0.0" + diff --git a/packages/shared_preferences/example/test/shared_preferences_test.dart b/packages/shared_preferences/example/test/shared_preferences_test.dart deleted file mode 100644 index c5044730dd3f..000000000000 --- a/packages/shared_preferences/example/test/shared_preferences_test.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; - -import '../lib/main.dart'; - -void main() { - testWidgets('SharedPreferences example widget test', - (WidgetTester tester) async { - await tester.pumpWidget(MyApp()); - expect(find.text('SharedPreferences Demo'), findsOneWidget); - }); -} diff --git a/packages/shared_preferences/example/test/shared_preferences.dart b/packages/shared_preferences/example/test_driver/shared_preferences_e2e.dart similarity index 93% rename from packages/shared_preferences/example/test/shared_preferences.dart rename to packages/shared_preferences/example/test_driver/shared_preferences_e2e.dart index bf40888c43b4..1c09e2eb867e 100644 --- a/packages/shared_preferences/example/test/shared_preferences.dart +++ b/packages/shared_preferences/example/test_driver/shared_preferences_e2e.dart @@ -1,12 +1,10 @@ import 'dart:async'; -import 'package:flutter_driver/driver_extension.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:e2e/e2e.dart'; void main() { - final Completer completer = Completer(); - enableFlutterDriverExtension(handler: (_) => completer.future); - tearDownAll(() => completer.complete(null)); + E2EWidgetsFlutterBinding.ensureInitialized(); group('$SharedPreferences', () { const Map kTestValues = { diff --git a/packages/shared_preferences/example/test_driver/shared_preferences_e2e_test.dart b/packages/shared_preferences/example/test_driver/shared_preferences_e2e_test.dart new file mode 100644 index 000000000000..ff6e9ce74ad9 --- /dev/null +++ b/packages/shared_preferences/example/test_driver/shared_preferences_e2e_test.dart @@ -0,0 +1,15 @@ +// Copyright 2019, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'dart:io'; +import 'package:flutter_driver/flutter_driver.dart'; + +Future main() async { + final FlutterDriver driver = await FlutterDriver.connect(); + final String result = + await driver.requestData(null, timeout: const Duration(minutes: 1)); + driver.close(); + exit(result == 'pass' ? 0 : 1); +} diff --git a/packages/shared_preferences/pubspec.yaml b/packages/shared_preferences/pubspec.yaml index 1b1feb2d73a6..889f1c2ac5d5 100644 --- a/packages/shared_preferences/pubspec.yaml +++ b/packages/shared_preferences/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for reading and writing simple key-value pairs. Wraps NSUserDefaults on iOS and SharedPreferences on Android. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/shared_preferences -version: 0.5.3+4 +version: 0.5.4 flutter: plugin: @@ -22,7 +22,8 @@ dev_dependencies: flutter_driver: sdk: flutter test: any + e2e: ^0.2.0 environment: sdk: ">=2.0.0-dev.28.0 <3.0.0" - flutter: ">=1.5.0 <2.0.0" + flutter: ">=1.6.7 <2.0.0" From 7c6c059b94d5c79ee60cf1dfb5ee7b44bfc04b2a Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 21 Oct 2019 13:58:09 -0700 Subject: [PATCH 12/13] remove androidx --- packages/shared_preferences/CHANGELOG.md | 2 +- packages/shared_preferences/android/build.gradle | 7 ++++--- .../plugins/sharedpreferences/MethodCallHandlerImpl.java | 3 +-- .../plugins/sharedpreferences/SharedPreferencesPlugin.java | 5 ++--- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/shared_preferences/CHANGELOG.md b/packages/shared_preferences/CHANGELOG.md index eae2bb6dc38a..93ee6fd5e5c7 100644 --- a/packages/shared_preferences/CHANGELOG.md +++ b/packages/shared_preferences/CHANGELOG.md @@ -1,6 +1,6 @@ ## 0.4.1 -* Support the v2 Android embedder. +* Support the v2 Android embedding. * Update to AndroidX. * Migrate to using the new e2e test binding. diff --git a/packages/shared_preferences/android/build.gradle b/packages/shared_preferences/android/build.gradle index 437e44007556..a96d1a3b04d8 100644 --- a/packages/shared_preferences/android/build.gradle +++ b/packages/shared_preferences/android/build.gradle @@ -71,9 +71,10 @@ afterEvaluate { if (!containsEmbeddingDependencies) { android { dependencies { - def lifecycle_version = "2.1.0" - api "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" - api "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" + def lifecycle_version = "1.1.1" + api "android.arch.lifecycle:runtime:$lifecycle_version" + api "android.arch.lifecycle:common:$lifecycle_version" + api "android.arch.lifecycle:common-java8:$lifecycle_version" } } } diff --git a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java index be6f21e519db..19b6be95d162 100644 --- a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java +++ b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java @@ -8,7 +8,6 @@ import android.content.SharedPreferences; import android.os.AsyncTask; import android.util.Base64; -import androidx.annotation.NonNull; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import java.io.ByteArrayInputStream; @@ -42,7 +41,7 @@ class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { * Constructs a {@link MethodCallHandlerImpl} instance. Creates a {@link * android.content.SharedPreferences} based on the {@code context}. */ - MethodCallHandlerImpl(@NonNull Context context) { + MethodCallHandlerImpl(Context context) { preferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); } diff --git a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java index 901e96089130..65753c1b1c1a 100644 --- a/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java +++ b/packages/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java @@ -5,7 +5,6 @@ package io.flutter.plugins.sharedpreferences; import android.content.Context; -import androidx.annotation.NonNull; import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodChannel; @@ -23,12 +22,12 @@ public static void registerWith(PluginRegistry.Registrar registrar) { } @Override - public void onAttachedToEngine(@NonNull FlutterPlugin.FlutterPluginBinding binding) { + public void onAttachedToEngine(FlutterPlugin.FlutterPluginBinding binding) { setupChannel(binding.getFlutterEngine().getDartExecutor(), binding.getApplicationContext()); } @Override - public void onDetachedFromEngine(@NonNull FlutterPlugin.FlutterPluginBinding binding) { + public void onDetachedFromEngine(FlutterPlugin.FlutterPluginBinding binding) { teardownChannel(); } From ee4389f3b4bb361209e2894b0fd70206e6aa82d3 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 21 Oct 2019 14:21:07 -0700 Subject: [PATCH 13/13] remove unused driver test --- .../example/test_driver/shared_preferences_test.dart | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 packages/shared_preferences/example/test_driver/shared_preferences_test.dart diff --git a/packages/shared_preferences/example/test_driver/shared_preferences_test.dart b/packages/shared_preferences/example/test_driver/shared_preferences_test.dart deleted file mode 100644 index 110203456c7b..000000000000 --- a/packages/shared_preferences/example/test_driver/shared_preferences_test.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:flutter_driver/flutter_driver.dart'; -import 'package:test/test.dart'; - -void main() { - test('SharedPreferences', () async { - final FlutterDriver driver = await FlutterDriver.connect(); - await driver.requestData(null, timeout: const Duration(minutes: 1)); - if (driver != null) { - driver.close(); - } - }); -}