android/shared_preferences: []= always serialize to be symetric with the new []
authorAlexis Laferrière <alexis.laf@xymus.net>
Fri, 11 Jul 2014 19:32:44 +0000 (15:32 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Tue, 15 Jul 2014 19:23:38 +0000 (15:23 -0400)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

examples/mnit_simple/src/simple_android.nit
lib/android/shared_preferences/shared_preferences_api10.nit

index b0cbb19..e36aa83 100644 (file)
@@ -170,7 +170,7 @@ redef class App
                # Serialized object test
                var my_point = new Point(10, 10)
                sp["a_point"] = my_point
-               var my_deserialized_point = sp.deserialize("a_point")
+               var my_deserialized_point = sp["a_point"]
                assert my_point.to_s == my_deserialized_point.to_s
 
                assert sp.bool("a_boolean", false) == true
index 9a47e43..577d0d2 100644 (file)
@@ -366,20 +366,23 @@ class SharedPreferences
                self.editor.delete_global_ref
        end
 
-       # Save data to file dynamically calling the appropriate method according to value type
-       # Non-primitive Object (`String` excluded) will be stored as a serialized json `String`
-       # Nit `Int` are stored as Java `long`, therefore you'll have to retrieve it with `long` method
-       fun []=(key: String, value: Serializable)
+       # Store `value` as a serialized Json string
+       fun []=(key: String, value: nullable Serializable)
        do
-               value.add_to_preferences(self, key)
+               var serialized_string = new StringOStream
+               var serializer = new JsonSerializer(serialized_string)
+               serializer.serialize(value)
+
+               add_string(key, serialized_string.to_s)
                commit_if_auto
        end
 
-       # Retrieve an `Object` serialized via `[]=` function
+       # Retrieve an `Object` stored via `[]=` function
+       #
        # Returns `null` if there's no serialized object corresponding to the given key
        # Make sure that the serialized object is `auto_serializable` or that it redefines
        # the appropriate methods. Refer to `Serializable` documentation for further details
-       fun deserialize(key: String): nullable Object
+       fun [](key: String): nullable Object
        do
                var serialized_string = self.string(key, "")
 
@@ -395,45 +398,3 @@ redef class App
                return new SharedPreferences.privately(self, "")
        end
 end
-
-redef class Serializable
-       # Called by []= operator to dynamically call the appropriate add method 
-       # Non-primitive Object (`String` excluded) will be stored as a serialized json `String`
-       # Refine your class to customize this method behaviour
-       protected fun add_to_preferences(shared_preferences: SharedPreferences, key: String) 
-       do 
-               var serialized_string = new StringOStream
-               var serializer = new JsonSerializer(serialized_string)
-               serializer.serialize(self)
-
-               shared_preferences.add_string(key, serialized_string.to_s)
-       end
-end
-
-redef class Bool
-       redef fun add_to_preferences(shared_preferences, key)
-       do
-               shared_preferences.add_bool(key, self)
-       end
-end
-
-redef class Int
-       redef fun add_to_preferences(shared_preferences, key)
-       do
-               shared_preferences.add_long(key, self)
-       end
-end
-
-redef class Float
-       redef fun add_to_preferences(shared_preferences, key)
-       do
-               shared_preferences.add_float(key, self)
-       end
-end
-
-redef class String
-       redef fun add_to_preferences(shared_preferences, key)
-       do
-               shared_preferences.add_string(key, self)
-       end
-end