TimePickerEx.java :  » Calendar » androidcalendarview » org » kazzz » view » dialog » Android Open Source

Android Open Source » Calendar » androidcalendarview 
androidcalendarview » org » kazzz » view » dialog » TimePickerEx.java
/*
* 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.
*/
package org.kazzz.view.dialog;

import java.util.Calendar;

import org.kazzz.R;
import org.kazzz.view.numberpicker.NumberPicker;

import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.widget.FrameLayout;

/**
 * android SDK
 * 
 * @author Kazzz.
 * @since JDK1.5 Android Level 4
 *
 */

public class TimePickerEx extends FrameLayout {
    private static final String TAG = "TimePickerEx";   
    /**
     * 
     * 
     */
    private static final OnTimeChangedListener NO_OP_CHANGE_LISTENER = 
        new OnTimeChangedListener() {
            public void onTimeChanged(TimePickerEx view, int hourOfDay, int minute) {
            }
    };
    
    private int currentHour = 0; // 0-23
    private int currentMinute = 0; // 0-59

    // ui components
    private final NumberPicker hourPicker;
    private final NumberPicker minutePicker;
    
    // callbacks
    private OnTimeChangedListener onTimeChangedListener;

    /**
     * 
     */
    public interface OnTimeChangedListener {

        /**
         * @param view 
         * @param hourOfDay 
         * @param minute 
         */
        void onTimeChanged(TimePickerEx view, int hourOfDay, int minute);
    }
    /**
     * 
     * @param context (Activity)
     */
    public TimePickerEx(Context context) {
        this(context, null);
    }
    /**
     * 
     * @param context (Activity)
     * @param attrs XML
     */
    public TimePickerEx(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
    /**
     * 
     * @param context (Activity)
     * @param attrs XML
     * @param defStyle 
     */
    public TimePickerEx(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        LayoutInflater inflater =
                (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.hour_minute_pair,            this, // we are the parent
            true);

        // 
        this.hourPicker = (NumberPicker) findViewById(R.id.pickerHour);
        this.hourPicker.setOnChangeListener(new NumberPicker.OnChangedListener() {
            public void onChanged(NumberPicker spinner, int oldVal, int newVal) {
                currentHour = newVal;
                onTimeChanged();
            }
        });

        // 
        this.minutePicker = (NumberPicker) findViewById(R.id.pickerMinute);
        this.minutePicker.setRange(0, 59);
        this.minutePicker.setSpeed(100);
        this.minutePicker.setFormatter(NumberPicker.TWO_DIGIT_FORMATTER);
        this.minutePicker.setOnChangeListener(new NumberPicker.OnChangedListener() {
            public void onChanged(NumberPicker spinner, int oldVal, int newVal) {
                currentMinute = newVal;
                onTimeChanged();
            }
        });

        //
        this.configurePickerRanges();

        //
        Calendar cal = Calendar.getInstance();
        this.setOnTimeChangedListener(NO_OP_CHANGE_LISTENER);
        
        //24H
        this.setCurrentHour(cal.get(Calendar.HOUR));
        this.setCurrentMinute(cal.get(Calendar.MINUTE));
        
        if (!this.isEnabled()) {
            this.setEnabled(false);
        }
    }
    

    /**
     * hourPicker
     * @return NumberPicker hourPicker
     */
    public NumberPicker getHourPicker() {
        return this.hourPicker;
    }
    /**
     * minutePicker
     * @return NumberPicker minutePicker
     */
    public NumberPicker getMinutePicker() {
        return this.minutePicker;
    }
    /* (non-Javadoc)
     * @see android.view.View#setEnabled(boolean)
     */
    @Override
    public void setEnabled(boolean enabled) {
        super.setEnabled(enabled);
        this.minutePicker.setEnabled(enabled);
        this.hourPicker.setEnabled(enabled);
    }

    /**
     * /
     */
    private static class SavedState extends BaseSavedState {

        private final int hour;
        private final int minute;

        /**
         * 
         * @param superState Parcelable
         * @param hour 
         * @param minute 
         */
        private SavedState(Parcelable superState, int hour, int minute) {
            super(superState);
            this.hour = hour;
            this.minute = minute;
        }
        /**
         * 
         * @param in Parcel
         */
        private SavedState(Parcel in) {
            super(in);
            this.hour = in.readInt();
            this.minute = in.readInt();
        }

        /**
         * 
         * @return int 
         */
        public int getHour() {
            return this.hour;
        }
        /**
         * 
         * @return int 
         */
        public int getMinute() {
            return this.minute;
        }

        /* (non-Javadoc)
         * @see android.view.AbsSavedState#writeToParcel(android.os.Parcel, int)
         */
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            super.writeToParcel(dest, flags);
            dest.writeInt(this.hour);
            dest.writeInt(this.minute);
        }

        /**
         * CREATE
         */
        @SuppressWarnings("unused")
        public static final Parcelable.Creator<SavedState> CREATOR
                = new Creator<SavedState>() {
            public SavedState createFromParcel(Parcel in) {
                return new SavedState(in);
            }

            public SavedState[] newArray(int size) {
                return new SavedState[size];
            }
        };
    }


