Utils.java revision 56adc7b3f9e62ada7f3708c5c7228e8ac5af1755
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;
24146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.content.res.Resources;
25e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chanimport android.preference.PreferenceManager;
26146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.text.format.Time;
27146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.view.animation.AlphaAnimation;
28146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.widget.ViewFlipper;
29146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
3056adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashiimport java.util.Calendar;
3156adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi
32146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectpublic class Utils {
33146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    public static void startActivity(Context context, String className, long time) {
34146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        Intent intent = new Intent(Intent.ACTION_VIEW);
35146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
36146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        intent.setClassName(context, className);
37146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        intent.putExtra(EVENT_BEGIN_TIME, time);
3823f400cdb34b08d9003f4a96fca5976ad632e4ceMichael Chan        intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP);
39146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
40146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        context.startActivity(intent);
41146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    }
42146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
43e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan    static void setDefaultView(Context context, int viewId) {
44e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan        String activityString = CalendarApplication.ACTIVITY_NAMES[viewId];
45e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan
46e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
47e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan        SharedPreferences.Editor editor = prefs.edit();
48e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan        if (viewId == CalendarApplication.AGENDA_VIEW_ID ||
49e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan                viewId == CalendarApplication.DAY_VIEW_ID) {
50e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan            // Record the (new) detail start view only for Agenda and Day
51e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan            editor.putString(CalendarPreferenceActivity.KEY_DETAILED_VIEW, activityString);
52e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan        }
53e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan
54e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan        // Record the (new) start view
55e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan        editor.putString(CalendarPreferenceActivity.KEY_START_VIEW, activityString);
56e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan        editor.commit();
57e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan    }
58e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan
59146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    public static final Time timeFromIntent(Intent intent) {
60146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        Time time = new Time();
61146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        time.set(timeFromIntentInMillis(intent));
62146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        return time;
63146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    }
64146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
65146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    /**
66146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project     * If the given intent specifies a time (in milliseconds since the epoch),
67146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project     * then that time is returned. Otherwise, the current time is returned.
68146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project     */
69146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    public static final long timeFromIntentInMillis(Intent intent) {
70146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        // If the time was specified, then use that.  Otherwise, use the current time.
71146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        long millis = intent.getLongExtra(EVENT_BEGIN_TIME, -1);
72146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        if (millis == -1) {
73146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project            millis = System.currentTimeMillis();
74146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        }
75146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        return millis;
76146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    }
77146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
78146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    public static final void applyAlphaAnimation(ViewFlipper v) {
79146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        AlphaAnimation in = new AlphaAnimation(0.0f, 1.0f);
80146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
81146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        in.setStartOffset(0);
82146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        in.setDuration(500);
83146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
84146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        AlphaAnimation out = new AlphaAnimation(1.0f, 0.0f);
85146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
86146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        out.setStartOffset(0);
87146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        out.setDuration(500);
88146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
89146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        v.setInAnimation(in);
90146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        v.setOutAnimation(out);
91146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    }
92146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
93146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    /**
94146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project     * Formats the given Time object so that it gives the month and year
95146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project     * (for example, "September 2007").
96146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project     *
97146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project     * @param time the time to format
98146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project     * @return the string containing the weekday and the date
99146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project     */
100146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    public static String formatMonthYear(Time time) {
101146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        Resources res = Resources.getSystem();
102146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        return time.format(res.getString(com.android.internal.R.string.month_year));
103146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    }
104146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
105146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    // TODO: replace this with the correct i18n way to do this
106146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    public static final String englishNthDay[] = {
107146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        "", "1st", "2nd", "3rd", "4th", "5th", "6th", "7th", "8th", "9th",
108146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        "10th", "11th", "12th", "13th", "14th", "15th", "16th", "17th", "18th", "19th",
109146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        "20th", "21st", "22nd", "23rd", "24th", "25th", "26th", "27th", "28th", "29th",
110146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        "30th", "31st"
111146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    };
112146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
113146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    public static String formatNth(int nth) {
114146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        return "the " + englishNthDay[nth];
115146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    }
116146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
117146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    /**
118146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project     * Sets the time to the beginning of the day (midnight) by clearing the
119146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project     * hour, minute, and second fields.
120146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project     */
121146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    static void setTimeToStartOfDay(Time time) {
122146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        time.second = 0;
123146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        time.minute = 0;
124146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project        time.hour = 0;
125146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    }
12656adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi
12756adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi    /**
12856adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi     * Get first day of week as android.text.format.Time constant.
12956adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi     * @return the first day of week in android.text.format.Time
13056adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi     */
13156adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi    public static int getFirstDayOfWeek() {
13256adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi        int startDay = Calendar.getInstance().getFirstDayOfWeek();
13356adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi        if (startDay == Calendar.SATURDAY) {
13456adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi            return Time.SATURDAY;
13556adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi        } else if (startDay == Calendar.MONDAY) {
13656adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi            return Time.MONDAY;
13756adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi        } else {
13856adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi            return Time.SUNDAY;
13956adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi        }
14056adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi    }
14156adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi
14256adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi    /**
14356adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi     * Determine whether the column position is Saturday or not.
14456adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi     * @param column the column position
14556adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi     * @param firstDayOfWeek the first day of week in android.text.format.Time
14656adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi     * @return true if the column is Saturday position
14756adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi     */
14856adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi    public static boolean isSaturday(int column, int firstDayOfWeek) {
14956adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi        return (firstDayOfWeek == Time.SUNDAY && column == 6)
15056adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi            || (firstDayOfWeek == Time.MONDAY && column == 5)
15156adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi            || (firstDayOfWeek == Time.SATURDAY && column == 0);
15256adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi    }
15356adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi
15456adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi    /**
15556adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi     * Determine whether the column position is Sunday or not.
15656adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi     * @param column the column position
15756adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi     * @param firstDayOfWeek the first day of week in android.text.format.Time
15856adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi     * @return true if the column is Sunday position
15956adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi     */
16056adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi    public static boolean isSunday(int column, int firstDayOfWeek) {
16156adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi        return (firstDayOfWeek == Time.SUNDAY && column == 0)
16256adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi            || (firstDayOfWeek == Time.MONDAY && column == 6)
16356adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi            || (firstDayOfWeek == Time.SATURDAY && column == 1);
16456adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi    }
165146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project}
166