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();
}
}