/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.activity;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.view.View;
import android.widget.CheckBox;
import android.widget.RadioButton;
import com.timsu.astrid.R;
import com.todoroo.astrid.core.SortHelper;
/**
* Shows the sort / hidden dialog
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class SortSelectionActivity {
public interface OnSortSelectedListener {
public void onSortSelected(boolean always, int flags, int sort);
}
/**
* Create the dialog
* @param activity
* @return
*/
public static AlertDialog createDialog(Activity activity, boolean showDragDrop,
OnSortSelectedListener listener, int flags, int sort) {
View body = activity.getLayoutInflater().inflate(R.layout.sort_selection_dialog, null);
if((flags & SortHelper.FLAG_REVERSE_SORT) > 0)
((CheckBox)body.findViewById(R.id.reverse)).setChecked(true);
if((flags & SortHelper.FLAG_SHOW_COMPLETED) > 0)
((CheckBox)body.findViewById(R.id.completed)).setChecked(true);
if((flags & SortHelper.FLAG_SHOW_HIDDEN) > 0)
((CheckBox)body.findViewById(R.id.hidden)).setChecked(true);
if((flags & SortHelper.FLAG_SHOW_DELETED) > 0)
((CheckBox)body.findViewById(R.id.deleted)).setChecked(true);
if(!showDragDrop)
body.findViewById(R.id.sort_drag).setVisibility(View.GONE);
if(showDragDrop && (flags & SortHelper.FLAG_DRAG_DROP) > 0)
((RadioButton)body.findViewById(R.id.sort_drag)).setChecked(true);
else {
switch(sort) {
case SortHelper.SORT_ALPHA:
((RadioButton)body.findViewById(R.id.sort_alpha)).setChecked(true);
break;
case SortHelper.SORT_DUE:
((RadioButton)body.findViewById(R.id.sort_due)).setChecked(true);
break;
case SortHelper.SORT_IMPORTANCE:
((RadioButton)body.findViewById(R.id.sort_importance)).setChecked(true);
break;
case SortHelper.SORT_MODIFIED:
((RadioButton)body.findViewById(R.id.sort_modified)).setChecked(true);
break;
default:
((RadioButton)body.findViewById(R.id.sort_smart)).setChecked(true);
}
}
body.findViewById(R.id.sort_drag).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// disable reverse
}
});
AlertDialog dialog = new AlertDialog.Builder(activity).
setTitle(R.string.TLA_menu_sort).
setView(body).
setPositiveButton(R.string.SSD_save_always,
new DialogOkListener(body, listener, true)).
setNegativeButton(R.string.SSD_save_temp,
new DialogOkListener(body, listener, false)).
create();
dialog.setOwnerActivity(activity);
return dialog;
}
// --- internal implementation
private SortSelectionActivity() {
// use the static method
}
private static class DialogOkListener implements OnClickListener {
private final OnSortSelectedListener listener;
private final boolean always;
private final View body;
public DialogOkListener(View body, OnSortSelectedListener listener, boolean always) {
this.body = body;
this.listener = listener;
this.always = always;
}
@Override
public void onClick(DialogInterface view, int button) {
int flags = 0;
int sort = 0;
if(((CheckBox)body.findViewById(R.id.reverse)).isChecked())
flags |= SortHelper.FLAG_REVERSE_SORT;
if(((CheckBox)body.findViewById(R.id.completed)).isChecked())
flags |= SortHelper.FLAG_SHOW_COMPLETED;
if(((CheckBox)body.findViewById(R.id.hidden)).isChecked())
flags |= SortHelper.FLAG_SHOW_HIDDEN;
if(((CheckBox)body.findViewById(R.id.deleted)).isChecked())
flags |= SortHelper.FLAG_SHOW_DELETED;
if(((RadioButton)body.findViewById(R.id.sort_drag)).isChecked())
flags |= SortHelper.FLAG_DRAG_DROP;
if(((RadioButton)body.findViewById(R.id.sort_alpha)).isChecked())
sort = SortHelper.SORT_ALPHA;
else if(((RadioButton)body.findViewById(R.id.sort_due)).isChecked())
sort = SortHelper.SORT_DUE;
else if(((RadioButton)body.findViewById(R.id.sort_importance)).isChecked())
sort = SortHelper.SORT_IMPORTANCE;
else if(((RadioButton)body.findViewById(R.id.sort_modified)).isChecked())
sort = SortHelper.SORT_MODIFIED;
else
sort = SortHelper.SORT_AUTO;
listener.onSortSelected(always, flags, sort);
}
}
}