package com.softwinner.TvdVideo;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.text.Editable;
import android.text.InputType;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.widget.Button;
import android.widget.EditText;
public class JumpView {
OnTimeConfirmListener mOnTimeConfirmListener;
DialogInterface.OnCancelListener mOnCancelListener;
int mTimeMax;
int mHourMax, mMinMax, mSecMax;
View mJumpView;
Context mContext;
Dialog mJumpDialog;
EditText mJumpHour, mJumpMin, mJumpSec;
Editable mEditableHour, mEditableMin, mEditableSec;
Button mConfirm;
public interface OnTimeConfirmListener {
void onTimeConfirm(int time);
}
public JumpView(Context context, int time, OnTimeConfirmListener confirmListener) {
mOnTimeConfirmListener = confirmListener;
mHourMax = time / 3600;
mMinMax = (time/60) % 60;
mSecMax = time % 60;
mTimeMax = time;
mContext = context;
mJumpView = View.inflate(mContext, R.layout.dialog_jump, null);
mJumpHour = (EditText) mJumpView.findViewById(R.id.jump_hour);
mJumpMin = (EditText) mJumpView.findViewById(R.id.jump_min);
mJumpSec = (EditText) mJumpView.findViewById(R.id.jump_sec);
mConfirm = (Button) mJumpView.findViewById(R.id.jump_confirm);
String timeString = String.format("%02d",mHourMax);
mJumpHour.setText(timeString);
timeString = String.format("%02d",mMinMax);
mJumpMin.setText(timeString);
timeString = String.format("%02d",mSecMax);
mJumpSec.setText(timeString);
mEditableHour = mJumpHour.getEditableText();
mEditableMin = mJumpMin.getEditableText();
mEditableSec = mJumpSec.getEditableText();
mJumpHour.setOnKeyListener(mJumpHourKeyListener);
mJumpMin.setOnKeyListener(mJumpMinKeyListener);
mJumpSec.setOnKeyListener(mJumpSecKeyListener);
mConfirm.setOnKeyListener(mJumpConfirmKeyListener);
mConfirm.setOnClickListener(mJumpConfirmClickListener);
mJumpHour.setOnFocusChangeListener(OnHourFocusChangeListener);
mJumpMin.setOnFocusChangeListener(OnMinFocusChangeListener);
mJumpSec.setOnFocusChangeListener(OnSecFocusChangeListener);
mJumpHour.requestFocus();
mJumpHour.setSelection(0,1);
mJumpDialog = new Dialog(mContext,R.style.jump);
mJumpDialog.setContentView(mJumpView);
mJumpDialog.show();
}
public void setOnCancelListener(DialogInterface.OnCancelListener cancelListener) {
mOnCancelListener = cancelListener;
mJumpDialog.setOnCancelListener(mOnCancelListener);
}
public void jumpViewDismiss() {
if(mJumpDialog != null) {
mJumpDialog.dismiss();
mJumpDialog = null;
}
}
View.OnFocusChangeListener OnHourFocusChangeListener = new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
mJumpHour.setInputType(InputType.TYPE_NULL);
mJumpHour.setSelection(0,1);
return;
}
}
};
View.OnFocusChangeListener OnMinFocusChangeListener = new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
mJumpMin.setInputType(InputType.TYPE_NULL);
mJumpMin.setSelection(0,1);
return;
}
}
};
View.OnFocusChangeListener OnSecFocusChangeListener = new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
mJumpSec.setInputType(InputType.TYPE_NULL);
mJumpSec.setSelection(0,1);
return;
}
}
};
View.OnKeyListener mJumpHourKeyListener = new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK) {
return false;
}else if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
int time = getCurrentTime();
mOnTimeConfirmListener.onTimeConfirm(time);
}
if(event.getAction() == KeyEvent.ACTION_DOWN) {
if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
int index = mJumpHour.getSelectionStart();
if(index != 0) {
mJumpMin.requestFocus();
} else {
mJumpHour.setSelection(1,2);
}
}else if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
int index = mJumpHour.getSelectionStart();
if(index == 0) {
mConfirm.requestFocus();
}else{
mJumpHour.setSelection(0,1);
}
}else if(keyCode == KeyEvent.KEYCODE_DPAD_UP) {
if(mHourMax == 0) {
return true;
}
int index = mJumpHour.getSelectionStart();
int time = getCurrentTime();
int hour = Integer.parseInt(mJumpHour.getText().toString());
if(index == 0) {
if(hour/10 == 9) {
hour = hour%10;
}else {
hour = hour + 10;
}
}else {
if(hour%10 == 9) {
hour = hour/10*10;
} else {
hour++;
}
}
time = hour*3600 + time - time/3600 * 3600;
String timeString = String.format("%02d",hour);
mJumpHour.setText(String.valueOf(timeString));
mJumpHour.setSelection(index,index+1);
}
else if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
if(mHourMax == 0) {
return true;
}
int index = mJumpHour.getSelectionStart();
int time = getCurrentTime();
int hour = Integer.parseInt(mJumpHour.getText().toString());
if(index == 0) {
if(hour/10 == 0) {
hour = 90 + hour%10;
}else {
hour = hour - 10;
}
}else {
if(hour%10 == 0) {
hour = hour/10*10 + 9;
} else {
hour--;
}
}
time = hour*3600 + time - time/3600 * 3600;
String timeString = String.format("%02d",hour);
mJumpHour.setText(String.valueOf(timeString));
mJumpHour.setSelection(index,index+1);
}
else if(isNumKey(keyCode)) {
int hour = Integer.parseInt(mJumpHour.getText().toString());
int time = getCurrentTime();
int index = mJumpHour.getSelectionStart();
if(index == 0) {
hour = (keyCode - KeyEvent.KEYCODE_0) * 10 + hour % 10;
}else {
hour = hour / 10 * 10 + (keyCode - KeyEvent.KEYCODE_0);
}
time = hour*3600 + time - time/3600 * 3600;
String timeString = String.format("%02d",hour);
mJumpHour.setText(String.valueOf(timeString));
mJumpHour.setSelection(index,index+1);
}
}
return true;
}
};
View.OnKeyListener mJumpMinKeyListener = new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK) {
return false;
}else if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
int time = getCurrentTime();
mOnTimeConfirmListener.onTimeConfirm(time);
}
if(event.getAction() == KeyEvent.ACTION_DOWN) {
if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
int index = mJumpMin.getSelectionStart();
if(index != 0) {
mJumpSec.requestFocus();
} else {
mJumpMin.setSelection(1,2);
}
}else if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
int index = mJumpMin.getSelectionStart();
if(index == 0) {
mJumpHour.requestFocus();
} else {
mJumpMin.setSelection(0,1);
}
}else if(keyCode == KeyEvent.KEYCODE_DPAD_UP) {
int index = mJumpMin.getSelectionStart();
int time = getCurrentTime();
int min = Integer.parseInt(mJumpMin.getText().toString());
if(index == 0) {
if(min/10 == 5) {
min = min%10;
}else {
min = min + 10;
}
}else {
if(min%10 == 9) {
min = min/10*10;
} else {
min++;
}
}
time = min*60 + time - time/60%60*60;
String timeString = String.format("%02d",min);
mJumpMin.setText(String.valueOf(timeString));
mJumpMin.setSelection(index,index+1);
}
else if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
int index = mJumpMin.getSelectionStart();
int time = getCurrentTime();
int min = Integer.parseInt(mJumpMin.getText().toString());
if(index == 0) {
if(min/10 == 0) {
min = 50 + min%10;
}else {
min = min - 10;
}
}else {
if(min%10 == 0) {
min = min/10*10 + 9;
} else {
min--;
}
}
time = min*60 + time - time/60%60*60;
String timeString = String.format("%02d",min);
mJumpMin.setText(String.valueOf(timeString));
mJumpMin.setSelection(index,index+1);
}else if(isNumKey(keyCode)) {
int min = Integer.parseInt(mJumpMin.getText().toString());
int time = getCurrentTime();
int index = mJumpMin.getSelectionStart();
if(index == 0) {
min = (keyCode - KeyEvent.KEYCODE_0) * 10 + min % 10;
}else {
min = min / 10 * 10 + (keyCode - KeyEvent.KEYCODE_0);
}
time = min*60 + time - time/60%60*60;
String timeString = String.format("%02d",min);
mJumpMin.setText(String.valueOf(timeString));
mJumpMin.setSelection(index,index+1);
}
}
return true;
}
};
View.OnKeyListener mJumpSecKeyListener = new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK) {
return false;
}else if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
int time = getCurrentTime();
mOnTimeConfirmListener.onTimeConfirm(time);
}
if(event.getAction() == KeyEvent.ACTION_DOWN) {
if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
int index = mJumpSec.getSelectionStart();
if(index != 0) {
mConfirm.requestFocus();
} else {
mJumpSec.setSelection(1,2);
}
}else if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
int index = mJumpSec.getSelectionStart();
if(index == 0) {
mJumpMin.requestFocus();
} else {
mJumpSec.setSelection(0,1);
}
}else if(keyCode == KeyEvent.KEYCODE_DPAD_UP) {
int index = mJumpSec.getSelectionStart();
int time = getCurrentTime();
int sec = Integer.parseInt(mJumpSec.getText().toString());
if(index == 0) {
if(sec/10 == 5) {
sec = sec%10;
}else {
sec = sec + 10;
}
}else {
if(sec%10 == 9) {
sec = sec/10*10;
} else {
sec++;
}
}
time = sec + time/60*60;
String timeString = String.format("%02d",sec);
mJumpSec.setText(String.valueOf(timeString));
mJumpSec.setSelection(index,index+1);
}
else if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
int index = mJumpSec.getSelectionStart();
int time = getCurrentTime();
int sec = Integer.parseInt(mJumpSec.getText().toString());
if(index == 0) {
if(sec/10 == 0) {
sec = 50+sec%10;
}else {
sec = sec - 10;
}
}else {
if(sec%10 == 0) {
sec = sec/10*10 + 9;
} else {
sec--;
}
}
time = sec + time/60*60;
String timeString = String.format("%02d",sec);
mJumpSec.setText(String.valueOf(timeString));
mJumpSec.setSelection(index,index+1);
}else if(isNumKey(keyCode)) {
int sec = Integer.parseInt(mJumpSec.getText().toString());
int time = getCurrentTime();
int index = mJumpSec.getSelectionStart();
if(index == 0) {
sec = (keyCode - KeyEvent.KEYCODE_0) * 10 + sec % 10;
}else {
sec = sec / 10 * 10 + (keyCode - KeyEvent.KEYCODE_0);
}
time = sec + time/60*60;
String timeString = String.format("%02d",sec);
mJumpSec.setText(String.valueOf(timeString));
mJumpSec.setSelection(index,index+1);
}
}
return true;
}
};
View.OnKeyListener mJumpConfirmKeyListener = new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK) {
return false;
}else if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
int time = getCurrentTime();
mOnTimeConfirmListener.onTimeConfirm(time);
}
if(event.getAction() == KeyEvent.ACTION_DOWN) {
if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT || keyCode == KeyEvent.KEYCODE_DPAD_UP) {
mJumpHour.requestFocus();
}else if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
mJumpSec.requestFocus();
}
}
return true;
}
};
private View.OnClickListener mJumpConfirmClickListener = new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
int time = getCurrentTime();
mOnTimeConfirmListener.onTimeConfirm(time);
}
};
private boolean isNumKey(int nkey) {
if(nkey >= KeyEvent.KEYCODE_0 && nkey <= KeyEvent.KEYCODE_9) {
return true;
}else {
return false;
}
}
private int getCurrentTime() {
int hour = Integer.parseInt(mJumpHour.getText().toString());
int min = Integer.parseInt(mJumpMin.getText().toString());
int sec = Integer.parseInt(mJumpSec.getText().toString());
return (hour*3600+min*60+sec);
}
}