public static TimePickerDialog newInstance(OnTimeSetListener callback, int hourOfDay, int minute, boolean is24HourMode) { TimePickerDialog ret = new TimePickerDialog(); ret.initialize(callback, hourOfDay, minute, is24HourMode); return ret; }
dismiss(); return true; } else if (keyCode == KeyEvent.KEYCODE_TAB) { if(mInKbMode) { if (isTypedTimeFullyLegal()) { finishKbMode(true); if (!isTypedTimeFullyLegal()) { return true; finishKbMode(false); dismiss(); return true; } else if (keyCode == KeyEvent.KEYCODE_DEL) { if (mInKbMode) { if (!mTypedTimes.isEmpty()) { int deleted = deleteLastTypedKey(); String deletedKeyStr; if (deleted == getAmOrPmKeyCode(AM)) { deletedKeyStr = mAmText; } else if (deleted == getAmOrPmKeyCode(PM)) { deletedKeyStr = mPmText; } else { deletedKeyStr = String.format("%d", getValFromKeyCode(deleted)); updateDisplay(true); || keyCode == KeyEvent.KEYCODE_8 || keyCode == KeyEvent.KEYCODE_9
@Override public Dialog onCreateDialog(Bundle savedInstanceState) { return new AppCompatDialog(getActivity(), R.style.TimePickerDialog); }
/** * Check if the time that has been typed so far is completely legal, as is. */ private boolean isTypedTimeFullyLegal() { if (mIs24HourMode) { // For 24-hour mode, the time is legal if the hours and minutes are each legal. Note: // getEnteredTime() will ONLY call isTypedTimeFullyLegal() when NOT in 24hour mode. int[] values = getEnteredTime(null); return (values[0] >= 0 && values[1] >= 0 && values[1] < 60); } else { // For AM/PM mode, the time is legal if it contains an AM or PM, as those can only be // legally added at specific times based on the tree's algorithm. return (mTypedTimes.contains(getAmOrPmKeyCode(AM)) || mTypedTimes.contains(getAmOrPmKeyCode(PM))); } }
/** * Called by the picker for updating the header display. */ @Override public void onValueSelected(int pickerIndex, int newValue, boolean autoAdvance) { if (pickerIndex == HOUR_INDEX) { setHour(newValue, false); String announcement = String.format("%d", newValue); if (mAllowAutoAdvance && autoAdvance) { setCurrentItemShowing(MINUTE_INDEX, true, true, false); announcement += ". " + mSelectMinutes; } else { mTimePicker.setContentDescription(mHourPickerDescription + ": " + newValue); } Utils.tryAccessibilityAnnounce(mTimePicker, announcement); } else if (pickerIndex == MINUTE_INDEX){ setMinute(newValue); mTimePicker.setContentDescription(mMinutePickerDescription + ": " + newValue); } else if (pickerIndex == AMPM_INDEX) { updateAmPmDisplay(newValue); } else if (pickerIndex == ENABLE_PICKER_INDEX) { if (!isTypedTimeFullyLegal()) { mTypedTimes.clear(); } finishKbMode(true); } }
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE); Resources res = getResources(); mHourPickerDescription = res.getString(R.string.hour_picker_description); mSelectHours = res.getString(R.string.select_hours); mHapticFeedbackController = new HapticFeedbackController(getActivity()); mTimePicker.initialize(getActivity(), mHapticFeedbackController, mInitialHourOfDay, mInitialMinute, mIs24HourMode); setCurrentItemShowing(currentItemShowing, false, true, true); mTimePicker.invalidate(); } else { mAmPmTextView.setVisibility(View.VISIBLE); updateAmPmDisplay(mInitialHourOfDay < 12? AM : PM); mAmPmHitspace.setOnClickListener(new OnClickListener() { @Override setHour(mInitialHourOfDay, true); setMinute(mInitialMinute); mPlaceholderText = mDoublePlaceholderText.charAt(0); mAmKeyCode = mPmKeyCode = -1; generateLegalTimesTree(); if (mInKbMode) {
int hour = mTimePicker.getHours(); int minute = mTimePicker.getMinutes(); setHour(hour, true); setMinute(minute); if (!mIs24HourMode) { updateAmPmDisplay(hour < 12? AM : PM); setCurrentItemShowing(mTimePicker.getCurrentItemShowing(), true, true, true); mDoneButton.setEnabled(true); } else { Boolean[] enteredZeros = {false, false}; int[] values = getEnteredTime(enteredZeros); String hourFormat = enteredZeros[0]? "%02d" : "%2d"; String minuteFormat = (enteredZeros[1])? "%02d" : "%2d"; mMinuteView.setTextColor(mUnselectedColor); if (!mIs24HourMode) { updateAmPmDisplay(values[2]);
public void onValueSelected(int pickerIndex, int newValue, boolean autoAdvance) { if (pickerIndex == HOUR_INDEX) { if (valueRespectsHoursConstraint(newValue)) { setHour(newValue, false); String announcement = String.format("%d", newValue); if (mAllowAutoAdvance && autoAdvance) { setCurrentItemShowing(MINUTE_INDEX, true, true, false); announcement += ". " + mSelectMinutes; } else { if (valueRespectsMinutesConstraint(newValue)) { setMinute(newValue); mTimePicker.setContentDescription(mMinutePickerDescription + ": " + newValue); updateAmPmDisplay(newValue); } else if (pickerIndex == ENABLE_PICKER_INDEX) { if (!isTypedTimeFullyLegal()) { mTypedTimes.clear(); finishKbMode(true);
private boolean addKeyIfLegal(int keyCode) { // If we're in 24hour mode, we'll need to check if the input is full. If in AM/PM mode, // we'll need to see if AM/PM have been typed. if ((mIs24HourMode && mTypedTimes.size() == 4) || (!mIs24HourMode && isTypedTimeFullyLegal())) { return false; } mTypedTimes.add(keyCode); if (!isTypedTimeLegalSoFar()) { deleteLastTypedKey(); return false; } int val = getValFromKeyCode(keyCode); Utils.tryAccessibilityAnnounce(mTimePicker, String.format("%d", val)); // Automatically fill in 0's if AM or PM was legally entered. if (isTypedTimeFullyLegal()) { if (!mIs24HourMode && mTypedTimes.size() <= 3) { mTypedTimes.add(mTypedTimes.size() - 1, KeyEvent.KEYCODE_0); mTypedTimes.add(mTypedTimes.size() - 1, KeyEvent.KEYCODE_0); } mDoneButton.setEnabled(true); } return true; }
int amOrPm = -1; int startIndex = 1; if (!mIs24HourMode && isTypedTimeFullyLegal()) { int keyCode = mTypedTimes.get(mTypedTimes.size() - 1); if (keyCode == getAmOrPmKeyCode(AM)) { amOrPm = AM; } else if (keyCode == getAmOrPmKeyCode(PM)){ amOrPm = PM; int hour = -1; for (int i = startIndex; i <= mTypedTimes.size(); i++) { int val = getValFromKeyCode(mTypedTimes.get(mTypedTimes.size() - i)); if (i == startIndex) { minute = val;
@Override public void onClick(View v) { if (mInKbMode && isTypedTimeFullyLegal()) { finishKbMode(false); } else { tryVibrate(); } if (mCallback != null) { mCallback.onTimeSet(mTimePicker, mTimePicker.getHours(), mTimePicker.getMinutes()); } dismiss(); } });
/** * Try to start keyboard mode with the specified key, as long as the timepicker is not in the * middle of a touch-event. * @param keyCode The key to use as the first press. Keyboard mode will not be started if the * key is not legal to start with. Or, pass in -1 to get into keyboard mode without a starting * key. */ private void tryStartingKbMode(int keyCode) { if (mTimePicker.trySettingInputEnabled(false) && (keyCode == -1 || addKeyIfLegal(keyCode))) { mInKbMode = true; mDoneButton.setEnabled(false); updateDisplay(false); } }
/** * Get out of keyboard mode. If there is nothing in typedTimes, revert to TimePicker's time. * @param changeDisplays If true, update the displays with the relevant time. */ private void finishKbMode(boolean updateDisplays) { mInKbMode = false; if (!mTypedTimes.isEmpty()) { int values[] = getEnteredTime(null); mTimePicker.setTime(values[0], values[1]); if (!mIs24HourMode) { mTimePicker.setAmOrPm(values[2]); } mTypedTimes.clear(); } if (updateDisplays) { updateDisplay(false); mTimePicker.trySettingInputEnabled(true); } }
com.android.datetimepicker.time.TimePickerDialog dialog = new com.android.datetimepicker.time.TimePickerDialog(); dialog.newInstance((OnTimeSetListener) mTimeSetListener, getHour, getMinute, true);
Node ampm = new Node(getAmOrPmKeyCode(AM), getAmOrPmKeyCode(PM));
@Override public void onClick(View v) { if(mCallback != null) { mCallback.onTimeCleared(mTimePicker); } dismiss(); } });
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); Resources res = getResources(); mHourPickerDescription = res.getString(R.string.hour_picker_description); mSelectHours = res.getString(R.string.select_hours); mHapticFeedbackController = new HapticFeedbackController(getActivity()); mTimePicker.initialize(getActivity(), mHapticFeedbackController, mInitialHourOfDay, mInitialMinute, mIs24HourMode, mMinHour, mMaxHour, mMinMinute, mMaxMinute); int currentItemShowing = HOUR_INDEX; setCurrentItemShowing(currentItemShowing, false, true, true); mTimePicker.invalidate(); } else { mAmPmTextView.setVisibility(View.VISIBLE); updateAmPmDisplay(mInitialHourOfDay < 12? AM : PM); mAmPmHitspace.setOnClickListener(new OnClickListener() { @Override setHour(mInitialHourOfDay, true); setMinute(mInitialMinute); mPlaceholderText = mDoublePlaceholderText.charAt(0); mAmKeyCode = mPmKeyCode = -1; generateLegalTimesTree();
int hour = mTimePicker.getHours(); int minute = mTimePicker.getMinutes(); setHour(hour, true); setMinute(minute); if (!mIs24HourMode) { updateAmPmDisplay(hour < 12? AM : PM); setCurrentItemShowing(mTimePicker.getCurrentItemShowing(), true, true, true); mDoneButton.setEnabled(true); } else { Boolean[] enteredZeros = {false, false}; int[] values = getEnteredTime(enteredZeros); String hourFormat = enteredZeros[0]? "%02d" : "%2d"; String minuteFormat = (enteredZeros[1])? "%02d" : "%2d"; mMinuteView.setTextColor(mUnselectedColor); if (!mIs24HourMode) { updateAmPmDisplay(values[2]);
private boolean addKeyIfLegal(int keyCode) { // If we're in 24hour mode, we'll need to check if the input is full. If in AM/PM mode, // we'll need to see if AM/PM have been typed. if ((mIs24HourMode && mTypedTimes.size() == 4) || (!mIs24HourMode && isTypedTimeFullyLegal())) { return false; } mTypedTimes.add(keyCode); if (!isTypedTimeLegalSoFar()) { deleteLastTypedKey(); return false; } int val = getValFromKeyCode(keyCode); Utils.tryAccessibilityAnnounce(mTimePicker, String.format("%d", val)); // Automatically fill in 0's if AM or PM was legally entered. if (isTypedTimeFullyLegal()) { if (!mIs24HourMode && mTypedTimes.size() <= 3) { mTypedTimes.add(mTypedTimes.size() - 1, KeyEvent.KEYCODE_0); mTypedTimes.add(mTypedTimes.size() - 1, KeyEvent.KEYCODE_0); } mDoneButton.setEnabled(true); } return true; }
int amOrPm = -1; int startIndex = 1; if (!mIs24HourMode && isTypedTimeFullyLegal()) { int keyCode = mTypedTimes.get(mTypedTimes.size() - 1); if (keyCode == getAmOrPmKeyCode(AM)) { amOrPm = AM; } else if (keyCode == getAmOrPmKeyCode(PM)){ amOrPm = PM; int hour = -1; for (int i = startIndex; i <= mTypedTimes.size(); i++) { int val = getValFromKeyCode(mTypedTimes.get(mTypedTimes.size() - i)); if (i == startIndex) { minute = val;