package com.novoda.bonfire;
import android.support.annotation.NonNull;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings;
import com.novoda.bonfire.analytics.ErrorLogger;
public class FirebaseConfig implements Config {
private static final String ORDER_CHANNELS_BY_NAME = "orderChannelsByName";
private static final int CACHE_EXPIRATION_IN_SECONDS = 3600;
private final FirebaseRemoteConfig firebaseRemoteConfig;
public static FirebaseConfig newInstance() {
final FirebaseRemoteConfig firebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
.setDeveloperModeEnabled(BuildConfig.DEBUG)
.build();
firebaseRemoteConfig.setConfigSettings(configSettings);
firebaseRemoteConfig.setDefaults(R.xml.remote_config_defaults);
return new FirebaseConfig(firebaseRemoteConfig);
}
public FirebaseConfig init(final ErrorLogger errorLogger) {
firebaseRemoteConfig.fetch(CACHE_EXPIRATION_IN_SECONDS)
.addOnSuccessListener(
new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
firebaseRemoteConfig.activateFetched();
}
}
)
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
errorLogger.reportError(e, "Failed to retrieve remote config");
}
}
);
return this;
}
private FirebaseConfig(FirebaseRemoteConfig firebaseRemoteConfig) {
this.firebaseRemoteConfig = firebaseRemoteConfig;
}
@Override
public boolean orderChannelsByName() {
return firebaseRemoteConfig.getBoolean(ORDER_CHANNELS_BY_NAME);
}
}