Skip to content

Commit

Permalink
OkHttp 3.1.0, 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 7, 2016
1 parent df3cf02 commit 1c973e6
Show file tree
Hide file tree
Showing 23 changed files with 179 additions and 97 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,43 @@
package com.artemzin.qualitymatters.network;

import android.support.annotation.NonNull;

import com.facebook.stetho.okhttp3.StethoInterceptor;

import java.util.List;

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

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

import static com.artemzin.qualitymatters.network.NetworkModule.LIST_OF_OK_HTTP_INTERCEPTORS;
import static com.artemzin.qualitymatters.network.NetworkModule.LIST_OF_OK_HTTP_NETWORK_INTERCEPTORS;
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 @Named(LIST_OF_OK_HTTP_INTERCEPTORS) @Singleton @NonNull
public List<Interceptor> provideOkHttpInterceptors(@NonNull HttpLoggingInterceptor httpLoggingInterceptor) {
return singletonList(httpLoggingInterceptor);
}

@Provides @Named(LIST_OF_OK_HTTP_NETWORK_INTERCEPTORS) @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 @@ -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,35 @@

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.Named;
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;
}
static final String LIST_OF_OK_HTTP_INTERCEPTORS = "LIST_OF_OK_HTTP_INTERCEPTORS";
static final String LIST_OF_OK_HTTP_NETWORK_INTERCEPTORS = "LIST_OF_OK_HTTP_NETWORK_INTERCEPTORS";

@Provides @NonNull @Singleton
public HttpLoggingInterceptor provideHttpLoggingInterceptor() {
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(message -> Timber.d(message));
httpLoggingInterceptor.setLevel(BuildConfig.DEBUG ? BODY : NONE);
return httpLoggingInterceptor;
public OkHttpClient provideOkHttpClient(@Named(LIST_OF_OK_HTTP_INTERCEPTORS) @NonNull List<Interceptor> interceptors,
@Named(LIST_OF_OK_HTTP_NETWORK_INTERCEPTORS) @NonNull List<Interceptor> networkInterceptors) {
final OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder();

for (Interceptor interceptor : interceptors) {
okHttpBuilder.addInterceptor(interceptor);
}

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

return okHttpBuilder.build();
}
}
Loading

0 comments on commit 1c973e6

Please sign in to comment.