package com.netease.nim.demo.main.fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.TextView;
import com.netease.nim.demo.DemoCache;
import com.netease.nim.demo.R;
import com.netease.nim.demo.contact.activity.BlackListActivity;
import com.netease.nim.demo.main.activity.SystemMessageActivity;
import com.netease.nim.demo.main.activity.TeamListActivity;
import com.netease.nim.demo.main.helper.SystemMessageUnreadManager;
import com.netease.nim.demo.main.model.MainTab;
import com.netease.nim.demo.main.reminder.ReminderId;
import com.netease.nim.demo.main.reminder.ReminderItem;
import com.netease.nim.demo.main.reminder.ReminderManager;
import com.netease.nim.demo.session.SessionHelper;
import com.netease.nim.uikit.common.activity.UI;
import com.netease.nim.uikit.contact.ContactsCustomization;
import com.netease.nim.uikit.contact.ContactsFragment;
import com.netease.nim.uikit.contact.core.item.AbsContactItem;
import com.netease.nim.uikit.contact.core.item.ItemTypes;
import com.netease.nim.uikit.contact.core.model.ContactDataAdapter;
import com.netease.nim.uikit.contact.core.viewholder.AbsContactViewHolder;
import java.util.ArrayList;
import java.util.List;
/**
* 集成通讯录列表
* <p/>
* Created by huangjun on 2015/9/7.
*/
public class ContactListFragment extends MainTabFragment {
private ContactsFragment fragment;
public ContactListFragment() {
setContainerId(MainTab.CONTACT.fragmentId);
}
/**
* ******************************** 功能项定制 ***********************************
*/
public final static class FuncItem extends AbsContactItem {
static final FuncItem VERIFY = new FuncItem();
static final FuncItem NORMAL_TEAM = new FuncItem();
static final FuncItem ADVANCED_TEAM = new FuncItem();
static final FuncItem BLACK_LIST = new FuncItem();
static final FuncItem MY_COMPUTER = new FuncItem();
@Override
public int getItemType() {
return ItemTypes.FUNC;
}
@Override
public String belongsGroup() {
return null;
}
public static final class FuncViewHolder extends AbsContactViewHolder<FuncItem> {
private ImageView image;
private TextView funcName;
private TextView unreadNum;
@Override
public View inflate(LayoutInflater inflater) {
View view = inflater.inflate(R.layout.func_contacts_item, null);
this.image = (ImageView) view.findViewById(R.id.img_head);
this.funcName = (TextView) view.findViewById(R.id.tv_func_name);
this.unreadNum = (TextView) view.findViewById(R.id.tab_new_msg_label);
return view;
}
@Override
public void refresh(ContactDataAdapter contactAdapter, int position, FuncItem item) {
if (item == VERIFY) {
funcName.setText("验证提醒");
image.setImageResource(R.drawable.icon_verify_remind);
image.setScaleType(ScaleType.FIT_XY);
int unreadCount = SystemMessageUnreadManager.getInstance().getSysMsgUnreadCount();
updateUnreadNum(unreadCount);
ReminderManager.getInstance().registerUnreadNumChangedCallback(new ReminderManager.UnreadNumChangedCallback() {
@Override
public void onUnreadNumChanged(ReminderItem item) {
if (item.getId() != ReminderId.CONTACT) {
return;
}
updateUnreadNum(item.getUnread());
}
});
} else if (item == NORMAL_TEAM) {
funcName.setText("讨论组");
image.setImageResource(R.drawable.ic_secretary);
} else if (item == ADVANCED_TEAM) {
funcName.setText("高级群");
image.setImageResource(R.drawable.ic_advanced_team);
} else if (item == BLACK_LIST) {
funcName.setText("黑名单");
image.setImageResource(R.drawable.ic_black_list);
} else if (item == MY_COMPUTER) {
funcName.setText("我的电脑");
image.setImageResource(R.drawable.ic_my_computer);
}
if (item != VERIFY) {
image.setScaleType(ScaleType.FIT_XY);
unreadNum.setVisibility(View.GONE);
}
}
private void updateUnreadNum(int unreadCount) {
// 2.*版本viewholder复用问题
if (unreadCount > 0 && funcName.getText().toString().equals("验证提醒")) {
unreadNum.setVisibility(View.VISIBLE);
unreadNum.setText("" + unreadCount);
} else {
unreadNum.setVisibility(View.GONE);
}
}
}
static List<AbsContactItem> provide() {
List<AbsContactItem> items = new ArrayList<AbsContactItem>();
items.add(VERIFY);
items.add(NORMAL_TEAM);
items.add(ADVANCED_TEAM);
items.add(BLACK_LIST);
items.add(MY_COMPUTER);
return items;
}
static void handle(Context context, AbsContactItem item) {
if (item == VERIFY) {
SystemMessageActivity.start(context);
} else if (item == NORMAL_TEAM) {
TeamListActivity.start(context, ItemTypes.TEAMS.NORMAL_TEAM);
} else if (item == ADVANCED_TEAM) {
TeamListActivity.start(context, ItemTypes.TEAMS.ADVANCED_TEAM);
} else if (item == MY_COMPUTER) {
SessionHelper.startP2PSession(context, DemoCache.getAccount());
} else if (item == BLACK_LIST) {
BlackListActivity.start(context);
}
}
}
/**
* ******************************** 生命周期 ***********************************
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
onCurrent(); // 触发onInit,提前加载
}
@Override
protected void onInit() {
addContactFragment(); // 集成通讯录页面
}
// 将通讯录列表fragment动态集成进来。 开发者也可以使用在xml中配置的方式静态集成。
private void addContactFragment() {
fragment = new ContactsFragment();
fragment.setContainerId(R.id.contact_fragment);
UI activity = (UI) getActivity();
// 如果是activity从堆栈恢复,FM中已经存在恢复而来的fragment,此时会使用恢复来的,而new出来这个会被丢弃掉
fragment = (ContactsFragment) activity.addFragment(fragment);
// 功能项定制
fragment.setContactsCustomization(new ContactsCustomization() {
@Override
public Class<? extends AbsContactViewHolder<? extends AbsContactItem>> onGetFuncViewHolderClass() {
return FuncItem.FuncViewHolder.class;
}
@Override
public List<AbsContactItem> onGetFuncItems() {
return FuncItem.provide();
}
@Override
public void onFuncItemClick(AbsContactItem item) {
FuncItem.handle(getActivity(), item);
}
});
}
@Override
public void onCurrentTabClicked() {
// 点击切换到当前TAB
if (fragment != null) {
fragment.scrollToTop();
}
}
}