• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.tv.settings.widget.picker;
18 
19 import android.os.Bundle;
20 
21 import java.util.ArrayList;
22 import java.util.Calendar;
23 
24 
25 public class TimePicker extends Picker {
26 
27     private static final String EXTRA_24H_FORMAT = "24h_format";
28     private static final String EXTRA_DEFAULT_TO_CURRENT = "delault_to_current";
29 
30     private static final int COL_HOUR = 0;
31     private static final int COL_MINUTE = 1;
32     private static final int COL_AMPM = 2;
33 
34     private static final int HOURS_IN_HALF_DAY = 12;
35 
36     private boolean mIs24hFormat = false;
37     private boolean mPendingTime = false;
38     private int mInitHour;
39     private int mInitMinute;
40     private boolean mInitIsPm;
41 
newInstance()42     public static TimePicker newInstance() {
43         return newInstance(true, true);
44     }
45 
newInstance(boolean is24hFormat, boolean defaultToCurrentTime)46     public static TimePicker newInstance(boolean is24hFormat, boolean defaultToCurrentTime) {
47         TimePicker picker = new TimePicker();
48         Bundle args = new Bundle();
49         args.putBoolean(EXTRA_24H_FORMAT, is24hFormat);
50         args.putBoolean(EXTRA_DEFAULT_TO_CURRENT, defaultToCurrentTime);
51         picker.setArguments(args);
52         return picker;
53     }
54 
55     @Override
onCreate(Bundle savedInstanceState)56     public void onCreate(Bundle savedInstanceState) {
57         mIs24hFormat = getArguments().getBoolean(EXTRA_24H_FORMAT, false);
58         boolean useCurrent = getArguments().getBoolean(EXTRA_DEFAULT_TO_CURRENT, false);
59 
60         super.onCreate(savedInstanceState);
61 
62         if (useCurrent) {
63             mPendingTime = true;
64             Calendar cal = Calendar.getInstance();
65             mInitHour = cal.get(Calendar.HOUR_OF_DAY);
66 
67             if (!mIs24hFormat) {
68                 if (mInitHour >= HOURS_IN_HALF_DAY) {
69                     // PM case, valid hours: 12-23
70                     mInitIsPm = true;
71                     if (mInitHour > HOURS_IN_HALF_DAY) {
72                         mInitHour = mInitHour - HOURS_IN_HALF_DAY;
73                     }
74                 } else {
75                     // AM case, valid hours: 0-11
76                     mInitIsPm = false;
77                     if (mInitHour == 0) {
78                         mInitHour = HOURS_IN_HALF_DAY;
79                     }
80                 }
81             }
82 
83             mInitMinute = cal.get(Calendar.MINUTE);
84         }
85     }
86 
87     @Override
onResume()88     public void onResume() {
89         if (mPendingTime) {
90             mPendingTime = false;
91             setTime(mInitHour, mInitMinute, mInitIsPm);
92         }
93         super.onResume();
94     }
95 
setTime(int hour, int minute, boolean isPm)96     protected boolean setTime(int hour, int minute, boolean isPm) {
97         if (minute < 0 || minute > 59) {
98             return false;
99         }
100 
101         if (mIs24hFormat) {
102             if (hour < 0 || hour > 23) {
103                 return false;
104             }
105         } else {
106             if (hour < 1 || hour > 12) {
107                 return false;
108             }
109         }
110 
111         updateSelection(COL_HOUR, mIs24hFormat ? hour : (hour - 1));
112         updateSelection(COL_MINUTE, minute);
113         if (!mIs24hFormat) {
114             updateSelection(COL_AMPM, isPm ? 1 : 0);
115         }
116 
117         return true;
118     }
119 
120     @Override
getColumns()121     protected ArrayList<PickerColumn> getColumns() {
122         ArrayList<PickerColumn> ret = new ArrayList<PickerColumn>();
123         PickerColumn hours = new PickerColumn(mIs24hFormat ? mConstant.hours24 : mConstant.hours12);
124         PickerColumn minutes = new PickerColumn(mConstant.minutes);
125         ret.add(hours);
126         ret.add(minutes);
127 
128         if (!mIs24hFormat) {
129             PickerColumn ampm = new PickerColumn(mConstant.ampm);
130             ret.add(ampm);
131         }
132         return ret;
133     }
134 
135     @Override
getSeparator()136     protected String getSeparator() {
137         return mConstant.timeSeparator;
138     }
139 }
140