Fixing rare crashes in the login page
authorDavid A. Velasco <dvelasco@solidgear.es>
Wed, 22 Aug 2012 14:05:32 +0000 (16:05 +0200)
committerDavid A. Velasco <dvelasco@solidgear.es>
Wed, 22 Aug 2012 14:05:32 +0000 (16:05 +0200)
src/com/owncloud/android/AccountUtils.java
src/com/owncloud/android/ui/activity/AuthenticatorActivity.java

index 9c48793..49b0a62 100644 (file)
@@ -96,13 +96,15 @@ public class AccountUtils {
      * @return webdav path for given OC version, null if OC version unknown\r
      */\r
     public static String getWebdavPath(OwnCloudVersion version) {\r
-        if (version.compareTo(OwnCloudVersion.owncloud_v4) >= 0)\r
-            return WEBDAV_PATH_4_0;\r
-        if (version.compareTo(OwnCloudVersion.owncloud_v3) >= 0\r
-                || version.compareTo(OwnCloudVersion.owncloud_v2) >= 0)\r
-            return WEBDAV_PATH_2_0;\r
-        if (version.compareTo(OwnCloudVersion.owncloud_v1) >= 0)\r
-            return WEBDAV_PATH_1_2;\r
+        if (version != null) {\r
+            if (version.compareTo(OwnCloudVersion.owncloud_v4) >= 0)\r
+                return WEBDAV_PATH_4_0;\r
+            if (version.compareTo(OwnCloudVersion.owncloud_v3) >= 0\r
+                    || version.compareTo(OwnCloudVersion.owncloud_v2) >= 0)\r
+                return WEBDAV_PATH_2_0;\r
+            if (version.compareTo(OwnCloudVersion.owncloud_v1) >= 0)\r
+                return WEBDAV_PATH_1_2;\r
+        }\r
         return null;\r
     }\r
 \r
index a109809..4f4cb96 100644 (file)
@@ -223,7 +223,11 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
 \r
             finish();\r
         } else {\r
-            dismissDialog(DIALOG_LOGIN_PROGRESS);\r
+            try {\r
+                dismissDialog(DIALOG_LOGIN_PROGRESS);\r
+            } catch (IllegalArgumentException e) {\r
+                // NOTHING TO DO ; can't find out what situation that leads to the exception in this code, but user logs signal that it happens\r
+            }\r
             TextView tv = (TextView) findViewById(R.id.account_username);\r
             tv.setError(message);\r
         }\r
@@ -268,14 +272,19 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
         URL uri = null;\r
         String webdav_path = AccountUtils.getWebdavPath(mConnChkRunnable\r
                 .getDiscoveredVersion());\r
-\r
+        if (webdav_path == null) {\r
+            onAuthenticationResult(false, getString(R.string.auth_bad_oc_version_title));\r
+            return;\r
+        }\r
+        \r
         try {\r
             mBaseUrl = prefix + url;\r
             String url_str = prefix + url + webdav_path;\r
             uri = new URL(url_str);\r
         } catch (MalformedURLException e) {\r
-            // should not happen\r
-            e.printStackTrace();\r
+            // should never happen\r
+            onAuthenticationResult(false, getString(R.string.auth_incorrect_address_title));\r
+            return;\r
         }\r
 \r
         showDialog(DIALOG_LOGIN_PROGRESS);\r
@@ -374,7 +383,6 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
                 if (uri.length() != 0) {\r
                     setResultIconAndText(R.drawable.progress_small,\r
                             R.string.auth_testing_connection);\r
-                    findViewById(R.id.buttonOK).setEnabled(false);  // avoid connect can be clicked if the test was previously passed\r
                     mConnChkRunnable = new ConnectionCheckerRunnable(uri, this);\r
                     mConnChkRunnable.setListener(this, mHandler);\r
                     mAuthThread = new Thread(mConnChkRunnable);\r
@@ -384,6 +392,9 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
                             View.INVISIBLE);\r
                     setResultIconAndText(0, 0);\r
                 }\r
+            } else {\r
+                // avoids that the 'connect' button can be clicked if the test was previously passed\r
+                findViewById(R.id.buttonOK).setEnabled(false); \r
             }\r
         } else if (view.getId() == R.id.account_password) {\r
             ImageView iv = (ImageView) findViewById(R.id.viewPassword);\r