Coder Social home page Coder Social logo

gn_mobile_core's Introduction

gn_mobile_core's People

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gn_mobile_core's Issues

Authentification impossible dans Sync 1.2.0

Bonjour,
je suis en train de tester la version 1.2.0 (avec un geonature 2.6.2) et sur la majorité des appareils, j'ai une impossibilité de connexion.
Le login semble réussir, Sync renvoie "Authentification réussie" mais une seconde après il retourne à l'écran de login avec le message "Non connecté"
Ce qui est étrange c'est que sur certains appareils, l'authentification marche à chaque fois, sur d'autres jamais et sur un petit nombre, c'est aléatoire
Voici le log obtenu et une capture d'écran du comportement
log_sync.txt

erreur_sync.mp4

settings_sync.json - Clarifier paramètres

Pour clarifier les paramètres, je propose de les renommer comme cela, en cohérence avec GeoNature :

  • application_id > uh_application_id
  • users_menu_id > observers_list_id
  • taxref_list_id > taxon_list_id

gn_mobile_core - Définition du projet

Ce dépôt accueillera l'application de synchronisation mobile de GeoNature.
Il a été acté qu'en version 2, on séparerait de manière claire l'application de synchronisation des applications mobiles.

L'application sera composé d'une application desktop de synchronisation et d'une WEB API permettant de mettre à disposition des ressources aux mobiles.
L'application de synchronisation assurera:

  • la mise a disposition et synchronisation des données du coeur de GeoNature (nomenclatures, taxons, utilisateurs) nécessaire au fonctionnements des différentes appli mobile, sous format sqllite.

La web-api respectera le format de "module geonature" (https://geonature.readthedocs.io/fr/latest/development.html#developper-et-installer-un-gn-module), et pourra s'installer via la commande geonature install_gn_module <synchro_mobile>

Les routes spécifiques à chaque module (POST notamment), utiliseront les API déjà écrites dans le module. Si d'autres routes sont nécessaires, elle seront écrites au même endroit. Dans le cas d'occtax, ici: https://github.com/PnX-SI/GeoNature/blob/master/contrib/occtax/backend/blueprint.py.

Voir complément ci-dessous...

Synchro et problème de mise à jour des données

Je fais pointer l'application sur une liste composée de 500.000 taxons, ils se synchronisent sur l'appareil.
Ensuite je change le fichier de configuration de l'application pour pointer sur une liste plus réduite de 9000 taxons.
Lors de la synchronisation il indique bien qu'il synchronise les 9000 taxons, mais sur l'étape de la saisie de taxon d'Occtax, il m'affiche toujours les 500.000 taxons.
Problème de mise à jour ? De suppression des taxons qui ne devraient plus être proposés ?

Problème sur la remontée des taxons

En faisant des tests plus approfondis, j'ai l'impression que quelque chose coince dans la synchronisation de la liste de noms de taxons.

Dans taxhub, ma liste (id=500) contient 5215 noms, comme vu ici
http://5.196.209.136/taxhub/#!/listes/500
En BDD, dans la vue v_taxef_all_listes, j'ai bien aussi 5215 noms pour la liste 500

Quand je synchronise avec Sync, il me dit qu'il a synchronisé 7994 taxons
Quand j'ouvre Occtax sur le mobile il trouve 4050 taxons et il en manque (je ne trouve pas par exemple le Lagopède alpin, cd_nom=2951)

J'ai examiné ce que remonte la route http://5.196.209.136/taxhub/api/taxref/allnamebylist/500?limit=10000
Cette route remonte 9537 objets
Le lagopède n'y est pas et j'ai beaucoup de doublons. Ce ne sont pas des doublons parfaits, j'ai l'impression qu'il y a une fois le taxon avec un search_name = "nom_vern = nom_valide - cd_nom" et une fois avec search_name = "lb_nom = nom_valide - cd_nom"

Par exemple

{
    "cd_nom": 118158,
    "search_name": "Rosa elliptica =  <i> Rosa elliptica Tausch, 1819</i> - [ES - 118158]",
    "cd_ref": 118158,
    "nom_valide": "Rosa elliptica Tausch, 1819",
    "lb_nom": "Rosa elliptica",
    "regne": "Plantae",
    "group2_inpn": "Angiospermes",
    "id_liste": 500
  },
  {
    "cd_nom": 118158,
    "search_name": "Rosier à folioles elliptiques =  <i> Rosa elliptica Tausch, 1819</i> - [ES - 118158]",
    "cd_ref": 118158,
    "nom_valide": "Rosa elliptica Tausch, 1819",
    "lb_nom": "Rosa elliptica",
    "regne": "Plantae",
    "group2_inpn": "Angiospermes",
    "id_liste": 500
  }

Dans occtax mobile, si je cherche pour cet exemple Rosa elliptica, il ne me propose bien qu'un taxon Rosier à folioles elliptiques = Rosa elliptica Tausch, 1819 - [ES - 118158]

Support Android 11 (API 30)

L'application de synchronisation n'est pas compatible avec la dernière version d'Android (11, API 30), notamment sur la synchronisation des données de paramétrage des applications ainsi que de la mise à jour des applications. La permission WRITE_EXTERNAL_STORAGE a été dépréciée au profit des nouvelles contraintes pour accéder aux données extérieures à l'application ("Scoped Storage").

  • La gestion de la mise à jour des données de paramétrages des applications devra être revue.
  • Le module de mise à jour des applications devra être revue.

Problèmes authentifications

Bonjour, un retour après quelques tests :

  • La connexion a une instance de geonature sans domaine (ip seulement) est impossible : sync ne propose pas à l'utilisateur de "se connecter" : le bouton est grisé
  • La connexion à une instance avec un domaine non certifié (http) est possible pour l'utilisateur, mais sync n'arrive pas à lister les applications compatibles.
  • Une fois l'instance sur un domaine certifié, connexion possible mais pour le moment, récupération impossible des datasets (en train de creuser pour voir si ca vient de geonature coté serveur ou du mobile).

Tout ça sera à revoir lors de la refonte vers l'application mobile v2 pour être moins bloquant.

Remontée des couleurs de taxons (Sync 0.3)

Je viens de tester Sync et Occtax sur un nouveau serveur de test à jour des nouvelles routes
J'ai installé les applications mobiles.
Je n'ai plus aucune remontée pour les couleurs de taxons dans Occtax.
Comment est-ce possible de le tester?

Filtrer les données les couleurs des taxons

Actuellement on interroge la route geonature/api/synthese/color_taxon pour récupérer les infos sur les couleurs des taxons dans chaque unité géographique. Exemple : http://demo.geonature.fr/geonature/api/synthese/color_taxon

Cette route est filtrable par type de zonage (https://github.com/PnX-SI/GeoNature/blob/master/backend/geonature/core/gn_synthese/routes.py#L776). Et en effet les unités géographiques ne concernent qu'un zonage parmi ceux génériques du ref_geo de GeoNature (COM, M10, M5, M1, DEP...) ou un zonage ajouté (UG par exemple).

Il est donc important de pouvoir filtrer la route sur un seul type. Par exemple : http://demo.geonature.fr/geonature/api/synthese/color_taxon?code_area_type=M10. Pour cela on utilise le code du type de zonage (M10 dans cet exemple).

Ajouter un paramètre applicatif pour pouvoir passer un code_area_type pour filtrer la route.

Configuration périodicité des synchronisations

Nous avons les paramètres suivants dans settings.json

{
  [...]
  "sync_periodicity_data_essential": "15m",
  "sync_periodicity_data":"30m"
}

Et il y a quelque chose qui m'échappe. La sychronisation a été réalisée à 9h58. Suite à cette synchronisation j'ai éteint l'application puis rallumé 16min après.
Le rond indiquant le statut de la synchronisation est gris, mais rien ne se lance automatiquement.
image

Plantage si pas de réseau internet

Si je lance Sync-mobile sans être connecté à internet, l'application plante et se ferme.
Même problème chez vous ?

Les logs que j'arrive à tracer (adb logcat | findstr fr.geonature) :

.ui.home.HomeActivity t41}}})/@0x72b5084 - animation-leash#0
07-02 12:08:04.874  2820  2820 I SurfaceFlinger:      Device | 0xe6653080 | 0002
 | RGBA_8888 |   0.0    0.0 1080.0 1920.0 |    0    0 1080 1920 | Splash Screen
fr.geonature.sync[26452]#0
07-02 12:08:05.165 26452 26479 D fr.geonature.mountpoint.model.MountPoint: Mount
Point: '/sdcard', canonical path: '/storage/emulated/0'
07-02 12:08:05.166 26452 26479 D fr.geonature.mountpoint.util.MountPointUtils: i
nternal storage from system environment: MountPoint(mountPath=/storage/emulated/
0, storageType=INTERNAL)
07-02 12:08:05.167 26452 26479 I fr.geonature.commons.settings.AppSettingsManage
r: Loading settings from '/storage/emulated/0/Android/data/fr.geonature.sync/set
tings_sync.json'...
07-02 12:08:05.171 26452 26479 I fr.geonature.commons.settings.AppSettingsManage
r: Settings loaded
07-02 12:08:05.192  2820  2820 I SurfaceFlinger: id=741 createSurf (3840x3840),2
 flag=4, eae938 fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity#0
