// Path: library/src/main/java/com/yarolegovich/mp/io/StorageModule.java
// public interface StorageModule {
// 
//     void saveBoolean(String key, boolean value);
// 
//     void saveString(String key, String value);
// 
//     void saveInt(String key, int value);
// 
//     void saveStringSet(String key, Set<String> value);
// 
//     boolean getBoolean(String key, boolean defaultVal);
// 
//     String getString(String key, String defaultVal);
// 
//     int getInt(String key, int defaultVal);
// 
//     Set<String> getStringSet(String key, Set<String> defaultVal);
// 
//     void onSaveInstanceState(Bundle outState);
// 
//     void onRestoreInstanceState(Bundle savedState);
// 
//     interface Factory {
//         StorageModule create(Context context);
//     }
// }
// 
// Path: library/src/main/java/com/yarolegovich/mp/util/Utils.java
// public class Utils {
// 
//     private Utils() {}
// 
//     public static int dpToPixels(Context context, int dp) {
//         Resources resources = context.getResources();
//         DisplayMetrics metrics = resources.getDisplayMetrics();
//         return Math.round(dp * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT));
//     }
// 
//     public static int clickableBackground(Context context) {
//         TypedValue outValue = new TypedValue();
//         context.getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true);
//         return outValue.resourceId;
//     }
// }


import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.appcompat.widget.AppCompatSeekBar;
import com.yarolegovich.mp.io.StorageModule;
import com.yarolegovich.mp.util.Utils;
import static com.yarolegovich.mp.R.styleable.MaterialSeekBarPreference;
import static com.yarolegovich.mp.R.styleable.MaterialSeekBarPreference_mp_max_val;
import static com.yarolegovich.mp.R.styleable.MaterialSeekBarPreference_mp_min_val;
import static com.yarolegovich.mp.R.styleable.MaterialSeekBarPreference_mp_show_val;

    @Override
    protected void onViewCreated() {
        value = (TextView) findViewById(R.id.mp_value);
        if (showValue) {
            value.setVisibility(VISIBLE);
        }

        seekBar = (AppCompatSeekBar) findViewById(R.id.mp_seekbar);
        seekBar.setOnSeekBarChangeListener(new ProgressSaver());
        seekBar.setMax(maxValue - minValue);
        setSeekBarValue(getValue());
    }

    @Override
    public Integer getValue() {
        try {
            return storageModule.getInt(key, Integer.parseInt(defaultValue));
        } catch (NumberFormatException e) {
            throw new AssertionError(getContext().getString(R.string.exc_not_int_default));
        }
    }

    @Override
    public void setValue(Integer value) {
        storageModule.saveInt(key, value);
        setSeekBarValue(value);
    }

    @Override
// Path: library/src/main/java/com/yarolegovich/mp/io/StorageModule.java
// public interface StorageModule {
// 
//     void saveBoolean(String key, boolean value);
// 
//     void saveString(String key, String value);
// 
//     void saveInt(String key, int value);
// 
//     void saveStringSet(String key, Set<String> value);
// 
//     boolean getBoolean(String key, boolean defaultVal);
// 
//     String getString(String key, String defaultVal);
// 
//     int getInt(String key, int defaultVal);
// 
//     Set<String> getStringSet(String key, Set<String> defaultVal);
// 
//     void onSaveInstanceState(Bundle outState);
// 
//     void onRestoreInstanceState(Bundle savedState);
// 
//     interface Factory {
//         StorageModule create(Context context);
//     }
// }
// 
// Path: library/src/main/java/com/yarolegovich/mp/util/Utils.java
// public class Utils {
// 
//     private Utils() {}
// 
//     public static int dpToPixels(Context context, int dp) {
//         Resources resources = context.getResources();
//         DisplayMetrics metrics = resources.getDisplayMetrics();
//         return Math.round(dp * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT));
//     }
// 
//     public static int clickableBackground(Context context) {
//         TypedValue outValue = new TypedValue();
//         context.getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true);
//         return outValue.resourceId;
//     }
// }


// Path: library/src/main/java/com/yarolegovich/mp/MaterialSeekBarPreference.java
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.appcompat.widget.AppCompatSeekBar;
import com.yarolegovich.mp.io.StorageModule;
import com.yarolegovich.mp.util.Utils;
import static com.yarolegovich.mp.R.styleable.MaterialSeekBarPreference;
import static com.yarolegovich.mp.R.styleable.MaterialSeekBarPreference_mp_max_val;
import static com.yarolegovich.mp.R.styleable.MaterialSeekBarPreference_mp_min_val;
import static com.yarolegovich.mp.R.styleable.MaterialSeekBarPreference_mp_show_val;


    @Override
    protected void onViewCreated() {
        value = (TextView) findViewById(R.id.mp_value);
        if (showValue) {
            value.setVisibility(VISIBLE);
        }

        seekBar = (AppCompatSeekBar) findViewById(R.id.mp_seekbar);
        seekBar.setOnSeekBarChangeListener(new ProgressSaver());
        seekBar.setMax(maxValue - minValue);
        setSeekBarValue(getValue());
    }

    @Override
    public Integer getValue() {
        try {
            return storageModule.getInt(key, Integer.parseInt(defaultValue));
        } catch (NumberFormatException e) {
            throw new AssertionError(getContext().getString(R.string.exc_not_int_default));
        }
    }

    @Override
    public void setValue(Integer value) {
        storageModule.saveInt(key, value);
        setSeekBarValue(value);
    }

    @Override
    public void setStorageModule(StorageModule storageModule) {