From 159fdbaac2378626781df019d18e39b0f89b24f7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Wed, 21 Oct 2015 16:39:42 -0400
Subject: [PATCH] conversation: allow to select number to use

Issue: #78218
Change-Id: I476e5aec3b6c22308bdc5256396a8ce051899d52
---
 ring-android/app/src/main/AndroidManifest.xml |   2 +-
 .../cx/ring/client/ConversationActivity.java  | 195 +++++++++++++-----
 .../java/cx/ring/loaders/ContactsLoader.java  |   5 +-
 .../java/cx/ring/loaders/HistoryLoader.java   |   2 +-
 .../main/java/cx/ring/model/CallContact.java  |  32 ++-
 .../java/cx/ring/service/LocalService.java    |  12 +-
 .../ic_dialer_sip_black_24dp.png              | Bin 0 -> 367 bytes
 .../main/res/drawable-hdpi/ring_logo_24dp.png | Bin 0 -> 2472 bytes
 .../ic_dialer_sip_black_24dp.png              | Bin 0 -> 257 bytes
 .../main/res/drawable-mdpi/ring_logo_24dp.png | Bin 0 -> 1593 bytes
 .../ic_dialer_sip_black_24dp.png              | Bin 0 -> 422 bytes
 .../res/drawable-xhdpi/ring_logo_24dp.png     | Bin 0 -> 3354 bytes
 .../ic_dialer_sip_black_24dp.png              | Bin 0 -> 600 bytes
 .../res/drawable-xxhdpi/ring_logo_24dp.png    | Bin 0 -> 5159 bytes
 .../ic_dialer_sip_black_24dp.png              | Bin 0 -> 772 bytes
 .../res/drawable-xxxhdpi/ring_logo_24dp.png   | Bin 0 -> 7077 bytes
 .../src/main/res/layout/frag_conversation.xml |  63 +++---
 .../app/src/main/res/layout/item_number.xml   |  68 ++++++
 .../main/res/layout/item_number_selected.xml  |  42 ++++
 .../main/res/menu/conversation_actions.xml    |   4 +-
 .../app/src/main/res/values/strings.xml       |   1 +
 21 files changed, 331 insertions(+), 95 deletions(-)
 create mode 100644 ring-android/app/src/main/res/drawable-hdpi/ic_dialer_sip_black_24dp.png
 create mode 100644 ring-android/app/src/main/res/drawable-hdpi/ring_logo_24dp.png
 create mode 100644 ring-android/app/src/main/res/drawable-mdpi/ic_dialer_sip_black_24dp.png
 create mode 100644 ring-android/app/src/main/res/drawable-mdpi/ring_logo_24dp.png
 create mode 100644 ring-android/app/src/main/res/drawable-xhdpi/ic_dialer_sip_black_24dp.png
 create mode 100644 ring-android/app/src/main/res/drawable-xhdpi/ring_logo_24dp.png
 create mode 100644 ring-android/app/src/main/res/drawable-xxhdpi/ic_dialer_sip_black_24dp.png
 create mode 100644 ring-android/app/src/main/res/drawable-xxhdpi/ring_logo_24dp.png
 create mode 100644 ring-android/app/src/main/res/drawable-xxxhdpi/ic_dialer_sip_black_24dp.png
 create mode 100644 ring-android/app/src/main/res/drawable-xxxhdpi/ring_logo_24dp.png
 create mode 100644 ring-android/app/src/main/res/layout/item_number.xml
 create mode 100644 ring-android/app/src/main/res/layout/item_number_selected.xml

diff --git a/ring-android/app/src/main/AndroidManifest.xml b/ring-android/app/src/main/AndroidManifest.xml
index 321aa6848..999fbc01c 100644
--- a/ring-android/app/src/main/AndroidManifest.xml
+++ b/ring-android/app/src/main/AndroidManifest.xml
@@ -158,7 +158,7 @@ as that of the covered work.
             android:label="@string/app_name"
             android:parentActivityName=".client.HomeActivity"
             android:screenOrientation="portrait"
