package ca.etsmtl.applets.etsmobile.ui.fragment; import android.app.Activity; import android.app.Dialog; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.app.ProgressDialog; import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.Window; import android.widget.Button; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; import android.widget.SearchView; import android.widget.Toast; import com.octo.android.robospice.persistence.exception.SpiceException; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import ca.etsmtl.applets.etsmobile.ApplicationManager; import ca.etsmtl.applets.etsmobile.http.DataManager; import ca.etsmtl.applets.etsmobile.http.DataManager.SignetMethods; import ca.etsmtl.applets.etsmobile.model.FicheEmploye; import ca.etsmtl.applets.etsmobile.ui.activity.BottinDetailsActivity; import ca.etsmtl.applets.etsmobile.ui.adapter.ExpandableListAdapter; import ca.etsmtl.applets.etsmobile.util.Utility; import ca.etsmtl.applets.etsmobile2.R; /** * * @author Thibaut */ public class BottinFragment extends HttpFragment implements SearchView.OnQueryTextListener { private SearchView searchView; private ExpandableListAdapter listAdapter; ExpandableListView expListView; private List<String> listDataHeader; private HashMap<String, List<FicheEmploye>> listDataChild; private ProgressDialog mProgressDialog; @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_bottin, menu); // Associate searchable configuration with the SearchView SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE); searchView = (SearchView) menu.findItem(R.id.menuitem_search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName())); searchView.setOnQueryTextListener(this); super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_item_update: final Dialog dialog = new Dialog(getActivity()); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.dialog_bottin); Button btn_yes = (Button)dialog.findViewById(R.id.btn_dialog_bottin_yes); //Rechargement du bottin btn_yes.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Suppression du bottin File dir = getActivity().getFilesDir(); File file = new File(dir, "bottin.ser"); boolean deleted = file.delete(); //Mise à jour de la liste listDataHeader = new ArrayList<String>(); listDataChild = new HashMap<String, List<FicheEmploye>>(); listAdapter = new ExpandableListAdapter(getActivity(), listDataHeader, listDataChild); dialog.dismiss(); expListView.setAdapter(listAdapter); updateUI(); } }); Button btn_no = (Button) dialog.findViewById(R.id.btn_dialog_bottin_no); btn_no.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); dialog.show(); return true; } return super.onOptionsItemSelected(item); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ViewGroup v = (ViewGroup)inflater.inflate(R.layout.fragment_bottin, container, false); super.onCreateView(inflater, v, savedInstanceState); // get the listview expListView = (ExpandableListView) v.findViewById(R.id.expandableListView_service_employe); //Ouverture du détail expListView.setOnChildClickListener(new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { FicheEmploye ficheEmploye = (FicheEmploye) listAdapter.getChild(groupPosition, childPosition); Intent i = new Intent(getActivity(), BottinDetailsActivity.class); i.putExtra("nom", ficheEmploye.Nom); i.putExtra("prenom", ficheEmploye.Prenom); i.putExtra("telBureau", ficheEmploye.TelBureau); i.putExtra("emplacement", ficheEmploye.Emplacement); i.putExtra("courriel", ficheEmploye.Courriel); i.putExtra("service", ficheEmploye.Service); i.putExtra("titre", ficheEmploye.Titre); getActivity().startActivity(i); // Fragment fragment = BottinDetailsFragment.newInstance(ficheEmploye); // // showFragment(fragment); return true; } }); // create empty data listDataChild = new HashMap<String, List<FicheEmploye>>(); listDataHeader = new ArrayList<String>(); // create custom adapter listAdapter = new ExpandableListAdapter(getActivity(), listDataHeader, listDataChild); // setting list adapter expListView.setAdapter(listAdapter); return v; } @SuppressWarnings({ "rawtypes", "unchecked" }) @Override void updateUI() { try { Activity activity = getActivity(); FileInputStream input = activity.openFileInput("bottin.ser"); ObjectInputStream ois = new ObjectInputStream(input); listDataChild = (HashMap) ois.readObject(); ois.close(); listDataHeader.clear(); listDataHeader.addAll(listDataChild.keySet()); Collections.sort(listDataHeader); listAdapter = new ExpandableListAdapter(getActivity(), listDataHeader, listDataChild); // setting list adapter expListView.setAdapter(listAdapter); if (input != null) input.close(); if (activity != null) { activity.runOnUiThread(new Runnable() { public void run() { listAdapter.notifyDataSetChanged(); } }); } } catch (FileNotFoundException e) { if (Utility.isNetworkAvailable(getActivity())) { try { mProgressDialog = ProgressDialog.show(getActivity(), null,"Chargement du bottin en cours", true); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); DataManager datamanager = DataManager.getInstance(getActivity()); datamanager.getDataFromSignet( SignetMethods.BOTTIN_GET_LIST_SERVICE_AND_EMP, ApplicationManager.userCredentials, this); } catch (Exception e1) { e1.printStackTrace(); } } else { Toast.makeText(getActivity(), "Une connexion internet est requise pour télécharger le bottin", Toast.LENGTH_LONG).show(); } } catch (Exception e) { e.printStackTrace(); } } @Override public void onRequestSuccess(Object o) { super.onRequestSuccess(o); if (o instanceof HashMap<?, ?>) { @SuppressWarnings("unchecked") HashMap<String, List<FicheEmploye>> listeEmployeByService = (HashMap<String, List<FicheEmploye>>) o; for (String nomService : listeEmployeByService.keySet()) { List<FicheEmploye> listeEmployes = listeEmployeByService.get(nomService); if (listeEmployes.size() != 0) { listDataHeader.add(nomService); listDataChild.put(nomService, listeEmployeByService.get(nomService)); } } Collections.sort(listDataHeader); FileOutputStream output; try { output = getActivity().openFileOutput("bottin.ser", getActivity().MODE_PRIVATE); ObjectOutputStream oos = new ObjectOutputStream(output); oos.writeObject(listDataChild); oos.close(); if (output != null) output.close(); } catch (Exception e) { e.printStackTrace(); } Activity activity = getActivity(); if (activity != null) { getActivity().runOnUiThread(new Runnable() { public void run() { listAdapter.notifyDataSetChanged(); mProgressDialog.dismiss(); } }); } } } @Override public void onRequestFailure(SpiceException e) { super.onRequestFailure(e); } private void showFragment(final Fragment fragment) { if (fragment == null) return; final FragmentManager fm = getActivity().getFragmentManager(); final FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.content_frame, fragment); // ft.addToBackStack(null); ft.commit(); } @Override public boolean onQueryTextSubmit(String query) { // listAdapter.filterData(query); return false; } @Override public boolean onQueryTextChange(String newText) { // if (newText.equals("")) { listAdapter.filterData(newText); // } // listAdapter.filterData(newText); return true; } }