Commit 595c32ad authored by jianglx's avatar jianglx

Im的优化

parent 38ed8b04
...@@ -98,7 +98,7 @@ import cn.jpush.android.api.BasicPushNotificationBuilder; ...@@ -98,7 +98,7 @@ import cn.jpush.android.api.BasicPushNotificationBuilder;
import cn.jpush.android.api.JPushInterface; import cn.jpush.android.api.JPushInterface;
public class MainActivity extends BaseActivity<CommonPresenter> implements DownListenerManager.DownListener, ChatMessageListener,ImInitListenter { public class MainActivity extends BaseActivity<CommonPresenter> implements DownListenerManager.DownListener, ChatMessageListener, ImInitListenter {
private boolean hasGetVersionInfo = false; // 判断是否已经获取过版本信息 private boolean hasGetVersionInfo = false; // 判断是否已经获取过版本信息
...@@ -144,7 +144,7 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL ...@@ -144,7 +144,7 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL
private boolean hasBindService = false; //是否已经绑定了服务 private boolean hasBindService = false; //是否已经绑定了服务
private ImService mService; // private ImService mService;
private String imToken; private String imToken;
...@@ -631,7 +631,7 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL ...@@ -631,7 +631,7 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL
private ServiceConnection mConnection = new ServiceConnection() { private ServiceConnection mConnection = new ServiceConnection() {
@Override @Override
public void onServiceConnected(ComponentName name, IBinder service) { public void onServiceConnected(ComponentName name, IBinder service) {
mService = ((ImService.ImServiceBinder) service).getService(); // mService = ((ImService.ImServiceBinder) service).getService();
imServiceConnection = this; imServiceConnection = this;
} }
...@@ -639,7 +639,7 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL ...@@ -639,7 +639,7 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL
public void onServiceDisconnected(ComponentName name) { public void onServiceDisconnected(ComponentName name) {
LogUtil.e("MainActivity", "onServiceDisconnected() called with: name = [" + name + "]"); LogUtil.e("MainActivity", "onServiceDisconnected() called with: name = [" + name + "]");
imServiceConnection = null; imServiceConnection = null;
mService = null; // mService = null;
} }
}; };
...@@ -647,11 +647,11 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL ...@@ -647,11 +647,11 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL
public void logout(MessageEventLogout bean) { public void logout(MessageEventLogout bean) {
hasBindService = false; hasBindService = false;
ImSetting.logout(); ImSetting.logout();
if (mService != null) { // if (mService != null) {
mService.logout(); // mService.logout();
unbindService(imServiceConnection); unbindService(imServiceConnection);
mService = null; // mService = null;
} // }
} }
@Subscribe(threadMode = ThreadMode.MAIN) @Subscribe(threadMode = ThreadMode.MAIN)
......
...@@ -14,6 +14,8 @@ public class AppCookie { ...@@ -14,6 +14,8 @@ public class AppCookie {
public final static String KEY_PRERENT_DAYS = "key_prerent_days" ; // 提前租车天数的key public final static String KEY_PRERENT_DAYS = "key_prerent_days" ; // 提前租车天数的key
public static final String OFFLINE_TIME = "offline_time";
private static SharedPreferences preferences; private static SharedPreferences preferences;
private static WeakReference<Context> weakReference = null; private static WeakReference<Context> weakReference = null;
......
...@@ -7,7 +7,8 @@ import android.content.Intent; ...@@ -7,7 +7,8 @@ import android.content.Intent;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.support.annotation.NonNull; import android.os.Looper;
import android.os.Message;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
...@@ -33,6 +34,8 @@ import com.ruiwenliu.wrapper.base.BaseStatusActivity; ...@@ -33,6 +34,8 @@ import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.base.presenter.CommonPresenter; import com.ruiwenliu.wrapper.base.presenter.CommonPresenter;
import com.ruiwenliu.wrapper.util.permission.RxPermission; import com.ruiwenliu.wrapper.util.permission.RxPermission;
import com.ruiwenliu.wrapper.weight.TitleView; import com.ruiwenliu.wrapper.weight.TitleView;
import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshLayout;
import com.ruiwenliu.wrapper.weight.refresh.SimpleRefreshView;
import com.rv.component.utils.CacheEnum; import com.rv.component.utils.CacheEnum;
import com.rv.component.utils.RvCache; import com.rv.component.utils.RvCache;
import com.rv.im.adapter.ChatContentAdapter; import com.rv.im.adapter.ChatContentAdapter;
...@@ -42,7 +45,6 @@ import com.rv.im.audio_x.VoicePlayer; ...@@ -42,7 +45,6 @@ import com.rv.im.audio_x.VoicePlayer;
import com.rv.im.bean.User; import com.rv.im.bean.User;
import com.rv.im.db.service.ChatMessageServiceImp; import com.rv.im.db.service.ChatMessageServiceImp;
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.enums.MessageStatusEnum; import com.rv.im.enums.MessageStatusEnum;
import com.rv.im.enums.MessageTypeEnum; import com.rv.im.enums.MessageTypeEnum;
import com.rv.im.mucfile.RvDownManager; import com.rv.im.mucfile.RvDownManager;
...@@ -68,7 +70,7 @@ import java.util.Timer; ...@@ -68,7 +70,7 @@ import java.util.Timer;
import pub.devrel.easypermissions.AppSettingsDialog; import pub.devrel.easypermissions.AppSettingsDialog;
public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements IChatView, ChatMessageListener, View.OnClickListener, RecordListener { public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements IChatView, ChatMessageListener, View.OnClickListener, RecordListener, SimpleRefreshLayout.OnSimpleRefreshListener {
private ImageButton voiceImgBtn; private ImageButton voiceImgBtn;
private ImageButton ibKeyword; private ImageButton ibKeyword;
...@@ -78,6 +80,7 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements ...@@ -78,6 +80,7 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
private ImageButton ibPhoto; private ImageButton ibPhoto;
private Button sendBtn; private Button sendBtn;
private RecyclerView recycleContent; private RecyclerView recycleContent;
private SimpleRefreshLayout refreshLayout;
private ViewStub mChatFaceViewStub; private ViewStub mChatFaceViewStub;
private String mLoginUserId; private String mLoginUserId;
...@@ -95,9 +98,6 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements ...@@ -95,9 +98,6 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
private Timer timer; private Timer timer;
private RvImTimerTask timerTask; private RvImTimerTask timerTask;
private int startPosition;
private int endPosition;
private ChatContentAdapter.OnClickItemListener clickItemListener = new ChatContentAdapter.OnClickItemListener() { private ChatContentAdapter.OnClickItemListener clickItemListener = new ChatContentAdapter.OnClickItemListener() {
@Override @Override
public void onClick(int resId, ChatMessage message) { public void onClick(int resId, ChatMessage message) {
...@@ -271,7 +271,6 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements ...@@ -271,7 +271,6 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
@Override @Override
protected void loadData(Bundle savedInstanceState, Intent intent) { protected void loadData(Bundle savedInstanceState, Intent intent) {
super.loadData(savedInstanceState, intent); super.loadData(savedInstanceState, intent);
startPosition = ((ChatPresenterImp) presenter).getDbService().getPages(targetUserId);
getData(); getData();
} }
...@@ -288,6 +287,7 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements ...@@ -288,6 +287,7 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
} }
private void initWidget() { private void initWidget() {
refreshLayout = findViewById(R.id.refresh);
voiceImgBtn = findViewById(R.id.voice_img_btn); voiceImgBtn = findViewById(R.id.voice_img_btn);
ibKeyword = findViewById(R.id.ib_keyword); ibKeyword = findViewById(R.id.ib_keyword);
chatEdit = findViewById(R.id.chat_edit); chatEdit = findViewById(R.id.chat_edit);
...@@ -295,24 +295,14 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements ...@@ -295,24 +295,14 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
emotionBtn = findViewById(R.id.emotion_btn); emotionBtn = findViewById(R.id.emotion_btn);
ibPhoto = findViewById(R.id.ib_photo); ibPhoto = findViewById(R.id.ib_photo);
sendBtn = findViewById(R.id.send_btn); sendBtn = findViewById(R.id.send_btn);
// chatToolsViewStub = findViewById(R.id.chat_tools_view_stub);
mChatFaceViewStub = findViewById(R.id.chat_face_view_stub); mChatFaceViewStub = findViewById(R.id.chat_face_view_stub);
recycleContent = findViewById(R.id.recycle_content); recycleContent = findViewById(R.id.recyclerView);
recycleContent.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); recycleContent.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
recycleContent.setItemAnimator(new DefaultItemAnimator()); recycleContent.setItemAnimator(new DefaultItemAnimator());
adapter = new ChatContentAdapter(getApplicationContext(), mLoginUserId, messages, clickItemListener); adapter = new ChatContentAdapter(getApplicationContext(), mLoginUserId, messages, clickItemListener);
recycleContent.setAdapter(adapter); recycleContent.setAdapter(adapter);
recycleContent.addOnScrollListener(new RecyclerView.OnScrollListener() { refreshLayout.setHeaderView(new SimpleRefreshView(this));
@Override refreshLayout.setOnSimpleRefreshListener(this);
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
// super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
// super.onScrolled(recyclerView, dx, dy);
}
});
} }
private void initListener() { private void initListener() {
...@@ -550,24 +540,29 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements ...@@ -550,24 +540,29 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
timerTask.cancel(); timerTask.cancel();
} }
private long pullTime = 0L;
private void getData() { private void getData() {
List<ChatMessage> lists;
if (pullTime == 0L) { // 加载前20条
lists = ((ChatPresenterImp) presenter).getDbService().getFirstPageMessage(targetUserId);
} else {
lists = ((ChatPresenterImp) presenter).getDbService().loadMoreMessage(targetUserId, pullTime);
}
if (lists == null || lists.size() == 0) {
refreshLayout.setPullDownEnable(false);
return;
}
// if (startPosition < 20) { if (lists.size() < 20) {
// endPosition = 1; refreshLayout.setPullDownEnable(false);
// } else {
// endPosition = startPosition - startPosition % 10 - 10;
// }
// if (totalPages > 0) {
List<ChatMessage> lists = ((ChatPresenterImp) presenter).getDbService().getAllMessage(targetUserId);
if (lists != null) {
messages.clear();
messages.addAll(lists);
adapter.notifyDataSetChanged();
if (messages.size() > 0) {
recycleContent.smoothScrollToPosition(messages.size() - 1);
} }
messages.addAll(0, lists);
adapter.notifyDataSetChanged();
if (messages.size() > 0 && pullTime == 0L) {
recycleContent.smoothScrollToPosition(lists.size() - 1);
} }
// } pullTime = lists.get(0).getTimeSend();
} }
private TextWatcher watcher = new TextWatcher() { private TextWatcher watcher = new TextWatcher() {
...@@ -755,4 +750,20 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements ...@@ -755,4 +750,20 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
params.put("userId", targetUserId); params.put("userId", targetUserId);
mPresenter.getData(1, url, User.class, params, false); mPresenter.getData(1, url, User.class, params, false);
} }
@Override
public void onRefresh() {
handler.sendEmptyMessageDelayed(0, 1000);
}
private Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
if (!isFinishing()) {
refreshLayout.onRefreshComplete();
getData();
}
}
};
} }
...@@ -8,7 +8,15 @@ import android.os.IBinder; ...@@ -8,7 +8,15 @@ import android.os.IBinder;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import com.google.gson.Gson;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.model.Response;
import com.lzy.okgo.utils.HttpUtils;
import com.ruiwenliu.wrapper.MessageEventRemoteLogin; import com.ruiwenliu.wrapper.MessageEventRemoteLogin;
import com.rv.component.utils.AppCookie;
import com.rv.component.utils.CacheEnum;
import com.rv.component.utils.RvCache;
import com.rv.im.bean.LastChatHistoryListBean;
import com.rv.im.broadcast.MessageReceiver; import com.rv.im.broadcast.MessageReceiver;
import com.rv.im.db.table.ChatMessage; import com.rv.im.db.table.ChatMessage;
import com.rv.im.enums.CallTypeEnum; import com.rv.im.enums.CallTypeEnum;
...@@ -22,12 +30,17 @@ import com.rv.im.xmpp.XChatManager; ...@@ -22,12 +30,17 @@ import com.rv.im.xmpp.XChatManager;
import com.rv.im.xmpp.XmppConnectionManager; import com.rv.im.xmpp.XmppConnectionManager;
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.yuyife.okgo.OkGoUtil;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPConnection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID; import java.util.UUID;
public class ImService extends Service { public class ImService extends Service {
private static final String TAG = ImService.class.getSimpleName(); private static final String TAG = ImService.class.getSimpleName();
...@@ -75,13 +88,14 @@ public class ImService extends Service { ...@@ -75,13 +88,14 @@ public class ImService extends Service {
LogUtil.e(TAG, "xmpp:notifyAuthenticated"); LogUtil.e(TAG, "xmpp:notifyAuthenticated");
onAuthenticated(); onAuthenticated();
ListenerManager.getInstance().notifyAuthStateChange(AuthStateListener.AUTH_STATE_SUCCESS);// 通知登陆成功 ListenerManager.getInstance().notifyAuthStateChange(AuthStateListener.AUTH_STATE_SUCCESS);// 通知登陆成功
getLastChatHistory(); getChatHistory();
} }
@Override @Override
public void notifyConnectionClosedOnError(Exception e) { public void notifyConnectionClosedOnError(Exception e) {
AppCookie.save(AppCookie.OFFLINE_TIME + mLoginUserId, System.currentTimeMillis());
ListenerManager.getInstance().notifyAuthStateChange(AuthStateListener.AUTH_STATE_NOT); ListenerManager.getInstance().notifyAuthStateChange(AuthStateListener.AUTH_STATE_NOT);
release();
LogUtil.e(TAG, "xmpp:notifyConnectionClosedOnError"); LogUtil.e(TAG, "xmpp:notifyConnectionClosedOnError");
Log.e(TAG, "连接异常==" + e.getMessage()); Log.e(TAG, "连接异常==" + e.getMessage());
if (e.getMessage().contains("conflict")) { if (e.getMessage().contains("conflict")) {
...@@ -95,6 +109,8 @@ public class ImService extends Service { ...@@ -95,6 +109,8 @@ public class ImService extends Service {
@Override @Override
public void notifyConnectionClosed() { public void notifyConnectionClosed() {
LogUtil.e(TAG, "xmpp:notifyConnectionClosed"); LogUtil.e(TAG, "xmpp:notifyConnectionClosed");
AppCookie.save(AppCookie.OFFLINE_TIME + mLoginUserId, System.currentTimeMillis());
release();
ListenerManager.getInstance().notifyAuthStateChange(AuthStateListener.AUTH_STATE_NOT); ListenerManager.getInstance().notifyAuthStateChange(AuthStateListener.AUTH_STATE_NOT);
} }
}; };
...@@ -133,14 +149,14 @@ public class ImService extends Service { ...@@ -133,14 +149,14 @@ public class ImService extends Service {
} }
/* 消息回执管理 */ /* 消息回执管理 */
if (mReceiptManager == null) { if (mReceiptManager == null && mConnectionManager != null) {
mReceiptManager = new ReceiptManager(this, mConnectionManager.getConnection()); mReceiptManager = new ReceiptManager(this, mConnectionManager.getConnection());
} else { } else {
mReceiptManager.reset(); mReceiptManager.reset();
} }
// 初始化消息处理 // 初始化消息处理
if (mXChatManager == null) { if (mXChatManager == null && mConnectionManager != null) {
mXChatManager = new XChatManager(this, mConnectionManager.getConnection()); mXChatManager = new XChatManager(this, mConnectionManager.getConnection());
} else { } else {
mXChatManager.reset(); mXChatManager.reset();
...@@ -167,8 +183,39 @@ public class ImService extends Service { ...@@ -167,8 +183,39 @@ public class ImService extends Service {
} }
} }
public void getChatHistory() {
Map<String, String> params = new HashMap();
params.put("access_token", ImSetting.getImToken());
params.put("receiver", mLoginUserId);
public void getLastChatHistory() { long syncTimeLen = AppCookie.getLongValue(AppCookie.OFFLINE_TIME + mLoginUserId, 0l);
params.put("startTime", String.valueOf(syncTimeLen));
params.put("endTime", String.valueOf(System.currentTimeMillis()));
params.put("pageSize", String.valueOf(100));// 尽量传一个大的值 一次性拉下来
AppConfig appConfig = (AppConfig) RvCache.getInstance().get(CacheEnum.IM_CONFIG);
OkGoUtil.getMap(appConfig.GET_CHAT_MSG, params, new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
if (response == null) return;
int code = response.code();
String body = response.body();
if (code == 200 && !TextUtils.isEmpty(body)) {
Log.e("im_onSuccess", body);
// LastChatHistoryListBean bean = new Gson().fromJson(body, LastChatHistoryListBean.class);
// if (bean != null && bean.getResultCode() == 1) {
// if (bean.getCurrentTime() != 0l) {
// AppCookie.save(AppCookie.OFFLINE_TIME + mLoginUserId, bean.getCurrentTime());
// }
// List<LastChatHistoryListBean.ChatHistoryItem> historyItems = bean.getData();
// if (historyItems != null && historyItems.size() > 0) {
// for (LastChatHistoryListBean.ChatHistoryItem item : historyItems) {
// ListenerManager.getInstance().notifyNewMesssage(ChatMessage.historyToChatMessage(item));
// }
// }
// }
}
}
});
} }
...@@ -243,14 +290,6 @@ public class ImService extends Service { ...@@ -243,14 +290,6 @@ public class ImService extends Service {
} }
} }
public void logout() {
isInit = false;
if (mConnectionManager != null) {
mConnectionManager.logout();
}
stopSelf();
}
/** /**
* 发送聊天消息 * 发送聊天消息
*/ */
......
package com.rv.im.bean; package com.rv.im.bean;
import com.ruiwenliu.wrapper.base.BaseBean;
import java.util.List; import java.util.List;
public class LastChatHistoryListBean extends BaseBean { public class LastChatHistoryListBean{
private long currentTime; private long currentTime;
private List<ChatHistoryItem> data; private List<ChatHistoryItem> data;
private int resultCode ;
public long getCurrentTime() { public long getCurrentTime() {
return currentTime; return currentTime;
...@@ -25,6 +24,14 @@ public class LastChatHistoryListBean extends BaseBean { ...@@ -25,6 +24,14 @@ public class LastChatHistoryListBean extends BaseBean {
this.data = data; this.data = data;
} }
public int getResultCode() {
return resultCode;
}
public void setResultCode(int resultCode) {
this.resultCode = resultCode;
}
public class ChatHistoryItem { public class ChatHistoryItem {
private String _id ; private String _id ;
private String jid; private String jid;
......
...@@ -9,6 +9,7 @@ import com.j256.ormlite.android.apptools.OpenHelperManager; ...@@ -9,6 +9,7 @@ import com.j256.ormlite.android.apptools.OpenHelperManager;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao; import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.DaoManager; import com.j256.ormlite.dao.DaoManager;
import com.j256.ormlite.stmt.QueryBuilder;
import com.rv.im.ImSetting; import com.rv.im.ImSetting;
import com.rv.im.db.SQLiteHelper; import com.rv.im.db.SQLiteHelper;
import com.rv.im.db.table.ChatMessage; import com.rv.im.db.table.ChatMessage;
...@@ -16,6 +17,9 @@ import com.rv.im.enums.MessageStatusEnum; ...@@ -16,6 +17,9 @@ import com.rv.im.enums.MessageStatusEnum;
import com.rv.im.log.LogUtil; import com.rv.im.log.LogUtil;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; import java.util.List;
public class MessageDao { public class MessageDao {
...@@ -163,6 +167,9 @@ public class MessageDao { ...@@ -163,6 +167,9 @@ public class MessageDao {
.or() .or()
.eq("toUserId", targetId) .eq("toUserId", targetId)
.query(); .query();
if (chatMessages != null) {
Collections.sort(chatMessages, (o1, o2) -> (int) (o1.getTimeSend() - o2.getTimeSend()));
}
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
...@@ -361,4 +368,63 @@ public class MessageDao { ...@@ -361,4 +368,63 @@ public class MessageDao {
e.printStackTrace(); e.printStackTrace();
} }
} }
public List<ChatMessage> loadMoreMessage(String userId, long time) {
if (dao == null) {
LogUtil.e(TAG, "dao is null");
return null;
}
if (TextUtils.isEmpty(userId)) {
LogUtil.e(TAG, "userId is null");
return null;
}
QueryBuilder<ChatMessage, Integer> builder = dao.queryBuilder();
List<ChatMessage> chatMessages = null;
try {
// builder.where().gt("_id", mMinId);
builder.where().eq("fromUserId", userId)
.or()
.eq("toUserId", userId);
builder.where().lt("timeSend", time);
builder.orderBy("timeSend", false);
builder.limit(20L);
builder.offset(0L);
chatMessages = dao.query(builder.prepare());
if (chatMessages != null) {
Collections.sort(chatMessages, (o1, o2) -> (int) (o1.getTimeSend() - o2.getTimeSend()));
}
} catch (SQLException e) {
e.printStackTrace();
}
return chatMessages;
}
public List<ChatMessage> getFirstPageMessage(String userId) {
if (dao == null) {
LogUtil.e(TAG, "dao is null");
return null;
}
if (TextUtils.isEmpty(userId)) {
LogUtil.e(TAG, "message is null");
return null;
}
List<ChatMessage> chatMessages = null;
try {
chatMessages = dao.queryBuilder().orderBy("timeSend", false)
.limit(20L)
.where()
.eq("fromUserId", userId)
.or()
.eq("toUserId", userId)
.query();
if (chatMessages != null) {
Collections.sort(chatMessages, (o1, o2) -> (int) (o1.getTimeSend() - o2.getTimeSend()));
}
} catch (SQLException e) {
e.printStackTrace();
}
return chatMessages;
}
} }
...@@ -105,6 +105,16 @@ public class ChatMessageServiceImp implements IChatMessageService { ...@@ -105,6 +105,16 @@ public class ChatMessageServiceImp implements IChatMessageService {
dao.deleteMessage(message); dao.deleteMessage(message);
} }
@Override
public List<ChatMessage> loadMoreMessage(String userId, long time) {
return dao.loadMoreMessage(userId, time);
}
@Override
public List<ChatMessage> getFirstPageMessage(String userId) {
return dao.getFirstPageMessage(userId);
}
public void release() { public void release() {
instance = null; instance = null;
} }
......
...@@ -34,4 +34,8 @@ public interface IChatMessageService { ...@@ -34,4 +34,8 @@ public interface IChatMessageService {
void deleteMessage(ChatMessage message) ; void deleteMessage(ChatMessage message) ;
List<ChatMessage> loadMoreMessage(String userId,long time) ;
List<ChatMessage> getFirstPageMessage(String userId);
} }
...@@ -6,6 +6,7 @@ import com.google.gson.annotations.SerializedName; ...@@ -6,6 +6,7 @@ import com.google.gson.annotations.SerializedName;
import com.j256.ormlite.field.DataType; import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; import com.j256.ormlite.table.DatabaseTable;
import com.rv.im.bean.LastChatHistoryListBean;
import com.rv.im.enums.CallTypeEnum; import com.rv.im.enums.CallTypeEnum;
import com.rv.im.enums.MessageStatusEnum; import com.rv.im.enums.MessageStatusEnum;
import com.rv.im.enums.MessageTypeEnum; import com.rv.im.enums.MessageTypeEnum;
...@@ -321,4 +322,32 @@ public class ChatMessage implements Serializable { ...@@ -321,4 +322,32 @@ public class ChatMessage implements Serializable {
return new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create().toJson(this); return new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create().toJson(this);
} }
/******
* TEXT(1, "文本"),
* FILE(9, "文件"),
* PIC(2, "图片"),
* VOICE(3, "语音"),
* VOLTE_CALL(5, "语音通话"),
* VIDEO_CALL(6, "视频通话"),
* @param item
* @return
*/
public static ChatMessage historyToChatMessage(LastChatHistoryListBean.ChatHistoryItem item) {
if (item != null && (item.getType() == MessageTypeEnum.TEXT.getType() || item.getType() == MessageTypeEnum.PIC.getType()
|| item.getType() == MessageTypeEnum.VOICE.getType())) {
ChatMessage chatMessage = new ChatMessage();
chatMessage.setMessageType(item.getType());
chatMessage.setContent(item.getContent());
chatMessage.setFromUserId(item.getFrom());
chatMessage.setFromUserName(item.getFromUserName());
chatMessage.setToUserId(item.getTo());
chatMessage.setToUserName(item.getToUserName());
chatMessage.setIsEncrypt(item.getIsEncrypt());
chatMessage.setPackId(item.getMessageId());
chatMessage.setTimeSend(item.getTimeSend());
return chatMessage;
}
return null;
}
} }
...@@ -102,6 +102,7 @@ public class ListenerManager { ...@@ -102,6 +102,7 @@ public class ListenerManager {
* 新消息来临 * 新消息来临
*/ */
public void notifyNewMesssage(final ChatMessage message) { public void notifyNewMesssage(final ChatMessage message) {
if (message == null) return;
NotificationMananger.showNewsNotification(ImSetting.getContext(), message.getFromId()); NotificationMananger.showNewsNotification(ImSetting.getContext(), message.getFromId());
bell(); bell();
mHandler.post(() -> { mHandler.post(() -> {
......
...@@ -69,8 +69,8 @@ ...@@ -69,8 +69,8 @@
android:inputType="textMultiLine" android:inputType="textMultiLine"
android:maxLines="3" android:maxLines="3"
android:paddingLeft="@dimen/dp_10" android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10"
android:paddingTop="6dp" android:paddingTop="6dp"
android:paddingRight="@dimen/dp_10"
android:paddingBottom="6dp" android:paddingBottom="6dp"
android:textSize="@dimen/one_level_title" /> android:textSize="@dimen/one_level_title" />
...@@ -159,12 +159,14 @@ ...@@ -159,12 +159,14 @@
</FrameLayout> </FrameLayout>
</LinearLayout> </LinearLayout>
<RelativeLayout
<android.support.v7.widget.RecyclerView
android:id="@+id/recycle_content"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_above="@id/rl_chat_meun" android:layout_above="@id/rl_chat_meun"
android:layout_alignParentTop="true" /> android:layout_alignParentTop="true">
<include layout="@layout/common_refresh" />
</RelativeLayout>
</RelativeLayout> </RelativeLayout>
</com.rv.im.view.MyLinearLayout> </com.rv.im.view.MyLinearLayout>
\ 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