summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/com')
-rw-r--r--src/com/hlidskialf/android/preference/SeekBarPreference.java122
1 files changed, 122 insertions, 0 deletions
diff --git a/src/com/hlidskialf/android/preference/SeekBarPreference.java b/src/com/hlidskialf/android/preference/SeekBarPreference.java
new file mode 100644
index 0000000..9055943
--- /dev/null
+++ b/src/com/hlidskialf/android/preference/SeekBarPreference.java
@@ -0,0 +1,122 @@
+/* The following code was written by Matthew Wiggins
+ * and is released under the APACHE 2.0 license
+ *
+ * Modified by Kevin Gaudin : constructor now retrieves resources references values
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ */
+package com.hlidskialf.android.preference;
+
+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.SeekBar;
+import android.widget.TextView;
+
+public class SeekBarPreference extends DialogPreference implements SeekBar.OnSeekBarChangeListener {
+ private static final String androidns = "http://schemas.android.com/apk/res/android";
+
+ private SeekBar mSeekBar;
+ private TextView mSplashText, mValueText;
+ private Context mContext;
+
+ private String mDialogMessage, mSuffix;
+ private int mDefault, mMax, mValue = 0;
+
+ public SeekBarPreference( Context context, AttributeSet attrs ) {
+ super( context, attrs );
+ mContext = context;
+
+ mDialogMessage = attrs.getAttributeValue( androidns, "dialogMessage" );
+ mSuffix = attrs.getAttributeValue( androidns, "text" );
+ mDefault = attrs.getAttributeIntValue( androidns, "defaultValue", 0 );
+ mMax = attrs.getAttributeIntValue( androidns, "max", 100 );
+
+ }
+
+ @Override
+ protected View onCreateDialogView() {
+ LinearLayout.LayoutParams params;
+ LinearLayout layout = new LinearLayout( mContext );
+ layout.setOrientation( LinearLayout.VERTICAL );
+ layout.setPadding( 6, 6, 6, 6 );
+
+ mSplashText = new TextView( mContext );
+ if( mDialogMessage != null )
+ mSplashText.setText( mDialogMessage );
+ layout.addView( mSplashText );
+
+ mValueText = new TextView( mContext );
+ mValueText.setGravity( Gravity.CENTER_HORIZONTAL );
+ mValueText.setTextSize( 32 );
+ params = new LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.FILL_PARENT,
+ LinearLayout.LayoutParams.WRAP_CONTENT );
+ layout.addView( mValueText, params );
+
+ mSeekBar = new SeekBar( mContext );
+ mSeekBar.setOnSeekBarChangeListener( this );
+ layout.addView( mSeekBar, new LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.FILL_PARENT,
+ LinearLayout.LayoutParams.WRAP_CONTENT ) );
+
+ if( shouldPersist() )
+ mValue = getPersistedInt( mDefault );
+
+ mSeekBar.setMax( mMax );
+ mSeekBar.setProgress( mValue );
+ return layout;
+ }
+
+ @Override
+ protected void onBindDialogView( View v ) {
+ super.onBindDialogView( v );
+ mSeekBar.setMax( mMax );
+ mSeekBar.setProgress( mValue );
+ }
+
+ @Override
+ protected void onSetInitialValue( boolean restore, Object defaultValue ) {
+ super.onSetInitialValue( restore, defaultValue );
+ if( restore )
+ mValue = shouldPersist() ? getPersistedInt( mDefault ) : 0;
+ else
+ mValue = (Integer)defaultValue;
+ }
+
+ public void onProgressChanged( SeekBar seek, int value, boolean fromTouch ) {
+ String t = String.valueOf( value );
+ mValueText.setText( mSuffix == null ? t : t.concat( mSuffix ) );
+ if( shouldPersist() )
+ persistInt( value );
+ callChangeListener( new Integer( value ) );
+ }
+
+ public void onStartTrackingTouch( SeekBar seek ) {
+ }
+
+ public void onStopTrackingTouch( SeekBar seek ) {
+ }
+
+ public void setMax( int max ) {
+ mMax = max;
+ }
+
+ public int getMax() {
+ return mMax;
+ }
+
+ public void setProgress( int progress ) {
+ mValue = progress;
+ if( mSeekBar != null )
+ mSeekBar.setProgress( progress );
+ }
+
+ public int getProgress() {
+ return mValue;
+ }
+}
+