Hace ya tiempo que no comento nada sobre mi proyecto, aunque no he estado parado estas navidades. Las tripas de la aplicación (al menos la parte de ajustes) están bastante avanzadas, y ahora estoy implementando la parte correspondiente de la interfaz gráfica.
Hasta el momento, he estado probando el gestor de usuarios y funciona correctamente. El resto de gestores son muy similares, pues al igual que el de usuarios (UserManager) se limitan a heredar la clase abstracta ProfileManager que es la que implementa la mayor parte de la funcionalidad.

La ventana inicial del programa. Es fea. Por ahora. Pero le he encargado un icono reshulón a un colegui artista.
En este momento me encuentro con dos problemas que me están frenando bastante. El primero es la gestión de los perfiles de usuario y las preferencias. Android provee un mecanismo de gestión de preferencias que permite cargarlas desde un fichero XML, generar la interfaz de usuario para las mismas automáticamente y almacenarlas. Todo muy sencillo y muy chachi, pero (aparentemente) no permite manejar un fichero XML que no sea el de las preferencias generales del programa. Es decir, no permite elegir la ubicación de dichos ajustes, por tanto, no puedo utilizarlo para crear la interfaz de administración de los perfiles de una forma bastante automatizada. Esto significa que tendré que implementar yo mismo los parsers y la interfaz de administración para los ajustes de los perfiles, lo cual puede ser bastante trabajo, corriendo además el riesgo de que la apariencia de los ajustes no sea la típica de una aplicación Android. No obstante, parece ser que la clase Preferences y sus derivadas pueden serme útiles a la hora de crear la interfaz de usuario.

Esto es lo que se ve al entrar en ajustes. Ahora mismo solo he creado dos usuarios por defecto.

El usuario HauriHauri ha sido añadido. El problema es que para ver esto actualizado hay que salir y volver a entrar.

El diálogo de selección permite elegir un usuario, editarlo y eliminarlo (estas dos últimas acciones, solo para perfiles personalizados)
El segundo problema es el típico que no debería suceder, aparece y te amarga la existencia. Bueno, tanto no, pero sí que me está jodiendo bien. Tengo implementada al 90% la interfaz de gestión de usuarios (todo excepto algunas cadenas que están metidas a pelo y la selección de perfiles), pero hay un fallo que no sé ya por dónde cogerlo: no se me actualizan las vistas al añadir un usuario o elegir uno distinto. Hay que volver atrás y abrir de nuevo la ventana para que se actualice la vista.
En general, el SDK de Android me está gustando. Se nota que está todo pensado para obtener un gran rendimiento (véase por ejemplo la reutilización de vistas en las ListViews, que es bastante elegante), aunque algunas cosas están un poco confusas y sobre todo, los nombres de algunas clases y ciertas jerarquías no me parecen consistentes. Qt me gusta más, primero por su diseño (que me encanta), y segundo por ser una biblioteca para C++ (al menos nativamente), que me parece un lenguaje mucho más potente que Java, aunque también más peligroso.
Por otra parte, cada vez odio más al Eclipse. Es el IDE más sobrecargado, lento y lleno de fallos que he usado. Además, debe haber algún fallo en Eclipse, Java, Gtk+, en Gtk-Qt o en el propio servidor gráfico X.org que provoca que cuando estoy usando Eclipse se dispare el consumo de memoria de Xorg. Tanto, que al cabo de unas horas se me completa la RAM (4GB) y tengo que terminar reiniciando el servidor gráfico. Ojalá continúe el progreso de Wayland y podamos deshacernos del monstruo en el que se está convirtiendo X11.
Y esto es todo por ahora.




enero 14th, 2010 a las 2:29
Hablo sin saber muy bien porque quieres guardar las preferencias de los usuarios en XML, pero ¿Te hsa planteado el uso de una base de datos SQLite? Android tienen una API completa para manejar estas bases de datos: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
Además, como este tipo de bases de datos son sin conexión, tan solo usan un fichero, la puedes ubicar donde tu quieras. Y además al ser sin conexión los recursos que consume son mínimos y la cantidad de posibles fallos menor.
enero 14th, 2010 a las 11:47
Gracias por tu sugerencia. Sí lo había pensado, de hecho, había revisado la API y tiene bastante buena pinta, pero si usamos XML es para facilitar el intercambio de datos y perfiles entre varios usuarios.
No obstante, quizás sí podría ser interesante almacenarlo todo en una base de datos SQLite, pues sería más eficiente y siempre quedaría la opción de exportar los perfiles como ficheros XML. La verdad es que me parece una buena idea que me evitaría bastantes quebraderos de cabeza.
Gracias por la sugerencia
enero 14th, 2010 a las 14:29
De nada. ¿De donde a donde quieres intercambiar los datos de usuario? Si es dentro del mismo teléfono móvil esto lo puedes hacer con sentencias SQL sin necesidad de recurrir a formatos intermedios.
De todas formas, cada usuario puede tener su propia base de datos SQLite, que sería el equivalente a un fichero XML. La ventaja de esta aproximación es que un fichero SQLite es relativamente más sencillo de manejar que un XML (al menos, la API me parece más sencilla la de SQLite).
enero 14th, 2010 a las 14:52
Hombre, tener una base de datos para cada usuario o perfil me parece un poco matar moscas a cañonazos. La idea de los XML es poder intercambiar información fácilmente y de una forma estándar entre dispositivos.
De todas formas, ya te digo, cuanto más valoro la posibilidad de usar SQLite más me convenzo de que es lo mejor por sencillez, rendimiento y estabilidad. Además, solo habría que parsear la importación y exportación de ficheros, que no sería tan complejo y podría dejarlo para más adelante.
enero 22nd, 2010 a las 16:08
Qué proyecto es este? Cuentamé truhán!
enero 22nd, 2010 a las 16:19
Coño, mira la categoría a la que pertenece y lo ves… xD