From 0ec1ae4ed3ee79e4f8bf66f4a708fe71c000dfb9 Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Tue, 19 Dec 2017 10:54:06 -0800 Subject: [PATCH] Request needed permissions for thread search --- res/values/strings.xml | 1 + .../securesms/ConversationListActivity.java | 14 ++++++++++++-- .../securesms/ConversationListFragment.java | 3 ++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index dff577723f..d61f051455 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1315,6 +1315,7 @@ Signal needs SMS permission in order to send an SMS, but it has been permanently denied. Please continue to app settings, select \"Permissions\" and enable \"SMS\". Continue Not now + Signal needs Contacts permission in order to search your contacts, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Contacts\". diff --git a/src/org/thoughtcrime/securesms/ConversationListActivity.java b/src/org/thoughtcrime/securesms/ConversationListActivity.java index 4b858d79e8..0c3c568437 100644 --- a/src/org/thoughtcrime/securesms/ConversationListActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationListActivity.java @@ -16,6 +16,8 @@ */ package org.thoughtcrime.securesms; +import android.*; +import android.Manifest; import android.annotation.SuppressLint; import android.content.ActivityNotFoundException; import android.content.Context; @@ -38,6 +40,7 @@ import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo; import org.thoughtcrime.securesms.notifications.MarkReadReceiver; import org.thoughtcrime.securesms.notifications.MessageNotifier; +import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.service.KeyCachingService; import org.thoughtcrime.securesms.util.DynamicLanguage; @@ -111,8 +114,15 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit } private void initializeSearchListener() { - searchAction.setOnClickListener(v -> searchToolbar.display(searchAction.getX() + (searchAction.getWidth() / 2), - searchAction.getY() + (searchAction.getHeight() / 2))); + searchAction.setOnClickListener(v -> { + Permissions.with(this) + .request(Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS) + .ifNecessary() + .onAllGranted(() -> searchToolbar.display(searchAction.getX() + (searchAction.getWidth() / 2), + searchAction.getY() + (searchAction.getHeight() / 2))) + .withPermanentDenialDialog(getString(R.string.ConversationListActivity_signal_needs_contacts_permission_in_order_to_search_your_contacts_but_it_has_been_permanently_denied)) + .execute(); + }); searchToolbar.setListener(new SearchToolbar.SearchListener() { @Override diff --git a/src/org/thoughtcrime/securesms/ConversationListFragment.java b/src/org/thoughtcrime/securesms/ConversationListFragment.java index c6e79d7ab0..cc3f398bb0 100644 --- a/src/org/thoughtcrime/securesms/ConversationListFragment.java +++ b/src/org/thoughtcrime/securesms/ConversationListFragment.java @@ -32,6 +32,7 @@ import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.support.v4.app.Fragment; @@ -116,7 +117,7 @@ public class ConversationListFragment extends Fragment } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) { + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle bundle) { final View view = inflater.inflate(R.layout.conversation_list_fragment, container, false); reminderView = ViewUtil.findById(view, R.id.reminder);