07-02 12:08:05.202 26452 26479 D fr.geonature.mountpoint.model.MountPoint: Mount
Point: '/sdcard', canonical path: '/storage/emulated/0'
07-02 12:08:05.202 26452 26479 D fr.geonature.mountpoint.util.MountPointUtils: i
nternal storage from system environment: MountPoint(mountPath=/storage/emulated/
0, storageType=INTERNAL)
07-02 12:08:05.352  3259  5201 V WindowManager: Relayout Window{eae938 u0 fr.geo
nature.sync/fr.geonature.sync.ui.home.HomeActivity}: viewVisibility=0 req=1080x1
920 {(0,0)(fillxfill) sim={adjust=resize forwardNavigation} ty=BASE_APPLICATION
wanim=0x10302ff
07-02 12:08:05.353  3259  5201 V WindowManager: Resize reasons for w=Window{eae9
38 u0 fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity}:  contentInsetsC
hanged=false [0,63][0,0] visibleInsetsChanged=false [0,63][0,0] stableInsetsChan
ged=false [0,63][0,0] outsetsChanged=false [0,0][0,0] surfaceResized=false confi
gChanged=true dragResizingChanged=false reportOrientationChanged=false displayCu
toutChanged=false nextForceRelayoutToClient=false
07-02 12:08:05.356  2820  2820 I SurfaceFlinger: id=742 createSurf (1080x1920),1
 flag=404, fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity[26452]#0
07-02 12:08:05.357  3259  5201 D WindowManager: makeSurface duration=1 name=fr.g
eonature.sync/fr.geonature.sync.ui.home.HomeActivity[26452]
07-02 12:08:05.357  3259  5201 V WindowManager: Changing focus from null to Wind
ow{eae938 u0 fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity} Callers=c
om.android.server.wm.WindowManagerService.relayoutWindow:2581 com.android.server
.wm.Session.relayoutForTranslate:302 android.view.IWindowSession$Stub.onTransact
:518 com.android.server.wm.Session.onTransact:186
07-02 12:08:05.359  3259  3287 D WindowManager: reportFocusChangedSerialized, fo
cused=true, inTouchMode=true, win=Window{eae938 u0 fr.geonature.sync/fr.geonatur
e.sync.ui.home.HomeActivity}
07-02 12:08:05.495 26452 26452 V InputMethodManager: Starting input: tba=fr.geon
ature.sync ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVis
ible : true , NavTrans : false
07-02 12:08:05.498  3259  5201 V InputMethodManagerService: windowGainedFocus :
reason=WINDOW_FOCUS_GAIN client=android.os.BinderProxy@aee1aa inputContext=null
missingMethods= attribute=android.view.inputmethod.EditorInfo@648d11 nm = fr.geo
nature.sync controlFlags=#104 softInputMode=#110 windowFlags=#81810100
07-02 12:08:05.572  3259  5201 D WindowManager: finishDrawingWindow: Window{eae9
38 u0 fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity} mDrawState=DRAW_
PENDING
07-02 12:08:05.574  3259  3350 I WindowManager: commitFinishDrawingLocked: mDraw
State=READY_TO_SHOW Surface(name=fr.geonature.sync/fr.geonature.sync.ui.home.Hom
eActivity[26452])/@0x70160e4
07-02 12:08:05.577 26452 26452 V InputMethodManager: Starting input: tba=fr.geon
ature.sync ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVis
ible : true , NavTrans : false
07-02 12:08:05.578  3259  3350 I WindowManager: commitFinishDrawingLocked: mDraw
State=READY_TO_SHOW Surface(name=fr.geonature.sync/fr.geonature.sync.ui.home.Hom
eActivity[26452])/@0x70160e4
07-02 12:08:05.578  3259  3350 I WindowManager: Cancelling animation restarting=
false, leash=null, surface=Surface(name=eae938 fr.geonature.sync/fr.geonature.sy
nc.ui.home.HomeActivity)/@0xb73e94d, parent=Surface(name=AppWindowToken{282de66
token=Token{7f706c1 ActivityRecord{3997ba8 u0 fr.geonature.sync/.ui.home.HomeAct
ivity t41}}})/@0x72b5084
07-02 12:08:05.578  3259  3350 V WindowManager: performShowLocked: mDrawState=HA
S_DRAWN in Window{eae938 u0 fr.geonature.sync/fr.geonature.sync.ui.home.HomeActi
vity}
07-02 12:08:05.585  3259  3287 I ActivityManager: Displayed fr.geonature.sync/.u
i.home.HomeActivity: +1s76ms
07-02 12:08:05.585  3259  3350 V WindowManager: Remove Window{3b4efec u0 Splash
Screen fr.geonature.sync}: mSurfaceController=Surface(name=Splash Screen fr.geon
ature.sync[26452])/@0xff71ed8 mAnimatingExit=false mRemoveOnExit=false mHasSurfa
ce=true surfaceShowing=true isAnimationSet=false app-animation=false mWillReplac
eWindow=false inPendingTransaction=false mDisplayFrozen=false callers=com.androi
d.server.wm.WindowState.removeIfPossible:2808 com.android.server.wm.WindowManage
rService.removeWindow:1991 com.android.server.wm.Session.remove:268 android.view
.ViewRootImpl.dispatchDetachedFromWindow:4617 android.view.ViewRootImpl.doDie:80
66 android.view.ViewRootImpl$ViewRootHandler.handleMessage:5039
07-02 12:08:05.586  3259  3350 I WindowManager: Cancelling animation restarting=
true, leash=null, surface=Surface(name=3b4efec Splash Screen fr.geonature.sync)/
@0xffdfc02, parent=Surface(name=AppWindowToken{282de66 token=Token{7f706c1 Activ
ityRecord{3997ba8 u0 fr.geonature.sync/.ui.home.HomeActivity t41}}})/@0x72b5084
07-02 12:08:05.586  3259  3350 I WindowManager: Reparenting to leash, surface=Su
rface(name=3b4efec Splash Screen fr.geonature.sync)/@0xffdfc02
07-02 12:08:05.587  2820  2820 I SurfaceFlinger: id=743 createSurf (3840x3840),2
 flag=4, Surface(name=3b4efec Splash Screen fr.geonature.sync)/@0xffdfc02 - anim
ation-leash#0
07-02 12:08:05.588  3259  3350 D WindowManager: makeSurface duration=2 leash=Sur
face(name=Surface(name=3b4efec Splash Screen fr.geonature.sync)/@0xffdfc02 - ani
mation-leash)/@0xd791913
07-02 12:08:05.588  3259  3350 D SurfaceControl: reparent is called, sc=Surface(
name=3b4efec Splash Screen fr.geonature.sync)/@0xffdfc02, newParentHandle=androi
d.os.BinderProxy@9e5a750, transaction=android.view.SurfaceControl$Transaction@7a
2cd49
07-02 12:08:05.594  2820  5221 D Layer   : [3b4efec Splash Screen fr.geonature.s
ync#0]::reparent oldParent:[AppWindowToken{282de66 token=Token{7f706c1 ActivityR
ecord{3997ba8 u0 fr.geonature.sync/.ui.home.HomeActivity t41}}}#0], newParent:[S
urface(name=3b4efec Splash Screen fr.geonature.sync)/@0xffdfc02 - animation-leas
h#0]
07-02 12:08:05.612  3259  3276 D CodecSolution: isMaxAspectPackageEx: fr.geonatu
re.sync : false(0)
07-02 12:08:05.646  2820  2820 I SurfaceFlinger:      Device | 0xe6653800 | 0002
 | RGBA_8888 |   0.0    0.0 1080.0 1920.0 |    0    0 1080 1920 | fr.geonature.s
ync/fr.geonature.sync.ui.home.HomeActivity[26452]#0
07-02 12:08:05.646  2820  2820 I SurfaceFlinger:      Device | 0xe6653080 | 0002
 | RGBA_8888 |   0.0    0.0 1080.0 1920.0 |    0    0 1080 1920 | Splash Screen
fr.geonature.sync[26452]#0
07-02 12:08:05.742  3259  3761 D MdnieScenarioControlService:  packageName : fr.
geonature.sync    className : fr.geonature.sync.ui.home.HomeActivity
07-02 12:08:05.757 26452 26480 D fr.geonature.mountpoint.model.MountPoint: Mount
Point: '/sdcard', canonical path: '/storage/emulated/0'
07-02 12:08:05.757 26452 26480 D fr.geonature.mountpoint.util.MountPointUtils: i
nternal storage from system environment: MountPoint(mountPath=/storage/emulated/
0, storageType=INTERNAL)
07-02 12:08:05.758 26452 26479 W fr.geonature.sync.sync.io.AppSettingsJsonWriter
: undefined app settings to update from 'fr.geonature.occtax'
07-02 12:08:05.759  3259  3350 I WindowManager: reset, Reparenting to original p
arent, shouldDeferScheduleAnimation=false, destroyLeash=true, surface=Surface(na
me=3b4efec Splash Screen fr.geonature.sync)/@0xffdfc02, parent=Surface(name=AppW
indowToken{282de66 token=Token{7f706c1 ActivityRecord{3997ba8 u0 fr.geonature.sy
nc/.ui.home.HomeActivity t41}}})/@0x72b5084, parentNativeHandle=android.os.Binde
rProxy@9c1f505, caller=com.android.server.wm.SurfaceAnimator.lambda$getFinishedC
allback$0:97 com.android.server.wm.-$$Lambda$SurfaceAnimator$SIBia0mND666K8lMCPs
oid8pUTI.run:4 com.android.server.wm.SurfaceAnimator.lambda$getFinishedCallback$
1:104 com.android.server.wm.-$$Lambda$SurfaceAnimator$vdRZk66hQVbQCvVXEaQCT1kVmF
c.onAnimationFinished:4 com.android.server.wm.LocalAnimationAdapter.lambda$start
Animation$0:74
07-02 12:08:05.760  3259  3350 D SurfaceControl: reparent is called, sc=Surface(
name=3b4efec Splash Screen fr.geonature.sync)/@0xffdfc02, newParentHandle=androi
d.os.BinderProxy@9c1f505, transaction=android.view.SurfaceControl$Transaction@7a
2cd49
07-02 12:08:05.760  3259  3350 D SurfaceControl: destroy(transaction), animation
-leash is destroyed, sc=Surface(name=Surface(name=3b4efec Splash Screen fr.geona
ture.sync)/@0xffdfc02 - animation-leash)/@0xd791913, transaction=android.view.Su
rfaceControl$Transaction@7a2cd49, caller=com.android.server.wm.SurfaceAnimator.r
eset:344 com.android.server.wm.SurfaceAnimator.lambda$getFinishedCallback$0:97 c
om.android.server.wm.-$$Lambda$SurfaceAnimator$SIBia0mND666K8lMCPsoid8pUTI.run:4
 com.android.server.wm.SurfaceAnimator.lambda$getFinishedCallback$1:104 com.andr
oid.server.wm.-$$Lambda$SurfaceAnimator$vdRZk66hQVbQCvVXEaQCT1kVmFc.onAnimationF
inished:4 com.android.server.wm.LocalAnimationAdapter.lambda$startAnimation$0:74
 com.android.server.wm.-$$Lambda$LocalAnimationAdapter$X--EomqUvw4qy89IeeTFTH7aC
Mo.run:4
07-02 12:08:05.760  3259  3350 E WindowManager: win=Window{3b4efec u0 Splash Scr
een fr.geonature.sync EXITING} destroySurfaces: appStopped=false win.mWindowRemo
valAllowed=true win.mRemoveOnExit=true win.mViewVisibility=0 caller=com.android.
server.wm.AppWindowToken.destroySurfaces:896 com.android.server.wm.AppWindowToke
n.destroySurfaces:877 com.android.server.wm.WindowState.onExitAnimationDone:5516
 com.android.server.wm.WindowStateAnimator.onAnimationFinished:320 com.android.s
