contacts: add block function

With a long click on the contact in the smartlist or a click on the
option in the conversation, it is possible to block a contact. This
contact is added in the blocked contacts list but it is not removed
to the smartlist for now.

Change-Id: I82d691d1f16c8436673acd3cddbf7daae9b5e504
Reviewed-by: Hadrien De Sousa <hadrien.desousa@savoirfairelinux.com>
Tuleap: #1500
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java
index 9805b16..4e04a54 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java
@@ -500,11 +500,34 @@
                         this.mConversation.getContact(),
                         this);
                 return true;
+            case R.id.menuitem_block:
+                blockContact();
+                return true;
             default:
                 return super.onOptionsItemSelected(item);
         }
     }
 
+    private void blockContact() {
+        Pair<Account, Uri> guess = guess();
+        if (guess.first == null || guess.second == null || !guess.first.isRing() || !guess.second.isRingId()) {
+            return;
+        }
+
+        String accountId = guess.first.getAccountID();
+        String contactId = guess.second.getRawUriString();
+
+        String[] split = contactId.split(":");
+        if (split.length > 1) {
+            contactId = split[1];
+        }
+
+        mContactService.removeContact(accountId, contactId);
+        if (getActivity() instanceof ConversationActivity) {
+            getActivity().finish();
+        }
+    }
+
     /**
      * Guess account and number to use to initiate a call
      */
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java
index 882d188..43973e2 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java
@@ -483,6 +483,9 @@
                     case 1:
                         ActionHelper.launchDeleteAction(getActivity(), conversation, SmartListFragment.this);
                         break;
+                    case 2:
+                        presenter.removeContact(conversation.getLastAccountUsed(), conversation.getContact().getDisplayName());
+                        break;
                 }
             }
         });
diff --git a/ring-android/app/src/main/res/drawable/ic_block_white.xml b/ring-android/app/src/main/res/drawable/ic_block_white.xml
new file mode 100644
index 0000000..a93fae1
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable/ic_block_white.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM4,12c0,-4.42 3.58,-8 8,-8 1.85,0 3.55,0.63 4.9,1.69L5.69,16.9C4.63,15.55 4,13.85 4,12zM12,20c-1.85,0 -3.55,-0.63 -4.9,-1.69L18.31,7.1C19.37,8.45 20,10.15 20,12c0,4.42 -3.58,8 -8,8z"
+        android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/ring-android/app/src/main/res/menu/conversation_actions.xml b/ring-android/app/src/main/res/menu/conversation_actions.xml
index fa321d7..af594d9 100644
--- a/ring-android/app/src/main/res/menu/conversation_actions.xml
+++ b/ring-android/app/src/main/res/menu/conversation_actions.xml
@@ -32,4 +32,10 @@
         android:title="@string/conversation_action_delete_this"
         app:showAsAction="ifRoom" />
 
+    <item
+        android:id="@+id/menuitem_block"
+        android:icon="@drawable/ic_block_white"
+        android:title="@string/conversation_action_block_this"
+        app:showAsAction="ifRoom" />
+
 </menu>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/values/arrays.xml b/ring-android/app/src/main/res/values/arrays.xml
index d250a8b..2527780 100644
--- a/ring-android/app/src/main/res/values/arrays.xml
+++ b/ring-android/app/src/main/res/values/arrays.xml
@@ -28,6 +28,7 @@
     <string-array name="conversation_actions">
         <item>@string/conversation_action_copy_peer_number</item>
         <item>@string/conversation_action_delete_this</item>
+        <item>@string/conversation_action_block_this</item>
     </string-array>
 
 </resources>
diff --git a/ring-android/app/src/main/res/values/strings.xml b/ring-android/app/src/main/res/values/strings.xml
index f84fce1..06f2dc3 100644
--- a/ring-android/app/src/main/res/values/strings.xml
+++ b/ring-android/app/src/main/res/values/strings.xml
@@ -161,6 +161,7 @@
     <string name="conversation_action_copy_peer_number">Copy number</string>
     <string name="conversation_action_copied_peer_number_clipboard">%1$s copied to clipboard</string>
     <string name="conversation_action_select_peer_number">Select a number</string>
+    <string name="conversation_action_block_this">Block this contact</string>
 
     <!-- Contacts -->
     <string name="add_call_contact_number_to_contacts">Add %1$s ?</string>