Skip to content

Commit

Permalink
Merge branch 'release/2.6.1'
Browse files Browse the repository at this point in the history
  • Loading branch information
sgrimault committed May 24, 2023
2 parents b850a61 + 5a576b8 commit 455e18c
Show file tree
Hide file tree
Showing 10 changed files with 104 additions and 31 deletions.
42 changes: 39 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,41 @@
# Changelog

## [2.6.1](https://github.com/PnX-SI/gn_mobile_occtax/releases/tag/2.6.1) (2023-05-24, release)

### 🐛 Corrections

* Correction sur l'affichage des valeurs de nomenclature en doublon (#223).
* Prise en compte de la configuration par défaut de la périodicité de la synchronisation des données.
* Relance automatique de la synchronisation des données si la date de la dernière effectuée est trop
ancienne suite à un changement de configuration coté fichier de paramétrage.
* Corrections visuelles diverses, notamment sur l'écran d'accueil.

### ⚠️ Notes de version

* Code de version : 3210

## [2.6.1-rc1](https://github.com/PnX-SI/gn_mobile_occtax/releases/tag/2.6.1-rc1) (2023-05-16, pre-release)

### 🐛 Corrections

* Correction sur l'affichage des valeurs de nomenclature en doublon (#223).

### ⚠️ Notes de version

* Code de version : 3209

## [2.6.1-rc0](https://github.com/PnX-SI/gn_mobile_occtax/releases/tag/2.6.1-rc0) (2023-05-13, pre-release)

### 🐛 Corrections

* Prise en compte de la configuration par défaut de la périodicité de la synchronisation des données.
* Relance automatique de la synchronisation des données si la date de la dernière effectuée est trop
ancienne suite à un changement de configuration coté fichier de paramétrage.

### ⚠️ Notes de version

* Code de version : 3203

## [2.6.0](https://github.com/PnX-SI/gn_mobile_occtax/releases/tag/2.6.0) (2023-05-08, release)

