package com.apollographql.apollo.sample;
import android.app.Application;
import com.apollographql.apollo.ApolloClient;
import com.apollographql.apollo.api.Field;
import com.apollographql.apollo.api.Operation;
import com.apollographql.apollo.cache.normalized.CacheKey;
import com.apollographql.apollo.cache.normalized.CacheKeyResolver;
import com.apollographql.apollo.cache.normalized.NormalizedCacheFactory;
import com.apollographql.apollo.cache.normalized.lru.EvictionPolicy;
import com.apollographql.apollo.cache.normalized.lru.LruNormalizedCacheFactory;
import com.apollographql.apollo.cache.normalized.sql.ApolloSqlHelper;
import com.apollographql.apollo.cache.normalized.sql.SqlNormalizedCacheFactory;
import java.util.Map;
import javax.annotation.Nonnull;
import okhttp3.OkHttpClient;
public class GitHuntApplication extends Application {
private static final String BASE_URL = "https://githunt-api.herokuapp.com/graphql";
private static final String SQL_CACHE_NAME = "githuntdb";
private ApolloClient apolloClient;
@Override public void onCreate() {
super.onCreate();
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.build();
ApolloSqlHelper apolloSqlHelper = new ApolloSqlHelper(this, SQL_CACHE_NAME);
NormalizedCacheFactory normalizedCacheFactory = new LruNormalizedCacheFactory(EvictionPolicy.NO_EVICTION,
new SqlNormalizedCacheFactory(apolloSqlHelper));
CacheKeyResolver cacheKeyResolver = new CacheKeyResolver() {
@Nonnull @Override public CacheKey fromFieldRecordSet(@Nonnull Field field, @Nonnull Map<String, Object> map) {
String typeName = (String) map.get("__typename");
if ("User".equals(typeName)) {
String userKey = typeName + "." + map.get("login");
return CacheKey.from(userKey);
}
if (map.containsKey("id")) {
String typeNameAndIDKey = map.get("__typename") + "." + map.get("id");
return CacheKey.from(typeNameAndIDKey);
}
return CacheKey.NO_KEY;
}
@Nonnull @Override
public CacheKey fromFieldArguments(@Nonnull Field field, @Nonnull Operation.Variables variables) {
return CacheKey.NO_KEY;
}
};
apolloClient = ApolloClient.builder()
.serverUrl(BASE_URL)
.okHttpClient(okHttpClient)
.normalizedCache(normalizedCacheFactory, cacheKeyResolver)
.build();
}
public ApolloClient apolloClient() {
return apolloClient;
}
}