13dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwellpackage com.android.contacts.datepicker;
23dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell
33dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwellpublic class ICU {
43dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell
53dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell    /**
63dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell     * This method is directly copied from {@link libcore.icu.ICU}. The method is simple enough
73dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell     * that it probably won't change.
83dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell     */
93dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell    public static char[] getDateFormatOrder(String pattern) {
103dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell        char[] result = new char[3];
113dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell        int resultIndex = 0;
123dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell        boolean sawDay = false;
133dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell        boolean sawMonth = false;
143dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell        boolean sawYear = false;
153dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell
163dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell        for (int i = 0; i < pattern.length(); ++i) {
173dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell            char ch = pattern.charAt(i);
183dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell            if (ch == 'd' || ch == 'L' || ch == 'M' || ch == 'y') {
193dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                if (ch == 'd' && !sawDay) {
203dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                    result[resultIndex++] = 'd';
213dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                    sawDay = true;
223dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                } else if ((ch == 'L' || ch == 'M') && !sawMonth) {
233dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                    result[resultIndex++] = 'M';
243dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                    sawMonth = true;
253dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                } else if ((ch == 'y') && !sawYear) {
263dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                    result[resultIndex++] = 'y';
273dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                    sawYear = true;
283dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                }
293dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell            } else if (ch == 'G') {
303dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                // Ignore the era specifier, if present.
313dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell            } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
323dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                throw new IllegalArgumentException("Bad pattern character '"
333dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                        + ch + "' in " + pattern);
343dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell            } else if (ch == '\'') {
353dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                if (i < pattern.length() - 1 && pattern.charAt(i + 1) == '\'') {
363dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                    ++i;
373dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                } else {
383dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                    i = pattern.indexOf('\'', i + 1);
393dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                    if (i == -1) {
403dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                        throw new IllegalArgumentException("Bad quoting in " + pattern);
413dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                    }
423dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                    ++i;
433dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                }
443dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell            } else {
453dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell                // Ignore spaces and punctuation.
463dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell            }
473dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell        }
483dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell        return result;
493dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell    }
503dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell
513dad9f3cdfd5d1bcdf82ac6fc0bd34f24440ab31Brian Attwell}
52