### 🚀 Nouveautés
Expand All @@ -24,7 +60,7 @@
ne sont pas renseignés).
* La synchronisation des données est maintenant décoléré de la synchronisation des relevés (https://github.com/PnX-SI/gn_mobile_occtax/issues/133).
* La synchronisation des relevés se fait à la demande de l'utilisateur (https://github.com/PnX-SI/gn_mobile_occtax/issues/137).
* La synchronisation des données s'exécute mantenant dans un contexte transactionnel afin de
* La synchronisation des données s'exécute maintenant dans un contexte transactionnel afin de
toujours garantir une cohérence des données présentes localement.
* Refonte de l'écran d'accueil pour mettre en valeur les relevés en cours ou prêt à être
synchronisés. La partie paramétrage et synchronisation des données sont déportées dans le menu
Expand All @@ -39,7 +75,7 @@

* Code de version : 3200
* Depuis sa version 2.12.0, GeoNature permet de gérer le contenu de la table
`gn_commons.t_mobile_apps` directement dans le backoffice du module "Admin" de GeoNature (https://github.com/PnX-SI/gn_mobile_occtax/issues/214)
`gn_commons.t_mobile_apps` directement dans le back-office du module "Admin" de GeoNature (https://github.com/PnX-SI/gn_mobile_occtax/issues/214)
* Dans cette même version, les médias (incluant le dossier `mobile/` comprenant les fichiers APK et
le fichier `settings.json` d'Occtax-mobile) ont été déplacés du dossier `~/geonature/backend/static/`
à `~/geonature/backend/media/` (https://github.com/PnX-SI/gn_mobile_occtax/issues/214)
Expand Down Expand Up @@ -100,7 +136,7 @@

* La synchronisation des données est maintenant décoléré de la synchronisation des relevés (https://github.com/PnX-SI/gn_mobile_occtax/issues/133).
* La synchronisation des relevés se fait à la demande de l'utilisateur (https://github.com/PnX-SI/gn_mobile_occtax/issues/137).
* La synchronisation des données s'exécute mantenant dans un contexte transactionnel afin de
* La synchronisation des données s'exécute maintenant dans un contexte transactionnel afin de
toujours garantir une cohérence des données présentes localement.
* Refonte de l'écran d'accueil pour mettre en valeur les relevés en cours ou prêt à être
synchronisés. La partie paramétrage et synchronisation des données sont déportées dans le menu
Expand Down
4 changes: 2 additions & 2 deletions occtax/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ android {
applicationId "fr.geonature.occtax2"
minSdkVersion 26
targetSdkVersion 33
versionCode 3200
versionName "2.6.0"
versionCode 3210
versionName "2.6.1"
buildConfigField "String", "BUILD_DATE", "\"" + new Date().getTime() + "\""
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
archivesBaseName = project.name + "-" + versionName
Expand Down
4 changes: 3 additions & 1 deletion occtax/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@
android:name=".ui.home.HomeActivity"
android:exported="true"
android:launchMode="singleTask"
android:theme="@style/AppTheme.NoActionBar">
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"
tools:ignore="LockedOrientationActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import fr.geonature.occtax.features.nomenclature.domain.EditableNomenclatureType
import fr.geonature.occtax.features.nomenclature.usecase.GetEditableNomenclaturesUseCase
import fr.geonature.occtax.features.nomenclature.usecase.GetNomenclatureValuesByTypeAndTaxonomyUseCase
import fr.geonature.occtax.settings.PropertySettings
import org.tinylog.Logger
import javax.inject.Inject

/**
Expand All @@ -25,8 +26,7 @@ import javax.inject.Inject
class NomenclatureViewModel @Inject constructor(
private val getEditableNomenclaturesUseCase: GetEditableNomenclaturesUseCase,
private val getNomenclatureValuesByTypeAndTaxonomyUseCase: GetNomenclatureValuesByTypeAndTaxonomyUseCase
) :
BaseViewModel() {
) : BaseViewModel() {

private val _editableNomenclatures = MutableLiveData<List<EditableNomenclatureType>>()
val editableNomenclatures: LiveData<List<EditableNomenclatureType>> = _editableNomenclatures
Expand Down Expand Up @@ -66,6 +66,10 @@ class NomenclatureViewModel @Inject constructor(
mnemonic: String,
taxonomy: Taxonomy? = null
): LiveData<List<Nomenclature>> {
Logger.info {
"fetching nomenclature values from mnemonic '$mnemonic'${taxonomy?.let { " matching taxonomy ${it.kingdom}:${it.group}" }}..."
}

val nomenclatureValuesByTypeAndTaxonomy = MutableLiveData<List<Nomenclature>>()

getNomenclatureValuesByTypeAndTaxonomyUseCase(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,18 +64,18 @@ class DrawerMenuEntryView : ConstraintLayout {
}

fun setText1(@StringRes textResourceId: Int) {
setText1(if (textResourceId == 0) null else context.getString(textResourceId))
setText1(if (textResourceId == 0) null else context.getText(textResourceId))
}

fun setText1(title: String?) {
fun setText1(title: CharSequence?) {
textView1.text = title
}

fun setText2(@StringRes textResourceId: Int) {
setText2(if (textResourceId == 0) null else context.getString(textResourceId))
setText2(if (textResourceId == 0) null else context.getText(textResourceId))
}

fun setText2(text: String?) {
fun setText2(text: CharSequence?) {
textView2.setText(text)
textView2.visibility = if (text.isNullOrBlank()) GONE else VISIBLE
}
Expand Down
61 changes: 46 additions & 15 deletions occtax/src/main/java/fr/geonature/occtax/ui/home/HomeActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ import fr.geonature.commons.lifecycle.observeOnce
import fr.geonature.commons.lifecycle.observeUntil
import fr.geonature.commons.lifecycle.onFailure
import fr.geonature.commons.util.ThemeUtils.getErrorColor
import fr.geonature.commons.util.add
import fr.geonature.datasync.api.IGeoNatureAPIClient
import fr.geonature.datasync.api.model.AuthLogin
import fr.geonature.datasync.auth.AuthLoginViewModel
import fr.geonature.datasync.features.settings.presentation.ConfigureServerSettingsActivity
import fr.geonature.datasync.features.settings.presentation.ConfigureServerSettingsViewModel
Expand All @@ -57,6 +57,8 @@ import fr.geonature.occtax.ui.settings.PreferencesActivity
import org.tinylog.Logger
import java.io.File
import java.text.DateFormat
import java.time.Instant
import java.util.Calendar
import java.util.Date
import javax.inject.Inject

Expand Down Expand Up @@ -88,7 +90,6 @@ class HomeActivity : AppCompatActivity(),
private var progressSnackbar: Pair<Snackbar, CircularProgressIndicator>? = null

private var appSettings: AppSettings? = null
private var isLoggedIn: AuthLogin? = null

private lateinit var startSyncResultLauncher: ActivityResultLauncher<Intent>

Expand Down Expand Up @@ -196,7 +197,7 @@ class HomeActivity : AppCompatActivity(),
val dataSyncSettings = appSettings?.dataSyncSettings

if (dataSyncSettings == null || geoNatureAPIClient.getBaseUrls().geoNatureBaseUrl != dataSyncSettings.geoNatureServerUrl) {
configureServerSettingsViewModel.loadAppSettings(geoNatureAPIClient.getBaseUrls().geoNatureBaseUrl)
configureServerSettingsViewModel.loadAppSettings(geoNatureAPIClient.getBaseUrls().geoNatureBaseUrl)
} else {
dataSyncViewModel.startSync(
dataSyncSettings,
Expand Down Expand Up @@ -237,7 +238,6 @@ class HomeActivity : AppCompatActivity(),
vm.isLoggedIn.observe(
this@HomeActivity
) {
this@HomeActivity.isLoggedIn = it
loginLastnameTextView?.apply {
text = it?.user?.lastname
visibility = if (it == null) View.GONE else View.VISIBLE
Expand Down Expand Up @@ -301,6 +301,9 @@ class HomeActivity : AppCompatActivity(),
when (state) {
WorkInfo.State.RUNNING -> {
navMenuDataSync?.apply {
setText1(R.string.action_data_sync_in_progress)
setText2(syncMessage)

if (icon.animation == null) {
setIcon(R.drawable.ic_sync)
icon.startAnimation(
Expand All @@ -320,12 +323,14 @@ class HomeActivity : AppCompatActivity(),
}
}
}

WorkInfo.State.FAILED -> {
navMenuDataSync?.apply {
icon.clearAnimation()
setIcon(R.drawable.ic_sync_problem)
}
}

else -> {
navMenuDataSync?.apply {
icon.clearAnimation()
Expand All @@ -334,11 +339,6 @@ class HomeActivity : AppCompatActivity(),
}
}

navMenuDataSync?.apply {
setText1(R.string.action_data_sync_in_progress)
setText2(syncMessage)
}

if (it.serverStatus == ServerStatus.UNAUTHORIZED) {
Logger.info { "not connected (HTTP error code: 401), redirect to ${LoginActivity::class.java.name}" }

Expand All @@ -360,12 +360,6 @@ class HomeActivity : AppCompatActivity(),
private fun configureConfigureServerSettingsViewModel() {
with(configureServerSettingsViewModel) {
observe(dataSyncSettingLoaded) {
dataSyncViewModel.startSync(
it,
HomeActivity::class.java,
MainApplication.CHANNEL_DATA_SYNCHRONIZATION
)

loadAppSettings()
}
onFailure(
Expand Down Expand Up @@ -411,6 +405,35 @@ class HomeActivity : AppCompatActivity(),
HomeActivity::class.java,
MainApplication.CHANNEL_DATA_SYNCHRONIZATION
)

if (dataSyncViewModel.lastSynchronizedDate.value?.second == null) {
dataSyncViewModel.startSync(
dataSyncSettings,
HomeActivity::class.java,
MainApplication.CHANNEL_DATA_SYNCHRONIZATION
)

return@also
}

dataSyncViewModel.lastSynchronizedDate.value?.second?.also { lastDataSynchronization ->
if (
lastDataSynchronization.add(
Calendar.SECOND,
dataSyncSettings.dataSyncPeriodicity?.inWholeSeconds?.toInt()
?: 0
)
.before(Date.from(Instant.now()))
) {
Logger.info { "the last data synchronization seems to be old (done on $lastDataSynchronization), restarting data synchronization..." }

dataSyncViewModel.startSync(
dataSyncSettings,
HomeActivity::class.java,
MainApplication.CHANNEL_DATA_SYNCHRONIZATION
)
}
}
}
}
}
Expand All @@ -435,16 +458,19 @@ class HomeActivity : AppCompatActivity(),
?.setBackgroundTint(getErrorColor(this))
?.show()
}

is Failure.ServerFailure -> {
makeSnackbar(getString(fr.geonature.datasync.R.string.settings_server_error))
?.setBackgroundTint(getErrorColor(this))
?.show()
}

is PackageInfoNotFoundFromRemoteFailure -> {
makeSnackbar(getString(fr.geonature.datasync.R.string.settings_server_settings_not_found))
?.setBackgroundTint(getErrorColor(this))
?.show()
}

is DataSyncSettingsNotFoundFailure -> {
Logger.warn { "failed to load settings${if (failure.source.isNullOrBlank()) "" else " from source '${failure.source}'"}" }

Expand All @@ -459,6 +485,7 @@ class HomeActivity : AppCompatActivity(),
configureServerSettingsViewModel.loadAppSettings(geoNatureBaseUrl)
}
}

is DataSyncSettingsJsonParseFailure -> {
makeSnackbar(
getString(
Expand All @@ -468,10 +495,12 @@ class HomeActivity : AppCompatActivity(),
?.setBackgroundTint(getErrorColor(this))
?.show()
}

is PackageInfoNotFoundFailure -> {
// should never occur...
Logger.error { "this app '${packageName}' seems to be incompatible..." }
}

else -> {
makeSnackbar(getString(fr.geonature.datasync.R.string.error_settings_undefined))
?.setBackgroundTint(getErrorColor(this))
Expand Down Expand Up @@ -569,12 +598,14 @@ class HomeActivity : AppCompatActivity(),
WorkInfo.State.FAILED -> {
if (packageName == BuildConfig.APPLICATION_ID) progressSnackbar?.first?.dismiss()
}

WorkInfo.State.SUCCEEDED -> {
if (packageName == BuildConfig.APPLICATION_ID) progressSnackbar?.first?.dismiss()
apkFilePath?.run {
installApk(this)
}
}

else -> {
if (packageName == BuildConfig.APPLICATION_ID) {
progressSnackbar?.second?.also { circularProgressIndicator ->
Expand Down
2 changes: 1 addition & 1 deletion occtax/src/main/res/layout/view_drawer_menu_entry.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
android:layout_marginHorizontal="@dimen/padding_default"
android:duplicateParentState="true"
android:ellipsize="end"
android:singleLine="true"
android:maxLines="2"
android:textAppearance="?attr/textAppearanceListItem"
app:layout_constraintBottom_toBottomOf="@android:id/icon"
app:layout_constraintEnd_toEndOf="parent"
Expand Down
2 changes: 1 addition & 1 deletion occtax/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
<string name="no_data">Aucune donnée</string>

<string name="action_settings">Paramètres</string>
<string name="action_data_sync">Rafraîchir les données</string>
<string name="action_data_sync">Mettre à jour les données\n<font size="10"><i>(Nomenclatures, JDD, observateurs, taxons)</i></font></string>
<string name="action_data_sync_in_progress">Synchronisation en cours…</string>
<string name="action_input_sync">Envoyer</string>
<string name="action_input_sync_hint">Envoyer les relevés</string>
Expand Down
2 changes: 1 addition & 1 deletion occtax/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
<string name="no_data">No data</string>

<string name="action_settings">Settings</string>
<string name="action_data_sync">Synchronize local data</string>
<string name="action_data_sync">Update local data\n<font size="10"><i>(Nomenclatures, datasets, observers, taxa)</i></font></string>
<string name="action_data_sync_in_progress">Data synchronization in progress…</string>
<string name="action_input_sync">Send</string>
<string name="action_input_sync_hint">Synchronize inputs</string>
Expand Down

0 comments on commit 455e18c

Please sign in to comment.