    /* (non-Javadoc)
     * @see android.view.View#onSaveInstanceState()
     */
    @Override
    protected Parcelable onSaveInstanceState() {
        Parcelable superState = super.onSaveInstanceState();
        return new SavedState(superState, this.currentHour, this.currentMinute);
    }


    /* (non-Javadoc)
     * @see android.view.View#onRestoreInstanceState(android.os.Parcelable)
     */
    @Override
    protected void onRestoreInstanceState(Parcelable state) {
        SavedState ss = (SavedState) state;
        super.onRestoreInstanceState(ss.getSuperState());
        this.setCurrentHour(ss.getHour());
        this.setCurrentMinute(ss.getMinute());
    }
    
    /**
     * 
     * @param onTimeChangedListener 
     */
    public void setOnTimeChangedListener(OnTimeChangedListener onTimeChangedListener) {
        this.onTimeChangedListener = onTimeChangedListener;
    }

    /**
     * (0-23)
     * @return Integer 
     */
    public Integer getCurrentHour() {
        return this.currentHour;
    }

    /**
     * 
     * @param currentHour 
     */
    public void setCurrentHour(Integer currentHour) {
        Log.d(TAG, "++ setCurrentHour : " + currentHour + " ++ " );
        this.currentHour = currentHour;
        this.updateHourDisplay();
    }

    /**
     * 
     * @return Integer 
     */
    public Integer getCurrentMinute() {
        return this.currentMinute;
    }

    /**
     * 
     * @param currentMiunte 
     */
    public void setCurrentMinute(Integer currentMinute) {
        Log.d(TAG, "++ setCurrentMinute : " + currentMinute + " ++ " );
        this.currentMinute = currentMinute;
        this.updateMinuteDisplay();
    }

    /* (non-Javadoc)
     * @see android.view.View#getBaseline()
     */
    @Override
    public int getBaseline() {
        return hourPicker.getBaseline(); 
    }

    /**
     * 
     */
    private void updateHourDisplay() {
        int currentHour = this.currentHour;
        this.hourPicker.setCurrent(currentHour);
        this.hourPicker.invalidate();
        this.onTimeChanged();
    }
    /**
     * 
     */
    private void configurePickerRanges() {
        this.hourPicker.setRange(0, 23);
        this.hourPicker.setFormatter(NumberPicker.TWO_DIGIT_FORMATTER);
    }
    /**
     * 
     */
    private void onTimeChanged() {
        this.onTimeChangedListener.onTimeChanged(this
                , this.getCurrentHour(), this.getCurrentMinute());
    }

    /**
     * 
     */
    private void updateMinuteDisplay() {
        int currentMin = this.currentMinute;
        this.minutePicker.setCurrent(currentMin);
        this.minutePicker.invalidate();
        this.onTimeChanged();
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.