Back to project page screenstandby.
The source code is released under:
GNU General Public License
If you think the Android project screenstandby listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/******************************************************************************* * Copyright (c) 2014 Hoang Nguyen.//ww w .j av a2 s . c o m * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v2.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * * Contributors: * Hoang Nguyen - initial API and implementation ******************************************************************************/ package com.nkahoang.screenstandby; // import android.annotation.Widget; import android.content.Context; import android.os.Parcel; import android.os.Parcelable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.widget.FrameLayout; /** * A view for selecting the time of day, in either 24 hour or AM/PM mode. * * The hour, each minute digit, and AM/PM (if applicable) can be conrolled by * vertical spinners. * * The hour can be entered by keyboard input. Entering in two digit hours * can be accomplished by hitting two digits within a timeout of about a * second (e.g. '1' then '2' to select 12). * * The minutes can be entered by entering single digits. * * Under AM/PM mode, the user can hit 'a', 'A", 'p' or 'P' to pick. * * For a dialog using this view, see {@link android.app.TimePickerDialog}. */ // @Widget public class TimePicker extends FrameLayout { /** * A no-op callback used in the constructor to avoid null checks * later in the code. */ private static final OnTimeChangedListener NO_OP_CHANGE_LISTENER = new OnTimeChangedListener() { public void onTimeChanged(TimePicker view, int hourOfDay, int minute, int second) { } }; // state private int mCurrentHour = 0; // 0- private int mCurrentMinute = 0; // 0-59 private int mCurrentSecond = 0; // 0-59 // ui components private final NumberPicker mHourPicker; private final NumberPicker mMinutePicker; private final NumberPicker mSecondPicker; // callbacks private OnTimeChangedListener mOnTimeChangedListener; /** * The callback interface used to indicate the time has been adjusted. */ public interface OnTimeChangedListener { /** * @param view The view associated with this listener. * @param hour The current hour. * @param minute The current minute. * @param second The current second. */ void onTimeChanged(TimePicker view, int hour, int minute, int second); } public TimePicker(Context context) { this(context, null); } public TimePicker(Context context, AttributeSet attrs) { this(context, attrs, 0); } public TimePicker(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.time_picker, this, // we are the parent true); // digits of hour mHourPicker = (NumberPicker) findViewById(R.id.hour); mHourPicker.setRange(0, 99); mHourPicker.setSpeed(100); mHourPicker.setFormatter(NumberPicker.TWO_DIGIT_FORMATTER); mHourPicker.setOnChangeListener(new NumberPicker.OnChangedListener() { public void onChanged(NumberPicker spinner, int oldVal, int newVal) { mCurrentHour = newVal; onTimeChanged(); } }); // digits of minute mMinutePicker = (NumberPicker) findViewById(R.id.minute); mMinutePicker.setRange(0, 59); mMinutePicker.setSpeed(100); mMinutePicker.setFormatter(NumberPicker.TWO_DIGIT_FORMATTER); mMinutePicker.setOnChangeListener(new NumberPicker.OnChangedListener() { public void onChanged(NumberPicker spinner, int oldVal, int newVal) { mCurrentMinute = newVal; onTimeChanged(); } }); // digits of second mSecondPicker = (NumberPicker) findViewById(R.id.second); mSecondPicker.setRange(0, 59); mSecondPicker.setSpeed(100); mSecondPicker.setFormatter(NumberPicker.TWO_DIGIT_FORMATTER); mSecondPicker.setOnChangeListener(new NumberPicker.OnChangedListener() { public void onChanged(NumberPicker spinner, int oldVal, int newVal) { mCurrentSecond = newVal; onTimeChanged(); } }); // initialize to current time setOnTimeChangedListener(NO_OP_CHANGE_LISTENER); setCurrentHour(mCurrentHour); setCurrentMinute(mCurrentMinute); setCurrentSecond(mCurrentSecond); if (!isEnabled()) { setEnabled(false); } } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); mHourPicker.setEnabled(enabled); mMinutePicker.setEnabled(enabled); mSecondPicker.setEnabled(enabled); } /** * Used to save / restore state of time picker */ private static class SavedState extends BaseSavedState { private final int mHour; private final int mMinute; private final int mSecond; private SavedState(Parcelable superState, int hour, int minute, int second) { super(superState); mHour = hour; mMinute = minute; mSecond = second; } private SavedState(Parcel in) { super(in); mHour = in.readInt(); mMinute = in.readInt(); mSecond = in.readInt(); } public int getHour() { return mHour; } public int getMinute() { return mMinute; } public int getSecond() { return mSecond; } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeInt(mHour); dest.writeInt(mMinute); dest.writeInt(mSecond); } } @Override protected Parcelable onSaveInstanceState() { Parcelable superState = super.onSaveInstanceState(); return new SavedState(superState, mCurrentHour, mCurrentMinute, mCurrentSecond); } @Override protected void onRestoreInstanceState(Parcelable state) { SavedState ss = (SavedState) state; super.onRestoreInstanceState(ss.getSuperState()); setCurrentHour(ss.getHour()); setCurrentMinute(ss.getMinute()); setCurrentSecond(ss.getSecond()); } /** * Set the callback that indicates the time has been adjusted by the user. * @param onTimeChangedListener the callback, should not be null. */ public void setOnTimeChangedListener(OnTimeChangedListener onTimeChangedListener) { mOnTimeChangedListener = onTimeChangedListener; } /** * @return The current hour (0-). */ public Integer getCurrentHour() { return mCurrentHour; } /** * Set the current hour. */ public void setCurrentHour(Integer currentHour) { this.mCurrentHour = currentHour; updateHourDisplay(); } /** * @return The current minute. */ public Integer getCurrentMinute() { return mCurrentMinute; } /** * Set the current minute (0-59). */ public void setCurrentMinute(Integer currentMinute) { this.mCurrentMinute = currentMinute; updateMinuteDisplay(); } /** * @return The current second. */ public Integer getCurrentSecond() { return mCurrentSecond; } /** * Set the current second (0-59). */ public void setCurrentSecond(Integer currentSecond) { this.mCurrentSecond = currentSecond; updateSecondDisplay(); } @Override public int getBaseline() { return mHourPicker.getBaseline(); } /** * Set the state of the spinners appropriate to the current hour. */ private void updateHourDisplay() { int currentHour = mCurrentHour; mHourPicker.setCurrent(currentHour); onTimeChanged(); } private void onTimeChanged() { mOnTimeChangedListener.onTimeChanged(this, getCurrentHour(), getCurrentMinute(), getCurrentSecond()); } /** * Set the state of the spinners appropriate to the current minute. */ private void updateMinuteDisplay() { mMinutePicker.setCurrent(mCurrentMinute); mOnTimeChangedListener.onTimeChanged(this, getCurrentHour(), getCurrentMinute(), getCurrentSecond()); } /** * Set the state of the spinners appropriate to the current second. */ private void updateSecondDisplay() { mSecondPicker.setCurrent(mCurrentSecond); mOnTimeChangedListener.onTimeChanged(this, getCurrentHour(), getCurrentMinute(), getCurrentSecond()); } }