1 /* 2 * Copyright (C) 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.deskclock; 18 19 import android.app.Fragment; 20 import android.app.FragmentManager; 21 import android.app.FragmentTransaction; 22 import android.content.Context; 23 import android.text.format.DateFormat; 24 import android.widget.Toast; 25 26 import com.android.datetimepicker.time.TimePickerDialog; 27 import com.android.deskclock.provider.Alarm; 28 import com.android.deskclock.provider.AlarmInstance; 29 30 import java.util.Calendar; 31 import java.util.Locale; 32 33 /** 34 * Static utility methods for Alarms. 35 */ 36 public class AlarmUtils { 37 public static final String FRAG_TAG_TIME_PICKER = "time_dialog"; 38 39 public static String getFormattedTime(Context context, Calendar time) { 40 String skeleton = DateFormat.is24HourFormat(context) ? "EHm" : "Ehma"; 41 String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton); 42 return (String) DateFormat.format(pattern, time); 43 } 44 45 public static String getAlarmText(Context context, AlarmInstance instance) { 46 String alarmTimeStr = getFormattedTime(context, instance.getAlarmTime()); 47 return !instance.mLabel.isEmpty() ? alarmTimeStr + " - " + instance.mLabel 48 : alarmTimeStr; 49 } 50 51 public static void showTimeEditDialog(FragmentManager manager, final Alarm alarm, 52 TimePickerDialog.OnTimeSetListener listener, boolean is24HourMode) { 53 54 int hour, minutes; 55 if (alarm == null) { 56 hour = 0; minutes = 0; 57 } else { 58 hour = alarm.hour; 59 minutes = alarm.minutes; 60 } 61 TimePickerDialog dialog = TimePickerDialog.newInstance(listener, 62 hour, minutes, is24HourMode); 63 dialog.setThemeDark(true); 64 65 // Make sure the dialog isn't already added. 66 manager.executePendingTransactions(); 67 final FragmentTransaction ft = manager.beginTransaction(); 68 final Fragment prev = manager.findFragmentByTag(FRAG_TAG_TIME_PICKER); 69 if (prev != null) { 70 ft.remove(prev); 71 } 72 ft.commit(); 73 74 if (dialog != null && !dialog.isAdded()) { 75 dialog.show(manager, FRAG_TAG_TIME_PICKER); 76 } 77 } 78 79 /** 80 * format "Alarm set for 2 days 7 hours and 53 minutes from 81 * now" 82 */ 83 private static String formatToast(Context context, long timeInMillis) { 84 long delta = timeInMillis - System.currentTimeMillis(); 85 long hours = delta / (1000 * 60 * 60); 86 long minutes = delta / (1000 * 60) % 60; 87 long days = hours / 24; 88 hours = hours % 24; 89 90 String daySeq = (days == 0) ? "" : 91 (days == 1) ? context.getString(R.string.day) : 92 context.getString(R.string.days, Long.toString(days)); 93 94 String minSeq = (minutes == 0) ? "" : 95 (minutes == 1) ? context.getString(R.string.minute) : 96 context.getString(R.string.minutes, Long.toString(minutes)); 97 98 String hourSeq = (hours == 0) ? "" : 99 (hours == 1) ? context.getString(R.string.hour) : 100 context.getString(R.string.hours, Long.toString(hours)); 101 102 boolean dispDays = days > 0; 103 boolean dispHour = hours > 0; 104 boolean dispMinute = minutes > 0; 105 106 int index = (dispDays ? 1 : 0) | 107 (dispHour ? 2 : 0) | 108 (dispMinute ? 4 : 0); 109 110 String[] formats = context.getResources().getStringArray(R.array.alarm_set); 111 return String.format(formats[index], daySeq, hourSeq, minSeq); 112 } 113 114 public static void popAlarmSetToast(Context context, long timeInMillis) { 115 String toastText = formatToast(context, timeInMillis); 116 Toast toast = Toast.makeText(context, toastText, Toast.LENGTH_LONG); 117 ToastMaster.setToast(toast); 118 toast.show(); 119 } 120 } 121