/*******************************************************************************
* Copyright 2011, 2012, 2013 fanfou.com, Xiaoke, Zhang
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
package com.fanfou.app.opensource.preferences;
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.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import com.fanfou.app.opensource.AppContext;
/**
* @author mcxiaoke
* @version 1.0 2011.11.09
* @version 1.5 2011.11.10
* @version 1.6 2011.12.19
*
*/
public class SeekBarPreference extends DialogPreference implements
SeekBar.OnSeekBarChangeListener {
private static final String TAG = SeekBarPreference.class.getSimpleName();
private static final String androidns = "http://schemas.android.com/apk/res/android";
private SeekBar mSeekBar;
private TextView mMessageText, mValueText;
private final Context mContext;
private final String mDialogMessage, mSuffix;
private final int mDefault;
private int mMax;
private int mValue = 0;
public SeekBarPreference(final Context context, final AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
this.mDialogMessage = attrs.getAttributeValue(
SeekBarPreference.androidns, "dialogMessage");
this.mSuffix = attrs.getAttributeValue(SeekBarPreference.androidns,
"text");
this.mDefault = attrs.getAttributeIntValue(SeekBarPreference.androidns,
"defaultValue", 0);
this.mMax = attrs.getAttributeIntValue(SeekBarPreference.androidns,
"max", 100);
if (AppContext.DEBUG) {
Log.d(SeekBarPreference.TAG, "SeekBarPreference() mDefault="
+ this.mDefault);
Log.d(SeekBarPreference.TAG, "SeekBarPreference() mValue="
+ this.mValue);
}
}
public int getMax() {
return this.mMax;
}
public int getProgress() {
return this.mValue;
}
@Override
protected void onBindDialogView(final View v) {
super.onBindDialogView(v);
if (AppContext.DEBUG) {
Log.d(SeekBarPreference.TAG, "onBindDialogView() mDefault="
+ this.mDefault);
Log.d(SeekBarPreference.TAG, "onBindDialogView() mValue="
+ this.mValue);
}
this.mSeekBar.setMax(this.mMax);
this.mSeekBar.setProgress(this.mValue);
}
@Override
protected View onCreateDialogView() {
LinearLayout.LayoutParams params;
final LinearLayout layout = new LinearLayout(this.mContext);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(6, 6, 6, 6);
if (this.mDialogMessage != null) {
this.mMessageText = new TextView(this.mContext);
this.mMessageText.setText(this.mDialogMessage);
layout.addView(this.mMessageText);
}
this.mValueText = new TextView(this.mContext);
this.mValueText.setGravity(Gravity.CENTER_HORIZONTAL);
this.mValueText.setTextSize(32);
params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
layout.addView(this.mValueText, params);
this.mSeekBar = new SeekBar(this.mContext);
this.mSeekBar.setOnSeekBarChangeListener(this);
layout.addView(this.mSeekBar, new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
if (shouldPersist()) {
this.mValue = getPersistedInt(this.mDefault);
}
// if(App.DEBUG){
// Log.d(TAG, "onCreateDialogView() mDefault="+mDefault);
// Log.d(TAG, "onCreateDialogView() mMax="+mMax);
// Log.d(TAG, "onCreateDialogView() mValue="+mValue);
// }
// mSeekBar.setMax(mMax);
// mSeekBar.setProgress(mValue);
return layout;
}
@Override
protected void onDialogClosed(final boolean positiveResult) {
if (AppContext.DEBUG) {
Log.d(SeekBarPreference.TAG, "onDialogClosed positive="
+ positiveResult + " mvalue=" + this.mValue);
}
if (positiveResult) {
if (shouldPersist()) {
persistInt(this.mValue);
}
if (AppContext.DEBUG) {
Log.d(SeekBarPreference.TAG, "onDialogClosed() mDefault="
+ this.mDefault);
Log.d(SeekBarPreference.TAG, "onDialogClosed() mValue="
+ this.mValue);
}
callChangeListener(Integer.valueOf(this.mValue));
}
}
@Override
public void onProgressChanged(final SeekBar seek, final int value,
final boolean fromTouch) {
final String t = String.valueOf(value);
if (value > 0) {
this.mValue = value;
}
if (AppContext.DEBUG) {
Log.d(SeekBarPreference.TAG, "onProgressChanged() mDefault="
+ this.mDefault);
Log.d(SeekBarPreference.TAG, "onProgressChanged() mValue="
+ this.mValue);
Log.d(SeekBarPreference.TAG, "onProgressChanged() value=" + value);
}
this.mValueText.setText(this.mSuffix == null ? t : t
.concat(this.mSuffix));
// if (shouldPersist())
// persistInt(value);
// callChangeListener(new Integer(value));
}
@Override
protected void onSetInitialValue(final boolean restore,
final Object defaultValue) {
super.onSetInitialValue(restore, defaultValue);
if (restore) {
this.mValue = shouldPersist() ? getPersistedInt(this.mDefault) : 0;
} else {
this.mValue = (Integer) defaultValue;
}
if (AppContext.DEBUG) {
Log.d(SeekBarPreference.TAG, "onSetInitialValue() mDefault="
+ this.mDefault);
Log.d(SeekBarPreference.TAG, "onSetInitialValue() mValue="
+ this.mValue);
}
setSummary("" + this.mValue + this.mSuffix);
}
@Override
public void onStartTrackingTouch(final SeekBar seek) {
}
@Override
public void onStopTrackingTouch(final SeekBar seek) {
}
public void setMax(final int max) {
this.mMax = max;
}
public void setProgress(final int progress) {
this.mValue = progress;
if (this.mSeekBar != null) {
this.mSeekBar.setProgress(progress);
}
}
}