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 9396dd852bc13dee6c381cd833ea705687ef6c6b..2fe5db5ed9afa03112714d2643ce95fdc667cd7d 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