From: drizea Date: Thu, 14 Jun 2012 16:24:28 +0000 (+0300) Subject: Application settings: added connection and credentials testing thread X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=9c85eee5dfd72a6b9e1b556626aeb0cc1ef412bf;p=working%2FEvergreen.git Application settings: added connection and credentials testing thread --- diff --git a/Open-ILS/src/Android/AndroidManifest.xml b/Open-ILS/src/Android/AndroidManifest.xml index 59a5bc7a3a..73aed056d2 100644 --- a/Open-ILS/src/Android/AndroidManifest.xml +++ b/Open-ILS/src/Android/AndroidManifest.xml @@ -5,6 +5,7 @@ android:versionName="1.0" > + (); + System.out.println("Page content " + orgFile); String orgArray = orgFile.substring( orgFile.indexOf("=")+1, orgFile.indexOf(";")); diff --git a/Open-ILS/src/Android/src/org/evergreen/android/globals/NoAccessToHttpAddress.java b/Open-ILS/src/Android/src/org/evergreen/android/globals/NoAccessToHttpAddress.java new file mode 100644 index 0000000000..89a9433790 --- /dev/null +++ b/Open-ILS/src/Android/src/org/evergreen/android/globals/NoAccessToHttpAddress.java @@ -0,0 +1,10 @@ +package org.evergreen.android.globals; + +public class NoAccessToHttpAddress extends Exception{ + + /** + * + */ + private static final long serialVersionUID = 1L; + +} diff --git a/Open-ILS/src/Android/src/org/evergreen/android/globals/NoNetworkAccessException.java b/Open-ILS/src/Android/src/org/evergreen/android/globals/NoNetworkAccessException.java new file mode 100644 index 0000000000..e13b34aafc --- /dev/null +++ b/Open-ILS/src/Android/src/org/evergreen/android/globals/NoNetworkAccessException.java @@ -0,0 +1,8 @@ +package org.evergreen.android.globals; + +public class NoNetworkAccessException extends Exception{ + /** + */ + private static final long serialVersionUID = 1L; + +} diff --git a/Open-ILS/src/Android/src/org/evergreen/android/globals/Utils.java b/Open-ILS/src/Android/src/org/evergreen/android/globals/Utils.java index 27dd591b31..0c0d058f2e 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/globals/Utils.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/globals/Utils.java @@ -1,17 +1,30 @@ package org.evergreen.android.globals; import java.io.BufferedReader; +import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.InetAddress; +import java.net.SocketTimeoutException; import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.params.BasicHttpParams; +import org.apache.http.params.HttpConnectionParams; +import org.apache.http.params.HttpParams; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.test.IsolatedContext; +import android.util.Log; public class Utils { - + private static String TAG = "Utils"; /** * Gets the net page content. * @@ -78,4 +91,87 @@ public class Utils { return in; } + + /** + * Checks to see if network access is enabled + * + * @throws NoNetworkAccessException if neither data connection or wifi are enabled + * NoAccessToHttpAddress if the library remote server can't be reached + * + */ + public static boolean checkNetworkStatus(ConnectivityManager cm, Context context ) + throws NoNetworkAccessException, NoAccessToHttpAddress{ + + boolean HaveConnectedWifi = false; + boolean HaveConnectedMobile = false; + + + boolean networkAccessEnabled = false; + boolean httpAddressAccessReachable = false; + + NetworkInfo ni = cm.getActiveNetworkInfo(); + if ( ni != null ) + { + if (ni.getType() == ConnectivityManager.TYPE_WIFI) + if (ni.isConnected()){ + HaveConnectedWifi = true; + networkAccessEnabled = true; + } + if (ni.getType() == ConnectivityManager.TYPE_MOBILE) + if (ni.isConnected()){ + HaveConnectedMobile = true; + networkAccessEnabled = true; + } + } + + + if(networkAccessEnabled){ + //check to see if httpAddress is avaialble using the network connection + // 2 seconds timeout + httpAddressAccessReachable = checkIfNetAddressIsReachable(GlobalConfigs.httpAddress); + + if(httpAddressAccessReachable == false) + throw new NoAccessToHttpAddress(); + } + + if(!networkAccessEnabled) + throw new NoNetworkAccessException(); + + return networkAccessEnabled; + + } + + public static boolean checkIfNetAddressIsReachable(String url){ + + boolean result = false; + try + { + HttpGet request = new HttpGet(url); + + HttpParams httpParameters = new BasicHttpParams(); + + //timeout to 3 seconds + HttpConnectionParams.setConnectionTimeout(httpParameters, 3000); + HttpClient httpClient = new DefaultHttpClient(httpParameters); + HttpResponse response = httpClient.execute(request); + + int status = response.getStatusLine().getStatusCode(); + + if (status == HttpStatus.SC_OK) + { + result = true; + } + + } + catch (SocketTimeoutException e) + { + result = false; // this is somewhat expected + } + catch (Exception e) { + Log.d(TAG, "Exception in is reachable " + e.getMessage()); + } + + return result; + } + } diff --git a/Open-ILS/src/Android/src/org/evergreen/android/views/ApplicationPreferences.java b/Open-ILS/src/Android/src/org/evergreen/android/views/ApplicationPreferences.java index 53070e2755..c745c5cf03 100644 --- a/Open-ILS/src/Android/src/org/evergreen/android/views/ApplicationPreferences.java +++ b/Open-ILS/src/Android/src/org/evergreen/android/views/ApplicationPreferences.java @@ -3,20 +3,34 @@ package org.evergreen.android.views; import org.evergreen.android.R; import org.evergreen.android.accountAccess.AccountAccess; import org.evergreen.android.globals.GlobalConfigs; +import org.evergreen.android.globals.NoAccessToHttpAddress; +import org.evergreen.android.globals.NoNetworkAccessException; +import org.evergreen.android.globals.Utils; +import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; +import android.net.ConnectivityManager; import android.os.Bundle; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; +import android.provider.Settings; +import android.util.Log; +import android.widget.Toast; public class ApplicationPreferences extends PreferenceActivity implements OnSharedPreferenceChangeListener{ private ProgressDialog progressDialog; + + private Context context; + + private String TAG = "ApplicationPreferences"; @Override protected void onCreate(Bundle savedInstanceState) { @@ -24,7 +38,7 @@ public class ApplicationPreferences extends PreferenceActivity implements OnShar addPreferencesFromResource(R.xml.application_preference_screen); - Context context = getApplicationContext(); + context = this; SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); //register preference listener @@ -47,29 +61,103 @@ public class ApplicationPreferences extends PreferenceActivity implements OnShar //test connection - progressDialog = ProgressDialog.show(this, "Account login", "Please wait while we test the new user account information"); + progressDialog = ProgressDialog.show(this, "Account login", "Please wait while we test the new user account information"); Thread thread = new Thread(new Runnable() { @Override public void run() { + boolean routeToAddress = true; AccountAccess account = new AccountAccess(GlobalConfigs.httpAddress); - account.authenticate(); - runOnUiThread(new Runnable() { + try{ + Utils.checkNetworkStatus((ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE), getApplicationContext()); + }catch(NoNetworkAccessException e){ + routeToAddress = false; - @Override - public void run() { - progressDialog.dismiss(); + Log.d(TAG," No network access"); + + runOnUiThread(new Runnable() { + @Override + public void run() { + progressDialog.dismiss(); + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setMessage("There seams to be no network connectivity! Do you want to start network settings?").setPositiveButton("Yes", dialogClickListener) + .setNegativeButton("No", dialogClickListener).show(); + } + }); + + }catch(NoAccessToHttpAddress e){ + + Log.d(TAG, " no route to hoast"); + routeToAddress = false; + runOnUiThread(new Runnable() { + + @Override + public void run() { + Toast.makeText(getApplicationContext(), "There is no route to host :" + GlobalConfigs.httpAddress, Toast.LENGTH_LONG); + } + + }); + } + + + if(routeToAddress){ + if(account.authenticate()){ + + runOnUiThread(new Runnable() { + + @Override + public void run() { + progressDialog.dismiss(); + Toast.makeText(context, "Autenthication successfully established :" + GlobalConfigs.httpAddress, Toast.LENGTH_LONG); + } + }); + }else{ + runOnUiThread(new Runnable() { + + @Override + public void run() { + progressDialog.dismiss(); + Toast.makeText(context, "Please check username and password ", Toast.LENGTH_LONG); + } + }); } - }); + } + else + runOnUiThread(new Runnable() { + + @Override + public void run() { + progressDialog.dismiss(); + } + }); } }); thread.start(); } +/* + * Dialog interface for starting the network settings + */ + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which){ + case DialogInterface.BUTTON_POSITIVE: + //Yes button clicked + + context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); - + break; + + case DialogInterface.BUTTON_NEGATIVE: + //No button clicked + + break; + } + } + }; }