This commit is contained in:
18401019693
2022-07-21 11:24:15 +08:00
parent 42138777e3
commit e1dbc9d38c
64 changed files with 4785 additions and 915 deletions

View File

@@ -46,7 +46,10 @@
<activity
android:name=".activity.MainActivity"
android:hardwareAccelerated="true"
android:screenOrientation="portrait" />
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/noAnimationStyle"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".activity.UserHomeActivity"
android:screenOrientation="portrait" />
@@ -122,6 +125,14 @@
<activity
android:name=".activity.MyWebViewActivity2"
android:screenOrientation="portrait" />
<!--融云消息列表界面-->
<activity
android:name=".activity.PDLiveConversationListActivity"
android:hardwareAccelerated="true"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/noAnimationStyle"
android:windowSoftInputMode="stateHidden|adjustResize" />
</application>
</manifest>

View File

@@ -31,6 +31,7 @@ import com.adjust.sdk.AdjustEvent;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.DeviceUtils;
import com.blankj.utilcode.util.GsonUtils;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
@@ -65,11 +66,14 @@ import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.Constants;
import com.yunbao.common.HtmlConfig;
import com.yunbao.common.activity.WebViewActivity;
import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.bean.LoginData;
import com.yunbao.common.bean.UserBean;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.interfaces.CommonCallback;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.manager.imrongcloud.RongcloudIMManager;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.main.R;
import com.yunbao.main.dialog.LoginTipsDialog;
@@ -712,8 +716,11 @@ public class EntryActivity extends AppCompatActivity {
mShowInvite = obj.getIntValue("isagent") == 1;
CommonAppConfig.getInstance().setLoginInfo(uid, token, true);
getBaseUserInfo();
//友盟统计登录
// MobclickAgent.onProfileSignIn(mLoginType, uid);
//设置登录信息
IMLoginModel model = GsonUtils.fromJson(info[0], IMLoginModel.class);
IMLoginManager.get(activity).setupLoginUser(model);
//融云连接服务器
RongcloudIMManager.connectIM(activity);
} else {
Contexts.startActivity(new Intent(Contexts, BindUserActivity.class).putExtra("uid", uid).putExtra("token", token));
}
@@ -785,7 +792,6 @@ public class EntryActivity extends AppCompatActivity {
});
}
// RecommendActivity.forward(Contexts, mShowInvite);
if (CommonAppConfig.IS_GOOGLE_PLAY == true) {
EntryActivity.this.startActivity(new Intent(EntryActivity.this, OneLoginActivity.class));
}else{

View File

@@ -6,6 +6,7 @@ import android.content.Context;
import android.content.Intent;
import androidx.recyclerview.widget.RecyclerView;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
@@ -19,6 +20,7 @@ import com.adjust.sdk.AdjustEvent;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.DeviceUtils;
import com.blankj.utilcode.util.GsonUtils;
import com.fm.openinstall.OpenInstall;
import com.fm.openinstall.listener.AppInstallAdapter;
import com.fm.openinstall.model.AppData;
@@ -29,12 +31,15 @@ import com.yunbao.common.HtmlConfig;
import com.yunbao.common.activity.AbsActivity;
import com.yunbao.common.activity.WebViewActivity;
import com.yunbao.common.bean.ConfigBean;
import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.bean.LoginData;
import com.yunbao.common.bean.UserBean;
import com.yunbao.common.http.CommonHttpConsts;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.interfaces.CommonCallback;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.manager.imrongcloud.RongcloudIMManager;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.main.R;
@@ -63,7 +68,7 @@ public class LoginActivity extends AbsActivity {
private EditText mEditPwd;
private View mBtnLogin;
private RecyclerView mRecyclerView;
// private MobLoginUtil mLoginUtil;
// private MobLoginUtil mLoginUtil;
private static boolean mFirstLogin;//是否是第一次登录
private static boolean mShowInvite;//显示邀请码弹窗
private static String mLoginType = Constants.MOB_PHONE;//登录方式
@@ -134,19 +139,6 @@ public class LoginActivity extends AbsActivity {
mEditPwd.addTextChangedListener(textWatcher);
boolean otherLoginType = false;
ConfigBean configBean = CommonAppConfig.getInstance().getConfig();
// if (configBean != null) {
// List<MobBean> list = MobBean.getLoginTypeList(configBean.getLoginType());
// if (list != null && list.size() > 0) {
// mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
// mRecyclerView.setHasFixedSize(true);
// mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));
// LoginTypeAdapter adapter = new LoginTypeAdapter(mContext, list);
// adapter.setOnItemClickListener(this);
// mRecyclerView.setAdapter(adapter);
// mLoginUtil = new MobLoginUtil();
// otherLoginType = true;
// }
// }
if (!otherLoginType) {
findViewById(R.id.other_login_tip).setVisibility(View.INVISIBLE);
}
@@ -207,13 +199,6 @@ public class LoginActivity extends AbsActivity {
mEditPhone.requestFocus();
return;
}
//屏蔽,原因:国外手机号无法校验合法性
// if (!ValidatePhoneUtil.validateMobileNumber(phoneNum)) {
// mEditPhone.setError(WordUtil.getString(R.string.login_phone_error));
// mEditPhone.requestFocus();
// return;
// }
pwd = mEditPwd.getText().toString().trim();
if (TextUtils.isEmpty(pwd)) {
mEditPwd.setError(WordUtil.getString(R.string.login_input_pwd));
@@ -248,7 +233,11 @@ public class LoginActivity extends AbsActivity {
getBaseUserInfo();
mFirebaseAnalytics.logEvent("FS_createdRole", null);
logger.logEvent("FB_createdRole");
//设置登录信息
IMLoginModel model = GsonUtils.fromJson(info[0], IMLoginModel.class);
IMLoginManager.get(activity).setupLoginUser(model);
//融云连接服务器
RongcloudIMManager.connectIM(activity);
//友盟统计登录
// MobclickAgent.onProfileSignIn(mLoginType, uid);
@@ -264,17 +253,12 @@ public class LoginActivity extends AbsActivity {
MainHttpUtil.getBaseInfo(new CommonCallback<UserBean>() {
@Override
public void callback(UserBean bean) {
// if (mFirstLogin) {
// RecommendActivity.forward(Contexts, mShowInvite);
// } else {
//完成手机号密码登录
AdjustEvent adjustEvent1 = new AdjustEvent("4ncwlv");
mFirebaseAnalytics.logEvent("FS_login", null);
logger.logEvent("FB_login");
Adjust.trackEvent(adjustEvent1);
MainActivity.forward(Contexts, mShowInvite);
// }
EntryActivity.activity.finish();
activity.finish();
}

View File

@@ -12,9 +12,6 @@ import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.viewpager.widget.ViewPager;
import android.text.TextUtils;
import android.util.Log;
import android.view.Display;
@@ -22,6 +19,11 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.viewpager.widget.ViewPager;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@@ -45,7 +47,7 @@ import com.yunbao.common.bean.LiveSvgGiftBean;
import com.yunbao.common.bean.UpdataListBean;
import com.yunbao.common.bean.UserBean;
import com.yunbao.common.custom.TabButtonGroup;
import com.yunbao.common.event.UpdateTablePoint;
import com.yunbao.common.event.MessageIMEvent;
import com.yunbao.common.event.UpdateTablePointMe;
import com.yunbao.common.http.CommonHttpConsts;
import com.yunbao.common.http.HttpCallback;
@@ -65,11 +67,8 @@ import com.yunbao.common.views.AbsMainViewHolder;
import com.yunbao.live.LiveConfig;
import com.yunbao.live.activity.LiveAnchorActivity;
import com.yunbao.live.activity.LiveRyAnchorActivity;
import com.yunbao.live.bean.ImUserBean;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.live.bean.LiveKsyConfigBean;
import com.yunbao.live.bean.RongIMEvent;
import com.yunbao.live.http.ImHttpUtil;
import com.yunbao.live.http.LiveHttpConsts;
import com.yunbao.live.http.LiveHttpUtil;
import com.yunbao.live.utils.LiveStorge;
@@ -77,10 +76,12 @@ import com.yunbao.live.views.ChatListViewHolder;
import com.yunbao.main.R;
import com.yunbao.main.dialog.MainStartDialogFragment;
import com.yunbao.main.dialog.SigninDialog;
import com.yunbao.main.event.PDLiveConversationListEvent;
import com.yunbao.main.http.MainHttpConsts;
import com.yunbao.main.http.MainHttpUtil;
import com.yunbao.main.interfaces.MainAppBarLayoutListener;
import com.yunbao.main.interfaces.MainStartChooseCallback;
import com.yunbao.main.manager.imrongcloud.ConversationIMListManager;
import com.yunbao.main.presenter.CheckLivePresenter;
import com.yunbao.main.utils.GenerateTestUserSig;
import com.yunbao.main.views.MainHomeCommunityViewHolder;
@@ -103,17 +104,6 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import cn.rongcloud.rtc.api.RCRTCConfig;
import cn.rongcloud.rtc.api.RCRTCEngine;
import io.rong.imlib.IRongCoreListener;
import io.rong.imlib.RongCoreClient;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.MessageContent;
import io.rong.message.SightMessage;
import static io.rong.imlib.IRongCoreListener.ConnectionStatusListener.ConnectionStatus.KICKED_OFFLINE_BY_OTHER_CLIENT;
public class MainActivity extends AbsActivity implements MainAppBarLayoutListener {
public static RelativeLayout rt_main_tab;
@@ -127,7 +117,6 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
private MainHomeVideoViewHolder mainHomeVideoViewHolder;
private MainHomeShopViewHolder mListShopViewHolder;
private ChatListViewHolder mChatListViewHolder;
// private MainHomeChatViewHolder mainHomeChatViewHolder;
private MainMeViewHolder mMeViewHolder;
private AbsMainViewHolder[] mViewHolders;
private View mBottom;
@@ -145,7 +134,8 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
private HttpCallback mGetLiveSdkCallback;
private String mUrlCsd;
private boolean isReady = false;
private View v_table_redpoint, v_table_redpoint_me;
private TextView v_table_redpoint;
private View v_table_redpoint_me;
String TAG = "GooglePay";
@@ -153,9 +143,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
private boolean isWebClose = false;
public static boolean isTabClose = false;
private boolean isFirstOpen = true;
private UserBean bean = null;
//判断融云是否初始化成功,不成功在消息列表时重新请求
private boolean isInitRongIM = false;
private int messageNumber = 0, numberMe = 1;
@Override
protected int getLayoutId() {
@@ -242,6 +230,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
@Override
protected void main() {
ConversationIMListManager.get(this);
//谷歌支付
GoogleBillingUtil.setIsAutoAcknowledgePurchase(true);//设置自动确认购买
googleBillingUtil = GoogleBillingUtil.getInstance()
@@ -250,7 +239,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
rt_main_tab = (RelativeLayout) findViewById(R.id.rt_main_tab);
v_table_redpoint = (View) findViewById(R.id.v_table_redpoint);
v_table_redpoint = findViewById(R.id.v_table_redpoint);
v_table_redpoint_me = (View) findViewById(R.id.v_table_redpoint_me);
Display mDisplay = getWindowManager().getDefaultDisplay();
@@ -341,171 +330,19 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
}
checkVersion();
loginIM();
// ImPushUtil.getInstance().resumePush();
CommonAppConfig.getInstance().setLaunched(true);
mFristLoad = true;
ConfigBean configBean = CommonAppConfig.getInstance().getConfig();
mUrlCsd = configBean.getCustomerServerUrl();
getD();
init();
initTXIM();
mViewPager.setCurrentItem(0);
mTabButtonGroup.setCurPosition(0);
isInstructor();
//获取系统消息
if (v_table_redpoint.getVisibility() == View.GONE) {
getSystemMessages();
}
}
/**
* 获取系统消息(有未读数展示红点)
*/
private void getSystemMessages() {
//获取系统消息列表
ImHttpUtil.getImUserInfo("", new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0) {
//获取系统消息列表
List<ImUserBean> listUserBean = JSON.parseArray(Arrays.toString(info), ImUserBean.class);
if (listUserBean != null && listUserBean.size() >= 2) {
//目前就三条消息,需求判断前两条消息是否有未读消息
for (int i = 0; i < listUserBean.size() - 2; i++) {
//消息对象
ImUserBean userBean = listUserBean.get(i);
//未读消息数
String number = userBean.getNum();
//未读消息不为空并且大于0
if (!TextUtils.isEmpty(number) && Integer.parseInt(number) > 0) {
runOnUiThread(() -> changeTablePoint(Integer.parseInt(number)));
}
}
}
}
}
});
}
// private void getChatPoint() {
// RongIMClient.getInstance().getTotalUnreadCount(new RongIMClient.ResultCallback<Integer>() {
//
// @Override
// public void onSuccess(Integer unReadCount) {
// Log.e("ErrorCode", "sss" + unReadCount);
// if (unReadCount > 1) {
// v_table_redpoint.setVisibility(View.VISIBLE);
// } else {
// v_table_redpoint.setVisibility(View.GONE);
// }
// }
//
// @Override
// public void onError(RongIMClient.ErrorCode ErrorCode) {
// Log.e("ErrorCode", "错误" + ErrorCode.msg);
// v_table_redpoint.setVisibility(View.GONE);
// }
// });
// CommonAppConfig appConfig = CommonAppConfig.getInstance();
// UserBean u = appConfig.getUserBean();
// if ("0".equals(u.getFront_task())) {
// v_table_redpoint_me.setVisibility(View.VISIBLE);
// } else {
// v_table_redpoint_me.setVisibility(View.GONE);
// }
// }
//初始化im
private void initRongIM(UserBean bean) {
if (bean == null) {
//初始化融云服务
String[] uidAndToken = SpUtil.getInstance().getMultiStringValue(new String[]{SpUtil.UID, SpUtil.TOKEN});
final String uid = uidAndToken[0];
final String token = uidAndToken[1];
if (!TextUtils.isEmpty(uid) && !TextUtils.isEmpty(token)) {
MainHttpUtil.getBaseInfo(uid, token, new CommonCallback<UserBean>() {
@Override
public void callback(UserBean model) {
if (model != null) {
initRongIM(model);
}
}
});
}
return;
}
Log.i("ryyyy", bean.getToken_rong());
//测试服
// String appKey = "pvxdm17jpd3hr";
//正式服
String appKey = "uwd1c0sxu1p71";
// IMLib 初始化
RongIMClient.init(this, appKey);
// RTCLib 初始化
RCRTCConfig.Builder config = RCRTCConfig.Builder.create();
RCRTCEngine.getInstance().init(getApplicationContext(), RCRTCConfig.Builder.create().enableEncoderTexture(true).build());
RongIMClient.connect(bean.getToken_rong(), new RongIMClient.ConnectCallback() {
@Override
public void onSuccess(String s) {
Log.i("ryyyy", "链接成功");
isReady = true;
RongCoreClient.addConnectionStatusListener(new IRongCoreListener.ConnectionStatusListener() {
@Override
public void onChanged(ConnectionStatus status) {
if (status == KICKED_OFFLINE_BY_OTHER_CLIENT) {
ToastUtil.show("登錄過期,請重新登陸");
RCRTCEngine.getInstance().unInit();
RongIMClient.getInstance().logout();
RongCoreClient.removeConnectionStatusListener(null);
CommonAppConfig.getInstance().clearLoginInfo();
LoginActivity.forward();
}
}
});
CommonAppConfig appConfig = CommonAppConfig.getInstance();
appConfig.getAnchorLevel(bean.getLevelAnchor());
Constants.myUid = bean.getGoodnum();
Constants.myAvatar = bean.getAvatar();
//没有系统消息去查询融云未读消息
if (v_table_redpoint.getVisibility() == View.GONE) {
getChatPoint();
}
isInitRongIM = true;
EventBus.getDefault().postSticky(new RongIMEvent().setInitRongIM(true));
}
@Override
public void onError(RongIMClient.ConnectionErrorCode connectionErrorCode) {
//错误返回34001表示已连接直接获取未读消息否者继续调用连接接口
if (connectionErrorCode.getValue() == 34001) {
//没有系统消息去查询融云未读消息
if (v_table_redpoint.getVisibility() == View.GONE) {
getChatPoint();
}
} else {
initRongIM(null);
}
Log.i("ryyyy", "链接失败" + connectionErrorCode);
}
@Override
public void onDatabaseOpened(RongIMClient.DatabaseOpenStatus databaseOpenStatus) {
}
});
//视频注册
ArrayList<Class<? extends MessageContent>> myMessages = new ArrayList<>();
myMessages.add(SightMessage.class);
RongIMClient.registerMessageType(myMessages);
}
//初始化腾讯im
private void initTXIM() {
@@ -615,15 +452,6 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
} else if (i == R.id.btn_follow) {
//关注
FollowActivity.forward(mContext, CommonAppConfig.getInstance().getUid(), 0);
// } else if (i == R.id.btn_csd) {
// //客服
// WebViewActivity.forward(mContext,mUrlCsd);
// }else if (i == R.id.btn_recharge) {
// //充值
// RouteUtil.forwardMyCoin(mContext);
} else if (i == R.id.btn_msg) {
// ChatActivity.forward(mContext);
} else if (i == R.id.img_trophy) {
MainListActivity.forward(this, 0);
}
@@ -818,31 +646,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
mTabButtonGroup.setCurPosition(Constants.isShowPage);
}
Constants.isShowPage = -1;
//初始化融云服务
String[] uidAndToken = SpUtil.getInstance().getMultiStringValue(new String[]{SpUtil.UID, SpUtil.TOKEN});
final String uid = uidAndToken[0];
final String token = uidAndToken[1];
if (!TextUtils.isEmpty(uid) && !TextUtils.isEmpty(token)) {
MainHttpUtil.getBaseInfo(uid, token, new CommonCallback<UserBean>() {
@Override
public void callback(UserBean model) {
if (model != null) {
bean = model;
initRongIM(model);
}
}
});
} else {
MainHttpUtil.getBaseInfo(CommonAppConfig.getInstance().getUid(), CommonAppConfig.getInstance().getToken(), new CommonCallback<UserBean>() {
@Override
public void callback(UserBean model) {
if (model != null) {
bean = model;
initRongIM(model);
}
}
});
}
}
/**
@@ -994,28 +798,6 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
}
}
//红点(消息中心)
@Subscribe(threadMode = ThreadMode.MAIN)
public void onUpdateFieldEvent(UpdateTablePoint updateTablePoint) {
//判断消息中心红点是否已经展示如果已经展示并且未读消息大于0则不再执行之后的逻辑
if (v_table_redpoint.getVisibility() == View.VISIBLE && updateTablePoint.getPoint() > 0)
return;
if (updateTablePoint.getPoint() > 0) {
v_table_redpoint.setVisibility(View.VISIBLE);
} else {
v_table_redpoint.setVisibility(View.GONE);
}
}
//红点(我的)
@Subscribe(threadMode = ThreadMode.MAIN)
public void onUpdateFieldEvent(UpdateTablePointMe updateTablePointMe) {
if (updateTablePointMe.getPoint() == 0) {
v_table_redpoint_me.setVisibility(View.VISIBLE);
} else {
v_table_redpoint_me.setVisibility(View.GONE);
}
}
//
@Subscribe(threadMode = ThreadMode.MAIN)
@@ -1062,15 +844,11 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
mMainHomeCommunityViewHolder = new MainHomeCommunityViewHolder(mContext, parent, this);//社区
vh = mMainHomeCommunityViewHolder;
} else if (position == 2) {
if (!isInitRongIM) {
initRongIM(bean);
ToastUtil.show("消息列表正在初始化……");
return;
}
if (mChatListViewHolder == null) {
mChatListViewHolder = new ChatListViewHolder(mContext, parent, 1);
}
vh = mChatListViewHolder;
//跳转消息列表
Bundle bundle = new Bundle();
bundle.putInt(PDLiveConversationListActivity.MESSAGENUMBER, messageNumber);
bundle.putInt(PDLiveConversationListActivity.NUMBERME, numberMe);
ConversationIMListManager.get(this).jumpConversationList(bundle);
} else if (position == 3) {
mMeViewHolder = new MainMeViewHolder(mContext, parent);
vh = mMeViewHolder;
@@ -1177,40 +955,6 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
}
}
public void getChatPoint() {
Conversation.ConversationType[] conversationTypes = {Conversation.ConversationType.PRIVATE, Conversation.ConversationType.GROUP};
boolean containBlocked = true;
RongIMClient.getInstance().getUnreadCount(conversationTypes, containBlocked,
new RongIMClient.ResultCallback<Integer>() {
@Override
public void onSuccess(Integer unReadCount) {
runOnUiThread(new Runnable() {
@Override
public void run() {
changeTablePoint(unReadCount);
}
});
}
@Override
public void onError(RongIMClient.ErrorCode ErrorCode) {
runOnUiThread(new Runnable() {
@Override
public void run() {
changeTablePoint(0);
}
});
}
});
}
//未读数
private void changeTablePoint(int tabPoint) {
EventBus.getDefault().post(new UpdateTablePoint(tabPoint));
}
//是否管理员
public void isInstructor() {
@@ -1256,7 +1000,6 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
if (info != null && !"".equals(info[0])) {
List<ChatRemarksBean> remarksList = new ArrayList<>();
Map<String, String> map = JSON.parseObject(info[0], Map.class);
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
map.forEach((key, vlaue) -> {
ChatRemarksBean chatRemarksBean = new ChatRemarksBean();
chatRemarksBean.setUserId(key);
@@ -1274,4 +1017,39 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
}
});
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPDLiveConversationListEvent(PDLiveConversationListEvent event) {
if (event.getPage() == 11) {
finish();
} else {
mViewPager.setCurrentItem(event.getPage());
mTabButtonGroup.setCurPosition(event.getPage());
}
}
//消息中心
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void onMessageIMEvent(MessageIMEvent event) {
messageNumber = event.getNumber();
if (event.getNumber() > 0) {
v_table_redpoint.setVisibility(View.VISIBLE);
v_table_redpoint.setText(event.getNumber() + "");
} else {
v_table_redpoint.setVisibility(View.GONE);
v_table_redpoint.setText("");
}
}
//红点(我的)
@Subscribe(threadMode = ThreadMode.MAIN)
public void onUpdateFieldEvent(UpdateTablePointMe updateTablePointMe) {
numberMe = updateTablePointMe.getPoint();
if (updateTablePointMe.getPoint() == 0) {
v_table_redpoint_me.setVisibility(View.VISIBLE);
} else {
v_table_redpoint_me.setVisibility(View.GONE);
}
}
}

View File

@@ -8,7 +8,9 @@ import android.net.Uri;
import android.os.Build;
import android.os.Handler;
import android.provider.MediaStore;
import androidx.annotation.RequiresApi;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
@@ -60,6 +62,7 @@ import com.yunbao.live.presenter.LiveRoomCheckLivePresenter;
import com.yunbao.live.views.LiveRoomViewHolder;
import com.yunbao.main.dialog.EncourageDialog;
import com.yunbao.main.http.MainHttpUtil;
import com.yunbao.main.manager.imrongcloud.ConversationIMListManager;
import com.yunbao.video.activity.VideoPlayActivity;
import com.yunbao.video.bean.VideoBean;
import com.yunbao.video.utils.VideoStorge;
@@ -93,6 +96,7 @@ public class MyWebViewActivity extends AbsActivity {
private String urlNow = "";
private ProcessImageUtil mImageUtil;
private boolean isUpdataUser = false;
private MyWebViewActivity mContext;
@Override
protected int getLayoutId() {
@@ -101,6 +105,7 @@ public class MyWebViewActivity extends AbsActivity {
@Override
protected void main() {
mContext = this;
urlNow = getIntent().getStringExtra(Constants.URL);
Log.e("bb22", "1121212");
if (!"".endsWith(Constants.myUrl)) {
@@ -289,7 +294,8 @@ public class MyWebViewActivity extends AbsActivity {
@JavascriptInterface
public void androidClickSayHiBack(String uid, String name, String img) {
Constants.firstInto = 0;
SystemMessageActivity.forward(mContext, "-2", uid, name, img);
// SystemMessageActivity.forward(mContext, "-2", uid, name, img);
ConversationIMListManager.get(mContext).jumpConversation(mContext, uid);
}
@JavascriptInterface

View File

@@ -0,0 +1,222 @@
package com.yunbao.main.activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TextView;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.alibaba.fastjson.JSON;
import com.yunbao.common.activity.AbsActivity;
import com.yunbao.common.custom.TabButtonGroup;
import com.yunbao.common.event.MessageIMEvent;
import com.yunbao.common.event.UpdateTablePointMe;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.manager.imrongcloud.MessageIMManager;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.live.bean.ImUserBean;
import com.yunbao.live.http.ImHttpUtil;
import com.yunbao.main.R;
import com.yunbao.main.adapter.SystemMessageAdapter;
import com.yunbao.main.event.PDLiveConversationListEvent;
import com.yunbao.main.manager.imrongcloud.ConversationIMListManager;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import io.rong.imkit.conversationlist.ConversationListFragment;
/**
* pdlive消息中心
*/
public class PDLiveConversationListActivity extends AbsActivity {
//菜单
private TabButtonGroup mTabButtonGroup;
public static String CLASSNAME = "PDLiveConversationListActivity", MESSAGENUMBER = "messageNumber", NUMBERME = "numberMe";
private PDLiveConversationListActivity mContext;
private ConversationListFragment conversationListFragment;
private FrameLayout container;
private long mLastClickBackTime;//上次点击back键的时间
private TextView redPoint;
private View redpointMe;
@Override
protected int getLayoutId() {
return R.layout.activity_conversation_list;
}
@Override
protected void main() {
super.main();
EventBus.getDefault().register(this);
mContext = this;
initView();
initData();
}
/**
* 初始化控件
*/
private void initView() {
//菜单
mTabButtonGroup = findViewById(R.id.tab_group);
container = findViewById(R.id.container);
redPoint = findViewById(R.id.v_table_redpoint);
redpointMe = findViewById(R.id.v_table_redpoint_me);
mTabButtonGroup.setCurPosition(2);
//选中监听
mTabButtonGroup.addTabButtonGroupChangeListener((view, index) -> {
Log.e(CLASSNAME, "onPageSelected:" + index);
if (index != 2) {
//打开主页菜单,关闭消息中心
EventBus.getDefault().post(new PDLiveConversationListEvent().setPage(index));
//防止重新加载多个
startActivity(new Intent(mContext, MainActivity.class));
}
});
}
/**
* 初始化数据
*/
private void initData() {
//获取系统消息列表
ImHttpUtil.getImUserInfo("", new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0) {
container.post(new Runnable() {
@Override
public void run() {
List<ImUserBean> listUserBean = JSON.parseArray(Arrays.toString(info), ImUserBean.class);
addSystemMessagesView(listUserBean);
}
});
}
}
});
//刷新列表内用户信息
ConversationIMListManager.get(mContext).addUserInfoProvider();
//消息中心
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
int messageNumber = bundle.getInt(MESSAGENUMBER, 0);
int numberMe = bundle.getInt(NUMBERME, 1);
onMessageIMEvent(new MessageIMEvent().setNumber(messageNumber));
onUpdateFieldEvent(new UpdateTablePointMe(numberMe));
}
//获取一下系统通知
MessageIMManager.get(this).getSystemMessages();
}
/**
* 添加头部系统消息
*
* @param listUserBean 数据源
*/
private void addSystemMessagesView(List<ImUserBean> listUserBean) {
//倒序展示
Collections.reverse(listUserBean);
//展示会话列表
conversationListFragment = new ConversationListFragment();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container, conversationListFragment);
transaction.commit();
//自定义空数据背景View
conversationListFragment.setEmptyView(com.yunbao.live.R.layout.view_layout_msg);
//初始化系统消息界面
View rootView = LayoutInflater.from(mContext).inflate(R.layout.view_system_message, null, true);
RecyclerView systemMessageList = rootView.findViewById(R.id.system_message_list);
SystemMessageAdapter messageAdapter = new SystemMessageAdapter(mContext);
messageAdapter.addDataAll(listUserBean);
systemMessageList.setHasFixedSize(false);
systemMessageList.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, true));
systemMessageList.setAdapter(messageAdapter);
conversationListFragment.addHeaderView(rootView);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mTabButtonGroup != null) {
mTabButtonGroup.cancelAnim();
}
EventBus.getDefault().unregister(this);
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onRestart() {
super.onRestart();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
public void onBackPressed() {
long curTime = System.currentTimeMillis();
if (curTime - mLastClickBackTime > 2000) {
mLastClickBackTime = curTime;
ToastUtil.show(R.string.main_click_next_exit);
} else {
EventBus.getDefault().post(new PDLiveConversationListEvent().setPage(11));
finish();
}
}
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void onMessageIMEvent(MessageIMEvent event) {
if (redPoint == null) return;
if (event.getNumber() > 0) {
redPoint.setVisibility(View.VISIBLE);
redPoint.setText(String.valueOf(event.getNumber()));
} else {
redPoint.setVisibility(View.GONE);
redPoint.setText("");
}
}
//红点(我的)
@Subscribe(threadMode = ThreadMode.MAIN)
public void onUpdateFieldEvent(UpdateTablePointMe updateTablePointMe) {
if (redpointMe == null) return;
if (updateTablePointMe.getPoint() == 0) {
redpointMe.setVisibility(View.VISIBLE);
} else {
redpointMe.setVisibility(View.GONE);
}
}
}

