1515import android .os .Bundle ;
1616import android .os .Environment ;
1717import android .view .View ;
18+ import android .view .ViewGroup ;
1819import android .view .inputmethod .EditorInfo ;
1920import android .view .inputmethod .InputMethodManager ;
2021import android .widget .EditText ;
3435
3536import com .squareup .picasso .Picasso ;
3637
38+ import org .openimis .imisclaims .adapter .FamilyMemberAdapter ;
39+ import org .openimis .imisclaims .domain .entity .FamilyMember ;
3740import org .openimis .imisclaims .domain .entity .Insuree ;
3841import org .openimis .imisclaims .domain .entity .Policy ;
42+ import org .openimis .imisclaims .network .GetFamilyMembersGraphQLRequest ;
3943import org .openimis .imisclaims .network .exception .HttpException ;
4044import org .openimis .imisclaims .tools .Log ;
4145import org .openimis .imisclaims .usecase .FetchInsureeInquire ;
@@ -57,9 +61,12 @@ public class EnquireActivity extends ImisActivity {
5761 TextView tvCHFID , tvName , tvGender , tvDOB ;
5862 ImageButton btnGo , btnScan ;
5963 ListView lv ;
64+ ListView listViewFamilyMembers ;
65+ LinearLayout llFamilyMembers ;
6066 ImageView iv ;
6167 LinearLayout ll ;
6268 ProgressDialog pd ;
69+ FamilyMemberAdapter familyMemberAdapter ;
6370
6471 private boolean ZoomOut = false ;
6572 private int orgHeight , orgWidth ;
@@ -95,6 +102,8 @@ protected void onCreate(Bundle savedInstanceState) {
95102 btnGo = findViewById (R .id .btnGo );
96103 btnScan = findViewById (R .id .btnScan );
97104 lv = findViewById (R .id .listView1 );
105+ listViewFamilyMembers = findViewById (R .id .listViewFamilyMembers );
106+ llFamilyMembers = findViewById (R .id .llFamilyMembers );
98107 ll = findViewById (R .id .llListView );
99108
100109 iv .setOnClickListener (v -> {
@@ -261,7 +270,8 @@ private Insuree getDataFromDb(String chfid) {
261270 /* gender = */ gender ,
262271 /* photoPath = */ null ,
263272 /* photo = */ photo ,
264- /* policies = */ policies
273+ /* policies = */ policies ,
274+ /* familyUuid = */ null // Pas d'UUID famille en mode hors ligne
265275 );
266276 } catch (Exception e ) {
267277 Log .e (LOG_TAG , "Parsing offline enquire failed" , e );
@@ -435,6 +445,19 @@ public void renderResult(@Nullable Insuree insuree) {
435445 );
436446
437447 lv .setAdapter (adapter );
448+
449+ // Récupérer et afficher les membres de famille
450+ Log .d (LOG_TAG , "Family UUID: " + (insuree .getFamilyUuid () != null ? insuree .getFamilyUuid () : "null" ));
451+ if (insuree .getFamilyUuid () != null && !insuree .getFamilyUuid ().isEmpty ()) {
452+ Log .d (LOG_TAG , "Loading family members for UUID: " + insuree .getFamilyUuid ());
453+ loadFamilyMembers (insuree .getFamilyUuid ());
454+ } else {
455+ // Masquer la section famille si pas d'UUID
456+ Log .d (LOG_TAG , "No family UUID found, hiding family section" );
457+ if (llFamilyMembers != null ) {
458+ llFamilyMembers .setVisibility (View .GONE );
459+ }
460+ }
438461 }
439462
440463 protected String buildEnquireValue (@ Nullable Number value , @ StringRes int labelId ) {
@@ -446,13 +469,103 @@ protected String buildEnquireValue(@Nullable Number value, @StringRes int labelI
446469 }
447470 }
448471
472+ private void loadFamilyMembers (String familyUuid ) {
473+ Log .d (LOG_TAG , "loadFamilyMembers called with UUID: " + familyUuid );
474+ if (!global .isNetworkAvailable ()) {
475+ // Mode hors ligne - masquer la section famille
476+ Log .d (LOG_TAG , "Network not available, hiding family section" );
477+ if (llFamilyMembers != null ) {
478+ llFamilyMembers .setVisibility (View .GONE );
479+ }
480+ return ;
481+ }
482+
483+ Log .d (LOG_TAG , "Network available, starting family members request" );
484+ new Thread (() -> {
485+ try {
486+ GetFamilyMembersGraphQLRequest request = new GetFamilyMembersGraphQLRequest ();
487+ List <FamilyMember > familyMembers = request .get (familyUuid );
488+
489+ Log .d (LOG_TAG , "Family members received: " + (familyMembers != null ? familyMembers .size () : "null" ));
490+
491+ runOnUiThread (() -> {
492+ if (familyMembers != null && !familyMembers .isEmpty ()) {
493+ Log .d (LOG_TAG , "Displaying " + familyMembers .size () + " family members" );
494+ if (familyMemberAdapter == null ) {
495+ familyMemberAdapter = new FamilyMemberAdapter (this , familyMembers );
496+ listViewFamilyMembers .setAdapter (familyMemberAdapter );
497+ } else {
498+ familyMemberAdapter .updateData (familyMembers );
499+ }
500+ // Forcer la ListView à afficher tous les éléments
501+ setListViewHeightBasedOnChildren (listViewFamilyMembers );
502+ llFamilyMembers .setVisibility (View .VISIBLE );
503+ Log .d (LOG_TAG , "Family section set to VISIBLE" );
504+ } else {
505+ Log .d (LOG_TAG , "No family members found, hiding section" );
506+ llFamilyMembers .setVisibility (View .GONE );
507+ }
508+ });
509+ } catch (Exception e ) {
510+ Log .e (LOG_TAG , "Error loading family members" , e );
511+ runOnUiThread (() -> {
512+ if (llFamilyMembers != null ) {
513+ llFamilyMembers .setVisibility (View .GONE );
514+ }
515+ });
516+ }
517+ }).start ();
518+ }
519+
520+ private void setListViewHeightBasedOnChildren (ListView listView ) {
521+ ListAdapter listAdapter = listView .getAdapter ();
522+ if (listAdapter == null ) {
523+ return ;
524+ }
525+
526+ // Si pas d'éléments, définir la hauteur à 0
527+ if (listAdapter .getCount () == 0 ) {
528+ ViewGroup .LayoutParams params = listView .getLayoutParams ();
529+ params .height = 0 ;
530+ listView .setLayoutParams (params );
531+ return ;
532+ }
533+
534+ // Optimisation: mesurer seulement le premier élément et multiplier par le nombre d'éléments
535+ // Cela évite les appels multiples à getView() qui créent des doublons
536+ int desiredWidth = View .MeasureSpec .makeMeasureSpec (listView .getWidth (), View .MeasureSpec .AT_MOST );
537+ View listItem = listAdapter .getView (0 , null , listView );
538+ listItem .measure (desiredWidth , View .MeasureSpec .UNSPECIFIED );
539+ int itemHeight = listItem .getMeasuredHeight ();
540+
541+ // Calculer la hauteur totale basée sur la hauteur d'un seul élément
542+ int totalHeight = itemHeight * listAdapter .getCount ();
543+
544+ ViewGroup .LayoutParams params = listView .getLayoutParams ();
545+ // Ajouter les diviseurs entre les éléments
546+ params .height = totalHeight + (listView .getDividerHeight () * (listAdapter .getCount () - 1 ));
547+ listView .setLayoutParams (params );
548+ listView .requestLayout ();
549+
550+ Log .d (LOG_TAG , "ListView height set to: " + params .height + " for " + listAdapter .getCount () + " items (optimized)" );
551+ }
552+
449553 private void ClearForm () {
450554 tvCHFID .setText (getResources ().getString (R .string .CHFID ));
451555 tvName .setText (getResources ().getString (R .string .InsureeName ));
452556 tvDOB .setText (getResources ().getString (R .string .DOB ));
453557 tvGender .setText (getResources ().getString (R .string .Gender ));
454558 iv .setImageResource (R .drawable .noimage );
455- ll .setVisibility (View .INVISIBLE );
559+ ll .setVisibility (View .GONE );
456560 lv .setAdapter (null );
561+
562+ // Nettoyer aussi la liste des membres de famille
563+ if (listViewFamilyMembers != null ) {
564+ listViewFamilyMembers .setAdapter (null );
565+ }
566+ if (llFamilyMembers != null ) {
567+ llFamilyMembers .setVisibility (View .GONE );
568+ }
569+ familyMemberAdapter = null ;
457570 }
458571}
0 commit comments