Require contacts permission for camera-first flow.

Fixes #8950
This commit is contained in:
Greyson Parrelli 2019-07-25 10:03:27 -04:00
parent fc1c092cf0
commit 7f2a758400
2 changed files with 21 additions and 12 deletions

View file

@ -493,6 +493,8 @@
<string name="MediaSendActivity_message_to_s">Message to %s</string>
<string name="MediaSendActivity_message">Message</string>
<string name="MediaSendActivity_select_recipients">Select recipients</string>
<string name="MediaSendActivity_signal_needs_access_to_your_contacts">Signal needs access to your contacts in order to display them.</string>
<string name="MediaSendActivity_signal_needs_contacts_permission_in_order_to_show_your_contacts_but_it_has_been_permanently_denied">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\".</string>
<plurals name="MediaSendActivity_cant_share_more_than_n_items">
<item quantity="one">You can\'t share more than %d item.</item>
<item quantity="other">You can\'t share more than %d items.</item>

View file

@ -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() {