diff --git a/app/build.gradle b/app/build.gradle index 1420956..269fad7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -44,5 +44,8 @@ dependencies { testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + + implementation 'com.squareup.retrofit2:retrofit:2.9.0' + implementation 'com.squareup.retrofit2:converter-gson:2.9.0' } diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/DollarCurrencyObj.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/DollarCurrencyObj.java new file mode 100644 index 0000000..d4447e6 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/DollarCurrencyObj.java @@ -0,0 +1,34 @@ +package fr.romanet.vj.apps.myrealestateagency; + +import com.google.gson.annotations.SerializedName; + +import java.io.Serializable; + +public class DollarCurrencyObj implements Serializable { + + @SerializedName("rates") + private DollarCurrencyRateObj dollarCurrencyRateObj; + @SerializedName("date") + private String fetchDate; + + public DollarCurrencyObj(DollarCurrencyRateObj dollarCurrencyRateObj, String fetchDate) { + this.dollarCurrencyRateObj = dollarCurrencyRateObj; + this.fetchDate = fetchDate; + } + + public DollarCurrencyRateObj getDollarCurrencyRateObj() { + return dollarCurrencyRateObj; + } + + public void setDollarCurrencyRateObj(DollarCurrencyRateObj dollarCurrencyRateObj) { + this.dollarCurrencyRateObj = dollarCurrencyRateObj; + } + + public String getFetchDate() { + return fetchDate; + } + + public void setFetchDate(String fetchDate) { + this.fetchDate = fetchDate; + } +} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/DollarCurrencyRateObj.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/DollarCurrencyRateObj.java new file mode 100644 index 0000000..9a6b789 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/DollarCurrencyRateObj.java @@ -0,0 +1,23 @@ +package fr.romanet.vj.apps.myrealestateagency; + +import com.google.gson.annotations.SerializedName; + +import java.io.Serializable; + +public class DollarCurrencyRateObj implements Serializable { + + @SerializedName("USD") + double value; + + public DollarCurrencyRateObj(double value) { + this.value = value; + } + + public double getValue() { + return value; + } + + public void setValue(double value) { + this.value = value; + } +} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/DollarCurrencyDao.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/DollarCurrencyDao.java index 3040491..fe578a4 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/DollarCurrencyDao.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/DollarCurrencyDao.java @@ -3,6 +3,8 @@ package fr.romanet.vj.apps.myrealestateagency.dao; import androidx.room.Dao; import androidx.room.Query; +import java.text.DateFormat; +import java.util.Date; import java.util.List; import fr.romanet.vj.apps.myrealestateagency.entities.DollarCurrency; @@ -12,4 +14,7 @@ public interface DollarCurrencyDao { @Query("SELECT * FROM dollar") List getDollarCurrencyList(); + +// @Query("UPDATE dollar SET value = :value WHERE fetch_date = :fetchDate") +// void updateDollarRate(double value, Date fetchDate); } 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 1feb352..5cbeb61 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 @@ -22,7 +22,7 @@ import fr.romanet.vj.apps.myrealestateagency.dao.AgentDao; import fr.romanet.vj.apps.myrealestateagency.entities.DollarCurrency; import fr.romanet.vj.apps.myrealestateagency.entities.Property; -@Database(entities = {Agency.class, Agent.class, Property.class, DollarCurrency.class}, version = 1, exportSchema = false) +@Database(entities = {Agency.class, Agent.class, Property.class, DollarCurrency.class}, version = 2, exportSchema = false) @TypeConverters({Property.Converters.class}) public abstract class RealEstateAgencyDatabase extends RoomDatabase { diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/DollarCurrency.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/DollarCurrency.java index 3eb174a..2d64a1e 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/DollarCurrency.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/DollarCurrency.java @@ -6,11 +6,15 @@ import androidx.room.Entity; import androidx.room.Index; import androidx.room.PrimaryKey; +import com.google.gson.annotations.SerializedName; + +import java.io.Serializable; import java.sql.Date; +import java.time.LocalDate; @Entity(tableName = "dollar", primaryKeys = {"value", "fetch_date"}) -public class DollarCurrency { +public class DollarCurrency implements Serializable { @NonNull @ColumnInfo(name = "value") @@ -18,9 +22,9 @@ public class DollarCurrency { @NonNull @ColumnInfo(name = "fetch_date") - private Date fetchDate; + private String fetchDate; - public DollarCurrency(@NonNull double value, @NonNull Date fetchDate) + public DollarCurrency(@NonNull double value, @NonNull String fetchDate) { this.value = value; this.fetchDate = fetchDate; @@ -36,12 +40,12 @@ public class DollarCurrency { this.value = value; } - public Date getFetchDate() + public String getFetchDate() { return fetchDate; } - public void setFetchDate(Date fetchDate) + public void setFetchDate(String fetchDate) { this.fetchDate = fetchDate; } diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/Rate.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/Rate.java new file mode 100644 index 0000000..fa0c3ef --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/Rate.java @@ -0,0 +1,21 @@ +package fr.romanet.vj.apps.myrealestateagency.entities; + +import com.google.gson.annotations.SerializedName; + +public class Rate { + + @SerializedName("USD") + private String value; + + public Rate(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/network/JsonApiInterface.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/network/JsonApiInterface.java new file mode 100644 index 0000000..0cb2e10 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/network/JsonApiInterface.java @@ -0,0 +1,13 @@ +package fr.romanet.vj.apps.myrealestateagency.network; + +import fr.romanet.vj.apps.myrealestateagency.DollarCurrencyObj; +import fr.romanet.vj.apps.myrealestateagency.entities.DollarCurrency; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface JsonApiInterface { + + @GET("latest") + Call getDollarRate(@Query("symbols") String symbols); +} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/DollarCurrencyRepository.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/DollarCurrencyRepository.java new file mode 100644 index 0000000..3e42adc --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/repository/DollarCurrencyRepository.java @@ -0,0 +1,28 @@ +package fr.romanet.vj.apps.myrealestateagency.repository; + +import android.app.Application; + +import java.util.Date; + +import fr.romanet.vj.apps.myrealestateagency.dao.DollarCurrencyDao; +import fr.romanet.vj.apps.myrealestateagency.database.RealEstateAgencyDatabase; +import fr.romanet.vj.apps.myrealestateagency.entities.DollarCurrency; + +public class DollarCurrencyRepository { + private DollarCurrencyDao dollarCurrencyDao; + + public DollarCurrencyRepository(Application application) { + RealEstateAgencyDatabase realEstateAgencyDatabase = RealEstateAgencyDatabase.getInstance(application); + dollarCurrencyDao = realEstateAgencyDatabase.dollarCurrencyDao(); + } + + public DollarCurrency get_dollar_currency_rate() + { + return dollarCurrencyDao.getDollarCurrencyList().get(0); + } + +// public void update_dollar_rate(Double value, Date fetch_date){ +// dollarCurrencyDao.updateDollarRate(value, fetch_date); +// } + +} 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 88e508b..937f515 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 @@ -1,20 +1,29 @@ package fr.romanet.vj.apps.myrealestateagency.repository; import android.app.Application; +import android.util.Log; import androidx.lifecycle.LiveData; import java.util.List; +import fr.romanet.vj.apps.myrealestateagency.DollarCurrencyObj; 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; +import fr.romanet.vj.apps.myrealestateagency.network.JsonApiInterface; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; public class PropertyRepository { public PropertyDao propertyDao; public LiveData> allProperties; + private double dollar_rate; public PropertyRepository(Application application) { RealEstateAgencyDatabase realEstateAgencyDatabase = RealEstateAgencyDatabase.getInstance(application); @@ -22,6 +31,50 @@ public class PropertyRepository { allProperties = propertyDao.getPropertyList(); } + public double get_dollar_rate(){ + + // - Answer + dollar_rate = 1; + Log.d("CAT", "---------> Call..."); + + + // - Build Retrofit API tool + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("https://api.exchangeratesapi.io/") + .addConverterFactory(GsonConverterFactory.create()) + .build(); + + JsonApiInterface jsonApiInterface = retrofit.create(JsonApiInterface.class); +// Call call = jsonApiInterface.getDollarRate("USD"); + Call call = jsonApiInterface.getDollarRate("USD"); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(! response.isSuccessful()){ + Log.d("CAT", "---------> RESP[unsuc]:" + String.valueOf(response.code())); + dollar_rate = -1; + return; + } + + + Log.d("CAT", "---------> RESP ALL:" + response.toString()); + DollarCurrencyObj dollarCurrencyObj = response.body(); + Log.d("CAT", "---------> RESP:" + dollarCurrencyObj.getDollarCurrencyRateObj().getValue() + " | " + String.valueOf(dollarCurrencyObj.getFetchDate())); + dollar_rate = dollarCurrencyObj.getDollarCurrencyRateObj().getValue(); + } + + @Override + public void onFailure(Call call, Throwable t) { + Log.d("CAT", "---------> FAILED:" + String.valueOf(t)); + dollar_rate = -1; + return; + } + }); + + Log.d("CAT", "---------> Call...END"); + return dollar_rate; + } + public Property getOnePropertyById(int propertyId){return propertyDao.getOnePropertyById(propertyId);} 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 23fbe87..97ecad5 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 @@ -129,4 +129,10 @@ public class PropertiesDetailActivity extends AppCompatActivity { Intent i = new Intent(PropertiesDetailActivity.this, MapsActivity.class); PropertiesDetailActivity.this.startActivity(i); } + + public void convert_currency(View view){ + double price_value = viewModel.convert_currency(property); + price.setText("RRPrice : " + (new DecimalFormat("##.##").format(price_value))); +// price.setText("RRPrice : " + (new DecimalFormat("##.##").format(1.1))); + } } diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/PropertiesDetailActivityViewModel.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/PropertiesDetailActivityViewModel.java index 6fa35d1..3bb5a59 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/PropertiesDetailActivityViewModel.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/viewmodel/PropertiesDetailActivityViewModel.java @@ -1,7 +1,10 @@ package fr.romanet.vj.apps.myrealestateagency.viewmodel; +import android.util.Log; + import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.SavedStateHandle; +import androidx.lifecycle.Transformations; import androidx.lifecycle.ViewModel; import fr.romanet.vj.apps.myrealestateagency.MyApp; @@ -13,15 +16,34 @@ public class PropertiesDetailActivityViewModel extends ViewModel { public MutableLiveData property = new MutableLiveData<>(); private PropertyRepository propertyRepository; + private Boolean current_currency_is_eur; + public PropertiesDetailActivityViewModel(SavedStateHandle savedStateHandle) { final Property propertyExtra = savedStateHandle.get(PropertiesDetailActivity.PROPERTY_EXTRA); property.postValue(propertyExtra); propertyRepository = new PropertyRepository(MyApp.getInstance()); + current_currency_is_eur = true; } public void deleteProperty() { propertyRepository.deleteProperty(property.getValue()); } + + + public double convert_currency(Property property){ + + if(current_currency_is_eur){ + double dollar_rate = propertyRepository.get_dollar_rate(); + double usd_price = property.propertyStatue.price * dollar_rate; + current_currency_is_eur = false; + Log.d("CAT", "----------> Convert was EUR (dollar rate:" + String.valueOf(dollar_rate) + ")"); + return usd_price; + }else{ + current_currency_is_eur = true; + Log.d("CAT", "----------> Convert was USD"); + return property.propertyStatue.price; + } + } } diff --git a/app/src/main/res/layout/activity_details_property.xml b/app/src/main/res/layout/activity_details_property.xml index 8930eac..7f9cd83 100644 --- a/app/src/main/res/layout/activity_details_property.xml +++ b/app/src/main/res/layout/activity_details_property.xml @@ -153,6 +153,7 @@ android:layout_width="112dp" android:layout_height="42dp" android:text="Convert" + android:onClick="convert_currency" app:layout_constraintBottom_toTopOf="@+id/detailsPropertySurface" app:layout_constraintEnd_toEndOf="@+id/detailsPropertyNumberOfRooms" app:layout_constraintHorizontal_bias="0.355"