erver.wm.WindowState.onAnimationFinished:5938 com.android.server.wm.-$$Lambda$yV
RF8YoeNdTa8GR1wDStVsHu8xM.run:2 com.android.server.wm.SurfaceAnimator.lambda$get
FinishedCallback$0:100
07-02 12:08:05.761  3259  3350 I WindowManager: Destroying surface Surface(name=
Splash Screen fr.geonature.sync[26452])/@0xff71ed8 called by com.android.server.
wm.WindowStateAnimator.destroySurface:1893 com.android.server.wm.WindowStateAnim
ator.destroySurfaceLocked:830 com.android.server.wm.WindowState.destroySurfaceUn
checked:3909 com.android.server.wm.WindowState.destroySurface:3890 com.android.s
erver.wm.AppWindowToken.destroySurfaces:896 com.android.server.wm.AppWindowToken
.destroySurfaces:877 com.android.server.wm.WindowState.onExitAnimationDone:5516
com.android.server.wm.WindowStateAnimator.onAnimationFinished:320
07-02 12:08:05.761  2820  5221 I SurfaceFlinger: id=737 Removed Splash Screen fr
.geonature.sync[26452]#0 (0/41)
07-02 12:08:05.762  3259  3350 D WindowManager: clearSavedLeashOnCommit, savedLe
ash=Surface(name=Surface(name=3b4efec Splash Screen fr.geonature.sync)/@0xffdfc0
2 - animation-leash)/@0xd791913, caller=com.android.server.wm.WindowContainer.re
moveImmediately:329 com.android.server.wm.WindowState.removeImmediately:2720 com
.android.server.wm.WindowState.destroySurface:3893 com.android.server.wm.AppWind
owToken.destroySurfaces:896 com.android.server.wm.AppWindowToken.destroySurfaces
:877 com.android.server.wm.WindowState.onExitAnimationDone:5516
07-02 12:08:05.762 26452 26480 D fr.geonature.mountpoint.model.MountPoint: Mount
Point: '/sdcard', canonical path: '/storage/emulated/0'
07-02 12:08:05.762 26452 26480 D fr.geonature.mountpoint.util.MountPointUtils: i
nternal storage from system environment: MountPoint(mountPath=/storage/emulated/
0, storageType=INTERNAL)
07-02 12:08:05.764 26452 26479 I fr.geonature.sync.sync.worker.CheckInputsToSync
hronizeWorker: available inputs to synchronize: 0
07-02 12:08:05.767  2820  2844 W SurfaceFlinger: Attempting to set client state
on removed layer: Splash Screen fr.geonature.sync[26452]#0 [s.what : 40]
07-02 12:08:05.767  2820  2844 D Layer   : [3b4efec Splash Screen fr.geonature.s
ync#0]::reparent oldParent:[Surface(name=3b4efec Splash Screen fr.geonature.sync
)/@0xffdfc02 - animation-leash#0], newParent:[AppWindowToken{282de66 token=Token
{7f706c1 ActivityRecord{3997ba8 u0 fr.geonature.sync/.ui.home.HomeActivity t41}}
}#0]
07-02 12:08:05.767  2820  2844 W SurfaceFlinger: Attempting to destroy on remove
d layer: Splash Screen fr.geonature.sync[26452]#0
07-02 12:08:05.767  2820  2844 I SurfaceFlinger: id=743 Removed Surface(name=3b4
efec Splash Screen fr.geonature.sync)/@0xffdfc02 - animation-leash#0 (2/40)
07-02 12:08:05.767  2820  2844 I SurfaceFlinger: id=736 Removed 3b4efec Splash S
creen fr.geonature.sync#0 (1/39)
07-02 12:08:05.775  2820  2820 I Layer   : id=737 onRemoved Splash Screen fr.geo
nature.sync[26452]#0
07-02 12:08:05.776  2820  2820 I Layer   : id=736 onRemoved 3b4efec Splash Scree
n fr.geonature.sync#0
07-02 12:08:05.776  2820  2820 I Layer   : id=743 onRemoved Surface(name=3b4efec
 Splash Screen fr.geonature.sync)/@0xffdfc02 - animation-leash#0
07-02 12:08:05.777 26452 26477 I WM-WorkerWrapper: Worker result SUCCESS for Wor
k [ id=0c85f1a9-2b3d-4658-8f9b-d217bf2a01b5, tags={ fr.geonature.sync.sync.worke
r.CheckInputsToSynchronizeWorker, check_inputs_to_sync_worker_tag } ]
07-02 12:08:05.778  2820  2820 I SurfaceFlinger:      Device | 0xe6653500 | 0002
 | RGBA_8888 |   0.0    0.0 1080.0 1920.0 |    0    0 1080 1920 | fr.geonature.s
ync/fr.geonature.sync.ui.home.HomeActivity[26452]#0
07-02 12:08:05.980  3259  3516 D GameManagerService: handleForegroundChange(). p
kgName: fr.geonature.sync, clsName: fr.geonature.sync.ui.home.HomeActivity,FgAct
ivityName:fr.geonature.sync/.ui.home.HomeActivity,userID:0
07-02 12:08:06.060 26452 26452 D fr.geonature.sync.sync.DataSyncViewModel: data
already synchronized at 2020-07-02T09:46:24Z
07-02 12:08:06.641 26452 26498 D OkHttp  : --> GET http://demo.geonature.fr/geon
ature/api/gn_commons/t_mobile_apps
07-02 12:08:06.902 26452 26452 E AndroidRuntime: Process: fr.geonature.sync, PID
: 26452
07-02 12:08:06.909  3259  4573 W ActivityManager: crash : fr.geonature.sync,0
07-02 12:08:06.912  3259  4573 W ActivityManager:   Force finishing activity fr.
geonature.sync/.ui.home.HomeActivity
07-02 12:08:06.948 24996 26502 D AppErrorNotification: errorType : 24, process :
 fr.geonature.sync , uid : 0
07-02 12:08:07.016  3259  3764 D PackageManager: getComponentMetadataForIconTray
 : fr.geonature.sync.ui.home.HomeActivity does not exist in mServices
07-02 12:08:07.016  3259  3764 D PackageManager: getComponentMetadataForIconTray
 : fr.geonature.sync.ui.home.HomeActivity does not exist in mProviders
07-02 12:08:07.016  3259  3764 D PackageManager: getComponentMetadataForIconTray
 : fr.geonature.sync.ui.home.HomeActivity does not exist in mReceivers
07-02 12:08:07.016  4467  4819 I AppIconSolution: return adaptive icon for fr.ge
onature.sync
07-02 12:08:07.025  3259  3270 I WindowManager: WIN DEATH: Window{eae938 u0 fr.g
eonature.sync/fr.geonature.sync.ui.home.HomeActivity}
07-02 12:08:07.025  3259  3270 V WindowManager: Remove Window{eae938 u0 fr.geona
ture.sync/fr.geonature.sync.ui.home.HomeActivity}: mSurfaceController=Surface(na
me=fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity[26452])/@0x70160e4 m
AnimatingExit=false mRemoveOnExit=false mHasSurface=true surfaceShowing=true isA
nimationSet=true app-animation=true mWillReplaceWindow=false inPendingTransactio
n=true mDisplayFrozen=false callers=com.android.server.wm.WindowState.access$300
:283 com.android.server.wm.WindowState$DeathRecipient.binderDied:3426 android.os
.BinderProxy.sendDeathNotice:1211 <bottom of call stack> <bottom of call stack>
<bottom of call stack>
07-02 12:08:07.025  3259  4614 I ActivityManager: Process fr.geonature.sync (pid
 26452) has died: vis  +99TOP (167,1221)
07-02 12:08:07.025  3259  3270 V WindowManager: Changing focus from Window{eae93
8 u0 fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity EXITING} to null C
allers=com.android.server.wm.WindowState.setupWindowForRemoveOnExit:2958 com.and
roid.server.wm.WindowState.removeIfPossible:2929 com.android.server.wm.WindowSta
te.access$300:283 com.android.server.wm.WindowState$DeathRecipient.binderDied:34
26
07-02 12:08:07.032  3259  3287 D WindowManager: reportFocusChangedSerialized, fo
cused=false, inTouchMode=true, win=Window{eae938 u0 fr.geonature.sync/fr.geonatu
re.sync.ui.home.HomeActivity EXITING}
07-02 12:08:07.033  3259  3287 E WindowManager: RemoteException occurs on report
ing focusChanged, w=Window{eae938 u0 fr.geonature.sync/fr.geonature.sync.ui.home
.HomeActivity EXITING}
07-02 12:08:07.033  3259  4614 V WindowManager: Setting visibility of Window{eae
938 u0 fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity EXITING}: false,
 caller=com.android.server.wm.WindowContainer.sendAppVisibilityToClients:615 com
.android.server.wm.AppWindowToken.setClientHidden:469 com.android.server.wm.AppW
indowToken.onAnimationFinished:2454 com.android.server.wm.AppWindowToken.setVisi
bility:560 com.android.server.wm.AppWindowToken.onRemovedFromDisplay:792
07-02 12:08:07.034  3259  4614 E WindowManager: win=Window{eae938 u0 fr.geonatur
e.sync/fr.geonature.sync.ui.home.HomeActivity EXITING} destroySurfaces: appStopp
ed=false win.mWindowRemovalAllowed=true win.mRemoveOnExit=true win.mViewVisibili
ty=0 caller=com.android.server.wm.AppWindowToken.destroySurfaces:896 com.android
.server.wm.AppWindowToken.destroySurfaces:877 com.android.server.wm.WindowState.
onExitAnimationDone:5516 com.android.server.wm.-$$Lambda$01bPtngJg5AqEoOWfW3rWfV
7MH4.accept:2 java.util.ArrayList.forEach:1262 com.android.server.wm.AppWindowTo
ken.onAnimationFinished:2469 com.android.server.wm.AppWindowToken.setVisibility:
560
07-02 12:08:07.034  3259  4614 I WindowManager: Destroying surface Surface(name=
fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity[26452])/@0x70160e4 call
ed by com.android.server.wm.WindowStateAnimator.destroySurface:1893 com.android.
server.wm.WindowStateAnimator.destroySurfaceLocked:830 com.android.server.wm.Win
dowState.destroySurfaceUnchecked:3909 com.android.server.wm.WindowState.destroyS
urface:3890 com.android.server.wm.AppWindowToken.destroySurfaces:896 com.android
.server.wm.AppWindowToken.destroySurfaces:877 com.android.server.wm.WindowState.
onExitAnimationDone:5516 com.android.server.wm.-$$Lambda$01bPtngJg5AqEoOWfW3rWfV
7MH4.accept:2
07-02 12:08:07.034  2820  3021 I SurfaceFlinger: id=742 Removed fr.geonature.syn
c/fr.geonature.sync.ui.home.HomeActivity[26452]#0 (0/38)
07-02 12:08:07.037  2820  2820 I Layer   : id=742 onRemoved fr.geonature.sync/fr
.geonature.sync.ui.home.HomeActivity[26452]#0
07-02 12:08:07.038  2820  5221 W SurfaceFlinger: Attempting to set client state
on removed layer: fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity[26452
]#0 [s.what : 40]
07-02 12:08:07.038  2820  5221 I SurfaceFlinger: id=741 Removed eae938 fr.geonat
ure.sync/fr.geonature.sync.ui.home.HomeActivity#0 (0/37)
07-02 12:08:07.041  3259  4614 I WindowManager: Cancelling animation restarting=
false, leash=null, surface=Surface(name=AppWindowToken{282de66 token=Token{7f706
c1 ActivityRecord{3997ba8 u0 fr.geonature.sync/.ui.home.HomeActivity t41}}})/@0x
72b5084, parent=Surface(name=Task=41)/@0xa11b06d
07-02 12:08:07.044  2820  5221 I SurfaceFlinger: id=735 Removed AppWindowToken{2
82de66 token=Token{7f706c1 ActivityRecord{3997ba8 u0 fr.geonature.sync/.ui.home.
HomeActivity t41}}}#0 (0/36)
07-02 12:08:07.054  2820  2820 I Layer   : id=741 onRemoved eae938 fr.geonature.
sync/fr.geonature.sync.ui.home.HomeActivity#0
07-02 12:08:07.054  2820  2820 I Layer   : id=735 onRemoved AppWindowToken{282de
66 token=Token{7f706c1 ActivityRecord{3997ba8 u0 fr.geonature.sync/.ui.home.Home
Activity t41}}}#0
07-02 12:08:07.612 24996 26502 V FasUtils: There is fr.geonature.sync [10050] in
 FAS table
