diff --git a/.travis.yml b/.travis.yml index 6d8b1faf..7127ff13 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ android: - platform-tools - tools - extra-android-m2repository - - build-tools-23.0.3 - - android-23 + - build-tools-24.0.0 + - android-24 script: cd Clover && ./gradlew build --console plain -x lint diff --git a/Clover/app/build.gradle b/Clover/app/build.gradle index 39b0b97e..1d78faa3 100644 --- a/Clover/app/build.gradle +++ b/Clover/app/build.gradle @@ -1,14 +1,14 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 23 + compileSdkVersion 24 // update the travis config when changing this - buildToolsVersion '23.0.3' + buildToolsVersion '24.0.0' defaultConfig { applicationId "org.floens.chan" minSdkVersion 15 - targetSdkVersion 23 + targetSdkVersion 24 versionName "v2.1.3" versionCode 55 @@ -84,19 +84,19 @@ android { } dependencies { - compile 'com.android.support:support-v13:23.4.0' - compile 'com.android.support:appcompat-v7:23.4.0' - compile 'com.android.support:recyclerview-v7:23.4.0' - compile 'com.android.support:cardview-v7:23.4.0' - compile 'com.android.support:support-annotations:23.4.0' - compile 'com.android.support:design:23.4.0' - compile 'com.android.support:customtabs:23.4.0' - - compile 'org.jsoup:jsoup:1.8.3' + compile 'com.android.support:support-v13:24.0.0' + compile 'com.android.support:appcompat-v7:24.0.0' + compile 'com.android.support:recyclerview-v7:24.0.0' + compile 'com.android.support:cardview-v7:24.0.0' + compile 'com.android.support:support-annotations:24.0.0' + compile 'com.android.support:design:24.0.0' + compile 'com.android.support:customtabs:24.0.0' + + compile 'org.jsoup:jsoup:1.9.2' compile 'com.j256.ormlite:ormlite-core:4.48' compile 'com.j256.ormlite:ormlite-android:4.48' compile 'pl.droidsonroids.gif:android-gif-drawable:1.1.16' compile 'com.davemorrissey.labs:subsampling-scale-image-view:3.5.0' - compile 'com.squareup.okhttp:okhttp:2.5.0' + compile 'com.squareup.okhttp3:okhttp:3.4.1' compile 'de.greenrobot:eventbus:2.4.0' } diff --git a/Clover/app/src/main/java/org/floens/chan/core/cache/FileCache.java b/Clover/app/src/main/java/org/floens/chan/core/cache/FileCache.java index fb84027b..a4aee94a 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/cache/FileCache.java +++ b/Clover/app/src/main/java/org/floens/chan/core/cache/FileCache.java @@ -17,14 +17,6 @@ */ package org.floens.chan.core.cache; -import com.squareup.okhttp.Call; -import com.squareup.okhttp.OkHttpClient; -import com.squareup.okhttp.Protocol; -import com.squareup.okhttp.Request; -import com.squareup.okhttp.Response; -import com.squareup.okhttp.ResponseBody; -import com.squareup.okhttp.internal.Util; - import org.floens.chan.core.settings.ChanSettings; import org.floens.chan.utils.AndroidUtils; import org.floens.chan.utils.Logger; @@ -45,6 +37,13 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.Protocol; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; +import okhttp3.internal.Util; import okio.BufferedSource; public class FileCache { @@ -68,13 +67,13 @@ public class FileCache { this.maxSize = maxSize; this.userAgent = userAgent; - httpClient = new OkHttpClient(); - httpClient.setConnectTimeout(TIMEOUT, TimeUnit.MILLISECONDS); - httpClient.setReadTimeout(TIMEOUT, TimeUnit.MILLISECONDS); - httpClient.setWriteTimeout(TIMEOUT, TimeUnit.MILLISECONDS); - - // Disable SPDY, causes reproducible timeouts, only one download at the same time and other fun stuff - httpClient.setProtocols(Collections.singletonList(Protocol.HTTP_1_1)); + httpClient = new OkHttpClient.Builder() + .connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS) + .readTimeout(TIMEOUT, TimeUnit.MILLISECONDS) + .writeTimeout(TIMEOUT, TimeUnit.MILLISECONDS) + // Disable SPDY, causes reproducible timeouts, only one download at the same time and other fun stuff + .protocols(Collections.singletonList(Protocol.HTTP_1_1)) + .build(); makeDir(); calculateSize(); @@ -428,9 +427,11 @@ public class FileCache { .header("User-Agent", userAgent) .build(); - fileCache.httpClient.setProxy(ChanSettings.getProxy()); + call = fileCache.httpClient.newBuilder() + .proxy(ChanSettings.getProxy()) + .build() + .newCall(request); - call = fileCache.httpClient.newCall(request); Response response = call.execute(); if (!response.isSuccessful()) { cancelDueToHttpError(response.code()); @@ -459,8 +460,6 @@ public class FileCache { totalLast = total; postProgress(total, contentLength <= 0 ? total : contentLength, false); } - - if (Thread.currentThread().isInterrupted()) throw new InterruptedIOException(); } if (Thread.currentThread().isInterrupted()) throw new InterruptedIOException(); diff --git a/Clover/app/src/main/java/org/floens/chan/core/http/DeleteHttpCall.java b/Clover/app/src/main/java/org/floens/chan/core/http/DeleteHttpCall.java index dd606a48..213eedd1 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/http/DeleteHttpCall.java +++ b/Clover/app/src/main/java/org/floens/chan/core/http/DeleteHttpCall.java @@ -17,10 +17,6 @@ */ package org.floens.chan.core.http; -import com.squareup.okhttp.FormEncodingBuilder; -import com.squareup.okhttp.Request; -import com.squareup.okhttp.Response; - import org.floens.chan.chan.ChanUrls; import org.floens.chan.core.model.SavedReply; import org.jsoup.Jsoup; @@ -29,6 +25,10 @@ import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; +import okhttp3.FormBody; +import okhttp3.Request; +import okhttp3.Response; + public class DeleteHttpCall extends HttpCall { private static final Pattern ERROR_MESSAGE = Pattern.compile("\"errmsg\"[^>]*>(.*?)<\\/span"); @@ -45,7 +45,7 @@ public class DeleteHttpCall extends HttpCall { @Override public void setup(Request.Builder requestBuilder) { - FormEncodingBuilder formBuilder = new FormEncodingBuilder(); + FormBody.Builder formBuilder = new FormBody.Builder(); formBuilder.add(Integer.toString(reply.no), "delete"); if (onlyImageDelete) { formBuilder.add("onlyimgdel", "on"); diff --git a/Clover/app/src/main/java/org/floens/chan/core/http/HttpCall.java b/Clover/app/src/main/java/org/floens/chan/core/http/HttpCall.java index c9cc8481..1656f6e7 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/http/HttpCall.java +++ b/Clover/app/src/main/java/org/floens/chan/core/http/HttpCall.java @@ -17,16 +17,17 @@ */ package org.floens.chan.core.http; -import com.squareup.okhttp.Callback; -import com.squareup.okhttp.Request; -import com.squareup.okhttp.Response; - import org.floens.chan.utils.AndroidUtils; import org.floens.chan.utils.IOUtils; import org.floens.chan.utils.Logger; import java.io.IOException; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Request; +import okhttp3.Response; + public abstract class HttpCall implements Callback { private static final String TAG = "HttpCall"; @@ -51,14 +52,14 @@ public abstract class HttpCall implements Callback { } @Override - public void onResponse(Response response) { + public void onResponse(Call call, Response response) { try { if (response.isSuccessful() && response.body() != null) { String responseString = response.body().string(); process(response, responseString); successful = true; } else { - onFailure(response.request(), null); + onFailure(call, null); } } catch (IOException e) { Logger.e(TAG, "IOException processing response", e); @@ -75,7 +76,7 @@ public abstract class HttpCall implements Callback { } @Override - public void onFailure(Request request, IOException e) { + public void onFailure(Call call, IOException e) { AndroidUtils.runOnUiThread(new Runnable() { @Override public void run() { diff --git a/Clover/app/src/main/java/org/floens/chan/core/http/PassHttpCall.java b/Clover/app/src/main/java/org/floens/chan/core/http/PassHttpCall.java index cbf3fa1c..4d68f1a5 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/http/PassHttpCall.java +++ b/Clover/app/src/main/java/org/floens/chan/core/http/PassHttpCall.java @@ -17,16 +17,16 @@ */ package org.floens.chan.core.http; -import com.squareup.okhttp.FormEncodingBuilder; -import com.squareup.okhttp.Request; -import com.squareup.okhttp.Response; - import org.floens.chan.chan.ChanUrls; import java.io.IOException; import java.net.HttpCookie; import java.util.List; +import okhttp3.FormBody; +import okhttp3.Request; +import okhttp3.Response; + public class PassHttpCall extends HttpCall { public boolean success; public String message; @@ -42,7 +42,7 @@ public class PassHttpCall extends HttpCall { @Override public void setup(Request.Builder requestBuilder) { - FormEncodingBuilder formBuilder = new FormEncodingBuilder(); + FormBody.Builder formBuilder = new FormBody.Builder(); formBuilder.add("act", "do_login"); diff --git a/Clover/app/src/main/java/org/floens/chan/core/http/ReplyHttpCall.java b/Clover/app/src/main/java/org/floens/chan/core/http/ReplyHttpCall.java index 8ba1f622..688d715d 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/http/ReplyHttpCall.java +++ b/Clover/app/src/main/java/org/floens/chan/core/http/ReplyHttpCall.java @@ -19,12 +19,6 @@ package org.floens.chan.core.http; import android.text.TextUtils; -import com.squareup.okhttp.MediaType; -import com.squareup.okhttp.MultipartBuilder; -import com.squareup.okhttp.Request; -import com.squareup.okhttp.RequestBody; -import com.squareup.okhttp.Response; - import org.floens.chan.chan.ChanUrls; import org.floens.chan.core.model.Reply; import org.jsoup.Jsoup; @@ -34,6 +28,12 @@ import java.util.Random; import java.util.regex.Matcher; import java.util.regex.Pattern; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + public class ReplyHttpCall extends HttpCall { private static final String TAG = "ReplyHttpCall"; private static final Random RANDOM = new Random(); @@ -59,8 +59,8 @@ public class ReplyHttpCall extends HttpCall { password = Long.toHexString(RANDOM.nextLong()); - MultipartBuilder formBuilder = new MultipartBuilder(); - formBuilder.type(MultipartBuilder.FORM); + MultipartBody.Builder formBuilder = new MultipartBody.Builder(); + formBuilder.setType(MultipartBody.FORM); formBuilder.addFormDataPart("mode", "regist"); formBuilder.addFormDataPart("pwd", password); diff --git a/Clover/app/src/main/java/org/floens/chan/core/http/ReplyManager.java b/Clover/app/src/main/java/org/floens/chan/core/http/ReplyManager.java index 5277b4f5..08e74935 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/http/ReplyManager.java +++ b/Clover/app/src/main/java/org/floens/chan/core/http/ReplyManager.java @@ -19,9 +19,6 @@ package org.floens.chan.core.http; import android.content.Context; -import com.squareup.okhttp.OkHttpClient; -import com.squareup.okhttp.Request; - import org.floens.chan.core.model.Loadable; import org.floens.chan.core.model.Reply; @@ -30,6 +27,9 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; +import okhttp3.OkHttpClient; +import okhttp3.Request; + /** * To send an reply to 4chan. */ @@ -46,10 +46,11 @@ public class ReplyManager { this.context = context; this.userAgent = userAgent; - client = new OkHttpClient(); - client.setConnectTimeout(TIMEOUT, TimeUnit.MILLISECONDS); - client.setReadTimeout(TIMEOUT, TimeUnit.MILLISECONDS); - client.setWriteTimeout(TIMEOUT, TimeUnit.MILLISECONDS); + client = new OkHttpClient.Builder() + .connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS) + .readTimeout(TIMEOUT, TimeUnit.MILLISECONDS) + .writeTimeout(TIMEOUT, TimeUnit.MILLISECONDS) + .build(); } public Reply getReply(Loadable loadable) { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java b/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java index c2d1d3cd..cec1de21 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java @@ -99,6 +99,7 @@ public class Theme { fab.setBackgroundTintList(ColorStateList.valueOf(accentColor.color)); } + @SuppressWarnings("ResourceType") private void resolveSpanColors() { Resources.Theme theme = AndroidUtils.getAppContext().getResources().newTheme(); theme.applyStyle(R.style.Chan_Theme, true);