Skip to content

Commit

Permalink
OkHttp 3.1.2, Retrofit 2.0.0-beta4, Stetho 1.3.0
Browse files Browse the repository at this point in the history
  • Loading branch information
artem-zinnatullin committed Feb 15, 2016
1 parent df3cf02 commit fb39e7f
Show file tree
Hide file tree
Showing 26 changed files with 199 additions and 98 deletions.
3 changes: 2 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,6 @@ dependencies {
compile libraries.rxJava

compile libraries.okHttp
compile libraries.okHttpLoggingInterceptor
compile libraries.retrofit
compile libraries.retrofitJacksonConverter
compile libraries.retrofitRxJavaAdapter
Expand All @@ -125,13 +124,15 @@ dependencies {

compile libraries.butterKnife
compile libraries.picasso
compile libraries.picassoOkHttpDownloader
compile libraries.timber

// Analytics. Why? To make app more real.
// We mock analytics for Integration tests under Robolectric and Functional (UI) tests under Instrumentation!
compile libraries.yandexAppMetrica

// Developer tools (Developer Settings)
debugCompile libraries.okHttpLoggingInterceptor
debugCompile libraries.stetho
debugCompile libraries.stethoOkHttp
debugCompile libraries.leakCanary
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import android.content.SharedPreferences;
import android.support.annotation.NonNull;

import com.squareup.okhttp.logging.HttpLoggingInterceptor;
import okhttp3.logging.HttpLoggingInterceptor;

import timber.log.Timber;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@
import com.artemzin.qualitymatters.QualityMattersApp;
import com.codemonkeylabs.fpslibrary.TinyDancer;
import com.facebook.stetho.Stetho;
import com.facebook.stetho.okhttp.StethoInterceptor;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.logging.HttpLoggingInterceptor;
import com.facebook.stetho.okhttp3.StethoInterceptor;

import java.util.concurrent.atomic.AtomicBoolean;

import hu.supercluster.paperwork.Paperwork;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import timber.log.Timber;

import static android.view.Gravity.START;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import com.artemzin.qualitymatters.ui.other.ViewModifier;
import com.artemzin.qualitymatters.ui.presenters.DeveloperSettingsPresenter;
import com.github.pedrovgs.lynx.LynxConfig;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.logging.HttpLoggingInterceptor;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;

import javax.inject.Named;
import javax.inject.Singleton;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.artemzin.qualitymatters.network;

import android.support.annotation.NonNull;

import com.facebook.stetho.okhttp3.StethoInterceptor;

import java.util.List;

import javax.inject.Singleton;

import dagger.Module;
import dagger.Provides;
import okhttp3.Interceptor;
import okhttp3.logging.HttpLoggingInterceptor;
import timber.log.Timber;

import static java.util.Collections.singletonList;

/**
* Provides OkHttp interceptors for debug build.
*/
@Module
public class OkHttpInterceptorsModule {

// Provided as separate dependency for Developer Settings to be able to change HTTP log level at runtime.
@Provides @Singleton @NonNull
public HttpLoggingInterceptor provideHttpLoggingInterceptor() {
return new HttpLoggingInterceptor(message -> Timber.d(message));
}

@Provides @OkHttpInterceptors @Singleton @NonNull
public List<Interceptor> provideOkHttpInterceptors(@NonNull HttpLoggingInterceptor httpLoggingInterceptor) {
return singletonList(httpLoggingInterceptor);
}

@Provides @OkHttpNetworkInterceptors @Singleton @NonNull
public List<Interceptor> provideOkHttpNetworkInterceptors() {
return singletonList(new StethoInterceptor());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import com.artemzin.qualitymatters.ui.views.DeveloperSettingsView;
import com.github.pedrovgs.lynx.LynxActivity;
import com.github.pedrovgs.lynx.LynxConfig;
import com.squareup.okhttp.logging.HttpLoggingInterceptor;
import okhttp3.logging.HttpLoggingInterceptor;

import java.util.ArrayList;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import com.artemzin.qualitymatters.developer_settings.DeveloperSettingsModelImpl;
import com.artemzin.qualitymatters.models.AnalyticsModel;
import com.artemzin.qualitymatters.ui.views.DeveloperSettingsView;
import com.squareup.okhttp.logging.HttpLoggingInterceptor;
import okhttp3.logging.HttpLoggingInterceptor;

public class DeveloperSettingsPresenter extends Presenter<DeveloperSettingsView> {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import android.support.annotation.NonNull;

import com.artemzin.qualitymatters.performance.AnyThread;
import com.squareup.okhttp.logging.HttpLoggingInterceptor;
import okhttp3.logging.HttpLoggingInterceptor;

public interface DeveloperSettingsView {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
import android.support.annotation.NonNull;

import com.artemzin.qualitymatters.QualityMattersApp;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.logging.HttpLoggingInterceptor;

import org.junit.Before;
import org.junit.Test;
Expand All @@ -13,6 +11,8 @@
import java.util.Date;

import hu.supercluster.paperwork.Paperwork;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
import android.support.annotation.NonNull;

import com.artemzin.qualitymatters.QualityMattersRobolectricUnitTestRunner;
import com.squareup.okhttp.logging.HttpLoggingInterceptor;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;

import okhttp3.logging.HttpLoggingInterceptor;

import static android.content.Context.MODE_PRIVATE;
import static org.assertj.core.api.Assertions.assertThat;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@
import com.artemzin.qualitymatters.developer_settings.DeveloperSettingsModelImpl;
import com.artemzin.qualitymatters.models.AnalyticsModel;
import com.artemzin.qualitymatters.ui.views.DeveloperSettingsView;
import com.squareup.okhttp.logging.HttpLoggingInterceptor;

import org.junit.Before;
import org.junit.Test;

import okhttp3.logging.HttpLoggingInterceptor;

import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@
import android.support.annotation.NonNull;

import com.artemzin.qualitymatters.functional_tests.TestUtils;
import com.squareup.okhttp.mockwebserver.MockWebServer;

import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;

import java.lang.reflect.Method;

import okhttp3.mockwebserver.MockWebServer;

/**
* JUnit test rule for mocking web server!
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,16 @@
import com.artemzin.qualitymatters.functional_tests.rules.NeedsMockWebServer;
import com.artemzin.qualitymatters.functional_tests.screens.ItemsScreen;
import com.artemzin.qualitymatters.ui.activities.MainActivity;
import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.RuleChain;
import org.junit.runner.RunWith;

import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;

@RunWith(AndroidJUnit4.class)
public class ItemsTest {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public class HttpCodes {
404,
405,
406,
408,
// 408, OkHttp will do silent retry, so either we need to test that separately or be able to include it in generic tests somehow.
409,
410,
411,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
import com.artemzin.qualitymatters.QualityMattersIntegrationRobolectricTestRunner;
import com.artemzin.qualitymatters.api.QualityMattersRestApi;
import com.artemzin.qualitymatters.api.entities.Item;
import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;

import org.junit.After;
import org.junit.Before;
Expand All @@ -16,7 +14,9 @@
import java.io.IOException;
import java.util.List;

import retrofit.HttpException;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
import retrofit2.adapter.rxjava.HttpException;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.artemzin.qualitymatters.developer_settings.LeakCanaryProxy;
import com.artemzin.qualitymatters.models.ModelsModule;
import com.artemzin.qualitymatters.network.NetworkModule;
import com.artemzin.qualitymatters.network.OkHttpInterceptorsModule;
import com.artemzin.qualitymatters.performance.AsyncJobsModule;
import com.artemzin.qualitymatters.performance.AsyncJobsObserver;
import com.artemzin.qualitymatters.ui.activities.MainActivity;
Expand All @@ -24,6 +25,7 @@
@Component(modules = {
ApplicationModule.class,
NetworkModule.class,
OkHttpInterceptorsModule.class,
ApiModule.class,
AsyncJobsModule.class,
ModelsModule.class,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
import android.support.annotation.NonNull;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.picasso.OkHttpDownloader;
import com.jakewharton.picasso.OkHttp3Downloader;
import com.squareup.picasso.Picasso;

import javax.inject.Named;
import javax.inject.Singleton;

import dagger.Module;
import dagger.Provides;
import okhttp3.OkHttpClient;

@Module
public class ApplicationModule {
Expand Down Expand Up @@ -45,7 +45,7 @@ public Handler provideMainThreadHandler() {
@Provides @NonNull @Singleton
public Picasso providePicasso(@NonNull QualityMattersApp qualityMattersApp, @NonNull OkHttpClient okHttpClient) {
return new Picasso.Builder(qualityMattersApp)
.downloader(new OkHttpDownloader(okHttpClient))
.downloader(new OkHttp3Downloader(okHttpClient))
.build();
}
}
22 changes: 9 additions & 13 deletions app/src/main/java/com/artemzin/qualitymatters/api/ApiModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@

import com.artemzin.qualitymatters.BuildConfig;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.squareup.okhttp.OkHttpClient;

import javax.inject.Singleton;

import dagger.Module;
import dagger.Provides;
import retrofit.JacksonConverterFactory;
import retrofit.Retrofit;
import retrofit.RxJavaCallAdapterFactory;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.jackson.JacksonConverterFactory;

@Module
public class ApiModule {
Expand All @@ -31,17 +31,13 @@ public ChangeableBaseUrl provideChangeableBaseUrl() {

@Provides @NonNull @Singleton
public QualityMattersRestApi provideQualityMattersApi(@NonNull OkHttpClient okHttpClient, @NonNull ObjectMapper objectMapper, @NonNull ChangeableBaseUrl changeableBaseUrl) {
final Retrofit.Builder builder = new Retrofit.Builder()
return new Retrofit.Builder()
.baseUrl(changeableBaseUrl)
.client(okHttpClient)
.addConverterFactory(JacksonConverterFactory.create(objectMapper))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create());

// Fail early: check Retrofit configuration at creation time
if (BuildConfig.DEBUG) {
builder.validateEagerly();
}

return builder.build().create(QualityMattersRestApi.class);
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.validateEagerly(BuildConfig.DEBUG) // Fail early: check Retrofit configuration at creation time in Debug build.
.build()
.create(QualityMattersRestApi.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@

import android.support.annotation.NonNull;

import com.squareup.okhttp.HttpUrl;

import java.util.concurrent.atomic.AtomicReference;

import retrofit.BaseUrl;
import okhttp3.HttpUrl;
import retrofit2.BaseUrl;

/**
* Such implementation allows us easily change base url in the integration and functional tests!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

import java.util.List;

import retrofit.http.GET;
import retrofit2.http.GET;
import rx.Single;

public interface QualityMattersRestApi {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,31 @@

import android.support.annotation.NonNull;

import com.artemzin.qualitymatters.BuildConfig;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.logging.HttpLoggingInterceptor;
import java.util.List;

import javax.inject.Singleton;

import dagger.Module;
import dagger.Provides;
import timber.log.Timber;

import static com.squareup.okhttp.logging.HttpLoggingInterceptor.Level.BODY;
import static com.squareup.okhttp.logging.HttpLoggingInterceptor.Level.NONE;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;

@Module
public class NetworkModule {

@Provides @NonNull @Singleton
public OkHttpClient provideOkHttpClient(@NonNull HttpLoggingInterceptor httpLoggingInterceptor) {
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.interceptors().add(httpLoggingInterceptor);
return okHttpClient;
}
public OkHttpClient provideOkHttpClient(@OkHttpInterceptors @NonNull List<Interceptor> interceptors,
@OkHttpNetworkInterceptors @NonNull List<Interceptor> networkInterceptors) {
final OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder();

@Provides @NonNull @Singleton
public HttpLoggingInterceptor provideHttpLoggingInterceptor() {
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(message -> Timber.d(message));
httpLoggingInterceptor.setLevel(BuildConfig.DEBUG ? BODY : NONE);
return httpLoggingInterceptor;
for (Interceptor interceptor : interceptors) {
okHttpBuilder.addInterceptor(interceptor);
}

for (Interceptor networkInterceptor : networkInterceptors) {
okHttpBuilder.addNetworkInterceptor(networkInterceptor);
}

return okHttpBuilder.build();
}
}
Loading

0 comments on commit fb39e7f

Please sign in to comment.