07-02 12:08:07.690 24996 26502 W AppErrorNotification: Skip. fr.geonature.sync i
s not notiable item

Je n'arrive qu'à avoir la fin des logs sur Windows, mais si besoin je peux essayer d'en récupérer plus.

Pouvoir déclencher la synchronisation manuellement

L'application de synchronisation lance des synchro à certains démarrages mais pas à tous. Quand on modifie la config on ne peut pas déclencher une synchronisation "à la demande".

Il serait intéressant qu'on puisse déclencher une synchro sur demande, en cliquant sur la pastille ou quelque chose du genre. A l'heure actuelle pour les tests, je dois régulièrement désinstaller/réinstaller l'application (je n'ai rien trouvé d'autre pour le moment)

Mise à jour automatique ne se fait pas Sync 1.2.1

A l'ouverture d'un Sync inférieur, il identifie bien qu'il y a une version plus récente mais quand on accepte l'installation, rien ne se fait et il ouvre une fenêtre d'authentification
La version de sync ne change pas
Problème soulevé par @xavyeah39 et reproduit sur différents appareils au Parc de la Vanoise
#38 (comment)

Mise à jour des applications mobiles et des fichiers de paramétrage

Reprise des discussions :

@sgrimault :

Dans la v1 de GeoNature, le module WebAPI permet la mise à disposition des applications de saisie ainsi que des fichiers de paramétrage. Ainsi à travers l'application de synchronisation Desktop, la flotte des terminaux ayant ces applications installées peuvent se mettre à jour "automatiquement" une fois la liaison établie entre le terminal et l'application de synchronisation Desktop.

Pour la v2 de GeoNature, il faudrait que l'on puisse retrouver un fonctionnement similaire (sans l'application Desktop abandonnée) :
Il faudrait une route qui décrit les métadonnées des applications disponibles (ici on en a deux : "Sync" et "OccTax"), une route qui permet de récupérer le fichier de paramétrage par application et une route qui permet de récupérer l'apk par application.

L'approche retenue mais qui nécessite quelques tests de mon coté est que l'application "Sync" soit capable de réaliser cette mise à jour d'elle même. Cette approche implique que les terminaux puissent accéder à Internet (ou du moins au réseau du parc pour accéder à l'instance de GeoNature).

Concernant les nouvelles routes à définir :

L'API de GeoNature expose directement les routes permettant la synchronisation via un module "sync" transverse :

  • GET -> geonature/api/sync/apk : retourne la description des applications actuellement disponibles par module GeoNature configuré (mime-type : application/json)
  • GET -> geonature/api/sync/apk/{package} : retourne le paramétrage pour l'application donnée (mime-type : application/json)
  • GET -> geonature/api/sync/apk/{apkName} : télécharge l'APK correspondant (mime-type : application/vnd.android.package-archive)

Exemple de retour JSON pour la description des applications par module :

{
  "sync": [
    {
      "package": "fr.geonature.sync",
      "apkName": "sync-0.1.8-debug.apk",
      "versionCode": 1359,
      "versionName": "0.1.8"
    }
  ],
  "occtax": [
    {
      "package": "fr.geonature.occtax",
      "apkName": "occtax-0.2.3-debug.apk",
      "versionCode": 1269,
      "versionName": "0.2.3"
    }
  ]
}

GeoNature connaît les modules actuellement configurés et actifs. Selon un contrat d'interface (à définir ou à compléter) entre GeoNature et les modules additionnels (par exemple "OccTax"), GeoNature peut agréger les applications actuellement disponibles par module. Ce sera de la responsabilité de chaque module si elle souhaite exposer ou non une (ou plusieurs ?) applications via GeoNature, en respectant le contrat d'interface entre les modules et GeoNature.
Par défaut, GeoNature aura un module "sync" que l'on peut configurer et activer permettant de rendre disponible de manière globale la synchronisation des données entre tous les modules déclarés dans GeoNature.


@TheoLechemia :

Cette proposition nous semble la meilleure.

Pour le chemin des routes on voit plus quelque chose comme ça :

  • /geonature/api/mobile
  • /geonature/api/mobile/{module_code}
  • /geonature/api/mobile/apk/{module_code}

@TheoLechemia

GET -> <base_url>/geonature/api/mobile
Pour retourner la description des applications actuellement disponibles par module ? Oui
GET -> <base_url>/geonature/api/mobile/{module_code}
Pour retourner la description des applications actuellement disponibles pour le module donné ? Oui
GET -> <base_url>/geonature/api/mobile/apk/{module_code}
Pour télécharger l'apk ? Lequel du coup ? Celle du module passé en paramètre (module_code)

Impossible de synchroniser les données

Bonjour,
J'ai de nouveau des problèmes de synchronisation entre les saisies sur le téléphone et la mise à jour dans geonature.
Les synchronisation ne se font pas 👎
Dans le log sur le téléphone on a
04-14 12:19:26.943 10621 10664 D OkHttp : --> POST https://ra-na.fr/geonature//api/occtax/releve (1494-byte body)
04-14 12:19:27.268 10621 10664 D OkHttp : <-- 500 INTERNAL SERVER ERROR https://ra-na.fr/geonature//api/occtax/releve (324ms, 36-byte body)
Et sur le log de geonature nous avons

