Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
R
RvApp
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lify
RvApp
Commits
595c32ad
Commit
595c32ad
authored
Nov 08, 2019
by
jianglx
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Im的优化
parent
38ed8b04
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
237 additions
and
66 deletions
+237
-66
MainActivity.java
RvClient/src/main/java/com/xxfc/rv/MainActivity.java
+9
-9
AppCookie.java
...utils/src/main/java/com/rv/component/utils/AppCookie.java
+2
-0
ChatActivity.java
plugin_im/src/main/java/com/rv/im/ChatActivity.java
+46
-35
ImService.java
plugin_im/src/main/java/com/rv/im/ImService.java
+53
-14
LastChatHistoryListBean.java
...src/main/java/com/rv/im/bean/LastChatHistoryListBean.java
+10
-3
MessageDao.java
plugin_im/src/main/java/com/rv/im/db/dao/MessageDao.java
+66
-0
ChatMessageServiceImp.java
...main/java/com/rv/im/db/service/ChatMessageServiceImp.java
+10
-0
IChatMessageService.java
...c/main/java/com/rv/im/db/service/IChatMessageService.java
+4
-0
ChatMessage.java
plugin_im/src/main/java/com/rv/im/db/table/ChatMessage.java
+29
-0
ListenerManager.java
plugin_im/src/main/java/com/rv/im/xmpp/ListenerManager.java
+1
-0
activity_chat.xml
plugin_im/src/main/res/layout/activity_chat.xml
+7
-5
No files found.
RvClient/src/main/java/com/xxfc/rv/MainActivity.java
View file @
595c32ad
...
@@ -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
)
...
...
component_utils/src/main/java/com/rv/component/utils/AppCookie.java
View file @
595c32ad
...
@@ -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
;
...
...
plugin_im/src/main/java/com/rv/im/ChatActivity.java
View file @
595c32ad
...
@@ -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
.
recycle
rView
);
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
();
}
}
};
}
}
plugin_im/src/main/java/com/rv/im/ImService.java
View file @
595c32ad
...
@@ -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
);
// 通知登陆成功
get
Last
ChatHistory
();
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
,
0
l
);
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
();
}
/**
/**
* 发送聊天消息
* 发送聊天消息
*/
*/
...
...
plugin_im/src/main/java/com/rv/im/bean/LastChatHistoryListBean.java
View file @
595c32ad
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
;
...
...
plugin_im/src/main/java/com/rv/im/db/dao/MessageDao.java
View file @
595c32ad
...
@@ -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
;
}
}
}
plugin_im/src/main/java/com/rv/im/db/service/ChatMessageServiceImp.java
View file @
595c32ad
...
@@ -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
;
}
}
...
...
plugin_im/src/main/java/com/rv/im/db/service/IChatMessageService.java
View file @
595c32ad
...
@@ -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
);
}
}
plugin_im/src/main/java/com/rv/im/db/table/ChatMessage.java
View file @
595c32ad
...
@@ -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
;
}
}
}
plugin_im/src/main/java/com/rv/im/xmpp/ListenerManager.java
View file @
595c32ad
...
@@ -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
(()
->
{
...
...
plugin_im/src/main/res/layout/activity_chat.xml
View file @
595c32ad
...
@@ -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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment