package com.iwedia.gui.components;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.NumberPicker;
import android.widget.TimePicker;
import com.iwedia.gui.MainActivity;
import com.iwedia.gui.util.ViewHelper;
public class A4TVTimePicker extends TimePickerDialog implements
android.content.DialogInterface.OnKeyListener {
NumberPicker[] mNumberPicker = new NumberPicker[2];
Button mDoneButton = null;
int mNumberInFocus = 0;
TimePicker mTimePicker;
public A4TVTimePicker(Context context, int theme,
OnTimeSetListener callBack, int hourOfDay, int minute,
boolean is24HourView) {
super(context, theme, callBack, hourOfDay, minute, is24HourView);
setOnKeyListener(this);
}
public A4TVTimePicker(Context context, OnTimeSetListener callBack,
int hourOfDay, int minute, boolean is24HourView) {
super(context, callBack, hourOfDay, minute, is24HourView);
setOnKeyListener(this);
}
public void getTimePickerControls() {
ViewGroup root = (ViewGroup) getButton(BUTTON_POSITIVE).getRootView();
mTimePicker = (TimePicker) ViewHelper.findViewByClass(root,
TimePicker.class);
if (mTimePicker != null) {
LinearLayout layout = (LinearLayout) mTimePicker.getChildAt(0);
mNumberPicker[0] = (NumberPicker) layout.getChildAt(0);
mNumberPicker[1] = (NumberPicker) layout.getChildAt(2);
}
mDoneButton = getButton(BUTTON_POSITIVE);
mDoneButton.requestFocus();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getTimePickerControls();
}
private void setFocusToControl(int index) {
if (index < 0 || index > 1) {
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 < 2; i++) {
if (mNumberPicker[i].getChildAt(0).equals(view)) {
picker = mNumberPicker[i];
break;
}
}
if (picker != null) {
picker.setValue(picker.getValue() + direction);
int hour = mNumberPicker[0].getValue();
int minute = mNumberPicker[1].getValue();
updateTime(hour, minute);
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 = 2;
setFocusToControl(mNumberInFocus);
}
return true;
}
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
mNumberInFocus++;
if (mNumberInFocus > 2) {
mNumberInFocus = 0;
}
setFocusToControl(mNumberInFocus);
return true;
} else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
mNumberInFocus--;
if (mNumberInFocus < 0) {
mNumberInFocus = 2;
}
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);
}
}