From b35f86cd0ddc506463505fe36a439f00d6a51936 Mon Sep 17 00:00:00 2001 From: valentin Date: Thu, 24 Dec 2020 16:37:34 +0100 Subject: [PATCH] MVVM tests --- app/build.gradle | 2 + app/src/debug/res/values/google_maps_api.xml | 24 +++++++++ app/src/main/AndroidManifest.xml | 26 ++++++++- .../dao/AgencyWithPropertiesDao.java | 14 ++--- .../database/RealEstateAgencyDatabase.java | 4 +- .../entities/AgencyWithProperties.java | 18 +++---- .../repository/MainActivityRepository.java | 7 +++ .../repository/MapsActivityRepository.java | 15 ++++++ .../MyRealEstateAgencyRepository.java | 10 +++- .../{ => view}/MainActivity.java | 44 ++++++++++++--- .../myrealestateagency/view/MapsActivity.java | 53 +++++++++++++++++++ .../viewmodel/MainActivityViewModel.java | 40 ++++++++++++++ app/src/main/res/layout/activity_main.xml | 28 +++++++--- app/src/main/res/layout/activity_maps.xml | 9 ++++ app/src/main/res/values/strings.xml | 1 + .../release/res/values/google_maps_api.xml | 20 +++++++ build.gradle | 2 +- 17 files changed, 280 insertions(+), 37 deletions(-) create mode 100644 app/src/debug/res/values/google_maps_api.xml create mode 100644 app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/MainActivityRepository.java create mode 100644 app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/MapsActivityRepository.java rename app/src/main/java/fr/romanet/vj/apps/myrealestateagency/{Repository => repository}/MyRealEstateAgencyRepository.java (87%) rename app/src/main/java/fr/romanet/vj/apps/myrealestateagency/{ => view}/MainActivity.java (58%) create mode 100644 app/src/main/java/fr/romanet/vj/apps/myrealestateagency/view/MapsActivity.java create mode 100644 app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/MainActivityViewModel.java create mode 100644 app/src/main/res/layout/activity_maps.xml create mode 100644 app/src/release/res/values/google_maps_api.xml diff --git a/app/build.gradle b/app/build.gradle index 5e94f60..bc5c889 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -34,6 +34,8 @@ dependencies { implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation "androidx.room:room-runtime:2.2.5" + implementation 'com.google.android.gms:play-services-maps:17.0.0' + implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' annotationProcessor "androidx.room:room-compiler:2.2.5" testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' diff --git a/app/src/debug/res/values/google_maps_api.xml b/app/src/debug/res/values/google_maps_api.xml new file mode 100644 index 0000000..a7aa286 --- /dev/null +++ b/app/src/debug/res/values/google_maps_api.xml @@ -0,0 +1,24 @@ + + + AIzaSyAAltvI3LZ9wAOuygKQybgJN5tIQhPk_Hg + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b15e7d0..0fa014a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,14 @@ + + + + - + + + + + + diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgencyWithPropertiesDao.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgencyWithPropertiesDao.java index d0bb1b9..e64d168 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgencyWithPropertiesDao.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgencyWithPropertiesDao.java @@ -6,11 +6,11 @@ import androidx.room.Transaction; import java.util.List; -import fr.romanet.vj.apps.myrealestateagency.entities.AgencyWithProperties; +//import fr.romanet.vj.apps.myrealestateagency.entities.AgencyWithProperties; -@Dao -public interface AgencyWithPropertiesDao { - @Transaction - @Query("SELECT * FROM agency") - List getAgenciesAndProperties(); -} +//@Dao +//public interface AgencyWithPropertiesDao { +// @Transaction +// @Query("SELECT * FROM agency") +// List getAgenciesAndProperties(); +//} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/database/RealEstateAgencyDatabase.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/database/RealEstateAgencyDatabase.java index 1a56156..5f822cf 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/database/RealEstateAgencyDatabase.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/database/RealEstateAgencyDatabase.java @@ -9,7 +9,7 @@ import androidx.room.TypeConverters; import fr.romanet.vj.apps.myrealestateagency.dao.AgencyDao; import fr.romanet.vj.apps.myrealestateagency.dao.AgencyWithAgentsDao; -import fr.romanet.vj.apps.myrealestateagency.dao.AgencyWithPropertiesDao; +//import fr.romanet.vj.apps.myrealestateagency.dao.AgencyWithPropertiesDao; import fr.romanet.vj.apps.myrealestateagency.dao.PropertyDao; import fr.romanet.vj.apps.myrealestateagency.entities.Agency; import fr.romanet.vj.apps.myrealestateagency.entities.Agent; @@ -24,6 +24,6 @@ public abstract class RealEstateAgencyDatabase extends RoomDatabase { public abstract AgencyDao agencyDao(); public abstract PropertyDao propertyDao(); public abstract AgencyWithAgentsDao agencyWithAgentsDao(); - public abstract AgencyWithPropertiesDao agencyWithPropertiesDaoDao(); +// public abstract AgencyWithPropertiesDao agencyWithPropertiesDaoDao(); } diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/AgencyWithProperties.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/AgencyWithProperties.java index 91cd30c..b8eec44 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/AgencyWithProperties.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/AgencyWithProperties.java @@ -1,15 +1,15 @@ -package fr.romanet.vj.apps.myrealestateagency.entities; + package fr.romanet.vj.apps.myrealestateagency.entities; import androidx.room.Embedded; import androidx.room.Relation; import java.util.List; -public class AgencyWithProperties { - public int agency_id; - @Relation( - parentColumn = "agency_id", - entityColumn = "belongs_agency_id" - ) - public List agents; -} +//public class AgencyWithProperties { +// public int agency_id; +// @Relation( +// parentColumn = "agency_id", +// entityColumn = "belongs_agency_id" +// ) +// public List agents; +//} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/MainActivityRepository.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/MainActivityRepository.java new file mode 100644 index 0000000..8f20d29 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/MainActivityRepository.java @@ -0,0 +1,7 @@ +package fr.romanet.vj.apps.myrealestateagency.repository; + +import androidx.lifecycle.LifecycleObserver; + +public class MainActivityRepository implements LifecycleObserver { + +} 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 new file mode 100644 index 0000000..fe2ee1b --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/MapsActivityRepository.java @@ -0,0 +1,15 @@ +package fr.romanet.vj.apps.myrealestateagency.repository; + +import android.content.Context; +import android.location.Address; +import android.location.Geocoder; + +import java.io.IOException; +import java.util.List; + +public class MapsActivityRepository { + public List
get_lat_long_from_address(String address, Context context) throws IOException { + Geocoder gc = new Geocoder(context); + return gc.getFromLocationName(address, 1); + } +} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/Repository/MyRealEstateAgencyRepository.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/MyRealEstateAgencyRepository.java similarity index 87% rename from app/src/main/java/fr/romanet/vj/apps/myrealestateagency/Repository/MyRealEstateAgencyRepository.java rename to app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/MyRealEstateAgencyRepository.java index afbecab..163f89f 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/Repository/MyRealEstateAgencyRepository.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/MyRealEstateAgencyRepository.java @@ -1,9 +1,14 @@ -package fr.romanet.vj.apps.myrealestateagency.Repository; +package fr.romanet.vj.apps.myrealestateagency.repository; import android.content.Context; +import android.location.Address; +import android.location.Geocoder; import androidx.room.Room; +import java.io.IOException; +import java.util.List; + import fr.romanet.vj.apps.myrealestateagency.database.RealEstateAgencyDatabase; import fr.romanet.vj.apps.myrealestateagency.entities.Agency; import fr.romanet.vj.apps.myrealestateagency.entities.Agent; @@ -36,4 +41,7 @@ public final class MyRealEstateAgencyRepository { public void addAgency(Agency agency){realEstateAgencyDatabaseDatabase.agencyDao().insertAgency(agency);} public void addAgent(Agent agent){realEstateAgencyDatabaseDatabase.agentDao().insertAgent(agent);} + + + } diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/MainActivity.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/view/MainActivity.java similarity index 58% rename from app/src/main/java/fr/romanet/vj/apps/myrealestateagency/MainActivity.java rename to app/src/main/java/fr/romanet/vj/apps/myrealestateagency/view/MainActivity.java index 146904f..2705ef0 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/MainActivity.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/view/MainActivity.java @@ -1,28 +1,43 @@ -package fr.romanet.vj.apps.myrealestateagency; +package fr.romanet.vj.apps.myrealestateagency.view; import androidx.appcompat.app.AppCompatActivity; -import android.util.Log; +import androidx.lifecycle.ViewModelProvider; + +import android.content.Intent; import android.view.View; -import java.util.ArrayList; -import java.util.List; -import android.os.AsyncTask; import android.os.Bundle; +import android.widget.TextView; -import fr.romanet.vj.apps.myrealestateagency.Repository.MyRealEstateAgencyRepository; -import fr.romanet.vj.apps.myrealestateagency.database.RealEstateAgencyDatabase; +import fr.romanet.vj.apps.myrealestateagency.R; +import fr.romanet.vj.apps.myrealestateagency.repository.MyRealEstateAgencyRepository; import fr.romanet.vj.apps.myrealestateagency.entities.Agency; -import fr.romanet.vj.apps.myrealestateagency.entities.AgencyWithAgents; import fr.romanet.vj.apps.myrealestateagency.entities.Agent; +import fr.romanet.vj.apps.myrealestateagency.viewmodel.MainActivityViewModel; public class MainActivity extends AppCompatActivity { private static final String TAG = "MyActivity"; + // - Init ViewModel + MainActivityViewModel mainActivityViewModel; + + // - Init widgets + private TextView tv1; + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + + // - Define widget + tv1 = (TextView) findViewById(R.id.tv1); + + // - Link the ViewModel + mainActivityViewModel = new ViewModelProvider(this).get(MainActivityViewModel.class); + getLifecycle().addObserver(mainActivityViewModel); + observe_counter(); } public void insertSingleTodo(View view) { @@ -45,4 +60,17 @@ public class MainActivity extends AppCompatActivity { String query = "SELECT agency_id FROM agency INNER JOIN agent ON agency.agency_id = agent.agent_id WHERE agency_name =" + "AgenceOFParis" + "GROUP BY agency_name"; String query1 = "SELECT agency_id FROM agent INNER JOIN agency ON agency.agency_id = agent.agent_id WHERE agency_name =" + "AgenceOFParis" + "GROUP BY agency_name"; } + + public void BTN_go_to_map(View view){ + Intent i = new Intent(MainActivity.this, MapsActivity.class); + MainActivity.this.startActivity(i); + } + + public void observe_counter(){ + mainActivityViewModel.counter.observe(this, counter -> + { + tv1.setText(counter.toString()); + }); + } + } \ No newline at end of file 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 new file mode 100644 index 0000000..1a3d523 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/view/MapsActivity.java @@ -0,0 +1,53 @@ +package fr.romanet.vj.apps.myrealestateagency.view; + +import androidx.fragment.app.FragmentActivity; + +import android.os.Bundle; + +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.MarkerOptions; + +import java.util.List; + +import fr.romanet.vj.apps.myrealestateagency.R; +import fr.romanet.vj.apps.myrealestateagency.repository.MapsActivityRepository; + +public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { + + private GoogleMap mMap; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_maps); + // 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); + } + + /** + * 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) { + mMap = googleMap; + + // Add a marker in Sydney and move the camera + LatLng sydney = new LatLng(-34, 151); +// mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); + mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); + mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); +// List ll = MapsActivityRepository.get + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/MainActivityViewModel.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/MainActivityViewModel.java new file mode 100644 index 0000000..b829646 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/MainActivityViewModel.java @@ -0,0 +1,40 @@ +package fr.romanet.vj.apps.myrealestateagency.viewmodel; + +import android.os.Handler; +import android.os.SystemClock; + +import androidx.lifecycle.Lifecycle; +import androidx.lifecycle.LifecycleObserver; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.OnLifecycleEvent; +import androidx.lifecycle.ViewModel; + +import fr.romanet.vj.apps.myrealestateagency.view.MainActivity; + +public final class MainActivityViewModel extends ViewModel implements LifecycleObserver { + + public enum LoadingState + { + Loading, Loaded + } + + public MutableLiveData loadingState = new MutableLiveData<>(); + public MutableLiveData counter = new MutableLiveData<>(); + + @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) + private void start_counter_on_activity_start(){ + counter.postValue(0); + for (int i = 0; i<10; i++){ + new Handler().postDelayed(() -> + { + counter.postValue(15); + }, i*1000); +// counter.postValue(i); +// SystemClock.sleep(1000); + } + + + } + + +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 2c36633..ad335c2 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -4,28 +4,40 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".MainActivity"> + tools:context=".view.MainActivity"> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.3" />