[SQL: INSERT INTO pr_occtax.t_occurrences_occtax (id_releve_occtax, id_nomenclature_obs_technique, id_nomenclature_bio_condition, id_nomenclature_bio_status, id_nomenclature_naturalness, id_nomenclature_exist_proof, id_nomenclature_observation_status, id_nomenclature_blurring, id_nomenclature_source_status, determiner, id_nomenclature_determination_method, id_nomenclature_behaviour, cd_nom, nom_cite, meta_v_taxref, sample_number_proof, digital_proof, non_digital_proof, comment, unique_id_occurence_occtax) VALUES (%(id_releve_occtax)s, %(id_nomenclature_obs_technique)s, %(id_nomenclature_bio_condition)s, %(id_nomenclature_bio_status)s, %(id_nomenclature_naturalness)s, %(id_nomenclature_exist_proof)s, %(id_nomenclature_observation_status)s, %(id_nomenclature_blurring)s, %(id_nomenclature_source_status)s, %(determiner)s, %(id_nomenclature_determination_method)s, %(id_nomenclature_behaviour)s, %(cd_nom)s, %(nom_cite)s, (SELECT gn_commons.get_default_parameter(%(get_default_parameter_2)s) AS get_default_parameter_1), %(sample_number_proof)s, %(digital_proof)s, %(non_digital_proof)s, %(comment)s, (SELECT uuid_generate_v4() AS uuid_generate_v4_1)) RETURNING pr_occtax.t_occurrences_occtax.id_occurrence_occtax]
[parameters: {'id_releve_occtax': 6098, 'id_nomenclature_obs_technique': None, 'id_nomenclature_bio_condition': 158, 'id_nomenclature_bio_status': 29, 'id_nomenclature_naturalness': 161, 'id_nomenclature_exist_proof': 81, 'id_nomenclature_observation_status': None, 'id_nomenclature_blurring': None, 'id_nomenclature_source_status': None, 'determiner': None, 'id_nomenclature_determination_method': 446, 'id_nomenclature_behaviour': None, 'cd_nom': 444432, 'nom_cite': 'Lissotriton helveticus', 'get_default_parameter_2': 'taxref_version', 'sample_number_proof': None, 'digital_proof': None, 'non_digital_proof': None, 'comment': None}]
(Background on this error at: http://sqlalche.me/e/13/gkpj)
[2021-04-14 12:19:46 +0200] [26962] [ERROR] (psycopg2.errors.NotNullViolation) ERREUR: une valeur NULL viole la contrainte NOT NULL de la colonne « id_nomenclature_obs_technique »
DETAIL: La ligne en échec contient (10083, 754b60c9-adc9-4f22-a775-e7d4c1b47379, 6099, null, 158, 29, 161, 81, null, null, null, null, null, 446, 444436, Pelophylax, Taxref V11.0, null, null, null, null, null)

[SQL: INSERT INTO pr_occtax.t_occurrences_occtax (id_releve_occtax, id_nomenclature_obs_technique, id_nomenclature_bio_condition, id_nomenclature_bio_status, id_nomenclature_naturalness, id_nomenclature_exist_proof, id_nomenclature_observation_status, id_nomenclature_blurring, id_nomenclature_source_status, determiner, id_nomenclature_determination_method, id_nomenclature_behaviour, cd_nom, nom_cite, meta_v_taxref, sample_number_proof, digital_proof, non_digital_proof, comment, unique_id_occurence_occtax) VALUES (%(id_releve_occtax)s, %(id_nomenclature_obs_technique)s, %(id_nomenclature_bio_condition)s, %(id_nomenclature_bio_status)s, %(id_nomenclature_naturalness)s, %(id_nomenclature_exist_proof)s, %(id_nomenclature_observation_status)s, %(id_nomenclature_blurring)s, %(id_nomenclature_source_status)s, %(determiner)s, %(id_nomenclature_determination_method)s, %(id_nomenclature_behaviour)s, %(cd_nom)s, %(nom_cite)s, (SELECT gn_commons.get_default_parameter(%(get_default_parameter_2)s) AS get_default_parameter_1), %(sample_number_proof)s, %(digital_proof)s, %(non_digital_proof)s, %(comment)s, (SELECT uuid_generate_v4() AS uuid_generate_v4_1)) RETURNING pr_occtax.t_occurrences_occtax.id_occurrence_occtax]
[parameters: {'id_releve_occtax': 6099, 'id_nomenclature_obs_technique': None, 'id_nomenclature_bio_condition': 158, 'id_nomenclature_bio_status': 29, 'id_nomenclature_naturalness': 161, 'id_nomenclature_exist_proof': 81, 'id_nomenclature_observation_status': None, 'id_nomenclature_blurring': None, 'id_nomenclature_source_status': None, 'determiner': None, 'id_nomenclature_determination_method': 446, 'id_nomenclature_behaviour': None, 'cd_nom': 444436, 'nom_cite': 'Pelophylax', 'get_default_parameter_2': 'taxref_version', 'sample_number_proof': None, 'digital_proof': None, 'non_digital_proof': None, 'comment': None}]
(Background on this error at: http://sqlalche.me/e/13/gkpj)
[2021-04-14 12:26:54 +0200] [26962] [ERROR] (psycopg2.errors.NotNullViolation) ERREUR: une valeur NULL viole la contrainte NOT NULL de la colonne « id_dataset »
DETAIL: La ligne en échec contient (6101, cd2c2acd-8730-4ba7-ab88-48ac4242bf86, null, 51, null, null, null, 2021-01-19 10:28:42, 2021-01-19 10:28:42, null, null, 21, 21, mobile, null, 01010000206A080000C90791E933161941A83B666926855841, 0101000020E6100000000000C0B529E5BF406A64BFCD714640, null, null, null, null, null, null, null)

on essaye d'insérer des valeurs nulles dasn des tables et cela ne passe pas.

Cependant si je regarde le contenu d'un json envoyé on a
"id_nomenclature_obs_technique": 41,
par contre effectivement on a
"id_dataset": null,

Mon utilisatrice a 28 saisies dans son téléphone qui attende la remontée et cela a déjà fonctionné car elle a abandonné la saisie papier.
Quel est le problème, comment résoudre et comment récupérer les saisies ??

RQ01 : étrangement contrairement à d'autres utilisateurs l'application ne s'est pas mise à jour sur son téléphone.
Je viens de le faire manuellement mais le problème persiste.
J'ai tenté une saisie après la mise à jour mais pas mieux. Cela plante toujours 👎

RQ02 : pour d'autres utilisateurs avec les même paramètres cela fonctionne.
Est ce que si je dépose les fichiers json sur un autre téléphone on pourra faire la synchronisation ???

Christian Bièche
Cistude Nature

RQ03 : cela m'inquiète car j'ai de plus en plus d'utilisateurs avec ces applications mais si elle ne fonctionnent pas !
le but est de gagner du temps et de ne pas faire des saisies en double.
je pensais qu'avec la version geonature en 2.5.5, taxhub en 1.7.3 et les applications telephone SYNC 1.1.2 et OOCTAX 1.1.4
cela marcherait mieux....

Connexion / Déconnexion

A priori actuellement quand on ferme l'application puis qu'on l'a rouvre, il faut se reconnecter.

Il serait intéressant de conserver l'application connectée le plus longtemps possible pour ne pas avoir à se reconnecter régulièrement.

Mais je ne sais pas ce qui est techniquement possible ?

Récupération des taxons & lien entre taxons et JDD

La récupération des taxons sur le mobile soulève encore différentes incompréhensions, et de nouveaux sujets récents viennent encore complexifier la question :

  • Plusieurs synchronisations consécutives sur le mobile peuvent renvoyer un nombre différent de taxons (voir ce ticket)selon le paramètre page_size notamment... semble réglé, à voir.
  • La liste de taxons saisissables pour Occtax est devenue facultative sur la version web, et le module peut chercher dans tout le taxref par défaut
  • Les jeux de données peuvent désormais être rattachés à une liste de taxons qui leur est propre, au délà de la liste définie (ou non) pour le module occtax.

Je pense qu'il peut être pertinent de reprendre totalement cette question des récupérations des taxons, en faisant en sorte que :

  1. coté serveur, l'API l'ensemble des taxons qui sont soit saisissables dans occtax (liste ou taxref), soit rattaché à un JDD lui-même saisissable dans Occtax
  2. Cette API renvoie toutes les données taxonomiques dans un format adapté au mobile, pour que l'appli mobile ne fasse aucun traitement supplémentaire (permet de simplifier la récupération des taxons et une meilleure visibilité en pouvant controler les données sur l'API)
  3. Pour chaque taxon renvoyé, l'API indique l'ensemble des listes auxquelles il appartient
  4. Une autre API (métadonnées) se charge d'indiquer une correspondance entre datasets saisissables sur occtax et éventuelles listes de taxons correspondantes, pour que l'appli mobile puisse filtrer selon le JDD

Avant de rentrer dans cette complexité au niveau du mobile, il serait peut-être intéressant d'en discuter (sur le dépot dédié) de cette configuration à 2 endroits au niveau de GeoNature.... définir les taxons saisissables serait sans doute pertinent soit au niveau du JDD soit au niveau du module, mais les deux...?

Déconnexions intempestives dans Sync (0.2.8)

Impossible de me connecter à Sync
Cela a fonctionné à l'installation mais depuis impossible de le reproduire: je me connecte, l'écran affiche "Authentification réussie" mais l'écran de connexion réapparait vierge avec "Non connecté".
Ca se reproduit jusqu'au crash de l'application
ci-joint le log
log_sync_CL.txt

Authentification module Sync

Lors de l'identification au module sync, lorsqu'un utilisateur entre son identifiant et son mot de passe, le message authentification réussie apparait mais il faut saisir une nouvelle fois l'identifiant et le mdp pour se connecter avec son compte.

0.2.1 / Plantage sans settings_sync.json

J'ai installé l'application, l'ai lancé et configuré l'URL du serveur sur http://demo.geonature.fr
Sur Android 8.1.0.

Je n'ai pas encore intégré le fichier settings_sync.json. Un message me l'indique mais l'application plante et se ferme directement avec ce log :

01-24 20:40:20.759  2978  3273 D GameManagerService: handleForegroundChange(). p
kgName: fr.geonature.sync, clsName: fr.geonature.sync.ui.home.HomeActivity,FgAct
ivityName:fr.geonature.sync/.ui.home.HomeActivity
01-24 20:40:20.759  2978  2989 D MARsPolicyManager: onPackageResumedFG pkgName =
 fr.geonature.sync, userId = 0
01-24 20:40:20.759  2978  3273 D GameManagerService: notifyResumePause(). pkg: f
r.geonature.sync, type: 4, isMinimized: false, isTunableApp: false
01-24 20:40:20.789  2978  5347 D GamePkgDataHelper: getGamePkgDataIncServer(). f
r.geonature.sync
01-24 20:40:20.790  2635  2635 D SurfaceFlinger:       GLES | ed466f00 | 0000 |
0020 | 00 | 0105 | RGBA_8888   |    0.0,    0.0,  720.0, 1280.0 |  108,  115,  6
55, 1087 | Splash Screen fr.geonature.sync[2978]#0
01-24 20:40:20.790  2978  5347 D GameManagerService: identifyGamePackage. fr.geo
nature.sync
01-24 20:40:20.790  2978  5347 D GamePkgDataHelper: getGamePkgData(). fr.geonatu
re.sync
01-24 20:40:20.792  2978  5347 D GameManagerService: identifyGamePackage. fr.geo
nature.sync
01-24 20:40:20.792  2978  5347 D GamePkgDataHelper: getGamePkgData(). fr.geonatu
re.sync
01-24 20:40:20.792  2978  5347 D GamePkgDataHelper: getSosPolicy(). fr.geonature
.sync
01-24 20:40:20.795  2978  5347 D GameManagerService: identifyGamePackage. fr.geo
nature.sync
01-24 20:40:20.796  2978  5347 D GamePkgDataHelper: getGamePkgData(). fr.geonatu
re.sync
01-24 20:40:20.797  2978  5347 D GameManagerService: identifyGamePackage. fr.geo
nature.sync
01-24 20:40:20.797  2978  5347 D GamePkgDataHelper: getGamePkgData(). fr.geonatu
re.sync
01-24 20:40:20.802  2978  5347 D GameManagerService: identifyGamePackage. fr.geo
nature.sync
01-24 20:40:20.802  2978  5347 D GamePkgDataHelper: getGamePkgData(). fr.geonatu
re.sync
01-24 20:40:20.829  2978  6853 D PackageManager: setEnabledSetting : userId = 0
packageName = fr.geonature.sync cmp = androidx.work.impl.background.systemjob.Sy
stemJobService newState = 1 callingPackage = 10054/fr.geonature.sync
01-24 20:40:20.852 12364 12364 I fr.geonature.sync.MainApplication: internal sto
rage: MountPoint(mountPath=/storage/emulated/0, storageType=INTERNAL)
01-24 20:40:20.859 12364 12364 I fr.geonature.sync.MainApplication: external sto
rage: MountPoint(mountPath=/storage/2715-A426, storageType=EXTERNAL)
01-24 20:40:20.921  2978  3087 D MdnieScenarioControlService:  packageName : fr.
geonature.sync    className : fr.geonature.sync.ui.home.HomeActivity
01-24 20:40:20.971 12364 12364 I zygote  :   at void fr.geonature.sync.ui.home.H
omeActivity.onCreate(android.os.Bundle) (HomeActivity.kt:52)
01-24 20:40:20.971 12364 12364 I zygote  : Caused by: java.lang.ClassNotFoundExc
eption: Didn't find class "android.view.View$OnUnhandledKeyEventListener" on pat
h: DexPathList[[zip file "/data/app/fr.geonature.sync-MrUoG1wF4C7fO3sQ5MuBYg==/b
ase.apk"],nativeLibraryDirectories=[/data/app/fr.geonature.sync-MrUoG1wF4C7fO3sQ
5MuBYg==/lib/arm, /system/lib, /system/vendor/lib]]
01-24 20:40:20.972 12364 12364 I zygote  :   at void fr.geonature.sync.ui.home.H
omeActivity.onCreate(android.os.Bundle) (HomeActivity.kt:52)
01-24 20:40:20.974 12364 12364 I zygote  :   at void fr.geonature.sync.ui.home.H
omeActivity.onCreate(android.os.Bundle) (HomeActivity.kt:52)
01-24 20:40:20.974 12364 12364 I zygote  : Caused by: java.lang.ClassNotFoundExc
eption: Didn't find class "android.view.View$OnUnhandledKeyEventListener" on pat
h: DexPathList[[zip file "/data/app/fr.geonature.sync-MrUoG1wF4C7fO3sQ5MuBYg==/b
ase.apk"],nativeLibraryDirectories=[/data/app/fr.geonature.sync-MrUoG1wF4C7fO3sQ
5MuBYg==/lib/arm, /system/lib, /system/vendor/lib]]
01-24 20:40:20.974 12364 12364 I zygote  :   at void fr.geonature.sync.ui.home.H
omeActivity.onCreate(android.os.Bundle) (HomeActivity.kt:52)
01-24 20:40:20.976 12364 12364 I zygote  :   at void fr.geonature.sync.ui.home.H
omeActivity.onCreate(android.os.Bundle) (HomeActivity.kt:52)
01-24 20:40:20.976 12364 12364 I zygote  : Caused by: java.lang.ClassNotFoundExc
eption: Didn't find class "android.view.View$OnUnhandledKeyEventListener" on pat
h: DexPathList[[zip file "/data/app/fr.geonature.sync-MrUoG1wF4C7fO3sQ5MuBYg==/b
ase.apk"],nativeLibraryDirectories=[/data/app/fr.geonature.sync-MrUoG1wF4C7fO3sQ
5MuBYg==/lib/arm, /system/lib, /system/vendor/lib]]
01-24 20:40:20.976 12364 12364 I zygote  :   at void fr.geonature.sync.ui.home.H
omeActivity.onCreate(android.os.Bundle) (HomeActivity.kt:52)
01-24 20:40:20.989  2635  2635 D SurfaceFlinger:        HWC | ed466f00 | 0000 |
0020 | 00 | 0100 | RGBA_8888   |    0.0,    0.0,  720.0, 1280.0 |    0,    0,  7
20, 1280 | Splash Screen fr.geonature.sync[2978]#0
01-24 20:40:21.313 12364 12387 I fr.geonature.commons.settings.AppSettingsManage
r: Loading settings from '/storage/emulated/0/Android/data/fr.geonature.sync/set
tings_sync.json'...
01-24 20:40:21.313 12364 12387 W fr.geonature.commons.settings.AppSettingsManage
r: '/storage/emulated/0/Android/data/fr.geonature.sync/settings_sync.json' not f
ound
01-24 20:40:21.538  2978  9680 V WindowManager: Relayout Window{73e2c78 u0 fr.ge
onature.sync/fr.geonature.sync.ui.home.HomeActivity}: viewVisibility=0 req=720x1
232 WM.LayoutParams{(0,0)(fillxfill) sim=#110 ty=1 fl=#81810100 pfl=0x20000 wani
m=0x10302fc vsysui=0x600 needsMenuKey=2 colorMode=0 naviIconColor=0}
01-24 20:40:21.542  2635  2635 I SurfaceFlinger: id=80 createSurf (720x1280),1 f
lag=404, fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity[12364]#0
01-24 20:40:21.566 12364 12392 D libGLESv1: STS_GLApi : DTS, ODTC are not allowe
d for Package : fr.geonature.sync
01-24 20:40:21.683 12364 12364 V InputMethodManager: Starting input: tba=android
.view.inputmethod.EditorInfo@6823c25 nm : fr.geonature.sync ic=null
01-24 20:40:21.685  2978  9680 V InputMethodManagerService: windowGainedFocus :
reason=WINDOW_FOCUS_GAIN client=android.os.BinderProxy@26722ea inputContext=null
 missingMethods= attribute=android.view.inputmethod.EditorInfo@3d5af51 nm = fr.g
eonature.sync controlFlags=#105 softInputMode=#110 windowFlags=#81810100
01-24 20:40:21.763  2978  6853 D WindowManager: finishDrawingWindow: Window{73e2
c78 u0 fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity} mDrawState=DRAW
_PENDING
01-24 20:40:21.770 12364 12364 V InputMethodManager: Starting input: tba=android
.view.inputmethod.EditorInfo@74037d9 nm : fr.geonature.sync ic=null
01-24 20:40:21.771  2978  3045 D InputEventReceiver: channel '7c1c9f4 Splash Scr
een fr.geonature.sync (client)' ~ Disposing input event receiver.
01-24 20:40:21.771  2978  3045 D InputEventReceiver: channel '7c1c9f4 Splash Scr
een fr.geonature.sync (client)' ~NativeInputEventReceiver.
01-24 20:40:21.776  2978  3003 D PersonaManagerService: notifyActivityDrawn:u0:f
r.geonature.sync.ui.home.HomeActivity
01-24 20:40:21.783  2978  3003 I ActivityManager: Displayed fr.geonature.sync/.u
i.home.HomeActivity: +1s37ms (total +2m27s425ms)
01-24 20:40:21.803  2978  6853 D PackageManager: setEnabledSetting : userId = 0
packageName = fr.geonature.sync cmp = androidx.work.impl.background.systemalarm.
RescheduleReceiver newState = 1 callingPackage = 10054/fr.geonature.sync
01-24 20:40:21.812  2635  2635 D SurfaceFlinger:        HWC | ed10b0c0 | 0000 |
0020 | 00 | 0100 | RGBA_8888   |    0.0,    0.0,  720.0, 1280.0 |    0,    0,  7
20, 1280 | fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity[12364]#0
01-24 20:40:21.812  2635  2635 D SurfaceFlinger:        HWC | ed466f00 | 0000 |
0020 | 00 | 0105 | RGBA_8888   |    0.0,    0.0,  720.0, 1280.0 |    0,    0,  7
20, 1280 | Splash Screen fr.geonature.sync[2978]#0
01-24 20:40:21.856  2978  6853 D MARsPolicyManager: updateResetTimeForDisabler p
kgName = fr.geonature.sync, userId = 0
01-24 20:40:21.910 12364 12417 I fr.geonature.sync.sync.DataSyncWorker: starting
 local data synchronization from 'http://demo.geonature.fr'...
01-24 20:40:21.943  2978  3087 D MdnieScenarioControlService:  packageName : fr.
geonature.sync    className : fr.geonature.sync.ui.home.HomeActivity
01-24 20:40:21.945  2635  2635 D SurfaceFlinger:        HWC | ed466180 | 0000 |
0020 | 00 | 0100 | RGBA_8888   |    0.0,    0.0,  720.0, 1280.0 |    0,    0,  7
20, 1280 | fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity[12364]#0
01-24 20:40:21.945  2978  3045 E WindowManager: win=Window{7c1c9f4 u0 Splash Scr
een fr.geonature.sync EXITING} destroySurfaces: appStopped=false win.mWindowRemo
valAllowed=true win.mRemoveOnExit=true win.mViewVisibility=0, caller=com.android
.server.wm.AppWindowToken.destroySurfaces:748 com.android.server.wm.AppWindowTok
en.destroySurfaces:732 com.android.server.wm.WindowState.onExitAnimationDone:564
6 com.android.server.wm.WindowStateAnimator.stepAnimationLocked:553 com.android.
server.wm.DisplayContent.lambda$-com_android_server_wm_DisplayContent_21578:476

01-24 20:40:21.945  2978  3045 I WindowManager: Destroying surface #7107af: Surf
ace(name=Splash Screen fr.geonature.sync) called by com.android.server.wm.Window
StateAnimator.destroySurface:2617 com.android.server.wm.WindowStateAnimator.dest
roySurfaceLocked:1026 com.android.server.wm.WindowState.destroyOrSaveSurfaceUnch
ecked:3921 com.android.server.wm.WindowState.destroySurface:3867 com.android.ser
ver.wm.AppWindowToken.destroySurfaces:748 com.android.server.wm.AppWindowToken.d
estroySurfaces:732 com.android.server.wm.WindowState.onExitAnimationDone:5646 co
m.android.server.wm.WindowStateAnimator.stepAnimationLocked:553
01-24 20:40:21.945  2635  2651 I SurfaceFlinger: id=79 Removed Splash Screen fr.
geonature.sync[2978]#0 (3/5)
01-24 20:40:21.955  2635  2651 I SurfaceFlinger: id=79 Removed Splash Screen fr.
geonature.sync[2978]#0 (-2/5)
01-24 20:40:21.960  2635  2635 I Layer   : id=79 onRemoved Splash Screen fr.geon
ature.sync[2978]#0
01-24 20:40:22.187 12364 12417 I fr.geonature.sync.sync.DataSyncWorker: local da
ta synchronization finished with failed tasks in 277ms
01-24 20:40:22.192 12364 12384 I WM-WorkerWrapper: Worker result FAILURE for Wor
k [ id=1759aa85-51ac-43ac-af09-b5e46e5105c7, tags={ fr.geonature.sync.sync.DataS
yncWorker, data_sync_worker_tag } ]
01-24 20:40:22.203  2978  2989 D PackageManager: setEnabledSetting : userId = 0
packageName = fr.geonature.sync cmp = androidx.work.impl.background.systemalarm.
RescheduleReceiver newState = 2 callingPackage = 10054/fr.geonature.sync
01-24 20:40:22.227  2978  2989 I ActivityManager: START u0 {act=null typ=null fl
g=0x20000 cmp=ComponentInfo{fr.geonature.sync/fr.geonature.sync.ui.login.LoginAc
tivity}} from uid 10054
01-24 20:40:22.227  2978  2989 D MARsPolicyManager: updateResetTimeForDisabler p
kgName = fr.geonature.sync, userId = 0
01-24 20:40:22.260  2978  2999 V MARsPolicyManager: handelAlertToastWindowStarte
d pkgName = fr.geonature.sync, userId = 0
01-24 20:40:22.274  2978  3273 D GameManagerService: handleForegroundChange(). p
kgName: fr.geonature.sync, clsName: fr.geonature.sync.ui.login.LoginActivity,FgA
ctivityName:fr.geonature.sync/.ui.login.LoginActivity
01-24 20:40:22.274  2978  2989 D MARsPolicyManager: onPackageResumedFG pkgName =
 fr.geonature.sync, userId = 0
01-24 20:40:22.522 12364 12394 I fr.geonature.commons.settings.AppSettingsManage
r: Loading settings from '/storage/emulated/0/Android/data/fr.geonature.sync/set
tings_sync.json'...
01-24 20:40:22.522 12364 12394 W fr.geonature.commons.settings.AppSettingsManage
r: '/storage/emulated/0/Android/data/fr.geonature.sync/settings_sync.json' not f
ound
01-24 20:40:22.546 12364 12364 E AndroidRuntime: Process: fr.geonature.sync, PID
: 12364
01-24 20:40:22.546 12364 12364 E AndroidRuntime: java.lang.RuntimeException: Una
ble to start activity ComponentInfo{fr.geonature.sync/fr.geonature.sync.ui.login
.LoginActivity}: java.lang.ClassCastException: androidx.appcompat.widget.Content
FrameLayout cannot be cast to androidx.constraintlayout.widget.ConstraintLayout
01-24 20:40:22.546 12364 12364 E AndroidRuntime:        at fr.geonature.sync.ui.
login.LoginActivity$loadAppSettings$1.onChanged(LoginActivity.kt:127)
01-24 20:40:22.546 12364 12364 E AndroidRuntime:        at fr.geonature.sync.ui.
login.LoginActivity$loadAppSettings$1.onChanged(LoginActivity.kt:24)
01-24 20:40:22.552  2978  2989 W ActivityManager: crash : fr.geonature.sync,0
01-24 20:40:22.554  2978  2989 W ActivityManager:   Force finishing activity fr.
geonature.sync/.ui.login.LoginActivity
01-24 20:40:22.559  2978  2989 W ActivityManager:   Force finishing activity fr.
geonature.sync/.ui.home.HomeActivity
01-24 20:40:22.560  2978  2989 W MultiScreenManagerService: moveTaskBackToDispla
yIfNeeded(): root activity or app is null, task=TaskRecord{50562f2 #109 A=fr.geo
nature.sync U=0 StackId=1 sz=2}, rootActivity=null
01-24 20:40:22.570  2978  2995 I ActivityManager: Showing crash dialog for packa
ge fr.geonature.sync u0
01-24 20:40:22.616  2978  2995 V WindowManager: Relayout Window{2273868 u0 Appli
cation Error: fr.geonature.sync}: viewVisibility=0 req=676x289 WM.LayoutParams{(
0,0)(wrapxwrap) gr=#11 sim=#120 ty=2003 fl=#1820002 pfl=0x110 fmt=-3 wanim=0x103
02ec surfaceInsets=Rect(4, 4 - 4, 4) needsMenuKey=2 colorMode=0 naviIconColor=0}

01-24 20:40:22.616 10569 11493 W PkgUtils: p: fr.geonature.sync, u:0
01-24 20:40:22.620  2635  2635 I SurfaceFlinger: id=82 createSurf (684x297),1 fl
ag=4, Application Error: fr.geonature.sync[2978]#0
01-24 20:40:22.641  2978  2995 D WindowManager: finishDrawingWindow: Window{2273
868 u0 Application Error: fr.geonature.sync} mDrawState=DRAW_PENDING
01-24 20:40:22.683  2635  2635 D SurfaceFlinger:        HWC | ed466180 | 0000 |
0020 | 00 | 0100 | RGBA_8888   |    0.0,    0.0,  720.0, 1280.0 |    0,    0,  7
20, 1280 | fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity[12364]#0
01-24 20:40:22.683  2635  2635 D SurfaceFlinger:       GLES | ed10b180 | 0000 |
0000 | 00 | 0105 | RGBA_8888   |    0.0,    0.0,  684.0,  297.0 |   45,  527,  6
74,  800 | Application Error: fr.geonature.sync[2978]#0
01-24 20:40:22.685  2978 10186 D PackageManager: getComponentMetadataForIconTray
 : fr.geonature.sync.ui.home.HomeActivity does not exist in mServices
01-24 20:40:22.685  2978 10186 D PackageManager: getComponentMetadataForIconTray
 : fr.geonature.sync.ui.home.HomeActivity does not exist in mProviders
01-24 20:40:22.685  2978 10186 D PackageManager: getComponentMetadataForIconTray
 : fr.geonature.sync.ui.home.HomeActivity does not exist in mReceivers
01-24 20:40:22.685  3378  3789 I ApplicationPackageManager: return adaptive icon
 for fr.geonature.sync
01-24 20:40:22.700  2635  2635 D SurfaceFlinger:        HWC | ed466180 | 0000 |
0020 | 00 | 0100 | RGBA_8888   |    0.0,    0.0,  720.0, 1280.0 |    0,    0,  7
20, 1280 | fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity[12364]#0
01-24 20:40:22.700  2635  2635 D SurfaceFlinger:       GLES | ed10b180 | 0000 |
0000 | 00 | 0105 | RGBA_8888   |    0.0,    0.0,  684.0,  297.0 |   38,  524,  6
81,  803 | Application Error: fr.geonature.sync[2978]#0
01-24 20:40:23.056  2978  2994 W ActivityManager: Activity pause timeout for Act
ivityRecord{d06fcb u0 fr.geonature.sync/.ui.login.LoginActivity t109 f}
01-24 20:40:23.169  2978  3045 V WindowManager: Setting visibility of Window{73e
2c78 u0 fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity}: false, mViewV
isibilityUpdateCompleted=false, caller=com.android.server.wm.WindowContainer.sen
dAppVisibilityToClients:443 com.android.server.wm.AppWindowToken.setClientHidden
:400 com.android.server.wm.AppWindowToken.setVisibility:411 com.android.server.w
m.WindowSurfacePlacer.handleClosingApps:525 com.android.server.wm.WindowSurfaceP
lacer.handleAppTransitionReadyLocked:384
01-24 20:40:23.221  2635  2635 D SurfaceFlinger:       GLES | ed466180 | 0000 |
0020 | 00 | 0105 | RGBA_8888   |    0.0,    0.0,  720.0, 1280.0 |   12,   13,  7
12, 1257 | fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity[12364]#0
01-24 20:40:23.221  2635  2635 D SurfaceFlinger:       GLES | ed10b180 | 0000 |
0000 | 00 | 0105 | RGBA_8888   |    0.0,    0.0,  684.0,  297.0 |   18,  515,  7
02,  812 | Application Error: fr.geonature.sync[2978]#0
01-24 20:40:23.354  2635  2635 D SurfaceFlinger: 0,  297.0 |   18,  515,  702,
812 | Application Error: fr.geonature.sync[2978]#0
01-24 20:40:31.840  3342  3342 D ImsResolver: maybeAddedImsService, packageName:
 fr.geonature.sync
01-24 20:40:31.842  3378  3378 D MetadataParser: onPackageUpdated() key = fr.geo
nature.sync
01-24 20:40:31.998  2978  2978 I PersonaManagerService::Proxy: newPackage is fr.
geonature.sync
01-24 20:40:32.001  2978  2978 D BackupManagerService: Received broadcast Intent
 { act=android.intent.action.PACKAGE_CHANGED dat=package:fr.geonature.sync flg=0
x45000010 (has extras) }
01-24 20:40:32.001  2978  2978 I BackupManagerService: Package fr.geonature.sync
 changed; rechecking
01-24 20:40:32.163  2978  2993 I PrintManagerService: onPackageModified fr.geona
ture.sync
01-24 20:40:32.167  4178  5117 D LauncherApps: onPackageChanged 0,fr.geonature.s
ync
01-24 20:40:32.167  4178  4178 D Launcher.Model: onPackageChanged:fr.geonature.s
ync user:UserHandle{0}
01-24 20:40:32.167  4178  4278 D Launcher.Model: Loader.updatePackage fr.geonatu
re.sync
01-24 20:40:32.181  4178  4278 V LauncherApps: Returning activity for profile Us
erHandle{0} : ComponentInfo{fr.geonature.sync/fr.geonature.sync.ui.home.HomeActi
vity}
01-24 20:40:32.223  2978 12264 D PackageManager: getComponentMetadataForIconTray
 : fr.geonature.sync.ui.home.HomeActivity does not exist in mServices
01-24 20:40:32.223  2978 12264 D PackageManager: getComponentMetadataForIconTray
 : fr.geonature.sync.ui.home.HomeActivity does not exist in mProviders
01-24 20:40:32.223  2978 12264 D PackageManager: getComponentMetadataForIconTray
 : fr.geonature.sync.ui.home.HomeActivity does not exist in mReceivers
01-24 20:40:32.224  4178  4278 D LauncherActivityInfo: packageName: fr.geonature
.sync, supportTheme: false, height: 144, width: 144, density: 480
01-24 20:40:32.238  4178  4278 V LauncherApps: Returning activity for profile Us
erHandle{0} : ComponentInfo{fr.geonature.sync/fr.geonature.sync.ui.home.HomeActi
vity}
01-24 20:40:32.238  4178  4278 D DataLoader: updatePackage:fr.geonature.sync
01-24 20:40:32.240  4178  4278 I AppsModel: addOrUpdater cn = ComponentInfo{fr.g
eonature.sync/fr.geonature.sync.ui.home.HomeActivity} , UserHandle{0}
01-24 20:40:32.241  4178  4278 I AppsModel: addOrUpdater update item = IconInfo(
title=Sync intent=Intent { act=android.intent.action.MAIN cat=[android.intent.ca
tegory.LAUNCHER] flg=0x10200000 cmp=fr.geonature.sync/.ui.home.HomeActivity (has
 extras) } id=161 type=0 container=-102 screen=2 cellX=2 cellY=1 spanX=1 spanY=1
 rank=6 hidden=0 dropPos=null user=UserHandle{0})
01-24 20:40:33.444  2978  2994 W ActivityManager: Activity destroy timeout for A
ctivityRecord{d06fcb u0 fr.geonature.sync/.ui.login.LoginActivity t109 f}
01-24 20:40:33.445  2978  2994 W ActivityManager: Activity destroy timeout for A
ctivityRecord{a16262e u0 fr.geonature.sync/.ui.home.HomeActivity t109 f}
01-24 20:40:33.447  2978  2994 I WindowManager: Destroying surface #3b9468c: Sur
face(name=fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity) called by co
m.android.server.wm.WindowStateAnimator.destroySurface:2617 com.android.server.w
m.WindowStateAnimator.destroySurfaceLocked:1026 com.android.server.wm.WindowStat
e.removeImmediately:2618 com.android.server.wm.WindowState.removeIfPossible:2810
 com.android.server.wm.WindowState.removeIfPossible:2640 com.android.server.wm.W
indowToken.removeAllWindowsIfPossible:144 com.android.server.wm.AppWindowToken.r
emoveIfPossible:632 com.android.server.wm.AppWindowToken.onRemovedFromDisplay:70
0
01-24 20:40:33.447  2635  3660 I SurfaceFlinger: id=80 Removed fr.geonature.sync
/fr.geonature.sync.ui.home.HomeActivity[12364]#0 (3/6)
01-24 20:40:33.448  2635  2635 I Layer   : id=80 onRemoved fr.geonature.sync/fr.
geonature.sync.ui.home.HomeActivity[12364]#0
01-24 20:40:33.448  2635  3660 I SurfaceFlinger: id=80 Removed fr.geonature.sync
/fr.geonature.sync.ui.home.HomeActivity[12364]#0 (-2/6)

Message si non connecté

Désormais si on n'est pas connecté au réseau l'application fonctionne.
Cependant rien ne l'indique.
Si je n'ai pas de connexion internet et que je tente de me connecter, un message indique "Erreur d'authentification", la synchro ne se lance pas sans rien indiquer.
Il serait bien plus clair d'avoir un message indiquant que l'on n'est pas connecté à internet.

Deconnection, perte des données à synchroniser, données par défaut...

Nous avons eu des comportements étranges difficilement reproductibles.

Cas 1 : l'utilisatrice n'avait pas utilisé l'application depuis un moment

  • jour 1 : elle saisit 3 observations
  • jour 2 : elle veut ressaisir une observation et là il n'y a plus les données observateurs, jdd et les 3 relevés qu'elle avait créés précédemment ne sont plus visibles ni dans sync ni dans occtax
  • jour 3: elle vient nous voir et nous constatons qu'effectivement il n'y a pas de données à synchroniser. Elle va sur l'application sync qui lui demande de se connecter, elle se connecte et la synchronisation (en mode récupération des données depuis GN2) est lancée. Nous sortons de sync, et là sur l'icône de l'application sync le chiffre "3" apparait (comme par magie), nous cliquons sur sync et les relevés sont bien synchronisés.

Cas 2 : Test cafouilleux suite à ce problème (reproduit 1 seule fois)
Après un passage en mode avion, et nous ne savons pas quoi, les données observateurs, jdd ne sont plus accessibles.

Cas 3 : Déconnection de l'utilisateur
1 / Se déconnecter
2 / Créer un relevé
3 / 1 relevé non synchronisé apparait dans occtax (et pas dans les relevés en cours cf issue #78)
4 / 0 relevé non synchronisé sous sync qui n'affiche pas la page d'authentification
5 / Authentification de l'utilisateur
6 / Toujours aucun relevé à synchronisé dans sync (alors qu'il y en a 1 présent dans occtax)
7 / Fermeture de l'application
8 / 1 relevé non synchronisé sous sync

Sync 0.3 et Geonature - Questions de fonctionnement

Nous avons installé Geonature 2.3.2
En installant Sync 0.3, j'ai l'impression que la version 2.3.2 n'intègre pas les paginations de routes, est-ce le cas?
Dans notre cas, ça ne fonctionne pas si je mets dans les paramètres page_max_retry > 1 mais je peux charger mes 5000+ taxons en mettant page_max_retry=1 et page_size = 6000
Par contre je me pose des questions sur mon color_taxon qui pourrait être très gros

Autre question: dans l'idéal, j'aimerai que les agents se loggent sur leur mobile dans sync avec leur nom d'utilisateur. Quelles autorisations minimales faut-il leur donner dans le cruved pour qu'ils puissent télécharger tout ce qu'il faut dans Sync. Pour épurer au maximum leur interface web geonature, je ne leur donne aucun droit sur metadonnées, admin mais j'ai l'impression que c'est ça qui coince.
@camillemonchicourt Comment ferez vous aux Ecrins ? Utiliser un compte générique pour la synchronisation?

Test appli Sync

  • Apk Sync 0.0.2 installé sur mobile avec Android 8 sans adb.
  • data.db mis sur SDCard.

Quand je démarre l'application Sync sur le mobile, rien de spécial se passe. j'ai juste une interface vide.
Que devrait on avoir ?

Aucun relevé à synchroniser

L'application de synchronisation n'a aucun relevé à synchroniser alors qu'il y a bien 1 relevé non synchronisé dans occtax

image

image
image

Pb de connexion

J'ai installé la version sync-1.0.0-generic-release.apk et lorsque je clique sur l'icone de l'application un écran blanc s'affiche et disparaît immédiatement.
En contrôlant les logs , j'ai le message d'erreur suivant
C:\Users\S227098>adb logcat | findstr fr.geonature.sync|findstr URL
07-28 08:26:04.842 14745 14745 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity}: java.lang.IllegalArgumentException: Invalid URL host: "obs-nature.org "
07-28 08:26:07.310 14814 14814 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity}: java.lang.IllegalArgumentException: Invalid URL host: "obs-nature.org "
07-28 08:26:08.722 14853 14853 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity}: java.lang.IllegalArgumentException: Invalid URL host: "obs-nature.org "
07-28 08:26:10.171 14900 14900 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity}: java.lang.IllegalArgumentException: Invalid URL host: "obs-nature.org "
07-28 08:26:11.105 14940 14940 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.geonature.sync/fr.geonature.sync.ui.home.HomeActivity}: java.lang.IllegalArgumentException: Invalid URL host: "obs-nature.org "

