blob: 6f88717adbd8fc2e8f3d50cf21a3f21f186944ca [file] [log] [blame]
/*
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.car.calendar.common;
import com.android.car.calendar.common.Dialer.NumberAndAccess;
import java.time.Duration;
import java.time.Instant;
import java.util.Objects;
import javax.annotation.Nullable;
/**
* An immutable value representing a calendar event. Should contain only details that are relevant
* to the Car Calendar.
*/
public final class Event {
/** The status of the current user for this event. */
public enum Status {
ACCEPTED,
DECLINED,
NONE,
}
/** The details required for display of the calendar indicator. */
public static class CalendarDetails {
private final String mName;
private final int mColor;
CalendarDetails(String name, int color) {
mName = name;
mColor = color;
}
public int getColor() {
return mColor;
}
public String getName() {
return mName;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CalendarDetails that = (CalendarDetails) o;
return mColor == that.mColor && mName.equals(that.mName);
}
@Override
public int hashCode() {
return Objects.hash(mName, mColor);
}
}
private final boolean mAllDay;
private final Instant mStartInstant;
private final Instant mDayStartInstant;
private final Instant mEndInstant;
private final Instant mDayEndInstant;
private final String mTitle;
private final Status mStatus;
@Nullable private final String mLocation;
@Nullable private final NumberAndAccess mNumberAndAccess;
private final CalendarDetails mCalendarDetails;
Event(
boolean allDay,
Instant startInstant,
Instant dayStartInstant,
Instant endInstant,
Instant dayEndInstant,
String title,
Status status,
@Nullable String location,
@Nullable NumberAndAccess numberAndAccess,
CalendarDetails calendarDetails) {
mAllDay = allDay;
mStartInstant = startInstant;
mDayStartInstant = dayStartInstant;
mEndInstant = endInstant;
mDayEndInstant = dayEndInstant;
mTitle = title;
mStatus = status;
mLocation = location;
mNumberAndAccess = numberAndAccess;
mCalendarDetails = calendarDetails;
}
public Instant getStartInstant() {
return mStartInstant;
}
public Instant getDayStartInstant() {
return mDayStartInstant;
}
public Instant getDayEndInstant() {
return mDayEndInstant;
}
public Instant getEndInstant() {
return mEndInstant;
}
public String getTitle() {
return mTitle;
}
@Nullable
public NumberAndAccess getNumberAndAccess() {
return mNumberAndAccess;
}
public CalendarDetails getCalendarDetails() {
return mCalendarDetails;
}
@Nullable
public String getLocation() {
return mLocation;
}
public Status getStatus() {
return mStatus;
}
public boolean isAllDay() {
return mAllDay;
}
public Duration getDuration() {
return Duration.between(getStartInstant(), getEndInstant());
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Event event = (Event) o;
return mAllDay == event.mAllDay
&& mStartInstant.equals(event.mStartInstant)
&& mDayStartInstant.equals(event.mDayStartInstant)
&& mEndInstant.equals(event.mEndInstant)
&& mDayEndInstant.equals(event.mDayEndInstant)
&& mTitle.equals(event.mTitle)
&& mStatus == event.mStatus
&& Objects.equals(mLocation, event.mLocation)
&& Objects.equals(mNumberAndAccess, event.mNumberAndAccess)
&& mCalendarDetails.equals(event.mCalendarDetails);
}
@Override
public int hashCode() {
return Objects.hash(
mAllDay,
mStartInstant,
mDayStartInstant,
mEndInstant,
mDayEndInstant,
mTitle,
mStatus,
mLocation,
mNumberAndAccess,
mCalendarDetails);
}
}