import native_app_glue
import serialization
-import json_serialization
+private import json_serialization
in "Java" `{
import android.content.SharedPreferences;
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],
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 {
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(); `}
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);
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
// 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();
#
# 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
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, "")
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