From 011efb0ce7aeb4a6f02fea74bb45080c63de943c Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 18 Nov 2020 19:34:45 -0500 Subject: [PATCH] Request READ_PHONE_NUMBERS permission when necessary. --- app/src/main/AndroidManifest.xml | 1 + .../fragments/WelcomeFragment.java | 24 ++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 65680bacc..84b2a3c9d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,6 +35,7 @@ + diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/WelcomeFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/WelcomeFragment.java index 29369d633..b8fa869a2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/WelcomeFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/WelcomeFragment.java @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.registration.fragments; import android.Manifest; import android.annotation.SuppressLint; import android.content.Context; +import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; @@ -12,6 +13,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; import androidx.annotation.StringRes; import androidx.core.content.ContextCompat; import androidx.fragment.app.FragmentActivity; @@ -41,9 +43,18 @@ public final class WelcomeFragment extends BaseRegistrationFragment { Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE }; + @RequiresApi(26) + private static final String[] PERMISSIONS_API_26 = { Manifest.permission.WRITE_CONTACTS, + Manifest.permission.READ_CONTACTS, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE, + Manifest.permission.READ_PHONE_NUMBERS }; + @RequiresApi(26) private static final String[] PERMISSIONS_API_29 = { Manifest.permission.WRITE_CONTACTS, Manifest.permission.READ_CONTACTS, - Manifest.permission.READ_PHONE_STATE }; + Manifest.permission.READ_PHONE_STATE, + Manifest.permission.READ_PHONE_NUMBERS }; private static final @StringRes int RATIONALE = R.string.RegistrationActivity_signal_needs_access_to_your_contacts_and_media_in_order_to_connect_with_friends; private static final @StringRes int RATIONALE_API_29 = R.string.RegistrationActivity_signal_needs_access_to_your_contacts_in_order_to_connect_with_friends; private static final int[] HEADERS = { R.drawable.ic_contacts_white_48dp, R.drawable.ic_folder_white_48dp }; @@ -173,7 +184,7 @@ public final class WelcomeFragment extends BaseRegistrationFragment { private void initializeNumber() { Optional localNumber = Optional.absent(); - if (Permissions.hasAll(requireContext(), Manifest.permission.READ_PHONE_STATE)) { + if (Permissions.hasAll(requireContext(), Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_PHONE_NUMBERS)) { localNumber = Util.getDeviceNumber(requireContext()); } @@ -198,8 +209,15 @@ public final class WelcomeFragment extends BaseRegistrationFragment { !TextSecurePreferences.isBackupEnabled(requireContext()); } + @SuppressLint("NewApi") private static String[] getContinuePermissions(boolean isUserSelectionRequired) { - return isUserSelectionRequired ? PERMISSIONS_API_29 : PERMISSIONS; + if (isUserSelectionRequired) { + return PERMISSIONS_API_29; + } else if (Build.VERSION.SDK_INT >= 26) { + return PERMISSIONS_API_26; + } else { + return PERMISSIONS; + } } private static @StringRes int getContinueRationale(boolean isUserSelectionRequired) {