1 /*
2  * Copyright 2012 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.notificationstudio.editor;
18 
19 import android.app.Activity;
20 import android.app.DatePickerDialog;
21 import android.app.DatePickerDialog.OnDateSetListener;
22 import android.app.Dialog;
23 import android.app.DialogFragment;
24 import android.app.FragmentTransaction;
25 import android.app.TimePickerDialog;
26 import android.app.TimePickerDialog.OnTimeSetListener;
27 import android.os.Bundle;
28 import android.view.View;
29 import android.view.View.OnClickListener;
30 import android.widget.Button;
31 import android.widget.DatePicker;
32 import android.widget.TimePicker;
33 
34 import com.android.notificationstudio.R;
35 import com.android.notificationstudio.editor.Editors.Editor;
36 import com.android.notificationstudio.model.EditableItem;
37 
38 import java.text.SimpleDateFormat;
39 import java.util.Date;
40 
41 public class DateTimeEditor implements Editor {
42     private static final SimpleDateFormat YYYY_MM_DD = new SimpleDateFormat("yyyy/MM/dd");
43     private static final SimpleDateFormat HH_MM_SS = new SimpleDateFormat("HH:mm:ss");
44 
45     @SuppressWarnings("deprecation")
bindEditor(View v, final EditableItem item, final Runnable afterChange)46     public Runnable bindEditor(View v, final EditableItem item, final Runnable afterChange) {
47 
48         final Button dateButton = (Button) v.findViewById(R.id.date_button);
49         final Button timeButton = (Button) v.findViewById(R.id.time_button);
50         final Button resetButton = (Button) v.findViewById(R.id.reset_button);
51 
52         int vPad = v.getResources().getDimensionPixelSize(R.dimen.editor_datetime_padding_v);
53         int hPad = v.getResources().getDimensionPixelSize(R.dimen.editor_datetime_padding_h);
54         for (Button b : new Button[] { dateButton, timeButton, resetButton }) {
55             b.setVisibility(View.VISIBLE);
56             b.setPadding(hPad, vPad, hPad, vPad);
57         }
58 
59         final Runnable updateButtonText = new Runnable() {
60             public void run() {
61                 Date d = getDateTime(item);
62                 String dateString = YYYY_MM_DD.format(d);
63                 dateButton.setText(dateString);
64                 String timeString = HH_MM_SS.format(d);
65                 timeButton.setText(timeString);
66             }};
67         updateButtonText.run();
68 
69         // wire up date button
70         DialogFragment datePickerFragment = new DialogFragment() {
71             @Override
72             public Dialog onCreateDialog(Bundle savedInstanceState) {
73                 Date d = getDateTime(item);
74                 OnDateSetListener onDateSet = new OnDateSetListener() {
75                     public void onDateSet(DatePicker view, int year,
76                             int monthOfYear, int dayOfMonth) {
77                         Date d = getDateTime(item);
78                         d.setYear(year - 1900);
79                         d.setMonth(monthOfYear);
80                         d.setDate(dayOfMonth);
81                         item.setValue(d.getTime());
82                         updateButtonText.run();
83                         afterChange.run();
84                     }
85                 };
86                 return new DatePickerDialog(getActivity(), onDateSet,
87                         d.getYear() + 1900, d.getMonth(), d.getDate());
88             }
89         };
90         Activity activity = (Activity) v.getContext();
91         launchDialogOnClick(activity, "datePicker", dateButton, datePickerFragment);
92 
93         // wire up time button
94         DialogFragment timePickerFragment = new DialogFragment() {
95             @Override
96             public Dialog onCreateDialog(Bundle savedInstanceState) {
97                 Date d = getDateTime(item);
98                 OnTimeSetListener onTimeSet = new OnTimeSetListener() {
99                     public void onTimeSet(TimePicker view, int hourOfDay,
100                             int minute) {
101                         Date d = getDateTime(item);
102                         d.setHours(hourOfDay);
103                         d.setMinutes(minute);
104                         item.setValue(d.getTime());
105                         updateButtonText.run();
106                         afterChange.run();
107                     }
108                 };
109                 return new TimePickerDialog(getActivity(),
110                         onTimeSet, d.getHours(), d.getMinutes(), true);
111             }
112         };
113         launchDialogOnClick(activity, "timePicker", timeButton, timePickerFragment);
114 
115         // wire up reset button
116         resetButton.setOnClickListener(new OnClickListener(){
117             public void onClick(View v) {
118                 item.setValue(null);
119                 updateButtonText.run();
120                 afterChange.run();
121             }});
122         return updateButtonText;
123     }
124 
getDateTime(EditableItem item)125     private static Date getDateTime(EditableItem item) {
126         long value = item.hasValue() ? item.getValueLong() : System.currentTimeMillis();
127         return new Date(value);
128     }
129 
launchDialogOnClick(final Activity activity, final String tag, Button button, final DialogFragment fragment)130     private static void launchDialogOnClick(final Activity activity,
131             final String tag, Button button, final DialogFragment fragment) {
132         button.setOnClickListener(new OnClickListener(){
133             public void onClick(View v) {
134                 FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
135                 fragment.show(ft, tag);
136             }});
137     }
138 
139 }
140