/** * Copyright (c) 2012 Todoroo Inc * * See the file "LICENSE" for the full license governing this code. */ package com.todoroo.astrid.ui; import java.util.LinkedList; import java.util.List; import android.app.Activity; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.CompoundButton; import android.widget.LinearLayout; import android.widget.ToggleButton; import com.timsu.astrid.R; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.helper.TaskEditControlSet; import com.todoroo.astrid.service.ThemeService; /** * Control Set for setting task importance * * @author Tim Su <tim@todoroo.com> * */ public class ImportanceControlSet extends TaskEditControlSet { private final List<CompoundButton> buttons = new LinkedList<CompoundButton>(); private final int[] colors; private final List<ImportanceChangedListener> listeners = new LinkedList<ImportanceChangedListener>(); private static final int TEXT_SIZE = 18; public interface ImportanceChangedListener { public void importanceChanged(int i, int color); } public ImportanceControlSet(Activity activity, int layout) { super(activity, layout); colors = Task.getImportanceColors(activity.getResources()); } public void setImportance(Integer i) { for(CompoundButton b : buttons) { if(b.getTag() == i) { b.setChecked(true); b.setBackgroundResource(ThemeService.getDarkVsLight(R.drawable.importance_background_selected, R.drawable.importance_background_selected_dark, false)); } else { b.setChecked(false); b.setBackgroundResource(0); } } for (ImportanceChangedListener l : listeners) { l.importanceChanged(i, colors[i]); } } public Integer getImportance() { for(CompoundButton b : buttons) if(b.isChecked()) return (Integer) b.getTag(); return null; } public void addListener(ImportanceChangedListener listener) { listeners.add(listener); } public void removeListener(ImportanceChangedListener listener) { if (listeners.contains(listener)) listeners.remove(listener); } @Override protected void afterInflate() { LinearLayout container = (LinearLayout) getView().findViewById(R.id.importance_container); int min = Task.IMPORTANCE_MOST; int max = Task.IMPORTANCE_LEAST; DisplayMetrics metrics = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); for(int i = max; i >= min; i--) { final ToggleButton button = new ToggleButton(activity); LinearLayout.LayoutParams params; int dimension = 38; params = new LinearLayout.LayoutParams((int) (metrics.density * dimension), (int) (metrics.density * dimension)); button.setLayoutParams(params); StringBuilder label = new StringBuilder(); if (i == max) label.append('\u25CB'); for(int j = Task.IMPORTANCE_LEAST - 1; j >= i; j--) label.append('!'); button.setTextColor(colors[i]); button.setTextOff(label); button.setTextOn(label); button.setPadding(0, 1, 0, 0); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { setImportance((Integer)button.getTag()); } }); button.setTag(i); button.setTextSize(TEXT_SIZE); buttons.add(button); View padding = new View(activity); LinearLayout.LayoutParams paddingParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); paddingParams.weight = 1.0f; padding.setLayoutParams(paddingParams); container.addView(padding); container.addView(button); } } @Override public void readFromTask(Task task) { super.readFromTask(task); setImportance(model.getValue(Task.IMPORTANCE)); } // Same as above because we need the setImportance listeners to fire even in // the case when the UI hasn't been created yet @Override protected void readFromTaskOnInitialize() { setImportance(model.getValue(Task.IMPORTANCE)); } @Override protected String writeToModelAfterInitialized(Task task) { if(getImportance() != null) task.setValue(Task.IMPORTANCE, getImportance()); return null; } }