contactslist: improve UI/UX/behaviour

- replace the phone icon on the main activity by a magnifying glass
- allow the predicate to find contacts without phone numbers
- remove the autocorrect when finding a contact
- adjust contact search layout to be pushed by the soft keyboard
- hide the contextual menu (Scan QR and clear history) when in contacts
 mode.

This display of the searchview has not been improved since its gra-
phical behaviour may become inconsistent on some APIs.

Change-Id: Iea196eda67e62a9be94d6dfa3048b93921d0c4fd
Tuleap: #615
diff --git a/ring-android/app/src/main/AndroidManifest.xml b/ring-android/app/src/main/AndroidManifest.xml
index 45c3e23..06a0cae 100644
--- a/ring-android/app/src/main/AndroidManifest.xml
+++ b/ring-android/app/src/main/AndroidManifest.xml
@@ -80,7 +80,7 @@
             android:label="@string/title_activity_sflphone_home"
             android:screenOrientation="portrait"
             android:theme="@style/AppThemeWithOverlay"
-            android:windowSoftInputMode="adjustPan"
+            android:windowSoftInputMode="adjustResize"
             android:launchMode="singleTask">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
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 ad9733c..8aacb34 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
@@ -36,6 +36,7 @@
 import android.support.v4.view.MenuItemCompat;
 import android.support.v7.widget.SearchView;
 import android.support.v7.widget.Toolbar;
+import android.text.InputType;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.Menu;
@@ -187,7 +188,7 @@
     }
 
     @Override
-    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+    public void onCreateOptionsMenu(final Menu menu, MenuInflater inflater) {
         inflater.inflate(R.menu.call_list_menu, menu);
         searchMenuItem = menu.findItem(R.id.menu_contact_search);
         dialpadMenuItem = menu.findItem(R.id.menu_contact_dial);
@@ -200,6 +201,7 @@
                 contactList.setAdapter(null);
                 contactList.setVisibility(View.GONE);
                 newconv_btn.setVisibility(View.VISIBLE);
+                setOverflowMenuVisible(menu, true);
                 setLoading(false);
                 return true;
             }
@@ -212,6 +214,7 @@
                 list.setVisibility(View.GONE);
                 newconv_btn.setVisibility(View.GONE);
                 onLoadFinished(null, mCallbacks.getService().getSortedContacts());
+                setOverflowMenuVisible(menu, false);
                 setLoading(false);
                 return true;
             }
@@ -240,7 +243,9 @@
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
             case R.id.menu_contact_search:
-                searchView.setInputType(EditorInfo.TYPE_CLASS_TEXT);
+                searchView.setInputType(EditorInfo.TYPE_CLASS_TEXT
+                        | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS
+                );
                 return false;
             case R.id.menu_contact_dial:
                 if (searchView.getInputType() == EditorInfo.TYPE_CLASS_PHONE)
@@ -579,4 +584,23 @@
             list.setEmptyView(this.mEmptyTextView);
         }
     }
+
+    /**
+     * Handles the visibility of some menus to hide / show the overflow menu
+     * @param menu the menu containing the menuitems we need to access
+     * @param visible true to display the overflow menu, false otherwise
+     */
+    private void setOverflowMenuVisible(final Menu menu, boolean visible) {
+        if (null != menu) {
+            MenuItem scanQrMenuItem = menu.findItem(R.id.menu_scan_qr);
+            MenuItem clearHistoryMenuItem = menu.findItem(R.id.menu_clear_history);
+
+            if (null != scanQrMenuItem) {
+                scanQrMenuItem.setVisible(visible);
+            }
+            if (null != clearHistoryMenuItem) {
+                clearHistoryMenuItem.setVisible(visible);
+            }
+        }
+    }
 }
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 434e102..43c38ee 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
@@ -21,14 +21,6 @@
 
 package cx.ring.loaders;
 
-import java.util.ArrayList;
-
-import cx.ring.R;
-import cx.ring.fragments.SettingsFragment;
-import cx.ring.model.CallContact;
-import cx.ring.model.SipUri;
-import cx.ring.service.LocalService;
-
 import android.Manifest;
 import android.content.AsyncTaskLoader;
 import android.content.ContentResolver;
@@ -39,13 +31,20 @@
 import android.os.OperationCanceledException;
 import android.preference.PreferenceManager;
 import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Im;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.CommonDataKinds.SipAddress;
-import android.provider.ContactsContract.CommonDataKinds.Im;
 import android.provider.ContactsContract.Contacts;
 import android.util.Log;
 import android.util.LongSparseArray;
 
+import java.util.ArrayList;
+
+import cx.ring.R;
+import cx.ring.model.CallContact;
+import cx.ring.model.SipUri;
+import cx.ring.service.LocalService;
+
 public class ContactsLoader extends AsyncTaskLoader<ContactsLoader.Result>
 {
     private static final String TAG = ContactsLoader.class.getSimpleName();
@@ -75,7 +74,7 @@
             Im.CUSTOM_PROTOCOL
     };
 
-    static private final String SELECT = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND (" + Contacts.HAS_PHONE_NUMBER + "=1) AND (" + Contacts.DISPLAY_NAME + " != '' ))";
+    static private final String SELECT = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND (" + Contacts.DISPLAY_NAME + " != '' ))";
 
     private final Uri baseUri;
     private final LongSparseArray<CallContact> filterFrom;
diff --git a/ring-android/app/src/main/res/menu/call_list_menu.xml b/ring-android/app/src/main/res/menu/call_list_menu.xml
index 8d61238..73288a4 100644
--- a/ring-android/app/src/main/res/menu/call_list_menu.xml
+++ b/ring-android/app/src/main/res/menu/call_list_menu.xml
@@ -1,24 +1,27 @@
 <?xml version="1.0" encoding="utf-8"?>
-<menu xmlns:tools="http://schemas.android.com/tools"
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
     tools:context=".client.HomeActivity">
 
-    <item android:id="@+id/menu_contact_search"
+    <item
+        android:id="@+id/menu_contact_search"
         android:actionViewClass="android.widget.SearchView"
-        android:icon="@drawable/ic_call_white_24dp"
-        android:title="@string/searchbar_hint"
         android:hint="@string/searchbar_hint"
+        android:icon="@drawable/ic_search_white_24dp"
+        android:title="@string/searchbar_hint"
         app:actionViewClass="android.support.v7.widget.SearchView"
         app:showAsAction="collapseActionView|ifRoom" />
 
-    <item android:id="@+id/menu_contact_dial"
+    <item
+        android:id="@+id/menu_contact_dial"
         android:icon="@drawable/ic_dialpad_white_24dp"
         android:title="@string/dial_number"
-        app:showAsAction="always"
-        android:visible="false"/>
+        android:visible="false"
+        app:showAsAction="always" />
 
-    <item android:id="@+id/menu_scan_qr"
+    <item
+        android:id="@+id/menu_scan_qr"
         android:icon="@drawable/ic_action_remove"
         android:title="@string/scan_qr"
         app:showAsAction="never" />
@@ -28,5 +31,5 @@
         android:icon="@drawable/ic_action_remove"
         android:orderInCategory="100"
         android:title="@string/ab_clear_history"
-        app:showAsAction="never"/>
+        app:showAsAction="never" />
 </menu>
\ No newline at end of file