summaryrefslogtreecommitdiffstats
path: root/src/com/hlidskialf/android/preference/SeekBarPreference.java
blob: 9055943c70daeeb91f7cab3ea07e86f6b2078cf5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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;
   }
}