From 126e65ffca97bc5850a678be95a4be8e99a3a61d Mon Sep 17 00:00:00 2001 From: Sugat Bajracharya Date: Wed, 2 Oct 2024 15:58:43 +0545 Subject: [PATCH] fix(#376): fix issue of OpenSettingsDialogFragment class not being able to find caller Activity --- .../mobile/OpenSettingsDialogFragment.java | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/medicmobile/webapp/mobile/OpenSettingsDialogFragment.java b/src/main/java/org/medicmobile/webapp/mobile/OpenSettingsDialogFragment.java index bf9b4ec7..7576ec63 100644 --- a/src/main/java/org/medicmobile/webapp/mobile/OpenSettingsDialogFragment.java +++ b/src/main/java/org/medicmobile/webapp/mobile/OpenSettingsDialogFragment.java @@ -5,6 +5,9 @@ import android.app.Fragment; import android.content.Intent; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; @@ -19,6 +22,8 @@ public class OpenSettingsDialogFragment extends Fragment { private long lastTimeTap = 0; private GestureHandler swipeGesture; private static final int TIME_BETWEEN_TAPS = 500; + private View mainView; + private boolean isViewSetup = false; private final OnTouchListener onTouchListener = new OnTouchListener() { @SuppressLint("ClickableViewAccessibility") @@ -33,8 +38,32 @@ public boolean onTouch(View view, MotionEvent event) { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - View view = getActivity().findViewById(R.id.wbvMain); - view.setOnTouchListener(onTouchListener); + setRetainInstance(true); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + setupViewWithRetry(); + } + + private void setupViewWithRetry() { + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + if (getActivity() != null && !isViewSetup) { + View view = getActivity().findViewById(R.id.wbvMain); + + if (view != null) { + mainView = view; + mainView.setOnTouchListener(onTouchListener); + isViewSetup = true; + } else { + new Handler(Looper.getMainLooper()).postDelayed(this, 100); + } + } + } + }); } private void countTaps(MotionEvent event) {