-            android:theme="@style/AppThemeWithoutOverlay"
+            android:theme="@style/AppThemeWithoutOverlayCompat"
             android:windowSoftInputMode="adjustResize" >
         </activity>
 
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 23fcf437f..a493abdf6 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
@@ -1,6 +1,25 @@
+/*
+ *  Copyright (C) 2015 Savoir-faire Linux Inc.
+ *
+ *  Author: Adrien Béraud <adrien.beraud@savoirfairelinux.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
 package cx.ring.client;
 
-import android.app.Activity;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -11,18 +30,23 @@ import android.net.Uri;
 import android.os.Bundle;
 import android.os.IBinder;
 import android.os.RemoteException;
+import android.support.v7.app.AppCompatActivity;
 import android.text.format.DateUtils;
 import android.util.Log;
+import android.util.Pair;
+import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.inputmethod.EditorInfo;
 import android.widget.BaseAdapter;
 import android.widget.EditText;
 import android.widget.ImageView;
 import android.widget.ListView;
+import android.widget.Spinner;
 import android.widget.TextView;
 
 import java.text.DateFormat;
@@ -38,11 +62,12 @@ import cx.ring.model.CallContact;
 import cx.ring.model.Conference;
 import cx.ring.model.Conversation;
 import cx.ring.model.SipCall;
+import cx.ring.model.SipUri;
 import cx.ring.model.TextMessage;
 import cx.ring.model.account.Account;
 import cx.ring.service.LocalService;
 
-public class ConversationActivity extends Activity {
+public class ConversationActivity extends AppCompatActivity {
     private static final String TAG = ConversationActivity.class.getSimpleName();
 
     public static final Uri CONTENT_URI = Uri.withAppendedPath(LocalService.AUTHORITY_URI, "conversations");
@@ -52,13 +77,14 @@ public class ConversationActivity extends Activity {
     private Conversation conversation = null;
     private String preferredNumber = null;
 
-
     private ListView histList = null;
     private View msgSendBtn = null;
     private EditText msgEditTxt = null;
     private ViewGroup bottomPane = null;
+    private Spinner numberSpinner = null;
 
     private ConversationAdapter adapter = null;
+    private NumberAdapter numberAdapter = null;
 
     private ServiceConnection mConnection = new ServiceConnection() {
         @Override
@@ -98,7 +124,7 @@ public class ConversationActivity extends Activity {
                 return;
             }
 
-            getActionBar().setTitle(conversation.getContact().getDisplayName());
+            getSupportActionBar().setTitle(conversation.getContact().getDisplayName());
 
             Conference conf = conversation.getCurrentCall();
             bottomPane.setVisibility(conf == null ? View.GONE : View.VISIBLE);
@@ -113,8 +139,27 @@ public class ConversationActivity extends Activity {
             }
 
             adapter.updateDataset(conversation.getHistory());
+
+            if (conversation.getContact().getPhones().size() > 1) {
+                numberAdapter = new NumberAdapter(ConversationActivity.this, conversation.getContact());
+                numberSpinner.setAdapter(numberAdapter);
+                if (preferredNumber == null || preferredNumber.isEmpty()) {
+                    preferredNumber = CallContact.canonicalNumber(conversation.getLastNumberUsed(conversation.getLastAccountUsed()));
+                }
+                numberSpinner.setSelection(getIndex(numberSpinner, preferredNumber));
+            } else {
+                numberSpinner.setVisibility(View.GONE);
+            }
+
             scrolltoBottom();
         }
+        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))
+                    return i;
+            return 0;
+        }
 
         @Override
         public void onServiceDisconnected(ComponentName arg0) {
@@ -142,6 +187,18 @@ public class ConversationActivity extends Activity {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.frag_conversation);
         msgEditTxt = (EditText) findViewById(R.id.msg_input_txt);
+        msgEditTxt.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+            @Override
+            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+                switch (actionId) {
+                    case EditorInfo.IME_ACTION_SEND:
+                        onSendTextMessage(msgEditTxt.getText().toString());
+                        msgEditTxt.setText("");
+                        return true;
+                }
+                return false;
+            }
+        });
         msgSendBtn = findViewById(R.id.msg_send);
         msgSendBtn.setOnClickListener(new View.OnClickListener() {
             @Override
@@ -159,6 +216,8 @@ public class ConversationActivity extends Activity {
         histList = (ListView) findViewById(R.id.hist_list);
         histList.setAdapter(adapter);
 
+        numberSpinner = (Spinner) findViewById(R.id.number_selector);
+
         if (!mBound) {
             Log.i(TAG, "onCreate: Binding service...");
             Intent intent = new Intent(this, LocalService.class);
@@ -177,6 +236,67 @@ public class ConversationActivity extends Activity {
         });
     }
 
+    private class NumberAdapter extends BaseAdapter {
+        final private Context context;
+        private ArrayList<CallContact.Phone> numbers;
+
+        NumberAdapter(Context context, CallContact c) {
+            this.context = context;
+            numbers = c.getPhones();
+        }
+
+        public void updateDataset(CallContact c) {
+            numbers = c.getPhones();
+            notifyDataSetChanged();
+        }
+
+        @Override
+        public int getCount() {
+            return numbers.size();
+        }
+
+        @Override
+        public Object getItem(int position) {
+            return numbers.get(position);
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return 0;
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            if (convertView == null)
+                convertView = LayoutInflater.from(context).inflate(R.layout.item_number_selected, null);
+
+            CallContact.Phone number = numbers.get(position);
+
+            ImageView numberIcon = (ImageView) convertView.findViewById(R.id.number_icon);
+            numberIcon.setImageResource(new SipUri(number.getNumber()).isRingId() ? R.drawable.ring_logo_24dp : R.drawable.ic_dialer_sip_black_24dp);
+
+            return convertView;
+        }
+
+        @Override
+        public View getDropDownView(int position, View convertView, ViewGroup parent) {
+            if (convertView == null)
+                convertView = LayoutInflater.from(context).inflate(R.layout.item_number, null);
+
+            CallContact.Phone number = numbers.get(position);
+
+            TextView numberTxt = (TextView) convertView.findViewById(R.id.number_txt);
+            TextView numberLabelTxt = (TextView) convertView.findViewById(R.id.number_label_txt);
+            ImageView numberIcon = (ImageView) convertView.findViewById(R.id.number_icon);
+
+            numberTxt.setText(number.getNumber());
+            numberLabelTxt.setText(number.getTypeString(context.getResources()));
+            numberIcon.setImageResource(new SipUri(number.getNumber()).isRingId() ? R.drawable.ring_logo_24dp : R.drawable.ic_dialer_sip_black_24dp);
+
+            return convertView;
+        }
+    }
+
     private class ConversationAdapter extends BaseAdapter {
         final private Context context;
         final private ArrayList<Conversation.ConversationElement> texts = new ArrayList<>();
@@ -334,20 +454,24 @@ public class ConversationActivity extends Activity {
         // overridePendingTransition(R.anim.slide_down, R.anim.slide_up);
     }
 
-    private void onSendTextMessage(String txt) {
+    private Pair<Account, String> guess() {
+        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)
+            a = service.guessAccount(conversation.getContact(), number);
+        if (number == null || number.isEmpty())
+            number = conversation.getLastNumberUsed(a.getAccountID());
+        if (number == null || number.isEmpty())
+            number = conversation.contact.getPhones().get(0).getNumber();
+        return new Pair<>(a, number);
+    }
 
-        Conference conf = conversation.getCurrentCall();
+    private void onSendTextMessage(String txt) {
+        Conference conf = conversation == null ? null : conversation.getCurrentCall();
         if (conf == null || !conf.isOnGoing()) {
-            String account = conversation.getLastAccountUsed();
-            if (account == null || account.isEmpty())
-                account = service.guessAccount(conversation.getContact(), conversation.contact.getPhones().get(0).getNumber()).getAccountID();
-            String number = preferredNumber;
-            if (number == null || number.isEmpty())
-                number = conversation.getLastNumberUsed(account);
-            if (number == null || number.isEmpty())
-                number = conversation.contact.getPhones().get(0).getNumber();
+            Pair<Account, String> g = guess();
             try {
-                service.getRemoteService().sendAccountTextMessage(account, CallContact.canonicalNumber(number), txt);
+                service.getRemoteService().sendAccountTextMessage(g.first.getAccountID(), g.second, txt);
             } catch (RemoteException e) {
                 e.printStackTrace();
             }
@@ -366,45 +490,10 @@ public class ConversationActivity extends Activity {
             startActivity(new Intent(ConversationActivity.this.getApplicationContext(), CallActivity.class).putExtra("conference", conversation.getCurrentCall()));
             return;
         }
+        CallContact contact = conversation.getContact();
+        Pair<Account, String> g = guess();
 
-        if (service.getAccounts().isEmpty()) {
-            //createNotRegisteredDialog().show();
-            return;
-        }
-
-        Account usedAccount = null;
-        CallContact contact = null;
-        if (conversation != null) {
-            String last_used = conversation.getLastAccountUsed();
-            Account a = service.getAccount(last_used);
-            if (a != null/* && a.isEnabled()*/)
-                usedAccount = a;
-            else {
-                Set<String> acc_ids = conversation.getAccountsUsed();
-                for (Account acc : service.getAccounts()) {
-                    if (acc_ids.contains(acc.getAccountID())) {
-                        usedAccount = acc;
-                        break;
-                    }
-                }
-            }
-            contact = conversation.getContact();
-        }
-
-        String number = preferredNumber;
-        if (usedAccount != null) {
-            if (number == null)
-                number = conversation.getLastNumberUsed(usedAccount.getAccountID());
-            if (number == null && contact != null)
-                number = contact.getPhones().get(0).getNumber();
-        } else {
-            if (number == null && contact != null)
-                number = contact.getPhones().get(0).getNumber();
-            usedAccount = service.guessAccount(contact, number);
-        }
-        number = CallContact.canonicalNumber(number);
-
-        SipCall call = new SipCall(null, usedAccount.getAccountID(), number, SipCall.Direction.OUTGOING);
+        SipCall call = new SipCall(null, g.first.getAccountID(), g.second, SipCall.Direction.OUTGOING);
         call.setContact(contact);
 
         try {
diff --git a/ring-android/app/src/main/java/cx/ring/loaders/ContactsLoader.java b/ring-android/app/src/main/java/cx/ring/loaders/ContactsLoader.java
index 961f4e5f0..0a08ba3da 100644
--- a/ring-android/app/src/main/java/cx/ring/loaders/ContactsLoader.java
+++ b/ring-android/app/src/main/java/cx/ring/loaders/ContactsLoader.java
@@ -49,7 +49,7 @@ public class ContactsLoader extends AsyncTaskLoader<ContactsLoader.Result>
 
     static private final String[] CONTACTS_ID_PROJECTION = new String[] { Contacts._ID };
     static private final String[] CONTACTS_SUMMARY_PROJECTION = new String[] { Contacts._ID, Contacts.LOOKUP_KEY, Contacts.DISPLAY_NAME, Contacts.PHOTO_ID, Contacts.STARRED};
-    static private final String[] CONTACTS_SIP_PROJECTION = new String[] { ContactsContract.CommonDataKinds.Phone.CONTACT_ID, ContactsContract.Data.MIMETYPE, SipAddress.SIP_ADDRESS, SipAddress.TYPE };
+    static private final String[] CONTACTS_SIP_PROJECTION = new String[] { ContactsContract.CommonDataKinds.Phone.CONTACT_ID, ContactsContract.Data.MIMETYPE, SipAddress.SIP_ADDRESS, SipAddress.TYPE, SipAddress.LABEL };
     static private final String SELECT = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND (" + Contacts.HAS_PHONE_NUMBER + "=1) AND (" + Contacts.DISPLAY_NAME + " != '' ))";
 
     private final Uri baseUri;
