diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/SharedPrefs.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/SharedPrefs.java new file mode 100644 index 0000000..5550dc5 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/SharedPrefs.java @@ -0,0 +1,27 @@ +package fr.romanet.vj.apps.myrealestateagency; + +import android.content.SharedPreferences; + +import fr.romanet.vj.apps.myrealestateagency.entities.Agency; +import fr.romanet.vj.apps.myrealestateagency.entities.Agent; + +import static android.content.Context.MODE_PRIVATE; + +public class SharedPrefs { + + private SharedPreferences sharedPreferences; + + public int get_logged_agent_id(){ + sharedPreferences = MyApp.getContext().getSharedPreferences(Config.getSharedPreferences(), MODE_PRIVATE); + return sharedPreferences.getInt(Config.get_selected_agency_index(), -1); + } + + public void set_logged_agent_id(Agent agent){ + sharedPreferences = MyApp.getContext().getSharedPreferences(Config.getSharedPreferences(), MODE_PRIVATE); + sharedPreferences.edit() + .putInt(Config.get_selected_agency_index(), agent.agentId) + .apply(); + } + + +} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/adapter/AgentsAdapter.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/adapter/AgentsAdapter.java index 3a2cd93..ec55a0a 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/adapter/AgentsAdapter.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/adapter/AgentsAdapter.java @@ -15,6 +15,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder; import fr.romanet.vj.apps.myrealestateagency.Config; import fr.romanet.vj.apps.myrealestateagency.MyApp; +import fr.romanet.vj.apps.myrealestateagency.SharedPrefs; import fr.romanet.vj.apps.myrealestateagency.adapter.AgentsAdapter.AgentViewHolder; import fr.romanet.vj.apps.myrealestateagency.entities.Agent; import fr.romanet.vj.apps.myrealestateagency.R; @@ -33,7 +34,7 @@ public final class AgentsAdapter extends Adapter{ private final TextView agencyName; - SharedPreferences sharedPreferences; + SharedPrefs sharedPrefs; public AgentViewHolder(@NonNull View itemView) @@ -59,11 +60,9 @@ public final class AgentsAdapter extends Adapter{ intent.putExtra(PropertiesActivity.AGENCY_EXTRA, agent.getAgency()); itemView.getContext().startActivity(intent); - sharedPreferences = MyApp.getContext().getSharedPreferences(Config.getSharedPreferences(), MODE_PRIVATE); - sharedPreferences.edit() - .putInt(Config.get_selected_agency_index(), agent.agentId) - .apply(); - + // - Store agent into shared prefs for next time (app reopen) + sharedPrefs = new SharedPrefs(); + sharedPrefs.set_logged_agent_id(agent); } }); 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 56f61e7..d14662c 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 @@ -9,11 +9,16 @@ import androidx.room.Update; import java.util.List; +import fr.romanet.vj.apps.myrealestateagency.entities.Agency; import fr.romanet.vj.apps.myrealestateagency.entities.Agent; import fr.romanet.vj.apps.myrealestateagency.entities.Property; @Dao public interface PropertyDao { + + @Query("SELECT * FROM property WHERE belongs_agency_id = :agencyId") + List getPropertyFromAgencyList(int agencyId); + @Query("SELECT * FROM property") LiveData> getPropertyList(); 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 40a6aa3..850f4f1 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 @@ -1,18 +1,67 @@ package fr.romanet.vj.apps.myrealestateagency.repository; +import android.app.Application; import android.content.Context; import android.location.Address; import android.location.Geocoder; +import androidx.lifecycle.LiveData; + +import com.google.android.gms.maps.model.BitmapDescriptorFactory; +import com.google.android.gms.maps.model.LatLng; + import java.io.IOException; +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.SharedPrefs; +import fr.romanet.vj.apps.myrealestateagency.entities.Agency; +import fr.romanet.vj.apps.myrealestateagency.entities.Agent; +import fr.romanet.vj.apps.myrealestateagency.entities.Property; +import fr.romanet.vj.apps.myrealestateagency.view.MapsActivity; + public class MapsActivityRepository { + public SharedPrefs sharedPrefs; + public AgentRepository agentRepository; + public PropertyRepository propertyRepository; + public static Address get_lat_long_from_address(String address, Context context) throws IOException { Geocoder gc = new Geocoder(context); return gc.getFromLocationName(address, 1).get(0); } + public List get_all_map_markers_for_this_agency(Application application) throws IOException { + sharedPrefs = new SharedPrefs(); + propertyRepository = new PropertyRepository(application); + + int logged_agent_id; + Agency agency; + List propertiesFromAgency; + List mapMarkers = new ArrayList<>(); + + logged_agent_id = sharedPrefs.get_logged_agent_id(); + + Agent agent = agentRepository.getAgentById(logged_agent_id); + agent.setAgency(agentRepository.getAgency(agent)); + + agency = agent.getAgency(); + + propertiesFromAgency = propertyRepository.getPropertyFromAgencyList(agency); + + 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)); + }else{ + mapMarkers.add(new MapMarker(get_lat_long_from_address(property.address, MyApp.getContext()), property.description, BitmapDescriptorFactory.HUE_BLUE)); + } + + } + + return mapMarkers; + } + } \ 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 52e285b..8a7d2dd 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 @@ -8,9 +8,10 @@ import java.util.List; import fr.romanet.vj.apps.myrealestateagency.dao.PropertyDao; import fr.romanet.vj.apps.myrealestateagency.database.RealEstateAgencyDatabase; +import fr.romanet.vj.apps.myrealestateagency.entities.Agency; import fr.romanet.vj.apps.myrealestateagency.entities.Property; -public class PropertyRepository { +public class PropertyRepository { public PropertyDao propertyDao; public LiveData> allProperties; @@ -21,6 +22,8 @@ public class PropertyRepository { allProperties = propertyDao.getPropertyList(); } + public List getPropertyFromAgencyList(Agency agency){return propertyDao.getPropertyFromAgencyList(agency.agencyId); } + public LiveData> getAllProperties() { return allProperties; } 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 1a2d98e..8cd3b4c 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 @@ -103,9 +103,6 @@ public class MapsActivity extends FragmentActivity implements OnMapReadyCallback mMap.animateCamera(cu); - - -// mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(latlngbnd, 30)); } }); } diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/view/PropertiesDetailActivity.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/view/PropertiesDetailActivity.java index 1be1ea6..23fbe87 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/view/PropertiesDetailActivity.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/view/PropertiesDetailActivity.java @@ -124,4 +124,9 @@ public class PropertiesDetailActivity extends AppCompatActivity { description.setText("Description : " + property.description); } } + + public void goto_map(View view) { + Intent i = new Intent(PropertiesDetailActivity.this, MapsActivity.class); + PropertiesDetailActivity.this.startActivity(i); + } } diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/AgentsActivityViewModel.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/AgentsActivityViewModel.java index b8e9108..29910a3 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/AgentsActivityViewModel.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/AgentsActivityViewModel.java @@ -17,6 +17,7 @@ import java.util.List; import fr.romanet.vj.apps.myrealestateagency.Config; import fr.romanet.vj.apps.myrealestateagency.MyApp; +import fr.romanet.vj.apps.myrealestateagency.SharedPrefs; import fr.romanet.vj.apps.myrealestateagency.entities.Agency; import fr.romanet.vj.apps.myrealestateagency.entities.Agent; import fr.romanet.vj.apps.myrealestateagency.repository.AgentRepository; @@ -30,14 +31,16 @@ public class AgentsActivityViewModel extends AndroidViewModel implements Lifecyc public MutableLiveData selected_agency = new MutableLiveData<>(); public AgentRepository agentRepository; - SharedPreferences sharedPreferences; + public SharedPrefs sharedPrefs; public AgentsActivityViewModel(@NonNull Application application) { super(application); agentRepository = new AgentRepository(application); + sharedPrefs = new SharedPrefs(); agents = agentRepository.getAllAgents(); + } public void setAgents() @@ -54,8 +57,7 @@ public class AgentsActivityViewModel extends AndroidViewModel implements Lifecyc @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) private void restore_shared_prefs(){ - sharedPreferences = MyApp.getContext().getSharedPreferences(Config.getSharedPreferences(), MODE_PRIVATE); - int stored_agent_id = sharedPreferences.getInt(Config.get_selected_agency_index(), -1); + int stored_agent_id = sharedPrefs.get_logged_agent_id(); // selected_agency.postValue(stored_agent_id); if (stored_agent_id >= 0){ 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 7cebbee..948131d 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 @@ -7,6 +7,7 @@ import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleObserver; +import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.OnLifecycleEvent; @@ -20,7 +21,10 @@ import java.util.Map; import fr.romanet.vj.apps.myrealestateagency.MapMarker; import fr.romanet.vj.apps.myrealestateagency.MyApp; +import fr.romanet.vj.apps.myrealestateagency.entities.Agency; +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; public class MapsActivityViewModel extends AndroidViewModel implements LifecycleObserver { @@ -31,16 +35,27 @@ public class MapsActivityViewModel extends AndroidViewModel implements Lifecycle public MutableLiveData> markers_to_display = new MutableLiveData<>(); + private PropertyRepository propertyRepository; + + private MapsActivityRepository mapsActivityRepository; + @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) - private void init_map() throws IOException { - List mapMarkers = new ArrayList(); + private void init_map(Application application) throws IOException { + mapsActivityRepository = new MapsActivityRepository(); + +// LiveData> properties = propertyRepository.getAllProperties(); + + + +// List mapMarkers = new ArrayList(); + List mapMarkers = mapsActivityRepository.get_all_map_markers_for_this_agency(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)); +// 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())); diff --git a/app/src/main/res/layout/activity_details_property.xml b/app/src/main/res/layout/activity_details_property.xml index e793ab3..7d28767 100644 --- a/app/src/main/res/layout/activity_details_property.xml +++ b/app/src/main/res/layout/activity_details_property.xml @@ -180,6 +180,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Map" + android:onClick="goto_map" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.783"