14afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung/* 24afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * Copyright (C) 2013 The Android Open Source Project 34afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * 44afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * Licensed under the Apache License, Version 2.0 (the "License"); 54afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * you may not use this file except in compliance with the License. 64afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * You may obtain a copy of the License at 74afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * 84afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * http://www.apache.org/licenses/LICENSE-2.0 94afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * 104afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * Unless required by applicable law or agreed to in writing, software 114afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * distributed under the License is distributed on an "AS IS" BASIS, 124afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * See the License for the specific language governing permissions and 144afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * limitations under the License. 154afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung */ 164afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung 174afba187f8990ae2b3afaf8fcdb6039f231f4914James Kungpackage com.android.calendar.event; 184afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung 19e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kungimport java.io.Serializable; 204afba187f8990ae2b3afaf8fcdb6039f231f4914James Kungimport java.util.ArrayList; 214afba187f8990ae2b3afaf8fcdb6039f231f4914James Kungimport java.util.Arrays; 224afba187f8990ae2b3afaf8fcdb6039f231f4914James Kungimport java.util.Comparator; 234afba187f8990ae2b3afaf8fcdb6039f231f4914James Kungimport java.util.HashMap; 244afba187f8990ae2b3afaf8fcdb6039f231f4914James Kungimport java.util.Map; 254afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung 264afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung/** 274afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * A cache for event colors and event color keys stored based upon calendar account name and type. 284afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung */ 29e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kungpublic class EventColorCache implements Serializable { 30e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung 31e134cd5c96507107048a50b55fe2fee85fe8e2e7James Kung private static final long serialVersionUID = 2L; 324afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung 334afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung private static final String SEPARATOR = "::"; 344afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung 354afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung private Map<String, ArrayList<Integer>> mColorPaletteMap; 364afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung private Map<String, Integer> mColorKeyMap; 374afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung 384afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung public EventColorCache() { 394afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung mColorPaletteMap = new HashMap<String, ArrayList<Integer>>(); 404afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung mColorKeyMap = new HashMap<String, Integer>(); 414afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung } 424afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung 434afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /** 444afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * Inserts a color into the cache. 454afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung */ 464afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung public void insertColor(String accountName, String accountType, int displayColor, 474afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung int colorKey) { 484afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung mColorKeyMap.put(createKey(accountName, accountType, displayColor), colorKey); 494afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung String key = createKey(accountName, accountType); 504afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung ArrayList<Integer> colorPalette; 514afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung if ((colorPalette = mColorPaletteMap.get(key)) == null) { 524afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung colorPalette = new ArrayList<Integer>(); 534afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung } 544afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung colorPalette.add(displayColor); 554afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung mColorPaletteMap.put(key, colorPalette); 564afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung } 574afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung 584afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /** 594afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * Retrieve an array of colors for a specific account name and type. 604afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung */ 614afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung public int[] getColorArray(String accountName, String accountType) { 624afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung ArrayList<Integer> colors = mColorPaletteMap.get(createKey(accountName, accountType)); 634afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung if (colors == null) { 644afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung return null; 654afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung } 664afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung int[] ret = new int[colors.size()]; 674afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung for (int i = 0; i < ret.length; i++) { 684afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung ret[i] = colors.get(i); 694afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung } 704afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung return ret; 714afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung } 724afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung 734afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /** 744afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * Retrieve an event color's unique key based on account name, type, and color. 754afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung */ 764afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung public int getColorKey(String accountName, String accountType, int displayColor) { 774afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung return mColorKeyMap.get(createKey(accountName, accountType, displayColor)); 784afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung } 794afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung 804afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /** 814afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung * Sorts the arrays of colors based on a comparator. 824afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung */ 834afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung public void sortPalettes(Comparator<Integer> comparator) { 844afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung for (String key : mColorPaletteMap.keySet()) { 854afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung ArrayList<Integer> palette = mColorPaletteMap.get(key); 864afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung Integer[] sortedColors = new Integer[palette.size()]; 874afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung Arrays.sort(palette.toArray(sortedColors), comparator); 884afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung palette.clear(); 894afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung for (Integer color : sortedColors) { 904afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung palette.add(color); 914afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung } 924afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung mColorPaletteMap.put(key, palette); 934afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung } 944afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung } 954afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung 964afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung private String createKey(String accountName, String accountType) { 974afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung return new StringBuilder().append(accountName) 984afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung .append(SEPARATOR) 994afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung .append(accountType) 1004afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung .toString(); 1014afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung } 1024afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung 1034afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung private String createKey(String accountName, String accountType, int displayColor) { 1044afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung return new StringBuilder(createKey(accountName, accountType)) 1054afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung .append(SEPARATOR) 1064afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung .append(displayColor) 1074afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung .toString(); 1084afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung } 1094afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung} 110