diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java index 09eee3f1..8a624ca5 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java @@ -456,12 +456,7 @@ public class IITC_Mobile extends Activity { mIitcWebView.loadUrl("javascript: window.show('map');"); return true; case R.id.reload_button: - mActionBar.setTitle(getString(R.string.app_name)); - mBackStack.clear(); - setActionBarHomeEnabledWithUp(false); - // iitc starts on map after reload - mCurrentPane = android.R.id.home; - this.loadUrl(mIntelUrl); + reloadIITC(); return true; case R.id.toggle_fullscreen: toggleFullscreen(); @@ -518,6 +513,15 @@ public class IITC_Mobile extends Activity { } } + public void reloadIITC() { + mActionBar.setTitle(getString(R.string.app_name)); + mBackStack.clear(); + setActionBarHomeEnabledWithUp(false); + // iitc starts on map after reload + mCurrentPane = android.R.id.home; + this.loadUrl(mIntelUrl); + } + private void loadIITC() { try { mIitcWebView.getWebViewClient().loadIITC_JS(this); diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java index 625f5678..a86ceea7 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java @@ -25,11 +25,13 @@ public class IITC_WebView extends WebView { private WebSettings mSettings; private IITC_WebViewClient mIitcWebViewClient; private IITC_JSInterface mJsInterface; + private Context mContext; private boolean mDisableJs = false; // init web view private void iitc_init(Context c) { if (this.isInEditMode()) return; + mContext = c; mSettings = this.getSettings(); mSettings.setJavaScriptEnabled(true); mSettings.setDomStorageEnabled(true); @@ -40,7 +42,7 @@ public class IITC_WebView extends WebView { + "/databases/"); mSettings.setAppCachePath(this.getContext().getCacheDir() .getAbsolutePath()); - this.mJsInterface = new IITC_JSInterface(c); + this.mJsInterface = new IITC_JSInterface(mContext); this.addJavascriptInterface(mJsInterface, "android"); this.setWebChromeClient(new WebChromeClient() { @@ -134,7 +136,7 @@ public class IITC_WebView extends WebView { url = url.replace("https://", "http://"); // disable splash screen if a http error code is responded - new CheckHttpResponse(mJsInterface).execute(url); + new CheckHttpResponse(mJsInterface, mContext).execute(url); Log.d("iitcm", "loading url: " + url); } super.loadUrl(url); diff --git a/mobile/src/com/cradle/iitc_mobile/async/CheckHttpResponse.java b/mobile/src/com/cradle/iitc_mobile/async/CheckHttpResponse.java index dd4cd3ff..811864a5 100644 --- a/mobile/src/com/cradle/iitc_mobile/async/CheckHttpResponse.java +++ b/mobile/src/com/cradle/iitc_mobile/async/CheckHttpResponse.java @@ -1,9 +1,14 @@ package com.cradle.iitc_mobile.async; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; import android.os.AsyncTask; import android.util.Log; import com.cradle.iitc_mobile.IITC_JSInterface; +import com.cradle.iitc_mobile.IITC_Mobile; +import com.cradle.iitc_mobile.IITC_WebView; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; @@ -18,16 +23,18 @@ import java.io.IOException; * since network operations shouldn't be done on main UI thread * (NetworkOnMainThread exception is thrown) we use an async task for this. */ -public class CheckHttpResponse extends AsyncTask { +public class CheckHttpResponse extends AsyncTask { private IITC_JSInterface mJsInterface; + private Context mContext; - public CheckHttpResponse(IITC_JSInterface jsInterface) { + public CheckHttpResponse(IITC_JSInterface jsInterface, Context c) { + mContext = c; mJsInterface = jsInterface; }; @Override - protected Void doInBackground(String... urls) { + protected Boolean doInBackground(String... urls) { // check http responses and disable splash screen on error HttpGet httpRequest = new HttpGet(urls[0]); HttpClient httpclient = new DefaultHttpClient(); @@ -38,11 +45,53 @@ public class CheckHttpResponse extends AsyncTask { if (code != HttpStatus.SC_OK) { Log.d("iitcm", "received error code: " + code); mJsInterface.removeSplashScreen(); + // TODO: remove when google login issue is fixed + if (urls[0].contains("uberauth=WILL_NOT_SIGN_IN")) { + return true; + } } } catch (IOException e) { e.printStackTrace(); } - return null; + return false; } + /* + * TEMPORARY WORKAROUND + * redirect to FAQ on google login fail + */ + @Override + protected void onPostExecute(Boolean aBoolean) { + if (aBoolean) { + Log.d("iitcm", "google auth error, redirecting to work-around page"); + AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mContext); + + // set title + alertDialogBuilder.setTitle("LOGIN FAILED!"); + + // set dialog message + alertDialogBuilder + .setMessage("This is caused by Google and hopefully fixed soon. " + + "To workaround this issue:\n" + + "• Choose 'Cancel' when asked to choose an account " + + "and manually enter your email address and password into the web page\n" + + "• If you don't see the account chooser, delete apps cache/data " + + "to force a new login session and handle it as described above") + .setCancelable(true) + .setNeutralButton("Reload now", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.cancel(); + IITC_Mobile iitc_mobile = (IITC_Mobile) mContext; + iitc_mobile.reloadIITC(); + } + }); + + // create alert dialog + AlertDialog alertDialog = alertDialogBuilder.create(); + + // show it + alertDialog.show(); + } + } }