package mil.nga.giat.asam;
import java.util.List;
import mil.nga.giat.asam.model.AsamBean;
import mil.nga.giat.asam.util.AsamConstants;
import mil.nga.giat.asam.util.AsamListContainer;
import mil.nga.giat.asam.util.AsamLog;
import mil.nga.giat.asam.widget.AsamArrayAdapter;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.Spinner;
import android.widget.TextView;
public class AsamListActivity extends ActionBarActivity implements AdapterView.OnItemClickListener {
private List<AsamBean> mAsams;
private ListView mAsamListViewUI;
private AsamArrayAdapter mAsamArrayAdapter;
private Spinner mAsamListSortPopupSpinnerUI;
private RadioButton mSortAscendingRadioButtonUI;
private RadioButton mSortDescendingRadioButtonUI;
private int mSortDirection;
private int mSortPopupSpinnerSelection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AsamLog.i(AsamListActivity.class.getName() + ":onCreate");
setContentView(R.layout.asam_list);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mAsams = AsamListContainer.mAsams;
mAsamListViewUI = (ListView)findViewById(R.id.asam_list_list_view_ui);
mAsamArrayAdapter = new AsamArrayAdapter(this, R.layout.asam_list_row, mAsams);
mSortDirection = AsamConstants.SORT_DESCENDING;
mSortPopupSpinnerSelection = AsamConstants.OCURRENCE_DATE_SORT;
mAsamArrayAdapter.sort(new AsamBean.DescendingOccurrenceDateComparator());
mAsamListViewUI.setAdapter(mAsamArrayAdapter);
mAsamListViewUI.setOnItemClickListener(this);
TextView emptyListViewUI = new TextView(this);
emptyListViewUI.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
emptyListViewUI.setText(getResources().getString(R.string.asam_list_empty_list_text));
emptyListViewUI.setVisibility(View.GONE);
((ViewGroup)mAsamListViewUI.getParent()).addView(emptyListViewUI);
mAsamListViewUI.setEmptyView(emptyListViewUI);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.asam_list_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == android.R.id.home) {
finish();
return true;
}
else if (itemId == R.id.asam_list_menu_sort_ui) {
sortListView();
return true;
}
else {
return super.onOptionsItemSelected(item);
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(this, AsamReportActivity.class);
intent.putExtra(AsamConstants.ASAM_KEY, mAsams.get(position));
startActivity(intent);
}
private void sortListView() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getString(R.string.asam_list_sort_popup_title_text));
View popupView = getLayoutInflater().inflate(R.layout.asam_list_sort_popup, null);
mAsamListSortPopupSpinnerUI = (Spinner)popupView.findViewById(R.id.asam_list_sort_popup_sort_spinner_ui);
mSortAscendingRadioButtonUI = (RadioButton)popupView.findViewById(R.id.asam_list_sort_popup_sort_ascending_radio_button_ui);
mSortDescendingRadioButtonUI = (RadioButton)popupView.findViewById(R.id.asam_list_sort_popup_sort_descending_radio_button_ui);
builder.setView(popupView);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.sort_types, R.layout.asam_list_sort_popup_spinner_item);
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
mAsamListSortPopupSpinnerUI.setAdapter(adapter);
mAsamListSortPopupSpinnerUI.setSelection(mSortPopupSpinnerSelection);
mSortAscendingRadioButtonUI.setChecked(mSortDirection == AsamConstants.SORT_ASCENDING);
mSortDescendingRadioButtonUI.setChecked(mSortDirection == AsamConstants.SORT_DESCENDING);
builder.setPositiveButton(getString(R.string.asam_list_sort_popup_sort_button_text), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mSortPopupSpinnerSelection = mAsamListSortPopupSpinnerUI.getSelectedItemPosition();
mSortDirection = mSortAscendingRadioButtonUI.isChecked() ? AsamConstants.SORT_ASCENDING : AsamConstants.SORT_DESCENDING;
switch (mSortPopupSpinnerSelection) {
case AsamConstants.AGGRESSOR_SORT:
if (mSortDirection == AsamConstants.SORT_ASCENDING) {
mAsamArrayAdapter.sort(new AsamBean.AscendingAggressorComparator());
}
else {
mAsamArrayAdapter.sort(new AsamBean.DescendingAggressorComparator());
}
break;
case AsamConstants.OCURRENCE_DATE_SORT:
if (mSortDirection == AsamConstants.SORT_ASCENDING) {
mAsamArrayAdapter.sort(new AsamBean.AscendingOccurrenceDateComparator());
}
else {
mAsamArrayAdapter.sort(new AsamBean.DescendingOccurrenceDateComparator());
}
break;
case AsamConstants.REFERENCE_NUMBER_SORT:
if (mSortDirection == AsamConstants.SORT_ASCENDING) {
mAsamArrayAdapter.sort(new AsamBean.AscendingReferenceNumberComparator());
}
else {
mAsamArrayAdapter.sort(new AsamBean.DescendingReferenceNumberComparator());
}
break;
case AsamConstants.SUBREGION_SORT:
if (mSortDirection == AsamConstants.SORT_ASCENDING) {
mAsamArrayAdapter.sort(new AsamBean.AscendingSubregionComparator());
}
else {
mAsamArrayAdapter.sort(new AsamBean.DescendingSubregionComparator());
}
break;
case AsamConstants.VICTIM_SORT:
if (mSortDirection == AsamConstants.SORT_ASCENDING) {
mAsamArrayAdapter.sort(new AsamBean.AscendingVictimComparator());
}
else {
mAsamArrayAdapter.sort(new AsamBean.DescendingVictimComparator());
}
break;
}
dialog.dismiss();
}
});
builder.setNegativeButton(getString(R.string.asam_list_sort_popup_cancel_button_text), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
Dialog dialog = builder.create();
dialog.show();
}
}