diff --git a/res/values/strings.xml b/res/values/strings.xml
index 20f916e495..5f40643435 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -493,6 +493,8 @@
Message to %s
Message
Select recipients
+ Signal needs access to your contacts in order to display them.
+ Signal needs Contacts permission in order to show your contacts, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Contacts\".
- You can\'t share more than %d item.
- You can\'t share more than %d items.
diff --git a/src/org/thoughtcrime/securesms/mediasend/MediaSendActivity.java b/src/org/thoughtcrime/securesms/mediasend/MediaSendActivity.java
index 1afc6f196c..a95f7b5225 100644
--- a/src/org/thoughtcrime/securesms/mediasend/MediaSendActivity.java
+++ b/src/org/thoughtcrime/securesms/mediasend/MediaSendActivity.java
@@ -687,20 +687,27 @@ public class MediaSendActivity extends PassphraseRequiredActionBarActivity imple
hud.hideCurrentInput(composeText);
}
- Fragment contactFragment = CameraContactSelectionFragment.newInstance();
- Fragment editorFragment = getSupportFragmentManager().findFragmentByTag(TAG_SEND);
+ Permissions.with(this)
+ .request(Manifest.permission.READ_CONTACTS)
+ .ifNecessary()
+ .withPermanentDenialDialog(getString(R.string.MediaSendActivity_signal_needs_contacts_permission_in_order_to_show_your_contacts_but_it_has_been_permanently_denied))
+ .onAllGranted(() -> {
+ Fragment contactFragment = CameraContactSelectionFragment.newInstance();
+ Fragment editorFragment = getSupportFragmentManager().findFragmentByTag(TAG_SEND);
- if (editorFragment == null) {
- throw new AssertionError("No editor fragment available!");
- }
+ if (editorFragment == null) {
+ throw new AssertionError("No editor fragment available!");
+ }
-
- getSupportFragmentManager().beginTransaction()
- .setCustomAnimations(R.anim.fade_in, R.anim.fade_out, R.anim.fade_in, R.anim.fade_out)
- .add(R.id.mediasend_fragment_container, contactFragment, TAG_CONTACTS)
- .hide(editorFragment)
- .addToBackStack(null)
- .commit();
+ getSupportFragmentManager().beginTransaction()
+ .setCustomAnimations(R.anim.fade_in, R.anim.fade_out, R.anim.fade_in, R.anim.fade_out)
+ .add(R.id.mediasend_fragment_container, contactFragment, TAG_CONTACTS)
+ .hide(editorFragment)
+ .addToBackStack(null)
+ .commit();
+ })
+ .onAnyDenied(() -> Toast.makeText(MediaSendActivity.this, R.string.MediaSendActivity_signal_needs_access_to_your_contacts, Toast.LENGTH_LONG).show())
+ .execute();
}
private Fragment getOrCreateCameraFragment() {