preferences added

This commit is contained in:
serso
2011-09-26 23:46:47 +04:00
parent e81a1ef27b
commit 769d8068f2
27 changed files with 404 additions and 133 deletions

View File

@@ -3,6 +3,7 @@ package org.solovyev.android.view.prefs;
import android.content.Context;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
@@ -19,7 +20,10 @@ import org.solovyev.common.utils.Mapper;
public abstract class AbstractDialogPreference<T> extends DialogPreference {
@NotNull
protected static final String androidns = "http://schemas.android.com/apk/res/android";
protected final static String localNameSpace = "http://schemas.android.com/apk/res/org.solovyev.android.calculator";
@NotNull
protected final static String androidns = "http://schemas.android.com/apk/res/android";
@NotNull
protected TextView valueTextView;
@@ -127,18 +131,26 @@ public abstract class AbstractDialogPreference<T> extends DialogPreference {
}
protected void persistValue(@Nullable T value) {
Log.d(AbstractDialogPreference.class.getName(), "Trying to persist value: " + value);
this.value = value;
Log.d(AbstractDialogPreference.class.getName(), "android.preference.Preference.callChangeListener()");
if (callChangeListener(value)) {
Log.d(AbstractDialogPreference.class.getName(), "android.preference.Preference.shouldPersist()");
if (shouldPersist()) {
Log.d(AbstractDialogPreference.class.getName(), "org.solovyev.android.view.prefs.AbstractDialogPreference.persist()");
persist(value);
}
}
}
private void persist(@Nullable T value) {
final String toBePersistedString = getMapper().formatValue(value);
if (toBePersistedString != null) {
if ( callChangeListener(value) ) {
persistString(toBePersistedString);
if (value != null) {
final String toBePersistedString = getMapper().formatValue(value);
if (toBePersistedString != null) {
if ( callChangeListener(toBePersistedString) ) {
persistString(toBePersistedString);
}
}
}
}

View File

@@ -9,7 +9,7 @@ package org.solovyev.android.view.prefs;
import android.content.Context;
import android.util.AttributeSet;
import org.jetbrains.annotations.NotNull;
import org.solovyev.common.FloatIntervalMapper;
import org.solovyev.common.NumberIntervalMapper;
import org.solovyev.common.utils.Interval;
import org.solovyev.common.utils.Mapper;
@@ -27,6 +27,6 @@ public class FloatRangeSeekBarPreference extends RangeSeekBarPreference<Float> {
@NotNull
@Override
protected Mapper<Interval<Float>> getMapper() {
return new FloatIntervalMapper() ;
return new NumberIntervalMapper<Float>(Float.class);
}
}

View File

@@ -9,7 +9,7 @@ package org.solovyev.android.view.prefs;
import android.content.Context;
import android.util.AttributeSet;
import org.jetbrains.annotations.NotNull;
import org.solovyev.common.IntegerIntervalMapper;
import org.solovyev.common.NumberIntervalMapper;
import org.solovyev.common.utils.*;
/**
@@ -26,7 +26,7 @@ public class IntegerRangeSeekBarPreference extends RangeSeekBarPreference<Intege
@NotNull
@Override
protected Mapper<Interval<Integer>> getMapper() {
return new IntegerIntervalMapper();
return new NumberIntervalMapper<Integer>(Integer.class);
}
}

View File

@@ -0,0 +1,92 @@
/*
* Copyright (c) 2009-2011. Created by serso aka se.solovyev.
* For more information, please, contact se.solovyev@gmail.com
* or visit http://se.solovyev.org
*/
package org.solovyev.android.view.prefs;
import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.LinearLayout;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.solovyev.android.view.widgets.NumberPicker;
import org.solovyev.common.GenericIntervalMapper;
import org.solovyev.common.utils.Interval;
import org.solovyev.common.utils.Mapper;
/**
* User: serso
* Date: 9/26/11
* Time: 10:31 PM
*/
public class NumberPickerDialogPreference extends AbstractDialogPreference<Integer> implements NumberPicker.OnChangedListener {
@NotNull
private NumberPicker numberPicker;
@NotNull
private final Interval<Integer> boundaries;
public NumberPickerDialogPreference(Context context, AttributeSet attrs) {
super(context, attrs, null);
//noinspection ConstantConditions
boundaries = new GenericIntervalMapper<Integer>(getMapper()).parseValue(attrs.getAttributeValue(localNameSpace, "boundaries"));
createPreferenceView();
}
@NotNull
@Override
protected LinearLayout onCreateDialogView() {
final LinearLayout result = super.onCreateDialogView();
createPreferenceView();
initPreferenceView();
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
result.addView(numberPicker, params);
return result;
}
protected void createPreferenceView() {
this.numberPicker = new NumberPicker(context);
this.numberPicker.setOnChangeListener(this);
initPreferenceView();
}
@Override
protected void initPreferenceView() {
if (value != null) {
numberPicker.setRange(boundaries.getLeftBorder(), boundaries.getRightBorder());
numberPicker.setCurrent(value);
}
}
@NotNull
@Override
protected Mapper<Integer> getMapper() {
return new Mapper<Integer>() {
@Override
public String formatValue(@Nullable Integer value) throws IllegalArgumentException {
return String.valueOf(value);
}
@Override
public Integer parseValue(@Nullable String value) throws IllegalArgumentException {
return Integer.valueOf(value);
}
};
}
@Override
public void onChanged(NumberPicker picker, int oldVal, int newVal) {
persistValue(newVal);
}
}

View File

@@ -16,8 +16,6 @@ import org.solovyev.common.utils.NumberInterval;
*/
public abstract class RangeSeekBarPreference<T extends Number> extends AbstractDialogPreference<Interval<T>> implements AbstractRangeSeekBar.OnRangeSeekBarChangeListener<T> {
public final static String localNameSpace = "http://schemas.android.com/apk/res/org.solovyev.android.calculator";
@NotNull
private AbstractRangeSeekBar<T> rangeSeekBar;

View File

@@ -11,7 +11,7 @@ import android.util.AttributeSet;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.solovyev.common.NumberMapper;
import org.solovyev.common.utils.Mapper;
@@ -60,17 +60,7 @@ public class SeekBarPreference extends AbstractDialogPreference<Integer> impleme
@NotNull
@Override
protected Mapper<Integer> getMapper() {
return new Mapper<Integer>() {
@Override
public String formatValue(@Nullable Integer integer) throws IllegalArgumentException {
return integer == null ? null : String.valueOf(integer);
}
@Override
public Integer parseValue(@Nullable String s) throws IllegalArgumentException {
return s == null ? null : Integer.valueOf(s);
}
};
return new NumberMapper<Integer>(Integer.class);
}
public void onProgressChanged(SeekBar seek, int value, boolean fromTouch) {