package edu.gatech.oad.rocket.findmythings; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.Spinner; import edu.gatech.oad.rocket.findmythings.list.ItemFilterConstraint; import edu.gatech.oad.rocket.findmythings.model.Category; import edu.gatech.oad.rocket.findmythings.util.EnumHelper; import java.util.Calendar; import java.util.GregorianCalendar; /** * CS 2340 - FindMyStuff Android App * Activity that takes care of filtering items according to certain criteria * * @author TeamRocket * */ public class FilterActivity extends Activity implements OnItemSelectedListener { public static final int FILTER_REQUEST = 9231; public static final String FILTER_RESPONSE = "filterOutput"; /** * Stores spinner information as int */ public static ItemFilterConstraint constraint = new ItemFilterConstraint(); /** * creates new window with correct layout * @param savedInstanceState Initializing bundle */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_filter); Spinner mStatus = (Spinner) findViewById(R.id.status_spinner); mStatus.setOnItemSelectedListener(this); Spinner mCat = (Spinner) findViewById(R.id.cat_spinner); mCat.setOnItemSelectedListener(this); Spinner mDate = (Spinner) findViewById(R.id.date_spinner); mDate.setOnItemSelectedListener(this); } /** * creates the options menu * @param menu System action bar menu * @return true when done */ @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.filter, menu); return true; } /** * deals with action when an options button is selected * @param item selected menu item * @return boolean */ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.filter_ok: Intent output = new Intent(); output.putExtra(FILTER_RESPONSE, constraint); setResult(RESULT_OK, output); finish(); return true; case R.id.filter_cancel: setResult(RESULT_CANCELED); finish(); return true; } return super.onOptionsItemSelected(item); } /** * deals with action when an item is selected * @param parent The layout XML spinner causing this result * @param view The view that actually represents the spinner * @param pos The selected value * @param id row ID of selected item */ @Override public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { switch(parent.getId()) { case R.id.status_spinner: switch (pos) { case 1: constraint.setOpen(true); break; case 2: constraint.setOpen(false); break; default: constraint.setOpen(null); break; } break; case R.id.cat_spinner: //category if (pos == 0) { constraint.setCategory(null); } else { constraint.setCategory(EnumHelper.forInt(pos-1, Category.class)); } break; case R.id.date_spinner: //date if (pos == 0) { constraint.setDateAfter(null); } else { Calendar today = new GregorianCalendar(); //get current date Calendar date2 = (Calendar)today.clone(); //will be change to yesterday, 14dayago or 30daysago switch(pos) { case 1: date2.add(Calendar.DATE, -2); break; case 2: date2.add(Calendar.DATE, -15); break; case 3: date2.add(Calendar.DATE, -31); break; } constraint.setDateAfter(date2.getTime()); } break; } } /** * deals with what to do when nothing is selected * @param arg0 The layout XML spinner causing this result */ @Override public void onNothingSelected(AdapterView<?> arg0) {} /** * Called to pop the login window from the navigation stack */ @Override public void finish() { super.finish(); overridePendingTransition(R.anim.hold, R.anim.slide_down_modal); } }