Les différentes API fonctionnent correctement.

J'ai désinstallé et résinstallé l'application et j'ai toujours le même problème. J'ai du mal à identifier où est stocké cette URL.

merci d'avance pour votre retour

Le SRID est un paramètre

Dans GN2 le SRID est un paramètre global disponible dans la table gn_communs.t_parameters.
Il doit être utilisé pour toute écriture dans les champs the_geom_local

Impossibilité de charger Sync

J'essaye d'installer sync 0.1.3 comme je l'avais fait auparavant

  • Install de l'apk

  • Copie du data.db dans le dossier Android/data/fr.geonature.sync/databases

Mais ça ne fonctionne pas (aucun observateur ni taxon ne remonte).
J'ai vu que cette nouvelle release permettait de se connecter sur un geonature 2. Est-il nécessaire de le faire?
Nous n'avons pas de geonature 2 pour l'instant et je voulais surtout tester OccTax sur mobile (ce que je ne peux pas faire si je n'ai pas d'observateurs qui remontent avec Sync)

Problème synchronisation

Bonjour,
Une utilisatrice vient de remonter un problème avec l'application sur mobile.

  1. une saisie effectuée le 19/01/2021 n'a pas été remonté dans l'application userhub.
    ps : nous avons vérifié en faisant en live une saisie bidon et à priori tout fonctionne puisque la synchronisation s'est effectuée et nous avons constaté l'apparition de la donnée dans Geonature.
    sur le téléphone dans le répertoire /storage/emulated/0/Android/data/fr.geonature.occtax/inputs j'ai trouvé le fichier json contenant la saisie effectuée.
    Il est en pièce jointe.

