Nueva actualización en camino

Hola, aquí estamos una vez más con nuevas noticias sobre SWADroid. En este caso, es para informaros que muy pronto tendréis una actualización disponible con la que podréis consultar información sobre las asignaturas desde SWADroid (Guía docente, enlaces, programa de teoría…) ya que, a falta de terminar los servicios Webs que hacen que  SWAD nos permita consultar esa información, el módulo que implementa estas funcionalidades en SWADroid está completamente finalizado.

Este módulo es el encargado de recoger el contenido de los siguientes apartados informativos que aparecen en SWAD:

  • Introducción.
  • Programa de teoría.
  • Programa de prácticas.
  • Guía docente.
  • Bibliografía.
  • FAQs.
  • Enlaces.

Para los más curiosos, os dejamos los pasos que han sido necesarios para  implementar dicho módulo:
1.- Crear el paquete correspondiente:

/SWADMain/src/es/ugr/swad/swadroid/modules/information

2.-Crear el archivo .java correspondiente y su clase dentro de él:

Archivo–>Information.java
publicclass Information extends Module { … }

3.-Declarar el módulo en el archivo AndroidManifest.xml.

<activity android:name=“es.ugr.swad.swadroid.modules.information.Information”
android:label=“@string/informationModuleLabel” android:theme=“@@android:style/Theme.NoTitleBar” >
</activity>
4.-Añadir en /res/values/strings.xml  las etiquetas correspondientes:

Por ejemplo:

<string name=“informationModuleLabel”>Information</string>
<string name=“introductionModuleLabel”>Introduction</string>
5.- Añadir una llamada al módulo desde la actividad que debe llamarlo:

Por ejemplo:

} elseif (keyword.equals(getString(R.string.introductionModuleLabel))) {
activity = new Intent(this, Information.class); activity.putExtra(“requestCode”,Constants.INTRODUCTION_REQUEST_CODE); startActivityForResult(activity,Constants.INTRODUCTION_REQUEST_CODE);
}

El resto del código correspondiente a este apartado, puedes consultarlo Aquí (Líneas 228 a 256).

6.- Añadir las diferentes opciones al apartado correspondiente del menú principal

En este caso, se añaden a Asignatura, por lo que no hay que crear un nuevo apartado en el menú, si no añadirlas dentro de Asignatura.

Por ejemplo:
//Introduction category map =new HashMap<String, Object>();
map.put(NAME, getString(R.string.introductionModuleLabel));
map.put(IMAGE, getResources().getDrawable(R.drawable.notif));
courseData.add(map);

En lugar de hacer:  

final ArrayList<HashMap<String, Object>> headerData = new ArrayList<HashMap<String, Object>>();
final HashMap<String, Object> introduction = new HashMap<String, Object>();
introduction.put(NAME, getString(R.string.introduction));

Que es lo que se haría si quisiéramos añadir una nueva opción al menú en lugar de   que esta opción aparezca dentro de otra.
El resto del código correspondiente a este apartado, puedes consultarlo Aquí (Líneas  652 a 709).

7.- Implementar el interfaz gráfico:

Que dependiendo del módulo que estemos implementando contendrá más o menos elementos. En el caso del módulo informativo el interfaz gráfico va a ser el siguiente:

<?xml version=“1.0” encoding=“utf-8”?>

<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android&#8221; android:layout_width=“match_parent” android:layout_height=“match_parent” android:background=“@color/background” android:orientation=“vertical”>

<include layout=“@layout/action_bar”/>
<include android:id=“@+id/courseNameLayout” layout=“@layout/course_or_group_name”/>

<WebView android:id=“@+id/webview_dialog” android:layout_width=“match_parent” android:layout_height=“match_parent” >

</WebView>

</LinearLayout>

8.- Implementar el módulo:

Todos los módulos de SWADroid deben heredar de la clase Module, que implementa una serie de métodos abstractos que todos los módulos están obligados a implementar para mantener el flujo de ejecución de SWADroid. Estos métodos son:

  • connect

Este método se encarga de mostrar un cuadro de dialogo de progreso, si es necesario, y de lanzar la ejecución de la tarea implementada por el modulo en una hebra en segundo plano. En el caso de este módulo sería:

String progressDescription = getString(R.string.informationProgressDescription);
int progressTitle = R.string.informationProgressTitle;
startConnection(true, progressDescription, progressTitle);

  • postConnect

Este método se encarga de realizar las acciones que deban llevarse a cabo después de haber ejecutado la tarea principal del modulo, como por ejemplo el refresco de la pantalla para actualizar la información mostrada. Para el módulo informativo:

WebView webview = (WebView) this.findViewById(R.id.contentWebView);

if (infoSrc.equals(“none”)) {

webview.loadData(getString(R.string.emptyInformation), “text/html; charset=UTF-8”, null);

} elseif (infoSrc.equals(“URL”)) {

webview.loadUrl(infoTxt);

} else {

webview.loadData(infoTxt, “text/html; charset=UTF-8”, null);

}

finish();

}

  • requestService

Este método implementa la tarea principal que llevara a cabo el modulo, que normalmente consiste en construir y enviar una petición a un servicio Web de SWAD y procesar la respuesta devuelta por el mismo. El flujo de trabajo de este método es el siguiente:

a) Configurar el nombre del servicio Web al que se enviara la petición (está configurado durante la ejecución del método onCreate del modulo, que se ejecuta la primera vez que se lanza el modulo durante la ejecución de SWADroid, pero también puede hacerse en este método).

setMETHOD_NAME (“getCourseInfo”);

b) Inicializar la petición, añadir a esta los parámetros requeridos por el servicio Web enviarla a dicho servicio:

createRequest(SOAPClient.CLIENT_TYPE);
addParam(“wsKey”, Constants.getLoggedUser().getWsKey());
addParam(“courseCode”, Constants.getSelectedCourseCode());
addParam(“infoType”, infoTypeToAdd); sendRequest(User.class, false);

c) Procesar la respuesta del servicio Web:

if (result != null) {
SoapObject soap = (SoapObject) result; infoSrc = soap.getProperty(infoSrc).toString();
infoTxt = soap.getPrimitiveProperty(infoTxt).toString();
// Request finalized without errors
setResult(RESULT_OK);
} else {
infoTxt = getString(R.string.connectionRequired);
}

Como ya he dicho, estos métodos son los que TODOS los módulos implementan, pero dependiendo de qué modulo estemos implementando, necesitaremos además de otros.

Cabe destacar el método onStart, que es el encargado de iniciar el flujo de ejecución del módulo informativo y cuyo código es el siguiente:

super.onStart();
try {
runConnection();
} catch (Exception e) {
String errorMsg = getString(R.string.errorServerResponseMsg);
error(TAG, errorMsg, e, true);
}

El resto de métodos que se han usado para implementar el módulo informativo pueden verse Aquí.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s