diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/MapMarker.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/MapMarker.java index 22927c0..4d6afeb 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/MapMarker.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/MapMarker.java @@ -5,18 +5,22 @@ import android.location.Address; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; +import fr.romanet.vj.apps.myrealestateagency.entities.Property; + public class MapMarker { private Address address; private LatLng latLng; private String title; private float color; + private Property property; - public MapMarker(Address address, String title, float color) { + public MapMarker(Address address, String title, float color, Property property) { this.address = address; this.latLng = new LatLng(this.address.getLatitude(), this.address.getLongitude()); this.title = title; this.color = color; + this.property = property; } public Address getAddress() { diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/PropertyDao.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/PropertyDao.java index d14662c..16ad941 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/PropertyDao.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/PropertyDao.java @@ -16,6 +16,9 @@ import fr.romanet.vj.apps.myrealestateagency.entities.Property; @Dao public interface PropertyDao { + @Query("SELECT * FROM property WHERE property_id = :propertyId") + Property getOnePropertyById(int propertyId); + @Query("SELECT * FROM property WHERE belongs_agency_id = :agencyId") List getPropertyFromAgencyList(int agencyId); diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/MapsActivityRepository.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/MapsActivityRepository.java index 22096fb..63b7e4a 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/MapsActivityRepository.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/MapsActivityRepository.java @@ -54,9 +54,9 @@ public class MapsActivityRepository { for (Property property: propertiesFromAgency){ if(property.propertyStatue.statueSale){ - mapMarkers.add(new MapMarker(get_lat_long_from_address(property.address, MyApp.getContext()), property.description, BitmapDescriptorFactory.HUE_RED)); + mapMarkers.add(new MapMarker(get_lat_long_from_address(property.address, MyApp.getContext()), String.valueOf(property.propertyId), BitmapDescriptorFactory.HUE_RED, property)); }else{ - mapMarkers.add(new MapMarker(get_lat_long_from_address(property.address, MyApp.getContext()), property.description, BitmapDescriptorFactory.HUE_BLUE)); + mapMarkers.add(new MapMarker(get_lat_long_from_address(property.address, MyApp.getContext()), String.valueOf(property.propertyId), BitmapDescriptorFactory.HUE_BLUE, property)); } } @@ -64,5 +64,11 @@ public class MapsActivityRepository { return mapMarkers; } + public Property get_one_property_by_id(Application application, Integer propertyId){ + propertyRepository = new PropertyRepository(application); + Property property = propertyRepository.getOnePropertyById(propertyId); + return property; + } + } \ No newline at end of file diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/PropertyRepository.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/PropertyRepository.java index 2abecd9..88e508b 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/PropertyRepository.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/PropertyRepository.java @@ -22,6 +22,9 @@ public class PropertyRepository { allProperties = propertyDao.getPropertyList(); } + + public Property getOnePropertyById(int propertyId){return propertyDao.getOnePropertyById(propertyId);} + public List getPropertyFromAgencyList(Agency agency){return propertyDao.getPropertyFromAgencyList(agency.agencyId); } public LiveData> getAllProperties() { diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/view/MapsActivity.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/view/MapsActivity.java index 8cd3b4c..2977d57 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/view/MapsActivity.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/view/MapsActivity.java @@ -5,9 +5,11 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; +import android.content.Intent; import android.location.Address; import android.os.Bundle; import android.util.Log; +import android.util.Property; import com.google.android.gms.maps.CameraUpdate; import com.google.android.gms.maps.CameraUpdateFactory; @@ -26,6 +28,7 @@ import java.util.ArrayList; import java.util.List; import fr.romanet.vj.apps.myrealestateagency.MapMarker; +import fr.romanet.vj.apps.myrealestateagency.MyApp; import fr.romanet.vj.apps.myrealestateagency.R; import fr.romanet.vj.apps.myrealestateagency.repository.MapsActivityRepository; import fr.romanet.vj.apps.myrealestateagency.viewmodel.MapsActivityViewModel; @@ -75,6 +78,16 @@ public class MapsActivity extends FragmentActivity implements OnMapReadyCallback } + + private GoogleMap.OnMarkerClickListener markerClickListener = new GoogleMap.OnMarkerClickListener() { + @Override + public boolean onMarkerClick(Marker marker) { + viewModel.intent_property_activity_from_marker(marker); + return false; + } + }; + + private void observeAddresses(GoogleMap mMap){ viewModel.markers_to_display.observe(this, new Observer>() { List markers = new ArrayList(); @@ -103,9 +116,13 @@ public class MapsActivity extends FragmentActivity implements OnMapReadyCallback mMap.animateCamera(cu); + mMap.setOnMarkerClickListener(markerClickListener); + } }); } }); } + + } \ No newline at end of file diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/MapsActivityViewModel.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/MapsActivityViewModel.java index acb4e93..449f575 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/MapsActivityViewModel.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/MapsActivityViewModel.java @@ -1,7 +1,9 @@ package fr.romanet.vj.apps.myrealestateagency.viewmodel; import android.app.Application; +import android.content.Intent; import android.location.Address; +import android.util.Log; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; @@ -13,6 +15,7 @@ import androidx.lifecycle.OnLifecycleEvent; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.Marker; import java.io.IOException; import java.util.ArrayList; @@ -26,47 +29,46 @@ import fr.romanet.vj.apps.myrealestateagency.entities.Property; import fr.romanet.vj.apps.myrealestateagency.repository.MapsActivityRepository; import fr.romanet.vj.apps.myrealestateagency.repository.PropertyRepository; import fr.romanet.vj.apps.myrealestateagency.view.MapsActivity; +import fr.romanet.vj.apps.myrealestateagency.view.PropertiesDetailActivity; public class MapsActivityViewModel extends AndroidViewModel implements LifecycleObserver { -// private PropertyRepository propertyRepository; + + public MutableLiveData> markers_to_display = new MutableLiveData<>(); + private MapsActivityRepository mapsActivityRepository; + + private Application _application; public MapsActivityViewModel(@NonNull Application application) { super(application); this._application = application; -// propertyRepository = new PropertyRepository(application); } - public MutableLiveData> markers_to_display = new MutableLiveData<>(); - -// private PropertyRepository propertyRepository; - - private MapsActivityRepository mapsActivityRepository; @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) private void init_map() throws IOException { mapsActivityRepository = new MapsActivityRepository(); - -// LiveData> properties = propertyRepository.getAllProperties(); - - - -// List mapMarkers = new ArrayList(); List mapMarkers = mapsActivityRepository.get_all_map_markers_for_this_agency(this._application); -// List latLngs = null; - -// mapMarkers.add(new MapMarker(MapsActivityRepository.get_lat_long_from_address("Paris, France", MyApp.getContext()), "Paris", BitmapDescriptorFactory.HUE_BLUE)); -// mapMarkers.add(new MapMarker(MapsActivityRepository.get_lat_long_from_address("Villejuif, France", MyApp.getContext()), "Villejuif", BitmapDescriptorFactory.HUE_BLUE)); -// mapMarkers.add(new MapMarker(MapsActivityRepository.get_lat_long_from_address("Cachan, France", MyApp.getContext()), "Cachan", BitmapDescriptorFactory.HUE_BLUE)); -// mapMarkers.add(new MapMarker(MapsActivityRepository.get_lat_long_from_address("Massy, France", MyApp.getContext()), "Massy", BitmapDescriptorFactory.HUE_GREEN)); -// mapMarkers.add(new MapMarker(MapsActivityRepository.get_lat_long_from_address("Ivry, France", MyApp.getContext()), "Ivry", BitmapDescriptorFactory.HUE_RED)); - -// for (MapMarker mapMarker : mapMarkers){ -// latLngs.add(new LatLng(addr.getLatitude(), addr.getLongitude())); -// } - markers_to_display.postValue(mapMarkers); } + private Property get_one_property_by_id(Integer propertyId){ + Property property = mapsActivityRepository.get_one_property_by_id(_application, propertyId); + return property; + } + + public void intent_property_activity_from_marker(Marker marker){ + Intent intent1 = new Intent(MyApp.getContext(), PropertiesDetailActivity.class); + int propertyId = Integer.parseInt(marker.getTitle()); + Property property = get_one_property_by_id(propertyId); + + intent1.putExtra(PropertiesDetailActivity.PROPERTY_EXTRA, property); +// intent1.putExtra("markerProperty", property); + intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// Log.d("CAT", "-----------> PROP " + property.propertyStatue.statueSale); + MyApp.getContext().startActivity(intent1); + } + + }