J'ai tenté de modifier le fichier en remplaçant la valeur id_nomenclature_obs_meth dans le fichier par id_nomenclature_obs_technique comme indiqué dans 1 issue précédente comme solution dans le cas de blocage de la synchro.
Cela n'a pas fonctionné.
Peut-on récupérer cette saisie ? et comment ?

  1. Cette utilisatrice m'a aussi indiqué la disparition pure et simple de certaines saisies. Je n'ai pas trouvé trace ni en base sous Geonature dans la table synthese, ni dans le répertoire input d'occtax sur le téléphone.
    Pourtant à cette date le 23/09/2020 en l'occurence, d'autres saisies ont été parfaitement intégrées.
    Auriez-vous une explication sur l'origine du problème ? Y a t-il moyen de vérifier sur le téléphone ce qu'il s'est passé ?
    (trace dans la base sqlite, log ou fichier ....)
    D'avance merci,
    Christian Bièche
    Cistude Nature
    Pour info, nous sommes toujours sur une version geotnature 2.4.1 et une version téléphone occtax-1.0.0-generic-release.apk
    input_occtax_159449322.zip

Perte des informations lors d'une synchronisation partielle

Parfois la synchronisation bloque car l'utilisateur pert sa connexion ou pour une raison encore inconnue. Ce qui a pour conséquence que l'utilisateur n'a plus accès à certaines espèces ou aux différents paramètres sur les conditions d'observation, les éléments biologiques etc... lorsqu'il est sur le terrain et sans réseau (c'est forcément à ce moment là qu'il s'en rend compte).

