es.usc.citius.servando.calendula.scheduling.AlarmIntentParams.java Source code

Java tutorial

Introduction

Here is the source code for es.usc.citius.servando.calendula.scheduling.AlarmIntentParams.java

Source

/*
 *    Calendula - An assistant for personal medication management.
 *    Copyright (C) 2016 CITIUS - USC
 *
 *    Calendula is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 3 of the License, or
 *    (at your option) any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License
 *    along with this software.  If not, see <http://www.gnu.org/licenses/>.
 */

package es.usc.citius.servando.calendula.scheduling;

import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import android.util.Log;

import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;
import org.joda.time.format.DateTimeFormat;

import es.usc.citius.servando.calendula.CalendulaApp;

/**
 * Encapsulates extras of alarm intents
 */
public class AlarmIntentParams implements Parcelable {

    public static final String TAG = "AlarmIntentParams";

    public static final String DATE_FORMAT = "dd/MM/YYYY";
    public static final String TIME_FORMAT = "kk:mm";

    public static final int AUTO = 0; // auto generated, default
    public static final int USER = 1; // generated due to an user action (i.e. delay an intake)

    public int action = -1;
    public long routineId = -1;
    public long scheduleId = -1;
    public String scheduleTime = "";
    public String date = "";
    public int actionType = AUTO;

    public AlarmIntentParams() {
    }

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel out, int flags) {
        out.writeInt(action);
        out.writeLong(routineId);
        out.writeLong(scheduleId);
        out.writeString(scheduleTime);
        out.writeString(date);
        out.writeInt(actionType);
    }

    public static final Parcelable.Creator<AlarmIntentParams> CREATOR = new Parcelable.Creator<AlarmIntentParams>() {
        public AlarmIntentParams createFromParcel(Parcel in) {
            return new AlarmIntentParams(in);
        }

        public AlarmIntentParams[] newArray(int size) {
            return new AlarmIntentParams[size];
        }
    };

    private AlarmIntentParams(Parcel in) {
        action = in.readInt();
        routineId = in.readLong();
        scheduleId = in.readLong();
        scheduleTime = in.readString();
        date = in.readString();
        actionType = in.readInt();
    }

    public static AlarmIntentParams forRoutine(Long routineId, LocalDate date, boolean delayed) {
        AlarmIntentParams params = new AlarmIntentParams();
        params.action = delayed ? CalendulaApp.ACTION_ROUTINE_DELAYED_TIME : CalendulaApp.ACTION_ROUTINE_TIME;
        params.routineId = routineId;
        params.date = date.toString(DATE_FORMAT);
        Log.d(TAG, "forRoutine: " + params.toString());
        return params;
    }

    public static AlarmIntentParams forSchedule(Long scheduleId, LocalTime time, LocalDate date, boolean delayed) {
        AlarmIntentParams params = new AlarmIntentParams();
        params.action = delayed ? CalendulaApp.ACTION_HOURLY_SCHEDULE_DELAYED_TIME
                : CalendulaApp.ACTION_HOURLY_SCHEDULE_TIME;
        params.scheduleId = scheduleId;
        params.scheduleTime = time.toString(TIME_FORMAT);
        params.date = date.toString(DATE_FORMAT);
        Log.d(TAG, "forSchedule: " + params.toString());
        return params;
    }

    public static AlarmIntentParams forRoutine(Long routineId, LocalDate date, boolean delayed, int actionType) {
        AlarmIntentParams p = forRoutine(routineId, date, delayed);
        p.actionType = actionType;
        return p;
    }

    public static AlarmIntentParams forSchedule(Long scheduleId, LocalTime time, LocalDate date, boolean delayed,
            int actionType) {
        AlarmIntentParams p = forSchedule(scheduleId, time, date, delayed);
        p.actionType = actionType;
        return p;
    }

    public static AlarmIntentParams forDailyUpdate() {
        AlarmIntentParams params = new AlarmIntentParams();
        params.action = CalendulaApp.ACTION_DAILY_ALARM;
        return params;
    }

    public LocalDate date() {
        return DateTimeFormat.forPattern(DATE_FORMAT).parseLocalDate(date);
    }

    public LocalTime scheduleTime() {
        return DateTimeFormat.forPattern(TIME_FORMAT).parseLocalTime(scheduleTime);
    }

    public DateTime dateTime() {
        if (!TextUtils.isEmpty(date) && !TextUtils.isEmpty(scheduleTime))
            return date().toDateTime(scheduleTime());
        else if (!TextUtils.isEmpty(date))
            return date().toDateTimeAtStartOfDay();
        else if (!TextUtils.isEmpty(scheduleTime))
            return LocalDate.now().toDateTime(scheduleTime());

        return null;
    }

    @Override
    public String toString() {
        return "AlarmIntentParams{" + "action=" + action + ", routineId=" + routineId + ", scheduleId=" + scheduleId
                + ", scheduleTime='" + scheduleTime + '\'' + ", date='" + date + '\'' + '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (o == null || getClass() != o.getClass())
            return false;

        AlarmIntentParams that = (AlarmIntentParams) o;

        if (action != that.action)
            return false;
        if (routineId != that.routineId)
            return false;
        if (scheduleId != that.scheduleId)
            return false;
        if (actionType != that.actionType)
            return false;
        if (scheduleTime != null ? !scheduleTime.equals(that.scheduleTime) : that.scheduleTime != null)
            return false;
        return date != null ? date.equals(that.date) : that.date == null;

    }

    @Override
    public int hashCode() {
        int result = action;
        result = 31 * result + (int) (routineId ^ (routineId >>> 32));
        result = 31 * result + (int) (scheduleId ^ (scheduleId >>> 32));
        result = 31 * result + (scheduleTime != null ? scheduleTime.hashCode() : 0);
        result = 31 * result + (date != null ? date.hashCode() : 0);
        result = 31 * result + actionType;
        return result;
    }
}