/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.helper;
import android.app.Activity;
import android.content.res.ColorStateList;
import android.content.res.Resources.Theme;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import com.timsu.astrid.R;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.ui.EditDialogOkBackground;
// --- interface
/**
* Interface for working with controls that alter task data
*/
public abstract class TaskEditControlSet {
protected final Activity activity;
private final int viewLayout;
private View view;
protected Task model;
protected boolean initialized = false;
protected final int themeColor;
protected final int unsetColor;
public TaskEditControlSet(Activity activity, int viewLayout) {
this.activity = activity;
this.viewLayout = viewLayout;
if (viewLayout == -1)
initialized = true;
themeColor = activity.getResources().getColor(ThemeService.getTaskEditThemeColor());
unsetColor = activity.getResources().getColor(R.color.task_edit_deadline_gray);
}
public View getView() {
if (view == null && !initialized) {
if (viewLayout != -1) {
view = LayoutInflater.from(activity).inflate(viewLayout, null);
afterInflate();
setupOkButton(view);
}
if (model != null)
readFromTaskOnInitialize();
this.initialized = true;
}
return view;
}
public View getDisplayView() {
return getView();
}
/**
* Read data from model to update the control set
*/
public void readFromTask(Task task) {
this.model = task;
if (initialized)
readFromTaskOnInitialize();
}
/**
* Called once to setup the ui with data from the task
*/
protected abstract void readFromTaskOnInitialize();
/**
* Write data from control set to model
* @return text appended to the toast
*/
public String writeToModel(Task task) {
if (initialized) {
return writeToModelAfterInitialized(task);
}
return null;
}
/**
* Write to model, if initialization logic has been called
* @return toast text
*/
protected abstract String writeToModelAfterInitialized(Task task);
/**
* Called when views need to be inflated
*/
protected abstract void afterInflate();
/**
* Sets up ok button background. Subclasses can override to customize look and feel
*/
protected void setupOkButton(View view) {
Button ok = (Button) view.findViewById(R.id.edit_dlg_ok);
Theme theme = activity.getTheme();
TypedValue themeColor = new TypedValue();
theme.resolveAttribute(R.attr.asThemeTextColor, themeColor, false);
TypedValue inverseColor = new TypedValue();
theme.resolveAttribute(R.attr.asTextColorInverse, inverseColor, false);
if (ok != null) {
ok.setBackgroundDrawable(EditDialogOkBackground.getBg(activity.getResources().getColor(themeColor.data)));
int[][] states = new int[2][];
states[0] = new int[] { android.R.attr.state_pressed };
states[1] = new int[] { android.R.attr.state_enabled };
int[] colors = new int[] { inverseColor.data, activity.getResources().getColor(themeColor.data) };
ColorStateList csl = new ColorStateList(states, colors);
ok.setTextColor(csl);
}
}
}