retrofit.android.AndroidMockValuePersistence Maven / Gradle / Ivy
// Copyright 2013 Square, Inc.
package retrofit.android;
import android.content.SharedPreferences;
import retrofit.MockRestAdapter;
/**
* A {@link MockRestAdapter.ValueChangeListener value change listener} for {@link MockRestAdapter}
* which stores any customized behavior values into shared preferences.
*/
public final class AndroidMockValuePersistence implements MockRestAdapter.ValueChangeListener {
private static final String KEY_DELAY = "retrofit-mock-delay";
private static final String KEY_VARIANCE = "retrofit-mock-variance";
private static final String KEY_ERROR = "retrofit-mock-error";
/**
* Install a {@link MockRestAdapter.ValueChangeListener value change listener} on the supplied
* {@link MockRestAdapter} using the {@link SharedPreferences} for storing customized behavior
* values. Invoking this will load any existing stored values for the mock adapter's behavior.
*/
public static void install(MockRestAdapter mockRestAdapter, SharedPreferences preferences) {
long delay = preferences.getLong(KEY_DELAY, -1);
if (delay != -1) {
mockRestAdapter.setDelay(delay);
}
int variance = preferences.getInt(KEY_VARIANCE, -1);
if (variance != -1) {
mockRestAdapter.setVariancePercentage(variance);
}
int error = preferences.getInt(KEY_ERROR, -1);
if (error != -1) {
mockRestAdapter.setErrorPercentage(error);
}
mockRestAdapter.setValueChangeListener(new AndroidMockValuePersistence(preferences));
}
private final SharedPreferences preferences;
private AndroidMockValuePersistence(SharedPreferences preferences) {
this.preferences = preferences;
}
@Override public void onMockValuesChanged(long delayMs, int variancePct, int errorPct) {
preferences.edit()
.putLong(KEY_DELAY, delayMs)
.putInt(KEY_VARIANCE, variancePct)
.putInt(KEY_ERROR, errorPct)
.apply();
}
}