mirror of
https://github.com/MatomoCamp/matomocamp-companion-android.git
synced 2024-09-19 16:13:46 +02:00
Workaround to support "If-Modified-Since" conditional HTTP requests on web servers supporting GZIP compression, also enabling GZIP compression support on Android 2.1 and 2.2.
This commit is contained in:
parent
b1d823d245
commit
56fea42162
1 changed files with 27 additions and 21 deletions
|
@ -1,5 +1,10 @@
|
|||
package be.digitalia.fosdem.utils;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
@ -7,6 +12,7 @@ import java.net.HttpURLConnection;
|
|||
import java.net.URL;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
import javax.net.ssl.HostnameVerifier;
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
|
@ -15,11 +21,6 @@ import javax.net.ssl.SSLSession;
|
|||
import javax.net.ssl.TrustManager;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
|
||||
/**
|
||||
* Utility class to perform HTTP requests.
|
||||
*
|
||||
|
@ -85,11 +86,14 @@ public class HttpUtils {
|
|||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setReadTimeout(DEFAULT_TIMEOUT);
|
||||
connection.setConnectTimeout(DEFAULT_TIMEOUT);
|
||||
// We handle gzip manually to avoid EOFException bug in many Android versions when server returns HTTP 304
|
||||
connection.addRequestProperty("Accept-Encoding", "gzip");
|
||||
if (lastModified != null) {
|
||||
connection.addRequestProperty("If-Modified-Since", lastModified);
|
||||
}
|
||||
connection.connect();
|
||||
|
||||
String contentEncoding = connection.getHeaderField("Content-Encoding");
|
||||
result.lastModified = connection.getHeaderField("Last-Modified");
|
||||
|
||||
int responseCode = connection.getResponseCode();
|
||||
|
@ -106,24 +110,26 @@ public class HttpUtils {
|
|||
|
||||
final int length = connection.getContentLength();
|
||||
result.inputStream = new BufferedInputStream(connection.getInputStream());
|
||||
if ((progressAction == null) || (length == -1)) {
|
||||
// No progress support
|
||||
return result;
|
||||
|
||||
if ((progressAction != null) && (length != -1)) {
|
||||
// Broadcast the progression in percents, with a precision of 1/10 of the total file size
|
||||
result.inputStream = new ByteCountInputStream(result.inputStream,
|
||||
new ByteCountInputStream.ByteCountListener() {
|
||||
|
||||
private LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
|
||||
|
||||
@Override
|
||||
public void onNewCount(int byteCount) {
|
||||
// Cap percent to 100
|
||||
int percent = (byteCount >= length) ? 100 : byteCount * 100 / length;
|
||||
lbm.sendBroadcast(new Intent(progressAction).putExtra(progressExtra, percent));
|
||||
}
|
||||
}, length / 10);
|
||||
}
|
||||
|
||||
// Broadcast the progression in percents, with a precision of 1/10 of the total file size
|
||||
result.inputStream = new ByteCountInputStream(result.inputStream,
|
||||
new ByteCountInputStream.ByteCountListener() {
|
||||
|
||||
private LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
|
||||
|
||||
@Override
|
||||
public void onNewCount(int byteCount) {
|
||||
// Cap percent to 100
|
||||
int percent = (byteCount >= length) ? 100 : byteCount * 100 / length;
|
||||
lbm.sendBroadcast(new Intent(progressAction).putExtra(progressExtra, percent));
|
||||
}
|
||||
}, length / 10);
|
||||
if ("gzip".equals(contentEncoding)) {
|
||||
result.inputStream = new GZIPInputStream(result.inputStream);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue