package com.netease.nim.demo.contact.activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.netease.nim.demo.R; import com.netease.nim.demo.contact.viewholder.BlackListViewHolder; import com.netease.nim.uikit.NimUIKit; import com.netease.nim.uikit.cache.NimUserInfoCache; import com.netease.nim.uikit.common.activity.UI; import com.netease.nim.uikit.common.adapter.TAdapterDelegate; import com.netease.nim.uikit.common.adapter.TViewHolder; import com.netease.nim.uikit.contact.core.item.ContactIdFilter; import com.netease.nim.uikit.contact_selector.activity.ContactSelectActivity; import com.netease.nim.uikit.model.ToolBarOptions; import com.netease.nimlib.sdk.NIMClient; import com.netease.nimlib.sdk.RequestCallback; import com.netease.nimlib.sdk.RequestCallbackWrapper; import com.netease.nimlib.sdk.ResponseCode; import com.netease.nimlib.sdk.friend.FriendService; import com.netease.nimlib.sdk.uinfo.UserInfoProvider; import com.netease.nimlib.sdk.uinfo.model.NimUserInfo; import java.util.ArrayList; import java.util.List; /** * 黑名单 * Created by huangjun on 2015/8/12. */ public class BlackListActivity extends UI implements TAdapterDelegate { private static final String TAG = "BlackListActivity"; private static final int REQUEST_CODE_BLACK = 1; private ListView listView; private List<UserInfoProvider.UserInfo> data = new ArrayList<>(); private BlackListAdapter adapter; public static void start(Context context) { Intent intent = new Intent(); intent.setClass(context, BlackListActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); context.startActivity(intent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.black_list_activity); ToolBarOptions options = new ToolBarOptions(); options.titleId = R.string.black_list; setToolBar(R.id.toolbar, options); initData(); findViews(); initActionbar(); } @Override public int getViewTypeCount() { return 1; } @Override public Class<? extends TViewHolder> viewHolderAtPosition(int position) { return BlackListViewHolder.class; } @Override public boolean enabled(int position) { return false; } private void initData() { final List<String> accounts = NIMClient.getService(FriendService.class).getBlackList(); List<String> unknownAccounts = new ArrayList<>(); for (String account : accounts) { if (!NimUserInfoCache.getInstance().hasUser(account)) { unknownAccounts.add(account); } else { data.add(NimUserInfoCache.getInstance().getUserInfo(account)); } } if (!unknownAccounts.isEmpty()) { NimUserInfoCache.getInstance().getUserInfoFromRemote(unknownAccounts, new RequestCallbackWrapper<List<NimUserInfo>>() { @Override public void onResult(int code, List<NimUserInfo> users, Throwable exception) { if (code == ResponseCode.RES_SUCCESS) { data.addAll(users); adapter.notifyDataSetChanged(); } } }); } } private void initActionbar() { TextView toolbarView = findView(R.id.action_bar_right_clickable_textview); toolbarView.setText(R.string.add); toolbarView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ContactSelectActivity.Option option = new ContactSelectActivity.Option(); option.title = "选择黑名单"; option.maxSelectNum = 1; ArrayList<String> excludeAccounts = new ArrayList<>(); for (UserInfoProvider.UserInfo user : data) { if (user != null) { excludeAccounts.add(user.getAccount()); } } option.itemFilter = new ContactIdFilter(excludeAccounts, true); NimUIKit.startContactSelect(BlackListActivity.this, option, REQUEST_CODE_BLACK); } }); } private void findViews() { TextView notifyText = ((TextView) findView(R.id.notify_bar).findViewById(R.id.status_desc_label)); notifyText.setText(R.string.black_list_tip); notifyText.setBackgroundColor(getResources().getColor(R.color.color_yellow_fcf3cd)); notifyText.setTextColor(getResources().getColor(R.color.color_yellow_796413)); listView = findView(R.id.black_list_view); adapter = new BlackListAdapter(this, data, this, viewHolderEventListener); listView.setAdapter(adapter); } private BlackListAdapter.ViewHolderEventListener viewHolderEventListener = new BlackListAdapter.ViewHolderEventListener() { @Override public void onRemove(final UserInfoProvider.UserInfo user) { NIMClient.getService(FriendService.class).removeFromBlackList(user.getAccount()).setCallback(new RequestCallback<Void>() { @Override public void onSuccess(Void param) { Toast.makeText(BlackListActivity.this, "移出黑名单成功", Toast.LENGTH_SHORT).show(); data.remove(user); adapter.notifyDataSetChanged(); } @Override public void onFailed(int code) { Toast.makeText(BlackListActivity.this, "移出黑名单失败,错误码:" + code, Toast.LENGTH_SHORT).show(); } @Override public void onException(Throwable exception) { } }); } @Override public void onItemClick(UserInfoProvider.UserInfo userInfo) { Log.i(TAG, "onItemClick, user account=" + userInfo.getAccount()); } }; private void addUserToBlackList(ArrayList<String> selected) { for (final String account : selected) { NIMClient.getService(FriendService.class).addToBlackList(account).setCallback(new RequestCallback<Void>() { @Override public void onSuccess(Void param) { data.add(NimUserInfoCache.getInstance().getUserInfo(account)); adapter.notifyDataSetChanged(); } @Override public void onFailed(int code) { Toast.makeText(BlackListActivity.this, "加入黑名单失败,code:" + code, Toast.LENGTH_SHORT).show(); } @Override public void onException(Throwable exception) { } }); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { switch (requestCode) { case REQUEST_CODE_BLACK: final ArrayList<String> selected = data.getStringArrayListExtra(ContactSelectActivity.RESULT_DATA); if (selected != null && !selected.isEmpty()) { addUserToBlackList(selected); } break; } } } }