package kz.virtex.htc.tweaker.preference;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import com.htc.preference.HtcDialogPreference;
import com.htc.widget.HtcNumberPicker;
import com.htc.widget.HtcNumberPicker.OnScrollIdleStateListener;
import kz.virtex.htc.tweaker.Main;
import kz.virtex.htc.tweaker.Misc;
import kz.virtex.htc.tweaker.R;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Vibrator;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
public class NumberPickerPreference extends HtcDialogPreference implements OnScrollIdleStateListener
{
private SharedPreferences prefs;
private String mKey;
private int rangeStart;
private int rangeEnd;
private String hint;
private CharSequence[] entries;
public TextView widget;
public HtcNumberPicker picker;
private int pickerIndex = 0;
private String[] pickerEntries;
private String[] pickerScrolledEntries;
private int storedValue;
private boolean dataScrolled = false;
private int defaultValue;
public NumberPickerPreference(Context paramContext, AttributeSet paramAttributeSet)
{
super(paramContext, paramAttributeSet);
mKey = paramAttributeSet.getAttributeValue("http://schemas.android.com/apk/res/android", "key");
prefs = Main.preferences;
TypedArray a = paramContext.obtainStyledAttributes(paramAttributeSet, R.styleable.NumberPicker);
rangeStart = a.getInt(R.styleable.NumberPicker_rangeStart, 0);
rangeEnd = a.getInt(R.styleable.NumberPicker_rangeEnd, 10);
defaultValue = a.getInt(R.styleable.NumberPicker_defaultValue, 0);
storedValue = prefs.getInt(mKey, defaultValue);
hint = a.getString(R.styleable.NumberPicker_hint);
a.recycle();
a = paramContext.obtainStyledAttributes(paramAttributeSet, android.R.styleable.ListView);
entries = a.getTextArray(android.R.styleable.ListView_entries);
a.recycle();
}
protected void onBindView(View view)
{
super.onBindView(view);
LinearLayout widgetFrameView = ((LinearLayout) view.findViewById(android.R.id.widget_frame));
widgetFrameView.setBackgroundResource(R.drawable.btn_gray);
widgetFrameView.setLayoutParams(new LinearLayout.LayoutParams(170, 110));
widgetFrameView.setGravity(Gravity.CENTER_VERTICAL);
widget = new TextView(getContext());
widget.setTextSize(TypedValue.COMPLEX_UNIT_SP, 28.0F);
widget.setTextColor(Color.parseColor("#4c5052"));
widget.setTypeface(Typeface.create("sans-serif-condensed", Typeface.BOLD));
widget.setGravity(Gravity.CENTER);
widget.setText(String.valueOf(storedValue));
widgetFrameView.addView(widget);
}
protected View onCreateDialogView()
{
//Log.d("onCreateDialogView", "onCreateDialogView : storedValue = " + storedValue);
LinearLayout dialogLayout = new LinearLayout(getContext());
dialogLayout.setOrientation(LinearLayout.VERTICAL);
dialogLayout.setPadding(Misc.densify(0), Misc.densify(10), Misc.densify(0), Misc.densify(5));
picker = new HtcNumberPicker(getContext());
picker.setRepeatEnable(true);
picker.setOnScrollIdleStateListener(this);
if (entries != null && entries.length > 0)
{
pickerEntries = new String[entries.length];
pickerScrolledEntries = new String[entries.length];
int i = 0;
for (CharSequence ch : entries)
{
pickerEntries[i] = ch.toString();
pickerScrolledEntries[i] = ch.toString();
i++;
}
rangeStart = 0;
rangeEnd = i-1;
}
else
{
pickerEntries = new String[rangeEnd - rangeStart + 1];
pickerScrolledEntries = new String[rangeEnd - rangeStart + 1];
int i = 0;
while (i <= rangeEnd - rangeStart)
{
pickerEntries[i] = String.valueOf(rangeStart + i);
pickerScrolledEntries[i] = String.valueOf(rangeStart + i);
i++;
}
}
List <String> list = Arrays.asList(pickerScrolledEntries);
Collections.reverse(list);
pickerScrolledEntries = (String[]) list.toArray();
picker.setRange(rangeStart, rangeEnd, pickerEntries);
setCenter(pickerEntries);
TextView hintView = new TextView(getContext());
hintView.setText(hint);
hintView.setTextSize(TypedValue.COMPLEX_UNIT_SP, Misc.densify(4));
hintView.setPadding(Misc.densify(0), Misc.densify(4), Misc.densify(0), Misc.densify(4));
hintView.setTextColor(Color.GRAY);
hintView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
hintView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
dialogLayout.addView(picker);
dialogLayout.addView(hintView);
return dialogLayout;
}
private void setCenter(String[] mEntriesString)
{
for (int i = 0; i < mEntriesString.length; i++)
{
if (Integer.parseInt(mEntriesString[i]) == storedValue)
{
picker.setCenter(i);
pickerIndex = i;
//Log.d("setCenter", "setCenter : index = " + pickerIndex);
}
}
}
public void onClick(DialogInterface paramDialogInterface, int paramInt)
{
super.onClick(paramDialogInterface, paramInt);
//Log.d("onClick", "onClick : pickerIndex = " + pickerIndex);
if (paramInt == DialogInterface.BUTTON_POSITIVE)
{
if (pickerEntries != null && pickerEntries.length > 0)
{
if (dataScrolled)
{
storedValue = Integer.parseInt((String) pickerScrolledEntries[pickerIndex]);
}
else
{
storedValue = Integer.parseInt((String) pickerEntries[pickerIndex]);
}
//Log.d("onClick", "onClick : storedValue = " + storedValue);
Main.putInt(mKey, storedValue);
widget.setText(String.valueOf(storedValue));
}
}
dataScrolled = false;
}
@Override
public void onDataSet(HtcNumberPicker obj, int index)
{
dataScrolled = true;
pickerIndex = index;
//Log.d("onDataSet", "onDataSet : index = " + index);
Vibrator v = (Vibrator) getContext().getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(20);
}
}