|
@@ -25,45 +25,67 @@ package com.owncloud.android.utils;
|
|
|
|
|
|
import android.accounts.Account;
|
|
|
import android.content.Context;
|
|
|
-import android.util.Log;
|
|
|
|
|
|
import com.evernote.android.job.JobRequest;
|
|
|
import com.evernote.android.job.util.Device;
|
|
|
-import com.owncloud.android.MainApp;
|
|
|
import com.owncloud.android.authentication.AccountUtils;
|
|
|
import com.owncloud.android.lib.common.OwnCloudAccount;
|
|
|
+import com.owncloud.android.lib.common.utils.Log_OC;
|
|
|
+import com.owncloud.android.lib.resources.status.OwnCloudVersion;
|
|
|
|
|
|
-import org.apache.commons.httpclient.util.HttpURLConnection;
|
|
|
+import org.json.JSONException;
|
|
|
+import org.json.JSONObject;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.net.URL;
|
|
|
|
|
|
+import javax.net.ssl.HttpsURLConnection;
|
|
|
+
|
|
|
public class ConnectivityUtils {
|
|
|
|
|
|
private final static String TAG = ConnectivityUtils.class.getName();
|
|
|
|
|
|
public static boolean isInternetWalled(Context context) {
|
|
|
- Account currentAccount = AccountUtils.getCurrentOwnCloudAccount(context);
|
|
|
- try {
|
|
|
- OwnCloudAccount ocAccount = null;
|
|
|
- if (currentAccount != null && !Device.getNetworkType(context).equals(JobRequest.NetworkType.ANY)) {
|
|
|
- ocAccount = new OwnCloudAccount(currentAccount, context);
|
|
|
- try {
|
|
|
- HttpURLConnection urlc = (HttpURLConnection)
|
|
|
- (new URL(ocAccount.getBaseUri() + "/204")
|
|
|
- .openConnection());
|
|
|
- urlc.setRequestProperty("User-Agent", MainApp.getUserAgent());
|
|
|
- urlc.setRequestProperty("Connection", "close");
|
|
|
- urlc.setConnectTimeout(1500);
|
|
|
- urlc.connect();
|
|
|
- return !(urlc.getResponseCode() == 204 &&
|
|
|
- urlc.getContentLength() == 0);
|
|
|
- } catch (IOException e) {
|
|
|
- Log.e(TAG, "Error checking internet connection", e);
|
|
|
+ if (!Device.getNetworkType(context).equals(JobRequest.NetworkType.ANY)) {
|
|
|
+ try {
|
|
|
+ Account account = AccountUtils.getCurrentOwnCloudAccount(context);
|
|
|
+ OwnCloudAccount ocAccount = new OwnCloudAccount(account, context);
|
|
|
+ OwnCloudVersion serverVersion = AccountUtils.getServerVersion(account);
|
|
|
+
|
|
|
+ URL url;
|
|
|
+ if (serverVersion.compareTo(OwnCloudVersion.nextcloud_13) > 0) {
|
|
|
+ url = new URL(ocAccount.getBaseUri() + "/index.php/204");
|
|
|
+ } else {
|
|
|
+ url = new URL(ocAccount.getBaseUri() + "/status.php");
|
|
|
+ }
|
|
|
+ HttpsURLConnection urlc = (HttpsURLConnection) (url.openConnection());
|
|
|
+ urlc.setRequestProperty("User-Agent", "Android");
|
|
|
+ urlc.setRequestProperty("Connection", "close");
|
|
|
+ urlc.setConnectTimeout(2500);
|
|
|
+ urlc.connect();
|
|
|
+
|
|
|
+ if (serverVersion.compareTo(OwnCloudVersion.nextcloud_13) > 0) {
|
|
|
+ return !(urlc.getResponseCode() == 204 && urlc.getContentLength() == 0);
|
|
|
+ } else {
|
|
|
+ if (urlc.getResponseCode() == 200) {
|
|
|
+ // try parsing json to verify response
|
|
|
+ try {
|
|
|
+ new JSONObject(urlc.getResponseMessage());
|
|
|
+ return false;
|
|
|
+ } catch (JSONException e) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|
|
|
+ } catch (IOException e) {
|
|
|
+ Log_OC.e(TAG, "Error checking internet connection", e);
|
|
|
+ } catch (com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException e) {
|
|
|
+ Log_OC.e(TAG, "Account not found", e);
|
|
|
}
|
|
|
} catch (com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException e) {
|
|
|
- Log.d(TAG, "No account found");
|
|
|
+ Log_OC.d(TAG, "No account found");
|
|
|
}
|
|
|
|
|
|
return true;
|