From a5287df9c8b66cf496412722564f93074e7cd9d5 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 2 Nov 2018 15:02:24 +0100 Subject: [PATCH] Improved search bars + disable some features if default proxy config domain isn't sip.linphone.org --- res/layout/chat_create.xml | 22 +++------- res/layout/contacts_list.xml | 22 +++------- .../linphone/chat/ChatCreationFragment.java | 33 ++++++--------- .../org/linphone/chat/ChatListFragment.java | 4 ++ .../contacts/ContactsListFragment.java | 41 +++++++------------ .../linphone/contacts/ContactsManager.java | 9 ++-- .../contacts/SearchContactsListAdapter.java | 11 ++++- 7 files changed, 55 insertions(+), 87 deletions(-) diff --git a/res/layout/chat_create.xml b/res/layout/chat_create.xml index ff2c11069..eeb0069af 100644 --- a/res/layout/chat_create.xml +++ b/res/layout/chat_create.xml @@ -132,28 +132,18 @@ android:layout_height="wrap_content" android:layout_margin="10dp"> - - - + android:background="@drawable/resizable_textfield" + android:inputType="textPersonName"/> diff --git a/res/layout/contacts_list.xml b/res/layout/contacts_list.xml index d5d45deb2..21359384f 100644 --- a/res/layout/contacts_list.xml +++ b/res/layout/contacts_list.xml @@ -92,29 +92,19 @@ android:layout_height="wrap_content" android:layout_margin="10dp"> - - - mContactsSelected; - private ImageView mAllContactsButton, mLinphoneContactsButton, mClearSearchFieldButton, mBackButton, mNextButton; + private ImageView mAllContactsButton, mLinphoneContactsButton, mBackButton, mNextButton; private boolean mOnlyDisplayLinphoneContacts; private View mAllContactsSelected, mLinphoneContactsSelected; private RelativeLayout mSearchLayout, mWaitLayout, mLinphoneContactsToggle, mAllContactsToggle; - private EditText mSearchField; + private SearchView mSearchField; private ProgressBar mContactsFetchInProgress; private SearchContactsListAdapter mSearchAdapter; private String mChatRoomSubject, mChatRoomAddress; @@ -125,31 +125,22 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen mNextButton.setEnabled(false); mSearchLayout = view.findViewById(R.id.layoutSearchField); - mClearSearchFieldButton = view.findViewById(R.id.clearSearchField); - mClearSearchFieldButton.setOnClickListener(this); - mContactsFetchInProgress = view.findViewById(R.id.contactsFetchInProgress); mContactsFetchInProgress.setVisibility(View.VISIBLE); mSearchAdapter = new SearchContactsListAdapter(null, mContactsFetchInProgress, this, mCreateGroupChatRoom == false); mSearchField = view.findViewById(R.id.searchField); - mSearchField.addTextChangedListener(new TextWatcher() { + mSearchField.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - if (before > count) { - ContactsManager.getInstance().getMagicSearch().resetSearchCache(); - } + public boolean onQueryTextSubmit(String query) { + return true; } @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - - } - - @Override - public void afterTextChanged(Editable s) { - mSearchAdapter.searchContacts(mSearchField.getText().toString(), mContactsList); + public boolean onQueryTextChange(String newText) { + mSearchAdapter.searchContacts(newText, mContactsList); + return true; } }); @@ -326,7 +317,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen } private void updateList() { - mSearchAdapter.searchContacts(mSearchField.getText().toString(), mContactsList); + mSearchAdapter.searchContacts(mSearchField.getQuery().toString(), mContactsList); mSearchAdapter.notifyDataSetChanged(); } @@ -354,7 +345,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen private void resetAndResearch() { ContactsManager.getInstance().getMagicSearch().resetSearchCache(); - mSearchAdapter.searchContacts(mSearchField.getText().toString(), mContactsList); + mSearchAdapter.searchContacts(mSearchField.getQuery().toString(), mContactsList); } private void addSelectedContactAddress(ContactAddress ca) { @@ -453,7 +444,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen LinphoneActivity.instance().goToChatGroupInfos(mChatRoomAddress, mContactsSelected, mChatRoomSubject, true, true, mShareInfos, mSecurityToggle.isChecked()); } } else if (id == R.id.clearSearchField) { - mSearchField.setText(""); + mSearchField.setQuery("", false); mSearchAdapter.searchContacts("", mContactsList); } else if (id == R.id.contactChatDelete) { ContactAddress ca = (ContactAddress) view.getTag(); diff --git a/src/android/org/linphone/chat/ChatListFragment.java b/src/android/org/linphone/chat/ChatListFragment.java index bdc2e8861..39117d79d 100644 --- a/src/android/org/linphone/chat/ChatListFragment.java +++ b/src/android/org/linphone/chat/ChatListFragment.java @@ -42,6 +42,7 @@ import org.linphone.core.ChatRoomListenerStub; import org.linphone.core.Core; import org.linphone.core.CoreListenerStub; import org.linphone.core.EventLog; +import org.linphone.core.ProxyConfig; import org.linphone.fragments.FragmentsAvailable; import org.linphone.mediastream.Log; import org.linphone.ui.SelectableHelper; @@ -210,6 +211,9 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene } refreshChatRoomsList(); + + ProxyConfig lpc = lc.getDefaultProxyConfig(); + mNewGroupDiscussionButton.setEnabled(lpc != null && lpc.getConferenceFactoryUri() != null); } @Override diff --git a/src/android/org/linphone/contacts/ContactsListFragment.java b/src/android/org/linphone/contacts/ContactsListFragment.java index 619f8b5dd..ed6bda877 100644 --- a/src/android/org/linphone/contacts/ContactsListFragment.java +++ b/src/android/org/linphone/contacts/ContactsListFragment.java @@ -33,9 +33,9 @@ import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; -import android.widget.EditText; import android.widget.ImageView; import android.widget.ProgressBar; +import android.widget.SearchView; import android.widget.TextView; import org.linphone.LinphoneManager; @@ -56,8 +56,7 @@ public class ContactsListFragment extends Fragment implements OnItemClickListene private int lastKnownPosition; private boolean editOnClick = false, editConsumed = false, onlyDisplayChatAddress = false; private String sipAddressToAdd, displayName = null; - private ImageView clearSearchField; - private EditText searchField; + private SearchView mSearchView; private ProgressBar contactsFetchInProgress; private LinearLayoutManager layoutManager; private Context mContext; @@ -149,27 +148,17 @@ public class ContactsListFragment extends Fragment implements OnItemClickListene } } - clearSearchField = view.findViewById(R.id.clearSearchField); - clearSearchField.setOnClickListener(new View.OnClickListener() { + mSearchView = view.findViewById(R.id.searchField); + mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override - public void onClick(View v) { - searchField.setText(""); - } - }); - - searchField = view.findViewById(R.id.searchField); - searchField.addTextChangedListener(new TextWatcher() { - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { + public boolean onQueryTextSubmit(String query) { + return true; } @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void afterTextChanged(Editable s) { - searchContacts(searchField.getText().toString()); + public boolean onQueryTextChange(String newText) { + searchContacts(newText.toString()); + return true; } }); @@ -232,7 +221,7 @@ public class ContactsListFragment extends Fragment implements OnItemClickListene noContact.setVisibility(View.GONE); contactsList.setVisibility(View.VISIBLE); boolean isEditionEnabled = false; - if (searchField.getText().toString() == "") { + if (mSearchView.getQuery().toString() == "") { if (onlyDisplayLinphoneContacts) { listContact = ContactsManager.getInstance().getSIPContacts(); } else { @@ -240,9 +229,9 @@ public class ContactsListFragment extends Fragment implements OnItemClickListene } } else { if (onlyDisplayLinphoneContacts) { - listContact = ContactsManager.getInstance().getSIPContacts(searchField.getText().toString()); + listContact = ContactsManager.getInstance().getSIPContacts(mSearchView.getQuery().toString()); } else { - listContact = ContactsManager.getInstance().getContacts(searchField.getText().toString()); + listContact = ContactsManager.getInstance().getContacts(mSearchView.getQuery().toString()); } } @@ -267,8 +256,6 @@ public class ContactsListFragment extends Fragment implements OnItemClickListene } else if (onlyDisplayLinphoneContacts && mContactAdapter.getItemCount() == 0) { noSipContact.setVisibility(View.VISIBLE); } - - ContactsManager.getInstance().setLinphoneContactsPrefered(onlyDisplayLinphoneContacts); } private void changeContactsToggle() { @@ -365,8 +352,8 @@ public class ContactsListFragment extends Fragment implements OnItemClickListene } public void invalidate() { - if (searchField != null && searchField.getText().toString().length() > 0) { - searchContacts(searchField.getText().toString()); + if (mSearchView != null && mSearchView.getQuery().toString().length() > 0) { + searchContacts(mSearchView.getQuery().toString()); } else { changeContactsAdapter(); } diff --git a/src/android/org/linphone/contacts/ContactsManager.java b/src/android/org/linphone/contacts/ContactsManager.java index 85135f977..0b6d7df8d 100644 --- a/src/android/org/linphone/contacts/ContactsManager.java +++ b/src/android/org/linphone/contacts/ContactsManager.java @@ -76,7 +76,6 @@ public class ContactsManager extends ContentObserver implements FriendListListen private List mContacts, mSipContacts; private MagicSearch magicSearch; - private boolean preferLinphoneContacts = false; private Activity mActivity; private HashMap mAndroidContactsCache; private Bitmap defaultAvatar; @@ -202,12 +201,10 @@ public class ContactsManager extends ContentObserver implements FriendListListen return contactsR && !mActivity.getResources().getBoolean(R.bool.force_use_of_linphone_friends); } - public void setLinphoneContactsPrefered(boolean isPrefered) { - preferLinphoneContacts = isPrefered; - } - public boolean isLinphoneContactsPrefered() { - return preferLinphoneContacts; + ProxyConfig lpc = LinphoneManager.getLc().getDefaultProxyConfig(); + if (lpc != null && lpc.getIdentityAddress().getDomain().equals(getString(R.string.default_domain))) return true; + return false; } public void initializeContactManager(Activity activity) { diff --git a/src/android/org/linphone/contacts/SearchContactsListAdapter.java b/src/android/org/linphone/contacts/SearchContactsListAdapter.java index a05208605..f29830b7a 100644 --- a/src/android/org/linphone/contacts/SearchContactsListAdapter.java +++ b/src/android/org/linphone/contacts/SearchContactsListAdapter.java @@ -85,7 +85,8 @@ public class SearchContactsListAdapter extends RecyclerView.Adapter getContacts() { return contacts; @@ -105,6 +106,7 @@ public class SearchContactsListAdapter extends RecyclerView.Adapter result = new ArrayList<>(); + if (mPreviousSearch != null) { + if (mPreviousSearch.length() > search.length()) { + ContactsManager.getInstance().getMagicSearch().resetSearchCache(); + } + } + mPreviousSearch = search; + String domain = ""; ProxyConfig prx = LinphoneManager.getLc().getDefaultProxyConfig(); if (prx != null) domain = prx.getDomain();