/*
* Copyright (C) 2014 Philippine Android Developers Community
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ph.devcon.android.base.module;
import android.content.Context;
import android.util.Log;
import com.path.android.jobqueue.BaseJob;
import com.path.android.jobqueue.JobManager;
import com.path.android.jobqueue.config.Configuration;
import com.path.android.jobqueue.di.DependencyInjector;
import com.path.android.jobqueue.log.CustomLogger;
import com.squareup.okhttp.Cache;
import com.squareup.okhttp.OkHttpClient;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import ph.devcon.android.DevConApplication;
import ph.devcon.android.base.api.ApiRequestInterceptor;
import retrofit.RestAdapter;
import retrofit.android.AndroidLog;
import retrofit.client.OkClient;
/**
* Created by lope on 10/28/14.
*/
@Module(library = true)
public class APIModule {
Context mContext;
public APIModule(Context context) {
mContext = context;
}
@Provides
public RestAdapter provideRestAdapter() {
int SIZE_OF_CACHE = 1024;
OkHttpClient ok = new OkHttpClient();
ok.setReadTimeout(30, TimeUnit.SECONDS);
ok.setConnectTimeout(30, TimeUnit.SECONDS);
try {
Cache responseCache = new Cache(DevConApplication.getInstance().getCacheDir(), SIZE_OF_CACHE);
ok.setCache(responseCache);
} catch (Exception e) {
Log.d("OkHttp", "Unable to set http cache", e);
}
Executor executor = Executors.newCachedThreadPool();
return new RestAdapter.Builder()
.setExecutors(executor, executor)
.setClient(new OkClient(ok))
.setEndpoint(DevConApplication.API_ENDPOINT)
.setRequestInterceptor(new ApiRequestInterceptor())
// .setLogLevel(RestAdapter.LogLevel.FULL).setLog(new AndroidLog("RETROFIT"))
.build();
}
@Provides
@Singleton
public JobManager provideJobManager() {
Configuration configuration = new Configuration.Builder(mContext)
.customLogger(new CustomLogger() {
private static final String TAG = "JOBS";
@Override
public boolean isDebugEnabled() {
return true;
}
@Override
public void d(String text, Object... args) {
Log.d(TAG, String.format(text, args));
}
@Override
public void e(Throwable t, String text, Object... args) {
Log.e(TAG, String.format(text, args), t);
}
@Override
public void e(String text, Object... args) {
Log.e(TAG, String.format(text, args));
}
})
.minConsumerCount(1)//always keep at least one consumer alive
.maxConsumerCount(3)//up to 3 consumers at a time
.loadFactor(3)//3 jobs per consumer
.consumerKeepAlive(120)//wait 2 minute
.injector(new DependencyInjector() {
@Override
public void inject(BaseJob job) {
DevConApplication.injectMembers(job);
}
})
.build();
return new JobManager(mContext, configuration);
}
}