View File

@@ -23,6 +23,7 @@ import com.adjust.sdk.AdjustEvent;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.DeviceUtils;
import com.blankj.utilcode.util.GsonUtils;
import com.facebook.appevents.AppEventsConstants;
import com.fm.openinstall.OpenInstall;
import com.fm.openinstall.listener.AppInstallAdapter;
@@ -34,10 +35,13 @@ import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.HtmlConfig;
import com.yunbao.common.activity.AbsActivity;
import com.yunbao.common.activity.WebViewActivity;
import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.bean.UserBean;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.interfaces.CommonCallback;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.manager.imrongcloud.RongcloudIMManager;
import com.yunbao.common.utils.DialogUitl;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
@@ -87,6 +91,7 @@ public class RegisterActivity extends AbsActivity {
private WebSettings webSettings;
private LinearLayout yqm_view;
private ArrayList<Country> allCountries = new ArrayList<>();
private RegisterActivity activity;
@Override
protected int getLayoutId() {
@@ -96,6 +101,13 @@ public class RegisterActivity extends AbsActivity {
@Override
protected void main() {
activity = this;
//谷歌
mFirebaseAnalytics.logEvent("FS_complete_2nd_loading", null);
logger.logEvent("FB_complete_2nd_loading");
AdjustEvent adjustEvent = new AdjustEvent("pooqmz");
Adjust.trackEvent(adjustEvent);
// setTitle(WordUtil.getString(R.string.reg_register));
AdjustEvent adjustEvent = new AdjustEvent("pooqmz");
@@ -397,7 +409,7 @@ public class RegisterActivity extends AbsActivity {
mDialog.show();
}
MainHttpUtil.register(edit_invitecode_2.getText().toString().trim(),phoneNum, mPromoCode, mUuidDevice, mCountryCode, pwd, pwd2, code, new HttpCallback() {
MainHttpUtil.register(edit_invitecode_2.getText().toString().trim(), phoneNum, mPromoCode, mUuidDevice, mCountryCode, pwd, pwd2, code, new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0) {
@@ -422,7 +434,6 @@ public class RegisterActivity extends AbsActivity {
params1);
login(phoneNum, pwd, mUuidDevice);
OpenInstall.reportRegister();
} else {
@@ -454,7 +465,7 @@ public class RegisterActivity extends AbsActivity {
if (appData.getData() != null && !appData.getData().equals("")) {
JSONObject data = JSON.parseObject(appData.getData());
mPromoCode = data.getString("admin_id") + "";
if(!mPromoCode.equals("")) {
if (!mPromoCode.equals("")) {
yqm_view.setVisibility(View.GONE);
}
Log.d("OpenInstall", "appData.getData()1111= " + mPromoCode);
@@ -477,8 +488,11 @@ public class RegisterActivity extends AbsActivity {
CommonAppConfig.getInstance().setLoginInfo(uid, token, true);
getBaseUserInfo();
//友盟统计登录
// MobclickAgent.onProfileSignIn(Constants.MOB_PHONE, uid);
//设置登录信息
IMLoginModel model = GsonUtils.fromJson(info[0], IMLoginModel.class);
IMLoginManager.get(activity).setupLoginUser(model);
//融云连接服务器
RongcloudIMManager.connectIM(activity);
} else {
ToastUtil.show(msg);
}

View File

@@ -0,0 +1,150 @@
package com.yunbao.main.adapter;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.adjust.sdk.Adjust;
import com.adjust.sdk.AdjustEvent;
import com.alibaba.fastjson.JSON;
import com.facebook.appevents.AppEventsLogger;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.yunbao.common.activity.WebViewActivity;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.manager.imrongcloud.MessageIMManager;
import com.yunbao.live.activity.SystemMessageActivity;
import com.yunbao.live.bean.ImUserBean;
import com.yunbao.main.R;
import com.yunbao.main.views.SystemMessageViewHolder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* 系统消息适配器
*/
public class SystemMessageAdapter extends RecyclerView.Adapter {
private List<ImUserBean> listUserBean = new ArrayList<>();
protected Activity mContext;
protected LayoutInflater mInflater;
public SystemMessageAdapter(Activity mContext) {
this.mContext = mContext;
mInflater = LayoutInflater.from(mContext);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//view_system_message_item.xml
return new SystemMessageViewHolder(mInflater.inflate(R.layout.view_system_message_item, parent, false));
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
ImUserBean model = listUserBean.get(position);
SystemMessageViewHolder messageViewHolder = (SystemMessageViewHolder) holder;
ImgLoader.displayWithError(mContext, model.getImage(), messageViewHolder.avatarImage, com.yunbao.live.R.mipmap.chat_head_mo);
if (position == 2) {
messageViewHolder.userMsg.setText(TextUtils.isEmpty(model.getLink()) ? mContext.getResources().getString(R.string.chat_like) : model.getLink());
} else {
if (position == 1) {
messageViewHolder.userMsg.setText(TextUtils.isEmpty(model.getContent()) ? mContext.getResources().getString(R.string.chat_action_no) : model.getContent());
} else {
messageViewHolder.userMsg.setText(TextUtils.isEmpty(model.getContent()) ? "" : model.getContent());
}
}
messageViewHolder.userName.setText(model.getTitle());
messageViewHolder.lastTime.setText(model.getLastDate());
String number = model.getNum();
if (!TextUtils.isEmpty(number) && !TextUtils.equals(number, "0")) {
messageViewHolder.redPoint.setVisibility(View.VISIBLE);
messageViewHolder.redPoint.setText(number);
} else {
messageViewHolder.redPoint.setVisibility(View.GONE);
}
//系统消息的跳转
messageViewHolder.setViewHolderOnClickListener((view, model1) -> {
//获取一下系统通知
MessageIMManager.get(mContext).getSystemMessages(new MessageIMManager.SystemMessagesHttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code==0){
List<ImUserBean> listUserBean = JSON.parseArray(Arrays.toString(info), ImUserBean.class);
addSystemMessagesView(listUserBean);
}
}
});
if (model1.getContent().equals("在線客服")) {
FirebaseAnalytics.getInstance(mContext).logEvent("FS_customer_service", null);
AppEventsLogger.newLogger(mContext).logEvent("FB_customer_service");
AdjustEvent adjustEvent1 = new AdjustEvent("ww5z2p");
Adjust.trackEvent(adjustEvent1);
} else if (model1.getContent().equals("新手指導員")) {
FirebaseAnalytics.getInstance(mContext).logEvent("FS_guide", null);
AppEventsLogger.newLogger(mContext).logEvent("FB_guide", null);
AdjustEvent adjustEvent1 = new AdjustEvent("m0nfpn");
Adjust.trackEvent(adjustEvent1);
}
if (!TextUtils.isEmpty(model1.getLink())) {
mContext.startActivity(new Intent(mContext, WebViewActivity.class).putExtra("url", model1.getLink()));
} else if ("1".equals(model1.getType()) || "2".equals(model1.getType())) {//系统消息,互动消息,猜你喜欢
forward(mContext, model1.getType(), "", model1.getTitle(), "");
} else if ("3".equals(model1.getType())) {
if (model1.getLink() != null && !"".equals(model1.getLink())) {
WebViewActivity.forward(mContext, model1.getLink());
} else {
forward(mContext, model1.getType(), "", model1.getTitle(), "");
}
}
}, model);
}
@Override
public int getItemCount() {
return listUserBean.size();
}
/**
* 添加数据源
*
* @param mListUserBean 数据源
*/
public void addDataAll(List<ImUserBean> mListUserBean) {
listUserBean.clear();
listUserBean.addAll(mListUserBean);
notifyDataSetChanged();
}
private void forward(Context context, String type, String uid, String title, String headImg) {
context.startActivity(new Intent(context, SystemMessageActivity.class)
.putExtra("type", type)
.putExtra("uid", uid)
.putExtra("title", title)
.putExtra("headImg", headImg));
}
/**
* 添加头部系统消息
*
* @param mlistUserBean 数据源
*/
private void addSystemMessagesView(List<ImUserBean> mlistUserBean) {
//倒序展示
Collections.reverse(mlistUserBean);
listUserBean.clear();
listUserBean.addAll(mlistUserBean);
notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,19 @@
package com.yunbao.main.event;
import com.yunbao.common.bean.BaseModel;
/**
* 消息中心的信息通知
*/
public class PDLiveConversationListEvent extends BaseModel {
private int page = 0;//page=11时退出应用
public int getPage() {
return page;
}
public PDLiveConversationListEvent setPage(int page) {
this.page = page;
return this;
}
}

View File

@@ -0,0 +1,128 @@
package com.yunbao.main.manager.imrongcloud;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.GsonUtils;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.live.activity.PDLIiveChatActivity;
import com.yunbao.live.activity.PDLiveConversationActivity;
import com.yunbao.live.bean.SearchUserBean;
import com.yunbao.main.activity.PDLiveConversationListActivity;
import com.yunbao.main.utils.PDLiveCustomConversationProvider;
import com.yunbao.main.utils.PDLiveMessageProcessor;
import io.rong.imkit.config.RongConfigCenter;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.conversationlist.provider.PrivateConversationProvider;
import io.rong.imkit.userinfo.RongUserInfoManager;
import io.rong.imkit.utils.RouteUtils;
import io.rong.imkit.widget.adapter.ProviderManager;
import io.rong.imlib.model.UserInfo;
/**
* 会话列表管理
*/
public class ConversationIMListManager {
private static ConversationIMListManager manager;
private Context mContext;
private ConversationIMListManager(Context context) {
mContext = context;
//将自定义会话列表 Activity 注册到 IMKit SDK
RouteUtils.registerActivity(RouteUtils.RongActivityType.ConversationListActivity, PDLiveConversationListActivity.class);
//将自定义会话列表 Activity 注册到 IMKit SDK
RouteUtils.registerActivity(RouteUtils.RongActivityType.ConversationListActivity, PDLIiveChatActivity.class);
RongConfigCenter.conversationListConfig().setDataProcessor(new PDLiveMessageProcessor());
//获取会话模板管理器
ProviderManager<BaseUiConversation> providerManager = RongConfigCenter.conversationListConfig().getProviderManager();
//用自定义模板替换 SDK 原有模板
providerManager.replaceProvider(PrivateConversationProvider.class, new PDLiveCustomConversationProvider());
}
/**
* 获取单利
*/
public static ConversationIMListManager get(Context context) {
if (null == manager) {
manager = new ConversationIMListManager(context);
}
return manager;
}
/**
* 跳转消息列表
*
* @param title 会话列表页面标题,如果传空,会显示为默认标题 “会话列表”。
*/
public void jumpConversationList(String title) {
RouteUtils.routeToConversationListActivity(mContext, title);
}
/**
* 跳转消息列表
*
* @param extras 自定义携带数据
*/
public void jumpConversationList(Bundle extras) {
Intent intent = new Intent(mContext, PDLiveConversationListActivity.class);
intent.putExtras(extras);
mContext.startActivity(intent);
}
/**
* 跳转消息列表
*
* @param extras 自定义携带数据
*/
public void jumpPDLIiveChat(Bundle extras) {
RouteUtils.registerActivity(RouteUtils.RongActivityType.ConversationActivity, PDLIiveChatActivity.class);
Intent intent = new Intent(mContext, PDLIiveChatActivity.class);
intent.putExtras(extras);
mContext.startActivity(intent);
}
/**
* 跳转会话页面
* @param context 上下文
* @param targetId 用户id
*/
public void jumpConversation(Activity context,String targetId) {
RouteUtils.registerActivity(RouteUtils.RongActivityType.ConversationActivity, PDLiveConversationActivity.class);
Intent intent = new Intent(context, PDLiveConversationActivity.class);
intent.putExtra(RouteUtils.TARGET_ID, targetId);
context.startActivity(intent);
}
/**
* 刷新用户信息(异步)
*/
public void addUserInfoProvider() {
RongUserInfoManager.getInstance().setUserInfoProvider(userId -> {
CommonHttpUtil.getUserBaseinfo(userId, new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0 && info.length > 0) {
JSONObject obj = JSON.parseObject(info[0]);
SearchUserBean userBean = JSON.toJavaObject(obj, SearchUserBean.class);
UserInfo userInfo = new UserInfo(userId, userBean.getUserNiceName(), Uri.parse(userBean.getAvatar()));
//使用空白字段存储自己服务器用户的所有的信息
userInfo.setExtra(GsonUtils.toJson(userBean));
RongUserInfoManager.getInstance().refreshUserInfoCache(userInfo);
}
}
});
return null;
}, true);
}
}

View File

@@ -0,0 +1,50 @@
package com.yunbao.main.utils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.conversationlist.provider.BaseConversationProvider;
import io.rong.imkit.utils.RouteUtils;
import io.rong.imkit.widget.adapter.IViewProviderListener;
import io.rong.imkit.widget.adapter.ViewHolder;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.UserInfo;
/**
* pdlive自定义会话模板
*/
public class PDLiveCustomConversationProvider extends BaseConversationProvider {
@Override
public boolean isItemViewType(BaseUiConversation item) {
//根据业务需要,判断 item 是该模板需要处理的会话时,返回 true, 否则返回 false
//此处以自定义私聊会话模板为例
Log.e("PDLiveCustomConversat","-+++++++++++++++++++++++++++++++++");
return item.mCore.getConversationType().equals(Conversation.ConversationType.PRIVATE);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//根据业务需要,自定义处理
Log.e("PDLiveCustomConversat","------------------------------------------"+viewType);
// View view = LayoutInflater.from(parent.getContext()).inflate(layout.rc_conversationlist_item, parent, false);
return super.onCreateViewHolder(parent, viewType);
}
@Override
public void bindViewHolder(ViewHolder holder, BaseUiConversation uiConversation, int position, List<BaseUiConversation> list, IViewProviderListener<BaseUiConversation> listener) {
for (BaseUiConversation conversation:list){
// UserInfo userInfo = conversation.mCore.getLatestMessage().getUserInfo();
//// Log.e("PDLiveCustomConversat","getName****************************"+userInfo.getName());
// Log.e("PDLiveCustomConversat","getPortraitUri****************************"+userInfo.getPortraitUri().toString());
}
//根据业务需要,自定义处理
Log.e("PDLiveCustomConversat","****************************");
super.bindViewHolder(holder, uiConversation, position, list, listener);
}
}

View File

@@ -0,0 +1,20 @@
package com.yunbao.main.utils;
import io.rong.imkit.config.BaseDataProcessor;
import io.rong.imlib.model.Conversation;
/**
* 融云消息筛选
*/
public class PDLiveMessageProcessor extends BaseDataProcessor<Conversation> {
/**
* 自定义会话列表页面支持的会话类型,此处设置为仅支持单聊
*/
@Override
public Conversation.ConversationType[] supportedTypes() {
Conversation.ConversationType[] types = {Conversation.ConversationType.PRIVATE};
return types;
}
}

View File

@@ -408,7 +408,6 @@ public class MainHomeLiveViewHolder extends AbsMainHomeChildViewHolder implement
watchLive(bean, Constants.LIVE_HOME, position);
} else if (bean.getIs_week() != null && bean.getIs_week().equals("1")) {
String url = CommonAppConfig.HOST + bean.getUrl() + "?a=1";
// WeekWebViewActivity.forward(mContext, url, true);
LiveHttpUtil.getLiveInfo(bean.getUid(), new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
@@ -443,21 +442,12 @@ public class MainHomeLiveViewHolder extends AbsMainHomeChildViewHolder implement
intoIndex = 1;
RouteUtil.forwardUserHome(mContext, bean.getUid(), 0);
}
// watchLive(bean, Constants.LIVE_HOME, position);
}
public void changeLiveList(int position) {
if (mAdapter != null) {
// new_data.remove(position);
// mAdapter.notifyItemChanged(position);
}
}
@Override
public void loadData() {
// if (mRefreshView != null) {
// mRefreshView.initData();
// }
}
@Override
@@ -485,11 +475,5 @@ public class MainHomeLiveViewHolder extends AbsMainHomeChildViewHolder implement
@Override
public void onResume() {
super.onResume();
// if(intoIndex == 1){
// intoIndex = 0;
// if (mRefreshView != null) {
// mRefreshView.initData();
// }
// }
}
}

View File

@@ -0,0 +1,47 @@
package com.yunbao.main.views;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.makeramen.roundedimageview.RoundedImageView;
import com.yunbao.live.bean.ImUserBean;
import com.yunbao.main.R;
/**
* 系统消息界面
*/
public class SystemMessageViewHolder extends RecyclerView.ViewHolder {
public RoundedImageView avatarImage;
public TextView userName, userMsg, lastTime, redPoint;
private ViewHolderOnClickListener listener;
private ImUserBean model;
public SystemMessageViewHolder(@NonNull View itemView) {
super(itemView);
avatarImage = itemView.findViewById(R.id.avatar);
userName = itemView.findViewById(R.id.name);
userMsg = itemView.findViewById(R.id.msg);
lastTime = itemView.findViewById(R.id.time);
redPoint = itemView.findViewById(R.id.red_point);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (null != listener) {
listener.onClick(v, model);
}
}
});
}
public interface ViewHolderOnClickListener {
void onClick(View view, ImUserBean model);
}
public void setViewHolderOnClickListener(ViewHolderOnClickListener listener, ImUserBean model) {
this.listener = listener;
this.model = model;
}
}

View File

@@ -0,0 +1,171 @@
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical"
android:paddingTop="20dp">
<TextView
android:id="@+id/top_noback"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="18dp"
android:text="@string/message"
android:textColor="#ff161616"
android:textSize="24sp"
android:textStyle="bold" />
<!-- <androidx.recyclerview.widget.RecyclerView-->
<!-- android:id="@+id/system_message_list"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="198dp" />-->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 此容器用于动态放置 fragment-->
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<RelativeLayout
android:id="@+id/rt_main_tab"
android:layout_width="match_parent"
android:layout_height="71dp"
android:layout_alignParentBottom="true">
<ImageView
android:id="@+id/img_main_bg_tab"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:background="@mipmap/home_bar_bg" />
<RelativeLayout
android:id="@+id/bottom"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_alignParentBottom="true">
<com.yunbao.common.custom.TabButtonGroup
android:id="@+id/tab_group"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<com.yunbao.common.custom.TabButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:tbn_checked="true"
app:tbn_icon_array_id="@array/main_tab_home"
app:tbn_icon_size="28dp"
app:tbn_text_color_checked="@color/colorAccent"
app:tbn_text_color_unchecked="@color/gray1"
app:tbn_text_size="11sp" />
<com.yunbao.common.custom.TabButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginRight="60dp"
android:layout_weight="1"
app:tbn_icon_array_id="@array/main_tab_video"
app:tbn_icon_size="28dp"
app:tbn_text_color_checked="@color/colorAccent"
app:tbn_text_color_unchecked="@color/gray1"
app:tbn_text_size="11sp" />
<com.yunbao.common.custom.TabButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:tbn_icon_array_id="@array/main_tab_list"
app:tbn_icon_size="28dp"
app:tbn_text_color_checked="@color/colorAccent"
app:tbn_text_color_unchecked="@color/gray1"
app:tbn_text_size="11sp" />
<com.yunbao.common.custom.TabButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:tbn_icon_array_id="@array/main_tab_chat"
app:tbn_icon_size="28dp"
app:tbn_text_color_checked="@color/colorAccent"
app:tbn_text_color_unchecked="@color/gray1"
app:tbn_text_size="11sp" />
</com.yunbao.common.custom.TabButtonGroup>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="right">
<TextView
android:id="@+id/v_table_redpoint"
android:layout_width="15dp"
android:layout_height="15dp"
android:textColor="@color/white"
android:textSize="8dp"
android:gravity="center"
android:background="@drawable/background_ff5075"
android:visibility="gone" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="right">
<View
android:id="@+id/v_table_redpoint_me"
android:layout_width="12dp"
android:layout_height="12dp"
android:layout_marginRight="18dp"
android:background="@drawable/background_ff5075"
android:visibility="gone" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<ImageView
android:id="@+id/btn_start"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:onClick="mainClick"
android:src="@mipmap/icon_main_start" />
</RelativeLayout>
</RelativeLayout>
</LinearLayout>

View File

@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:background="@color/rc_background_main_color"
android:orientation="vertical">
<io.rong.imkit.widget.refresh.SmartRefreshLayout
android:id="@+id/rc_refresh"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/rc_extension"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rc_message_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:overScrollMode="never" />
</io.rong.imkit.widget.refresh.SmartRefreshLayout>
<TextView
android:id="@+id/rc_new_message_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:layout_marginBottom="4dp"
android:background="@drawable/rc_conversation_newmsg"
android:gravity="center"
android:paddingBottom="5dp"
android:textColor="#ffffff"
android:textSize="12dp"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="@id/rc_refresh"
app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:id="@+id/rc_unread_message_count"
android:layout_width="wrap_content"
android:layout_height="@dimen/rc_unread_height"
android:layout_marginStart="3dp"
android:layout_marginTop="@dimen/rc_margin_size_30"
android:layout_marginEnd="5dp"
android:background="@drawable/rc_selector_item_unread"
android:drawableStart="@drawable/rc_unread_msg_arrow"
android:drawablePadding="10dp"
android:gravity="center|left"
android:maxLines="1"
android:minWidth="120dp"
android:paddingStart="15dp"
android:paddingEnd="7dp"
android:textColor="@color/rc_text_main_color"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="100条未读消息" />
<TextView
android:id="@+id/rc_mention_message_count"
android:layout_width="wrap_content"
android:layout_height="@dimen/rc_unread_height"
android:layout_marginStart="3dp"
android:layout_marginTop="@dimen/rc_margin_size_80"
android:layout_marginEnd="5dp"
android:background="@drawable/rc_selector_item_unread"
android:drawableStart="@drawable/rc_unread_msg_arrow"
android:drawablePadding="10dp"
android:gravity="center|left"
android:maxLines="1"
android:minWidth="120dp"
android:paddingStart="15dp"
android:paddingEnd="7dp"
android:text="@string/rc_mention_messages"
android:textColor="@color/rc_text_main_color"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="100条@消息" />
<io.rong.imkit.conversation.extension.RongExtension
android:id="@+id/rc_extension"
android:layout_width="0dp"
app:RCStyle="CE"
android:layout_height="wrap_content"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/rc_refresh" />
<LinearLayout
android:id="@+id/rc_notification_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#660F0F0F"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,134 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/rc_conversation_item"
android:layout_width="match_parent"
android:layout_height="@dimen/rc_conversation_item_height">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/rc_conversation_portrait_rl"
android:layout_width="54dp"
android:layout_height="54dp"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/rc_conversation_portrait"
android:layout_width="54dp"
android:layout_height="54dp"
android:scaleType="centerCrop" />
<RelativeLayout
android:id="@+id/rc_conversation_unread"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true">
<ImageView
android:id="@+id/rc_conversation_unread_bg"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_centerInParent="true"
app:srcCompat="@drawable/rc_unread_count_bg_normal" />
<TextView
android:id="@+id/rc_conversation_unread_count"
style="@style/TextStyle.Alignment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="15"
android:textColor="@color/rc_white_color"
android:textSize="@dimen/rc_font_auxiliary_size" />
</RelativeLayout>
</RelativeLayout>
<TextView
android:id="@+id/rc_conversation_title"
style="@style/TextStyle.Alignment"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/rc_margin_size_12"
android:layout_marginTop="@dimen/rc_margin_size_16"
android:layout_marginEnd="@dimen/rc_margin_size_12"
android:ellipsize="end"
android:singleLine="true"
android:text="张三"
android:textColor="@color/rc_text_main_color"
android:textSize="@dimen/rc_font_secondary_size"
app:layout_constraintEnd_toStartOf="@+id/rc_conversation_date"
app:layout_constraintStart_toEndOf="@+id/rc_conversation_portrait_rl"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/rc_conversation_content"
style="@style/TextStyle.Alignment"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="4dp"
android:layout_marginEnd="60dp"
android:ellipsize="end"
android:singleLine="true"
android:text="你好,朋友!"
android:textColor="@color/rc_secondary_color"
android:textSize="@dimen/rc_font_text_third_size"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/rc_conversation_portrait_rl"
app:layout_constraintTop_toBottomOf="@+id/rc_conversation_title" />
<TextView
android:id="@+id/rc_conversation_date"
style="@style/TextStyle.Alignment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/rc_margin_size_16"
android:layout_marginEnd="@dimen/rc_margin_size_12"
android:text="3 月 22 日"
android:textColor="@color/rc_auxiliary_color"
android:textSize="@dimen/rc_font_nav_or_date_size"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/rc_conversation_no_disturb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/rc_margin_size_12"
android:layout_marginBottom="@dimen/rc_margin_size_12"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:srcCompat="@drawable/rc_no_disturb" />
<ImageView
android:id="@+id/rc_conversation_read_receipt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/rc_margin_size_2"
android:layout_marginBottom="@dimen/rc_margin_size_12"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/rc_conversation_no_disturb"
app:layout_goneMarginRight="@dimen/rc_margin_size_12"
app:srcCompat="@drawable/rc_read_receipt" />
<View
android:layout_width="wrap_content"
android:layout_height="0.5dp"
android:layout_marginTop="71.5dp"
android:background="@color/rc_divider_color"
app:layout_constraintStart_toStartOf="@id/rc_conversation_title"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,115 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:visibility="gone"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/input_panel_add_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginEnd="4dp"
android:src="@drawable/rc_ext_input_panel_add"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/input_panel_voice_toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginBottom="6.5dp"
android:src="@drawable/rc_ext_toggle_voice"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/input_panel_add_btn"
android:orientation="horizontal">
<EditText
android:id="@+id/edit_btn"
style="@style/EditTextStyle.Alignment"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="6.5dp"
android:layout_marginEnd="5dp"
android:layout_marginBottom="6.5dp"
android:background="@drawable/rc_ext_panel_editbox_background"
android:maxLines="4"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/input_panel_emoji_btn"
app:layout_constraintStart_toEndOf="@+id/input_panel_voice_toggle"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/press_to_speech_btn"
style="@style/TextStyle.Alignment"
android:layout_width="wrap_content"
android:layout_height="@dimen/rc_ext_input_panel_editbox_height"
android:layout_marginStart="8dp"
android:layout_marginTop="6.5dp"
android:layout_marginEnd="5dp"
android:layout_marginBottom="6.5dp"
android:background="@drawable/rc_ext_voice_idle_button"
android:gravity="center"
android:text="@string/rc_voice_press_to_input"
android:textColor="@color/rc_text_main_color"
android:textSize="@dimen/rc_font_nav_or_date_size"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/input_panel_emoji_btn"
app:layout_constraintStart_toEndOf="@+id/input_panel_voice_toggle"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/input_panel_emoji_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6.5dp"
android:layout_marginEnd="5dp"
android:layout_marginBottom="6.5dp"
android:src="@drawable/rc_ext_input_panel_emoji"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/input_panel_add_or_send"
app:layout_constraintTop_toTopOf="parent" />
<RelativeLayout
android:id="@+id/input_panel_add_or_send"
android:layout_width="41dp"
android:layout_height="wrap_content"
android:layout_marginTop="6.5dp"
android:layout_marginEnd="5dp"
android:layout_marginBottom="6.5dp"
android:layout_toEndOf="@id/edit_btn"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<Button
android:id="@+id/input_panel_send_btn"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@mipmap/btn_sand"
android:textSize="@dimen/rc_font_text_third_size"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</RelativeLayout>
</LinearLayout>
</RelativeLayout>

View File

@@ -105,11 +105,14 @@
android:layout_weight="1"
android:gravity="right">
<View
<TextView
android:id="@+id/v_table_redpoint"
android:layout_width="12dp"
android:layout_height="12dp"
android:layout_width="15dp"
android:layout_height="15dp"
android:background="@drawable/background_ff5075"
android:gravity="center"
android:textColor="@color/white"
android:textSize="8dp"
android:visibility="gone" />
</LinearLayout>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/system_message_list"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

View File

@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="72dp">
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/avatar"
android:layout_width="54dp"
android:layout_height="54dp"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:scaleType="centerCrop"
app:riv_oval="true" />
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="9dp"
android:layout_toRightOf="@id/avatar"
android:ellipsize="end"
android:singleLine="true"
android:text="dasdas"
android:textColor="@color/textColor"
android:textSize="16sp" />
<TextView
android:id="@+id/msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/name"
android:layout_marginTop="2dp"
android:layout_marginRight="80dp"
android:layout_toRightOf="@id/avatar"
android:ellipsize="end"
android:singleLine="true"
android:text="dasd "
android:textColor="@color/gray3"
android:textSize="14sp" />
<TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/name"
android:layout_alignParentRight="true"
android:layout_marginTop="3dp"
android:layout_marginRight="15dp"
android:text="dasdas "
android:textColor="@color/gray3"
android:textSize="12sp" />
<TextView
android:id="@+id/red_point"
android:layout_width="20dp"
android:layout_height="15dp"
android:layout_below="@id/time"
android:layout_alignParentRight="true"
android:layout_marginTop="5dp"
android:layout_marginRight="10dp"
android:background="@drawable/background_ff50715"
android:gravity="center"
android:includeFontPadding="false"
android:minWidth="14dp"
android:paddingLeft="3dp"
android:paddingRight="3dp"
android:textColor="#fff"
android:textSize="12sp"
android:visibility="invisible" />
</RelativeLayout>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 取消界面转场动画使用-->
  <style name="noAnimationStyle" parent="AppTheme">
    <item name="android:windowAnimationStyle">@style/Animation</item>
  </style>
  <style name="Animation">
    <item name="android:activityOpenEnterAnimation">@null</item>
    <item name="android:activityOpenExitAnimation">@null</item>
    <item name="android:activityCloseEnterAnimation">@null</item>
    <item name="android:activityCloseExitAnimation">@null</item>
    <item name="android:taskOpenEnterAnimation">@null</item>
    <item name="android:taskOpenExitAnimation">@null</item>
    <item name="android:taskCloseEnterAnimation">@null</item>
    <item name="android:taskCloseExitAnimation">@null</item>
    <item name="android:taskToFrontEnterAnimation">@null</item>
    <item name="android:taskToFrontExitAnimation">@null</item>
    <item name="android:taskToBackEnterAnimation">@null</item>
    <item name="android:taskToBackExitAnimation">@null</item>
  </style>
</resources>