update
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
package com.shayu.onetoone.activity;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -10,12 +13,16 @@ import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.shayu.onetoone.R;
|
||||
|
||||
/**
|
||||
* Activity基类
|
||||
*/
|
||||
public abstract class AbsOTOActivity extends AppCompatActivity {
|
||||
public Context mContext;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setStatusBar();
|
||||
setContentView(getLayoutId());
|
||||
mContext = this;
|
||||
main(savedInstanceState);
|
||||
@@ -24,11 +31,24 @@ public abstract class AbsOTOActivity extends AppCompatActivity {
|
||||
view.setOnClickListener(v -> finish());
|
||||
}
|
||||
}
|
||||
private void setStatusBar() {
|
||||
|
||||
Window window = getWindow();
|
||||
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
|
||||
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
|
||||
window.setStatusBarColor(0);
|
||||
}
|
||||
/**
|
||||
* 设置布局id
|
||||
*/
|
||||
protected abstract int getLayoutId();
|
||||
|
||||
protected abstract void main(Bundle savedInstanceState);
|
||||
|
||||
/**
|
||||
* 设置标题
|
||||
*/
|
||||
public void setTitle(String title) {
|
||||
TextView view = findViewById(R.id.title);
|
||||
if (view != null) {
|
||||
|
||||
@@ -4,6 +4,7 @@ import static com.yunbao.common.CommonAppContext.home_zdy_img_cn;
|
||||
import static com.yunbao.common.CommonAppContext.home_zdy_img_us;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@@ -12,6 +13,7 @@ import com.blankj.utilcode.util.GsonUtils;
|
||||
import com.lzy.okgo.model.Response;
|
||||
import com.shayu.onetoone.R;
|
||||
import com.shayu.onetoone.manager.RouteManager;
|
||||
import com.shayu.onetoone.utils.MainHttpUtil;
|
||||
import com.yunbao.common.CommonAppConfig;
|
||||
import com.yunbao.common.CommonAppContext;
|
||||
import com.yunbao.common.bean.IMLoginModel;
|
||||
@@ -28,8 +30,34 @@ import com.yunbao.common.utils.ToastUtil;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
import com.linecorp.linesdk.Scope;
|
||||
import com.linecorp.linesdk.auth.LineAuthenticationParams;
|
||||
import com.linecorp.linesdk.auth.LineLoginApi;
|
||||
import com.linecorp.linesdk.auth.LineLoginResult;
|
||||
import com.twitter.sdk.android.core.Callback;
|
||||
import com.twitter.sdk.android.core.DefaultLogger;
|
||||
import com.twitter.sdk.android.core.Result;
|
||||
import com.twitter.sdk.android.core.Twitter;
|
||||
import com.twitter.sdk.android.core.TwitterAuthConfig;
|
||||
import com.twitter.sdk.android.core.TwitterAuthToken;
|
||||
import com.twitter.sdk.android.core.TwitterConfig;
|
||||
import com.twitter.sdk.android.core.TwitterException;
|
||||
import com.twitter.sdk.android.core.TwitterSession;
|
||||
import com.twitter.sdk.android.core.identity.TwitterLoginButton;
|
||||
import com.facebook.AccessToken;
|
||||
import com.facebook.CallbackManager;
|
||||
import com.facebook.FacebookCallback;
|
||||
import com.facebook.FacebookException;
|
||||
import com.facebook.Profile;
|
||||
import com.facebook.ProfileTracker;
|
||||
import com.facebook.login.LoginManager;
|
||||
import com.facebook.login.LoginResult;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* 启动Activity
|
||||
*/
|
||||
public class LauncherActivity extends AbsOTOActivity {
|
||||
|
||||
@Override
|
||||
@@ -39,14 +67,12 @@ public class LauncherActivity extends AbsOTOActivity {
|
||||
|
||||
@Override
|
||||
protected void main(Bundle savedInstanceState) {
|
||||
//临时用的登录代码,将就下
|
||||
HttpClient.getInstance().get("Login.userLogin", "setLoginInfo")
|
||||
.params("user_login", "95001")
|
||||
.params("user_pass", "123")
|
||||
.params("pushid", "")
|
||||
.params("lastlogindevice", "Android")
|
||||
.params("uuid_Device", DeviceUtils.getUniqueDeviceId())
|
||||
.execute(new HttpCallback() {
|
||||
|
||||
findViewById(R.id.login).setOnClickListener(view -> {
|
||||
//账号密码登录 临时用的登录代码,将就下
|
||||
String account = ((EditText) findViewById(R.id.edit_user)).getText().toString();
|
||||
String password= ((EditText) findViewById(R.id.edit_password)).getText().toString();
|
||||
MainHttpUtil.login(account, password, DeviceUtils.getUniqueDeviceId(), new HttpCallback() {
|
||||
@Override
|
||||
public void onSuccess(int code, String msg, String[] info) {
|
||||
if (code == 0 && info.length > 0) {
|
||||
@@ -66,6 +92,7 @@ public class LauncherActivity extends AbsOTOActivity {
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private void connectRongCloud() {
|
||||
|
||||
@@ -19,14 +19,22 @@ import com.shayu.onetoone.activity.fragments.FriendsFragment;
|
||||
import com.shayu.onetoone.activity.fragments.MessageFragment;
|
||||
import com.shayu.onetoone.activity.fragments.MyFragment;
|
||||
import com.shayu.onetoone.manager.RouteManager;
|
||||
import com.yunbao.common.CommonAppConfig;
|
||||
import com.yunbao.common.manager.imrongcloud.RongcloudIMManager;
|
||||
import com.yunbao.common.utils.ToastUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import io.rong.imkit.RongIM;
|
||||
import io.rong.imlib.RongIMClient;
|
||||
import kotlin.Unit;
|
||||
import kotlin.jvm.functions.Function1;
|
||||
import kotlin.jvm.functions.Function4;
|
||||
|
||||
/**
|
||||
* 主页Activity
|
||||
*/
|
||||
@Route(path = RouteManager.ACTIVITY_MAIN)
|
||||
public class MainActivity extends AbsOTOActivity {
|
||||
List<BaseFragment> fragments = new ArrayList<>();
|
||||
@@ -73,7 +81,7 @@ public class MainActivity extends AbsOTOActivity {
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
RongcloudIMManager.connectIM(mContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -10,6 +10,9 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
/**
|
||||
* Fragment基类
|
||||
*/
|
||||
public abstract class BaseFragment extends Fragment {
|
||||
public Context mContext;
|
||||
|
||||
@@ -23,8 +26,16 @@ public abstract class BaseFragment extends Fragment {
|
||||
return itemView;
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化页面
|
||||
* @param itemView 布局view
|
||||
*/
|
||||
public abstract void initView(View itemView);
|
||||
|
||||
/**
|
||||
* 创建页面
|
||||
* @return 布局
|
||||
*/
|
||||
public abstract View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);
|
||||
|
||||
}
|
||||
|
||||
@@ -8,6 +8,9 @@ import android.view.ViewGroup;
|
||||
|
||||
import com.shayu.onetoone.R;
|
||||
|
||||
/**
|
||||
* 动态主页面
|
||||
*/
|
||||
public class DynamicFragment extends BaseFragment {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -8,6 +8,9 @@ import android.view.ViewGroup;
|
||||
|
||||
import com.shayu.onetoone.R;
|
||||
|
||||
/**
|
||||
* 交友主页面
|
||||
*/
|
||||
public class FriendsFragment extends BaseFragment {
|
||||
@Override
|
||||
public void initView(View itemView) {
|
||||
|
||||
@@ -27,6 +27,9 @@ import kotlin.Unit;
|
||||
import kotlin.jvm.functions.Function1;
|
||||
import kotlin.jvm.functions.Function4;
|
||||
|
||||
/**
|
||||
* 消息主页面
|
||||
*/
|
||||
public class MessageFragment extends BaseFragment implements View.OnClickListener {
|
||||
List<BaseFragment> fragments = new ArrayList<>();
|
||||
View more;
|
||||
|
||||
@@ -8,6 +8,9 @@ import android.view.ViewGroup;
|
||||
|
||||
import com.shayu.onetoone.R;
|
||||
|
||||
/**
|
||||
* 我的主页面
|
||||
*/
|
||||
public class MyFragment extends BaseFragment {
|
||||
@Override
|
||||
public void initView(View itemView) {
|
||||
@@ -16,6 +19,6 @@ public class MyFragment extends BaseFragment {
|
||||
|
||||
@Override
|
||||
public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.activity_msg_config, container, false);
|
||||
return inflater.inflate(R.layout.fragment_my, container, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.shayu.onetoone.activity.fragments.home;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.shayu.onetoone.R;
|
||||
import com.yunbao.common.fragment.BaseFragment;
|
||||
|
||||
public class HotFragment extends BaseFragment {
|
||||
@Override
|
||||
public View createView(LayoutInflater inflater, ViewGroup container) {
|
||||
return inflater.inflate(R.layout.fragment_hot, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initVariables(Bundle bundle) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initViews(Bundle savedInstanceState, View contentView) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void loadData() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.shayu.onetoone.activity.fragments.home;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.shayu.onetoone.R;
|
||||
import com.yunbao.common.fragment.BaseFragment;
|
||||
|
||||
public class RecommendFragment extends BaseFragment {
|
||||
@Override
|
||||
public View createView(LayoutInflater inflater, ViewGroup container) {
|
||||
return inflater.inflate(R.layout.fragment_recommend, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initVariables(Bundle bundle) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initViews(Bundle savedInstanceState, View contentView) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void loadData() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,46 +1,135 @@
|
||||
package com.shayu.onetoone.activity.fragments.message;
|
||||
|
||||
import static io.rong.imkit.conversation.extension.component.inputpanel.InputPanel.InputStyle.STYLE_CONTAINER_EXTENSION;
|
||||
import static io.rong.imkit.conversation.extension.component.inputpanel.InputPanel.InputStyle.STYLE_SWITCH_CONTAINER_EXTENSION;
|
||||
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.FileProvider;
|
||||
|
||||
import com.shayu.onetoone.R;
|
||||
import com.yunbao.common.CommonAppConfig;
|
||||
import com.yunbao.common.Constants;
|
||||
import com.yunbao.common.interfaces.ImageResultCallback;
|
||||
import com.yunbao.common.utils.ProcessImageUtil;
|
||||
import com.yunbao.common.utils.ToastUtil;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Date;
|
||||
|
||||
import io.rong.imkit.IMCenter;
|
||||
import io.rong.imkit.conversation.ConversationFragment;
|
||||
import io.rong.imlib.IRongCallback;
|
||||
import io.rong.imlib.ISendMessageCallback;
|
||||
import io.rong.imlib.RongIMClient;
|
||||
import io.rong.imlib.model.Conversation;
|
||||
import io.rong.imlib.model.Message;
|
||||
import io.rong.message.TextMessage;
|
||||
import io.rong.message.ImageMessage;
|
||||
|
||||
/**
|
||||
* 融云聊天UI
|
||||
*/
|
||||
public class ChatMessageFragment extends ConversationFragment {
|
||||
Button mSendBtn;
|
||||
View mInputPanel;
|
||||
ImageView img, call, video, gift;
|
||||
ProcessImageUtil cameraUtil;
|
||||
String targetId;
|
||||
Conversation.ConversationType conversationType= Conversation.ConversationType.PRIVATE;
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE;
|
||||
String targetId = "user1";
|
||||
Message.SentStatus sentStatus = Message.SentStatus.SENT;
|
||||
TextMessage content = TextMessage.obtain("这里是消息内容");
|
||||
long sentTime = System.currentTimeMillis();
|
||||
IMCenter.getInstance().insertOutgoingMessage(conversationType, targetId, sentStatus, content, sentTime, new RongIMClient.ResultCallback<Message>() {
|
||||
initBtn();
|
||||
targetId = getActivity().getIntent().getStringExtra("targetId");
|
||||
cameraUtil = new ProcessImageUtil(getActivity(), "com.shayu.onetoone.fileprovider");
|
||||
mSendBtn.setOnClickListener(v -> sendText());
|
||||
img.setOnClickListener(v -> cameraUtil.getImageByCamera());
|
||||
cameraUtil.setImageResultCallback(new ImageResultCallback() {
|
||||
@Override
|
||||
public void onSuccess(Message message) {
|
||||
ToastUtil.show("消息发送成功");
|
||||
public void beforeCamera() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(RongIMClient.ErrorCode e) {
|
||||
ToastUtil.show("消息发送失败:"+e.msg);
|
||||
Log.i("聊天", "onError: "+e);
|
||||
public void onSuccess(File file) {
|
||||
sendImage(file);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure() {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initBtn() {
|
||||
try {
|
||||
Field field = mRongExtension.getInputPanel().getClass().getDeclaredField("mInputPanel");
|
||||
field.setAccessible(true);
|
||||
mInputPanel = (View) field.get(mRongExtension.getInputPanel());
|
||||
assert mInputPanel != null;
|
||||
mSendBtn = mInputPanel.findViewById(R.id.send_btn);
|
||||
img = mInputPanel.findViewById(R.id.input_panel_image_btn);
|
||||
video = mInputPanel.findViewById(R.id.input_panel_video_btn);
|
||||
call = mInputPanel.findViewById(R.id.input_panel_call_btn);
|
||||
gift = mInputPanel.findViewById(R.id.input_panel_gift_btn);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void sendText() {
|
||||
try {
|
||||
Field field = mRongExtension.getInputPanel().getClass().getDeclaredField("mSendBtn");
|
||||
field.setAccessible(true);
|
||||
Button send = (Button) field.get(mRongExtension.getInputPanel());
|
||||
assert send != null;
|
||||
send.callOnClick();
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void sendImage(File file) {
|
||||
ImageMessage imageMessage = ImageMessage.obtain(Uri.parse("file://"+file.getAbsolutePath()),true);
|
||||
Message message = Message.obtain(targetId, conversationType, imageMessage);
|
||||
message.setSenderUserId(CommonAppConfig.getInstance().getUid());
|
||||
message.setObjectName("RC:ImgMsg");
|
||||
message.setExtra("");
|
||||
message.setSentTime(new Date().getTime());
|
||||
message.setTargetId(targetId);
|
||||
IMCenter.getInstance().sendMediaMessage(message, null, null, new IRongCallback.ISendMediaMessageCallback() {
|
||||
|
||||
@Override
|
||||
public void onProgress(Message message, int progress) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCanceled(Message message) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttached(Message message) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Message message) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Message message, RongIMClient.ErrorCode errorCode) {
|
||||
ToastUtil.show("发送失败");
|
||||
System.out.println("发送失败:" + errorCode.getMessage());
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,9 @@ import android.view.ViewGroup;
|
||||
import com.shayu.onetoone.R;
|
||||
import com.shayu.onetoone.activity.fragments.BaseFragment;
|
||||
|
||||
/**
|
||||
* 消息-好友
|
||||
*/
|
||||
public class MsgFriendFragment extends BaseFragment {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,12 +2,21 @@ package com.shayu.onetoone.activity.fragments.message;
|
||||
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.lifecycle.Observer;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
|
||||
import com.shayu.onetoone.R;
|
||||
@@ -27,51 +36,83 @@ import com.yunbao.common.utils.ToastUtil;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import io.rong.common.RLog;
|
||||
import io.rong.imkit.IMCenter;
|
||||
import io.rong.imkit.config.ConversationListBehaviorListener;
|
||||
import io.rong.imkit.config.RongConfigCenter;
|
||||
import io.rong.imkit.conversationlist.ConversationListAdapter;
|
||||
import io.rong.imkit.conversationlist.ConversationListFragment;
|
||||
import io.rong.imkit.conversationlist.model.BaseUiConversation;
|
||||
import io.rong.imkit.conversationlist.model.GatheredConversation;
|
||||
import io.rong.imkit.conversationlist.viewmodel.ConversationListViewModel;
|
||||
import io.rong.imkit.event.Event;
|
||||
import io.rong.imkit.model.NoticeContent;
|
||||
import io.rong.imkit.utils.RouteUtils;
|
||||
import io.rong.imkit.widget.FixedLinearLayoutManager;
|
||||
import io.rong.imkit.widget.adapter.BaseAdapter;
|
||||
import io.rong.imkit.widget.adapter.ViewHolder;
|
||||
import io.rong.imkit.widget.dialog.OptionsPopupDialog;
|
||||
import io.rong.imkit.widget.refresh.SmartRefreshLayout;
|
||||
import io.rong.imkit.widget.refresh.api.RefreshLayout;
|
||||
import io.rong.imkit.widget.refresh.constant.RefreshState;
|
||||
import io.rong.imkit.widget.refresh.listener.OnLoadMoreListener;
|
||||
import io.rong.imkit.widget.refresh.listener.OnRefreshListener;
|
||||
import io.rong.imkit.widget.refresh.wrapper.RongRefreshHeader;
|
||||
import io.rong.imlib.RongIMClient;
|
||||
import io.rong.imlib.model.Conversation;
|
||||
import io.rong.imlib.model.ConversationIdentifier;
|
||||
|
||||
public class MsgMessageFragment extends BaseFragment {
|
||||
SwipeRecyclerView recyclerView;
|
||||
SwipeRefreshLayout swipeRefreshLayout;
|
||||
ConstraintLayout netError;
|
||||
MsgMessageRecyclerViewAdapter adapter;
|
||||
/**
|
||||
* 消息-消息
|
||||
* copy {@link io.rong.imkit.conversationlist.ConversationListFragment}
|
||||
*/
|
||||
public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnItemClickListener {
|
||||
private static final String TAG = MsgMessageFragment.class.getSimpleName();
|
||||
SwipeRecyclerView mList;
|
||||
SmartRefreshLayout mRefreshLayout;
|
||||
ConversationListAdapter mAdapter;
|
||||
List<MsgMessageBean> list;
|
||||
|
||||
protected View mNoticeContainerView;
|
||||
protected TextView mNoticeContentTv;
|
||||
protected ImageView mNoticeIconIv;
|
||||
protected ConversationListViewModel mConversationListViewModel;
|
||||
protected Handler mHandler = new Handler(Looper.getMainLooper());
|
||||
protected boolean delayRefresh = false;
|
||||
|
||||
@Override
|
||||
public void initView(View itemView) {
|
||||
recyclerView = itemView.findViewById(R.id.recyclerView);
|
||||
swipeRefreshLayout = itemView.findViewById(R.id.swipeRefreshLayout);
|
||||
netError = itemView.findViewById(R.id.net_error);
|
||||
adapter = new MsgMessageRecyclerViewAdapter(getContext());
|
||||
mList = itemView.findViewById(R.id.recyclerView);
|
||||
mRefreshLayout = itemView.findViewById(R.id.swipeRefreshLayout);
|
||||
mAdapter = new ConversationListAdapter();
|
||||
list = new ArrayList<>();
|
||||
initData();
|
||||
recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
|
||||
recyclerView.setSwipeMenuCreator(initSwipeMenuCreator());
|
||||
mList.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
|
||||
mList.setSwipeMenuCreator(initSwipeMenuCreator());
|
||||
initMoreListener();
|
||||
initRefreshListener();
|
||||
recyclerView.setOnItemMenuClickListener(new OnItemMenuClickListener() {
|
||||
mList.setOnItemMenuClickListener(new OnItemMenuClickListener() {
|
||||
@Override
|
||||
public void onItemClick(SwipeMenuBridge menuBridge, int adapterPosition) {
|
||||
menuBridge.closeMenu();
|
||||
if (menuBridge.getPosition() == 0) {
|
||||
ToastUtil.showDebug("置顶:" + adapter.getList().get(adapterPosition).getNickname());
|
||||
BaseUiConversation conversation = mAdapter.getData().get(adapterPosition);
|
||||
IMCenter.getInstance().setConversationToTop(Conversation.ConversationType.PRIVATE, conversation.mCore.getTargetId(), !conversation.mCore.isTop(), true, new RongIMClient.ResultCallback<Boolean>() {
|
||||
@Override
|
||||
public void onSuccess(Boolean aBoolean) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(RongIMClient.ErrorCode e) {
|
||||
|
||||
}
|
||||
});
|
||||
// ToastUtil.showDebug("置顶:" + mAdapter.getList().get(adapterPosition).getNickname());
|
||||
} else {
|
||||
ToastUtil.showDebug("删除:" + adapter.getList().get(adapterPosition).getNickname());
|
||||
adapter.getList().remove(adapterPosition);
|
||||
adapter.notifyDataSetChanged();
|
||||
// ToastUtil.showDebug("删除:" + mAdapter.getList().get(adapterPosition).getNickname());
|
||||
mAdapter.getData().remove(adapterPosition);
|
||||
mAdapter.notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
});
|
||||
recyclerView.setOnItemClickListener(new OnItemClickListener() {
|
||||
@Override
|
||||
public void onItemClick(View view, int i) {
|
||||
RouteManager.forwardMsgChatActivity();
|
||||
}
|
||||
});
|
||||
recyclerView.setAdapter(adapter);
|
||||
adapter.setList(list);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -79,6 +120,168 @@ public class MsgMessageFragment extends BaseFragment {
|
||||
return inflater.inflate(R.layout.fragment_msg_message, container, false);
|
||||
}
|
||||
|
||||
protected int mNewState = 0;
|
||||
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
if (!IMCenter.getInstance().isInitialized()) {
|
||||
RLog.e(TAG, "Please init SDK first!");
|
||||
} else {
|
||||
LinearLayoutManager layoutManager = new FixedLinearLayoutManager(this.getActivity());
|
||||
this.mList.setLayoutManager(layoutManager);
|
||||
this.mList.setAdapter(this.mAdapter);
|
||||
this.mList.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
|
||||
MsgMessageFragment.this.mNewState = newState;
|
||||
if (MsgMessageFragment.this.mNewState == 0 && MsgMessageFragment.this.delayRefresh && MsgMessageFragment.this.mAdapter != null && MsgMessageFragment.this.mConversationListViewModel != null) {
|
||||
MsgMessageFragment.this.delayRefresh = false;
|
||||
MsgMessageFragment.this.mAdapter.setDataCollection((List) MsgMessageFragment.this.mConversationListViewModel.getConversationListLiveData().getValue());
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
this.mAdapter.setItemClickListener(this);
|
||||
this.mNoticeContainerView = view.findViewById(R.id.rc_conversationlist_notice_container);
|
||||
this.mNoticeContentTv = (TextView) view.findViewById(R.id.rc_conversationlist_notice_tv);
|
||||
this.mNoticeIconIv = (ImageView) view.findViewById(R.id.rc_conversationlist_notice_icon_iv);
|
||||
this.initRefreshView();
|
||||
this.subscribeUi();
|
||||
}
|
||||
}
|
||||
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
if (this.mConversationListViewModel != null) {
|
||||
this.mConversationListViewModel.clearAllNotification();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void initRefreshView() {
|
||||
if (this.mRefreshLayout == null) {
|
||||
RLog.d(this.TAG, "initRefreshView null");
|
||||
} else {
|
||||
this.mRefreshLayout.setNestedScrollingEnabled(false);
|
||||
this.mRefreshLayout.setRefreshHeader(new RongRefreshHeader(this.getContext()));
|
||||
this.mRefreshLayout.setRefreshFooter(new RongRefreshHeader(this.getContext()));
|
||||
this.mRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
|
||||
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
|
||||
MsgMessageFragment.this.onConversationListRefresh(refreshLayout);
|
||||
}
|
||||
});
|
||||
this.mRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
|
||||
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
|
||||
MsgMessageFragment.this.onConversationListLoadMore();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
protected void subscribeUi() {
|
||||
this.mConversationListViewModel = (ConversationListViewModel) (new ViewModelProvider(this)).get(ConversationListViewModel.class);
|
||||
this.mConversationListViewModel.getConversationList(false, false, 0L);
|
||||
this.mConversationListViewModel.getConversationListLiveData().observe(this.getViewLifecycleOwner(), new Observer<List<BaseUiConversation>>() {
|
||||
public void onChanged(List<BaseUiConversation> uiConversations) {
|
||||
RLog.d(MsgMessageFragment.this.TAG, "conversation list onChanged.");
|
||||
if (MsgMessageFragment.this.mNewState == 0) {
|
||||
MsgMessageFragment.this.mAdapter.setDataCollection(uiConversations);
|
||||
} else {
|
||||
MsgMessageFragment.this.delayRefresh = true;
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
this.mConversationListViewModel.getNoticeContentLiveData().observe(this.getViewLifecycleOwner(), new Observer<NoticeContent>() {
|
||||
public void onChanged(NoticeContent noticeContent) {
|
||||
if (MsgMessageFragment.this.mNoticeContainerView.getVisibility() == View.GONE) {
|
||||
MsgMessageFragment.this.mHandler.postDelayed(new Runnable() {
|
||||
public void run() {
|
||||
MsgMessageFragment.this.updateNoticeContent((NoticeContent) MsgMessageFragment.this.mConversationListViewModel.getNoticeContentLiveData().getValue());
|
||||
}
|
||||
}, 4000L);
|
||||
} else {
|
||||
MsgMessageFragment.this.updateNoticeContent(noticeContent);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
this.mConversationListViewModel.getRefreshEventLiveData().observe(this.getViewLifecycleOwner(), new Observer<Event.RefreshEvent>() {
|
||||
public void onChanged(Event.RefreshEvent refreshEvent) {
|
||||
if (refreshEvent.state.equals(RefreshState.LoadFinish)) {
|
||||
if (MsgMessageFragment.this.mRefreshLayout != null) {
|
||||
MsgMessageFragment.this.mRefreshLayout.finishLoadMore();
|
||||
} else {
|
||||
RLog.d(MsgMessageFragment.this.TAG, "onChanged finishLoadMore error");
|
||||
}
|
||||
} else if (refreshEvent.state.equals(RefreshState.RefreshFinish)) {
|
||||
if (MsgMessageFragment.this.mRefreshLayout != null) {
|
||||
MsgMessageFragment.this.mRefreshLayout.finishRefresh();
|
||||
} else {
|
||||
RLog.d(MsgMessageFragment.this.TAG, "onChanged finishRefresh error");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected void onConversationListRefresh(RefreshLayout refreshLayout) {
|
||||
if (this.mConversationListViewModel != null) {
|
||||
this.mConversationListViewModel.getConversationList(false, true, 0L);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void onConversationListLoadMore() {
|
||||
if (this.mConversationListViewModel != null) {
|
||||
this.mConversationListViewModel.getConversationList(true, true, 0L);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void updateNoticeContent(NoticeContent content) {
|
||||
if (content != null) {
|
||||
if (content.isShowNotice()) {
|
||||
this.mNoticeContainerView.setVisibility(View.VISIBLE);
|
||||
this.mNoticeContentTv.setText(content.getContent());
|
||||
if (content.getIconResId() != 0) {
|
||||
this.mNoticeIconIv.setImageResource(content.getIconResId());
|
||||
}
|
||||
} else {
|
||||
this.mNoticeContainerView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void onItemClick(View view, ViewHolder holder, int position) {
|
||||
if (position >= 0 && position < this.mAdapter.getData().size()) {
|
||||
BaseUiConversation baseUiConversation = (BaseUiConversation) this.mAdapter.getItem(position);
|
||||
ConversationListBehaviorListener listBehaviorListener = RongConfigCenter.conversationListConfig().getListener();
|
||||
if (listBehaviorListener != null && listBehaviorListener.onConversationClick(view.getContext(), view, baseUiConversation)) {
|
||||
RLog.d(this.TAG, "ConversationList item click event has been intercepted by App.");
|
||||
} else {
|
||||
if (baseUiConversation != null && baseUiConversation.mCore != null) {
|
||||
if (baseUiConversation instanceof GatheredConversation) {
|
||||
RouteUtils.routeToSubConversationListActivity(view.getContext(), ((GatheredConversation) baseUiConversation).mGatheredType, baseUiConversation.mCore.getConversationTitle());
|
||||
} else {
|
||||
RouteUtils.routeToConversationActivity(view.getContext(), baseUiConversation.getConversationIdentifier());
|
||||
}
|
||||
} else {
|
||||
RLog.e(this.TAG, "invalid conversation.");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onItemLongClick(View view, ViewHolder holder, int position) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private SwipeMenuCreator initSwipeMenuCreator() {
|
||||
SwipeMenuCreator creator = (leftMenu, rightMenu, position) -> {
|
||||
SwipeMenuItem top = new SwipeMenuItem(getContext());
|
||||
@@ -107,24 +310,14 @@ public class MsgMessageFragment extends BaseFragment {
|
||||
new ArrayList<>(list);
|
||||
initData();
|
||||
tmp.addAll(list);
|
||||
adapter.setList(tmp);
|
||||
// mAdapter.setDataCollection(tmp);
|
||||
list = new ArrayList<>(tmp);
|
||||
recyclerView.loadMoreFinish(false, true);
|
||||
mList.loadMoreFinish(false, true);
|
||||
}
|
||||
};
|
||||
recyclerView.setLoadMoreListener(moreListener);
|
||||
mList.setLoadMoreListener(moreListener);
|
||||
}
|
||||
|
||||
private void initRefreshListener() {
|
||||
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
initData();
|
||||
adapter.setList(list);
|
||||
swipeRefreshLayout.setRefreshing(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initData() {
|
||||
list = new ArrayList<>();
|
||||
|
||||
@@ -13,6 +13,9 @@ import com.shayu.onetoone.manager.RouteManager;
|
||||
|
||||
import io.rong.imkit.conversation.ConversationFragment;
|
||||
|
||||
/**
|
||||
* 聊天界面
|
||||
*/
|
||||
@Route(path = RouteManager.ACTIVITY_MSG_CHAT)
|
||||
public class ChatActivity extends AbsOTOActivity {
|
||||
@Override
|
||||
|
||||
@@ -17,6 +17,9 @@ import com.shayu.onetoone.bean.MsgGreetConfigBean;
|
||||
import com.shayu.onetoone.manager.RouteManager;
|
||||
import com.yunbao.common.interfaces.OnItemClickListener;
|
||||
|
||||
/**
|
||||
* 打招呼设置界面
|
||||
*/
|
||||
@Route(path = RouteManager.ACTIVITY_MSG_MORE_CONFIG_ACTIVITY)
|
||||
public class MsgMoreConfigActivity extends AbsOTOActivity {
|
||||
RecyclerView recyclerView;
|
||||
|
||||
Reference in New Issue
Block a user