import dalvik
import serialization
-private import json::serialization
+private import json
in "Java" `{
import android.content.SharedPreferences;
extern class NativeSharedPreferences in "Java" `{ android.content.SharedPreferences `}
super JavaObject
- fun contains(key: JavaString): Bool in "Java" `{ return recv.contains(key); `}
+ fun contains(key: JavaString): Bool in "Java" `{ return self.contains(key); `}
fun get_all: HashMap[JavaString, JavaObject] import HashMap[JavaString, JavaObject],
HashMap[JavaString, JavaObject].[]= in "Java" `{
Map<String, ?> java_map = null;
- int nit_hashmap = new_HashMap_of_JavaString_JavaObject();
+ nit.app.NitObject nit_hashmap = new_HashMap_of_JavaString_JavaObject();
try {
- java_map = recv.getAll();
+ java_map = self.getAll();
} catch (NullPointerException e) {
return nit_hashmap;
}
fun get_boolean(key: JavaString, def_value: Bool): Bool in "Java" `{
boolean return_value;
try {
- return_value = recv.getBoolean(key, def_value);
+ return_value = self.getBoolean(key, def_value);
} catch (ClassCastException e) {
return def_value;
}
fun get_float(key: JavaString, def_value: Float): Float in "Java" `{
float return_value;
try {
- return_value = recv.getFloat(key, (float) def_value);
+ return_value = self.getFloat(key, (float) def_value);
} catch (ClassCastException e) {
return def_value;
}
fun get_int(key: JavaString, def_value: Int): Int in "Java" `{
int return_value;
try {
- return_value = recv.getInt(key, (int)def_value);
+ return_value = self.getInt(key, (int)def_value);
} catch (ClassCastException e) {
return def_value;
}
fun get_long(key: JavaString, def_value: Int): Int in "Java" `{
long return_value;
try {
- return_value = recv.getLong(key, def_value);
+ return_value = self.getLong(key, def_value);
} catch (ClassCastException e) {
return def_value;
}
fun get_string(key: JavaString, def_value: JavaString): JavaString in "Java" `{
String return_value = null;
try {
- return_value = recv.getString(key, def_value);
+ return_value = self.getString(key, def_value);
} catch (ClassCastException e) {
return def_value;
}
# HACK for bug #845
redef fun new_global_ref import sys, Sys.jni_env `{
- Sys sys = NativeSharedPreferences_sys(recv);
+ Sys sys = NativeSharedPreferences_sys(self);
JNIEnv *env = Sys_jni_env(sys);
- return (*env)->NewGlobalRef(env, recv);
+ return (*env)->NewGlobalRef(env, self);
`}
end
extern class NativeSharedPreferencesEditor in "Java" `{ android.content.SharedPreferences$Editor `}
super JavaObject
- fun clear: NativeSharedPreferencesEditor in "Java" `{ return recv.clear(); `}
- fun commit: Bool in "Java" `{ return recv.commit(); `}
+ fun clear: NativeSharedPreferencesEditor in "Java" `{ return self.clear(); `}
+ fun commit: Bool in "Java" `{ return self.commit(); `}
fun put_boolean(key: JavaString, value: Bool): NativeSharedPreferencesEditor in "Java" `{
- return recv.putBoolean (key, value);
+ return self.putBoolean (key, value);
`}
fun put_float(key: JavaString, value: Float): NativeSharedPreferencesEditor in "Java" `{
- return recv.putFloat(key, (float) value);
+ return self.putFloat(key, (float) value);
`}
fun put_int(key: JavaString, value: Int): NativeSharedPreferencesEditor in "Java" `{
- return recv.putInt(key, (int)value);
+ return self.putInt(key, (int)value);
`}
fun put_long(key: JavaString, value: Int): NativeSharedPreferencesEditor in "Java" `{
- return recv.putLong(key, value);
+ return self.putLong(key, value);
`}
fun put_string(key: JavaString, value: JavaString): NativeSharedPreferencesEditor in "Java" `{
- return recv.putString(key, value);
+ return self.putString(key, value);
`}
fun remove(key: JavaString): NativeSharedPreferencesEditor in "Java" `{
- return recv.remove(key);
+ return self.remove(key);
`}
# HACK for bug #845
redef fun new_global_ref import sys, Sys.jni_env `{
- Sys sys = NativeSharedPreferencesEditor_sys(recv);
+ Sys sys = NativeSharedPreferencesEditor_sys(self);
JNIEnv *env = Sys_jni_env(sys);
- return (*env)->NewGlobalRef(env, recv);
+ return (*env)->NewGlobalRef(env, self);
`}
end
# Provides services to save and load data for the android platform
class SharedPreferences
- protected var context: NativeActivity
protected var shared_preferences: NativeSharedPreferences
protected var editor: NativeSharedPreferencesEditor
protected init(app: App, file_name: String, mode: Int)
do
- self.context = app.native_activity
sys.jni_env.push_local_frame(1)
- setup(file_name.to_java_string, mode)
+ setup(file_name.to_java_string, mode, app.native_context)
sys.jni_env.pop_local_frame
end
self.editor = editor.new_global_ref
end
- private fun setup(file_name: JavaString, mode: Int) import context, set_vars in "Java" `{
- Activity context = (Activity) SharedPreferences_context(recv);
+ private fun setup(file_name: JavaString, mode: Int, context: NativeContext) import set_vars in "Java" `{
SharedPreferences sp;
// Uses default SharedPreferences if file_name is an empty String
if (file_name.equals("")) {
- sp = context.getPreferences((int)mode);
+ Activity activity = (Activity)context;
+ sp = activity.getPreferences((int)mode);
} else {
sp = context.getSharedPreferences(file_name, (int)mode);
}
SharedPreferences.Editor editor = sp.edit();
- SharedPreferences_set_vars(recv, sp, editor);
+ SharedPreferences_set_vars(self, sp, editor);
`}
private fun commit_if_auto do if auto_commit then self.commit
# 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
+ # Make sure that the serialized object is `serialize` or that it redefines
# the appropriate methods. Refer to `Serializable` documentation for further details
fun [](key: String): nullable Object
do
if serialized_string == "" then return null
var deserializer = new JsonDeserializer(serialized_string)
- return deserializer.deserialize
+ var deserialized = deserializer.deserialize
+
+ var errors = deserializer.errors
+ if errors.not_empty then
+ # An update may have broken the versioning compatibility
+ print_error "{class_name} error at deserialization: {errors.join(", ")}"
+ return null # Let's be safe
+ end
+
+ return deserialized
end
end
redef class App
var shared_preferences: SharedPreferences is lazy do
- return new SharedPreferences.privately(self, "")
+ return new SharedPreferences.privately(self, "app.nit")
end
end