From 56b84abec1bcbbd973eefe854c3d4820e1819c81 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Mon, 9 Nov 2015 18:44:51 -0500
Subject: [PATCH] conversation: improve number matching

Tuleap: #102
Change-Id: I9546e3a338443afb9b7143056eb54c5c12594f16
---
 .../cx/ring/client/ConversationActivity.java  | 30 ++++++++++++++-----
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/ring-android/app/src/main/java/cx/ring/client/ConversationActivity.java b/ring-android/app/src/main/java/cx/ring/client/ConversationActivity.java
index b098929e9..d056fb2fb 100644
--- a/ring-android/app/src/main/java/cx/ring/client/ConversationActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/client/ConversationActivity.java
@@ -154,10 +154,10 @@ public class ConversationActivity extends AppCompatActivity {
 
             scrolltoBottom();
         }
-        private int getIndex(Spinner spinner, String myString)
-        {
+
+        private int getIndex(Spinner spinner, String myString) {
             for (int i=0, n=spinner.getCount();i<n;i++)
-                if (((CallContact.Phone)spinner.getItemAtPosition(i)).getNumber().equalsIgnoreCase(myString))
+                if (CallContact.canonicalNumber(((CallContact.Phone)spinner.getItemAtPosition(i)).getNumber()).equalsIgnoreCase(myString))
                     return i;
             return 0;
         }
@@ -461,15 +461,29 @@ public class ConversationActivity extends AppCompatActivity {
         // overridePendingTransition(R.anim.slide_down, R.anim.slide_up);
     }
 
+    /**
+     * Guess account and number to use to initiate a call
+     */
     private Pair<Account, String> guess() {
+        String number = numberAdapter == null ? preferredNumber : CallContact.canonicalNumber(((CallContact.Phone) numberSpinner.getSelectedItem()).getNumber());
         Account a = service.getAccount(conversation.getLastAccountUsed());
-        String number = numberAdapter == null ? conversation.contact.getPhones().get(0).getNumber() : CallContact.canonicalNumber(((CallContact.Phone) numberSpinner.getSelectedItem()).getNumber());
-        if (a == null)
+
+        // Guess account from number
+        if (a == null && number != null)
             a = service.guessAccount(conversation.getContact(), number);
+
+        // Guess number from account/call history
+        if (a != null && (number == null/* || number.isEmpty()*/))
+            number = CallContact.canonicalNumber(conversation.getLastNumberUsed(a.getAccountID()));
+
+        // If no account found, use first active
+        if (a == null)
+            a = service.getAccounts().get(0);
+
+        // If no number found, use first from contact
         if (number == null || number.isEmpty())
-            number = conversation.getLastNumberUsed(a.getAccountID());
-        if (number == null || number.isEmpty())
-            number = conversation.contact.getPhones().get(0).getNumber();
+            number = CallContact.canonicalNumber(conversation.contact.getPhones().get(0).getNumber());
+
         return new Pair<>(a, number);
     }
 
-- 
GitLab