15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)package org.chromium.content.browser.input; 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.Context; 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import java.text.DateFormatSymbols; 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.Arrays; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.Calendar; 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.Locale; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.content.R; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochpublic class MonthPicker extends TwoFieldDatePicker { 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) private static final int MONTHS_NUMBER = 12; 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private String[] mShortMonths; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public MonthPicker(Context context, long minValue, long maxValue) { 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch super(context, minValue, maxValue); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch getPositionInYearSpinner().setContentDescription( 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch getResources().getString(R.string.accessibility_date_picker_month)); 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // initialization based on locale 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) mShortMonths = 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DateFormatSymbols.getInstance(Locale.getDefault()).getShortMonths(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // initialize to current date 32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Calendar cal = Calendar.getInstance(); 33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) init(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), null); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch @Override 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected Calendar createDateFromValue(long value) { 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int year = (int)Math.min(value / 12 + 1970, Integer.MAX_VALUE); 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int month = (int) (value % 12); 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Calendar cal = Calendar.getInstance(); 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cal.clear(); 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) cal.set(year, month, 1); 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return cal; 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected void setCurrentDate(int year, int month) { 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Calendar date = Calendar.getInstance(); 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch date.set(year, month, 1); 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (date.before(getMinDate())) { 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch setCurrentDate(getMinDate()); 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } else if (date.after(getMaxDate())) { 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch setCurrentDate(getMaxDate()); 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } else { 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch setCurrentDate(date); 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected void updateSpinners() { 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch super.updateSpinners(); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // make sure the month names are a zero based array 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // with the months in the month spinner 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch String[] displayedValues = Arrays.copyOfRange(mShortMonths, 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch getPositionInYearSpinner().getMinValue(), 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch getPositionInYearSpinner().getMaxValue() + 1); 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch getPositionInYearSpinner().setDisplayedValues(displayedValues); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @return The selected month. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public int getMonth() { 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return getCurrentDate().get(Calendar.MONTH); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch @Override 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public int getPositionInYear() { 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return getMonth(); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch @Override 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected int getMaxYear() { 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return getMaxDate().get(Calendar.YEAR); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch @Override 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected int getMinYear() { 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return getMinDate().get(Calendar.YEAR); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch @Override 95762b2f2129a215bc851e73887244c3a82a892731Torne (Richard Coles) protected int getMaxPositionInYear(int year) { 96762b2f2129a215bc851e73887244c3a82a892731Torne (Richard Coles) if (year == getMaxDate().get(Calendar.YEAR)) { 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return getMaxDate().get(Calendar.MONTH); 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return MONTHS_NUMBER - 1; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch @Override 103762b2f2129a215bc851e73887244c3a82a892731Torne (Richard Coles) protected int getMinPositionInYear(int year) { 104762b2f2129a215bc851e73887244c3a82a892731Torne (Richard Coles) if (year == getMinDate().get(Calendar.YEAR)) { 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return getMinDate().get(Calendar.MONTH); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return 0; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 110