From 06aca573047feb6f94cc0c3498286c9b03577ce1 Mon Sep 17 00:00:00 2001
From: s22thong <sylvain.thong@gmail.com>
Date: Tue, 11 Mar 2025 14:58:02 +0100
Subject: [PATCH] fix(UX): AlertDialog for Call permission in DisplayUser
 Fragment

---
 .../DisplayUserFragment.java                  | 53 ++++++++++++++++++-
 1 file changed, 52 insertions(+), 1 deletion(-)

diff --git a/app/src/main/java/fr/imt_atlantique/myfirstapplication/DisplayUserFragment.java b/app/src/main/java/fr/imt_atlantique/myfirstapplication/DisplayUserFragment.java
index 9396dd8..2fe5db5 100644
--- a/app/src/main/java/fr/imt_atlantique/myfirstapplication/DisplayUserFragment.java
+++ b/app/src/main/java/fr/imt_atlantique/myfirstapplication/DisplayUserFragment.java
@@ -1,7 +1,14 @@
 package fr.imt_atlantique.myfirstapplication;
 
+import android.Manifest;
+import android.app.AlertDialog;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.net.Uri;
 import android.os.Bundle;
 
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
 import androidx.fragment.app.Fragment;
 
 import android.view.LayoutInflater;
@@ -9,6 +16,9 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.widget.LinearLayout;
 import android.widget.TextView;
+import android.widget.Toast;
+
+import com.google.android.material.snackbar.Snackbar;
 
 import java.util.ArrayList;
 
@@ -21,7 +31,6 @@ public class DisplayUserFragment extends Fragment {
     private static final String ARG_BIRTH_DATE = "paramBirthDate";
     private static final String ARG_PHONE_NUMBERS_LIST = "paramPhoneNumbersList";
 
-    // TODO: Rename and change types of parameters
     private String mFirstName;
     private String mLastName;
     private String mBirthCity;
@@ -29,6 +38,8 @@ public class DisplayUserFragment extends Fragment {
     private String mBirthDate;
     private ArrayList<String> mPhoneNumbersList;
 
+    private View rootView;
+
     public DisplayUserFragment() {
         // Required empty public constructor
     }
@@ -87,6 +98,46 @@ public class DisplayUserFragment extends Fragment {
             phonesLinearLayout.addView(phoneView);
         }
 
+        rootView = view;
         return view;
     }
+
+    public void callPhoneNumber(View v) {
+        ViewGroup phoneRow = (ViewGroup) v.getParent();
+        TextView phoneTextView = phoneRow.findViewById(R.id.secondPhoneNumberTextView);
+        String phoneNumber = phoneTextView.getText().toString();
+
+        if (phoneNumber.trim().isEmpty()) {
+            Snackbar.make(rootView.findViewById(R.id.mainContent),
+                    getString(R.string.invalid_phone_number), Snackbar.LENGTH_LONG).show();
+            return;
+        }
+
+        // We check for the application "Call permission"
+        if (ContextCompat.checkSelfPermission(requireContext(),
+                Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
+            grantPermissionAlertDialog();
+            return;
+        }
+
+        // Just in case, we try/catch possible security exceptions
+        try {
+            Intent callIntent = new Intent(Intent.ACTION_CALL);
+            callIntent.setData(Uri.parse("tel:" + phoneNumber));
+            startActivity(callIntent);
+        } catch (SecurityException e) {
+            Snackbar.make(v, getString(R.string.call_attempt_error) + e, Snackbar.LENGTH_SHORT).show();
+        }
+    }
+
+    private void grantPermissionAlertDialog() {
+        new AlertDialog.Builder(requireContext())
+                .setTitle(getString(R.string.call_permission_title))
+                .setMessage(getString(R.string.call_permission_message))
+                .setNegativeButton(getString(R.string.cancel), (dialog, which) -> Toast.makeText(requireContext(), getString(R.string.permission_denied), Toast.LENGTH_SHORT)
+                        .show())
+                .setPositiveButton("Ok", (dialog, which) -> ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.CALL_PHONE}, 3))
+                .create()
+                .show();
+    }
 }
\ No newline at end of file
-- 
GitLab