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