Commit 21228e69 authored by jianglx's avatar jianglx

上传im添加好友功能 2019-12-16

parent 79bd3ca0
...@@ -56,7 +56,9 @@ ...@@ -56,7 +56,9 @@
android:name=".CustomerListActivity" android:name=".CustomerListActivity"
android:launchMode="singleTask" android:launchMode="singleTask"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity android:name=".AddressListActivity"></activity> <activity android:name=".AddressListActivity" />
<activity android:name=".AddFriendActivity" />
<activity android:name=".NewFriendActivity"></activity>
</application> </application>
</manifest> </manifest>
\ No newline at end of file
package com.rv.im;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.weight.TitleView;
import com.rv.im.adapter.FriendSearchListAdapter;
import com.rv.im.bean.AddResultBean;
import com.rv.im.bean.FriendSearchBean;
import com.rv.im.db.service.FriendServiceImp;
import com.rv.im.db.table.ChatMessage;
import com.rv.im.presenter.AddFriendPresenter;
import com.rv.im.xmpp.listener.NewFriendListener;
/*******
*
* 添加好友功能
*
*/
public class AddFriendActivity extends BaseStatusActivity<AddFriendPresenter> implements NewFriendListener {
private EditText edtSearch;
private Button btnSearch;
private RecyclerView recyclerview;
private FriendSearchListAdapter adapter;
private String mKeyWord;
private String userId;
private String userName;
private String addhaoyouid = null;
@Override
protected int setLayout() {
return R.layout.activity_add_friend;
}
@Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
titleView.setTitle("添加好友");
btnSearch = findViewById(R.id.btn_search);
edtSearch = findViewById(R.id.edt_search);
recyclerview = findViewById(R.id.recyclerview);
recyclerview.setLayoutManager(new LinearLayoutManager(this, LinearLayout.VERTICAL, false));
adapter = new FriendSearchListAdapter(null);
adapter.setListener(new FriendSearchListAdapter.FriendItemClickListener() {
@Override
public void showDetail(FriendSearchBean.FriendSearItemBean item) {
}
@Override
public void add(FriendSearchBean.FriendSearItemBean item) {
userId = item.getUserId();
userName = item.getNickname();
int fromAddType;
if (!TextUtils.isEmpty(userName) && userName.contains(mKeyWord)) {
fromAddType = 5;
} else {
// 昵称不包含关键字的话就是通过手机号搜索出来的,
fromAddType = 4;
}
mPresenter.addFriend(userId, fromAddType);
}
});
recyclerview.setAdapter(adapter);
btnSearch.setOnClickListener(v -> {
mKeyWord = edtSearch.getText().toString().trim();
mPresenter.search(mKeyWord);
});
}
private int isyanzheng = 0;// 该好友是否需要验证
@Override
public void onShowResult(int requestType, BaseBean result) {
switch (requestType) {
case 0:
FriendSearchBean searchBean = (FriendSearchBean) result;
if (searchBean != null && searchBean.resultCode == 1 && searchBean.getData() != null && searchBean.getData().size() > 0) {
adapter.setNewData(searchBean.getData());
}
break;
case 1:
AddResultBean addResultBean = (AddResultBean) result;
if (addResultBean.resultCode == 1 && addResultBean.getData() != null) {
if (addResultBean.getData().getType() == 1 || addResultBean.getData().getType() == 3) {
isyanzheng = 0;// 需要验证
// 需要验证就发送打招呼的消息,
showToast("打招呼成功,静候回音");
mPresenter.doSayHello(null, userName, userId);
} else if (addResultBean.getData().getType() == 2 || addResultBean.getData().getType() == 4) {// 已经是好友了
isyanzheng = 1;// 不需要验证
// 在会员列表添加一条会员,里面内容为成功添加好友。
// NewFriendMessage message = NewFriendMessage.createWillSendMessage(
// coreManager.getSelf(), XmppMessage.TYPE_FRIEND, null, mUser);
// NewFriendDao.getInstance().createOrUpdateNewFriend(message);
// // 不需要验证的话直接加上,就发个xmpp消息,
// // 这里最终调用smack的方法发送xmpp消息,
// coreManager.sendNewFriendMessage(mUser.getUserId(), message);
// 数据库中添加好友
new FriendServiceImp(this).addMessage(mPresenter.buildAddFriendMessage(userId, userName, 2));
ChatMessage message = mPresenter.doSayAddFriend(userName, userId);
addhaoyouid = message != null ? message.getPackId() : "";
showToast("好友添加成功");
} else if (addResultBean.getData().getType() == 5) {
showToast(getString(R.string.add_attention_failed));
}
}
break;
}
}
@Override
public void onNewFriendSendStateChange(String toUserId, ChatMessage message, int messageState) {
}
@Override
public boolean onNewFriend(ChatMessage message) {
return false;
}
}
...@@ -55,6 +55,20 @@ public class AddressListActivity extends BaseStatusActivity<AddressPresenter> { ...@@ -55,6 +55,20 @@ public class AddressListActivity extends BaseStatusActivity<AddressPresenter> {
super.loadData(savedInstanceState, intent); super.loadData(savedInstanceState, intent);
mPresenter.initAddress(lists); mPresenter.initAddress(lists);
adapter = new AddressListAdapter(lists); adapter = new AddressListAdapter(lists);
adapter.setListener((AddressListAdapter.OnItemClickListener<ContactsBean.ContactItemBean>) (position, bean) -> {
Intent in;
if (position == 0) {
in = new Intent(AddressListActivity.this, CustomerListActivity.class);
startActivityForResult(in, 1000);
} else if (position == 1) {
} else if (position == 2) {
in = new Intent(AddressListActivity.this,NewFriendActivity.class) ;
startActivity(in);
} else {
}
});
recyclerView.setAdapter(adapter); recyclerView.setAdapter(adapter);
} }
...@@ -71,6 +85,7 @@ public class AddressListActivity extends BaseStatusActivity<AddressPresenter> { ...@@ -71,6 +85,7 @@ public class AddressListActivity extends BaseStatusActivity<AddressPresenter> {
lists.clear(); lists.clear();
lists.addAll(bean.getData()); lists.addAll(bean.getData());
Collections.sort(lists); Collections.sort(lists);
mPresenter.addTopDatas(lists);
adapter.setNewData(lists); adapter.setNewData(lists);
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
} }
......
package com.rv.im;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.weight.TitleView;
import com.rv.im.presenter.NewFriendPresenter;
/*********
*
* 新朋友activity
*
*/
public class NewFriendActivity extends BaseStatusActivity<NewFriendPresenter> {
private LinearLayout llSearch;
@Override
public void onShowResult(int requestType, BaseBean result) {
}
@Override
protected int setLayout() {
return R.layout.activity_new_friend;
}
@Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
titleView.setTitle("新的朋友");
llSearch = findViewById(R.id.ll_search);
llSearch.setOnClickListener(v -> {
Intent in = new Intent(NewFriendActivity.this, AddFriendActivity.class);
startActivityForResult(in, 1);
});
}
}
...@@ -24,6 +24,12 @@ public class AddressListAdapter extends BaseQuickAdapter<ContactsBean.ContactIte ...@@ -24,6 +24,12 @@ public class AddressListAdapter extends BaseQuickAdapter<ContactsBean.ContactIte
super(R.layout.item_address_list, data); super(R.layout.item_address_list, data);
} }
public OnItemClickListener listener;
public void setListener(OnItemClickListener listener) {
this.listener = listener;
}
@Override @Override
protected void convert(BaseViewHolder helper, ContactsBean.ContactItemBean item) { protected void convert(BaseViewHolder helper, ContactsBean.ContactItemBean item) {
helper.setText(R.id.tv_name, item.getToNickname()); helper.setText(R.id.tv_name, item.getToNickname());
...@@ -44,5 +50,16 @@ public class AddressListAdapter extends BaseQuickAdapter<ContactsBean.ContactIte ...@@ -44,5 +50,16 @@ public class AddressListAdapter extends BaseQuickAdapter<ContactsBean.ContactIte
// GlideManager.getInstance(mContext).loadImage(item.getHeadUrl(), imageView); // GlideManager.getInstance(mContext).loadImage(item.getHeadUrl(), imageView);
// } // }
} }
helper.itemView.setOnClickListener(v -> {
if (listener != null) {
listener.onItemclick(getData().indexOf(item), item);
}
});
}
public interface OnItemClickListener<T> {
void onItemclick(int position, T t);
} }
} }
package com.rv.im.adapter;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.view.View;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.rv.im.R;
import com.rv.im.bean.ContactsBean;
import com.rv.im.bean.FriendSearchBean;
import com.rv.im.util.NetworkUtil;
import java.util.List;
public class FriendSearchListAdapter extends BaseQuickAdapter<FriendSearchBean.FriendSearItemBean, BaseViewHolder> {
private FriendItemClickListener listener;
public FriendSearchListAdapter(@Nullable List<FriendSearchBean.FriendSearItemBean> data) {
super(R.layout.item_friend_view, data);
}
public void setListener(FriendItemClickListener listener) {
this.listener = listener;
}
@Override
protected void convert(BaseViewHolder helper, FriendSearchBean.FriendSearItemBean item) {
helper.setImageResource(R.id.img_header, R.drawable.icon_lion);
helper.setText(R.id.tv_name, TextUtils.isEmpty(item.getNickname()) ? " " : item.getNickname());
helper.itemView.setOnClickListener(v -> {
// 显示
if (listener != null) {
listener.showDetail(item);
}
});
helper.setOnClickListener(R.id.btn_add, v -> {
if (listener != null) {
listener.add(item);
}
});
}
public interface FriendItemClickListener {
void showDetail(FriendSearchBean.FriendSearItemBean item);
void add(FriendSearchBean.FriendSearItemBean item);
}
}
package com.rv.im.bean;
public class AddResultBean extends ImBaseBean {
private AddAttentionResult data;
public class AddAttentionResult {
private int type;
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}
public AddAttentionResult getData() {
return data;
}
public void setData(AddAttentionResult data) {
this.data = data;
}
}
package com.rv.im.bean;
import java.util.List;
public class FriendSearchBean extends ImBaseBean {
private long currentTime ;
private List<FriendSearItemBean> data ;
public long getCurrentTime() {
return currentTime;
}
public void setCurrentTime(long currentTime) {
this.currentTime = currentTime;
}
public List<FriendSearItemBean> getData() {
return data;
}
public void setData(List<FriendSearItemBean> data) {
this.data = data;
}
public class FriendSearItemBean {
private String account ;
private int active ;
private int attCount ;
private double balance ;
private long createTime ;
private int fansCount ;
private int friendsCount ;
private int isAuth ;
private int isPasuse ;
private Location loc ;
private int msgNum ;
private String nickname ;
private boolean notLetSeeHim ;
private boolean notSeeHim ;
private int num ;
private int offlineNoPushMsg ;
private int onlinestate ;
private int setAccountCount ;
private int sex ;
private long showLastLoginTime ;
private int status ;
private double totalConsume ;
private double totalRecharge ;
private String userId ;
private int userType ;
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public int getActive() {
return active;
}
public void setActive(int active) {
this.active = active;
}
public int getAttCount() {
return attCount;
}
public void setAttCount(int attCount) {
this.attCount = attCount;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public long getCreateTime() {
return createTime;
}
public void setCreateTime(long createTime) {
this.createTime = createTime;
}
public int getFansCount() {
return fansCount;
}
public void setFansCount(int fansCount) {
this.fansCount = fansCount;
}
public int getFriendsCount() {
return friendsCount;
}
public void setFriendsCount(int friendsCount) {
this.friendsCount = friendsCount;
}
public int getIsAuth() {
return isAuth;
}
public void setIsAuth(int isAuth) {
this.isAuth = isAuth;
}
public int getIsPasuse() {
return isPasuse;
}
public void setIsPasuse(int isPasuse) {
this.isPasuse = isPasuse;
}
public Location getLoc() {
return loc;
}
public void setLoc(Location loc) {
this.loc = loc;
}
public int getMsgNum() {
return msgNum;
}
public void setMsgNum(int msgNum) {
this.msgNum = msgNum;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public boolean isNotLetSeeHim() {
return notLetSeeHim;
}
public void setNotLetSeeHim(boolean notLetSeeHim) {
this.notLetSeeHim = notLetSeeHim;
}
public boolean isNotSeeHim() {
return notSeeHim;
}
public void setNotSeeHim(boolean notSeeHim) {
this.notSeeHim = notSeeHim;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getOfflineNoPushMsg() {
return offlineNoPushMsg;
}
public void setOfflineNoPushMsg(int offlineNoPushMsg) {
this.offlineNoPushMsg = offlineNoPushMsg;
}
public int getOnlinestate() {
return onlinestate;
}
public void setOnlinestate(int onlinestate) {
this.onlinestate = onlinestate;
}
public int getSetAccountCount() {
return setAccountCount;
}
public void setSetAccountCount(int setAccountCount) {
this.setAccountCount = setAccountCount;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public long getShowLastLoginTime() {
return showLastLoginTime;
}
public void setShowLastLoginTime(long showLastLoginTime) {
this.showLastLoginTime = showLastLoginTime;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public double getTotalConsume() {
return totalConsume;
}
public void setTotalConsume(double totalConsume) {
this.totalConsume = totalConsume;
}
public double getTotalRecharge() {
return totalRecharge;
}
public void setTotalRecharge(double totalRecharge) {
this.totalRecharge = totalRecharge;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public int getUserType() {
return userType;
}
public void setUserType(int userType) {
this.userType = userType;
}
}
public class Location{
double lat ;
double lng ;
}
}
...@@ -11,6 +11,7 @@ import com.rv.im.db.table.ChatConversation; ...@@ -11,6 +11,7 @@ import com.rv.im.db.table.ChatConversation;
import com.rv.im.db.table.ChatMessage; import com.rv.im.db.table.ChatMessage;
import com.rv.im.db.table.Customer; import com.rv.im.db.table.Customer;
import com.rv.im.db.table.DownBean; import com.rv.im.db.table.DownBean;
import com.rv.im.db.table.Friend;
import com.rv.im.log.LogUtil; import com.rv.im.log.LogUtil;
import java.sql.SQLException; import java.sql.SQLException;
...@@ -19,7 +20,7 @@ import java.sql.SQLException; ...@@ -19,7 +20,7 @@ import java.sql.SQLException;
public class SQLiteHelper extends OrmLiteSqliteOpenHelper { public class SQLiteHelper extends OrmLiteSqliteOpenHelper {
public static final String DATABASE_NAME = "rv_im.db"; public static final String DATABASE_NAME = "rv_im.db";
private static final int DATABASE_VERSION = 1; private static final int DATABASE_VERSION = 2;
private static SQLiteHelper instance = null; private static SQLiteHelper instance = null;
...@@ -42,6 +43,13 @@ public class SQLiteHelper extends OrmLiteSqliteOpenHelper { ...@@ -42,6 +43,13 @@ public class SQLiteHelper extends OrmLiteSqliteOpenHelper {
@Override @Override
public void onUpgrade(SQLiteDatabase db, ConnectionSource connSource, int oldVersion, int newVersion) { public void onUpgrade(SQLiteDatabase db, ConnectionSource connSource, int oldVersion, int newVersion) {
if(oldVersion == 1){
try {
TableUtils.createTableIfNotExists(connSource, Friend.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
} }
private void createTables(ConnectionSource connSource) { private void createTables(ConnectionSource connSource) {
...@@ -50,6 +58,7 @@ public class SQLiteHelper extends OrmLiteSqliteOpenHelper { ...@@ -50,6 +58,7 @@ public class SQLiteHelper extends OrmLiteSqliteOpenHelper {
TableUtils.createTableIfNotExists(connSource, Customer.class); TableUtils.createTableIfNotExists(connSource, Customer.class);
TableUtils.createTableIfNotExists(connSource, DownBean.class); TableUtils.createTableIfNotExists(connSource, DownBean.class);
TableUtils.createTableIfNotExists(connSource, ChatConversation.class); TableUtils.createTableIfNotExists(connSource, ChatConversation.class);
TableUtils.createTableIfNotExists(connSource, Friend.class);
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
......
package com.rv.im.db.dao;
import android.content.Context;
import android.util.Log;
import com.j256.ormlite.android.apptools.OpenHelperManager;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.DaoManager;
import com.rv.im.db.SQLiteHelper;
import com.rv.im.db.table.Customer;
import com.rv.im.db.table.Friend;
import com.rv.im.log.LogUtil;
import java.sql.SQLException;
import java.util.List;
public class FriendDao {
private static final String TAG = ConversationDao.class.getSimpleName();
private static FriendDao instance = null;
public Dao<Friend, Integer> dao;
private Context mContext;
private FriendDao(Context context) {
try {
this.mContext = context;
dao = DaoManager.createDao(SQLiteHelper.getInstance(context).getConnectionSource(), Friend.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
public static final FriendDao getInstance(Context context) {
if (instance == null) {
synchronized (FriendDao.class) {
if (instance == null) {
instance = new FriendDao(context);
}
}
}
return instance;
}
public void clear() {
instance = null;
}
@Override
protected void finalize() throws Throwable {
super.finalize();
OpenHelperManager.releaseHelper();
}
public void makeMessageRead(Friend friend) {
if (dao == null) {
LogUtil.e(TAG, "dao is null");
return;
}
if (friend == null) {
LogUtil.e(TAG, "friend is null");
return;
}
try {
dao.update(friend);
} catch (SQLException e) {
e.printStackTrace();
}
}
/******
* 添加一条添加好友的记录
* @param friend
*/
public void addMessage(Friend friend) {
if (dao == null) {
LogUtil.e(TAG, "dao is null");
return;
}
if (friend == null) {
LogUtil.e(TAG, "friend is null");
return;
}
Log.d(TAG, friend.toString());
if (isExit(friend)) {
updateFriend(friend);
return;
}
try {
int result = dao.create(friend);
LogUtil.d(TAG, "插入结果 " + result);
} catch (SQLException e) {
e.printStackTrace();
LogUtil.d(TAG, "插入失败 " + e.getMessage());
}
}
/*****
* 更新消息
* @param friend
*/
public void updateFriend(Friend friend) {
if (dao == null) {
LogUtil.e(TAG, "dao is null");
return;
}
if (friend == null) {
LogUtil.e(TAG, "friend is null");
return;
}
try {
dao.update(friend);
} catch (SQLException e) {
e.printStackTrace();
}
}
/*******
* 判断是否存在好友记录
* @param friend
* @return
*/
public boolean isExit(Friend friend) {
if (dao == null) {
LogUtil.e(TAG, "dao is null");
return false;
}
if (friend == null) {
LogUtil.e(TAG, "friend is null");
return false;
}
try {
List<Friend> lists = dao.queryForEq("userId", friend.getUserId());
return lists == null ? false : lists.size() == 0 ? false : true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
}
package com.rv.im.db.service;
import android.content.Context;
import com.rv.im.db.dao.FriendDao;
import com.rv.im.db.table.Friend;
public class FriendServiceImp implements IFriendService {
private FriendDao dao = null;
public FriendServiceImp(Context context) {
dao = FriendDao.getInstance(context);
}
@Override
public void addMessage(Friend friend) {
dao.addMessage(friend);
}
}
package com.rv.im.db.service;
import com.rv.im.db.table.Friend;
/*******
*
* 好友操作服务
*/
public interface IFriendService {
void addMessage(Friend friend) ;
}
package com.rv.im.db.table;
import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
@DatabaseTable(tableName = "tb_friend")
public class Friend {
@DatabaseField(columnName = "_id", dataType = DataType.INTEGER, generatedId = true)
private int id;
@DatabaseField(columnName = "userId")
private String userId;
@DatabaseField(columnName = "userName")
private String userName;
@DatabaseField(columnName = "sender")
private String sender ; // 添加好友发起者
@DatabaseField(columnName = "timeCreate")
private long timeCreate ; // 发起时间
@DatabaseField
private int status ;// -1:黑名单;0:陌生人;1:单方关注;2:互为好友;8:系统号;9:非显示系统号
@DatabaseField
private String privacy;// 隐私
@DatabaseField
private String remarkName;// 备注
@DatabaseField
private String describe;// 描述,
@DatabaseField
private boolean isRead ;
@DatabaseField
private int version;// 本地表的版本
// 消息免打扰 0:未设置 1:已设置
@DatabaseField(defaultValue = "0")
private int offlineNoPushMsg;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public long getTimeCreate() {
return timeCreate;
}
public void setTimeCreate(long timeCreate) {
this.timeCreate = timeCreate;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getPrivacy() {
return privacy;
}
public void setPrivacy(String privacy) {
this.privacy = privacy;
}
public String getRemarkName() {
return remarkName;
}
public void setRemarkName(String remarkName) {
this.remarkName = remarkName;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
public int getVersion() {
return version;
}
public void setVersion(int version) {
this.version = version;
}
public int getOfflineNoPushMsg() {
return offlineNoPushMsg;
}
public void setOfflineNoPushMsg(int offlineNoPushMsg) {
this.offlineNoPushMsg = offlineNoPushMsg;
}
public boolean isRead() {
return isRead;
}
public void setRead(boolean read) {
isRead = read;
}
}
...@@ -12,7 +12,9 @@ public enum MessageTypeEnum { ...@@ -12,7 +12,9 @@ public enum MessageTypeEnum {
VIDEO_CALL(6, "视频通话"), VIDEO_CALL(6, "视频通话"),
CANCEL(7, "撤销"), CANCEL(7, "撤销"),
PING(8, "ping"); PING(8, "ping"),
HELLO(9,"hello") ,
ADD_SUCCESS(10,"add_success") ;
private int type; private int type;
private String name; private String name;
......
package com.rv.im.presenter;
import android.content.Intent;
import android.text.TextUtils;
import android.widget.Toast;
import com.ruiwenliu.wrapper.base.presenter.CommonPresenter;
import com.rv.component.utils.CacheEnum;
import com.rv.component.utils.RvCache;
import com.rv.im.AppConfig;
import com.rv.im.Constants;
import com.rv.im.ImSetting;
import com.rv.im.bean.AddResultBean;
import com.rv.im.bean.FriendSearchBean;
import com.rv.im.db.table.ChatMessage;
import com.rv.im.db.table.Friend;
import com.rv.im.enums.MessageStatusEnum;
import com.rv.im.enums.MessageTypeEnum;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class AddFriendPresenter extends CommonPresenter {
public void search(String mKeyWord) {
if (TextUtils.isEmpty(mKeyWord)) {
return;
}
AppConfig appConfig = (AppConfig) RvCache.getInstance().get(CacheEnum.IM_CONFIG);
if (appConfig == null) return;
HashMap<String, String> params = new HashMap<>();
params.put("access_token", ImSetting.getImToken());
params.put("pageIndex", String.valueOf(0));
// params.put("pageSize", String.valueOf(AppConfig.PAGE_SIZE));
params.put("pageSize", "20");
params.put("nickname", mKeyWord);
params.put("maxAge", String.valueOf(200));
params.put("active", String.valueOf(0));
getData(0, appConfig.USER_NEAR, FriendSearchBean.class, params, true);
}
public void addFriend(String userId, int fromAddType) {
if (TextUtils.isEmpty(userId)) return;
AppConfig appConfig = (AppConfig) RvCache.getInstance().get(CacheEnum.IM_CONFIG);
if (appConfig == null) return;
Map<String, String> params = new HashMap<>();
params.put("access_token", ImSetting.getImToken());
params.put("toUserId", userId);
params.put("fromAddType", String.valueOf(fromAddType));
getData(1,appConfig.FRIENDS_ATTENTION_ADD,AddResultBean.class,params,true);
}
// 打招呼
public void doSayHello(String text,String toUserName,String toUserId ) {
if (TextUtils.isEmpty(text)) {
text = "HEY-HELLO";
}
ChatMessage message = new ChatMessage();
message.setMessageType(MessageTypeEnum.HELLO);
message.setToUserName(toUserName);
message.setToUserId(toUserId);
message.setContent(text);
sendMessage(message);
}
public ChatMessage doSayAddFriend(String toUserName,String toUserId ){
ChatMessage message = new ChatMessage();
message.setMessageType(MessageTypeEnum.ADD_SUCCESS);
message.setToUserName(toUserName);
message.setToUserId(toUserId);
message.setContent("be friend");
return sendMessage(message);
}
private ChatMessage sendMessage(ChatMessage message) {
message.setFromUserId(message.getFromUserId());
message.setFromUserName(message.getFromUserName());
message.setRead(true);
message.setFromId("android");
message.setPackId(UUID.randomUUID().toString().replaceAll("-", ""));
message.setTimeSend(System.currentTimeMillis());
sendMsgBroad(message);
return message;
}
public void sendMsgBroad(ChatMessage message) {
Intent intent = new Intent();
intent.setAction(Constants.ACTIONS.ACTION_SEND_RECEIVER);
intent.setPackage(getPresenterContext().getPackageName());
intent.putExtra(Constants.KEYS.KEY_MESSAGE_TARGET, message.getToUserId());
intent.putExtra(Constants.KEYS.KEY_MESSAGE_CONTENT, message.toJsonString());
getPresenterContext().sendBroadcast(intent);
}
public Friend buildAddFriendMessage(String userId,String userName,int status){
Friend friend = new Friend();
friend.setUserId(userId);
friend.setUserName(userName);
friend.setSender(ImSetting.getUserId());
friend.setRead(true);
friend.setStatus(status);
friend.setTimeCreate(System.currentTimeMillis());
return friend;
}
}
...@@ -20,10 +20,8 @@ public class AddressPresenter extends CommonPresenter { ...@@ -20,10 +20,8 @@ public class AddressPresenter extends CommonPresenter {
* @param lists * @param lists
*/ */
public void initAddress(List<ContactsBean.ContactItemBean> lists) { public void initAddress(List<ContactsBean.ContactItemBean> lists) {
addTopDatas(lists);
boolean isShowLoading = lists == null || lists.size() == 0; boolean isShowLoading = lists == null || lists.size() == 0;
addCustomerItem(lists);
addGroupItem(lists);
addNewFriendItem(lists);
ContactsBean bean = (ContactsBean) RvCache.getInstance().get(CacheEnum.CONTACTS); ContactsBean bean = (ContactsBean) RvCache.getInstance().get(CacheEnum.CONTACTS);
if (bean != null && bean.getData() != null && bean.getData().size() > 0) { if (bean != null && bean.getData() != null && bean.getData().size() > 0) {
lists.addAll(bean.getData()); lists.addAll(bean.getData());
...@@ -31,12 +29,18 @@ public class AddressPresenter extends CommonPresenter { ...@@ -31,12 +29,18 @@ public class AddressPresenter extends CommonPresenter {
pullFriends(isShowLoading); pullFriends(isShowLoading);
} }
public void addTopDatas(List<ContactsBean.ContactItemBean> lists){
addCustomerItem(lists);
addGroupItem(lists);
addNewFriendItem(lists);
}
private void addNewFriendItem(List<ContactsBean.ContactItemBean> lists) { private void addNewFriendItem(List<ContactsBean.ContactItemBean> lists) {
ContactsBean.ContactItemBean bean = new ContactsBean.ContactItemBean(); ContactsBean.ContactItemBean bean = new ContactsBean.ContactItemBean();
bean.setType(0); bean.setType(0);
bean.setToNickname(getPresenterContext().getString(R.string.text_new_friend)); bean.setToNickname(getPresenterContext().getString(R.string.text_new_friend));
bean.setLocalHead(R.drawable.icon_lion); bean.setLocalHead(R.drawable.icon_lion);
lists.add(bean); lists.add(2,bean);
} }
private void addGroupItem(List<ContactsBean.ContactItemBean> lists) { private void addGroupItem(List<ContactsBean.ContactItemBean> lists) {
...@@ -44,7 +48,7 @@ public class AddressPresenter extends CommonPresenter { ...@@ -44,7 +48,7 @@ public class AddressPresenter extends CommonPresenter {
bean.setType(0); bean.setType(0);
bean.setToNickname(getPresenterContext().getString(R.string.text_group)); bean.setToNickname(getPresenterContext().getString(R.string.text_group));
bean.setLocalHead(R.drawable.icon_lion); bean.setLocalHead(R.drawable.icon_lion);
lists.add(bean); lists.add(1,bean);
} }
private void addCustomerItem(List<ContactsBean.ContactItemBean> lists) { private void addCustomerItem(List<ContactsBean.ContactItemBean> lists) {
...@@ -52,7 +56,7 @@ public class AddressPresenter extends CommonPresenter { ...@@ -52,7 +56,7 @@ public class AddressPresenter extends CommonPresenter {
bean.setType(0); bean.setType(0);
bean.setToNickname(getPresenterContext().getString(R.string.text_customer_list)); bean.setToNickname(getPresenterContext().getString(R.string.text_customer_list));
bean.setLocalHead(R.drawable.icon_lion); bean.setLocalHead(R.drawable.icon_lion);
lists.add(bean); lists.add(0,bean);
} }
......
package com.rv.im.presenter;
import com.ruiwenliu.wrapper.base.presenter.CommonPresenter;
public class NewFriendPresenter extends CommonPresenter {
}
...@@ -3,6 +3,7 @@ package com.rv.im.xmpp; ...@@ -3,6 +3,7 @@ package com.rv.im.xmpp;
import android.media.MediaPlayer; import android.media.MediaPlayer;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.util.Log;
import com.ruiwenliu.wrapper.util.AppUtils; import com.ruiwenliu.wrapper.util.AppUtils;
import com.rv.im.ImSetting; import com.rv.im.ImSetting;
...@@ -13,6 +14,7 @@ import com.rv.im.db.table.ChatMessage; ...@@ -13,6 +14,7 @@ import com.rv.im.db.table.ChatMessage;
import com.rv.im.util.NotificationMananger; import com.rv.im.util.NotificationMananger;
import com.rv.im.xmpp.listener.AuthStateListener; import com.rv.im.xmpp.listener.AuthStateListener;
import com.rv.im.xmpp.listener.ChatMessageListener; import com.rv.im.xmpp.listener.ChatMessageListener;
import com.rv.im.xmpp.listener.NewFriendListener;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -22,6 +24,7 @@ public class ListenerManager { ...@@ -22,6 +24,7 @@ public class ListenerManager {
/* 回调监听 */ /* 回调监听 */
private List<AuthStateListener> mAuthStateListeners = new ArrayList<>(); private List<AuthStateListener> mAuthStateListeners = new ArrayList<>();
private List<ChatMessageListener> mChatMessageListeners = new ArrayList<>(); private List<ChatMessageListener> mChatMessageListeners = new ArrayList<>();
private List<NewFriendListener> mNewFriendListeners = new ArrayList<>();
private Handler mHandler = new Handler(Looper.getMainLooper()); private Handler mHandler = new Handler(Looper.getMainLooper());
...@@ -59,6 +62,14 @@ public class ListenerManager { ...@@ -59,6 +62,14 @@ public class ListenerManager {
mChatMessageListeners.remove(messageListener); mChatMessageListeners.remove(messageListener);
} }
public void addNewFriendListener(NewFriendListener newFriendListener) {
mNewFriendListeners.add(newFriendListener);
}
public void removeChatMessageListener(NewFriendListener friendListener) {
mNewFriendListeners.remove(friendListener);
}
/********************** /**********************
* 监听回调 * 监听回调
**************************/ **************************/
...@@ -108,7 +119,7 @@ public class ListenerManager { ...@@ -108,7 +119,7 @@ public class ListenerManager {
mHandler.post(() -> { mHandler.post(() -> {
if (message != null) { if (message != null) {
ChatMessageServiceImp.getInstance(ImSetting.getContext()).addMessage(message); // 数据库添加消息 ChatMessageServiceImp.getInstance(ImSetting.getContext()).addMessage(message); // 数据库添加消息
AppUtils.setBadger(ImSetting.getContext(),ChatMessageServiceImp.getInstance(ImSetting.getContext()).getUnReadMsg() ); AppUtils.setBadger(ImSetting.getContext(), ChatMessageServiceImp.getInstance(ImSetting.getContext()).getUnReadMsg());
for (int i = mChatMessageListeners.size() - 1; i >= 0; i--) { for (int i = mChatMessageListeners.size() - 1; i >= 0; i--) {
mChatMessageListeners.get(i).onNewMessage(message.getFromUserId(), message, false); mChatMessageListeners.get(i).onNewMessage(message.getFromUserId(), message, false);
} }
...@@ -116,6 +127,32 @@ public class ListenerManager { ...@@ -116,6 +127,32 @@ public class ListenerManager {
}); });
} }
/*********
* 添加好友
* @param message
*/
public void notifyNewFriend(final ChatMessage message) {
if (message == null) return;
mHandler.post(() -> {
boolean hasRead = false;// 是否已经被读了 (如果有类添加)
for (NewFriendListener listener : mNewFriendListeners) {
if (listener.onNewFriend(message)) {
hasRead = true;
}
}
// if (!hasRead) {
// Log.e("msg", "新的朋友刷新");
// int i = NewFriendDao.getInstance().getNewFriendUnRead(message.getOwnerId(), message.getUserId());
// if (i <= 0) {// 当该新的朋友存在一条未读消息时,不在更新
// NewFriendDao.getInstance().markNewFriendUnRead(message.getOwnerId(), message.getUserId());
// FriendDao.getInstance().markUserMessageUnRead(loginUserId, Friend.ID_NEW_FRIEND_MESSAGE);
// }
// MsgBroadcast.broadcastMsgNumUpdateNewFriend(MyApplication.getInstance());
// }
// MsgBroadcast.broadcastMsgUiUpdate(MyApplication.getInstance());
});
}
private void bell() { private void bell() {
MediaPlayer mediaPlayer = MediaPlayer.create(ImSetting.getContext(), R.raw.msg); MediaPlayer mediaPlayer = MediaPlayer.create(ImSetting.getContext(), R.raw.msg);
mediaPlayer.start(); mediaPlayer.start();
......
...@@ -23,7 +23,7 @@ public class ReceiptManager { ...@@ -23,7 +23,7 @@ public class ReceiptManager {
/** /**
* 处理消息回执 * 处理消息回执
*/ */
public static Map<String, ReceiptObj> mReceiptMap = new HashMap<String, ReceiptObj>(); public static Map<String, ReceiptObj> mReceiptMap = new HashMap<>();
private ImService mService; private ImService mService;
private XMPPTCPConnection mConnection; private XMPPTCPConnection mConnection;
private String mLoginUserId;// 用于切换用户后,判断是否清除回执内容 private String mLoginUserId;// 用于切换用户后,判断是否清除回执内容
...@@ -49,6 +49,9 @@ public class ReceiptManager { ...@@ -49,6 +49,9 @@ public class ReceiptManager {
if (msg.what == RECEIPT_NO) { // 认为这条消息未发送成功,已超时 if (msg.what == RECEIPT_NO) { // 认为这条消息未发送成功,已超时
ListenerManager.getInstance().notifyMessageSendStateChange(packetId, ChatMessageListener.MESSAGE_SEND_FAILED); ListenerManager.getInstance().notifyMessageSendStateChange(packetId, ChatMessageListener.MESSAGE_SEND_FAILED);
} else if (msg.what == RECEIPT_YES) {// 认为发送成功 } else if (msg.what == RECEIPT_YES) {// 认为发送成功
ListenerManager.getInstance().notifyMessageSendStateChange(packetId, ChatMessageListener.MESSAGE_SEND_SUCCESS); ListenerManager.getInstance().notifyMessageSendStateChange(packetId, ChatMessageListener.MESSAGE_SEND_SUCCESS);
} }
mReceiptMap.remove(packetId); mReceiptMap.remove(packetId);
......
package com.rv.im.xmpp.listener;
import com.rv.im.db.table.ChatMessage;
public interface NewFriendListener {
// 新朋友消息发送状态的回调
void onNewFriendSendStateChange(String toUserId, ChatMessage message, int messageState);
/**
* 新朋友消息来临时的回调
* public static final int TYPE_SAYHELLO = 500; // 打招呼
* public static final int TYPE_PASS = 501; // 同意加好友
* public static final int TYPE_FEEDBACK = 502; // 回话
* public static final int TYPE_NEWSEE = 503; // 新关注
* public static final int TYPE_DELSEE = 504; // 删除关注
* public static final int TYPE_DELALL = 505; // 彻底删除
* public static final int TYPE_RECOMMEND = 506;// 新推荐好友
* public static final int TYPE_BLACK = 507; // 黑名单
* public static final int TYPE_FRIEND = 508; // 直接成为好友
* public static final int TYPE_REFUSED = 509; // 取消黑名单
*/
boolean onNewFriend(ChatMessage message);
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".AddFriendActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp50"
android:background="@color/white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp40"
android:layout_centerInParent="true"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:background="@drawable/bg_chat_search"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="@dimen/size_25"
android:layout_height="@dimen/size_25"
android:layout_marginLeft="@dimen/dp_10"
android:src="@drawable/rv_common_icon_search" />
<EditText
android:id="@+id/edt_search"
android:layout_width="match_parent"
android:layout_height="@dimen/size_30"
android:layout_marginLeft="@dimen/dp_10"
android:background="@color/Grey_300"
android:hint="请输入昵称或者手机号"
android:textColorHint="@color/gray"
android:textSize="@dimen/sp_12" />
</LinearLayout>
</RelativeLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:gravity="center"
android:text="搜索"
android:id="@+id/btn_search"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:layout_width="match_parent"
android:layout_height="@dimen/dp50" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".NewFriendActivity">
<LinearLayout
android:id="@+id/ll_search"
android:layout_width="match_parent"
android:layout_height="@dimen/size_50"
android:layout_centerInParent="true"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:background="@drawable/bg_chat_search"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:layout_width="@dimen/size_25"
android:layout_height="@dimen/size_25"
android:layout_marginLeft="@dimen/dp_10"
android:src="@drawable/rv_common_icon_search" />
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/size_30"
android:layout_marginLeft="@dimen/dp_10"
android:background="@color/Grey_300"
android:gravity="center"
android:text="昵称或手机号"
android:textColorHint="@color/gray"
android:textSize="@dimen/sp_12" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="@dimen/dp_10"
android:text="最近添加记录" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="@dimen/dp50"
android:gravity="center_vertical">
<ImageView
android:layout_marginLeft="@dimen/dp_10"
android:id="@+id/img_header"
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40" />
<TextView
android:layout_marginLeft="@dimen/dp_10"
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
<Button
android:layout_gravity="right"
android:text="添加"
android:id="@+id/btn_add"
android:layout_width="@dimen/size_80"
android:layout_height="@dimen/size_38" />
</LinearLayout>
<View
android:layout_marginLeft="@dimen/size_60"
android:layout_width="match_parent"
android:layout_height="1px"
android:background="@color/colorGray" />
</LinearLayout>
...@@ -177,5 +177,6 @@ ...@@ -177,5 +177,6 @@
<string name="text_customer_list">客服列表</string> <string name="text_customer_list">客服列表</string>
<string name="text_group">群聊</string> <string name="text_group">群聊</string>
<string name="text_new_friend">新的朋友</string> <string name="text_new_friend">新的朋友</string>
<string name="add_attention_failed">加关注失败,你已被对方加入黑名单</string>
</resources> </resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment