package com.kickstarter.services.apiresponses; import android.os.Parcelable; import android.support.annotation.Nullable; import com.kickstarter.libs.qualifiers.AutoGson; import com.kickstarter.models.pushdata.Activity; import com.kickstarter.models.pushdata.GCM; import java.util.Arrays; import java.util.List; import auto.parcel.AutoParcel; @AutoGson @AutoParcel public abstract class PushNotificationEnvelope implements Parcelable { public abstract @Nullable Activity activity(); public abstract GCM gcm(); public abstract @Nullable Project project(); private final static List<String> PROJECT_NOTIFICATION_CATEGORIES = Arrays.asList( com.kickstarter.models.Activity.CATEGORY_BACKING, com.kickstarter.models.Activity.CATEGORY_CANCELLATION, com.kickstarter.models.Activity.CATEGORY_FAILURE, com.kickstarter.models.Activity.CATEGORY_LAUNCH, com.kickstarter.models.Activity.CATEGORY_SUCCESS); @AutoParcel.Builder public abstract static class Builder { public abstract Builder activity(Activity __); public abstract Builder gcm(GCM __); public abstract Builder project(Project __); public abstract PushNotificationEnvelope build(); } public static Builder builder() { return new AutoParcel_PushNotificationEnvelope.Builder(); } public abstract Builder toBuilder(); public boolean isFriendFollow() { return activity() != null && activity().category().equals(com.kickstarter.models.Activity.CATEGORY_FOLLOW); } public boolean isProjectActivity() { if (activity() != null) { return PROJECT_NOTIFICATION_CATEGORIES.contains(activity().category()); } return false; } public boolean isProjectReminder() { return project() != null; } public boolean isProjectUpdateActivity() { return activity() != null && activity().category().equals(com.kickstarter.models.Activity.CATEGORY_UPDATE); } public int signature() { // When we display an Android notification, we can give it a id. If the server sends a notification with the same // id, Android updates the existing notification with new information rather than creating a new notification. // // The server doesn't send unique notification ids, so hashing the alert text is a weak substitute. Probably won't // make use of this feature anyhow. return gcm().alert().hashCode(); } @AutoGson @AutoParcel public abstract static class Project implements Parcelable { public abstract Long id(); public abstract String photo(); @AutoParcel.Builder public abstract static class Builder { public abstract Builder id(Long __); public abstract Builder photo(String __); public abstract Project build(); } public static Builder builder() { return new AutoParcel_PushNotificationEnvelope_Project.Builder(); } } @AutoGson @AutoParcel public abstract static class ActivityPushData implements Parcelable { public abstract Long id(); public abstract String category(); public abstract @Nullable Long projectId(); public abstract @Nullable String projectPhoto(); public abstract @Nullable String userPhoto(); public abstract @Nullable Long commentId(); public abstract @Nullable Long updateId(); } }