new widgets

This commit is contained in:
serso
2011-09-19 22:50:01 +04:00
parent 7aec0d0c3e
commit 0e2a85ae9e
14 changed files with 361 additions and 187 deletions

View File

@@ -4,10 +4,10 @@ import android.content.Context;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* User: serso
@@ -20,19 +20,19 @@ public class AbstractDialogPreference extends DialogPreference {
protected static final String androidns = "http://schemas.android.com/apk/res/android";
@NotNull
protected TextView splashText, valueText;
protected TextView valueTextView;
@NotNull
protected final Context context;
protected String dialogMessage, suffix;
@Nullable
protected String dialogMessage;
public AbstractDialogPreference(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
dialogMessage = attrs.getAttributeValue(androidns, "dialogMessage");
suffix = attrs.getAttributeValue(androidns, "text");
}
@Override
@@ -42,18 +42,19 @@ public class AbstractDialogPreference extends DialogPreference {
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(6, 6, 6, 6);
splashText = new TextView(context);
if (dialogMessage != null)
final TextView splashText = new TextView(context);
if (dialogMessage != null) {
splashText.setText(dialogMessage);
}
layout.addView(splashText);
valueText = new TextView(context);
valueText.setGravity(Gravity.CENTER_HORIZONTAL);
valueText.setTextSize(32);
valueTextView = new TextView(context);
valueTextView.setGravity(Gravity.CENTER_HORIZONTAL);
valueTextView.setTextSize(32);
params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
layout.addView(valueText, params);
layout.addView(valueTextView, params);
return layout;
}

View File

@@ -0,0 +1,36 @@
/*
* 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 org.jetbrains.annotations.NotNull;
import org.solovyev.common.utils.Converter;
/**
* User: serso
* Date: 9/19/11
* Time: 10:04 PM
*/
public class IntegerRangeSeekBarPreference extends RangeSeekBarPreference<Integer> {
public IntegerRangeSeekBarPreference(@NotNull Context context, AttributeSet attrs) {
super(context, attrs);
}
@NotNull
@Override
Converter<String, Integer> getConverter() {
return new Converter<String, Integer>() {
@NotNull
@Override
public Integer convert(@NotNull String value) {
return Integer.valueOf(value);
}
};
}
}

View File

@@ -0,0 +1,117 @@
package org.solovyev.android.view.prefs;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import org.jetbrains.annotations.NotNull;
import org.solovyev.android.view.widgets.AbstractRangeSeekBar;
import org.solovyev.android.view.widgets.NumberRangeSeekBar;
import org.solovyev.common.utils.CollectionsUtils;
import org.solovyev.common.utils.Converter;
import org.solovyev.common.utils.StringMapper;
import java.util.Arrays;
import java.util.List;
/**
* User: serso
* Date: 9/19/11
* Time: 12:27 PM
*/
public abstract class RangeSeekBarPreference<T extends Number> extends AbstractDialogPreference implements AbstractRangeSeekBar.OnRangeSeekBarChangeListener<T> {
public final static String localNameSpace = "http://schemas.android.com/apk/res/org.solovyev.android.calculator";
@NotNull
private AbstractRangeSeekBar<T> rangeSeekBar;
@NotNull
private T min;
@NotNull
private T max;
@NotNull
private T selectedMin;
@NotNull
private T selectedMax;
public RangeSeekBarPreference(@NotNull Context context, AttributeSet attrs) {
super(context, attrs);
final Converter<String, T> c = getConverter();
String minString = attrs.getAttributeValue(localNameSpace, "min");
min = c.convert(minString == null ? "0" : minString);
String maxString = attrs.getAttributeValue(localNameSpace, "max");
max = c.convert(maxString == null ? "100" : maxString);
this.rangeSeekBar = new NumberRangeSeekBar<T>(min, max, context);
rangeSeekBar.setOnRangeSeekBarChangeListener(this);
}
public void setMin(@NotNull String min) {
this.min = getConverter().convert(min);
}
public void setMax(@NotNull String max) {
this.max = getConverter().convert(max);
}
@NotNull
abstract Converter<String, T> getConverter();
@Override
protected LinearLayout onCreateDialogView() {
final LinearLayout result = super.onCreateDialogView();
this.rangeSeekBar = new NumberRangeSeekBar<T>(min, max, context);
rangeSeekBar.setOnRangeSeekBarChangeListener(this);
initRangeSeekBar();
result.addView(rangeSeekBar);
return result;
}
@Override
protected void onBindDialogView(View v) {
super.onBindDialogView(v);
initRangeSeekBar();
}
private void initRangeSeekBar() {
rangeSeekBar.setSelectedMinValue(selectedMin);
rangeSeekBar.setSelectedMaxValue(selectedMax);
}
@Override
protected void onSetInitialValue(boolean restore, Object defaultValue) {
super.onSetInitialValue(restore, defaultValue);
final List<String> values;
if (restore) {
values = CollectionsUtils.split(getPersistedString("0;100"), ";", new StringMapper());
} else {
values = CollectionsUtils.split(String.valueOf(defaultValue), ";", new StringMapper());
}
selectedMin = getConverter().convert(values.get(0));
selectedMax = getConverter().convert(values.get(1));
}
@Override
public void rangeSeekBarValuesChanged(T minValue, T maxValue) {
final String value = CollectionsUtils.formatValue(Arrays.asList(String.valueOf(minValue), String.valueOf(maxValue)), ";", new StringMapper());
if (shouldPersist()) {
persistString(value);
}
callChangeListener(value);
}
}

View File

@@ -1,45 +0,0 @@
package org.solovyev.android.view.prefs;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.LinearLayout;
import org.jetbrains.annotations.NotNull;
import org.solovyev.android.view.widgets.AbstractRangeSeekBar;
import org.solovyev.android.view.widgets.NumberRangeSeekBar;
/**
* User: serso
* Date: 9/19/11
* Time: 12:27 PM
*/
public abstract class RangeSeekPreference<T extends Number> extends AbstractDialogPreference implements AbstractRangeSeekBar.OnRangeSeekBarChangeListener<T> {
@NotNull
private final AbstractRangeSeekBar<T> rangeSeekBar;
public RangeSeekPreference(@NotNull Context context, AttributeSet attrs) {
super(context, attrs);
this.rangeSeekBar = new NumberRangeSeekBar<T>(getMinValue(), getMaxValue(), context);
rangeSeekBar.setOnRangeSeekBarChangeListener(this);
}
@NotNull
abstract T getMinValue();
@NotNull
abstract T getMaxValue();
@Override
protected LinearLayout onCreateDialogView() {
final LinearLayout result = super.onCreateDialogView();
result.addView(rangeSeekBar);
return result;
}
@Override
public void rangeSeekBarValuesChanged(T minValue, T maxValue) {
//To change body of implemented methods use File | Settings | File Templates.
}
}

View File

@@ -6,15 +6,13 @@
package org.solovyev.android.view.prefs;
import android.preference.DialogPreference;
import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.LinearLayout;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/* The following code was written by Matthew Wiggins
@@ -30,17 +28,20 @@ public class SeekBarPreference extends AbstractDialogPreference implements SeekB
private int defaultValue, max, value = 0;
@Nullable
protected String valueText;
public SeekBarPreference(Context context, AttributeSet attrs) {
super(context, attrs);
defaultValue = attrs.getAttributeIntValue(androidns, "defaultValue", 0);
max = attrs.getAttributeIntValue(androidns, "max", 100);
valueText = attrs.getAttributeValue(androidns, "text");
}
@Override
protected LinearLayout onCreateDialogView() {
final LinearLayout layout = onCreateDialogView();
final LinearLayout layout = super.onCreateDialogView();
seekBar = new SeekBar(context);
seekBar.setOnSeekBarChangeListener(this);
@@ -49,17 +50,20 @@ public class SeekBarPreference extends AbstractDialogPreference implements SeekB
if (shouldPersist())
value = getPersistedInt(defaultValue);
seekBar.setMax(max);
seekBar.setProgress(value);
initSeekBar();
return layout;
}
private void initSeekBar() {
seekBar.setMax(max);
seekBar.setProgress(value);
}
@Override
protected void onBindDialogView(View v) {
super.onBindDialogView(v);
seekBar.setMax(max);
seekBar.setProgress(value);
initSeekBar();
}
@Override
@@ -73,7 +77,7 @@ public class SeekBarPreference extends AbstractDialogPreference implements SeekB
public void onProgressChanged(SeekBar seek, int value, boolean fromTouch) {
String t = String.valueOf(value);
valueText.setText(suffix == null ? t : t.concat(suffix));
valueTextView.setText(valueText == null ? t : t.concat(valueText));
if (shouldPersist())
persistInt(value);
callChangeListener(new Integer(value));