Minor fixes

git-svn-id: https://forja.rediris.es/svn/cusl6-swadroid/trunk@113 5bc14d19-1e4b-4ba2-aa50-860af135f48c
This commit is contained in:
Juan Miguel Boyero Corral 2011-11-22 22:09:30 +00:00
parent df40721f08
commit 76c9d69068
6 changed files with 2160 additions and 69 deletions

View File

@ -24,7 +24,7 @@
</application> </application>
<uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="11"></uses-sdk> <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="10"></uses-sdk>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<supports-screens android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:anyDensity="true" android:largeScreens="true" android:xlargeScreens="true"></supports-screens> <supports-screens android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:anyDensity="true" android:largeScreens="true" android:xlargeScreens="true"></supports-screens>
</manifest> </manifest>

File diff suppressed because it is too large Load Diff

View File

@ -182,7 +182,7 @@ public class SWADMain extends ListActivity {
db.open(this, this.getPackageName()); db.open(this, this.getPackageName());
dbHelper = new DataBaseHelper(db); dbHelper = new DataBaseHelper(db);
prefs.getPreferences(getBaseContext()); prefs.getPreferences(getBaseContext());
SecureConnection.initSecureConnection(); SecureConnection.initSecureConnection();
if(prefs.getFirstRun()) { if(prefs.getFirstRun()) {

View File

@ -21,13 +21,14 @@ package es.ugr.swad.swadroid.modules;
import android.os.Bundle; import android.os.Bundle;
import android.widget.Toast; import android.widget.Toast;
import es.ugr.swad.swadroid.Base64;
import es.ugr.swad.swadroid.Global; import es.ugr.swad.swadroid.Global;
import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.model.User; import es.ugr.swad.swadroid.model.User;
import java.io.IOException; import java.io.IOException;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import org.kobjects.base64.Base64;
import org.ksoap2.SoapFault; import org.ksoap2.SoapFault;
import org.ksoap2.serialization.KvmSerializable; import org.ksoap2.serialization.KvmSerializable;
import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserException;
@ -71,9 +72,10 @@ public class Login extends Module {
protected void connect() { protected void connect() {
String progressDescription = getString(R.string.loginProgressDescription); String progressDescription = getString(R.string.loginProgressDescription);
int progressTitle = R.string.loginProgressTitle; int progressTitle = R.string.loginProgressTitle;
Connect con = new Connect(false, progressDescription, progressTitle);
Toast.makeText(this, progressDescription, Toast.LENGTH_LONG).show(); Toast.makeText(this, progressDescription, Toast.LENGTH_LONG).show();
new Connect(false, progressDescription, progressTitle).execute(); con.execute();
} }
/** /**
@ -93,8 +95,7 @@ public class Login extends Module {
//Encrypts user password with SHA-512 and encodes it to Base64UrlSafe //Encrypts user password with SHA-512 and encodes it to Base64UrlSafe
md = MessageDigest.getInstance("SHA-512"); md = MessageDigest.getInstance("SHA-512");
md.update(prefs.getUserPassword().getBytes()); md.update(prefs.getUserPassword().getBytes());
//userPassword = new String(Base64.encode(md.digest(), Base64.URL_SAFE + Base64.NO_PADDING + Base64.NO_WRAP)); userPassword = new String(Base64.encodeBytes(md.digest()));
userPassword = new String(Base64.encode(md.digest()));
userPassword = userPassword.replace('+','-').replace('/','_').replace('=', ' ').replaceAll("\\s+", "").trim(); userPassword = userPassword.replace('+','-').replace('/','_').replace('=', ' ').replaceAll("\\s+", "").trim();
//Creates webservice request, adds required params and sends request to webservice //Creates webservice request, adds required params and sends request to webservice
@ -119,7 +120,6 @@ public class Login extends Module {
//Request finalized without errors //Request finalized without errors
setResult(RESULT_OK); setResult(RESULT_OK);
Global.setLogged(true);
} }
} else { } else {
//Request finalized without errors //Request finalized without errors

View File

@ -48,7 +48,7 @@ import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault; import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE; import org.ksoap2.transport.KeepAliveHttpsTransportSE;
import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserException;
import com.android.dataframework.DataFramework; import com.android.dataframework.DataFramework;
@ -73,7 +73,7 @@ public abstract class Module extends ListActivity {
/** /**
* URL param for webservice request. * URL param for webservice request.
*/ */
String URL = "https://swad.ugr.es/"; String URL = "swad.ugr.es";
/** /**
* Preferences of the activity. * Preferences of the activity.
*/ */
@ -102,6 +102,10 @@ public abstract class Module extends ListActivity {
* Connection available flag * Connection available flag
*/ */
protected static boolean isConnected; protected static boolean isConnected;
/**
* Connection timeout in milliseconds
*/
private static int TIMEOUT = 10000;
/** /**
* Connects to SWAD and gets user data. * Connects to SWAD and gets user data.
@ -260,7 +264,9 @@ public abstract class Module extends ListActivity {
* @see android.app.Activity#onCreate() * @see android.app.Activity#onCreate()
*/ */
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
Log.d(Global.MODULE_TAG, "onCreate()");
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
prefs.getPreferences(getBaseContext()); prefs.getPreferences(getBaseContext());
@ -275,24 +281,23 @@ public abstract class Module extends ListActivity {
db.open(this, this.getPackageName()); db.open(this, this.getPackageName());
dbHelper = new DataBaseHelper(db); dbHelper = new DataBaseHelper(db);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); Log.e(e.getClass().getSimpleName(), e.getMessage());
error(e.getMessage());
} }
} }
Log.d(Global.MODULE_TAG, "onCreate()");
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see android.app.Activity#onPause() * @see android.app.Activity#onPause()
*/ */
@Override @Override
protected void onPause() { protected void onPause() {
Log.d(Global.MODULE_TAG, "onPause()");
super.onPause(); super.onPause();
if(errorDialog != null) { if(errorDialog != null) {
errorDialog.dismiss(); errorDialog.dismiss();
} }
Log.d(Global.MODULE_TAG, "onPause()");
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -300,17 +305,8 @@ public abstract class Module extends ListActivity {
*/ */
@Override @Override
protected void onDestroy() { protected void onDestroy() {
super.onDestroy();
Log.d(Global.MODULE_TAG, "onDestroy()"); Log.d(Global.MODULE_TAG, "onDestroy()");
} super.onDestroy();
/* (non-Javadoc)
* @see android.app.Activity#onNewIntent(android.content.Intent)
*/
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.d(Global.MODULE_TAG, "onNewIntent()");
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -318,8 +314,8 @@ public abstract class Module extends ListActivity {
*/ */
@Override @Override
protected void onRestart() { protected void onRestart() {
super.onRestart();
Log.d(Global.MODULE_TAG, "onRestart()"); Log.d(Global.MODULE_TAG, "onRestart()");
super.onRestart();
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -327,8 +323,8 @@ public abstract class Module extends ListActivity {
*/ */
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume();
Log.d(Global.MODULE_TAG, "onResume()"); Log.d(Global.MODULE_TAG, "onResume()");
super.onResume();
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -336,8 +332,8 @@ public abstract class Module extends ListActivity {
*/ */
@Override @Override
protected void onStart() { protected void onStart() {
super.onStart();
Log.d(Global.MODULE_TAG, "onStart()"); Log.d(Global.MODULE_TAG, "onStart()");
super.onStart();
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -345,15 +341,17 @@ public abstract class Module extends ListActivity {
*/ */
@Override @Override
protected void onStop() { protected void onStop() {
super.onStop();
Log.d(Global.MODULE_TAG, "onStop()"); Log.d(Global.MODULE_TAG, "onStop()");
super.onStop();
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see android.app.Activity#onActivityResult() * @see android.app.Activity#onActivityResult()
*/ */
@Override @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(Global.MODULE_TAG, "onActivityResult()");
if (resultCode == Activity.RESULT_OK) { if (resultCode == Activity.RESULT_OK) {
//Bundle extras = data.getExtras(); //Bundle extras = data.getExtras();
@ -371,9 +369,12 @@ public abstract class Module extends ListActivity {
break; break;
} }
} else {
switch(requestCode) {
case Global.LOGIN_REQUEST_CODE:
break;
}
} }
Log.d(Global.MODULE_TAG, "onActivityResult()");
} }
/** /**
@ -401,33 +402,24 @@ public abstract class Module extends ListActivity {
* @throws SoapFault * @throws SoapFault
* @throws InstantiationException * @throws InstantiationException
* @throws IllegalAccessException * @throws IllegalAccessException
* @throws XmlPullParserException
*/ */
protected void sendRequest(Class cl, boolean simple) protected void sendRequest(Class cl, boolean simple)
throws IOException, SoapFault, IllegalAccessException, InstantiationException { throws IOException, SoapFault, IllegalAccessException, InstantiationException, XmlPullParserException {
int numRetrys = 1; KeepAliveHttpsTransportSE connection = new KeepAliveHttpsTransportSE(URL, 443, "", TIMEOUT);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
System.setProperty("http.keepAlive", "false");
envelope.setOutputSoapObject(request); envelope.setOutputSoapObject(request);
envelope.addMapping(NAMESPACE, cl.getSimpleName(), cl); envelope.addMapping(NAMESPACE, cl.getSimpleName(), cl);
connection.call(SOAP_ACTION, envelope);
//If an XmlPullParserException occurs, retry once in order to workaround an Android emulator bug
do { if(simple && !(envelope.getResponse() instanceof SoapFault)) {
try { result = envelope.bodyIn;
androidHttpTransport.call(SOAP_ACTION, envelope); } else {
result = envelope.getResponse();
if(simple) { }
result = envelope.bodyIn;
} else {
result = envelope.getResponse();
}
} catch(XmlPullParserException ex) {
Log.e(Global.MODULE_TAG, getString(R.string.errorMsgWorkaroundEmulator));
Log.e(Global.MODULE_TAG, ex.getLocalizedMessage());
ex.printStackTrace();
}
} while(numRetrys-- > 0);
} }
/** /**
@ -469,7 +461,6 @@ public abstract class Module extends ListActivity {
} }
}) })
.setIcon(R.drawable.erroricon).show(); .setIcon(R.drawable.erroricon).show();
} }
/** /**
@ -521,7 +512,7 @@ public abstract class Module extends ListActivity {
int progressTitle; int progressTitle;
boolean showDialog; boolean showDialog;
/** /**
* Shows progress dialog and connects to SWAD in background * Shows progress dialog and connects to SWAD in background
* @param progressDescription Description to be showed in dialog * @param progressDescription Description to be showed in dialog
* @param progressTitle Title to be showed in dialog * @param progressTitle Title to be showed in dialog
@ -537,7 +528,9 @@ public abstract class Module extends ListActivity {
* @see android.app.Activity#onPreExecute() * @see android.app.Activity#onPreExecute()
*/ */
@Override @Override
protected void onPreExecute() { protected void onPreExecute() {
Log.d(Global.MODULE_TAG, "onPreExecute()");
if(showDialog) { if(showDialog) {
dialog.setMessage(progressDescription); dialog.setMessage(progressDescription);
dialog.setTitle(progressTitle); dialog.setTitle(progressTitle);
@ -549,18 +542,20 @@ public abstract class Module extends ListActivity {
* @see android.app.Activity#doInBackground() * @see android.app.Activity#doInBackground()
*/ */
@Override @Override
protected Void doInBackground(String... urls) { protected Void doInBackground(String... urls) {
Log.d(Global.MODULE_TAG, "doInBackground()");
try { try {
//Sends webservice request //Sends webservice request
requestService(); requestService();
/** /**
* If an exception occurs, capture and points exception pointer * If an exception occurs, capture, points exception pointer
* to it. * to it and shows error message according to exception type.
*/ */
} catch (SoapFault ex) { } catch (SoapFault ex) {
e = ex; e = ex;
} catch (Exception ex) { } catch (Exception ex) {
e = ex; e = ex;
} }
return null; return null;
@ -570,14 +565,14 @@ public abstract class Module extends ListActivity {
* @see android.app.Activity#onPostExecute() * @see android.app.Activity#onPostExecute()
*/ */
@Override @Override
protected void onPostExecute(Void unused) { protected void onPostExecute(Void unused) {
Log.d(Global.MODULE_TAG, "onPostExecute()");
if(dialog.isShowing()) { if(dialog.isShowing()) {
dialog.dismiss(); dialog.dismiss();
} }
postConnect(); if(e != null) {
if(e != null) {
/** /**
* If an exception has occurred, shows error message according to * If an exception has occurred, shows error message according to
* exception type. * exception type.
@ -587,14 +582,16 @@ public abstract class Module extends ListActivity {
Log.e(es.getClass().getSimpleName(), es.getMessage()); Log.e(es.getClass().getSimpleName(), es.getMessage());
error(es.getMessage()); error(es.getMessage());
} else { } else {
Log.e(e.getClass().getSimpleName(), e.toString()); Log.e(e.getClass().getSimpleName(), e.getMessage());
error(e.toString()); error(e.getMessage());
} }
//Request finalized with errors //Request finalized with errors
e.printStackTrace(); e.printStackTrace();
setResult(RESULT_CANCELED); setResult(RESULT_CANCELED);
} } else {
} postConnect();
}
}
} }
} }

View File

@ -26,11 +26,15 @@ import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapObject;
import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserException;
import com.android.dataframework.DataFramework;
import es.ugr.swad.swadroid.Global; import es.ugr.swad.swadroid.Global;
import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.gui.NotificationsCursorAdapter; import es.ugr.swad.swadroid.gui.NotificationsCursorAdapter;
import es.ugr.swad.swadroid.model.DataBaseHelper;
import es.ugr.swad.swadroid.model.User; import es.ugr.swad.swadroid.model.User;
import es.ugr.swad.swadroid.model.Notification; import es.ugr.swad.swadroid.model.Notification;
import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
@ -92,6 +96,18 @@ public class Notifications extends Module {
setMETHOD_NAME("getNotifications"); setMETHOD_NAME("getNotifications");
} }
/* (non-Javadoc)
* @see es.ugr.swad.swadroid.modules.Module#onResume()
*/
@Override
protected void onResume() {
super.onResume();
//Refresh data on screen
dbCursor = dbHelper.getDb().getCursor(Global.DB_TABLE_NOTIFICATIONS, selection, orderby);
adapter.changeCursor(dbCursor);
}
/* (non-Javadoc) /* (non-Javadoc)
* @see es.ugr.swad.swadroid.modules.Module#requestService() * @see es.ugr.swad.swadroid.modules.Module#requestService()
*/ */
@ -159,4 +175,16 @@ public class Notifications extends Module {
dbCursor = dbHelper.getDb().getCursor(Global.DB_TABLE_NOTIFICATIONS, selection, orderby); dbCursor = dbHelper.getDb().getCursor(Global.DB_TABLE_NOTIFICATIONS, selection, orderby);
adapter.changeCursor(dbCursor); adapter.changeCursor(dbCursor);
} }
public void clearNotifications(Context context) {
try {
DataFramework db = DataFramework.getInstance();
db.open(context, context.getPackageName());
dbHelper = new DataBaseHelper(db);
dbHelper.emptyTable(Global.DB_TABLE_NOTIFICATIONS);
} catch (Exception e) {
e.printStackTrace();
}
}
} }