1e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung/*
2e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung * Copyright (C) 2013 The Android Open Source Project
3e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung *
4e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung * Licensed under the Apache License, Version 2.0 (the "License");
5e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung * you may not use this file except in compliance with the License.
6e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung * You may obtain a copy of the License at
7e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung *
8e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung *      http://www.apache.org/licenses/LICENSE-2.0
9e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung *
10e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung * Unless required by applicable law or agreed to in writing, software
11e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung * distributed under the License is distributed on an "AS IS" BASIS,
12e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung * See the License for the specific language governing permissions and
14e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung * limitations under the License.
15e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung */
16b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
17b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kungpackage com.android.calendar;
18b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
19b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kungimport android.app.Activity;
208de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kungimport android.app.Dialog;
21b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kungimport android.content.ContentUris;
22b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kungimport android.content.ContentValues;
23b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kungimport android.content.Context;
24b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kungimport android.database.Cursor;
25b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kungimport android.net.Uri;
26b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kungimport android.os.Bundle;
27b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kungimport android.provider.CalendarContract.Calendars;
28b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kungimport android.provider.CalendarContract.Colors;
29b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kungimport android.util.SparseIntArray;
30b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
31a8b8c0d17adf3e8f9b34a5da89592aa7069c0bddJames Kungimport com.android.colorpicker.ColorPickerDialog;
32a8b8c0d17adf3e8f9b34a5da89592aa7069c0bddJames Kungimport com.android.colorpicker.ColorPickerSwatch.OnColorSelectedListener;
33a8b8c0d17adf3e8f9b34a5da89592aa7069c0bddJames Kungimport com.android.colorpicker.HsvColorComparator;
34b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
35b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kungimport java.util.ArrayList;
36b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kungimport java.util.Arrays;
37b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
38b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kungpublic class CalendarColorPickerDialog extends ColorPickerDialog {
39b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
40b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    private static final int NUM_COLUMNS = 4;
41b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
428de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    private static final String KEY_CALENDAR_ID = "calendar_id";
438de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    private static final String KEY_COLOR_KEYS = "color_keys";
448de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung
45b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    private static final int TOKEN_QUERY_CALENDARS = 1 << 1;
46b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    private static final int TOKEN_QUERY_COLORS = 1 << 2;
47b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
48b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    static final String[] CALENDARS_PROJECTION = new String[] {
49b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            Calendars.ACCOUNT_NAME,
50b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            Calendars.ACCOUNT_TYPE,
51b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            Calendars.CALENDAR_COLOR
52b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    };
53b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
54e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung    static final int CALENDARS_INDEX_ACCOUNT_NAME = 0;
55e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung    static final int CALENDARS_INDEX_ACCOUNT_TYPE = 1;
56e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung    static final int CALENDARS_INDEX_CALENDAR_COLOR = 2;
57b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
58b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    static final String[] COLORS_PROJECTION = new String[] {
59e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung            Colors.COLOR,
60e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung            Colors.COLOR_KEY
61b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    };
62b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
63b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    static final String COLORS_WHERE = Colors.ACCOUNT_NAME + "=? AND " + Colors.ACCOUNT_TYPE +
64b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            "=? AND " + Colors.COLOR_TYPE + "=" + Colors.TYPE_CALENDAR;
65b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
66e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung    public static final int COLORS_INDEX_COLOR = 0;
67e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung    public static final int COLORS_INDEX_COLOR_KEY = 1;
68b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
69b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
70b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    private QueryService mService;
71b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    private SparseIntArray mColorKeyMap = new SparseIntArray();
72b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    private long mCalendarId;
73b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
74b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    private class QueryService extends AsyncQueryService {
75b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
76b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung        private QueryService(Context context) {
77b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            super(context);
78b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung        }
79b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
80b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung        @Override
81b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung        protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
82b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            // If the query didn't return a cursor for some reason return
83b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            if (cursor == null) {
84b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                return;
85b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            }
86b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
87b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            // If the Activity is finishing, then close the cursor.
88b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            // Otherwise, use the new cursor in the adapter.
89b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            final Activity activity = getActivity();
90b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            if (activity == null || activity.isFinishing()) {
91b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                cursor.close();
92b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                return;
93b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            }
94b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
95b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            switch (token) {
96b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                case TOKEN_QUERY_CALENDARS:
97b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    if (!cursor.moveToFirst()) {
98e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung                        cursor.close();
99b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                        dismiss();
100e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung                        break;
101b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    }
102b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    mSelectedColor = Utils.getDisplayColorFromColor(
103b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                            cursor.getInt(CALENDARS_INDEX_CALENDAR_COLOR));
104b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    Uri uri = Colors.CONTENT_URI;
105b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    String[] args = new String[] {
106b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                            cursor.getString(CALENDARS_INDEX_ACCOUNT_NAME),
107b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                            cursor.getString(CALENDARS_INDEX_ACCOUNT_TYPE) };
108b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    cursor.close();
109b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    startQuery(TOKEN_QUERY_COLORS, null, uri, COLORS_PROJECTION, COLORS_WHERE,
110b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                            args, null);
111b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    break;
112b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                case TOKEN_QUERY_COLORS:
113b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    if (!cursor.moveToFirst()) {
114e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung                        cursor.close();
115b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                        dismiss();
116e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung                        break;
117b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    }
1188de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung                    mColorKeyMap.clear();
119b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    ArrayList<Integer> colors = new ArrayList<Integer>();
120b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    do
121b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    {
122b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                        int colorKey = cursor.getInt(COLORS_INDEX_COLOR_KEY);
123b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                        int rawColor = cursor.getInt(COLORS_INDEX_COLOR);
124b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                        int displayColor = Utils.getDisplayColorFromColor(rawColor);
125b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                        mColorKeyMap.put(displayColor, colorKey);
126b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                        colors.add(displayColor);
127b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    } while (cursor.moveToNext());
128b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    Integer[] colorsToSort = colors.toArray(new Integer[colors.size()]);
129e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung                    Arrays.sort(colorsToSort, new HsvColorComparator());
130b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    mColors = new int[colorsToSort.length];
131b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    for (int i = 0; i < mColors.length; i++) {
132b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                        mColors[i] = colorsToSort[i];
133b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    }
1348de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung                    showPaletteView();
135b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    cursor.close();
136b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                    break;
137b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            }
138b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung        }
139b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    }
140b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
141b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    private class OnCalendarColorSelectedListener implements OnColorSelectedListener {
142b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
143b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung        @Override
144b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung        public void onColorSelected(int color) {
1458de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung            if (color == mSelectedColor || mService == null) {
146b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                return;
147b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            }
148b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
149b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            ContentValues values = new ContentValues();
150b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung            values.put(Calendars.CALENDAR_COLOR_KEY, mColorKeyMap.get(color));
1518de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung            mService.startUpdate(mService.getNextToken(), null, ContentUris.withAppendedId(
1528de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung                    Calendars.CONTENT_URI, mCalendarId), values, null, null, Utils.UNDO_DELAY);
153b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung        }
154b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    }
155b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
156b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    public CalendarColorPickerDialog() {
157b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung        // Empty constructor required for dialog fragments.
158b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    }
159b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
1608de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    public static CalendarColorPickerDialog newInstance(long calendarId, boolean isTablet) {
1618de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        CalendarColorPickerDialog ret = new CalendarColorPickerDialog();
1628de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        ret.setArguments(R.string.calendar_color_picker_dialog_title, NUM_COLUMNS,
163b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung                isTablet ? SIZE_LARGE : SIZE_SMALL);
1648de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        ret.setCalendarId(calendarId);
1658de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        return ret;
1668de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    }
1678de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung
1688de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    @Override
1698de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    public void onSaveInstanceState(Bundle outState) {
1708de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        super.onSaveInstanceState(outState);
1718de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        outState.putLong(KEY_CALENDAR_ID, mCalendarId);
1728de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        saveColorKeys(outState);
1738de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    }
1748de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung
1758de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    private void saveColorKeys(Bundle outState) {
1765f86971de41a70d81355e0fad2443a9efb0f6fb8Paul Sliwowski        // No color keys to save, so just return
1775f86971de41a70d81355e0fad2443a9efb0f6fb8Paul Sliwowski        if (mColors == null) {
1785f86971de41a70d81355e0fad2443a9efb0f6fb8Paul Sliwowski            return;
1795f86971de41a70d81355e0fad2443a9efb0f6fb8Paul Sliwowski        }
1808de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        int[] colorKeys = new int[mColors.length];
1818de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        for (int i = 0; i < mColors.length; i++) {
1828de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung            colorKeys[i] = mColorKeyMap.get(mColors[i]);
1838de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        }
1848de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        outState.putIntArray(KEY_COLOR_KEYS, colorKeys);
1858de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    }
1868de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung
1878de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    @Override
1888de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    public void onCreate(Bundle savedInstanceState) {
1898de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        super.onCreate(savedInstanceState);
1908de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        if (savedInstanceState != null) {
1918de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung            mCalendarId = savedInstanceState.getLong(KEY_CALENDAR_ID);
1928de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung            retrieveColorKeys(savedInstanceState);
1938de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        }
1948de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        setOnColorSelectedListener(new OnCalendarColorSelectedListener());
1958de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    }
1968de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung
1978de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    private void retrieveColorKeys(Bundle savedInstanceState) {
1988de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        int[] colorKeys = savedInstanceState.getIntArray(KEY_COLOR_KEYS);
1998de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        if (mColors != null && colorKeys != null) {
2008de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung            for (int i = 0; i < mColors.length; i++) {
2018de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung                mColorKeyMap.put(mColors[i], colorKeys[i]);
2028de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung            }
2038de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        }
2048de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    }
2058de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung
2068de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    @Override
2078de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    public void setColors(int[] colors) {
2088de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        throw new IllegalStateException("Must call setCalendarId() to update calendar colors");
2098de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    }
2108de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung
2118de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    @Override
2128de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    public void setColors(int[] colors, int selectedColor) {
2138de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        throw new IllegalStateException("Must call setCalendarId() to update calendar colors");
214b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    }
215b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
216b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    public void setCalendarId(long calendarId) {
2178de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        if (calendarId != mCalendarId) {
2188de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung            mCalendarId = calendarId;
2198de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung            startQuery();
220b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung        }
221b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    }
222b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung
223b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    @Override
2248de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    public Dialog onCreateDialog(Bundle savedInstanceState) {
2258de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        Dialog dialog = super.onCreateDialog(savedInstanceState);
2268de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        mService = new QueryService(getActivity());
2278de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        if (mColors == null) {
2288de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung            startQuery();
2298de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        }
2308de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        return dialog;
2318de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    }
2328de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung
2338de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung    private void startQuery() {
2348de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        if (mService != null) {
2358de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung            showProgressBarView();
2368de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung            mService.startQuery(TOKEN_QUERY_CALENDARS, null,
2378de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung                    ContentUris.withAppendedId(Calendars.CONTENT_URI, mCalendarId),
2388de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung                    CALENDARS_PROJECTION, null, null, null);
2398de796dfd3a1dad6cb386077e785d09fc02bec7bJames Kung        }
240b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung    }
241b546c601b8f0b476e8bc7db649ee0a6ee60ce14cJames Kung}
242