Added back fastscroll in contacts list

This commit is contained in:
Sylvain Berfini 2016-03-21 17:08:19 +01:00 committed by Jehan Monnier
parent 958ee4c946
commit f3a6e1c66f
2 changed files with 48 additions and 6 deletions

View file

@ -126,6 +126,7 @@
android:divider="@color/colorE"
android:fastScrollAlwaysVisible="true"
android:fastScrollEnabled="true"
android:scrollbarStyle="outsideOverlay"
android:dividerHeight="1dp" />
<TextView

View file

@ -20,12 +20,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
package org.linphone;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.linphone.core.LinphoneFriend;
import org.linphone.core.PresenceActivityType;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.app.Fragment;
import android.os.Bundle;
@ -46,12 +48,12 @@ import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SectionIndexer;
import android.widget.TextView;
/**
* @author Sylvain Berfini
*/
@SuppressLint("DefaultLocale")
public class ContactsListFragment extends Fragment implements OnClickListener, OnItemClickListener, ContactsUpdatedListener {
private LayoutInflater mInflater;
private ListView contactsList;
@ -77,8 +79,7 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mInflater = inflater;
View view = inflater.inflate(R.layout.contacts_list, container, false);
@ -417,11 +418,28 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
contactsList.setSelectionFromTop(lastKnownPosition, 0);
}
class ContactsListAdapter extends BaseAdapter {
class ContactsListAdapter extends BaseAdapter implements SectionIndexer {
private List<LinphoneContact> contacts;
String[] sections;
ArrayList<String> sectionsList;
Map<String, Integer>map = new LinkedHashMap<String, Integer>();
ContactsListAdapter(List<LinphoneContact> contactsList) {
contacts = contactsList;
map = new LinkedHashMap<String, Integer>();
String prevLetter = null;
for (int i = 0; i < contacts.size(); i++) {
LinphoneContact contact = contacts.get(i);
String firstLetter = contact.getFullName().substring(0, 1).toUpperCase(Locale.getDefault());
if (!firstLetter.equals(prevLetter)) {
prevLetter = firstLetter;
map.put(firstLetter, i);
}
}
sectionsList = new ArrayList<String>(map.keySet());
sections = new String[sectionsList.size()];
sectionsList.toArray(sections);
}
public int getCount() {
@ -456,7 +474,13 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
name.setText(contact.getFullName());
LinearLayout separator = (LinearLayout) view.findViewById(R.id.separator);
separator.setVisibility(View.GONE);
TextView separatorText = (TextView) view.findViewById(R.id.separator_text);
if (getPositionForSection(getSectionForPosition(position)) != position) {
separator.setVisibility(View.GONE);
} else {
separator.setVisibility(View.VISIBLE);
separatorText.setText(String.valueOf(contact.getFullName().charAt(0)));
}
ImageView icon = (ImageView) view.findViewById(R.id.contact_picture);
if (contact.hasPhoto()) {
@ -519,5 +543,22 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
return view;
}
@Override
public Object[] getSections() {
return sections;
}
@Override
public int getPositionForSection(int sectionIndex) {
return map.get(sections[sectionIndex]);
}
@Override
public int getSectionForPosition(int position) {
LinphoneContact contact = contacts.get(position);
String letter = contact.getFullName().substring(0, 1);
return sectionsList.indexOf(letter);
}
}
}