package pam.yongshunli.hippiemaps; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.Button; import android.widget.ExpandableListView; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.google.android.gms.maps.CameraUpdate; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.LatLngBounds; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import com.sothree.slidinguppanel.SlidingUpPanelLayout; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, ExpandableListView.OnGroupClickListener { private SlidingUpPanelLayout slidingLayout; private ArrayList<Entreprise> listEntreprise; private ExpandableListView expandableListView; private int ordre; private LatLng shawiniganLatLng, montrealLatLng, troisriviereLatLng, jolietteLatLng, victoriavilleLatLng; private ArrayList<Marker> listMarker; /** * preparer la carte google et des donnees. * @param savedInstanceState */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps_plus); slidingLayout = (SlidingUpPanelLayout)findViewById(R.id.sliding_layout); final FrameLayout mapView=(FrameLayout)findViewById(R.id.mapView); slidingLayout.setPanelSlideListener(new SlidingUpPanelLayout.PanelSlideListener(){ @Override public void onPanelSlide(View view, float v) { } @Override public void onPanelCollapsed(View view) { mapView.setVisibility(View.VISIBLE); //expandableListView.setVisibility(View.VISIBLE); } @Override public void onPanelExpanded(View view) { mapView.setVisibility(View.GONE); } @Override public void onPanelAnchored(View view) { } @Override public void onPanelHidden(View view) { } }); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); //preparer les donnees pour tester prepareDonnees(); } /** * obtenir les lattitudes et longitudes des entreprises,et d'autres donnees. */ private void prepareDonnees() { //les LatLng infos sont obtenues pas webservice de googlemap,les entrees sont des addresses civiqes. //les points cidessus sont seulement pour les tests. //preparer les lattitudes et logitudes pour chaque entreprise shawiniganLatLng = new LatLng(46.5618559, -72.7435254); montrealLatLng = new LatLng(45.5454532, -73.6390814); troisriviereLatLng = new LatLng(46.35088, -72.54806); jolietteLatLng = new LatLng(46.02318, -73.44253); victoriavilleLatLng = new LatLng(46.05837, -71.95025); ArrayList<LatLng> listLatLng = new ArrayList(); listLatLng.add(shawiniganLatLng); listLatLng.add(montrealLatLng); listLatLng.add(troisriviereLatLng); listLatLng.add(jolietteLatLng); listLatLng.add(victoriavilleLatLng); // preparer des entreprise et leurs liste denrees ArrayList<Denree> listDenree1 = new ArrayList<Denree>(); listDenree1.add(new Denree("orange", "2", "kg", StateDenree.disponible, TypeDenree.fruit_legume)); listDenree1.add(new Denree("poulet", "3", "kg", StateDenree.disponible, TypeDenree.perissable)); listDenree1.add(new Denree("prune", "13", "kg", StateDenree.disponible, TypeDenree.fruit_legume)); listDenree1.add(new Denree("lait", "6", "kg", StateDenree.disponible, TypeDenree.laitier)); HashMap<String, String> mapCollectTime1 = new HashMap<>(); mapCollectTime1.put("lundi", "12:00-14:00"); mapCollectTime1.put("mardi", "9:00-16:00"); mapCollectTime1.put("mercredi", "8:00-13:00"); mapCollectTime1.put("jeudi", "9:00-14:00"); mapCollectTime1.put("vendredi", "9:00-17:00"); mapCollectTime1.put("samdi", "9:00-13:00"); mapCollectTime1.put("dimanche", "ferme"); Entreprise entreprise1 = new Entreprise("denree Shawinigan", "120,62E RUE Shawinigan", shawiniganLatLng, mapCollectTime1, "819-000-1234", listDenree1); ArrayList<Denree> listDenree2 = new ArrayList<Denree>(); listDenree2.add(new Denree("pomme", "33", "kg", StateDenree.disponible, TypeDenree.boulangerie)); listDenree2.add(new Denree("avocat", "8", "kg", StateDenree.disponible, TypeDenree.fruit_legume)); listDenree2.add(new Denree("rasin", "7", "kg", StateDenree.disponible, TypeDenree.fruit_legume)); listDenree2.add(new Denree("patate", "21", "kg", StateDenree.disponible, TypeDenree.fruit_legume)); HashMap<String, String> mapCollectTime2 = new HashMap<>(); mapCollectTime2.put("lundi", "9:00-14:00"); mapCollectTime2.put("mardi", "8:00-14:00"); mapCollectTime2.put("mercredi", "8:00-18:00"); mapCollectTime2.put("jeudi", "9:00-14:00"); mapCollectTime2.put("vendredi", "10:00-17:00"); mapCollectTime2.put("samdi", "9:00-13:00"); mapCollectTime2.put("dimanche", "ferme"); Entreprise entreprise2 = new Entreprise("denree Montreal", "250,25E RUE Montreal", montrealLatLng, mapCollectTime2, "514-123-0000", listDenree2); ArrayList<Denree> listDenree3 = new ArrayList<>(); listDenree3.add(new Denree("croissant", "7", "kg", StateDenree.disponible, TypeDenree.boulangerie)); listDenree3.add(new Denree("mais", "40", "kg", StateDenree.disponible, TypeDenree.perissable)); listDenree3.add(new Denree("carrot", "41", "kg", StateDenree.disponible, TypeDenree.fruit_legume)); HashMap<String, String> mapCollectTime3 = new HashMap<>(); mapCollectTime3.put("lundi", "9:00-14:00"); mapCollectTime3.put("mardi", "9:00-11:00"); mapCollectTime3.put("mercredi", "8:00-14:00"); mapCollectTime3.put("jeudi", "13:00-14:00"); mapCollectTime3.put("vendredi", "9:00-17:00"); mapCollectTime3.put("samdi", "9:00-13:00"); mapCollectTime3.put("dimanche", "ferme"); Entreprise entreprise3 = new Entreprise("denree Joliette", "156,5E RUE Joliette", jolietteLatLng, mapCollectTime3, "819-040-0450", listDenree3); ArrayList<Denree> listDenree4 = new ArrayList<>(); listDenree4.add(new Denree("rasin", "37", "kg", StateDenree.disponible, TypeDenree.fruit_legume)); listDenree4.add(new Denree("tuna", "90", "kg", StateDenree.disponible, TypeDenree.surgele)); HashMap<String, String> mapCollectTime4 = new HashMap<>(); mapCollectTime4.put("lundi", "9:00-12:00"); mapCollectTime4.put("mardi", "9:00-14:00"); mapCollectTime4.put("mercredi", "10:00-14:00"); mapCollectTime4.put("jeudi", "9:00-14:00"); mapCollectTime4.put("vendredi", "9:00-16:00"); mapCollectTime4.put("samdi", "9:00-13:00"); mapCollectTime4.put("dimanche", "ferme"); Entreprise entreprise4 = new Entreprise("denree Victoriaville", "350,36E RUE Victoriaville", victoriavilleLatLng, mapCollectTime4, "819-021-3214", listDenree4); ArrayList<Denree> listDenree5 = new ArrayList<>(); listDenree5.add(new Denree("tuna", "34", "kg", StateDenree.disponible, TypeDenree.surgele)); listDenree5.add(new Denree("avocat", "27", "kg", StateDenree.disponible, TypeDenree.perissable)); listDenree5.add(new Denree("orange", "56", "kg", StateDenree.disponible, TypeDenree.fruit_legume)); listDenree5.add(new Denree("samon", "34", "kg", StateDenree.disponible, TypeDenree.surgele)); listDenree5.add(new Denree("beuf", "9", "kg", StateDenree.disponible, TypeDenree.viande)); HashMap<String, String> mapCollectTime5 = new HashMap<>(); mapCollectTime5.put("lundi", "9:00-10:00"); mapCollectTime5.put("mardi", "11:00-14:00"); mapCollectTime5.put("mercredi", "8:00-14:00"); mapCollectTime5.put("jeudi", "9:00-16:00"); mapCollectTime5.put("vendredi", "13:00-17:00"); mapCollectTime5.put("samdi", "9:00-10:00"); mapCollectTime5.put("dimanche", "ferme"); Entreprise entreprise5 = new Entreprise("denree Trois Rivieres", "168,77E RUE Trois Rivieres", troisriviereLatLng, mapCollectTime5, "819-000-4527", listDenree5); //preparer les entreprise affichee sur carte listEntreprise = new ArrayList<>(); listEntreprise.add(entreprise1); listEntreprise.add(entreprise2); listEntreprise.add(entreprise3); listEntreprise.add(entreprise4); listEntreprise.add(entreprise5); } /** * Manipulates the map once available. * This callback is triggered when the map is ready to be used. * This is where we can add markers or lines, add listeners or move the camera. In this case, * we just add a marker near Sydney, Australia. * If Google Play services is not installed on the device, the user will be prompted to install * it inside the SupportMapFragment. This method will only be triggered once the user has * installed Google Play services and returned to the app. */ @Override public void onMapReady(GoogleMap googleMap) { GoogleMap mMap = googleMap; //les LatLng infos sont obtenues pas webservice de googlemap,les entrees sont des addresses civiles. //les points cidessus sont seulement pour les tests. //ajouter les point sur carte final Marker markerShawinigan = mMap.addMarker(new MarkerOptions().position(shawiniganLatLng)); final Marker markerMontreal = mMap.addMarker(new MarkerOptions().position(montrealLatLng)); final Marker markerTroisriviere = mMap.addMarker(new MarkerOptions().position(troisriviereLatLng)); final Marker markerJoliette = mMap.addMarker(new MarkerOptions().position(jolietteLatLng)); final Marker markerVictoriaville = mMap.addMarker(new MarkerOptions().position(victoriavilleLatLng)); // listMarker=new ArrayList<>(); // for(int i=0;i<listLatLng.size();i++){ // listMarker.add(mMap.addMarker(new MarkerOptions().position(listLatLng.get(i)))); // } LatLngBounds.Builder builder = new LatLngBounds.Builder(); // for (Marker m : listMarker) { // builder.include(m.getPosition()); // } builder.include(shawiniganLatLng).include(montrealLatLng).include(troisriviereLatLng).include(jolietteLatLng).include(victoriavilleLatLng); LatLngBounds bounds = builder.build(); int padding = 1; // offset from edges of the map in pixels CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds,400,600, padding); mMap.moveCamera(cu); mMap.animateCamera(cu); mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { //par le variable ordre,on peut determiner quelle entreprise a s'afficher if (marker.equals(markerShawinigan)) { ordre = 0; } else if (marker.equals(markerMontreal)) { ordre = 1; } else if (marker.equals(markerJoliette)) { ordre = 2; } else if (marker.equals(markerVictoriaville)) { ordre = 3; } else if (marker.equals(markerTroisriviere)) { ordre = 4; } final Entreprise mEntreprise = listEntreprise.get(ordre); expandableListView.setAdapter(new BaseExpandableListAdapter() { @Override public int getGroupCount() { return 3; } @Override public int getChildrenCount(int groupPosition) { int count; if (groupPosition == 0) { count = 2; } else if (groupPosition == 1) { count = 7; } else { count = mEntreprise.getListDenree().size(); } return count; } @Override public Object getGroup(int groupPosition) { Object info = null; if (groupPosition == 0) { info = mEntreprise.getNomEntreprise(); } else if (groupPosition == 1) { info = mEntreprise.getMapCollectTime(); } else { info = mEntreprise.getListDenree(); } return info; } @Override public Object getChild(int groupPosition, int childPosition) { Object info = null; if (groupPosition == 0) { switch (childPosition) { case 0: info = mEntreprise.getAddresse(); break; case 1: info = mEntreprise.getTelephone(); break; } } else if (groupPosition == 1) { switch (childPosition) { case 0: info = mEntreprise.getMapCollectTime().get("lundi"); break; case 1: info = mEntreprise.getMapCollectTime().get("mardi"); break; case 2: info = mEntreprise.getMapCollectTime().get("mercredi"); break; case 3: info = mEntreprise.getMapCollectTime().get("jeudi"); break; case 4: info = mEntreprise.getMapCollectTime().get("vendredi"); break; case 5: info = mEntreprise.getMapCollectTime().get("samdi"); break; case 6: info = mEntreprise.getMapCollectTime().get("dimanche"); break; } } else { info = mEntreprise.getListDenree().get(childPosition); } return info; } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return true; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { LinearLayout layout1 = new LinearLayout(MapsActivity.this); layout1.setOrientation(LinearLayout.HORIZONTAL); ImageView logo = new ImageView(MapsActivity.this); logo.setMinimumWidth(300); TextView textView = new TextView(MapsActivity.this); textView.setTextColor(Color.BLACK); textView.setTextSize(20); textView.setPadding(15, 15, 15, 15); if (groupPosition == 0) { logo.setImageResource(R.drawable.addren); textView.setText(mEntreprise.getAddresse()); } else if (groupPosition == 1) { logo.setImageResource(R.drawable.clockn); final Calendar c = Calendar.getInstance(); int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); if (dayOfWeek == 1) { // textView.setText(mEntreprise.getMapCollectTime().get("lundi")); textView.setText(((HashMap) getGroup(groupPosition)).get("lundi").toString()); } else if (dayOfWeek == 2) { textView.setText(mEntreprise.getMapCollectTime().get("mardi")); } else if (dayOfWeek == 3) { textView.setText(mEntreprise.getMapCollectTime().get("mercredi")); } else if (dayOfWeek == 4) { textView.setText(mEntreprise.getMapCollectTime().get("jeudi")); } else if (dayOfWeek == 5) { textView.setText(mEntreprise.getMapCollectTime().get("vendredi")); } else if (dayOfWeek == 6) { textView.setText(mEntreprise.getMapCollectTime().get("samdi")); } else { textView.setText(mEntreprise.getMapCollectTime().get("dimanche")); } } else { logo.setImageResource(R.drawable.lists); textView.setText("afficher les denree a donner unites:" + mEntreprise.getListDenree().size()); } layout1.addView(logo); layout1.addView(textView); return layout1; } @Override public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { LinearLayout layout = new LinearLayout(MapsActivity.this); layout.setOrientation(LinearLayout.HORIZONTAL); if (groupPosition == 0) { ImageView logo = new ImageView(MapsActivity.this); logo.setMinimumWidth(300); TextView textView = new TextView(MapsActivity.this); textView.setTextColor(Color.BLACK); textView.setTextSize(20); textView.setPadding(5, 55, 5, 5); switch (childPosition) { case 0: logo.setImageResource(R.drawable.trademarks); textView.setText(mEntreprise.getNomEntreprise()); break; case 1: logo.setImageResource(R.drawable.newtele); textView.setText(mEntreprise.getTelephone()); break; } layout.addView(logo); layout.addView(textView); } else if (groupPosition == 1) { TextView textViewDay = new TextView(MapsActivity.this); textViewDay.setTextColor(Color.BLACK); textViewDay.setTextSize(20); textViewDay.setPadding(55, 35, 5, 5); textViewDay.setWidth(300); TextView textViewTime = new TextView(MapsActivity.this); textViewTime.setTextColor(Color.BLACK); textViewTime.setTextSize(20); textViewTime.setPadding(55, 35, 5, 5); textViewTime.setWidth(300); switch (childPosition) { case 0: textViewTime.setText("lundi"); textViewDay.setText(mEntreprise.getMapCollectTime().get("lundi")); break; case 1: textViewTime.setText("mardi"); textViewDay.setText(mEntreprise.getMapCollectTime().get("mardi")); break; case 2: textViewTime.setText("mercredi"); textViewDay.setText(mEntreprise.getMapCollectTime().get("mercredi")); break; case 3: textViewTime.setText("jeudi"); textViewDay.setText(mEntreprise.getMapCollectTime().get("jeudi")); break; case 4: textViewTime.setText("vendredi"); textViewDay.setText(mEntreprise.getMapCollectTime().get("vendredi")); break; case 5: textViewTime.setText("samdi"); textViewDay.setText(mEntreprise.getMapCollectTime().get("samdi")); break; case 6: textViewTime.setText("dimanche"); textViewDay.setText(mEntreprise.getMapCollectTime().get("dimanche")); break; } layout.addView(textViewDay); layout.addView(textViewTime); } else { ImageView logo = new ImageView(MapsActivity.this); String typeDenree = (((Denree) getChild(groupPosition, childPosition))).getTypeDenree().toString(); if ((typeDenree.equals("fruit_legume"))) { logo.setImageResource(R.drawable.fruits); } else if (typeDenree.equals("viande")) { logo.setImageResource(R.drawable.meats); } else if (typeDenree.equals("laitier")) { logo.setImageResource(R.drawable.milks); } else if (typeDenree.equals("surgele")) { logo.setImageResource(R.drawable.frozens); } else if (typeDenree.equals("perissable")) { logo.setImageResource(R.drawable.perishables); } else if (typeDenree.equals("boulangerie")) { logo.setImageResource(R.drawable.breads); } else { logo.setImageResource(R.drawable.nonperishables); } logo.setMinimumWidth(300); TextView textView1 = new TextView(MapsActivity.this); textView1.setTextColor(Color.BLACK); textView1.setTextSize(20); textView1.setWidth(200); textView1.setPadding(5, 55, 5, 5); textView1.setText(mEntreprise.getListDenree().get(childPosition).getNomDenree()); TextView textView3 = new TextView(MapsActivity.this); textView3.setTextColor(Color.BLACK); textView3.setTextSize(20); textView3.setWidth(200); textView3.setPadding(5, 55, 5, 5); textView3.setText(mEntreprise.getListDenree().get(childPosition).getQuantiteDenree()); Button btn = new Button(MapsActivity.this); btn.setText("reserver"); btn.setPadding(5, 5, 5, 5); layout.addView(logo); layout.addView(textView1); layout.addView(textView3); layout.addView(btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mEntreprise.getListDenree().get(childPosition).setStateDenree(StateDenree.reserveee); } }); } return layout; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } @Override public boolean areAllItemsEnabled() { return false; } @Override public boolean isEmpty() { return false; } @Override public void onGroupExpanded(int groupPosition) { } @Override public void onGroupCollapsed(int groupPosition) { } @Override public long getCombinedChildId(long groupId, long childId) { return 0; } @Override public long getCombinedGroupId(long groupId) { return 0; } }); return false; } } ); // mMap.moveCamera(CameraUpdateFactory.newLatLng(shawiniganLatLng)); expandableListView = (ExpandableListView) findViewById(R.id.expandableListView); //mettre le listener pour group de l'expandablelistview expandableListView.setOnGroupClickListener(this); } @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { if(!parent.isGroupExpanded(groupPosition)){ parent.expandGroup(groupPosition); return true; } return false; } }