package com.xujiaji.wanandroid.di; import android.text.TextUtils; import com.xujiaji.wanandroid.BuildConfig; import com.xujiaji.wanandroid.helper.PrefHelper; import com.xujiaji.wanandroid.repository.remote.API; import com.xujiaji.wanandroid.repository.remote.Net; import com.xujiaji.wanandroid.util.NetUtil; import java.util.concurrent.TimeUnit; import javax.inject.Named; import javax.inject.Singleton; import dagger.Module; import dagger.Provides; import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.converter.scalars.ScalarsConverterFactory; /** * author: xujiaji * created on: 2018/8/12 1:37 * description: */ @Module public class NetModule { @Singleton @Provides static API provideAPI(OkHttpClient client) { return new Retrofit.Builder() .baseUrl(BuildConfig.BASE_URL) .addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .client(client) .build() .create(API.class); } @Singleton @Provides static OkHttpClient provideOkHttpClient(HttpLoggingInterceptor interceptor, @Named("RequestInterceptor") Interceptor requestInterceptor, @Named("ResponseInterceptor") Interceptor responseInterceptor) { return new OkHttpClient.Builder() .addInterceptor(interceptor) .addInterceptor(requestInterceptor) .addInterceptor(responseInterceptor) .connectTimeout(Net.TIME_OUT_CONNECT, TimeUnit.SECONDS) .readTimeout(Net.TIME_OUT_READ, TimeUnit.SECONDS) .build(); } @Singleton @Provides @Named("ResponseInterceptor") static Interceptor provideResponseCookieInterceptor() { return chain -> { Request request = chain.request(); Response response = chain.proceed(request); final String requestUrl = request.url().toString(); if ((requestUrl.contains(Net.SAVE_USER_LOGIN_KEY) || requestUrl.contains(Net.SAVE_USER_REGISTER_KEY)) && !response.headers(Net.SET_COOKIE_KEY).isEmpty()) { PrefHelper.set(Net.SAVE_USER_LOGIN_KEY, NetUtil.encodeCookie( response.headers(Net.SET_COOKIE_KEY))); } return response; }; } @Singleton @Provides @Named("RequestInterceptor") static Interceptor provideRequestCookieInterceptor() { return chain -> { Request request = chain.request(); Request.Builder builder = request.newBuilder(); String cookie = PrefHelper.getString(Net.SAVE_USER_LOGIN_KEY); if (!TextUtils.isEmpty(cookie)) { builder.addHeader(Net.COOKIE_NAME, cookie); } return chain.proceed(builder.build()); }; } @Singleton @Provides static HttpLoggingInterceptor provideHttpLoggingInterceptor() { HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); return interceptor; } }