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
32cadb23
Commit
32cadb23
authored
Dec 20, 2019
by
jianglx
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Im的添加好友代码提交
parent
b303a9d6
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
848 additions
and
116 deletions
+848
-116
AndroidManifest.xml
plugin_im/src/main/AndroidManifest.xml
+2
-1
UserDetailActivity.java
plugin_im/src/main/java/com/rv/im/UserDetailActivity.java
+70
-2
AddFriendActivity.java
..._im/src/main/java/com/rv/im/friend/AddFriendActivity.java
+13
-113
RealAddFriendActivity.java
...src/main/java/com/rv/im/friend/RealAddFriendActivity.java
+228
-0
NoDoubleClickListener.java
...c/main/java/com/rv/im/listener/NoDoubleClickListener.java
+22
-0
RealAddFriendPresenter.java
...main/java/com/rv/im/presenter/RealAddFriendPresenter.java
+6
-0
TimeUtils.java
plugin_im/src/main/java/com/rv/im/util/TimeUtils.java
+453
-0
im_grap_circle_bg.xml
plugin_im/src/main/res/drawable/im_grap_circle_bg.xml
+8
-0
activity_real_add_friend.xml
plugin_im/src/main/res/layout/activity_real_add_friend.xml
+45
-0
activity_user_detail.xml
plugin_im/src/main/res/layout/activity_user_detail.xml
+1
-0
No files found.
plugin_im/src/main/AndroidManifest.xml
View file @
32cadb23
...
...
@@ -59,7 +59,8 @@
<activity
android:name=
".AddressListActivity"
/>
<activity
android:name=
".friend.AddFriendActivity"
/>
<activity
android:name=
".friend.NewFriendActivity"
/>
<activity
android:name=
".UserDetailActivity"
></activity>
<activity
android:name=
".UserDetailActivity"
/>
<activity
android:name=
".friend.RealAddFriendActivity"
></activity>
</application>
</manifest>
\ No newline at end of file
plugin_im/src/main/java/com/rv/im/UserDetailActivity.java
View file @
32cadb23
...
...
@@ -2,9 +2,9 @@ package com.rv.im;
import
android.content.Context
;
import
android.content.Intent
;
import
android.support.v7.app.AppCompatActivity
;
import
android.os.Bundle
;
import
android.text.TextUtils
;
import
android.view.View
;
import
android.widget.Button
;
import
android.widget.TextView
;
...
...
@@ -12,8 +12,10 @@ import com.ruiwenliu.wrapper.base.BaseBean;
import
com.ruiwenliu.wrapper.base.BaseStatusActivity
;
import
com.ruiwenliu.wrapper.weight.TitleView
;
import
com.rv.im.bean.UserDetailBean
;
import
com.rv.im.
db.service.FriendServiceImp
;
import
com.rv.im.
listener.NoDoubleClickListener
;
import
com.rv.im.presenter.UserDetailPresenter
;
import
com.rv.im.util.DateUtils
;
import
com.rv.im.util.TimeUtils
;
import
com.rv.im.view.RoundImageView
;
public
class
UserDetailActivity
extends
BaseStatusActivity
<
UserDetailPresenter
>
{
...
...
@@ -35,6 +37,8 @@ public class UserDetailActivity extends BaseStatusActivity<UserDetailPresenter>
private
Button
btnNextStep
;
private
UserDetailBean
.
UserDetail
user
;
public
static
void
start
(
Context
ctx
,
String
userId
)
{
Intent
intent
=
new
Intent
(
ctx
,
UserDetailActivity
.
class
);
Bundle
bundle
=
new
Bundle
();
...
...
@@ -92,6 +96,7 @@ public class UserDetailActivity extends BaseStatusActivity<UserDetailPresenter>
case
0
:
if
(
result
!=
null
&&
result
.
resultCode
==
1
)
{
UserDetailBean
userDetailBean
=
(
UserDetailBean
)
result
;
user
=
userDetailBean
.
getData
();
updateUi
();
}
break
;
...
...
@@ -99,5 +104,68 @@ public class UserDetailActivity extends BaseStatusActivity<UserDetailPresenter>
}
private
void
updateUi
()
{
if
(
user
==
null
)
{
return
;
}
if
(
isFinishing
())
{
return
;
}
nameTv
.
setText
(
TextUtils
.
isEmpty
(
user
.
getNickName
())
?
""
:
user
.
getNickName
());
birthdayTv
.
setText
(
DateUtils
.
timestampToString2
(
user
.
getBirthday
()
*
1000
));
sexTv
.
setText
(
user
.
getSex
()
==
0
?
"女"
:
"男"
);
// cityText.setText();
if
(
TextUtils
.
isEmpty
(
user
.
getPhone
()))
{
((
View
)
(
phoneTv
.
getParent
())).
setVisibility
(
View
.
GONE
);
}
else
{
((
View
)
(
phoneTv
.
getParent
())).
setVisibility
(
View
.
VISIBLE
);
phoneTv
.
setText
(
user
.
getPhone
());
}
if
(
user
.
getShowLastLoginTime
()
>
0
)
{
((
View
)
(
onlineTv
.
getParent
())).
setVisibility
(
View
.
VISIBLE
);
onlineTv
.
setText
(
TimeUtils
.
getFriendlyTimeDesc
(
this
,
user
.
getShowLastLoginTime
()));
}
else
{
((
View
)
(
onlineTv
.
getParent
())).
setVisibility
(
View
.
GONE
);
}
if
(
userId
==
mLoginUserId
)
{
btnNextStep
.
setVisibility
(
View
.
GONE
);
}
else
{
btnNextStep
.
setVisibility
(
View
.
VISIBLE
);
if
(
user
.
getFriends
()
==
null
)
{
// 陌生人
btnNextStep
.
setText
(
"添加好友"
);
btnNextStep
.
setOnClickListener
(
new
AddAttentionListener
());
}
else
if
(
user
.
getFriends
().
getBlacklist
()
==
1
)
{
// 需显示移除黑名单
btnNextStep
.
setText
(
"移除黑名单"
);
// btnNextStep.setOnClickListener(new RemoveBlacklistListener());
}
else
if
(
user
.
getFriends
().
getIsBeenBlack
()
==
1
)
{
// 需显示加入黑名单
btnNextStep
.
setText
(
"加入黑名单"
);
}
else
if
(
user
.
getFriends
().
getStatus
()
==
2
||
user
.
getFriends
().
getStatus
()
==
4
)
{
// 好友
btnNextStep
.
setText
(
"发送消息"
);
btnNextStep
.
setOnClickListener
(
new
SendMsgListener
());
}
else
{
btnNextStep
.
setText
(
"添加好友"
);
btnNextStep
.
setOnClickListener
(
new
AddAttentionListener
());
}
}
}
private
class
SendMsgListener
extends
NoDoubleClickListener
{
@Override
public
void
onNoDoubleClick
(
View
view
)
{
Intent
intent
=
ChatActivity
.
getIntent
(
UserDetailActivity
.
this
,
userId
,
user
.
getNickName
(),
0
);
startActivity
(
intent
);
finish
();
}
}
public
class
AddAttentionListener
extends
NoDoubleClickListener
{
@Override
public
void
onNoDoubleClick
(
View
view
)
{
}
}
}
plugin_im/src/main/java/com/rv/im/friend/AddFriendActivity.java
View file @
32cadb23
...
...
@@ -2,6 +2,7 @@ package com.rv.im.friend;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.v7.widget.LinearLayoutManager
;
import
android.support.v7.widget.RecyclerView
;
import
android.text.TextUtils
;
...
...
@@ -20,15 +21,11 @@ import com.rv.im.UserDetailActivity;
import
com.rv.im.adapter.FriendSearchListAdapter
;
import
com.rv.im.bean.AddResultBean
;
import
com.rv.im.bean.FriendSearchBean
;
import
com.rv.im.db.service.ChatMessageServiceImp
;
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.ListenerManager
;
import
com.rv.im.xmpp.listener.ChatMessageListener
;
import
com.rv.im.xmpp.listener.NewFriendListener
;
/*******
*
* 添加好友功能
...
...
@@ -85,8 +82,6 @@ public class AddFriendActivity extends BaseStatusActivity<AddFriendPresenter> im
@Override
public
void
add
(
FriendSearchBean
.
FriendSearItemBean
item
)
{
userId
=
item
.
getUserId
();
userName
=
item
.
getNickname
();
int
fromAddType
;
if
(!
TextUtils
.
isEmpty
(
userName
)
&&
userName
.
contains
(
mKeyWord
))
{
fromAddType
=
5
;
...
...
@@ -94,8 +89,10 @@ public class AddFriendActivity extends BaseStatusActivity<AddFriendPresenter> im
// 昵称不包含关键字的话就是通过手机号搜索出来的,
fromAddType
=
4
;
}
userId
=
item
.
getUserId
();
userName
=
item
.
getNickname
();
startActivityForResult
(
RealAddFriendActivity
.
getIntent
(
getApplicationContext
(),
userId
,
userName
,
fromAddType
),
10000
);
mPresenter
.
addFriend
(
userId
,
fromAddType
);
}
});
recyclerview
.
setAdapter
(
adapter
);
...
...
@@ -140,118 +137,21 @@ public class AddFriendActivity extends BaseStatusActivity<AddFriendPresenter> im
@Override
public
void
onNewFriendSendStateChange
(
String
toUserId
,
ChatMessage
message
,
int
messageState
)
{
if
(
messageState
==
ChatMessageListener
.
MESSAGE_SEND_SUCCESS
)
{
msgSendSuccess
(
message
,
message
.
getPackId
());
}
else
if
(
messageState
==
ChatMessageListener
.
MESSAGE_SEND_FAILED
)
{
// msgSendFailed(message.getPacketId());
}
}
// xmpp消息发送成功最终回调到这,
// 在这里调整ui,
// 还有存本地数据库,
public
void
msgSendSuccess
(
ChatMessage
message
,
String
packet
)
{
if
(
addhaoyouid
!=
null
&&
addhaoyouid
.
equals
(
packet
))
{
if
(
isyanzheng
==
0
)
{
// 需要验证
showToast
(
"打招呼成功,静候回音"
);
FriendServiceImp
.
getInstance
(
this
).
addMessage
(
mPresenter
.
buildAddFriendMessage
(
userId
,
userName
,
message
.
getMessageType
()));
// ListenerManager.getInstance().notifyNewFriend(mLoginUserId, message, true);
}
else
if
(
isyanzheng
==
1
)
{
showToast
(
"好友添加成功"
);
// 数据库中添加好友
FriendServiceImp
.
getInstance
(
this
).
addMessage
(
mPresenter
.
buildAddFriendMessage
(
userId
,
userName
,
message
.
getMessageType
()));
ChatMessageServiceImp
.
getInstance
(
this
).
addMessage
(
message
);
// FriendDao.getInstance().updateFriendContent(mLoginUserId, mUser.getUserId(), InternationalizationHelper.getString("JXMessageObject_BeFriendAndChat"), XmppMessage.TYPE_TEXT, TimeUtils.sk_time_current_time());
// ListenerManager.getInstance().notifyNewFriend(mLoginUserId, message, true);
// loadOthersInfoFromNet();
// CardcastUiUpdateUtil.broadcastUpdateUi(mContext);
}
// 已经是好友了,mFriend不能为空,
// mFriend = FriendDao.getInstance().getFriend(mLoginUserId, mUserId);
}
// else if (addblackid != null && addblackid.equals(packet)) {
// Toast.makeText(getApplicationContext(), getString(R.string.add_blacklist_succ), Toast.LENGTH_SHORT).show();
// findViewById(R.id.look_bussic_cicle_rl).setVisibility(View.GONE);
// mNextStepBtn.setText(InternationalizationHelper.getString("REMOVE"));
// mNextStepBtn.setOnClickListener(new RemoveBlacklistListener());
//
// // 更新当前持有的Friend对象,
// mFriend.setStatus(Friend.STATUS_BLACKLIST);
// FriendDao.getInstance().updateFriendStatus(message.getOwnerId(), message.getUserId(), mFriend.getStatus());
// FriendHelper.addBlacklistExtraOperation(message.getOwnerId(), message.getUserId());
//
// ChatMessage addBlackChatMessage = new ChatMessage();
// addBlackChatMessage.setContent(InternationalizationHelper.getString("JXFriendObject_AddedBlackList") + " " + mUser.getNickName());
// addBlackChatMessage.setTimeSend(TimeUtils.sk_time_current_time());
// FriendDao.getInstance().updateLastChatMessage(mLoginUserId, Friend.ID_NEW_FRIEND_MESSAGE, addBlackChatMessage);
//
// NewFriendDao.getInstance().createOrUpdateNewFriend(message);
// NewFriendDao.getInstance().changeNewFriendState(mUser.getUserId(), Friend.STATUS_18);
// ListenerManager.getInstance().notifyNewFriend(mLoginUserId, message, true);
//
// CardcastUiUpdateUtil.broadcastUpdateUi(mContext);
//
// Intent intent = new Intent(this, MainActivity.class);
// startActivity(intent);
// finish();
// } else if (removeblack != null && removeblack.equals(packet)) {
// Toast.makeText(getApplicationContext(), InternationalizationHelper.getString("REMOVE_BLACKLIST"), Toast.LENGTH_SHORT).show();
// findViewById(R.id.look_bussic_cicle_rl).setVisibility(View.VISIBLE);
// mNextStepBtn.setText(InternationalizationHelper.getString("JXUserInfoVC_SendMseeage"));
// mNextStepBtn.setOnClickListener(new SendMsgListener());
//
// // 更新当前持有的Friend对象,
// if (mFriend != null) {
// mFriend.setStatus(Friend.STATUS_FRIEND);
// }
// NewFriendDao.getInstance().ascensionNewFriend(message, Friend.STATUS_FRIEND);
// FriendHelper.beAddFriendExtraOperation(message.getOwnerId(), message.getUserId());
//
// ChatMessage removeChatMessage = new ChatMessage();
// removeChatMessage.setContent(coreManager.getSelf().getNickName() + InternationalizationHelper.getString("REMOVE"));
// removeChatMessage.setTimeSend(TimeUtils.sk_time_current_time());
// FriendDao.getInstance().updateLastChatMessage(mLoginUserId, Friend.ID_NEW_FRIEND_MESSAGE, removeChatMessage);
// /* FriendDao.getInstance().updateFriendContent(mLoginUserId, message.getUserId(),
// InternationalizationHelper.getString("JXMessageObject_BeFriendAndChat"), XmppMessage.TYPE_TEXT, TimeUtils.sk_time_current_time());*/
//
// NewFriendDao.getInstance().createOrUpdateNewFriend(message);
// NewFriendDao.getInstance().changeNewFriendState(message.getUserId(), Friend.STATUS_24);
// ListenerManager.getInstance().notifyNewFriend(mLoginUserId, message, true);
//
// CardcastUiUpdateUtil.broadcastUpdateUi(mContext);
//
// loadOthersInfoFromNet();
// } else if (deletehaoyou != null && deletehaoyou.equals(packet)) {
// Toast.makeText(getApplicationContext(), InternationalizationHelper.getString("JXAlert_DeleteOK"), Toast.LENGTH_SHORT).show();
//
// FriendHelper.removeAttentionOrFriend(mLoginUserId, message.getUserId());
//
// ChatMessage deleteChatMessage = new ChatMessage();
// deleteChatMessage.setContent(InternationalizationHelper.getString("JXAlert_DeleteFirend") + " " + mUser.getNickName());
// deleteChatMessage.setTimeSend(TimeUtils.sk_time_current_time());
// FriendDao.getInstance().updateLastChatMessage(mLoginUserId, Friend.ID_NEW_FRIEND_MESSAGE, deleteChatMessage);
//
// NewFriendDao.getInstance().createOrUpdateNewFriend(message);
// NewFriendDao.getInstance().changeNewFriendState(mUser.getUserId(), Friend.STATUS_16);
// ListenerManager.getInstance().notifyNewFriend(mLoginUserId, message, true);
//
// CardcastUiUpdateUtil.broadcastUpdateUi(mContext);
//
// Intent intent = new Intent(this, MainActivity.class);
// startActivity(intent);
// finish();
// }
}
@Override
public
boolean
onNewFriend
(
ChatMessage
message
)
{
// if(message.getMessageType() == MessageTypeEnum)
return
false
;
}
@Override
protected
void
onActivityResult
(
int
requestCode
,
int
resultCode
,
@Nullable
Intent
data
)
{
super
.
onActivityResult
(
requestCode
,
resultCode
,
data
);
if
(
requestCode
==
10000
&&
resultCode
==
RESULT_OK
)
{
setResult
(
RESULT_OK
);
finish
();
}
}
}
plugin_im/src/main/java/com/rv/im/friend/RealAddFriendActivity.java
0 → 100644
View file @
32cadb23
package
com
.
rv
.
im
.
friend
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.graphics.Color
;
import
android.os.Bundle
;
import
android.text.TextUtils
;
import
android.view.View
;
import
android.widget.Button
;
import
android.widget.EditText
;
import
android.widget.TextView
;
import
com.ruiwenliu.wrapper.base.BaseBean
;
import
com.ruiwenliu.wrapper.base.BaseStatusActivity
;
import
com.ruiwenliu.wrapper.weight.TitleView
;
import
com.rv.im.ImSetting
;
import
com.rv.im.R
;
import
com.rv.im.bean.AddResultBean
;
import
com.rv.im.db.service.ChatMessageServiceImp
;
import
com.rv.im.db.service.FriendServiceImp
;
import
com.rv.im.db.table.ChatMessage
;
import
com.rv.im.listener.NoDoubleClickListener
;
import
com.rv.im.presenter.RealAddFriendPresenter
;
import
com.rv.im.xmpp.ListenerManager
;
import
com.rv.im.xmpp.listener.ChatMessageListener
;
import
com.rv.im.xmpp.listener.NewFriendListener
;
public
class
RealAddFriendActivity
extends
BaseStatusActivity
<
RealAddFriendPresenter
>
implements
NewFriendListener
{
private
static
final
String
KEY_USER_ID
=
"userid"
;
private
static
final
String
KEY_ADD_TYPE
=
"addtype"
;
private
static
final
String
KEY_USER_NAME
=
"username"
;
private
EditText
edtAddApply
;
private
EditText
edtAddRemark
;
private
String
userId
;
private
String
userName
;
private
int
fromAddType
;
public
static
Intent
getIntent
(
Context
context
,
String
userId
,
String
userName
,
int
fromAddType
)
{
Intent
intent
=
new
Intent
(
context
,
RealAddFriendActivity
.
class
);
intent
.
putExtra
(
KEY_USER_ID
,
userId
);
intent
.
putExtra
(
KEY_ADD_TYPE
,
fromAddType
);
intent
.
putExtra
(
KEY_USER_NAME
,
userName
);
return
intent
;
}
@Override
protected
int
setLayout
()
{
return
R
.
layout
.
activity_real_add_friend
;
}
@Override
protected
void
initView
(
Bundle
savedInstanceState
,
TitleView
titleView
,
Intent
intent
)
{
titleView
.
setTitle
(
"申请添加朋友"
);
titleView
.
setText
(
R
.
id
.
tv_title_right
,
"发送"
);
((
TextView
)
titleView
.
findViewById
(
R
.
id
.
tv_title_right
)).
setTextColor
(
Color
.
WHITE
);
titleView
.
findViewById
(
R
.
id
.
tv_title_right
).
setBackgroundResource
(
R
.
drawable
.
bg_btn_green_pre
);
titleView
.
setChildClickListener
(
R
.
id
.
tv_title_right
,
new
NoDoubleClickListener
()
{
@Override
public
void
onNoDoubleClick
(
View
view
)
{
mPresenter
.
addFriend
(
userId
,
fromAddType
);
}
});
ListenerManager
.
getInstance
().
addNewFriendListener
(
this
);
userId
=
intent
.
getStringExtra
(
KEY_USER_ID
);
fromAddType
=
intent
.
getIntExtra
(
KEY_ADD_TYPE
,
6
);
userName
=
intent
.
getStringExtra
(
KEY_USER_NAME
);
edtAddApply
=
findViewById
(
R
.
id
.
edt_add_apply
);
edtAddRemark
=
findViewById
(
R
.
id
.
edt_add_remark
);
edtAddApply
.
setText
((!
TextUtils
.
isEmpty
(
ImSetting
.
getUserName
()))
?
"我是"
+
ImSetting
.
getUserName
()
:
"你好"
);
if
(!
TextUtils
.
isEmpty
(
userName
))
edtAddRemark
.
setText
(
userName
);
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
ListenerManager
.
getInstance
().
removeNewFriendListener
(
this
);
}
private
int
isyanzheng
;
private
String
addhaoyouid
;
@Override
public
void
onShowResult
(
int
requestType
,
BaseBean
result
)
{
switch
(
requestType
)
{
case
0
:
if
(
result
!=
null
)
{
AddResultBean
bean
=
(
AddResultBean
)
result
;
if
(
bean
.
resultCode
==
1
&&
bean
.
getData
()
!=
null
)
{
if
(
bean
.
getData
().
getType
()
==
1
||
bean
.
getData
().
getType
()
==
3
)
{
isyanzheng
=
0
;
// 需要验证
// 需要验证就发送打招呼的消息,
ChatMessage
message
=
mPresenter
.
doSayHello
(
edtAddApply
.
getText
().
toString
().
trim
(),
userName
,
userId
);
addhaoyouid
=
message
!=
null
?
message
.
getPackId
()
:
""
;
}
else
if
(
bean
.
getData
().
getType
()
==
2
||
bean
.
getData
().
getType
()
==
4
)
{
// 已经是好友了
isyanzheng
=
1
;
// 不需要验证
ChatMessage
message
=
mPresenter
.
doSayAddFriend
(
userName
,
userId
);
addhaoyouid
=
message
!=
null
?
message
.
getPackId
()
:
""
;
}
else
if
(
bean
.
getData
().
getType
()
==
5
)
{
showToast
(
getString
(
R
.
string
.
add_attention_failed
));
}
}
}
break
;
}
}
// xmpp消息发送成功最终回调到这,
// 在这里调整ui,
// 还有存本地数据库,
public
void
msgSendSuccess
(
ChatMessage
message
,
String
packet
)
{
if
(
addhaoyouid
!=
null
&&
addhaoyouid
.
equals
(
packet
))
{
if
(
isyanzheng
==
0
)
{
// 需要验证
showToast
(
"打招呼成功,静候回音"
);
FriendServiceImp
.
getInstance
(
this
).
addMessage
(
mPresenter
.
buildAddFriendMessage
(
userId
,
userName
,
message
.
getMessageType
()));
setResult
(
RESULT_OK
);
finish
();
// ListenerManager.getInstance().notifyNewFriend(mLoginUserId, message, true);
}
else
if
(
isyanzheng
==
1
)
{
showToast
(
"好友添加成功"
);
// 数据库中添加好友
FriendServiceImp
.
getInstance
(
this
).
addMessage
(
mPresenter
.
buildAddFriendMessage
(
userId
,
userName
,
message
.
getMessageType
()));
ChatMessageServiceImp
.
getInstance
(
this
).
addMessage
(
message
);
setResult
(
RESULT_OK
);
finish
();
// FriendDao.getInstance().updateFriendContent(mLoginUserId, mUser.getUserId(), InternationalizationHelper.getString("JXMessageObject_BeFriendAndChat"), XmppMessage.TYPE_TEXT, TimeUtils.sk_time_current_time());
// ListenerManager.getInstance().notifyNewFriend(mLoginUserId, message, true);
// loadOthersInfoFromNet();
// CardcastUiUpdateUtil.broadcastUpdateUi(mContext);
}
// 已经是好友了,mFriend不能为空,
// mFriend = FriendDao.getInstance().getFriend(mLoginUserId, mUserId);
}
// else if (addblackid != null && addblackid.equals(packet)) {
// Toast.makeText(getApplicationContext(), getString(R.string.add_blacklist_succ), Toast.LENGTH_SHORT).show();
// findViewById(R.id.look_bussic_cicle_rl).setVisibility(View.GONE);
// mNextStepBtn.setText(InternationalizationHelper.getString("REMOVE"));
// mNextStepBtn.setOnClickListener(new RemoveBlacklistListener());
//
// // 更新当前持有的Friend对象,
// mFriend.setStatus(Friend.STATUS_BLACKLIST);
// FriendDao.getInstance().updateFriendStatus(message.getOwnerId(), message.getUserId(), mFriend.getStatus());
// FriendHelper.addBlacklistExtraOperation(message.getOwnerId(), message.getUserId());
//
// ChatMessage addBlackChatMessage = new ChatMessage();
// addBlackChatMessage.setContent(InternationalizationHelper.getString("JXFriendObject_AddedBlackList") + " " + mUser.getNickName());
// addBlackChatMessage.setTimeSend(TimeUtils.sk_time_current_time());
// FriendDao.getInstance().updateLastChatMessage(mLoginUserId, Friend.ID_NEW_FRIEND_MESSAGE, addBlackChatMessage);
//
// NewFriendDao.getInstance().createOrUpdateNewFriend(message);
// NewFriendDao.getInstance().changeNewFriendState(mUser.getUserId(), Friend.STATUS_18);
// ListenerManager.getInstance().notifyNewFriend(mLoginUserId, message, true);
//
// CardcastUiUpdateUtil.broadcastUpdateUi(mContext);
//
// Intent intent = new Intent(this, MainActivity.class);
// startActivity(intent);
// finish();
// } else if (removeblack != null && removeblack.equals(packet)) {
// Toast.makeText(getApplicationContext(), InternationalizationHelper.getString("REMOVE_BLACKLIST"), Toast.LENGTH_SHORT).show();
// findViewById(R.id.look_bussic_cicle_rl).setVisibility(View.VISIBLE);
// mNextStepBtn.setText(InternationalizationHelper.getString("JXUserInfoVC_SendMseeage"));
// mNextStepBtn.setOnClickListener(new SendMsgListener());
//
// // 更新当前持有的Friend对象,
// if (mFriend != null) {
// mFriend.setStatus(Friend.STATUS_FRIEND);
// }
// NewFriendDao.getInstance().ascensionNewFriend(message, Friend.STATUS_FRIEND);
// FriendHelper.beAddFriendExtraOperation(message.getOwnerId(), message.getUserId());
//
// ChatMessage removeChatMessage = new ChatMessage();
// removeChatMessage.setContent(coreManager.getSelf().getNickName() + InternationalizationHelper.getString("REMOVE"));
// removeChatMessage.setTimeSend(TimeUtils.sk_time_current_time());
// FriendDao.getInstance().updateLastChatMessage(mLoginUserId, Friend.ID_NEW_FRIEND_MESSAGE, removeChatMessage);
// /* FriendDao.getInstance().updateFriendContent(mLoginUserId, message.getUserId(),
// InternationalizationHelper.getString("JXMessageObject_BeFriendAndChat"), XmppMessage.TYPE_TEXT, TimeUtils.sk_time_current_time());*/
//
// NewFriendDao.getInstance().createOrUpdateNewFriend(message);
// NewFriendDao.getInstance().changeNewFriendState(message.getUserId(), Friend.STATUS_24);
// ListenerManager.getInstance().notifyNewFriend(mLoginUserId, message, true);
//
// CardcastUiUpdateUtil.broadcastUpdateUi(mContext);
//
// loadOthersInfoFromNet();
// } else if (deletehaoyou != null && deletehaoyou.equals(packet)) {
// Toast.makeText(getApplicationContext(), InternationalizationHelper.getString("JXAlert_DeleteOK"), Toast.LENGTH_SHORT).show();
//
// FriendHelper.removeAttentionOrFriend(mLoginUserId, message.getUserId());
//
// ChatMessage deleteChatMessage = new ChatMessage();
// deleteChatMessage.setContent(InternationalizationHelper.getString("JXAlert_DeleteFirend") + " " + mUser.getNickName());
// deleteChatMessage.setTimeSend(TimeUtils.sk_time_current_time());
// FriendDao.getInstance().updateLastChatMessage(mLoginUserId, Friend.ID_NEW_FRIEND_MESSAGE, deleteChatMessage);
//
// NewFriendDao.getInstance().createOrUpdateNewFriend(message);
// NewFriendDao.getInstance().changeNewFriendState(mUser.getUserId(), Friend.STATUS_16);
// ListenerManager.getInstance().notifyNewFriend(mLoginUserId, message, true);
//
// CardcastUiUpdateUtil.broadcastUpdateUi(mContext);
//
// Intent intent = new Intent(this, MainActivity.class);
// startActivity(intent);
// finish();
// }
}
@Override
public
void
onNewFriendSendStateChange
(
String
toUserId
,
ChatMessage
message
,
int
messageState
)
{
if
(
messageState
==
ChatMessageListener
.
MESSAGE_SEND_SUCCESS
)
{
msgSendSuccess
(
message
,
message
.
getPackId
());
}
else
if
(
messageState
==
ChatMessageListener
.
MESSAGE_SEND_FAILED
)
{
// msgSendFailed(message.getPacketId());
}
}
@Override
public
boolean
onNewFriend
(
ChatMessage
message
)
{
return
false
;
}
}
plugin_im/src/main/java/com/rv/im/listener/NoDoubleClickListener.java
0 → 100644
View file @
32cadb23
package
com
.
rv
.
im
.
listener
;
import
android.view.View
;
// 防止点击按钮 过快 || 多次点击 造成多次事件
public
abstract
class
NoDoubleClickListener
implements
View
.
OnClickListener
{
private
static
long
lastClickTime
=
0
;
private
static
final
int
MIN_CLICK_DELAY_TIME
=
800
;
public
abstract
void
onNoDoubleClick
(
View
view
);
@Override
public
void
onClick
(
View
v
)
{
long
currentTime
=
System
.
currentTimeMillis
();
if
(
currentTime
-
lastClickTime
>
MIN_CLICK_DELAY_TIME
)
{
lastClickTime
=
currentTime
;
onNoDoubleClick
(
v
);
}
}
}
\ No newline at end of file
plugin_im/src/main/java/com/rv/im/presenter/RealAddFriendPresenter.java
0 → 100644
View file @
32cadb23
package
com
.
rv
.
im
.
presenter
;
public
class
RealAddFriendPresenter
extends
AddFriendPresenter
{
}
plugin_im/src/main/java/com/rv/im/util/TimeUtils.java
0 → 100644
View file @
32cadb23
package
com
.
rv
.
im
.
util
;
import
android.content.Context
;
import
android.text.TextUtils
;
import
android.util.Log
;
import
android.widget.TextView
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
@SuppressWarnings
(
"deprecation"
)
public
class
TimeUtils
{
// ///s 代表Simple日期格式:yyyy-MM-dd
// ///f 代表Full日期格式:yyyy-MM-dd hh:mm:ss
public
static
final
SimpleDateFormat
ss_format
=
new
SimpleDateFormat
(
"MM-dd"
);
public
static
final
SimpleDateFormat
s_format
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
public
static
final
SimpleDateFormat
f_format
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
public
static
final
SimpleDateFormat
sdfNearby
=
new
SimpleDateFormat
(
"MM-dd HH:mm"
);
public
static
final
SimpleDateFormat
sk_format_1
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
);
public
static
SimpleDateFormat
friendly_format1
=
new
SimpleDateFormat
(
"HH:mm"
);
public
static
SimpleDateFormat
friendly_format2
=
new
SimpleDateFormat
(
"MM-dd HH:mm"
);
private
static
SimpleDateFormat
hm_formater
=
new
SimpleDateFormat
(
"HH:mm"
);
public
static
long
s_str_2_long
(
String
dateString
)
{
try
{
Date
d
=
s_format
.
parse
(
dateString
);
return
d
.
getTime
();
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
0
;
}
public
static
long
f_str_2_long
(
String
dateString
)
{
try
{
Date
d
=
f_format
.
parse
(
dateString
);
return
d
.
getTime
();
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
0
;
}
public
static
String
ss_long_2_str
(
long
timestamp
)
{
return
ss_format
.
format
(
new
Date
(
timestamp
));
}
public
static
String
s_long_2_str
(
long
timestamp
)
{
return
s_format
.
format
(
new
Date
(
timestamp
));
}
public
static
String
f_long_2_str
(
long
timestamp
)
{
return
f_format
.
format
(
new
Date
(
timestamp
));
}
/**
* 获取字符串时间的年份
*
* @param dateString 格式为yyyy-MM-ss,或者yyyy-MM-dd HH:mm:ss
* @return
*/
public
static
int
getYear
(
String
dateString
)
{
try
{
Date
d
=
s_format
.
parse
(
dateString
);
return
d
.
getYear
()
+
1900
;
// 年份是基于格林威治时间,所以加上1900
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
0
;
}
/**
* 获取字符串时间的月份
*
* @param dateString 格式为yyyy-MM-ss,或者yyyy-MM-dd hh:mm:ss
* @return
*/
public
static
int
getMonth
(
String
dateString
)
{
try
{
Date
d
=
s_format
.
parse
(
dateString
);
return
d
.
getMonth
();
// 月份从0-11
}
catch
(
ParseException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
return
0
;
}
// /////////////////////以上是通用的,下面为特殊需求的////////////////////////
// /**
// * 时间戳转换日期格式
// *
// * @param timestamp
// * 单位秒
// * @return
// */
// public static String getCurrentTime(long timestamp) {
// SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// return f.format(new Date(timestamp * 1000));
// }
/**
* 获取字符串时间的天
*
* @param dateString 格式为yyyy-MM-ss,或者yyyy-MM-dd hh:mm:ss
* @return
*/
public
static
int
getDayOfMonth
(
String
dateString
)
{
try
{
Date
d
=
s_format
.
parse
(
dateString
);
return
d
.
getDate
();
}
catch
(
ParseException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
return
0
;
}
public
static
int
getHours
(
String
timeString
)
{
SimpleDateFormat
formart
=
new
SimpleDateFormat
(
"HH:mm:ss"
);
try
{
Date
date
=
formart
.
parse
(
timeString
);
return
date
.
getHours
();
}
catch
(
ParseException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
return
0
;
}
public
static
int
getMinutes
(
String
timeString
)
{
SimpleDateFormat
formart
=
new
SimpleDateFormat
(
"HH:mm:ss"
);
try
{
Date
date
=
formart
.
parse
(
timeString
);
return
date
.
getMinutes
();
}
catch
(
ParseException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
return
0
;
}
public
static
int
getSeconds
(
String
timeString
)
{
SimpleDateFormat
formart
=
new
SimpleDateFormat
(
"HH:mm:ss"
);
try
{
Date
date
=
formart
.
parse
(
timeString
);
return
date
.
getSeconds
();
}
catch
(
ParseException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
return
0
;
}
public
static
String
getCurrentTime
()
{
return
f_format
.
format
(
new
Date
(
System
.
currentTimeMillis
()));
}
/**
* 在当前时间上加上多少毫秒,返回这个时间
*
* @param mask
* @return
*/
public
static
String
getCurrentTimeMask
(
long
mask
)
{
return
f_format
.
format
(
new
Date
(
System
.
currentTimeMillis
()
+
mask
));
}
/**
* 获取精简的日期
*
* @param time
* @return
*/
public
static
String
getSimpleDate
(
String
time
)
{
SimpleDateFormat
formater
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
Date
date
=
null
;
try
{
date
=
f_format
.
parse
(
time
);
return
formater
.
format
(
date
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
return
""
;
}
}
/**
* @param time
* @return
*/
public
static
String
getSimpleDateTime
(
String
time
)
{
SimpleDateFormat
formater
=
new
SimpleDateFormat
(
"yy-MM-dd HH:mm"
);
Date
date
=
null
;
try
{
date
=
f_format
.
parse
(
time
);
return
formater
.
format
(
date
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
return
""
;
}
}
public
static
String
getSimpleTime
(
String
time
)
{
SimpleDateFormat
formater
=
new
SimpleDateFormat
(
"HH:mm"
);
Date
date
=
null
;
try
{
date
=
f_format
.
parse
(
time
);
return
formater
.
format
(
date
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
return
""
;
}
}
public
static
String
getChatSimpleDate
(
String
time
)
{
SimpleDateFormat
formater
=
new
SimpleDateFormat
(
"yy-MM-dd"
);
Date
date
=
null
;
try
{
date
=
f_format
.
parse
(
time
);
return
formater
.
format
(
date
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
return
""
;
}
}
public
static
String
getTimeHM
(
String
time
)
{
SimpleDateFormat
formater
=
new
SimpleDateFormat
(
"HH:mm"
);
Date
date
=
null
;
try
{
date
=
f_format
.
parse
(
time
);
return
formater
.
format
(
date
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
return
""
;
}
}
public
static
String
getTimeMMdd
(
long
time
)
{
SimpleDateFormat
formater
=
new
SimpleDateFormat
(
"MM-dd"
);
return
formater
.
format
(
time
*
1000
);
}
/**
* 获取好友的时间显示
*
* @param time 秒级别的时间戳
* @return
*/
public
static
String
getFriendlyTimeDesc
(
Context
context
,
long
time
)
{
String
desc
=
""
;
if
(
time
==
0
)
{
return
desc
;
}
Date
timeDate
=
new
Date
(
time
*
1000L
);
Date
nowDate
=
new
Date
();
long
delaySeconds
=
nowDate
.
getTime
()
/
1000
-
time
;
// 相差的秒数
if
(
delaySeconds
<
10
)
{
// 小于10秒,显示刚刚
//desc = context.getString(R.string.friendly_time_just_now);// 显示刚刚
desc
=
"刚刚"
;
}
else
if
(
delaySeconds
<=
60
)
{
// 小于1分钟,显示如“25秒前”
desc
=
delaySeconds
+
"秒前"
;
}
else
if
(
delaySeconds
<
60
*
30
)
{
// 小于30分钟,显示如“25分钟前”
desc
=
(
delaySeconds
/
60
)
+
"分钟前"
;
}
else
if
(
delaySeconds
<
60
*
60
*
24
)
{
// 小于1天之内
if
(
nowDate
.
getDay
()
-
timeDate
.
getDay
()
==
0
)
{
// 同一天
desc
=
friendly_format1
.
format
(
timeDate
);
}
else
{
// 前一天
desc
=
"昨天"
+
" "
+
friendly_format1
.
format
(
timeDate
);
}
}
else
if
(
delaySeconds
<
60
*
60
*
24
*
2
)
{
// 小于2天之内
if
(
nowDate
.
getDay
()
-
timeDate
.
getDay
()
==
1
||
nowDate
.
getDay
()
-
timeDate
.
getDay
()
==
-
6
)
{
// 昨天
desc
=
"昨天"
+
" "
+
friendly_format1
.
format
(
timeDate
);
}
else
{
// 前天
desc
=
"前天"
+
" "
+
friendly_format1
.
format
(
timeDate
);
}
}
else
if
(
delaySeconds
<
60
*
60
*
24
*
3
)
{
// 小于三天
if
(
nowDate
.
getDay
()
-
timeDate
.
getDay
()
==
2
||
nowDate
.
getDay
()
-
timeDate
.
getDay
()
==
-
5
)
{
// 前天
desc
=
"前天"
+
" "
+
friendly_format1
.
format
(
timeDate
);
}
// else 超过前天
}
if
(
TextUtils
.
isEmpty
(
desc
))
{
desc
=
friendly_format2
.
format
(
timeDate
);
}
return
desc
;
}
public
static
String
sk_time_friendly_format2
(
long
time
)
{
return
friendly_format2
.
format
(
new
Date
(
time
*
1000
));
}
public
static
String
sk_time_s_long_2_str
(
long
time
)
{
return
s_long_2_str
(
time
*
1000
);
}
public
static
String
skNearbyTimeString
(
long
timestamp
)
{
return
sdfNearby
.
format
(
new
Date
(
timestamp
*
1000
));
}
public
static
String
sk_time_ss_long_2_str
(
long
time
)
{
return
ss_long_2_str
(
time
*
1000
);
}
public
static
long
sk_time_s_str_2_long
(
String
dateString
)
{
return
s_str_2_long
(
dateString
)
/
1000
;
}
public
static
long
sk_time_current_time
()
{
// 加上与服务器时间差值,
// long timeDifference = PreferenceUtils.getLong(MyApplication.getContext(), KEY_TIME_DIFFERENCE, 0L);
return
System
.
currentTimeMillis
();
}
public
static
String
sk_time_long_to_hm_str
(
long
time
)
{
try
{
return
hm_formater
.
format
(
new
Date
(
time
*
1000
));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
""
;
}
public
static
String
sk_time_long_to_chat_time_str
(
long
time
)
{
String
date1
=
sk_time_s_long_2_str
(
time
);
String
date2
=
sk_time_s_long_2_str
(
System
.
currentTimeMillis
()
/
1000
);
if
(
date1
.
compareToIgnoreCase
(
date2
)
==
0
)
{
// 是同一天
return
sk_time_long_to_hm_str
(
time
);
}
else
{
return
long_to_yMdHm_str
(
time
*
1000
);
}
}
// 日期加小时的字符串
public
static
String
long_to_yMdHm_str
(
long
time
)
{
return
sk_format_1
.
format
(
new
Date
(
time
));
}
public
static
long
sk_time_yMdHm_str_to_long
(
String
time
)
{
try
{
return
sk_format_1
.
parse
(
time
).
getTime
()
/
1000
;
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
0
;
}
public
static
int
yMdHm_getYear
(
String
dateString
)
{
try
{
Date
d
=
sk_format_1
.
parse
(
dateString
);
return
d
.
getYear
()
+
1900
;
// 年份是基于格林威治时间,所以加上1900
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
0
;
}
public
static
int
yMdHm_getMonth
(
String
dateString
)
{
try
{
Date
d
=
sk_format_1
.
parse
(
dateString
);
return
d
.
getMonth
();
// 月份从0-11
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
0
;
}
public
static
int
yMdHm_getDayOfMonth
(
String
dateString
)
{
try
{
Date
d
=
sk_format_1
.
parse
(
dateString
);
return
d
.
getDate
();
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
0
;
}
public
static
int
yMdHm_getHours
(
String
timeString
)
{
try
{
Date
date
=
sk_format_1
.
parse
(
timeString
);
return
date
.
getHours
();
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
0
;
}
public
static
int
yMdHm_getMinutes
(
String
timeString
)
{
try
{
Date
date
=
sk_format_1
.
parse
(
timeString
);
return
date
.
getMinutes
();
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
0
;
}
/**
* @param textView
* @param time 时间戳/1000
* @return
*/
public
static
long
getSpecialBeginTime
(
TextView
textView
,
long
time
)
{
long
currentTime
=
System
.
currentTimeMillis
()
/
1000
;
if
(
time
>
currentTime
)
{
time
=
currentTime
;
}
textView
.
setText
(
sk_time_s_long_2_str
(
time
));
return
time
;
}
// /**
// * @param textView
// * @param time 时间戳/1000
// * @return
// */
// public static long getSpecialEndTime(TextView textView, long time) {
// long currentTime = System.currentTimeMillis() / 1000;
// if (time == 0 || time > currentTime - 24 * 60 * 60) {
// textView.setText(InternationalizationHelper.getString("SO_FAR"));
// return 0;
// }
// textView.setText(sk_time_s_long_2_str(time));
// return time;
// }
public
static
int
sk_time_age
(
long
birthday
)
{
int
age
=
(
new
Date
().
getYear
())
-
(
new
Date
(
birthday
*
1000
).
getYear
());
if
(
age
<
0
||
age
>
100
)
{
return
25
;
}
return
age
;
}
// public static void responseTime(long l) {
// //noinspection UnnecessaryLocalVariable
// long serverTime = l;
// // 接口没给时间会得到0, 或者老服务器时间是秒,差了一千倍也无视,
// if (serverTime < 1552978894754L) {
// return;
// }
// long localTime = System.currentTimeMillis();
// long timeDifference = serverTime - localTime;
// Log.e("TimeUtils", "timeDifference = " + timeDifference);
// PreferenceUtils.putLong(MyApplication.getContext(), KEY_TIME_DIFFERENCE, timeDifference);
// }
}
plugin_im/src/main/res/drawable/im_grap_circle_bg.xml
0 → 100644
View file @
32cadb23
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<corners
android:radius=
"7dp"
/>
<solid
android:color=
"@color/gray_f5f5f5"
/>
</shape>
\ No newline at end of file
plugin_im/src/main/res/layout/activity_real_add_friend.xml
0 → 100644
View file @
32cadb23
<?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"
android:paddingLeft=
"@dimen/dp_40"
android:paddingRight=
"@dimen/dp_40"
tools:context=
".friend.RealAddFriendActivity"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/size_20"
android:text=
"发送添加好友申请"
/>
<EditText
android:id=
"@+id/edt_add_apply"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/size_100"
android:layout_marginTop=
"@dimen/size_5"
android:background=
"@drawable/im_grap_circle_bg"
android:gravity=
"left|top"
android:padding=
"@dimen/dp_10"
android:textSize=
"@dimen/sp_12"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp40"
android:text=
"设置备注"
/>
<EditText
android:id=
"@+id/edt_add_remark"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/size_60"
android:layout_marginTop=
"@dimen/size_5"
android:background=
"@drawable/im_grap_circle_bg"
android:gravity=
"left|top"
android:padding=
"@dimen/dp_10"
android:textSize=
"@dimen/sp_12"
/>
</LinearLayout>
\ No newline at end of file
plugin_im/src/main/res/layout/activity_user_detail.xml
View file @
32cadb23
...
...
@@ -252,6 +252,7 @@
</RelativeLayout>
<Button
android:layout_marginBottom=
"5dp"
android:id=
"@+id/next_step_btn"
style=
"@style/BossGreenBtn"
android:layout_width=
"fill_parent"
...
...
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