Added connection check

git-svn-id: https://forja.rediris.es/svn/cusl6-swadroid/trunk@86 5bc14d19-1e4b-4ba2-aa50-860af135f48c
This commit is contained in:
Juan Miguel Boyero Corral 2011-11-22 22:06:51 +00:00
parent b1cd237c26
commit 8053b48928
6 changed files with 78 additions and 35 deletions

View File

@ -21,6 +21,7 @@
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-sdk android:targetSdkVersion="4" android:minSdkVersion="4"></uses-sdk>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
</manifest>

View File

@ -31,13 +31,14 @@ public final class R {
public static final class string {
public static final int app_name=0x7f060000;
public static final int close_dialog=0x7f060003;
public static final int errorCopyMsg_DB=0x7f060016;
public static final int errorCopyMsg_DB=0x7f060015;
public static final int errorMsgLaunchingActivity=0x7f060013;
public static final int errorMsgNoConnection=0x7f060016;
public static final int errorMsgWorkaroundEmulator=0x7f060014;
public static final int loginModuleLabel=0x7f060001;
public static final int loginProgressDescription=0x7f060012;
public static final int loginProgressTitle=0x7f060011;
public static final int loginSuccessfulMsg=0x7f060017;
public static final int loginSuccessfulMsg=0x7f060018;
public static final int loginTitle_menu=0x7f060010;
public static final int preferencesTitle_menu=0x7f06000f;
public static final int saveMsg_preferences=0x7f06000c;
@ -45,7 +46,7 @@ public final class R {
public static final int saveTitle_preferences=0x7f06000e;
public static final int set_preferences=0x7f060004;
public static final int title_error_dialog=0x7f060002;
public static final int upgradeMsg_DB=0x7f060015;
public static final int upgradeMsg_DB=0x7f060017;
public static final int userIDName_preferences=0x7f060006;
public static final int userIDSummary_preferences=0x7f060007;
public static final int userIDTitle_preferences=0x7f060008;

View File

@ -20,7 +20,7 @@
<string name="loginProgressTitle">Identificación</string>
<string name="loginProgressDescription">Conectando...</string>
<string name="errorMsgWorkaroundEmulator">Mierda. Ese bug del emulador de Android ha vuelto a aparecer. Reintentando...</string>
<string name="errorMsgLaunchingActivity">Ha ocurrido un error durante la ejecución de la operación</string>
<string name="upgradeMsg_DB">Actualizando base de datos...</string><string name="errorCopyMsg_DB">Error copiando base de datos</string>
<string name="errorMsgLaunchingActivity">Ha ocurrido un error durante la ejecución de la operación</string><string name="errorMsgNoConnection">No hay conexión</string>
<string name="errorCopyMsg_DB">Error copiando base de datos</string><string name="upgradeMsg_DB">Actualizando base de datos...</string>
<string name="loginSuccessfulMsg">Conectado</string>
</resources>

View File

@ -21,7 +21,8 @@
<string name="loginProgressDescription">Connecting...</string>
<string name="errorMsgLaunchingActivity">An error occurred during the execution of the operation</string>
<string name="errorMsgWorkaroundEmulator">Damn. That Android emulator bug appeared again. Retrying...</string>
<string name="upgradeMsg_DB">Upgrading database...</string>
<string name="errorCopyMsg_DB">Error copying database</string>
<string name="loginSuccessfulMsg">Login successful</string>
<string name="errorMsgNoConnection">No connection found</string><string name="upgradeMsg_DB">Upgrading database...</string><string name="loginSuccessfulMsg">Login successful</string>
</resources>

View File

@ -24,6 +24,7 @@ import android.os.AsyncTask;
import android.os.Bundle;
//import android.util.Base64;
import android.util.Log;
import android.widget.Toast;
import es.ugr.swad.swadroid.Global;
import es.ugr.swad.swadroid.R;
import es.ugr.swad.swadroid.model.User;
@ -47,6 +48,7 @@ public class Login extends Module {
* User password.
*/
private String userPassword;
private boolean isConnected;
/**
* Called when activity is first created.
@ -56,6 +58,12 @@ public class Login extends Module {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setMETHOD_NAME("loginByUserPasswordKey");
isConnected = connectionAvailable(this);
if (!isConnected) {
Toast.makeText(this, R.string.errorMsgNoConnection, Toast.LENGTH_LONG).show();
}
connect();
}
@ -76,33 +84,35 @@ public class Login extends Module {
*/
private void requestService()
throws NoSuchAlgorithmException, IOException, XmlPullParserException, SoapFault {
//Encrypts user password with SHA-512 and encodes it to Base64UrlSafe
md = MessageDigest.getInstance("SHA-512");
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.encode(md.digest()));
userPassword = userPassword.replace('+','-').replace('/','_').replace('=', ' ').replaceAll("\\s+", "").trim();
//Creates webservice request, adds required params and sends request to webservice
createRequest();
addParam("userID", prefs.getUserID());
addParam("userPassword", userPassword);
addParam("appKey", Global.getAppKey());
sendRequest();
//Stores user data returned by webservice response
User.setUserCode(result.get(0).toString());
User.setUserTypeCode(result.get(1).toString());
User.setWsKey(result.get(2).toString());
User.setUserID(result.get(3).toString());
User.setUserSurname1(result.get(4).toString());
User.setUserSurname2(result.get(5).toString());
User.setUserFirstName(result.get(6).toString());
User.setUserTypeName(result.get(7).toString());
//Request finalized without errors
setResult(RESULT_OK);
if (isConnected) {
//Encrypts user password with SHA-512 and encodes it to Base64UrlSafe
md = MessageDigest.getInstance("SHA-512");
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.encode(md.digest()));
userPassword = userPassword.replace('+','-').replace('/','_').replace('=', ' ').replaceAll("\\s+", "").trim();
//Creates webservice request, adds required params and sends request to webservice
createRequest();
addParam("userID", prefs.getUserID());
addParam("userPassword", userPassword);
addParam("appKey", Global.getAppKey());
sendRequest();
//Stores user data returned by webservice response
User.setUserCode(result.get(0).toString());
User.setUserTypeCode(result.get(1).toString());
User.setWsKey(result.get(2).toString());
User.setUserID(result.get(3).toString());
User.setUserSurname1(result.get(4).toString());
User.setUserSurname2(result.get(5).toString());
User.setUserFirstName(result.get(6).toString());
User.setUserTypeName(result.get(7).toString());
//Request finalized without errors
setResult(RESULT_OK);
}
finish();
}

View File

@ -21,8 +21,11 @@ package es.ugr.swad.swadroid.modules;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.util.Log;
import es.ugr.swad.swadroid.Global;
@ -43,6 +46,10 @@ import org.xmlpull.v1.XmlPullParserException;
* Superclass for encapsulate common behavior of all modules.
* @author Juan Miguel Boyero Corral <juanmi1982@gmail.com>
*/
/**
* @author Juan Miguel Boyero Corral <juanmi1982@gmail.com>
*
*/
public class Module extends Activity {
/**
* SOAP_ACTION param for webservice request.
@ -266,6 +273,29 @@ public class Module extends Activity {
result.add(ks.getProperty(i)); //if complex type is present then you can cast this to SoapObject and if primitive type is returned you can use toString() to get actual value.
}
}
/**
* Checks if any connection is available
* @param ctx Application context
* @return true if there is a connection available, false in other case
*/
public static boolean connectionAvailable(Context ctx){
boolean connAvailable = false;
ConnectivityManager connec = (ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
//Survey all networks (wifi, gprs...)
NetworkInfo[] networks = connec.getAllNetworkInfo();
for(int i=0; i<2; i++){
//If any of them has a connection available, put boolean to true
if (networks[i].isConnected()){
connAvailable = true;
}
}
//If boolean remains false there is no connection available
return connAvailable;
}
/**
* Shows an error message.