Un des soucis vient du fait que les deux synchronisations ce font en même temps :

  • envoie des observations (cours)
  • récupération des données de GN2 (long chez nous a cause des données de mailles)

Souvent l'utilisateur ouvre l'application sync pour envoyer ces relevés et la récupération des données se lance sans qu'il le veuille (et bien souvent sans le comprendre) et il ne fait pas attention que tout soit bien fini.

Il faudrait dans la mesure du possible

  • Faire en sorte que si la synchro soit partielle, les données ne soient pas corrompues
  • Dissocier les deux mécanismes de synchronisation

Configuration centralisée optionnelle ?

@amandine-sahl a remonté un problème de synchronisation des données qui semblait applicatif : #26

En fait celui-ci est du fait que la configuration centralisée n'avait pas été mise en place sur son serveur GeoNature.
En effet celle-ci est indiquée comme optionnelle dans la documentation.
Alors qu'en fait si la table gn_commons.t_mobile_apps n'est pas renseignée, la route api/gn_commons/t_mobile_apps renvoie une erreur 404 et cela fait planter la synchronisation des données.
De la même manière, si un fichier de configuration n'est pas disponible sur le serveur GeoNature, alors cette même route api/gn_commons/t_mobile_apps renvoie une internal error (500) et cela fait aussi planter la synchronisation des données.

Plusieurs possibilités :

  • Côté GeoNature, faire en sorte que la route ne soit pas en 404 ni 500 quand les infos ne sont pas renseignés
  • Imposer la centralisation
  • Faire en sorte que la synchro fonctionne même si la route de centralisation ne renvoie rien ou est en échec
  • Mettre un message plus clair quand la route ne fonctionne pas
  • Ajouter des tests et des vérifications des erreurs dans l'application Sync-mobile

Il me semble dommage d'imposer la configuration centralisée.
Ça peut être gênant d'imposer les mêmes paramètres à tous les utilisateurs d'une instance (chemin des fichiers carto, étendue spatiale...) dans des contextes associatifs par exemple.

Pour commencer :

  • Je vais essayer de revoir la documentation pour indiquer qu'il faut vérifier le contenu de la route de configuration centralisée
  • On va voir côté GeoNature si on peut éviter la 404 quand la table gn_commons.t_mobile_apps n'est pas renseignée

Mais il serait utile d'avoir des vérifications et un message au niveau de Sync-mobile quand elle rencontre un soucis avec la route.

Et dans un second temps, voir si on peut imaginer un fonctionnement opérationnel sans configuration centralisée.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.