commit
fa8d149b04
|
|
@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
|
|||
apply plugin: 'me.tatarka.retrolambda'
|
||||
|
||||
android {
|
||||
compileSdkVersion 24
|
||||
compileSdkVersion 25
|
||||
buildToolsVersion '25.0.2'
|
||||
|
||||
compileOptions {
|
||||
|
|
@ -12,15 +12,15 @@ android {
|
|||
|
||||
defaultConfig {
|
||||
minSdkVersion 9
|
||||
targetSdkVersion 24
|
||||
targetSdkVersion 25
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile project(':libraries:core')
|
||||
|
||||
provided 'com.android.support:appcompat-v7:24.2.1'
|
||||
provided 'com.android.support:recyclerview-v7:24.2.1'
|
||||
provided 'com.android.support:appcompat-v7:25.2.0'
|
||||
provided 'com.android.support:recyclerview-v7:25.2.0'
|
||||
|
||||
provided 'io.reactivex:rxandroid:1.2.1'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -134,6 +134,8 @@ public abstract class ViewFragment<TActivity extends AppCompatActivity> extends
|
|||
* @param activity Activity which fragment attached to.
|
||||
*/
|
||||
@CallSuper
|
||||
@SuppressWarnings("RestrictedApi")
|
||||
//RestrictedApi: we need isMenuVisible() to check analytics rightly!
|
||||
protected void onStart(@NonNull final View view, @NonNull final TActivity activity) {
|
||||
if (getParentFragment() instanceof OnFragmentStartedListener) {
|
||||
((OnFragmentStartedListener) getParentFragment()).onFragmentStarted(this);
|
||||
|
|
|
|||
|
|
@ -23,8 +23,12 @@ import android.content.SharedPreferences;
|
|||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
import ru.touchin.roboswag.core.log.Lc;
|
||||
import ru.touchin.roboswag.core.observables.storable.SafeStore;
|
||||
import ru.touchin.roboswag.core.observables.storable.Store;
|
||||
import rx.Completable;
|
||||
import rx.Single;
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -33,7 +37,23 @@ import ru.touchin.roboswag.core.observables.storable.SafeStore;
|
|||
*
|
||||
* @param <T> Type of storable. Could be Boolean, Integer, Long, Float or String.
|
||||
*/
|
||||
public class PreferenceStore<T> implements SafeStore<String, T> {
|
||||
public class PreferenceStore<T> implements Store<String, T> {
|
||||
|
||||
private static boolean isTypeBoolean(@NonNull final Type type) {
|
||||
return type.equals(Boolean.class) || type.equals(boolean.class);
|
||||
}
|
||||
|
||||
private static boolean isTypeInteger(@NonNull final Type type) {
|
||||
return type.equals(Integer.class) || type.equals(int.class);
|
||||
}
|
||||
|
||||
private static boolean isTypeFloat(@NonNull final Type type) {
|
||||
return type.equals(Float.class) || type.equals(float.class);
|
||||
}
|
||||
|
||||
private static boolean isTypeLong(@NonNull final Type type) {
|
||||
return type.equals(Long.class) || type.equals(long.class);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private final SharedPreferences preferences;
|
||||
|
|
@ -42,54 +62,61 @@ public class PreferenceStore<T> implements SafeStore<String, T> {
|
|||
this.preferences = preferences;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public boolean contains(@NonNull final String key) {
|
||||
return preferences.contains(key);
|
||||
public Single<Boolean> contains(@NonNull final String key) {
|
||||
return Single.fromCallable(() -> preferences.contains(key));
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public void storeObject(@NonNull final Class<T> storeObjectClass, @NonNull final String key, @Nullable final T storeObject) {
|
||||
if (storeObject == null) {
|
||||
preferences.edit().remove(key).apply();
|
||||
return;
|
||||
}
|
||||
public Completable storeObject(@NonNull final Type storeObjectType, @NonNull final String key, @Nullable final T storeObject) {
|
||||
return Completable.fromAction(() -> {
|
||||
if (storeObject == null) {
|
||||
preferences.edit().remove(key).apply();
|
||||
return;
|
||||
}
|
||||
|
||||
if (storeObjectClass.equals(Boolean.class)) {
|
||||
preferences.edit().putBoolean(key, (Boolean) storeObject).apply();
|
||||
} else if (storeObjectClass.equals(String.class)) {
|
||||
preferences.edit().putString(key, (String) storeObject).apply();
|
||||
} else if (storeObjectClass.equals(Integer.class)) {
|
||||
preferences.edit().putInt(key, (Integer) storeObject).apply();
|
||||
} else if (storeObjectClass.equals(Long.class)) {
|
||||
preferences.edit().putLong(key, (Long) storeObject).apply();
|
||||
} else if (storeObjectClass.equals(Float.class)) {
|
||||
preferences.edit().putFloat(key, (Float) storeObject).apply();
|
||||
} else {
|
||||
Lc.assertion("Unsupported type of object " + storeObjectClass);
|
||||
}
|
||||
if (isTypeBoolean(storeObjectType)) {
|
||||
preferences.edit().putBoolean(key, (Boolean) storeObject).apply();
|
||||
} else if (storeObjectType.equals(String.class)) {
|
||||
preferences.edit().putString(key, (String) storeObject).apply();
|
||||
} else if (isTypeInteger(storeObjectType)) {
|
||||
preferences.edit().putInt(key, (Integer) storeObject).apply();
|
||||
} else if (isTypeLong(storeObjectType)) {
|
||||
preferences.edit().putLong(key, (Long) storeObject).apply();
|
||||
} else if (isTypeFloat(storeObjectType)) {
|
||||
preferences.edit().putFloat(key, (Float) storeObject).apply();
|
||||
} else {
|
||||
Lc.assertion("Unsupported type of object " + storeObjectType);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@NonNull
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public T loadObject(@NonNull final Class<T> storeObjectClass, @NonNull final String key) {
|
||||
if (!contains(key)) {
|
||||
return null;
|
||||
}
|
||||
//unchecked: we checked class in if-else statements
|
||||
public Single<T> loadObject(@NonNull final Type storeObjectType, @NonNull final String key) {
|
||||
return Single.fromCallable(() -> {
|
||||
if (!preferences.contains(key)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (storeObjectClass.equals(Boolean.class)) {
|
||||
return (T) ((Boolean) preferences.getBoolean(key, false));
|
||||
} else if (storeObjectClass.equals(String.class)) {
|
||||
return (T) (preferences.getString(key, null));
|
||||
} else if (storeObjectClass.equals(Integer.class)) {
|
||||
return (T) ((Integer) preferences.getInt(key, 0));
|
||||
} else if (storeObjectClass.equals(Long.class)) {
|
||||
return (T) ((Long) preferences.getLong(key, 0L));
|
||||
} else if (storeObjectClass.equals(Float.class)) {
|
||||
return (T) ((Float) preferences.getFloat(key, 0f));
|
||||
}
|
||||
Lc.assertion("Unsupported type of object " + storeObjectClass);
|
||||
return null;
|
||||
if (isTypeBoolean(storeObjectType)) {
|
||||
return (T) ((Boolean) preferences.getBoolean(key, false));
|
||||
} else if (storeObjectType.equals(String.class)) {
|
||||
return (T) (preferences.getString(key, null));
|
||||
} else if (isTypeInteger(storeObjectType)) {
|
||||
return (T) ((Integer) preferences.getInt(key, 0));
|
||||
} else if (isTypeLong(storeObjectType)) {
|
||||
return (T) ((Long) preferences.getLong(key, 0L));
|
||||
} else if (isTypeFloat(storeObjectType)) {
|
||||
return (T) ((Float) preferences.getFloat(key, 0f));
|
||||
}
|
||||
Lc.assertion("Unsupported type of object " + storeObjectType);
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,11 +23,12 @@ import android.content.SharedPreferences;
|
|||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import ru.touchin.roboswag.core.observables.storable.SafeConverter;
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
import ru.touchin.roboswag.core.observables.storable.Converter;
|
||||
import ru.touchin.roboswag.core.observables.storable.SameTypesConverter;
|
||||
import ru.touchin.roboswag.core.observables.storable.Storable;
|
||||
import ru.touchin.roboswag.core.observables.storable.concrete.NonNullSafeStorable;
|
||||
import ru.touchin.roboswag.core.observables.storable.concrete.SafeStorable;
|
||||
import ru.touchin.roboswag.core.observables.storable.concrete.NonNullStorable;
|
||||
|
||||
/**
|
||||
* Created by Gavriil Sitnikov on 01/09/2016.
|
||||
|
|
@ -36,21 +37,21 @@ import ru.touchin.roboswag.core.observables.storable.concrete.SafeStorable;
|
|||
public final class PreferenceUtils {
|
||||
|
||||
/**
|
||||
* Creates {@link SafeStorable} that stores string into {@link SharedPreferences}.
|
||||
* Creates {@link Storable} that stores string into {@link SharedPreferences}.
|
||||
*
|
||||
* @param name Name of preference;
|
||||
* @param preferences Preferences to store value;
|
||||
* @return {@link Storable} for string.
|
||||
*/
|
||||
@NonNull
|
||||
public static SafeStorable<String, String, String> stringStorable(@NonNull final String name, @NonNull final SharedPreferences preferences) {
|
||||
return new Storable.Builder<String, String, String>(name, String.class)
|
||||
.setSafeStore(String.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
public static Storable<String, String, String> stringStorable(@NonNull final String name, @NonNull final SharedPreferences preferences) {
|
||||
return new Storable.Builder<String, String, String>(name, String.class,
|
||||
String.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates {@link NonNullSafeStorable} that stores string into {@link SharedPreferences} with default value.
|
||||
* Creates {@link NonNullStorable} that stores string into {@link SharedPreferences} with default value.
|
||||
*
|
||||
* @param name Name of preference;
|
||||
* @param preferences Preferences to store value;
|
||||
|
|
@ -58,31 +59,31 @@ public final class PreferenceUtils {
|
|||
* @return {@link Storable} for string.
|
||||
*/
|
||||
@NonNull
|
||||
public static NonNullSafeStorable<String, String, String> stringStorable(@NonNull final String name,
|
||||
@NonNull final SharedPreferences preferences,
|
||||
@NonNull final String defaultValue) {
|
||||
return new Storable.Builder<String, String, String>(name, String.class)
|
||||
.setSafeStore(String.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
public static NonNullStorable<String, String, String> stringStorable(@NonNull final String name,
|
||||
@NonNull final SharedPreferences preferences,
|
||||
@NonNull final String defaultValue) {
|
||||
return new Storable.Builder<String, String, String>(name, String.class,
|
||||
String.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
.setDefaultValue(defaultValue)
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates {@link SafeStorable} that stores long into {@link SharedPreferences}.
|
||||
* Creates {@link Storable} that stores long into {@link SharedPreferences}.
|
||||
*
|
||||
* @param name Name of preference;
|
||||
* @param preferences Preferences to store value;
|
||||
* @return {@link Storable} for long.
|
||||
*/
|
||||
@NonNull
|
||||
public static SafeStorable<String, Long, Long> longStorable(@NonNull final String name, @NonNull final SharedPreferences preferences) {
|
||||
return new Storable.Builder<String, Long, Long>(name, Long.class)
|
||||
.setSafeStore(Long.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
public static Storable<String, Long, Long> longStorable(@NonNull final String name, @NonNull final SharedPreferences preferences) {
|
||||
return new Storable.Builder<String, Long, Long>(name, Long.class,
|
||||
Long.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates {@link NonNullSafeStorable} that stores long into {@link SharedPreferences} with default value.
|
||||
* Creates {@link NonNullStorable} that stores long into {@link SharedPreferences} with default value.
|
||||
*
|
||||
* @param name Name of preference;
|
||||
* @param preferences Preferences to store value;
|
||||
|
|
@ -90,31 +91,31 @@ public final class PreferenceUtils {
|
|||
* @return {@link Storable} for long.
|
||||
*/
|
||||
@NonNull
|
||||
public static NonNullSafeStorable<String, Long, Long> longStorable(@NonNull final String name,
|
||||
@NonNull final SharedPreferences preferences,
|
||||
final long defaultValue) {
|
||||
return new Storable.Builder<String, Long, Long>(name, Long.class)
|
||||
.setSafeStore(Long.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
public static NonNullStorable<String, Long, Long> longStorable(@NonNull final String name,
|
||||
@NonNull final SharedPreferences preferences,
|
||||
final long defaultValue) {
|
||||
return new Storable.Builder<String, Long, Long>(name, Long.class,
|
||||
Long.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
.setDefaultValue(defaultValue)
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates {@link SafeStorable} that stores boolean into {@link SharedPreferences}.
|
||||
* Creates {@link Storable} that stores boolean into {@link SharedPreferences}.
|
||||
*
|
||||
* @param name Name of preference;
|
||||
* @param preferences Preferences to store value;
|
||||
* @return {@link Storable} for boolean.
|
||||
*/
|
||||
@NonNull
|
||||
public static SafeStorable<String, Boolean, Boolean> booleanStorable(@NonNull final String name, @NonNull final SharedPreferences preferences) {
|
||||
return new Storable.Builder<String, Boolean, Boolean>(name, Boolean.class)
|
||||
.setSafeStore(Boolean.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
public static Storable<String, Boolean, Boolean> booleanStorable(@NonNull final String name, @NonNull final SharedPreferences preferences) {
|
||||
return new Storable.Builder<String, Boolean, Boolean>(name, Boolean.class,
|
||||
Boolean.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates {@link NonNullSafeStorable} that stores boolean into {@link SharedPreferences} with default value.
|
||||
* Creates {@link NonNullStorable} that stores boolean into {@link SharedPreferences} with default value.
|
||||
*
|
||||
* @param name Name of preference;
|
||||
* @param preferences Preferences to store value;
|
||||
|
|
@ -122,31 +123,31 @@ public final class PreferenceUtils {
|
|||
* @return {@link Storable} for boolean.
|
||||
*/
|
||||
@NonNull
|
||||
public static NonNullSafeStorable<String, Boolean, Boolean> booleanStorable(@NonNull final String name,
|
||||
@NonNull final SharedPreferences preferences,
|
||||
final boolean defaultValue) {
|
||||
return new Storable.Builder<String, Boolean, Boolean>(name, Boolean.class)
|
||||
.setSafeStore(Boolean.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
public static NonNullStorable<String, Boolean, Boolean> booleanStorable(@NonNull final String name,
|
||||
@NonNull final SharedPreferences preferences,
|
||||
final boolean defaultValue) {
|
||||
return new Storable.Builder<String, Boolean, Boolean>(name, Boolean.class,
|
||||
Boolean.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
.setDefaultValue(defaultValue)
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates {@link SafeStorable} that stores integer into {@link SharedPreferences}.
|
||||
* Creates {@link Storable} that stores integer into {@link SharedPreferences}.
|
||||
*
|
||||
* @param name Name of preference;
|
||||
* @param preferences Preferences to store value;
|
||||
* @return {@link Storable} for integer.
|
||||
*/
|
||||
@NonNull
|
||||
public static SafeStorable<String, Integer, Integer> integerStorable(@NonNull final String name, @NonNull final SharedPreferences preferences) {
|
||||
return new Storable.Builder<String, Integer, Integer>(name, Integer.class)
|
||||
.setSafeStore(Integer.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
public static Storable<String, Integer, Integer> integerStorable(@NonNull final String name, @NonNull final SharedPreferences preferences) {
|
||||
return new Storable.Builder<String, Integer, Integer>(name, Integer.class,
|
||||
Integer.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates {@link NonNullSafeStorable} that stores integer into {@link SharedPreferences} with default value.
|
||||
* Creates {@link NonNullStorable} that stores integer into {@link SharedPreferences} with default value.
|
||||
*
|
||||
* @param name Name of preference;
|
||||
* @param preferences Preferences to store value;
|
||||
|
|
@ -154,31 +155,31 @@ public final class PreferenceUtils {
|
|||
* @return {@link Storable} for integer.
|
||||
*/
|
||||
@NonNull
|
||||
public static NonNullSafeStorable<String, Integer, Integer> integerStorable(@NonNull final String name,
|
||||
@NonNull final SharedPreferences preferences,
|
||||
final int defaultValue) {
|
||||
return new Storable.Builder<String, Integer, Integer>(name, Integer.class)
|
||||
.setSafeStore(Integer.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
public static NonNullStorable<String, Integer, Integer> integerStorable(@NonNull final String name,
|
||||
@NonNull final SharedPreferences preferences,
|
||||
final int defaultValue) {
|
||||
return new Storable.Builder<String, Integer, Integer>(name, Integer.class,
|
||||
Integer.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
.setDefaultValue(defaultValue)
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates {@link SafeStorable} that stores float into {@link SharedPreferences}.
|
||||
* Creates {@link Storable} that stores float into {@link SharedPreferences}.
|
||||
*
|
||||
* @param name Name of preference;
|
||||
* @param preferences Preferences to store value;
|
||||
* @return {@link Storable} for float.
|
||||
*/
|
||||
@NonNull
|
||||
public static SafeStorable<String, Float, Float> floatStorable(@NonNull final String name, @NonNull final SharedPreferences preferences) {
|
||||
return new Storable.Builder<String, Float, Float>(name, Float.class)
|
||||
.setSafeStore(Float.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
public static Storable<String, Float, Float> floatStorable(@NonNull final String name, @NonNull final SharedPreferences preferences) {
|
||||
return new Storable.Builder<String, Float, Float>(name, Float.class,
|
||||
Float.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates {@link NonNullSafeStorable} that stores float into {@link SharedPreferences} with default value.
|
||||
* Creates {@link NonNullStorable} that stores float into {@link SharedPreferences} with default value.
|
||||
*
|
||||
* @param name Name of preference;
|
||||
* @param preferences Preferences to store value;
|
||||
|
|
@ -186,33 +187,33 @@ public final class PreferenceUtils {
|
|||
* @return {@link Storable} for float.
|
||||
*/
|
||||
@NonNull
|
||||
public static NonNullSafeStorable<String, Float, Float> floatStorable(@NonNull final String name,
|
||||
@NonNull final SharedPreferences preferences,
|
||||
final float defaultValue) {
|
||||
return new Storable.Builder<String, Float, Float>(name, Float.class)
|
||||
.setSafeStore(Float.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
public static NonNullStorable<String, Float, Float> floatStorable(@NonNull final String name,
|
||||
@NonNull final SharedPreferences preferences,
|
||||
final float defaultValue) {
|
||||
return new Storable.Builder<String, Float, Float>(name, Float.class,
|
||||
Float.class, new PreferenceStore<>(preferences), new SameTypesConverter<>())
|
||||
.setDefaultValue(defaultValue)
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates {@link SafeStorable} that stores enum into {@link SharedPreferences}.
|
||||
* Creates {@link Storable} that stores enum into {@link SharedPreferences}.
|
||||
*
|
||||
* @param name Name of preference;
|
||||
* @param preferences Preferences to store value;
|
||||
* @return {@link Storable} for enum.
|
||||
*/
|
||||
@NonNull
|
||||
public static <T extends Enum<T>> SafeStorable<String, T, String> enumStorable(@NonNull final String name,
|
||||
@NonNull final Class<T> enumClass,
|
||||
@NonNull final SharedPreferences preferences) {
|
||||
return new Storable.Builder<String, T, String>(name, enumClass)
|
||||
.setSafeStore(String.class, new PreferenceStore<>(preferences), new EnumToStringConverter<>())
|
||||
public static <T extends Enum<T>> Storable<String, T, String> enumStorable(@NonNull final String name,
|
||||
@NonNull final Class<T> enumClass,
|
||||
@NonNull final SharedPreferences preferences) {
|
||||
return new Storable.Builder<String, T, String>(name, enumClass,
|
||||
String.class, new PreferenceStore<>(preferences), new EnumToStringConverter<>())
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates {@link NonNullSafeStorable} that stores enum into {@link SharedPreferences} with default value.
|
||||
* Creates {@link NonNullStorable} that stores enum into {@link SharedPreferences} with default value.
|
||||
*
|
||||
* @param name Name of preference;
|
||||
* @param preferences Preferences to store value;
|
||||
|
|
@ -220,12 +221,12 @@ public final class PreferenceUtils {
|
|||
* @return {@link Storable} for enum.
|
||||
*/
|
||||
@NonNull
|
||||
public static <T extends Enum<T>> NonNullSafeStorable<String, T, String> enumStorable(@NonNull final String name,
|
||||
@NonNull final Class<T> enumClass,
|
||||
@NonNull final SharedPreferences preferences,
|
||||
@NonNull final T defaultValue) {
|
||||
return new Storable.Builder<String, T, String>(name, enumClass)
|
||||
.setSafeStore(String.class, new PreferenceStore<>(preferences), new EnumToStringConverter<>())
|
||||
public static <T extends Enum<T>> NonNullStorable<String, T, String> enumStorable(@NonNull final String name,
|
||||
@NonNull final Class<T> enumClass,
|
||||
@NonNull final SharedPreferences preferences,
|
||||
@NonNull final T defaultValue) {
|
||||
return new Storable.Builder<String, T, String>(name, enumClass,
|
||||
String.class, new PreferenceStore<>(preferences), new EnumToStringConverter<>())
|
||||
.setDefaultValue(defaultValue)
|
||||
.build();
|
||||
}
|
||||
|
|
@ -233,18 +234,25 @@ public final class PreferenceUtils {
|
|||
private PreferenceUtils() {
|
||||
}
|
||||
|
||||
private static class EnumToStringConverter<T extends Enum<T>> implements SafeConverter<T, String> {
|
||||
private static class EnumToStringConverter<T extends Enum<T>> implements Converter<T, String> {
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String toStoreObject(@NonNull final Class<T> objectClass, @NonNull final Class<String> stringClass, @Nullable final T object) {
|
||||
public String toStoreObject(@NonNull final Type objectType, @NonNull final Type storeObjectType, @Nullable final T object)
|
||||
throws ConversionException {
|
||||
return object != null ? object.name() : null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public T toObject(@NonNull final Class<T> objectClass, @NonNull final Class<String> stringClass, @Nullable final String stringObject) {
|
||||
return stringObject != null ? Enum.valueOf(objectClass, stringObject) : null;
|
||||
@SuppressWarnings("unchecked")
|
||||
//unchecked: we checked it before cast
|
||||
public T toObject(@NonNull final Type objectType, @NonNull final Type storeObjectType, @Nullable final String stringObject)
|
||||
throws ConversionException {
|
||||
if (!(objectType instanceof Class) || !((Class) objectType).isEnum()) {
|
||||
throw new ConversionException(String.format("Type %s is not enum class", objectType));
|
||||
}
|
||||
return stringObject != null ? Enum.valueOf((Class<T>) objectType, stringObject) : null;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,9 +24,9 @@ import android.content.res.TypedArray;
|
|||
import android.os.Build;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.AppCompatImageView;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.TypedValue;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import ru.touchin.roboswag.components.R;
|
||||
import ru.touchin.roboswag.components.utils.UiUtils;
|
||||
|
|
@ -52,7 +52,7 @@ import ru.touchin.roboswag.components.utils.UiUtils;
|
|||
* <item name="materialLoadingBarStyle">@style/MyAppLoadingBar</item>
|
||||
* </style>
|
||||
*/
|
||||
public class MaterialLoadingBar extends ImageView {
|
||||
public class MaterialLoadingBar extends AppCompatImageView {
|
||||
|
||||
private static int getPrimaryColor(@NonNull final Context context) {
|
||||
final int colorAttr;
|
||||
|
|
|
|||
Loading…
Reference in New Issue