You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
507 lines
35 KiB
507 lines
35 KiB
<html>
|
|
<head>
|
|
<title>DateTimePicker.java</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<style type="text/css">
|
|
.s0 { color: #8c8c8c; font-style: italic;}
|
|
.s1 { color: #080808;}
|
|
.s2 { color: #0033b3;}
|
|
.s3 { color: #1750eb;}
|
|
.s4 { color: #8c8c8c; font-style: italic;}
|
|
.s5 { color: #067d17;}
|
|
</style>
|
|
</head>
|
|
<body bgcolor="#ffffff">
|
|
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#c0c0c0" >
|
|
<tr><td><center>
|
|
<font face="Arial, Helvetica" color="#000000">
|
|
DateTimePicker.java</font>
|
|
</center></td></tr></table>
|
|
<pre><span class="s0">/*
|
|
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/</span>
|
|
|
|
<span class="s2">package </span><span class="s1">net.micode.notes.ui;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">java.text.DateFormatSymbols;</span>
|
|
<span class="s2">import </span><span class="s1">java.util.Calendar;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.R;</span>
|
|
|
|
|
|
<span class="s2">import </span><span class="s1">android.content.Context;</span>
|
|
<span class="s2">import </span><span class="s1">android.text.format.DateFormat;</span>
|
|
<span class="s2">import </span><span class="s1">android.view.View;</span>
|
|
<span class="s2">import </span><span class="s1">android.widget.FrameLayout;</span>
|
|
<span class="s2">import </span><span class="s1">android.widget.NumberPicker;</span>
|
|
|
|
<span class="s2">public class </span><span class="s1">DateTimePicker </span><span class="s2">extends </span><span class="s1">FrameLayout {</span>
|
|
|
|
<span class="s2">private static final boolean </span><span class="s1">DEFAULT_ENABLE_STATE = </span><span class="s2">true</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private static final int </span><span class="s1">HOURS_IN_HALF_DAY = </span><span class="s3">12</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">HOURS_IN_ALL_DAY = </span><span class="s3">24</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">DAYS_IN_ALL_WEEK = </span><span class="s3">7</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">DATE_SPINNER_MIN_VAL = </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">DATE_SPINNER_MAX_VAL = DAYS_IN_ALL_WEEK - </span><span class="s3">1</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW = </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW = </span><span class="s3">23</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW = </span><span class="s3">1</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW = </span><span class="s3">12</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">MINUT_SPINNER_MIN_VAL = </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">MINUT_SPINNER_MAX_VAL = </span><span class="s3">59</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">AMPM_SPINNER_MIN_VAL = </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s2">private static final int </span><span class="s1">AMPM_SPINNER_MAX_VAL = </span><span class="s3">1</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private final </span><span class="s1">NumberPicker mDateSpinner;</span>
|
|
<span class="s2">private final </span><span class="s1">NumberPicker mHourSpinner;</span>
|
|
<span class="s2">private final </span><span class="s1">NumberPicker mMinuteSpinner;</span>
|
|
<span class="s2">private final </span><span class="s1">NumberPicker mAmPmSpinner;</span>
|
|
<span class="s2">private </span><span class="s1">Calendar mDate;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">String[] mDateDisplayValues = </span><span class="s2">new </span><span class="s1">String[DAYS_IN_ALL_WEEK];</span>
|
|
|
|
<span class="s2">private boolean </span><span class="s1">mIsAm;</span>
|
|
|
|
<span class="s2">private boolean </span><span class="s1">mIs24HourView;</span>
|
|
|
|
<span class="s2">private boolean </span><span class="s1">mIsEnabled = DEFAULT_ENABLE_STATE;</span>
|
|
|
|
<span class="s2">private boolean </span><span class="s1">mInitialising;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">OnDateTimeChangedListener mOnDateTimeChangedListener;</span>
|
|
|
|
<span class="s2">private </span><span class="s1">NumberPicker.OnValueChangeListener mOnDateChangedListener = </span><span class="s2">new </span><span class="s1">NumberPicker.OnValueChangeListener() {</span>
|
|
<span class="s1">@Override</span>
|
|
<span class="s2">public void </span><span class="s1">onValueChange(NumberPicker picker, </span><span class="s2">int </span><span class="s1">oldVal, </span><span class="s2">int </span><span class="s1">newVal) {</span>
|
|
<span class="s1">mDate.add(Calendar.DAY_OF_YEAR, newVal - oldVal);</span>
|
|
<span class="s1">updateDateControl();</span>
|
|
<span class="s1">onDateTimeChanged();</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">};</span>
|
|
|
|
<span class="s2">private </span><span class="s1">NumberPicker.OnValueChangeListener mOnHourChangedListener = </span><span class="s2">new </span><span class="s1">NumberPicker.OnValueChangeListener() {</span>
|
|
<span class="s1">@Override</span>
|
|
<span class="s2">public void </span><span class="s1">onValueChange(NumberPicker picker, </span><span class="s2">int </span><span class="s1">oldVal, </span><span class="s2">int </span><span class="s1">newVal) {</span>
|
|
<span class="s2">boolean </span><span class="s1">isDateChanged = </span><span class="s2">false</span><span class="s1">;</span>
|
|
<span class="s1">Calendar cal = Calendar.getInstance();</span>
|
|
<span class="s2">if </span><span class="s1">(!mIs24HourView) {</span>
|
|
<span class="s2">if </span><span class="s1">(!mIsAm && oldVal == HOURS_IN_HALF_DAY - </span><span class="s3">1 </span><span class="s1">&& newVal == HOURS_IN_HALF_DAY) {</span>
|
|
<span class="s1">cal.setTimeInMillis(mDate.getTimeInMillis());</span>
|
|
<span class="s1">cal.add(Calendar.DAY_OF_YEAR, </span><span class="s3">1</span><span class="s1">);</span>
|
|
<span class="s1">isDateChanged = </span><span class="s2">true</span><span class="s1">;</span>
|
|
<span class="s1">} </span><span class="s2">else if </span><span class="s1">(mIsAm && oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - </span><span class="s3">1</span><span class="s1">) {</span>
|
|
<span class="s1">cal.setTimeInMillis(mDate.getTimeInMillis());</span>
|
|
<span class="s1">cal.add(Calendar.DAY_OF_YEAR, -</span><span class="s3">1</span><span class="s1">);</span>
|
|
<span class="s1">isDateChanged = </span><span class="s2">true</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">if </span><span class="s1">(oldVal == HOURS_IN_HALF_DAY - </span><span class="s3">1 </span><span class="s1">&& newVal == HOURS_IN_HALF_DAY ||</span>
|
|
<span class="s1">oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - </span><span class="s3">1</span><span class="s1">) {</span>
|
|
<span class="s1">mIsAm = !mIsAm;</span>
|
|
<span class="s1">updateAmPmControl();</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s2">if </span><span class="s1">(oldVal == HOURS_IN_ALL_DAY - </span><span class="s3">1 </span><span class="s1">&& newVal == </span><span class="s3">0</span><span class="s1">) {</span>
|
|
<span class="s1">cal.setTimeInMillis(mDate.getTimeInMillis());</span>
|
|
<span class="s1">cal.add(Calendar.DAY_OF_YEAR, </span><span class="s3">1</span><span class="s1">);</span>
|
|
<span class="s1">isDateChanged = </span><span class="s2">true</span><span class="s1">;</span>
|
|
<span class="s1">} </span><span class="s2">else if </span><span class="s1">(oldVal == </span><span class="s3">0 </span><span class="s1">&& newVal == HOURS_IN_ALL_DAY - </span><span class="s3">1</span><span class="s1">) {</span>
|
|
<span class="s1">cal.setTimeInMillis(mDate.getTimeInMillis());</span>
|
|
<span class="s1">cal.add(Calendar.DAY_OF_YEAR, -</span><span class="s3">1</span><span class="s1">);</span>
|
|
<span class="s1">isDateChanged = </span><span class="s2">true</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">int </span><span class="s1">newHour = mHourSpinner.getValue() % HOURS_IN_HALF_DAY + (mIsAm ? </span><span class="s3">0 </span><span class="s1">: HOURS_IN_HALF_DAY);</span>
|
|
<span class="s1">mDate.set(Calendar.HOUR_OF_DAY, newHour);</span>
|
|
<span class="s1">onDateTimeChanged();</span>
|
|
<span class="s2">if </span><span class="s1">(isDateChanged) {</span>
|
|
<span class="s1">setCurrentYear(cal.get(Calendar.YEAR));</span>
|
|
<span class="s1">setCurrentMonth(cal.get(Calendar.MONTH));</span>
|
|
<span class="s1">setCurrentDay(cal.get(Calendar.DAY_OF_MONTH));</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">};</span>
|
|
|
|
<span class="s2">private </span><span class="s1">NumberPicker.OnValueChangeListener mOnMinuteChangedListener = </span><span class="s2">new </span><span class="s1">NumberPicker.OnValueChangeListener() {</span>
|
|
<span class="s1">@Override</span>
|
|
<span class="s2">public void </span><span class="s1">onValueChange(NumberPicker picker, </span><span class="s2">int </span><span class="s1">oldVal, </span><span class="s2">int </span><span class="s1">newVal) {</span>
|
|
<span class="s2">int </span><span class="s1">minValue = mMinuteSpinner.getMinValue();</span>
|
|
<span class="s2">int </span><span class="s1">maxValue = mMinuteSpinner.getMaxValue();</span>
|
|
<span class="s2">int </span><span class="s1">offset = </span><span class="s3">0</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(oldVal == maxValue && newVal == minValue) {</span>
|
|
<span class="s1">offset += </span><span class="s3">1</span><span class="s1">;</span>
|
|
<span class="s1">} </span><span class="s2">else if </span><span class="s1">(oldVal == minValue && newVal == maxValue) {</span>
|
|
<span class="s1">offset -= </span><span class="s3">1</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">if </span><span class="s1">(offset != </span><span class="s3">0</span><span class="s1">) {</span>
|
|
<span class="s1">mDate.add(Calendar.HOUR_OF_DAY, offset);</span>
|
|
<span class="s1">mHourSpinner.setValue(getCurrentHour());</span>
|
|
<span class="s1">updateDateControl();</span>
|
|
<span class="s2">int </span><span class="s1">newHour = getCurrentHourOfDay();</span>
|
|
<span class="s2">if </span><span class="s1">(newHour >= HOURS_IN_HALF_DAY) {</span>
|
|
<span class="s1">mIsAm = </span><span class="s2">false</span><span class="s1">;</span>
|
|
<span class="s1">updateAmPmControl();</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s1">mIsAm = </span><span class="s2">true</span><span class="s1">;</span>
|
|
<span class="s1">updateAmPmControl();</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mDate.set(Calendar.MINUTE, newVal);</span>
|
|
<span class="s1">onDateTimeChanged();</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">};</span>
|
|
|
|
<span class="s2">private </span><span class="s1">NumberPicker.OnValueChangeListener mOnAmPmChangedListener = </span><span class="s2">new </span><span class="s1">NumberPicker.OnValueChangeListener() {</span>
|
|
<span class="s1">@Override</span>
|
|
<span class="s2">public void </span><span class="s1">onValueChange(NumberPicker picker, </span><span class="s2">int </span><span class="s1">oldVal, </span><span class="s2">int </span><span class="s1">newVal) {</span>
|
|
<span class="s1">mIsAm = !mIsAm;</span>
|
|
<span class="s2">if </span><span class="s1">(mIsAm) {</span>
|
|
<span class="s1">mDate.add(Calendar.HOUR_OF_DAY, -HOURS_IN_HALF_DAY);</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s1">mDate.add(Calendar.HOUR_OF_DAY, HOURS_IN_HALF_DAY);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">updateAmPmControl();</span>
|
|
<span class="s1">onDateTimeChanged();</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">};</span>
|
|
|
|
<span class="s2">public interface </span><span class="s1">OnDateTimeChangedListener {</span>
|
|
<span class="s2">void </span><span class="s1">onDateTimeChanged(DateTimePicker view, </span><span class="s2">int </span><span class="s1">year, </span><span class="s2">int </span><span class="s1">month,</span>
|
|
<span class="s2">int </span><span class="s1">dayOfMonth, </span><span class="s2">int </span><span class="s1">hourOfDay, </span><span class="s2">int </span><span class="s1">minute);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public </span><span class="s1">DateTimePicker(Context context) {</span>
|
|
<span class="s2">this</span><span class="s1">(context, System.currentTimeMillis());</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public </span><span class="s1">DateTimePicker(Context context, </span><span class="s2">long </span><span class="s1">date) {</span>
|
|
<span class="s2">this</span><span class="s1">(context, date, DateFormat.is24HourFormat(context));</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public </span><span class="s1">DateTimePicker(Context context, </span><span class="s2">long </span><span class="s1">date, </span><span class="s2">boolean </span><span class="s1">is24HourView) {</span>
|
|
<span class="s2">super</span><span class="s1">(context);</span>
|
|
<span class="s1">mDate = Calendar.getInstance();</span>
|
|
<span class="s1">mInitialising = </span><span class="s2">true</span><span class="s1">;</span>
|
|
<span class="s1">mIsAm = getCurrentHourOfDay() >= HOURS_IN_HALF_DAY;</span>
|
|
<span class="s1">inflate(context, R.layout.datetime_picker, </span><span class="s2">this</span><span class="s1">);</span>
|
|
|
|
<span class="s1">mDateSpinner = (NumberPicker) findViewById(R.id.date);</span>
|
|
<span class="s1">mDateSpinner.setMinValue(DATE_SPINNER_MIN_VAL);</span>
|
|
<span class="s1">mDateSpinner.setMaxValue(DATE_SPINNER_MAX_VAL);</span>
|
|
<span class="s1">mDateSpinner.setOnValueChangedListener(mOnDateChangedListener);</span>
|
|
|
|
<span class="s1">mHourSpinner = (NumberPicker) findViewById(R.id.hour);</span>
|
|
<span class="s1">mHourSpinner.setOnValueChangedListener(mOnHourChangedListener);</span>
|
|
<span class="s1">mMinuteSpinner = (NumberPicker) findViewById(R.id.minute);</span>
|
|
<span class="s1">mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL);</span>
|
|
<span class="s1">mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL);</span>
|
|
<span class="s1">mMinuteSpinner.setOnLongPressUpdateInterval(</span><span class="s3">100</span><span class="s1">);</span>
|
|
<span class="s1">mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener);</span>
|
|
|
|
<span class="s1">String[] stringsForAmPm = </span><span class="s2">new </span><span class="s1">DateFormatSymbols().getAmPmStrings();</span>
|
|
<span class="s1">mAmPmSpinner = (NumberPicker) findViewById(R.id.amPm);</span>
|
|
<span class="s1">mAmPmSpinner.setMinValue(AMPM_SPINNER_MIN_VAL);</span>
|
|
<span class="s1">mAmPmSpinner.setMaxValue(AMPM_SPINNER_MAX_VAL);</span>
|
|
<span class="s1">mAmPmSpinner.setDisplayedValues(stringsForAmPm);</span>
|
|
<span class="s1">mAmPmSpinner.setOnValueChangedListener(mOnAmPmChangedListener);</span>
|
|
|
|
<span class="s0">// update controls to initial state</span>
|
|
<span class="s1">updateDateControl();</span>
|
|
<span class="s1">updateHourControl();</span>
|
|
<span class="s1">updateAmPmControl();</span>
|
|
|
|
<span class="s1">set24HourView(is24HourView);</span>
|
|
|
|
<span class="s0">// set to current time</span>
|
|
<span class="s1">setCurrentDate(date);</span>
|
|
|
|
<span class="s1">setEnabled(isEnabled());</span>
|
|
|
|
<span class="s0">// set the content descriptions</span>
|
|
<span class="s1">mInitialising = </span><span class="s2">false</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">@Override</span>
|
|
<span class="s2">public void </span><span class="s1">setEnabled(</span><span class="s2">boolean </span><span class="s1">enabled) {</span>
|
|
<span class="s2">if </span><span class="s1">(mIsEnabled == enabled) {</span>
|
|
<span class="s2">return</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">super</span><span class="s1">.setEnabled(enabled);</span>
|
|
<span class="s1">mDateSpinner.setEnabled(enabled);</span>
|
|
<span class="s1">mMinuteSpinner.setEnabled(enabled);</span>
|
|
<span class="s1">mHourSpinner.setEnabled(enabled);</span>
|
|
<span class="s1">mAmPmSpinner.setEnabled(enabled);</span>
|
|
<span class="s1">mIsEnabled = enabled;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">@Override</span>
|
|
<span class="s2">public boolean </span><span class="s1">isEnabled() {</span>
|
|
<span class="s2">return </span><span class="s1">mIsEnabled;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Get the current date in millis</span>
|
|
<span class="s0">*</span>
|
|
<span class="s0">* </span><span class="s4">@return </span><span class="s0">the current date in millis</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public long </span><span class="s1">getCurrentDateInTimeMillis() {</span>
|
|
<span class="s2">return </span><span class="s1">mDate.getTimeInMillis();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Set the current date</span>
|
|
<span class="s0">*</span>
|
|
<span class="s0">* </span><span class="s4">@param </span><span class="s0">date The current date in millis</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public void </span><span class="s1">setCurrentDate(</span><span class="s2">long </span><span class="s1">date) {</span>
|
|
<span class="s1">Calendar cal = Calendar.getInstance();</span>
|
|
<span class="s1">cal.setTimeInMillis(date);</span>
|
|
<span class="s1">setCurrentDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH),</span>
|
|
<span class="s1">cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE));</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Set the current date</span>
|
|
<span class="s0">*</span>
|
|
<span class="s0">* </span><span class="s4">@param </span><span class="s0">year The current year</span>
|
|
<span class="s0">* </span><span class="s4">@param </span><span class="s0">month The current month</span>
|
|
<span class="s0">* </span><span class="s4">@param </span><span class="s0">dayOfMonth The current dayOfMonth</span>
|
|
<span class="s0">* </span><span class="s4">@param </span><span class="s0">hourOfDay The current hourOfDay</span>
|
|
<span class="s0">* </span><span class="s4">@param </span><span class="s0">minute The current minute</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public void </span><span class="s1">setCurrentDate(</span><span class="s2">int </span><span class="s1">year, </span><span class="s2">int </span><span class="s1">month,</span>
|
|
<span class="s2">int </span><span class="s1">dayOfMonth, </span><span class="s2">int </span><span class="s1">hourOfDay, </span><span class="s2">int </span><span class="s1">minute) {</span>
|
|
<span class="s1">setCurrentYear(year);</span>
|
|
<span class="s1">setCurrentMonth(month);</span>
|
|
<span class="s1">setCurrentDay(dayOfMonth);</span>
|
|
<span class="s1">setCurrentHour(hourOfDay);</span>
|
|
<span class="s1">setCurrentMinute(minute);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Get current year</span>
|
|
<span class="s0">*</span>
|
|
<span class="s0">* </span><span class="s4">@return </span><span class="s0">The current year</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public int </span><span class="s1">getCurrentYear() {</span>
|
|
<span class="s2">return </span><span class="s1">mDate.get(Calendar.YEAR);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Set current year</span>
|
|
<span class="s0">*</span>
|
|
<span class="s0">* </span><span class="s4">@param </span><span class="s0">year The current year</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public void </span><span class="s1">setCurrentYear(</span><span class="s2">int </span><span class="s1">year) {</span>
|
|
<span class="s2">if </span><span class="s1">(!mInitialising && year == getCurrentYear()) {</span>
|
|
<span class="s2">return</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mDate.set(Calendar.YEAR, year);</span>
|
|
<span class="s1">updateDateControl();</span>
|
|
<span class="s1">onDateTimeChanged();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Get current month in the year</span>
|
|
<span class="s0">*</span>
|
|
<span class="s0">* </span><span class="s4">@return </span><span class="s0">The current month in the year</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public int </span><span class="s1">getCurrentMonth() {</span>
|
|
<span class="s2">return </span><span class="s1">mDate.get(Calendar.MONTH);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Set current month in the year</span>
|
|
<span class="s0">*</span>
|
|
<span class="s0">* </span><span class="s4">@param </span><span class="s0">month The month in the year</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public void </span><span class="s1">setCurrentMonth(</span><span class="s2">int </span><span class="s1">month) {</span>
|
|
<span class="s2">if </span><span class="s1">(!mInitialising && month == getCurrentMonth()) {</span>
|
|
<span class="s2">return</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mDate.set(Calendar.MONTH, month);</span>
|
|
<span class="s1">updateDateControl();</span>
|
|
<span class="s1">onDateTimeChanged();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Get current day of the month</span>
|
|
<span class="s0">*</span>
|
|
<span class="s0">* </span><span class="s4">@return </span><span class="s0">The day of the month</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public int </span><span class="s1">getCurrentDay() {</span>
|
|
<span class="s2">return </span><span class="s1">mDate.get(Calendar.DAY_OF_MONTH);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Set current day of the month</span>
|
|
<span class="s0">*</span>
|
|
<span class="s0">* </span><span class="s4">@param </span><span class="s0">dayOfMonth The day of the month</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public void </span><span class="s1">setCurrentDay(</span><span class="s2">int </span><span class="s1">dayOfMonth) {</span>
|
|
<span class="s2">if </span><span class="s1">(!mInitialising && dayOfMonth == getCurrentDay()) {</span>
|
|
<span class="s2">return</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);</span>
|
|
<span class="s1">updateDateControl();</span>
|
|
<span class="s1">onDateTimeChanged();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Get current hour in 24 hour mode, in the range (0~23)</span>
|
|
<span class="s0">* </span><span class="s4">@return </span><span class="s0">The current hour in 24 hour mode</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public int </span><span class="s1">getCurrentHourOfDay() {</span>
|
|
<span class="s2">return </span><span class="s1">mDate.get(Calendar.HOUR_OF_DAY);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private int </span><span class="s1">getCurrentHour() {</span>
|
|
<span class="s2">if </span><span class="s1">(mIs24HourView){</span>
|
|
<span class="s2">return </span><span class="s1">getCurrentHourOfDay();</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s2">int </span><span class="s1">hour = getCurrentHourOfDay();</span>
|
|
<span class="s2">if </span><span class="s1">(hour > HOURS_IN_HALF_DAY) {</span>
|
|
<span class="s2">return </span><span class="s1">hour - HOURS_IN_HALF_DAY;</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s2">return </span><span class="s1">hour == </span><span class="s3">0 </span><span class="s1">? HOURS_IN_HALF_DAY : hour;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Set current hour in 24 hour mode, in the range (0~23)</span>
|
|
<span class="s0">*</span>
|
|
<span class="s0">* </span><span class="s4">@param </span><span class="s0">hourOfDay</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public void </span><span class="s1">setCurrentHour(</span><span class="s2">int </span><span class="s1">hourOfDay) {</span>
|
|
<span class="s2">if </span><span class="s1">(!mInitialising && hourOfDay == getCurrentHourOfDay()) {</span>
|
|
<span class="s2">return</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mDate.set(Calendar.HOUR_OF_DAY, hourOfDay);</span>
|
|
<span class="s2">if </span><span class="s1">(!mIs24HourView) {</span>
|
|
<span class="s2">if </span><span class="s1">(hourOfDay >= HOURS_IN_HALF_DAY) {</span>
|
|
<span class="s1">mIsAm = </span><span class="s2">false</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(hourOfDay > HOURS_IN_HALF_DAY) {</span>
|
|
<span class="s1">hourOfDay -= HOURS_IN_HALF_DAY;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s1">mIsAm = </span><span class="s2">true</span><span class="s1">;</span>
|
|
<span class="s2">if </span><span class="s1">(hourOfDay == </span><span class="s3">0</span><span class="s1">) {</span>
|
|
<span class="s1">hourOfDay = HOURS_IN_HALF_DAY;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">updateAmPmControl();</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mHourSpinner.setValue(hourOfDay);</span>
|
|
<span class="s1">onDateTimeChanged();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Get currentMinute</span>
|
|
<span class="s0">*</span>
|
|
<span class="s0">* </span><span class="s4">@return </span><span class="s0">The Current Minute</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public int </span><span class="s1">getCurrentMinute() {</span>
|
|
<span class="s2">return </span><span class="s1">mDate.get(Calendar.MINUTE);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Set current minute</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public void </span><span class="s1">setCurrentMinute(</span><span class="s2">int </span><span class="s1">minute) {</span>
|
|
<span class="s2">if </span><span class="s1">(!mInitialising && minute == getCurrentMinute()) {</span>
|
|
<span class="s2">return</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mMinuteSpinner.setValue(minute);</span>
|
|
<span class="s1">mDate.set(Calendar.MINUTE, minute);</span>
|
|
<span class="s1">onDateTimeChanged();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* </span><span class="s4">@return </span><span class="s0">true if this is in 24 hour view else false.</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public boolean </span><span class="s1">is24HourView () {</span>
|
|
<span class="s2">return </span><span class="s1">mIs24HourView;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Set whether in 24 hour or AM/PM mode.</span>
|
|
<span class="s0">*</span>
|
|
<span class="s0">* </span><span class="s4">@param </span><span class="s0">is24HourView True for 24 hour mode. False for AM/PM mode.</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public void </span><span class="s1">set24HourView(</span><span class="s2">boolean </span><span class="s1">is24HourView) {</span>
|
|
<span class="s2">if </span><span class="s1">(mIs24HourView == is24HourView) {</span>
|
|
<span class="s2">return</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mIs24HourView = is24HourView;</span>
|
|
<span class="s1">mAmPmSpinner.setVisibility(is24HourView ? View.GONE : View.VISIBLE);</span>
|
|
<span class="s2">int </span><span class="s1">hour = getCurrentHourOfDay();</span>
|
|
<span class="s1">updateHourControl();</span>
|
|
<span class="s1">setCurrentHour(hour);</span>
|
|
<span class="s1">updateAmPmControl();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">updateDateControl() {</span>
|
|
<span class="s1">Calendar cal = Calendar.getInstance();</span>
|
|
<span class="s1">cal.setTimeInMillis(mDate.getTimeInMillis());</span>
|
|
<span class="s1">cal.add(Calendar.DAY_OF_YEAR, -DAYS_IN_ALL_WEEK / </span><span class="s3">2 </span><span class="s1">- </span><span class="s3">1</span><span class="s1">);</span>
|
|
<span class="s1">mDateSpinner.setDisplayedValues(</span><span class="s2">null</span><span class="s1">);</span>
|
|
<span class="s2">for </span><span class="s1">(</span><span class="s2">int </span><span class="s1">i = </span><span class="s3">0</span><span class="s1">; i < DAYS_IN_ALL_WEEK; ++i) {</span>
|
|
<span class="s1">cal.add(Calendar.DAY_OF_YEAR, </span><span class="s3">1</span><span class="s1">);</span>
|
|
<span class="s1">mDateDisplayValues[i] = (String) DateFormat.format(</span><span class="s5">"MM.dd EEEE"</span><span class="s1">, cal);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">mDateSpinner.setDisplayedValues(mDateDisplayValues);</span>
|
|
<span class="s1">mDateSpinner.setValue(DAYS_IN_ALL_WEEK / </span><span class="s3">2</span><span class="s1">);</span>
|
|
<span class="s1">mDateSpinner.invalidate();</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">updateAmPmControl() {</span>
|
|
<span class="s2">if </span><span class="s1">(mIs24HourView) {</span>
|
|
<span class="s1">mAmPmSpinner.setVisibility(View.GONE);</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s2">int </span><span class="s1">index = mIsAm ? Calendar.AM : Calendar.PM;</span>
|
|
<span class="s1">mAmPmSpinner.setValue(index);</span>
|
|
<span class="s1">mAmPmSpinner.setVisibility(View.VISIBLE);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">updateHourControl() {</span>
|
|
<span class="s2">if </span><span class="s1">(mIs24HourView) {</span>
|
|
<span class="s1">mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW);</span>
|
|
<span class="s1">mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW);</span>
|
|
<span class="s1">} </span><span class="s2">else </span><span class="s1">{</span>
|
|
<span class="s1">mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW);</span>
|
|
<span class="s1">mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Set the callback that indicates the 'Set' button has been pressed.</span>
|
|
<span class="s0">* </span><span class="s4">@param </span><span class="s0">callback the callback, if null will do nothing</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">public void </span><span class="s1">setOnDateTimeChangedListener(OnDateTimeChangedListener callback) {</span>
|
|
<span class="s1">mOnDateTimeChangedListener = callback;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">onDateTimeChanged() {</span>
|
|
<span class="s2">if </span><span class="s1">(mOnDateTimeChangedListener != </span><span class="s2">null</span><span class="s1">) {</span>
|
|
<span class="s1">mOnDateTimeChangedListener.onDateTimeChanged(</span><span class="s2">this</span><span class="s1">, getCurrentYear(),</span>
|
|
<span class="s1">getCurrentMonth(), getCurrentDay(), getCurrentHourOfDay(), getCurrentMinute());</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
</pre>
|
|
</body>
|
|
</html> |