# HG changeset patch # User Da Risk # Date 1335129276 -7200 # Node ID 8f2689fb848807f2d340a9dd668d77a29417c830 # Parent ab5691925a0d3a049f7d46027bbac1533d613c40 Checkstyle. diff -r ab5691925a0d -r 8f2689fb8488 src/com/beem/project/beem/ui/ContactListAdapter.java --- a/src/com/beem/project/beem/ui/ContactListAdapter.java Sun Apr 22 22:49:21 2012 +0200 +++ b/src/com/beem/project/beem/ui/ContactListAdapter.java Sun Apr 22 23:14:36 2012 +0200 @@ -1,3 +1,29 @@ +/* + BEEM is a videoconference application on the Android Platform. + + Copyright (C) 2009-2011 by Frederic-Charles Barthelery, + Nikita Kozlov, + Vincent Veronis. + + This file is part of BEEM. + + BEEM 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. + + BEEM 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 BEEM. If not, see . + + Please send bug reports with examples or suggestions to + contact@beem-project.com or http://www.beem-project.com/ + +*/ package com.beem.project.beem.ui; import java.io.IOException; @@ -26,149 +52,218 @@ import com.beem.project.beem.utils.SortedList; import com.beem.project.beem.utils.Status; +/** + * An Adapter for the contact list. + * It displays a list of contact in a particular group. + * + */ public class ContactListAdapter extends BaseAdapter implements Filterable { - private static final String TAG = ContactListAdapter.class.getSimpleName(); - private final ComparatorContactListByStatusAndName mComparator = - new ComparatorContactListByStatusAndName(); + private static final String TAG = ContactListAdapter.class.getSimpleName(); + private final ComparatorContactListByStatusAndName mComparator = + new ComparatorContactListByStatusAndName(); private List mCurrentList; private final List allContacts = new SortedList(new LinkedList(), mComparator); private final List onlineContacts = new SortedList(new LinkedList(), mComparator); - private final Filter mFilter = new ContactFilter(); + private final Filter mFilter = new ContactFilter(); private final Context context; private LayoutInflater mInflater; + private boolean showOnlineOnly; - private boolean showOnlineOnly; - - public ContactListAdapter(Context c) { + /** + * Create a ContactListAdapter. + * @param c the android context + */ + public ContactListAdapter(final Context c) { mCurrentList = allContacts; context = c; mInflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } - + + @Override + public int getCount() { + return mCurrentList.size(); + } + + @Override + public Object getItem(int position) { + return mCurrentList.get(position); + } + + @Override + public long getItemId(int position) { + return mCurrentList.get(position).hashCode(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View v = convertView; + if (convertView == null) { + v = mInflater.inflate(R.layout.contactlistcontact, null); + } + Contact c = mCurrentList.get(position); + bindView(v, c); + return v; + } + + /** + * Put a contact in the list. + * @param c the contact + */ + public void put(Contact c) { + put(c, allContacts); + if (Status.statusOnline(c.getStatus())) + put(c, onlineContacts); + notifyDataSetChanged(); + } + + /** + * Remove a contact from the list. + * + * @param c the contact + */ + public void remove(Contact c) { + allContacts.remove(c); + onlineContacts.remove(c); + notifyDataSetChanged(); + } + + /** + * Clear the contact list. + */ + public void clear() { + allContacts.clear(); + onlineContacts.clear(); + notifyDataSetChanged(); + } + @Override - public int getCount() { - return mCurrentList.size(); + public Filter getFilter() { + return mFilter; + } + + /** + * Bind a contact to the view. + * @param view the row view. + * @param curContact the contact. + */ + private void bindView(View view, Contact curContact) { + if (curContact != null) { + TextView v = (TextView) view.findViewById(R.id.contactlistpseudo); + v.setText(curContact.getName()); + v = (TextView) view.findViewById(R.id.contactlistmsgperso); + v.setText(curContact.getMsgState()); + ImageView img = (ImageView) view.findViewById(R.id.avatar); + String avatarId = curContact.getAvatarId(); + int contactStatus = curContact.getStatus(); + Drawable avatar = getAvatarStatusDrawable(avatarId); + img.setImageDrawable(avatar); + img.setImageLevel(contactStatus); + } + } + + /** + * Get a LayerDrawable containing the avatar and the status icon. + * The status icon will change with the level of the drawable. + * @param avatarId the avatar id to retrieve or null to get default + * @return a LayerDrawable + */ + private Drawable getAvatarStatusDrawable(String avatarId) { + Drawable avatarDrawable = null; + if (avatarId != null) { + Uri uri = AvatarProvider.CONTENT_URI.buildUpon().appendPath(avatarId).build(); + InputStream in = null; + try { + try { + in = context.getContentResolver().openInputStream(uri); + avatarDrawable = Drawable.createFromStream(in, avatarId); + } finally { + if (in != null) + in.close(); + } + } catch (IOException e) { + Log.w(TAG, "Error while setting the avatar " + avatarId, e); + } } + if (avatarDrawable == null) + avatarDrawable = context.getResources().getDrawable(R.drawable.beem_launcher_icon_silver); + LayerDrawable ld = (LayerDrawable) context.getResources().getDrawable(R.drawable.avatar_status); + ld.setLayerInset(1, 36, 36, 0, 0); + ld.setDrawableByLayerId(R.id.avatar, avatarDrawable); + return ld; + } + /** + * Put a contact in a list. + * Helper method. + * + * @param c the contact + * @param list the list + */ + private void put(Contact c, List list) { + list.remove(c); + list.add(c); + } + + /** + * Tell if the list display only online contacts. + * + * @return true if only online contacts are shown + */ + public boolean isOnlineOnly() { + return showOnlineOnly; + } + + /** + * Set the list to display only the online contacts. + * + * @param online true to display only online contacts + */ + public void setOnlineOnly(boolean online) { + if (online != showOnlineOnly) { + showOnlineOnly = online; + mCurrentList = showOnlineOnly ? onlineContacts : allContacts; + notifyDataSetChanged(); + } + } + + /** + * A Filter which select Contact to display by searching in ther Jid. + */ + private class ContactFilter extends Filter { + + /** + * Create a ContactFilter. + */ + public ContactFilter() { } @Override - public Object getItem(int position) { - return mCurrentList.get(position); - } - - - @Override - public long getItemId(int position) { - return mCurrentList.get(position).hashCode(); + protected Filter.FilterResults performFiltering(CharSequence constraint) { + Log.d(TAG, "performFiltering"); + List result = mCurrentList; + if (constraint.length() > 0) { + result = new LinkedList(); + for (Contact c : mCurrentList) { + if (c.getJID().contains(constraint)) + result.add(c); + } + } + Filter.FilterResults fr = new Filter.FilterResults(); + fr.values = result; + fr.count = result.size(); + return fr; } @Override - public View getView(int position, View convertView, ViewGroup parent) { - View v = convertView; - if (convertView == null) { - v = mInflater.inflate(R.layout.contactlistcontact, null); - } - Contact c = mCurrentList.get(position); - bindView(v, c); - return v; - } - - public void put(Contact c) { - put(c, allContacts); - if (Status.statusOnline(c.getStatus())) - put(c, onlineContacts); - notifyDataSetChanged(); - } - - public void remove(Contact c) { - allContacts.remove(c); - onlineContacts.remove(c); - notifyDataSetChanged(); - } - - - public void clear() { - allContacts.clear(); - onlineContacts.clear(); - notifyDataSetChanged(); - } - - @Override - public Filter getFilter() { - return mFilter; + protected void publishResults(CharSequence constraint, Filter.FilterResults results) { + Log.d(TAG, "publishResults"); + List contacts = (List) results.values; + mCurrentList = contacts; + notifyDataSetChanged(); } - - /** - * Adapte curContact to the view. - * @param view the row view. - * @param curContact the current contact. - */ - private void bindView(View view, Contact curContact) { - if (curContact != null) { - TextView v = (TextView) view.findViewById(R.id.contactlistpseudo); - v.setText(curContact.getName()); - v = (TextView) view.findViewById(R.id.contactlistmsgperso); - v.setText(curContact.getMsgState()); - ImageView img = (ImageView) view.findViewById(R.id.avatar); - String avatarId = curContact.getAvatarId(); - int contactStatus = curContact.getStatus(); - Drawable avatar = getAvatarStatusDrawable(avatarId); - img.setImageDrawable(avatar); - img.setImageLevel(contactStatus); - } - } + } - /** - * Get a LayerDrawable containing the avatar and the status icon. - * The status icon will change with the level of the drawable. - * @param avatarId the avatar id to retrieve or null to get default - * @return a LayerDrawable - */ - private Drawable getAvatarStatusDrawable(String avatarId) { - Drawable avatarDrawable = null; - if (avatarId != null) { - Uri uri = AvatarProvider.CONTENT_URI.buildUpon().appendPath(avatarId).build(); - InputStream in = null; - try { - try { - in = context.getContentResolver().openInputStream(uri); - avatarDrawable = Drawable.createFromStream(in, avatarId); - } finally { - if (in != null) - in.close(); - } - } catch (IOException e) { - Log.w(TAG, "Error while setting the avatar " + avatarId, e); - } - } - if (avatarDrawable == null) - avatarDrawable = context.getResources().getDrawable(R.drawable.beem_launcher_icon_silver); - LayerDrawable ld = (LayerDrawable) context.getResources().getDrawable(R.drawable.avatar_status); - ld.setLayerInset(1, 36, 36, 0, 0); - ld.setDrawableByLayerId(R.id.avatar, avatarDrawable); - return ld; - } - - private void put(Contact c, List list) { - list.remove(c); - list.add(c); - } - - public boolean isOnlineOnly() { - return showOnlineOnly; - } - - public void setOnlineOnly(boolean online) { - if (online != showOnlineOnly) { - showOnlineOnly = online; - mCurrentList = showOnlineOnly ? onlineContacts : allContacts; - notifyDataSetChanged(); - } - } - - - /** + /** * Comparator Contact by status and name. */ private static class ComparatorContactListByStatusAndName implements Comparator { @@ -189,43 +284,4 @@ } } - - /** - * A Filter which select Contact to display by searching in ther Jid. - */ - private class ContactFilter extends Filter { - - /** - * Create a ContactFilter. - */ - public ContactFilter() { } - - @Override - protected Filter.FilterResults performFiltering(CharSequence constraint) { - Log.d(TAG, "performFiltering"); - List result = mCurrentList; - if (constraint.length() > 0) { - result = new LinkedList(); - for (Contact c : mCurrentList) { - if (c.getJID().contains(constraint)) - result.add(c); - } - } - Filter.FilterResults fr = new Filter.FilterResults(); - fr.values = result; - fr.count = result.size(); - return fr; - } - - @Override - protected void publishResults(CharSequence constraint, Filter.FilterResults results) { - Log.d(TAG, "publishResults"); - List contacts = (List) results.values; - mCurrentList = contacts; - notifyDataSetChanged(); - } - } - - - } diff -r ab5691925a0d -r 8f2689fb8488 src/com/beem/project/beem/ui/ContactListFragment.java --- a/src/com/beem/project/beem/ui/ContactListFragment.java Sun Apr 22 22:49:21 2012 +0200 +++ b/src/com/beem/project/beem/ui/ContactListFragment.java Sun Apr 22 23:14:36 2012 +0200 @@ -1,3 +1,29 @@ +/* + BEEM is a videoconference application on the Android Platform. + + Copyright (C) 2009-2011 by Frederic-Charles Barthelery, + Nikita Kozlov, + Vincent Veronis. + + This file is part of BEEM. + + BEEM 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. + + BEEM 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 BEEM. If not, see . + + Please send bug reports with examples or suggestions to + contact@beem-project.com or http://www.beem-project.com/ + +*/ package com.beem.project.beem.ui; import java.util.List; @@ -18,50 +44,56 @@ import com.beem.project.beem.R; import com.beem.project.beem.service.Contact; +/** + * A Fragment which display a list of contacts. + */ public class ContactListFragment extends ListFragment { - private String group; - private ContactList hostActivity; - private Contact mSelectedContact; - - public static ContactListFragment newInstance(String group) { - ContactListFragment f = new ContactListFragment(); - Bundle b = new Bundle(); - b.putString("group", group); - f.setArguments(b); - return f; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - parseArguments(); - } - - @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - hostActivity = (ContactList) activity; - } - - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - ListAdapter adapter = hostActivity.getContactListAdapter(group); - setListAdapter(adapter); - registerForContextMenu(getListView()); - } - - @Override - public void onListItemClick(ListView l, View v, int position, long id) { - ContactListAdapter a = (ContactListAdapter) getListAdapter(); - Contact c = (Contact) a.getItem(position); - Intent i = new Intent(getActivity(), Chat.class); - i.setData(c.toUri()); - startActivity(i); - } - - - + private String group; + private ContactList hostActivity; + private Contact mSelectedContact; + + /** + * Create a ContactListFragment. + * @param group the group name + * @return the ContactListFragment + */ + public static ContactListFragment newInstance(String group) { + ContactListFragment f = new ContactListFragment(); + Bundle b = new Bundle(); + b.putString("group", group); + f.setArguments(b); + return f; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + parseArguments(); + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + hostActivity = (ContactList) activity; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + ListAdapter adapter = hostActivity.getContactListAdapter(group); + setListAdapter(adapter); + registerForContextMenu(getListView()); + } + + @Override + public void onListItemClick(ListView l, View v, int position, long id) { + ContactListAdapter a = (ContactListAdapter) getListAdapter(); + Contact c = (Contact) a.getItem(position); + Intent i = new Intent(getActivity(), Chat.class); + i.setData(c.toUri()); + startActivity(i); + } + @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); @@ -72,66 +104,69 @@ menu.setHeaderTitle(mSelectedContact.getJID()); } - private void parseArguments() { - Bundle b = getArguments(); - if (b == null) - return; - group = b.getString("group"); + /** + * Parse the arguments submit to the Fragment. + */ + private void parseArguments() { + Bundle b = getArguments(); + if (b == null) + return; + group = b.getString("group"); + } + + @Override + public boolean onContextItemSelected(MenuItem item) { + Intent in; + boolean result = false; + if (mSelectedContact != null) { + switch (item.getItemId()) { + case R.id.contact_list_context_menu_chat_item: + List res = mSelectedContact.getMRes(); + if (res.isEmpty()) { + break; + } + for (String resv : res) { + in = new Intent(hostActivity, Chat.class); + in.setData(mSelectedContact.toUri(resv)); + item.getSubMenu().add(resv).setIntent(in); + } + result = true; + break; + case R.id.contact_list_context_menu_call_item: + hostActivity.doContextMenuAction(item.getItemId(), mSelectedContact); + break; + case R.id.contact_list_context_menu_user_info: + item.getSubMenu().setHeaderTitle(mSelectedContact.getJID()); + result = true; + break; + case R.id.contact_list_context_menu_userinfo_alias: + hostActivity.doContextMenuAction(item.getItemId(), mSelectedContact); + result = true; + break; + case R.id.contact_list_context_menu_userinfo_group: + in = new Intent(hostActivity, GroupList.class); + in.putExtra("contact", mSelectedContact); + startActivity(in); + result = true; + break; + case R.id.contact_list_context_menu_userinfo_subscription: + hostActivity.doContextMenuAction(item.getItemId(), mSelectedContact); + result = true; + break; + case R.id.contact_list_context_menu_userinfo_block: + result = true; + break; + case R.id.contact_list_context_menu_userinfo_delete: + hostActivity.doContextMenuAction(item.getItemId(), mSelectedContact); + result = true; + break; + default: + result = super.onContextItemSelected(item); + break; + } + return result; } - - @Override - public boolean onContextItemSelected(MenuItem item) { - Intent in; - boolean result = false; - if (mSelectedContact != null) { - switch (item.getItemId()) { - case R.id.contact_list_context_menu_chat_item: - List res = mSelectedContact.getMRes(); - if (res.isEmpty()) { - break; - } - for (String resv : res) { - in = new Intent(hostActivity, Chat.class); - in.setData(mSelectedContact.toUri(resv)); - item.getSubMenu().add(resv).setIntent(in); - } - result = true; - break; - case R.id.contact_list_context_menu_call_item: - hostActivity.doContextMenuAction(item.getItemId(), mSelectedContact); - break; - case R.id.contact_list_context_menu_user_info: - item.getSubMenu().setHeaderTitle(mSelectedContact.getJID()); - result = true; - break; - case R.id.contact_list_context_menu_userinfo_alias: - hostActivity.doContextMenuAction(item.getItemId(), mSelectedContact); - result = true; - break; - case R.id.contact_list_context_menu_userinfo_group: - in = new Intent(hostActivity, GroupList.class); - in.putExtra("contact", mSelectedContact); - startActivity(in); - result = true; - break; - case R.id.contact_list_context_menu_userinfo_subscription: - hostActivity.doContextMenuAction(item.getItemId(), mSelectedContact); - result = true; - break; - case R.id.contact_list_context_menu_userinfo_block: - result = true; - break; - case R.id.contact_list_context_menu_userinfo_delete: - hostActivity.doContextMenuAction(item.getItemId(), mSelectedContact); - result = true; - break; - default: - result = super.onContextItemSelected(item); - break; - } - return result; - } - return super.onContextItemSelected(item); - } - + return super.onContextItemSelected(item); + } + }