package com.lqr.wechat.activity;
import android.Manifest;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.lqr.emoji.EmoticonPickerView;
import com.lqr.emoji.EmotionKeyboard;
import com.lqr.emoji.IEmoticonSelectedListener;
import com.lqr.imagepicker.ImagePicker;
import com.lqr.imagepicker.bean.ImageItem;
import com.lqr.imagepicker.ui.ImagePreviewActivity;
import com.lqr.recyclerview.LQRRecyclerView;
import com.lqr.videorecordview.LQRVideoRecordView;
import com.lqr.wechat.R;
import com.lqr.wechat.adapter.FuncPagerAdapter;
import com.lqr.wechat.adapter.SessionAdapter;
import com.lqr.wechat.factory.ThreadPoolFactory;
import com.lqr.wechat.fragment.BaseFragment;
import com.lqr.wechat.fragment.Func1Fragment;
import com.lqr.wechat.fragment.Func2Fragment;
import com.lqr.wechat.model.Contact;
import com.lqr.wechat.nimsdk.NimHistorySDK;
import com.lqr.wechat.nimsdk.NimMessageSDK;
import com.lqr.wechat.nimsdk.NimTeamSDK;
import com.lqr.wechat.nimsdk.custom.StickerAttachment;
import com.lqr.wechat.nimsdk.helper.SendImageHelper;
import com.lqr.wechat.utils.KeyBoardUtils;
import com.lqr.wechat.utils.LogUtils;
import com.lqr.wechat.utils.UIUtils;
import com.lqr.wechat.view.DotView;
import com.lqr.wechat.view.LQRRecordProgress;
import com.netease.nimlib.sdk.Observer;
import com.netease.nimlib.sdk.RequestCallback;
import com.netease.nimlib.sdk.RequestCallbackWrapper;
import com.netease.nimlib.sdk.ResponseCode;
import com.netease.nimlib.sdk.media.record.AudioRecorder;
import com.netease.nimlib.sdk.media.record.IAudioRecordCallback;
import com.netease.nimlib.sdk.media.record.RecordType;
import com.netease.nimlib.sdk.msg.MessageBuilder;
import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
import com.netease.nimlib.sdk.msg.model.AttachmentProgress;
import com.netease.nimlib.sdk.msg.model.IMMessage;
import com.netease.nimlib.sdk.msg.model.QueryDirectionEnum;
import com.netease.nimlib.sdk.team.model.Team;
import com.netease.nimlib.sdk.team.model.TeamMember;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import butterknife.OnTouch;
import cn.bingoogolapple.refreshlayout.BGANormalRefreshViewHolder;
import cn.bingoogolapple.refreshlayout.BGARefreshLayout;
import cn.bingoogolapple.refreshlayout.BGARefreshViewHolder;
import kr.co.namee.permissiongen.PermissionFail;
import kr.co.namee.permissiongen.PermissionGen;
import kr.co.namee.permissiongen.PermissionSuccess;
/**
* @创建者 CSDN_LQR
* @描述 聊天界面
* <p>
* 界面加载时将从本地获取历史消息,下拉加载 时优先从本地获取,从服务器拉取历史消息次之
*/
public class SessionActivity extends BaseActivity implements IEmoticonSelectedListener, BGARefreshLayout.BGARefreshLayoutDelegate, IAudioRecordCallback, LQRVideoRecordView.OnRecordStausChangeListener {
public static final int IMAGE_PICKER = 100;
public static final String SESSION_ACCOUNT = "account";
public static final String SESSION_TYPE = "type";
//当前会话信息
public String mSessionId;//单聊的联系人的id,群聊是群id
private Contact mContact;
private Team mTeam;
public SessionTypeEnum mSessionType = SessionTypeEnum.P2P;
//消息列表及监听
private Observer<IMMessage> mMsgStatusObserver;
private Observer<List<IMMessage>> mIncomingMessageObserver;
private Observer<AttachmentProgress> mAttachmentProgressObserver;
private List<IMMessage> mMessages = new ArrayList<>();
private SessionAdapter mAdapter;
private Runnable mCvMessageScrollToBottomTask = new Runnable() {
@Override
public void run() {
mCvMessage.moveToPosition(mMessages.size() - 1);
}
};
//获取历史消息
private IMMessage mAnchor;
private QueryDirectionEnum mDirection = QueryDirectionEnum.QUERY_OLD;//查询以前的消息
private static final int LOAD_MESSAGE_COUNT = 20;
private boolean mFirstLoad = true;
private boolean mRemote = false;
//底部控件
private FuncPagerAdapter mBottomFucAdapter;
private List<BaseFragment> mFragments;
private EmotionKeyboard mEmotionKeyboard;
//录音
private AudioRecorder mAudioRecorderHelper;
private boolean mStartRecord;
private boolean mCanclled;
private boolean mTouched;
@InjectView(R.id.toolbar)
Toolbar mToolbar;
@InjectView(R.id.refreshLayout)
BGARefreshLayout mRefreshLayout;
@InjectView(R.id.cvMessage)
LQRRecyclerView mCvMessage;
@InjectView(R.id.llButtomFunc)
LinearLayout mLlButtomFunc;
@InjectView(R.id.ivAudio)
ImageView mIvAudio;
@InjectView(R.id.etContent)
EditText mEtContent;
@InjectView(R.id.btnAudio)
Button mBtnAudio;
@InjectView(R.id.ivEmo)
ImageView mIvEmo;
@InjectView(R.id.ivAdd)
ImageView mIvAdd;
@InjectView(R.id.btnSend)
Button mBtnSend;
@InjectView(R.id.flBottom)
FrameLayout mFlBottom;
@InjectView(R.id.epv)
EmoticonPickerView mEpv;
@InjectView(R.id.vpFunc)
ViewPager mVpFunc;
@InjectView(R.id.dv)
DotView mDv;
@InjectView(R.id.flPlayAudio)
FrameLayout mFlPlayAudio;
@InjectView(R.id.cTimer)
Chronometer mCTimer;
@InjectView(R.id.tvTimerTip)
TextView mTvTimerTip;
@InjectView(R.id.llPlayVideo)
LinearLayout mLlPlayVideo;
@InjectView(R.id.vrvVideo)
LQRVideoRecordView mVrvVideo;
@InjectView(R.id.tvTipOne)
TextView mTvTipOne;
@InjectView(R.id.tvTipTwo)
TextView mTvTipTwo;
@InjectView(R.id.rp)
LQRRecordProgress mRp;
@InjectView(R.id.btnVideo)
Button mBtnVideo;
private Observer<TeamMember> memberRemoveObserver;
private Observer<List<TeamMember>> memberUpdateObserver;
@OnTouch(R.id.cvMessage)
public boolean cvTouch() {
if (mEtContent.hasFocus()) {
closeKeyBoardAndLoseFocus();
return true;
} else if (mFlBottom.getVisibility() == View.VISIBLE) {
mFlBottom.setVisibility(View.GONE);
closeKeyBoardAndLoseFocus();
return true;
}
return false;
}
@OnClick({R.id.ivAudio, R.id.btnSend})
public void click(View view) {
switch (view.getId()) {
case R.id.ivAudio:
toggleAudioButtonVisibility();
break;
case R.id.btnSend:
sendTextMsg();
break;
}
}
@Override
public void init() {
Intent intent = getIntent();
SessionTypeEnum sessionType = (SessionTypeEnum) intent.getSerializableExtra(SESSION_TYPE);
if (sessionType != null) {
mSessionType = sessionType;
}
mSessionId = intent.getStringExtra(SESSION_ACCOUNT);
if (TextUtils.isEmpty(mSessionId)) {
interrupt();
return;
}
registerAllObserver();
requestPermission();
}
@Override
public void initView() {
setContentView(R.layout.activity_session);
ButterKnife.inject(this);
initToolbar();
initEmotionPickerView();
initEmotionKeyboard();
init
没有合适的资源?快使用搜索试试~ 我知道了~
基于融云SDK,使用了Rxjava+Retrofit+MVP+Glide等新技术开发,代码结构上可以完全不一样的新版高仿微信
共555个文件
png:178个
xml:164个
java:154个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 160 浏览量
2023-11-21
11:35:39
上传
评论
收藏 43.32MB ZIP 举报
温馨提示
本项目高仿微信6.3.31,使用网易云信SDK 3.2.0版本完成主要的聊天功能(单聊、群聊)、好友关系管理、群组管理等功能
资源推荐
资源详情
资源评论
收起资源包目录
基于融云SDK,使用了Rxjava+Retrofit+MVP+Glide等新技术开发,代码结构上可以完全不一样的新版高仿微信 (555个子文件)
emoji_library.aar 1.06MB
app-debug.apk 20.56MB
gradlew.bat 2KB
4.gif 5.37MB
1.gif 3.21MB
2.gif 1.05MB
2.gif 808KB
8.gif 761KB
1.gif 663KB
1.gif 634KB
3.gif 584KB
2.gif 563KB
6.gif 542KB
3.gif 527KB
1.gif 486KB
4.gif 467KB
1.gif 398KB
3.gif 392KB
2.gif 380KB
7.gif 370KB
5.gif 363KB
9.gif 356KB
4.gif 356KB
1.gif 228KB
3.gif 215KB
4.gif 206KB
2.gif 202KB
5.gif 192KB
2.gif 164KB
1.gif 156KB
4.gif 150KB
2.gif 129KB
1.gif 117KB
4.gif 117KB
4.gif 115KB
1.gif 105KB
3.gif 90KB
1.gif 78KB
3.gif 73KB
3.gif 69KB
.gitignore 118B
.gitignore 7B
build.gradle 4KB
build.gradle 497B
settings.gradle 15B
gradlew 5KB
joda-time-2.5-sources.jar 731KB
joda-time-2.5.jar 574KB
pinyin4j-2.5.0.jar 184KB
gradle-wrapper.jar 52KB
SessionActivity.java 41KB
NimTeamSDK.java 29KB
SessionAdapter.java 28KB
TeamCheatInfoActivity.java 24KB
MainActivity.java 22KB
TeamCheatCreateActvitiy.java 17KB
FileUtils.java 16KB
NimMessageSDK.java 15KB
MessageFragment.java 15KB
ImageUtil.java 15KB
UserInfoActivity.java 14KB
ContactsFragment.java 13KB
Bimp.java 12KB
MyInfoActivity.java 12KB
ScanActivity.java 12KB
BubbleImageView.java 11KB
DragLayout.java 11KB
App.java 11KB
BaseAudioControl.java 11KB
FastBlurUtil.java 11KB
TeamCheatListActivity.java 10KB
ImageWatchActivity.java 10KB
SwipeLayout.java 9KB
FileWallActivity.java 9KB
AttachmentStore.java 9KB
PhotoActivity.java 9KB
BitmapDecoder.java 9KB
ZoomImageView.java 8KB
LoginActivity.java 8KB
NewFriendActivity.java 8KB
NimHistorySDK.java 8KB
PopupWindowFactory.java 8KB
QRCodeCardActivity.java 7KB
MessageAudioControl.java 7KB
LogUtils.java 7KB
MeFragment.java 7KB
TeamCheatRemoveMemberActivity.java 6KB
AddFriendActivity.java 6KB
NetworkImageView.java 6KB
MarqueeTextView.java 6KB
FlowLayout.java 6KB
SearchUserActivity.java 6KB
AliasActivity.java 5KB
NimRecentContactSDK.java 5KB
QuickIndexBar.java 5KB
BaseActivity.java 5KB
NetworkProber.java 5KB
ExternalStorage.java 5KB
FilePreviewActivity.java 5KB
ShowBigImageActivity.java 5KB
共 555 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6732
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功