Utils.java revision 1ef7f3ae2831dce8fa5e350f78ac4258c1a0a605
1146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project/* 2146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 3146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * 4146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * you may not use this file except in compliance with the License. 6146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * You may obtain a copy of the License at 7146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * 8146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * 10146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * See the License for the specific language governing permissions and 14146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * limitations under the License. 15146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project */ 16146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 17146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectpackage com.android.calendar; 18146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 19146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport static android.provider.Calendar.EVENT_BEGIN_TIME; 20e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan 21146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.content.Context; 22146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.content.Intent; 23e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chanimport android.content.SharedPreferences; 241ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erikimport android.net.Uri; 25e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chanimport android.preference.PreferenceManager; 26146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.text.format.Time; 271ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erikimport android.util.Log; 28146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.view.animation.AlphaAnimation; 29146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.widget.ViewFlipper; 30146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 3156adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashiimport java.util.Calendar; 321ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erikimport java.util.List; 3356adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi 34146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectpublic class Utils { 35146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static void startActivity(Context context, String className, long time) { 36146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project Intent intent = new Intent(Intent.ACTION_VIEW); 37146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 38146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project intent.setClassName(context, className); 39146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project intent.putExtra(EVENT_BEGIN_TIME, time); 4023f400cdb34b08d9003f4a96fca5976ad632e4ceMichael Chan intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP); 41146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 42146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project context.startActivity(intent); 43146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 44146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 4545efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan static String getSharedPreference(Context context, String key, String defaultValue) { 46a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton SharedPreferences prefs = CalendarPreferenceActivity.getSharedPreferences(context); 4745efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan return prefs.getString(key, defaultValue); 4845efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan } 4945efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan 5045efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan static void setSharedPreference(Context context, String key, String value) { 51a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton SharedPreferences prefs = CalendarPreferenceActivity.getSharedPreferences(context); 5245efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan SharedPreferences.Editor editor = prefs.edit(); 5345efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan editor.putString(key, value); 5445efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan editor.commit(); 5545efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan } 5645efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan 57e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan static void setDefaultView(Context context, int viewId) { 58e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan String activityString = CalendarApplication.ACTIVITY_NAMES[viewId]; 59e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan 60a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton SharedPreferences prefs = CalendarPreferenceActivity.getSharedPreferences(context); 61e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan SharedPreferences.Editor editor = prefs.edit(); 62e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan if (viewId == CalendarApplication.AGENDA_VIEW_ID || 63e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan viewId == CalendarApplication.DAY_VIEW_ID) { 64e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan // Record the (new) detail start view only for Agenda and Day 65e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan editor.putString(CalendarPreferenceActivity.KEY_DETAILED_VIEW, activityString); 66e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan } 67e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan 68e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan // Record the (new) start view 69e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan editor.putString(CalendarPreferenceActivity.KEY_START_VIEW, activityString); 70e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan editor.commit(); 71e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan } 72e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan 73146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final Time timeFromIntent(Intent intent) { 74146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project Time time = new Time(); 75146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project time.set(timeFromIntentInMillis(intent)); 76146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project return time; 77146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 78146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 79146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project /** 80146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * If the given intent specifies a time (in milliseconds since the epoch), 81146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * then that time is returned. Otherwise, the current time is returned. 82146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project */ 83146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final long timeFromIntentInMillis(Intent intent) { 84146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // If the time was specified, then use that. Otherwise, use the current time. 851ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erik Uri data = intent.getData(); 86146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long millis = intent.getLongExtra(EVENT_BEGIN_TIME, -1); 871ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erik if (millis == -1 && data != null && data.isHierarchical()) { 881ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erik List<String> path = data.getPathSegments(); 891ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erik if(path.size() == 3 && path.get(1).equals("time")) { 901ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erik try { 911ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erik millis = Long.valueOf(data.getLastPathSegment()); 921ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erik } catch (NumberFormatException e) { 931ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erik Log.i("Calendar", "timeFromIntentInMillis: Data existed but no valid time " + 941ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erik "found. Using current time."); 951ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erik } 961ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erik } 971ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erik } 98146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (millis == -1) { 99146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project millis = System.currentTimeMillis(); 100146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 101146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project return millis; 102146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 103146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 104146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final void applyAlphaAnimation(ViewFlipper v) { 105146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project AlphaAnimation in = new AlphaAnimation(0.0f, 1.0f); 106146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 107146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project in.setStartOffset(0); 108146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project in.setDuration(500); 109146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 110146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project AlphaAnimation out = new AlphaAnimation(1.0f, 0.0f); 111146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 112146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project out.setStartOffset(0); 113146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project out.setDuration(500); 114146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 115146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project v.setInAnimation(in); 116146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project v.setOutAnimation(out); 117146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 118146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 119146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project /** 120146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * Formats the given Time object so that it gives the month and year 121146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * (for example, "September 2007"). 122146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * 123146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * @param time the time to format 124146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * @return the string containing the weekday and the date 125146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project */ 126ad36a3c3cde7a2ec6d3a35d2529d46f03bd8d59dMichael Chan public static String formatMonthYear(Context context, Time time) { 127ad36a3c3cde7a2ec6d3a35d2529d46f03bd8d59dMichael Chan return time.format(context.getResources().getString(R.string.month_year)); 128146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 129146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 130146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // TODO: replace this with the correct i18n way to do this 131146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final String englishNthDay[] = { 132146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project "", "1st", "2nd", "3rd", "4th", "5th", "6th", "7th", "8th", "9th", 133146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project "10th", "11th", "12th", "13th", "14th", "15th", "16th", "17th", "18th", "19th", 134146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project "20th", "21st", "22nd", "23rd", "24th", "25th", "26th", "27th", "28th", "29th", 135146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project "30th", "31st" 136146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project }; 137146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 138146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static String formatNth(int nth) { 139146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project return "the " + englishNthDay[nth]; 140146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 141146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 142146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project /** 143146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * Sets the time to the beginning of the day (midnight) by clearing the 144146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * hour, minute, and second fields. 145146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project */ 146146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project static void setTimeToStartOfDay(Time time) { 147146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project time.second = 0; 148146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project time.minute = 0; 149146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project time.hour = 0; 150146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 15156adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi 15256adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi /** 15356adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi * Get first day of week as android.text.format.Time constant. 15456adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi * @return the first day of week in android.text.format.Time 15556adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi */ 15656adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi public static int getFirstDayOfWeek() { 15756adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi int startDay = Calendar.getInstance().getFirstDayOfWeek(); 15856adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi if (startDay == Calendar.SATURDAY) { 15956adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi return Time.SATURDAY; 16056adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi } else if (startDay == Calendar.MONDAY) { 16156adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi return Time.MONDAY; 16256adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi } else { 16356adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi return Time.SUNDAY; 16456adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi } 16556adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi } 16656adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi 16756adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi /** 16856adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi * Determine whether the column position is Saturday or not. 16956adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi * @param column the column position 17056adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi * @param firstDayOfWeek the first day of week in android.text.format.Time 17156adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi * @return true if the column is Saturday position 17256adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi */ 17356adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi public static boolean isSaturday(int column, int firstDayOfWeek) { 17456adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi return (firstDayOfWeek == Time.SUNDAY && column == 6) 17556adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi || (firstDayOfWeek == Time.MONDAY && column == 5) 17656adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi || (firstDayOfWeek == Time.SATURDAY && column == 0); 17756adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi } 17856adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi 17956adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi /** 18056adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi * Determine whether the column position is Sunday or not. 18156adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi * @param column the column position 18256adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi * @param firstDayOfWeek the first day of week in android.text.format.Time 18356adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi * @return true if the column is Sunday position 18456adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi */ 18556adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi public static boolean isSunday(int column, int firstDayOfWeek) { 18656adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi return (firstDayOfWeek == Time.SUNDAY && column == 0) 18756adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi || (firstDayOfWeek == Time.MONDAY && column == 6) 18856adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi || (firstDayOfWeek == Time.SATURDAY && column == 1); 18956adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi } 190146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project} 191