code: replace `is cached` by `is lazy`
[nit.git] / lib / android / shared_preferences / shared_preferences_api10.nit
index 9a47e43..6b6edde 100644 (file)
@@ -33,7 +33,6 @@ in "Java" `{
 
 extern class NativeSharedPreferences in "Java" `{ android.content.SharedPreferences `}
        super JavaObject
-       redef type SELF: NativeSharedPreferences
        
        fun contains(key: JavaString): Bool in "Java" `{ return recv.contains(key); `}
        fun get_all: HashMap[JavaString, JavaObject] import HashMap[JavaString, JavaObject],
@@ -75,14 +74,13 @@ extern class NativeSharedPreferences in "Java" `{ android.content.SharedPreferen
        fun get_int(key: JavaString, def_value: Int): Int in "Java" `{
                int return_value;
                try {
-                       return_value = recv.getInt(key, def_value); 
+                       return_value = recv.getInt(key, (int)def_value); 
                } catch (ClassCastException e) {
                        return def_value;
                }
 
                return return_value;
        `}
-       #FIXME: Get rid of the `int` cast when the ffi is fixed
        fun get_long(key: JavaString, def_value: Int): Int in "Java" `{
                long return_value;
                try {
@@ -103,11 +101,17 @@ extern class NativeSharedPreferences in "Java" `{ android.content.SharedPreferen
 
                return return_value;
        `}
+
+       # HACK for bug #845
+       redef fun new_global_ref import sys, Sys.jni_env `{
+               Sys sys = NativeSharedPreferences_sys(recv);
+               JNIEnv *env = Sys_jni_env(sys);
+               return (*env)->NewGlobalRef(env, recv);
+       `}
 end
 
 extern class NativeSharedPreferencesEditor in "Java" `{ android.content.SharedPreferences$Editor `}
        super JavaObject
-       redef type SELF: NativeSharedPreferencesEditor
 
        fun clear: NativeSharedPreferencesEditor in "Java" `{ return recv.clear(); `}
        fun commit: Bool in "Java" `{ return recv.commit(); `}
@@ -118,7 +122,7 @@ extern class NativeSharedPreferencesEditor in "Java" `{ android.content.SharedPr
                return recv.putFloat(key, (float) value); 
        `}
        fun put_int(key: JavaString, value: Int): NativeSharedPreferencesEditor in "Java" `{
-               return recv.putInt(key, value); 
+               return recv.putInt(key, (int)value); 
        `}
        fun put_long(key: JavaString, value: Int): NativeSharedPreferencesEditor in "Java" `{
                return recv.putLong(key, value); 
@@ -129,6 +133,13 @@ extern class NativeSharedPreferencesEditor in "Java" `{ android.content.SharedPr
        fun remove(key: JavaString): NativeSharedPreferencesEditor in "Java" `{ 
                return recv.remove(key); 
        `}
+
+       # HACK for bug #845
+       redef fun new_global_ref import sys, Sys.jni_env `{
+               Sys sys = NativeSharedPreferencesEditor_sys(recv);
+               JNIEnv *env = Sys_jni_env(sys);
+               return (*env)->NewGlobalRef(env, recv);
+       `}
 end
 
 # Provides services to save and load data for the android platform
@@ -169,9 +180,9 @@ class SharedPreferences
 
                // Uses default SharedPreferences if file_name is an empty String
                if (file_name.equals("")) {
-                       sp = context.getPreferences( mode);
+                       sp = context.getPreferences((int)mode);
                } else { 
-                       sp = context.getSharedPreferences(file_name, mode);
+                       sp = context.getSharedPreferences(file_name, (int)mode);
                }
 
                SharedPreferences.Editor editor = sp.edit();
@@ -194,15 +205,14 @@ class SharedPreferences
        #
        # User has to manage local stack deallocation himself
        #
-       # Example :
-       # ~~~
+       # ~~~nitish
        # var foo = new HashMap[JavaString, JavaObject]
        # # ...
        # for key, value in foo do
        #      key.delete_local_ref
        #      value.delete_local_ref
        # end
-       # ~~~
+       # ~~~
        # *You should use Nit getters instead and get each value one by one* 
        fun all: nullable HashMap[JavaString, JavaObject]
        do 
@@ -366,20 +376,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 StringWriter
+               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, "")
 
@@ -391,49 +404,7 @@ class SharedPreferences
 end
 
 redef class App
-       fun shared_preferences: SharedPreferences is cached do 
+       var shared_preferences: SharedPreferences is lazy do
                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