package com.realtrackandroid.views.projectsactivities; import java.util.ArrayList; import java.util.List; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.view.View; import android.widget.ExpandableListView; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.actionbarsherlock.widget.SearchView; import com.realtrackandroid.R; import com.realtrackandroid.backend.activities.ActivitiesDAO; import com.realtrackandroid.backend.projects.ProjectDAO; import com.realtrackandroid.models.activities.Activities; import com.realtrackandroid.models.projects.Project; import com.realtrackandroid.views.help.FrameworkInfoDialog; import com.realtrackandroid.views.help.GlossaryDialog; import com.realtrackandroid.views.help.HelpDialog; import com.realtrackandroid.views.projects.AddProjectActivity; /* * Presents an activity that lists all the projects in the app's database * Pressing the back key will exit the activity and take you back to the home screen (WelcomeActivity) */ public class AllProjectsActivitiesActivity extends SherlockFragmentActivity { protected ExpandableListView projectsActivitiesListView; // holds a list of the projects List<ProjectsActivitiesHolder> projectsactivities_data, filteredprojectsactivities_data; private ProjectsActivitiesListAdapter projectsActivitiesListAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_allprojectsactivities); } @Override public void onResume() { super.onResume(); getSupportActionBar().setDisplayHomeAsUpEnabled(true); projectsActivitiesListView = (ExpandableListView) findViewById(R.id.projectsactivitieslistView); filteredprojectsactivities_data = new ArrayList<ProjectsActivitiesHolder>(); // used for // filtered data createAllProjectsActivitiesList(); } // create actionbar menu @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.allprojectsmenu, menu); // used to filter the projects list as the user types or when he submits the query SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { createFilteredProjectsActivitiesList(query); return false; } @Override public boolean onQueryTextChange(String newText) { createFilteredProjectsActivitiesList(newText); return false; } }; // set the text listener for the Search field SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); searchView.setOnQueryTextListener(queryTextListener); final MenuItem addProject = menu.findItem(R.id.action_addproject); // hide the add button when the search view is expanded final Menu m = menu; searchView.setOnSearchClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (m != null) addProject.setVisible(false); } }); searchView.setOnCloseListener(new SearchView.OnCloseListener() { @Override public boolean onClose() { supportInvalidateOptionsMenu(); // this is needed because Android doesn't remember the Add // icon and changes it back // to the Settings icon when the Search view is closed if (m != null) addProject.setVisible(true); return false; } }); getSupportActionBar().setDisplayShowTitleEnabled(true); return true; } /** * *********************************************************************************************** * ******************* transition to view for adding new project when the add icon in the action * bar is clicked * ********************************************************************************* * ********************************* */ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // provide a back button on the actionbar finish(); break; case R.id.action_addproject: Intent intent = new Intent(this, AddProjectActivity.class); startActivity(intent); overridePendingTransition(R.anim.animation_slideinright, R.anim.animation_slideoutleft); break; case R.id.action_help: HelpDialog helpDialog = new HelpDialog(); helpDialog.setStyle(DialogFragment.STYLE_NO_TITLE, 0); helpDialog.show(getSupportFragmentManager(), "helpdialog"); break; case R.id.action_framework: FrameworkInfoDialog frameworkInfoDialog = new FrameworkInfoDialog(); frameworkInfoDialog.setStyle(DialogFragment.STYLE_NO_TITLE, 0); frameworkInfoDialog.show(getSupportFragmentManager(), "frameworkinfodialog"); break; case R.id.action_glossary: GlossaryDialog glossaryDialog = new GlossaryDialog(); glossaryDialog.setStyle(DialogFragment.STYLE_NO_TITLE, 0); glossaryDialog.show(getSupportFragmentManager(), "glossarydialog"); break; default: return super.onOptionsItemSelected(item); } return true; } /** * *********************************************************************************************** * ******************* check whether the string passed in is present in any of the projects in our * list called by queryTextListener * *************************************************************** * *************************************************** */ void createFilteredProjectsActivitiesList(String text) { filteredprojectsactivities_data.clear(); for (int i = 0; i < projectsactivities_data.size(); i++) { if (projectsactivities_data.get(i).getProject().getTitle().toLowerCase() .matches(".*" + text.toLowerCase() + ".*")) { filteredprojectsactivities_data.add(projectsactivities_data.get(i)); } } updateProjectsActivitiesList(filteredprojectsactivities_data); } /** * *********************************************************************************************** * ******************* populate the projects list list style defined in layout/row_allprojects.xml * Source: http://www.ezzylearning.com/tutorial.aspx?tid=1763429 * ********************************** * ******************************************************************************** */ void createAllProjectsActivitiesList() { ProjectDAO pDao = new ProjectDAO(getApplicationContext()); ActivitiesDAO aDao = new ActivitiesDAO(getApplicationContext()); ArrayList<Project> projects_data = pDao.getAllProjects(); projectsactivities_data = new ArrayList<ProjectsActivitiesHolder>(); for (Project p : projects_data) { ProjectsActivitiesHolder paHolder = new ProjectsActivitiesHolder(); paHolder.setProject(p); List<Activities> activitiesList = aDao.getAllActivitiesForProjectId(p.getId()); Activities addNewActivityDummy = new Activities(); addNewActivityDummy.setTitle(getResources().getString(R.string.newrepeating) + " " + p.getTitle() + " " + getResources().getString(R.string.activityellipses)); addNewActivityDummy.setId(-1); addNewActivityDummy.setProjectid(p.getId()); activitiesList.add(addNewActivityDummy); paHolder.setActivitiesList(activitiesList); projectsactivities_data.add(paHolder); } ProjectsActivitiesHolder paHolder = new ProjectsActivitiesHolder(); Project p = new Project(); p.setId(-1); if (projects_data.isEmpty()) p.setTitle(getResources().getString(R.string.addyourprimaryproject)); else p.setTitle(getResources().getString(R.string.addasecondaryproject)); paHolder.setProject(p); paHolder.setActivitiesList(new ArrayList<Activities>()); projectsactivities_data.add(paHolder); updateProjectsActivitiesList(projectsactivities_data); } private void updateProjectsActivitiesList(List<ProjectsActivitiesHolder> projectsactivities_data) { projectsActivitiesListAdapter = new ProjectsActivitiesListAdapter(this, R.layout.row_allprojects, R.layout.row_allactivities, projectsActivitiesListView, projectsactivities_data); projectsActivitiesListAdapter.setInflater((getLayoutInflater())); projectsActivitiesListView.setAdapter(projectsActivitiesListAdapter); // make sure all groups are expanded by default for (int i = 0; i < projectsactivities_data.size(); i++) { projectsActivitiesListView.expandGroup(i); } // hide default arrow group indicator because we will provide our own projectsActivitiesListView.setGroupIndicator(null); } @Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.animation_slideinleft, R.anim.animation_slideoutright); finish(); } }