package com.iwedia.gui.components;
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.NumberPicker;
import com.iwedia.gui.MainActivity;
public class A4TVDatePicker extends DatePickerDialog implements
android.content.DialogInterface.OnKeyListener {
private final int ID = 16908290;
NumberPicker[] mNumberPicker = new NumberPicker[3];
Button mDoneButton = null;
int mNumberInFocus = 0;
public A4TVDatePicker(Context context, OnDateSetListener callBack,
int year, int monthOfYear, int dayOfMonth) {
super(context, callBack, year, monthOfYear, dayOfMonth);
setOnKeyListener(this);
}
public A4TVDatePicker(Context context, int theme,
OnDateSetListener callBack, int year, int monthOfYear,
int dayOfMonth) {
super(context, theme, callBack, year, monthOfYear, dayOfMonth);
setOnKeyListener(this);
}
public void getDatePickerControls() {
DatePicker dp = getDatePicker();
LinearLayout layout = (LinearLayout) dp.getChildAt(0);
LinearLayout layout2 = (LinearLayout) layout.getChildAt(0);
mNumberPicker[0] = (NumberPicker) layout2.getChildAt(0);
mNumberPicker[1] = (NumberPicker) layout2.getChildAt(1);
mNumberPicker[2] = (NumberPicker) layout2.getChildAt(2);
mDoneButton = getButton(BUTTON_POSITIVE);
dp.setCalendarViewShown(false);
mDoneButton.requestFocus();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getDatePickerControls();
}
private void setFocusToControl(int index) {
if (index < 0 || index > 2) {
if (mDoneButton != null) {
mDoneButton.requestFocus();
}
} else {
EditText text = (EditText) mNumberPicker[index].getChildAt(0);
text.requestFocus();
text.selectAll();
}
}
private boolean changePickerValue(View view, int direction) {
NumberPicker picker = null;
for (int i = 0; i < 3; i++) {
if (mNumberPicker[i].getChildAt(0).equals(view)) {
picker = mNumberPicker[i];
break;
}
}
if (picker != null) {
picker.setValue(picker.getValue() + direction);
int year = mNumberPicker[2].getValue();
int month = mNumberPicker[0].getValue();
int dayOfMonth = mNumberPicker[1].getValue();
getDatePicker().updateDate(year, month, dayOfMonth);
return true;
}
return false;
}
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
View view = null;
if (getCurrentFocus() != null) {
view = getCurrentFocus();
}
/** If view is found */
if (view != null) {
/** If view is Edit Text return true because of keyboard crash */
if (view instanceof EditText
&& (keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_ENTER)) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
mNumberInFocus = 3;
setFocusToControl(mNumberInFocus);
}
return true;
}
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
mNumberInFocus++;
if (mNumberInFocus > 3) {
mNumberInFocus = 0;
}
setFocusToControl(mNumberInFocus);
return true;
} else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
mNumberInFocus--;
if (mNumberInFocus < 0) {
mNumberInFocus = 3;
}
setFocusToControl(mNumberInFocus);
return true;
} else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
if (changePickerValue(view, 1) == false) {
mNumberInFocus = 1;
setFocusToControl(mNumberInFocus);
}
return true;
} else if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
if (changePickerValue(view, -1) == false) {
mNumberInFocus = 1;
setFocusToControl(mNumberInFocus);
}
return true;
}
}
}
/** If no view is found */
else {
return false;
}
return false;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
MainActivity.activity.getScreenSaverDialog().updateScreensaverTimer();
return super.onKeyDown(keyCode, event);
}
}