/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.ui;
import android.app.Activity;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.timsu.astrid.R;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.repeats.RepeatControlSet;
import com.todoroo.astrid.service.ThemeService;
public class DeadlineControlSet extends PopupControlSet {
private boolean isQuickadd = false;
private DateAndTimePicker dateAndTimePicker;
private final View[] extraViews;
private final RepeatControlSet repeatControlSet;
private final ImageView image;
public DeadlineControlSet(Activity activity, int viewLayout, int displayViewLayout,
RepeatControlSet repeatControlSet, View...extraViews) {
super(activity, viewLayout, displayViewLayout, 0);
this.extraViews = extraViews;
this.repeatControlSet = repeatControlSet;
this.image = (ImageView) getDisplayView().findViewById(R.id.display_row_icon);
}
@Override
protected void refreshDisplayView() {
StringBuilder displayString = new StringBuilder();
boolean isOverdue;
if (initialized) {
isOverdue = !dateAndTimePicker.isAfterNow();
displayString.append(dateAndTimePicker.getDisplayString(activity, isQuickadd, isQuickadd));
} else {
isOverdue = model.getValue(Task.DUE_DATE) < DateUtilities.now();
displayString.append(DateAndTimePicker.getDisplayString(activity, model.getValue(Task.DUE_DATE), isQuickadd, isQuickadd, false));
}
if (!isQuickadd && repeatControlSet != null) {
String repeatString = repeatControlSet.getStringForExternalDisplay();
if (!TextUtils.isEmpty(repeatString)) {
displayString.append("\n"); //$NON-NLS-1$
displayString.append(repeatString);
}
}
TextView dateDisplay = (TextView) getDisplayView().findViewById(R.id.display_row_edit);
if (TextUtils.isEmpty(displayString)) {
dateDisplay.setText(R.string.TEA_deadline_hint);
dateDisplay.setTextColor(unsetColor);
image.setImageResource(R.drawable.tea_icn_date_gray);
} else {
dateDisplay.setText(displayString);
if (isOverdue) {
dateDisplay.setTextColor(activity.getResources().getColor(R.color.red_theme_color));
image.setImageResource(R.drawable.tea_icn_date_red);
} else {
dateDisplay.setTextColor(themeColor);
image.setImageResource(ThemeService.getTaskEditDrawable(R.drawable.tea_icn_date, R.drawable.tea_icn_date_lightblue));
}
}
}
@Override
protected void afterInflate() {
dateAndTimePicker = (DateAndTimePicker) getView().findViewById(R.id.date_and_time);
LinearLayout extras = (LinearLayout) getView().findViewById(R.id.datetime_extras);
for (View v : extraViews) {
LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.0f);
extras.addView(v, lp);
}
LinearLayout body = (LinearLayout) getView().findViewById(R.id.datetime_body);
body.setGravity(Gravity.CENTER_HORIZONTAL);
Button okButton = (Button) LayoutInflater.from(activity).inflate(R.layout.control_dialog_ok, null);
DisplayMetrics metrics = activity.getResources().getDisplayMetrics();
LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, (int) (45 * metrics.density));
body.addView(okButton, params);
}
@Override
protected void setupOkButton(View view) {
super.setupOkButton(view);
Button okButton = (Button) view.findViewById(R.id.edit_dlg_ok);
okButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
onOkClick();
DialogUtilities.dismissDialog(DeadlineControlSet.this.activity, DeadlineControlSet.this.dialog);
}
});
}
@Override
protected void readFromTaskOnInitialize() {
long dueDate = model.getValue(Task.DUE_DATE);
initializeWithDate(dueDate);
refreshDisplayView();
}
@Override
protected String writeToModelAfterInitialized(Task task) {
long dueDate = dateAndTimePicker.constructDueDate();
if (dueDate != task.getValue(Task.DUE_DATE)) // Clear snooze if due date has changed
task.setValue(Task.REMINDER_SNOOZE, 0L);
task.setValue(Task.DUE_DATE, dueDate);
return null;
}
private void initializeWithDate(long dueDate) {
dateAndTimePicker.initializeWithDate(dueDate);
}
public boolean isDeadlineSet() {
return (dateAndTimePicker != null && dateAndTimePicker.constructDueDate() != 0);
}
/**
* Set whether date and time should be separated by a newline or a comma
* in the display view
*/
public void setIsQuickadd(boolean isQuickadd) {
this.isQuickadd = isQuickadd;
}
}