@@ -130,6 +130,7 @@ public class ContactsLoader extends AsyncTaskLoader<ContactsLoader.Result>
                     final int iMime = c.getColumnIndex(ContactsContract.Data.MIMETYPE);
                     final int iNumber = c.getColumnIndex(SipAddress.SIP_ADDRESS);
                     final int iType = c.getColumnIndex(SipAddress.TYPE);
+                    final int iLabel = c.getColumnIndex(SipAddress.LABEL);
                     while (c.moveToNext()) {
                         long id = c.getLong(iID);
                         CallContact contact = cache.get(id);
@@ -145,7 +146,7 @@ public class ContactsLoader extends AsyncTaskLoader<ContactsLoader.Result>
                             contact.addPhoneNumber(c.getString(iNumber), c.getInt(iType));
                         } else {
                             //Log.w(TAG, "SIP Phone for " + id + " :" + cSip.getString(iNumber));
-                            contact.addNumber(c.getString(iNumber), c.getInt(iType), CallContact.NumberType.SIP);
+                            contact.addNumber(c.getString(iNumber), c.getInt(iType), c.getString(iLabel), CallContact.NumberType.SIP);
                         }
                     }
                     c.close();
diff --git a/ring-android/app/src/main/java/cx/ring/loaders/HistoryLoader.java b/ring-android/app/src/main/java/cx/ring/loaders/HistoryLoader.java
index 7606f2f85..c33bc3651 100644
--- a/ring-android/app/src/main/java/cx/ring/loaders/HistoryLoader.java
+++ b/ring-android/app/src/main/java/cx/ring/loaders/HistoryLoader.java
@@ -83,7 +83,7 @@ public class HistoryLoader extends AsyncTaskLoader<ArrayList<HistoryEntry>> {
 
                     if (result.moveToFirst()) {
                         builder.startNewContact(result.getLong(iID), result.getString(iKey), result.getString(iName), result.getLong(iPhoto));
-                        builder.addPhoneNumber(call.getNumber(), 0);
+                        builder.addPhoneNumber(call.getNumber(), 0, null);
                         contact = builder.build();
                     } else {
                         contact = CallContact.ContactBuilder.buildUnknownContact(call.getNumber());
diff --git a/ring-android/app/src/main/java/cx/ring/model/CallContact.java b/ring-android/app/src/main/java/cx/ring/model/CallContact.java
index 90edf823e..396cf20fa 100644
--- a/ring-android/app/src/main/java/cx/ring/model/CallContact.java
+++ b/ring-android/app/src/main/java/cx/ring/model/CallContact.java
@@ -36,11 +36,15 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import android.content.ContentResolver;
+import android.content.Context;
+import android.content.res.Resources;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.Profile;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.support.annotation.NonNull;
 
 public class CallContact implements Parcelable {
@@ -80,7 +84,9 @@ public class CallContact implements Parcelable {
         this.photo_id = photo_id;
     }
 
-    public static String canonicalNumber(@NonNull String number) {
+    public static String canonicalNumber(String number) {
+        if (number == null || number.isEmpty())
+            return null;
         return new SipUri(number).getRawUriString();
     }
 
@@ -200,13 +206,13 @@ public class CallContact implements Parcelable {
             return this;
         }
 
-        public ContactBuilder addPhoneNumber(String num, int type) {
-            phones.add(new Phone(num, type));
+        public ContactBuilder addPhoneNumber(String num, int type, String label) {
+            phones.add(new Phone(num, type, label));
             return this;
         }
 
-        public ContactBuilder addSipNumber(String num, int type) {
-            phones.add(new Phone(num, type, NumberType.SIP));
+        public ContactBuilder addSipNumber(String num, int type, String label) {
+            phones.add(new Phone(num, type, label, NumberType.SIP));
             return this;
         }
 
@@ -316,15 +322,22 @@ public class CallContact implements Parcelable {
         NumberType ntype;
         String number;
         int category; // Home, work, custom etc.
+        String label;
 
         public Phone(String num, int cat) {
+            this(num, cat, null);
+        }
+
+        public Phone(String num, int cat, String label) {
             ntype = NumberType.UNKNOWN;
             category = cat;
             number = num;
+            this.label = label;
         }
-        public Phone(String num, int cat, NumberType nty) {
+        public Phone(String num, int cat, String label, NumberType nty) {
             ntype = nty;
             number = num;
+            this.label = label;
             category = cat;
         }
 
@@ -378,14 +391,17 @@ public class CallContact implements Parcelable {
             this.number = number;
         }
 
+        public CharSequence getTypeString(Resources r) {
+            return ContactsContract.CommonDataKinds.Phone.getTypeLabel(r, category, label);
+        }
     }
 
     public void addPhoneNumber(String tel, int car) {
         phones.add(new Phone(tel, car));
 
     }
-    public void addNumber(String tel, int cat, NumberType type) {
-        phones.add(new Phone(tel, cat, type));
+    public void addNumber(String tel, int cat, String label, NumberType type) {
+        phones.add(new Phone(tel, cat, label, type));
 
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/service/LocalService.java b/ring-android/app/src/main/java/cx/ring/service/LocalService.java
index 540cd5b73..fcce36791 100644
--- a/ring-android/app/src/main/java/cx/ring/service/LocalService.java
+++ b/ring-android/app/src/main/java/cx/ring/service/LocalService.java
@@ -415,11 +415,13 @@ public class LocalService extends Service {
 
     private static final String[] CONTACTS_PHONES_PROJECTION = {
             ContactsContract.CommonDataKinds.Phone.NUMBER,
-            ContactsContract.CommonDataKinds.Phone.TYPE
+            ContactsContract.CommonDataKinds.Phone.TYPE,
+            ContactsContract.CommonDataKinds.Phone.LABEL
     };
     private static final String[] CONTACTS_SIP_PROJECTION = {
             ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS,
-            ContactsContract.CommonDataKinds.SipAddress.TYPE
+            ContactsContract.CommonDataKinds.SipAddress.TYPE,
+            ContactsContract.CommonDataKinds.SipAddress.LABEL
     };
 
     private static final String ID_SELECTION = ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?";
@@ -434,8 +436,9 @@ public class LocalService extends Service {
         if (cPhones != null) {
             final int iNum =  cPhones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
             final int iType =  cPhones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
+            final int iLabel =  cPhones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.LABEL);
             while (cPhones.moveToNext()) {
-                c.addNumber(cPhones.getString(iNum), cPhones.getInt(iType), CallContact.NumberType.TEL);
+                c.addNumber(cPhones.getString(iNum), cPhones.getInt(iType), cPhones.getString(iLabel), CallContact.NumberType.TEL);
                 Log.w(TAG,"Phone:"+cPhones.getString(cPhones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
             }
             cPhones.close();
@@ -450,8 +453,9 @@ public class LocalService extends Service {
         if (cSip != null) {
             final int iSip =  cSip.getColumnIndex(ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS);
             final int iType =  cSip.getColumnIndex(ContactsContract.CommonDataKinds.SipAddress.TYPE);
+            final int iLabel =  cSip.getColumnIndex(ContactsContract.CommonDataKinds.SipAddress.LABEL);
             while (cSip.moveToNext()) {
-                c.addNumber(cSip.getString(iSip), cSip.getInt(iType), CallContact.NumberType.SIP);
+                c.addNumber(cSip.getString(iSip), cSip.getInt(iType), cSip.getString(iLabel), CallContact.NumberType.SIP);
                 Log.w(TAG, "SIP phone:" + cSip.getString(iSip));
             }
             cSip.close();
diff --git a/ring-android/app/src/main/res/drawable-hdpi/ic_dialer_sip_black_24dp.png b/ring-android/app/src/main/res/drawable-hdpi/ic_dialer_sip_black_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce6d9dce93bb37793f2a9ff6414c92b5ffafc036
GIT binary patch
literal 367
zcmeAS@N?(olHy`uVBq!ia0y~yU{C>J4i*Lm25-&)VFm_9Gfx-CkP61P6BWH*CyKPs
z=VWUZR$Io}{lLB86>lB$!IT-zPZJ}9dFn6ZFId*;$CAIh;G%}oER)Xr4rxIGliLo)
zJ#3M$=+d_?J<qHzbK~&2-{~%PQ!;{1n5DLC(_XN$ce&@Uhn!BknM}5R%-MZGm*X!(
ztBGySt_#XdM|$}@MQ;6=aIs+F_eB5S&P8E@lJ1?7H5qqnx1JH$vm@a6{Atow#S6`x
zAI`6yzfkk@(ld;T|0bPrZqkWLJ0O#|PWNlSfhpUxDAh9)TjN#=Epa*@^xa1wW#+!6
zdJ^g$-6?Uq>P?UF#lAW->8#wzngv}(GLsE{KIpXeoB1fb%=4Lawq5g*x#bD-Q~ssj
zOE=Ign!ne5Qlmh~3j>Zem)_L{9y$f*(hXG9R$hKOvt@~6L*}#_3yzBMdZidYl3tl4
WIjz2I+b#wM1_n=8KbLh*2~7YLoSKsW

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/drawable-hdpi/ring_logo_24dp.png b/ring-android/app/src/main/res/drawable-hdpi/ring_logo_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..1063e67f0fcb59c4bee85130231884584de0491e
GIT binary patch
literal 2472
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
CJaNka

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/drawable-mdpi/ic_dialer_sip_black_24dp.png b/ring-android/app/src/main/res/drawable-mdpi/ic_dialer_sip_black_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..a4b5a27d074870c11f892129fd553b76be6ae680
GIT binary patch
literal 257
zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4i*Lm2CurW#S9D#Cp=voLn;{0p11d64iq_d
zF_^=w$@RdJYpos99;qv*Ms%z;*uinoYt0tXi@Zxb9?w_neZc3^8gh8D_K5<)HlFoo
ze$JZt==jsfSmTe|k4a?w@BHKULHU-i5rfgB2gc3aySUd&`lw32*l}*b#*2FwJho^~
z&(`X>mA+qMMT!0%$ranwYi<UeUtF+wo-Fr67u$BHjrx(>S6+9~@MBaiK6++pakBRu
z&WG17T!?uh<t-b*asS@Y|1USbbu77dex3DFBM)cybv8c(eAcdtpBY`78|3jSl!1YP
N!PC{xWt~$(695viZxR3i

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/drawable-mdpi/ring_logo_24dp.png b/ring-android/app/src/main/res/drawable-mdpi/ring_logo_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d86cb5577a4b06325d04049e3f3a0bdfb0aecc5
GIT binary patch
literal 1593
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
IIVCg!04>P2761SM

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/drawable-xhdpi/ic_dialer_sip_black_24dp.png b/ring-android/app/src/main/res/drawable-xhdpi/ic_dialer_sip_black_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..44b147019545c72f7f51b0aab1a2d0cdde31df51
GIT binary patch
literal 422
zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4i*LmhQHi~JPZtsxt=bLAr*{or`mfv1xmEb
z^KuClWo2?VU05I%t;`j5_{}pB->utR9J5Va?<++8GG}%4Hj$`p`edzAshV|x>#~jG
zoQHAmxR>rp-+ewm=ws!BSU$s3M|2)0JFT9m-otsOPHeyUN5hFfXEo;cY;aK#aN%m?
zkxx=sDqbPRytqnTtGm&1?}4onH(VTe{+wJWvEu^wn$AWk&yOy)ESn?>gQFT*^qc-o
zPP}5#{~}r>V2Q*<{l#8gZXWL!o-1_N-^9FZBjdKhBYSzL6dbWRrq{2Wm;0d8#Baue
zRN>_oN%G0t`-IsvZaYktoHJo*qHw;?BbNR?-zyV@4V?Pys?x-hziY{@^7#CHyZ5$;
zgdW97fA}BvW^WR_xc%sJ&HLGh3f!WuwLdGbU%_{5os;9W_G_kcUk}{(eiN}biowX{
zl+jv-FPo1~Kh5CKCcT}pA@bcFHijaZz;a0ji6f6$;xB{;rp^iF+wrK8>;0CMn>w@%
b4eh5d{A#@5^;IJV1_lOCS3j3^P6<r_*YB=?

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/drawable-xhdpi/ring_logo_24dp.png b/ring-android/app/src/main/res/drawable-xhdpi/ring_logo_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..a0d2ba6195e945c17bf6a0a408aa59f320b805ec
GIT binary patch
literal 3354
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
AtN;K2

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/drawable-xxhdpi/ic_dialer_sip_black_24dp.png b/ring-android/app/src/main/res/drawable-xxhdpi/ic_dialer_sip_black_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..d911ebd45fc28187891eb07bf35e1dd443f14d50
GIT binary patch
literal 600
zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84i*LmhW}5h&oD4B$$PpuhEy=Vy|FhtI8fsF
z$Mx&CI=3syIz><L+O=ZA>Ma7IEZUMHEdMza#qLgR5((i7>?|u6Fb#OE{YZ_E^>vUa
zd;Ebcf%qL_Q7vXCl`WnYe6hP4Gk^1(_xaq@Pp9t?IHxGqeKe^`c8aG!y-DRUf&Kn_
zw*FaXvpB>pXq(4;Qw_(U@J(!{A{SnYOqkvj9cnLfVTY+kpo3`k1#8xl!@s1fRyCxp
zaV!@JNaEeqqVZbQl=aK?xdD#tIgach7g}^z__Lnf`jz*u^Zd|D4Z0a#tg_o!=Y}}$
zHppFmXlGaD)+_t_zRobuJQsNDH~YD>1~L)uXXh+7c~`hf(Q?C7HNAA^#@%-hMJ}8D
zKy<>ixlJEz3(qC*WyzPnv?*I)pF3Y>%Y(NI?lJvxFh96^g?wYq>!f>%vdR_gvKNdF
zv%KHr{L5+HfznTR6!$8+KVXY2@X&vuSl}wf_fpmJOIh(0oBu0?9=*|RUb3|_^U3wN
z!basB#n0z<s_YB$cxdBrXX62#V4tFChHfv_o7X9v3)6VWE-QEZzLN8nyHfosAvfO?
zzEl1+Lv`}GYW;PAB^KW&gsydToBC&V)Vj;>3%{g>O?-dv^mK{E?YliV1fI-v-m_L=
zp~D4F*39CW=7*}IC&Y=TzS^d+H`ith+sn5PH=26n&xkh3b*y5Z^Kh}QN4_qr)|u6F
zSRQXP_L}N{i*-+}<+tKFMwicgn3b;+sGiu=n{hO0W5gTvvZon#oEsj!W?*1o@O1Ta
JS?83{1OQ#a3yJ^$

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/drawable-xxhdpi/ring_logo_24dp.png b/ring-android/app/src/main/res/drawable-xxhdpi/ring_logo_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..699178539d3e7aa506af1c600db652b8d76e7bcd
GIT binary patch
literal 5159
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
P3=9mOu6{1-oD!M<2)TuA

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/drawable-xxxhdpi/ic_dialer_sip_black_24dp.png b/ring-android/app/src/main/res/drawable-xxxhdpi/ic_dialer_sip_black_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..d458d5d4b27d4dff907a86188208766534549d65
GIT binary patch
literal 772
zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4i*Lm29JsRH#0CWo%VEb45?szd+W6Kl|YI1
zkLdwwOSg2d-KDd}!N|wxxTd1gp(wY;HkaL9Vx5Vs+j>^iFW4m3>fxE|wY)>6dxO%g
z5VzJXTDu|?di$my3$k{+@JgnwIOEtk?&qIlSADQM(qHmJP=eJ_fW=W@%H#x*sfmy8
zEShs>O69HVy8G^b{UdTJNi*!X<OGLEy@%-sR+JvtF`v;`<F%^}lfh=bqG@Fu9ls<d
z6mdj6NInqW-Vh|u%qGK>Ra4U;Z^`oJli`BXiVs%wGd`DL()%S*a7OWg=Cw7<|04G~
zA1MFymph`pC}L|pBdd=!i_Ayu1AptA=B=?m5?OFnQQ>UNe<r@gGTRRCZ<rD6&|S~?
z)5qek)x(8yuRq%dG_=psJukmdN`GqPJo)3%`MP#tosTz8-gLg5>*jOjJ*Nu(v9V-K
ztF_Zfx>WJc?Z^(D-!+%#o0$tf+c!<XdCJ=;2l+!b7lq1{Plf3|P<FjEzj<><(8^jb
z!^3JWI~V+w-m_T3QOtOWYK-HQy&Adf0!!VwJ%XDRPD@@BvfIq!C>3yPUT}-T+qRb7
zE`p0E)HxsG{Un&o>gjyQ)RXh}3?r2i!J|iQq%xN_{`|xKJFx9;amAc$375Y&{pAYg
zL_ITD?I$h#D>AF{U&pu2_7!f{YfS=9dwFRnIQh*rSK|>Xx4!>y?FOCh3ynrOlbTb6
zE}tu}(AL@g=?tfamF6*>V+N-RIg8Ysq)+Ymp5qq&w$84ru;`V@sU7iK0-x0FE419!
zuQ{b~e#VpaUw{4F$KoJ+Kj7KN2^ImaLQnG<rhHO*oIJzjrz}HjjMLMM&CBL3dBYHK
zO!g)tL$$;tSq9ZDhPsvv3!36?GBQM0=vXr>=mRmQmQ0u?!?0n3TAUa6g|!b^nERgh
zKb#vX^T;fD8spsxt$wXpFP@kNOUA#@JX{@kZPR42a|Ltl?tN%YRGX33llS>2ICZfc
a%wKu^s^bZ3tD6iA3=E#GelF{r5}E)~xm2bA

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/drawable-xxxhdpi/ring_logo_24dp.png b/ring-android/app/src/main/res/drawable-xxxhdpi/ring_logo_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..b8e90ea019e490c6edb5765508fb55dea6f006d3
GIT binary patch
literal 7077
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
SMji$R1_n=8KbLh*2~7aUI$1aX

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/layout/frag_conversation.xml b/ring-android/app/src/main/res/layout/frag_conversation.xml
index b2f8ee6a7..6b44ebb66 100644
--- a/ring-android/app/src/main/res/layout/frag_conversation.xml
+++ b/ring-android/app/src/main/res/layout/frag_conversation.xml
@@ -1,68 +1,83 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
-    android:orientation="vertical" android:layout_width="match_parent"
+    android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:orientation="vertical"
     tools:context=".client.ConversationActivity">
 
     <ListView
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
         android:id="@+id/hist_list"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
         android:layout_weight="1"
-        android:transcriptMode="alwaysScroll"
-        android:stackFromBottom="true"
-        android:divider="@null"
         android:background="#ebeff0"
+        android:clipToPadding="false"
+        android:divider="@null"
         android:listSelector="@android:color/transparent"
+        android:paddingBottom="8dp"
+        android:paddingTop="8dp"
+        android:stackFromBottom="true"
+        android:transcriptMode="alwaysScroll"
         tools:listitem="@layout/item_textmsg" />
 
     <RelativeLayout
+        android:id="@+id/ongoingcall_pane"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_gravity="center_horizontal"
-        android:background="#e3c1c1"
-        android:id="@+id/ongoingcall_pane">
+        android:background="#e3c1c1">
 
         <TextView
+            android:id="@+id/textView2"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:text="Ongoing call"
-            android:id="@+id/textView2"
-            android:layout_centerVertical="true"
             android:layout_centerHorizontal="true"
-            android:layout_margin="10dp" />
+            android:layout_centerVertical="true"
+            android:layout_margin="10dp"
+            android:text="@string/ongoing_call"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textColor="@color/text_color_primary" />
     </RelativeLayout>
 
     <ImageView
+        android:id="@+id/divider"
         android:layout_width="fill_parent"
         android:layout_height="1dp"
-        android:id="@+id/divider"
         android:layout_gravity="center_horizontal"
         android:background="#bdbdbd" />
 
     <LinearLayout
-        android:orientation="horizontal"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
+        android:layout_height="48dp"
         android:background="@android:color/white"
-        android:elevation="6dp">
+        android:orientation="horizontal">
+
+        <Spinner
+            android:id="@+id/number_selector"
+            android:layout_width="wrap_content"
+            android:layout_height="fill_parent"
+            tools:listitem="@layout/item_number_selected"
+            android:visibility="visible" />
 
         <EditText
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
             android:id="@+id/msg_input_txt"
-            android:layout_weight="1" />
+            android:layout_width="0dp"
+            android:layout_height="fill_parent"
+            android:layout_weight="1"
+            android:hyphenationFrequency="normal"
+            android:imeOptions="actionSend"
+            android:inputType="textShortMessage" />
 
         <ImageButton
+            android:id="@+id/msg_send"
             android:layout_width="wrap_content"
             android:layout_height="fill_parent"
-            android:id="@+id/msg_send"
-            android:src="@drawable/ic_send_black_24dp"
-            android:tint="@android:color/darker_gray"
             android:background="@android:color/transparent"
-            android:padding="8dp" />
+            android:contentDescription="@string/send_message"
+            android:padding="8dp"
+            android:src="@drawable/ic_send_black_24dp"
+            android:tint="@android:color/darker_gray" />
     </LinearLayout>
 
 </LinearLayout>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/layout/item_number.xml b/ring-android/app/src/main/res/layout/item_number.xml
new file mode 100644
index 000000000..755a4c0fc
--- /dev/null
+++ b/ring-android/app/src/main/res/layout/item_number.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright (C) 2004-2015 Savoir-Faire Linux Inc.
+
+Author: Adrien Béraud <adrien.beraud@savoirfairelinux.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+-->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/call_entry"
+    android:layout_width="match_parent"
+    android:layout_height="56dp"
+    android:descendantFocusability="blocksDescendants"
+    android:padding="8dp">
+
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/number_icon"
+        android:layout_alignParentLeft="true"
+        android:src="@drawable/ic_dialer_sip_black_24dp"
+        android:layout_alignParentStart="true"
+        android:layout_marginEnd="8dp"
+        android:layout_marginRight="8dp"
+        android:layout_alignParentTop="false"
+        android:layout_centerVertical="true" />
+
+    <TextView
+        android:id="@+id/number_txt"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:ellipsize="marquee"
+        android:marqueeRepeatLimit="marquee_forever"
+        android:scrollHorizontally="true"
+        android:singleLine="true"
+        android:textSize="16sp"
+        android:textColor="@color/text_color_primary"
+        android:layout_marginTop="2dp"
+        android:layout_toRightOf="@+id/number_icon"
+        android:text="+15142792035"
+        android:layout_alignParentTop="true" />
+
+    <TextView
+        android:id="@+id/number_label_txt"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:textSize="12sp"
+        android:textColor="@color/text_color_secondary"
+        android:text="Inde"
+        android:layout_below="@+id/number_txt"
+        android:layout_toRightOf="@+id/number_icon"
+        android:layout_toEndOf="@+id/imageView4" />
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/layout/item_number_selected.xml b/ring-android/app/src/main/res/layout/item_number_selected.xml
new file mode 100644
index 000000000..4314742fb
--- /dev/null
+++ b/ring-android/app/src/main/res/layout/item_number_selected.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright (C) 2004-2015 Savoir-Faire Linux Inc.
+
+Author: Adrien Béraud <adrien.beraud@savoirfairelinux.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+-->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/call_entry"
+    android:layout_width="wrap_content"
+    android:layout_height="56dp"
+    android:descendantFocusability="blocksDescendants"
+    android:padding="8dp">
+
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/number_icon"
+        android:layout_alignParentLeft="true"
+        android:src="@drawable/ic_dialer_sip_black_24dp"
+        android:layout_alignParentStart="true"
+        android:layout_marginEnd="8dp"
+        android:layout_marginRight="8dp"
+        android:layout_alignParentTop="false"
+        android:layout_centerVertical="true" />
+
+</RelativeLayout>
\ No newline at end of file
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 601faf44d..9d7f1c98a 100644
--- a/ring-android/app/src/main/res/menu/conversation_actions.xml
+++ b/ring-android/app/src/main/res/menu/conversation_actions.xml
@@ -5,11 +5,11 @@
             android:id="@+id/conv_action_videocall"
             android:icon="@drawable/ic_videocam_white_24dp"
             android:title="Video call"
-            android:showAsAction="always"
+            app:showAsAction="always"
             />
         <item
             android:id="@+id/conv_action_audiocall"
             android:icon="@drawable/ic_call_white_24dp"
             android:title="Audio call"
-            android:showAsAction="always"/>
+            app:showAsAction="always"/>
 </menu>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/values/strings.xml b/ring-android/app/src/main/res/values/strings.xml
index e727e9b39..ce6280c63 100644
--- a/ring-android/app/src/main/res/values/strings.xml
+++ b/ring-android/app/src/main/res/values/strings.xml
@@ -117,6 +117,7 @@ as that of the covered work.
     <string name="copyright">Copyright \u00A9 2004&#8211;2015 Savoir-Faire Linux Inc.</string>
     <string name="web_site">Website</string>
     <string name="help_gestures"> This view will help users with different interactions during calls. Different actions will be described; Long press, fling, swype etc.</string>
+    <string name="ongoing_call">Ongoing call</string>
     <string name="hist_in_call">Incoming call of %1$s</string>
     <string name="hist_out_call">Outgoing call of %1$s</string>
 
-- 
GitLab