1d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu/* 2d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * Copyright (C) 2013 The Android Open Source Project 3d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * 4d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * Licensed under the Apache License, Version 2.0 (the "License"); 5d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * you may not use this file except in compliance with the License. 6d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * You may obtain a copy of the License at 7d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * 8d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * http://www.apache.org/licenses/LICENSE-2.0 9d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * 10d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * Unless required by applicable law or agreed to in writing, software 11d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * distributed under the License is distributed on an "AS IS" BASIS, 12d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * See the License for the specific language governing permissions and 14d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * limitations under the License. 15d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu */ 16d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 17d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescupackage com.android.gallery3d.ingest; 18d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 19d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescuimport java.text.DateFormat; 20d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescuimport java.util.Calendar; 21d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 22d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu/** 23d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * Represents a date (year, month, day) 24d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu */ 25d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescupublic class SimpleDate implements Comparable<SimpleDate> { 26d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public int month; // MM 27d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public int day; // DD 28d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public int year; // YYYY 29d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu private long timestamp; 30d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu private String mCachedStringRepresentation; 31d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 32d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public SimpleDate() { 33d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 34d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 35d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public SimpleDate(long timestamp) { 36d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu setTimestamp(timestamp); 37d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 38d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 39d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu private static Calendar sCalendarInstance = Calendar.getInstance(); 40d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 41d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public void setTimestamp(long timestamp) { 42d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu synchronized (sCalendarInstance) { 43d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu // TODO find a more efficient way to convert a timestamp to a date? 44d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu sCalendarInstance.setTimeInMillis(timestamp); 45d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu this.day = sCalendarInstance.get(Calendar.DATE); 46d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu this.month = sCalendarInstance.get(Calendar.MONTH); 47d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu this.year = sCalendarInstance.get(Calendar.YEAR); 48d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu this.timestamp = timestamp; 49d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu mCachedStringRepresentation = DateFormat.getDateInstance(DateFormat.SHORT).format(timestamp); 50d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 51d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 52d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 53d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu @Override 54d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public int hashCode() { 55d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu final int prime = 31; 56d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu int result = 1; 57d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu result = prime * result + day; 58d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu result = prime * result + month; 59d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu result = prime * result + year; 60d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return result; 61d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 62d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 63d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu @Override 64d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public boolean equals(Object obj) { 65d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu if (this == obj) 66d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return true; 67d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu if (obj == null) 68d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return false; 69d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu if (!(obj instanceof SimpleDate)) 70d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return false; 71d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu SimpleDate other = (SimpleDate) obj; 72d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu if (year != other.year) 73d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return false; 74d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu if (month != other.month) 75d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return false; 76d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu if (day != other.day) 77d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return false; 78d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return true; 79d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 80d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 81d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu @Override 82d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public int compareTo(SimpleDate other) { 83d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu int yearDiff = this.year - other.getYear(); 84d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu if (yearDiff != 0) 85d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return yearDiff; 86d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu else { 87d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu int monthDiff = this.month - other.getMonth(); 88d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu if (monthDiff != 0) 89d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return monthDiff; 90d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu else 91d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return this.day - other.getDay(); 92d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 93d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 94d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 95d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public int getDay() { 96d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return day; 97d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 98d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 99d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public int getMonth() { 100d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return month; 101d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 102d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 103d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public int getYear() { 104d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return year; 105d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 106d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 107d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu @Override 108d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public String toString() { 109d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu if (mCachedStringRepresentation == null) { 110d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu mCachedStringRepresentation = DateFormat.getDateInstance(DateFormat.SHORT).format(timestamp); 111d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 112d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return mCachedStringRepresentation; 113d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 114d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu} 115