diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro index 19d264243d..30dba117e1 100644 --- a/android/app/proguard-rules.pro +++ b/android/app/proguard-rules.pro @@ -28,3 +28,25 @@ # R8 crypts the source line numbers in all log messages. # https://github.com/organicmaps/organicmaps/issues/6559#issuecomment-1812039926 -dontoptimize + +# For some unknown reason we couldn't find out, requests are not working properly +# when the app is shrinked and/or minified, so we keep all of these things out from R8 effects. +-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation +-keep,allowobfuscation,allowshrinking interface retrofit2.Call +-keep,allowobfuscation,allowshrinking class retrofit2.Response + +-if interface * { @retrofit2.http.* public *** *(...); } +-keep,allowoptimization,allowshrinking,allowobfuscation class <3> + +-keep class app.tourism.data.remote.** { *; } + +-keep public class app.tourism.data.dto.** { + public void set*(***); + public *** get*(); + public protected private *; +} +-keep public class app.tourism.domain.models.** { + public void set*(***); + public *** get*(); + public protected private *; +} diff --git a/android/app/src/main/java/app/organicmaps/MwmActivity.java b/android/app/src/main/java/app/organicmaps/MwmActivity.java index 7882b73e00..5012a58fb4 100644 --- a/android/app/src/main/java/app/organicmaps/MwmActivity.java +++ b/android/app/src/main/java/app/organicmaps/MwmActivity.java @@ -124,6 +124,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static app.organicmaps.location.LocationState.FOLLOW; import static app.organicmaps.location.LocationState.FOLLOW_AND_ROTATE; import static app.organicmaps.location.LocationState.LOCATION_TAG; +import static app.tourism.ui.utils.ShowToastKt.showToast; import static app.tourism.utils.MapUtilsKt.isInsideTajikistan; public class MwmActivity extends BaseMwmFragmentActivity diff --git a/android/app/src/main/java/app/tourism/data/dto/CurrencyRates.kt b/android/app/src/main/java/app/tourism/data/dto/CurrencyRates.kt new file mode 100644 index 0000000000..7f50d7c4e0 --- /dev/null +++ b/android/app/src/main/java/app/tourism/data/dto/CurrencyRates.kt @@ -0,0 +1,11 @@ +package app.tourism.data.dto + +import app.tourism.data.db.entities.CurrencyRatesEntity +import app.tourism.domain.models.profile.CurrencyRates + +data class CurrencyRatesDataDto(val data: CurrencyRatesDto) { + fun toCurrencyRates() = CurrencyRates(data.usd, data.eur, data.rub) + fun toCurrencyRatesEntity() = CurrencyRatesEntity(1, data.usd, data.eur, data.rub) +} + +data class CurrencyRatesDto(val usd: Double, val eur: Double, val rub: Double) \ No newline at end of file diff --git a/android/app/src/main/java/app/tourism/data/dto/currency/CurrenciesList.java b/android/app/src/main/java/app/tourism/data/dto/currency/CurrenciesList.java deleted file mode 100644 index 54025fa75f..0000000000 --- a/android/app/src/main/java/app/tourism/data/dto/currency/CurrenciesList.java +++ /dev/null @@ -1,19 +0,0 @@ -package app.tourism.data.dto.currency; - -import org.simpleframework.xml.Attribute; -import org.simpleframework.xml.ElementList; -import org.simpleframework.xml.Root; - -import java.util.List; - -import app.tourism.domain.models.profile.CurrencyRates; - -@Root(name = "ValCurs") -public class CurrenciesList { - @Attribute(required = false, name = "Date") public String date; - @Attribute(required = false) public String name; - - @ElementList(name = "Valute", inline = true) - public List currencies; -} - diff --git a/android/app/src/main/java/app/tourism/data/dto/currency/Currency.java b/android/app/src/main/java/app/tourism/data/dto/currency/Currency.java deleted file mode 100644 index 381c9208a0..0000000000 --- a/android/app/src/main/java/app/tourism/data/dto/currency/Currency.java +++ /dev/null @@ -1,16 +0,0 @@ -package app.tourism.data.dto.currency; - -import org.simpleframework.xml.Attribute; -import org.simpleframework.xml.Element; -import org.simpleframework.xml.Root; - -@Root(name = "Valute") -public class Currency{ - @Attribute(required = false) public String ID; - - @Element(name = "CharCode") public String charCode; - @Element(name = "Nominal") public Integer nominal; - @Element(name = "Name") public String name; - @Element(name = "Value") public Double value; -} - diff --git a/android/app/src/main/java/app/tourism/data/remote/CurrencyApi.kt b/android/app/src/main/java/app/tourism/data/remote/CurrencyApi.kt index 415476e1ed..4fc4f2e2c4 100644 --- a/android/app/src/main/java/app/tourism/data/remote/CurrencyApi.kt +++ b/android/app/src/main/java/app/tourism/data/remote/CurrencyApi.kt @@ -1,25 +1,11 @@ package app.tourism.data.remote -import app.tourism.data.dto.currency.CurrenciesList -import app.tourism.domain.models.resource.Resource -import app.tourism.utils.getCurrentDate -import app.tourism.utils.getCurrentLocale -import com.google.gson.JsonParseException -import retrofit2.HttpException +import app.tourism.data.dto.CurrencyRatesDataDto import retrofit2.Response import retrofit2.http.GET -import retrofit2.http.Query -import java.io.IOException interface CurrencyApi { - @GET("en/kurs/export_xml.php") - suspend fun getCurrency( - @Query("date") date: String = getCurrentDate(), - @Query("export") export: String = "xmlout" - ): Response - - companion object { - const val BASE_URL = "http://nbt.tj/" - } + @GET("currency") + suspend fun getCurrency(): Response } diff --git a/android/app/src/main/java/app/tourism/data/repositories/CurrencyRepositoryImpl.kt b/android/app/src/main/java/app/tourism/data/repositories/CurrencyRepository.kt similarity index 53% rename from android/app/src/main/java/app/tourism/data/repositories/CurrencyRepositoryImpl.kt rename to android/app/src/main/java/app/tourism/data/repositories/CurrencyRepository.kt index 6e91656232..6a9ac64bdf 100644 --- a/android/app/src/main/java/app/tourism/data/repositories/CurrencyRepositoryImpl.kt +++ b/android/app/src/main/java/app/tourism/data/repositories/CurrencyRepository.kt @@ -2,14 +2,12 @@ package app.tourism.data.repositories import android.content.Context import app.tourism.data.db.Database -import app.tourism.data.dto.currency.CurrenciesList import app.tourism.data.remote.CurrencyApi import app.tourism.data.remote.handleGenericCall import app.tourism.domain.models.profile.CurrencyRates import app.tourism.domain.models.resource.Resource import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow -import kotlin.Double.Companion.NaN class CurrencyRepository( private val api: CurrencyApi, @@ -26,24 +24,10 @@ class CurrencyRepository( handleGenericCall( call = { api.getCurrency() }, mapper = { - val currencyRates = getCurrencyRatesFromXml(it) - db.currencyRatesDao.updateCurrencyRates(currencyRates.toCurrencyRatesEntity()) - currencyRates + db.currencyRatesDao.updateCurrencyRates(it.toCurrencyRatesEntity()) + it.toCurrencyRates() }, context ) } - - private fun getCurrencyRatesFromXml(it: CurrenciesList): CurrencyRates { - val currencies = it.currencies - fun findValueByCurrencyCode(code: String): Double { - return currencies.firstOrNull { it.charCode == code }?.value ?: NaN - } - - val usd = findValueByCurrencyCode("USD") - val eur = findValueByCurrencyCode("EUR") - val rub = findValueByCurrencyCode("RUB") - - return CurrencyRates(usd, eur, rub) - } -} \ No newline at end of file +} diff --git a/android/app/src/main/java/app/tourism/data/repositories/PlacesRepository.kt b/android/app/src/main/java/app/tourism/data/repositories/PlacesRepository.kt index 7a0f76d18f..dcd24457d7 100644 --- a/android/app/src/main/java/app/tourism/data/repositories/PlacesRepository.kt +++ b/android/app/src/main/java/app/tourism/data/repositories/PlacesRepository.kt @@ -44,9 +44,10 @@ class PlacesRepository( mapper = { data -> // get data val favorites = - if (favoritesResponse is Resource.Success) favoritesResponse.data?.data?.map { - it.toPlaceFull(true) - } else null + if (favoritesResponse is Resource.Success) + favoritesResponse.data?.data?.map { + it.toPlaceFull(true) + } else null val reviews = mutableListOf() diff --git a/android/app/src/main/java/app/tourism/di/NetworkModule.kt b/android/app/src/main/java/app/tourism/di/NetworkModule.kt index 3101dadf36..1d8efc4a5d 100644 --- a/android/app/src/main/java/app/tourism/di/NetworkModule.kt +++ b/android/app/src/main/java/app/tourism/di/NetworkModule.kt @@ -26,7 +26,7 @@ import javax.inject.Singleton object NetworkModule { @Provides @Singleton - fun provideApi(@Named(MAIN_OKHTTP_LABEL) okHttpClient: OkHttpClient): TourismApi { + fun provideApi(okHttpClient: OkHttpClient): TourismApi { return Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) @@ -37,8 +37,10 @@ object NetworkModule { @Provides @Singleton - @Named(MAIN_OKHTTP_LABEL) - fun provideHttpClient(@ApplicationContext context: Context, userPreferences: UserPreferences): OkHttpClient { + fun provideHttpClient( + @ApplicationContext context: Context, + userPreferences: UserPreferences + ): OkHttpClient { return OkHttpClient.Builder() .addInterceptor( HttpLoggingInterceptor() @@ -63,29 +65,13 @@ object NetworkModule { }.build() } - - @Provides - @Singleton - @Named(CURRENCY_OKHTTP_LABEL) - fun provideHttpClientForCurrencyRetrofit(): OkHttpClient { - val okHttpClient = OkHttpClient.Builder() - okHttpClient.readTimeout(1, TimeUnit.MINUTES) - okHttpClient.connectTimeout(1, TimeUnit.MINUTES) - .addInterceptor( - HttpLoggingInterceptor() - .setLevel(HttpLoggingInterceptor.Level.BODY) - ) - - return okHttpClient.build() - } - @Provides @Singleton @Named(CURRENCY_RETROFIT_LABEL) - fun provideCurrencyRetrofit(@Named(CURRENCY_OKHTTP_LABEL) client: OkHttpClient): Retrofit { + fun provideCurrencyRetrofit(client: OkHttpClient): Retrofit { return Retrofit.Builder() - .baseUrl(CurrencyApi.BASE_URL) - .addConverterFactory(SimpleXmlConverterFactory.create()) + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) .client(client) .build() } @@ -97,6 +83,4 @@ object NetworkModule { } } -const val MAIN_OKHTTP_LABEL = "main okhttp" const val CURRENCY_RETROFIT_LABEL = "currency retrofit" -const val CURRENCY_OKHTTP_LABEL = "currency okhttp" \ No newline at end of file diff --git a/android/app/src/main/java/app/tourism/ui/screens/main/profile/profile/ProfileScreen.kt b/android/app/src/main/java/app/tourism/ui/screens/main/profile/profile/ProfileScreen.kt index 4a3707b56f..f85b9dcae1 100644 --- a/android/app/src/main/java/app/tourism/ui/screens/main/profile/profile/ProfileScreen.kt +++ b/android/app/src/main/java/app/tourism/ui/screens/main/profile/profile/ProfileScreen.kt @@ -21,6 +21,7 @@ import androidx.compose.material3.SwitchDefaults import androidx.compose.material3.Text import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf diff --git a/android/app/src/main/res/values-ru/strings.xml b/android/app/src/main/res/values-ru/strings.xml index 4efb96309b..da5ad82d81 100644 --- a/android/app/src/main/res/values-ru/strings.xml +++ b/android/app/src/main/res/values-ru/strings.xml @@ -2229,4 +2229,5 @@ Отзыв будет публикован когда будете онлайн Отзыв был успешно опубликован Не удалось публиковать отзыв + Поажалуйста, не выходите за рамки Таджикистана diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index bafbc4218c..ce3ec82717 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -2250,7 +2250,7 @@ Try again Couldn\'t reach the server, please check connection No image - Tajikistan 🫠🌸☮ + Tajikistan Clear search field Top 30 places Sights @@ -2271,4 +2271,5 @@ Review will be published when you are online Review was successfully published Failed to publish review\n + Please, don\'t go out of Tajikistan