/* * Copyright 2012 The Android Open Source Project * * 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 com.android.notificationstudio.editor; import android.app.Activity; import android.app.DatePickerDialog; import android.app.DatePickerDialog.OnDateSetListener; import android.app.Dialog; import android.app.DialogFragment; import android.app.FragmentTransaction; import android.app.TimePickerDialog; import android.app.TimePickerDialog.OnTimeSetListener; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.DatePicker; import android.widget.TimePicker; import com.android.notificationstudio.R; import com.android.notificationstudio.editor.Editors.Editor; import com.android.notificationstudio.model.EditableItem; import java.text.SimpleDateFormat; import java.util.Date; public class DateTimeEditor implements Editor { private static final SimpleDateFormat YYYY_MM_DD = new SimpleDateFormat("yyyy/MM/dd"); private static final SimpleDateFormat HH_MM_SS = new SimpleDateFormat("HH:mm:ss"); @SuppressWarnings("deprecation") public Runnable bindEditor(View v, final EditableItem item, final Runnable afterChange) { final Button dateButton = (Button) v.findViewById(R.id.date_button); final Button timeButton = (Button) v.findViewById(R.id.time_button); final Button resetButton = (Button) v.findViewById(R.id.reset_button); int vPad = v.getResources().getDimensionPixelSize(R.dimen.editor_datetime_padding_v); int hPad = v.getResources().getDimensionPixelSize(R.dimen.editor_datetime_padding_h); for (Button b : new Button[] { dateButton, timeButton, resetButton }) { b.setVisibility(View.VISIBLE); b.setPadding(hPad, vPad, hPad, vPad); } final Runnable updateButtonText = new Runnable() { public void run() { Date d = getDateTime(item); String dateString = YYYY_MM_DD.format(d); dateButton.setText(dateString); String timeString = HH_MM_SS.format(d); timeButton.setText(timeString); }}; updateButtonText.run(); // wire up date button DialogFragment datePickerFragment = new DialogFragment() { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Date d = getDateTime(item); OnDateSetListener onDateSet = new OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { Date d = getDateTime(item); d.setYear(year - 1900); d.setMonth(monthOfYear); d.setDate(dayOfMonth); item.setValue(d.getTime()); updateButtonText.run(); afterChange.run(); } }; return new DatePickerDialog(getActivity(), onDateSet, d.getYear() + 1900, d.getMonth(), d.getDate()); } }; Activity activity = (Activity) v.getContext(); launchDialogOnClick(activity, "datePicker", dateButton, datePickerFragment); // wire up time button DialogFragment timePickerFragment = new DialogFragment() { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Date d = getDateTime(item); OnTimeSetListener onTimeSet = new OnTimeSetListener() { public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Date d = getDateTime(item); d.setHours(hourOfDay); d.setMinutes(minute); item.setValue(d.getTime()); updateButtonText.run(); afterChange.run(); } }; return new TimePickerDialog(getActivity(), onTimeSet, d.getHours(), d.getMinutes(), true); } }; launchDialogOnClick(activity, "timePicker", timeButton, timePickerFragment); // wire up reset button resetButton.setOnClickListener(new OnClickListener(){ public void onClick(View v) { item.setValue(null); updateButtonText.run(); afterChange.run(); }}); return updateButtonText; } private static Date getDateTime(EditableItem item) { long value = item.hasValue() ? item.getValueLong() : System.currentTimeMillis(); return new Date(value); } private static void launchDialogOnClick(final Activity activity, final String tag, Button button, final DialogFragment fragment) { button.setOnClickListener(new OnClickListener(){ public void onClick(View v) { FragmentTransaction ft = activity.getFragmentManager().beginTransaction(); fragment.show(ft, tag); }}); } }