This commit is contained in:
2023-10-05 14:12:03 +08:00
parent 41b5ab93dc
commit d82f89f11c
63 changed files with 2221 additions and 323 deletions

View File

@@ -12,25 +12,33 @@ import com.alibaba.android.arouter.launcher.ARouter;
import com.facebook.FacebookSdk;
import com.shayu.onetoone.activity.fragments.message.ChatMessageFragment;
import com.shayu.onetoone.activity.message.ChatActivity;
import com.shayu.onetoone.provider.CustomConversationProvider;
import com.shayu.onetoone.utils.NeverCrashUtils;
import com.yunbao.common.BuildConfig;
import com.yunbao.common.CommonAppContext;
import com.yunbao.common.manager.imrongcloud.InstructorSendRewardProvider;
import com.yunbao.common.manager.imrongcloud.RongcloudIMManager;
import com.yunbao.common.utils.AppManager;
import com.yunbao.common.utils.L;
import com.yunbao.common.utils.ToastUtil;
import io.rong.imkit.RongIM;
import io.rong.imkit.config.RongConfigCenter;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.conversationlist.provider.PrivateConversationProvider;
import io.rong.imkit.utils.RouteUtils;
import io.rong.imkit.widget.adapter.ProviderManager;
import io.rong.imlib.IMLibRTCClient;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Message;
import io.rong.imlib.model.MessageContent;
import io.rong.message.TextMessage;
public class AppContext extends CommonAppContext {
@Override
public void onCreate() {
super.onCreate();
L.setDeBug(true);
NeverCrashUtils.getInstance()
.setDebugMode(BuildConfig.DEBUG)
.setMainCrashHandler((t, e) -> {
@@ -60,12 +68,23 @@ public class AppContext extends CommonAppContext {
String appKey = "pvxdm17jpd3hr";
boolean enablePush = true;
RongIM.init(this, appKey, enablePush);
RongIM.setConnectionStatusListener(new RongIMClient.ConnectionStatusListener() {
@Override
public void onChanged(ConnectionStatus status) {
Log.i("融云", "onChanged: "+status.getMessage());
}
});
ProviderManager<BaseUiConversation> providerManager = RongConfigCenter.conversationListConfig().getProviderManager();
providerManager.replaceProvider(PrivateConversationProvider.class,new CustomConversationProvider());
RongcloudIMManager.initRongIM(this);
RongConfigCenter.conversationConfig().addMessageProvider(new InstructorSendRewardProvider(getApplicationContext()));
RongcloudIMManager.addRongcloudIMOnReceiveMessageListener(new RongIMClient.OnReceiveMessageWrapperListener() {
@Override
public boolean onReceived(Message message, int left, boolean hasPackage, boolean offline) {
TextMessage content = (TextMessage) message.getContent();
ToastUtil.show("收到:"+content.getContent());
return false;
}
});

View File

@@ -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) {

View File

@@ -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() {

View File

@@ -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

View File

@@ -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);
}

View File

@@ -8,6 +8,9 @@ import android.view.ViewGroup;
import com.shayu.onetoone.R;
/**
* 动态主页面
*/
public class DynamicFragment extends BaseFragment {
@Override

View File

@@ -8,6 +8,9 @@ import android.view.ViewGroup;
import com.shayu.onetoone.R;
/**
* 交友主页面
*/
public class FriendsFragment extends BaseFragment {
@Override
public void initView(View itemView) {

View File

@@ -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;

View File

@@ -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);
}
}

View File

@@ -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() {
}
}

View File

@@ -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() {
}
}

View File

@@ -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());
}
});
}
}

View File

@@ -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

View File

@@ -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<>();

View File

@@ -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

View File

@@ -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;

View File

@@ -1,27 +0,0 @@
package com.shayu.onetoone.activitys.fragments.home;
import android.os.Bundle;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.shayu.onetoone.R;
import com.shayu.onetoone.activity.AbsOTOActivity;
import com.shayu.onetoone.activity.fragments.message.ChatMessageFragment;
import io.rong.imkit.conversation.ConversationFragment;
/**
* 推荐
*/
public class RecommendActivity extends AbsOTOActivity {
@Override
protected int getLayoutId() {
return R.layout.activity_recommend;
}
@Override
protected void main(Bundle savedInstanceState) {
}
}

View File

@@ -19,6 +19,9 @@ import com.yunbao.common.interfaces.OnItemClickListener;
import java.util.ArrayList;
import java.util.List;
/**
* 打招呼设置适配器
*/
public class MsgGreetConfigAdapter extends RecyclerView.Adapter<MsgGreetConfigAdapter.ViewHolder> {
List<MsgGreetConfigBean> mList;
Context mContext;

View File

@@ -16,6 +16,9 @@ import com.yunbao.common.glide.ImgLoader;
import java.util.List;
/**
* 聊天列表适配器
*/
public class MsgMessageRecyclerViewAdapter extends RecyclerView.Adapter<MsgMessageRecyclerViewAdapter.ViewHolder> {
List<MsgMessageBean> list;
Context mContext;
@@ -36,7 +39,7 @@ public class MsgMessageRecyclerViewAdapter extends RecyclerView.Adapter<MsgMessa
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_msg_message, parent, false));
return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.rc_conversationlist_item, parent, false));
}
@Override
@@ -58,11 +61,11 @@ public class MsgMessageRecyclerViewAdapter extends RecyclerView.Adapter<MsgMessa
public ViewHolder(@NonNull View itemView) {
super(itemView);
avatar = itemView.findViewById(R.id.msg_message_avatar);
/* avatar = itemView.findViewById(R.id.msg_message_avatar);
name = itemView.findViewById(R.id.msg_message_title);
content = itemView.findViewById(R.id.msg_message_content);
time = itemView.findViewById(R.id.msg_message_content_time);
read = itemView.findViewById(R.id.msg_message_content_not_read);
read = itemView.findViewById(R.id.msg_message_content_not_read);*/
}
public void setData(MsgMessageBean bean, int position) {

View File

@@ -2,6 +2,9 @@ package com.shayu.onetoone.bean;
import com.yunbao.common.bean.BaseModel;
/**
* 打招呼设置
*/
public class MsgGreetConfigBean extends BaseModel {
private int id;
private String content;

View File

@@ -2,6 +2,9 @@ package com.shayu.onetoone.bean;
import com.yunbao.common.bean.BaseModel;
/**
* 聊天列表消息
*/
public class MsgMessageBean extends BaseModel {
private int id;
private String avatar;

View File

@@ -9,6 +9,9 @@ import com.lxj.xpopup.core.AttachPopupView;
import com.shayu.onetoone.R;
import com.shayu.onetoone.manager.RouteManager;
/**
* 消息右上角更多菜单
*/
public class MsgMoreDialog extends AttachPopupView implements View.OnClickListener {
View config, read;

View File

@@ -0,0 +1,56 @@
package com.shayu.onetoone.manager;
import android.content.Context;
import com.yunbao.common.bean.GiftNamingInfoModel;
import com.yunbao.common.http.API;
import com.yunbao.common.http.ResponseModel;
import com.yunbao.common.http.base.HttpCallback;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
/**
* 网络管理类 使用参考{@link com.yunbao.common.http.live.LiveNetManager}
*/
public class OTONetManager {
private Context mContext;
private static OTONetManager mInstance;
private OTONetManager(Context context) {
this.mContext = context;
}
public static OTONetManager getInstance(Context context) {
if (mInstance == null) {
mInstance = new OTONetManager(context);
}
return mInstance;
}
//示例
/*
public void getGiftNamingInfo(String giftId, HttpCallback<GiftNamingInfoModel> callback) {
API.get().pdLiveApi(mContext)
.getGiftNamingInfo(giftId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ResponseModel<GiftNamingInfoModel>>() {
@Override
public void accept(ResponseModel<GiftNamingInfoModel> liveGiftBeanResponseModel) throws Exception {
if (callback!=null){
callback.onSuccess(liveGiftBeanResponseModel.getData().getInfo());
}
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
if (callback != null) {
callback.onError(mContext.getString(com.yunbao.common.R.string.net_error));
}
}
}).isDisposed();
}
*/
}

View File

@@ -6,9 +6,9 @@ import com.alibaba.android.arouter.launcher.ARouter;
* 路由跳转Activity
*/
public class RouteManager {
public static final String ACTIVITY_MAIN = "/activity/MainActivity";
public static final String ACTIVITY_MSG_MORE_CONFIG_ACTIVITY = "/activity/MsgMoreConfigActivity";
public static final String ACTIVITY_MSG_CHAT = "/activity/ChatActivity";
public static final String ACTIVITY_MAIN = "/activity/MainActivity"; //主页
public static final String ACTIVITY_MSG_MORE_CONFIG_ACTIVITY = "/activity/MsgMoreConfigActivity";//打招呼页面
public static final String ACTIVITY_MSG_CHAT = "/activity/ChatActivity";//聊天页面
public static void forwardMainActivity() {

View File

@@ -0,0 +1,100 @@
package com.shayu.onetoone.network;
import android.content.Context;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.internal.bind.DateTypeAdapter;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.CommonAppContext;
import com.yunbao.common.http.HttpLoggingInterceptor;
import com.yunbao.common.http.base.BaseApi;
import com.yunbao.common.http.base.ParamsContext;
import java.io.IOException;
import java.util.Date;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* 网络请求接口
*/
public class API extends BaseApi {
private OneToOneApi otoApi;
private static API api;
/**
* 获取单利
*
* @return
*/
public static API get() {
if (null == api) {
api = new API();
}
return api;
}
public OneToOneApi otoApi(Context context) {
if (null == otoApi) {
//实例化gson
otoApi = createOneToOneApi(true, true);
}
return otoApi;
}
/**
* 创建新的OneToOneApi兼容部分接口需要控制是否添加UID参数
* 仅有需要不添加uid的接口使用默认请用otoApi()
*
* @param isNeedUid 是否需要用户uid参数
* @return OneToOneApi
*/
public OneToOneApi createOneToOneApi(boolean isNeedUid) {
return createOneToOneApi(isNeedUid, true);
}
/**
* 创建新的OneToOneApi兼容部分接口需要控制是否添加UID参数
* 仅有需要不添加uid或token的接口使用默认请用otoApi()
*
* @param isNeedUid 是否需要用户uid参数
* @param isNeedToken 是否需要用户Token
* @return OneToOneApi
*/
public OneToOneApi createOneToOneApi(boolean isNeedUid, boolean isNeedToken) {
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, new DateTypeAdapter())
.create();
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor("http");
loggingInterceptor.setPrintLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder builder = new OkHttpClient()
.newBuilder()
.addInterceptor(initQuery(isNeedUid, isNeedToken, CommonAppContext.sInstance.getApplicationContext()))
.addInterceptor(loggingInterceptor);
return create(builder.build(),
GsonConverterFactory.create(gson), RxJava2CallAdapterFactory.create(), CommonAppConfig.HOST, OneToOneApi.class);
}
//公共参数
public Interceptor initQuery(boolean isNeedUid, boolean isNeedToken, final Context context) {
Interceptor addQueryParameterInterceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
//配置公共参数
request = new ParamsContext(request, context).getInRequest(isNeedUid, isNeedToken);
return chain.proceed(request);
}
};
return addQueryParameterInterceptor;
}
}

View File

@@ -0,0 +1,80 @@
package com.shayu.onetoone.network;
import com.alibaba.fastjson.JSONObject;
import com.yunbao.common.bean.ActiveModel;
import com.yunbao.common.bean.AnchorRecommendItemModel;
import com.yunbao.common.bean.AnchorRecommendModel;
import com.yunbao.common.bean.BaseModel;
import com.yunbao.common.bean.BlindBoxInfoModel;
import com.yunbao.common.bean.CheckLiveModel;
import com.yunbao.common.bean.ContributeModel;
import com.yunbao.common.bean.CustomSidebarInfoModel;
import com.yunbao.common.bean.DiscountsModel;
import com.yunbao.common.bean.EnterRoomNewModel;
import com.yunbao.common.bean.FaceBookUpModel;
import com.yunbao.common.bean.FansCheckRed;
import com.yunbao.common.bean.FansGroupGiftPack;
import com.yunbao.common.bean.FansGroupGiftPackInfo;
import com.yunbao.common.bean.GiftAlreadyWallModel;
import com.yunbao.common.bean.GiftGuideModel;
import com.yunbao.common.bean.GiftNamingInfoModel;
import com.yunbao.common.bean.GiftWallGiftDetail;
import com.yunbao.common.bean.GiftWallModel;
import com.yunbao.common.bean.HourRank;
import com.yunbao.common.bean.HttpCallbackModel;
import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.bean.LinkMicUserBeanV2;
import com.yunbao.common.bean.ListInfoMessageModel;
import com.yunbao.common.bean.LiveAiRobotBean;
import com.yunbao.common.bean.LiveAnchorCallMeModel;
import com.yunbao.common.bean.LiveAnchorSayModel;
import com.yunbao.common.bean.LiveDataInfoModel;
import com.yunbao.common.bean.LiveInfoModel;
import com.yunbao.common.bean.LiveRoomActivityBanner;
import com.yunbao.common.bean.LiveRoomVoteModel;
import com.yunbao.common.bean.LiveStetUpStatusModel;
import com.yunbao.common.bean.LiveTaskModel;
import com.yunbao.common.bean.LiveUserMailBoxModel;
import com.yunbao.common.bean.MedalAchievementModel;
import com.yunbao.common.bean.MsgSwitchDetailModel;
import com.yunbao.common.bean.NewPeopleInfo;
import com.yunbao.common.bean.NobleRankHideUserListModel;
import com.yunbao.common.bean.NobleTrumpetModel;
import com.yunbao.common.bean.PkRankBean;
import com.yunbao.common.bean.PrankGiftBean;
import com.yunbao.common.bean.PrankHttpTurntableBean;
import com.yunbao.common.bean.RandomPkUserBean;
import com.yunbao.common.bean.RankPkInfoBean;
import com.yunbao.common.bean.RedPacketDetailsBean;
import com.yunbao.common.bean.RedPacketGiftModel;
import com.yunbao.common.bean.RedPacketInfoModel;
import com.yunbao.common.bean.RedPacketListBean;
import com.yunbao.common.bean.SearchModel;
import com.yunbao.common.bean.SetAttentsModel;
import com.yunbao.common.bean.SlideInBannerModel;
import com.yunbao.common.bean.StarChallengeStatusModel;
import com.yunbao.common.bean.UserAreaBean;
import com.yunbao.common.bean.UserAvatarSelectBean;
import com.yunbao.common.bean.VipModel;
import com.yunbao.common.bean.WishListGiftConfModel;
import com.yunbao.common.bean.WishListModel;
import com.yunbao.common.http.ResponseModel;
import java.util.List;
import java.util.Map;
import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
/**
* 1v1网络接口访问 参考 {@link com.yunbao.common.http.PDLiveApi}
*/
public interface OneToOneApi {
}

View File

@@ -0,0 +1,23 @@
package com.shayu.onetoone.provider;
import java.util.List;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.conversationlist.provider.BaseConversationProvider;
import io.rong.imkit.widget.adapter.IViewProviderListener;
import io.rong.imkit.widget.adapter.ViewHolder;
import io.rong.imlib.model.Conversation;
public class CustomConversationProvider extends BaseConversationProvider {
@Override
public boolean isItemViewType(BaseUiConversation item) {
return item.mCore.getConversationType().equals(Conversation.ConversationType.PRIVATE);
}
@Override
public void bindViewHolder(ViewHolder holder, BaseUiConversation uiConversation, int position, List<BaseUiConversation> list, IViewProviderListener<BaseUiConversation> listener) {
super.bindViewHolder(holder, uiConversation, position, list, listener);
BaseUiConversation conversation = list.get(position);
}
}

View File

@@ -0,0 +1,56 @@
package com.shayu.onetoone.utils;
/**
* Created by cxf on 2019/2/16.
*/
public class MainHttpConsts {
public static final String LOGIN = "setLoginInfo";
public static final String LOGIN_BY_THIRD = "loginByThird";
public static final String REQUEST_BONUS = "requestBonus";
public static final String GET_BONUS = "getBonus";
public static final String SET_DISTRIBUT = "setDistribut";
public static final String GET_HOT = "getHot";
public static final String GET_FOLLOW = "getFollow";
public static final String GET_NEAR = "getNear";
public static final String PROFIT_LIST = "profitList";
public static final String CONSUME_LIST = "consumeList";
public static final String BLIND_BOX_LIST = "blindBoxList";
public static final String GET_BASE_INFO = "getBaseInfo";
public static final String SET_BLACK = "setBlack";
public static final String GET_SETTING_LIST = "getSettingList";
public static final String SEARCH = "search";
public static final String GET_FOLLOW_LIST = "getFollowList";
public static final String GET_FANS_LIST = "getFansList";
public static final String UPDATE_AVATAR = "updateAvatar";
public static final String UPDATE_FIELDS = "updateFields";
public static final String GET_MY_IMPRESS = "getMyImpress";
public static final String GET_PROFIT = "getProfit";
public static final String GET_USER_ACCOUNT_LIST = "getUserAccountList";
public static final String ADD_CASH_ACCOUNT = "addCashAccount";
public static final String DEL_CASH_ACCOUNT = "deleteCashAccount";
public static final String DO_CASH = "doCash";
public static final String GET_CLASS_LIVE = "getClassLive";
public static final String GET_RECOMMEND = "getRecommend";
public static final String RECOMMEND_FOLLOW = "recommendFollow";
public static final String GET_REGISTER_CODE = "getRegisterCode";
public static final String REGISTER = "register";
public static final String FIND_PWD = "findPwd";
public static final String GET_FIND_PWD_CODE = "getCode";
public static final String GET_QR_CODE = "getQrCode";
public static final String MODIFY_PWD = "modifyPwd";
public static final String HOME_TOP = "getHomeTop";
public static final String SEND_DYNAMICGIFT = "sendDynamicGift";
public static final String GET_DYNAMICGIFTINFO = "getDynamicGiftInfo";
public static final String GET_DYNAMICSENDGIFTLIST = "getDynamicSendGiftList";
public static final String ISANCHOR = "isAnchor";
public static final String GET_RANDOM= "getRandom";
public static final String GET_HOME_FOLLOW= "Home.getFollow";
public static final String GET_USER_FRONTTASKTYPE= "getUserFrontTaskType";
public static final String UPDATEBINDMOBILE = "updateBindMobile";
public static final String BINDMOBILE = "bindMobile";
public static final String GETCUSTOMERSERVICE = "getCustomerService";
public static final String GETINSTRUCTORREMARK = "getInstructorRemark";
public static final String ISINSTRUCTOR = "isInstructor";
}

View File

@@ -0,0 +1,776 @@
package com.shayu.onetoone.utils;
import android.util.Log;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.AppUtils;
import com.blankj.utilcode.util.DeviceUtils;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.CommonAppContext;
import com.yunbao.common.bean.GoogleBean;
import com.yunbao.common.bean.UserBean;
import com.yunbao.common.event.UpdateTablePointMe;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.http.HttpClient;
import com.yunbao.common.interfaces.CommonCallback;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.MD5Util;
import com.yunbao.common.utils.SpUtil;
import com.yunbao.common.utils.VersionUtil;
import org.greenrobot.eventbus.EventBus;
import java.io.File;
import java.net.NetworkInterface;
import java.util.Collections;
import java.util.List;
/**
* Created by cxf on 2018/9/17.
*/
public class MainHttpUtil {
private static final String SALT = "76576076c1f5f657b634e966c8836a06";
private static final String DEVICE = "android";
/**
* 取消网络请求
*/
public static void cancel(String tag) {
HttpClient.getInstance().cancel(tag);
}
/**
* 手机号 密码登录
*/
public static void login(String phoneNum, String pwd, String uuid, HttpCallback callback) {
HttpClient.getInstance().get("Login.userLogin", MainHttpConsts.LOGIN)
.params("user_login", phoneNum)
.params("user_pass", pwd)
.params("pushid", "")
.params("lastlogindevice", "Android")
.params("uuid_Device", uuid)
.execute(callback);
}
/**
* 第三方登录
*/
public static void loginByThird(String openid, String nicename, String avatar, String type, HttpCallback callback) {
String sign = MD5Util.getMD5("openid=" + openid + "&" + SALT);
HttpClient.getInstance().get("Login.userLoginByThird", MainHttpConsts.LOGIN_BY_THIRD)
.params("openid", openid)
.params("nicename", nicename)
.params("app_source", CommonAppConfig.IS_GOOGLE_PLAY == true ? "1" : "3")
.params("avatar", avatar)
.params("type", type)
.params("source", DEVICE)
.params("sign", sign)
.params("lastlogindevice", "Android")
.params("pushid", "")
.execute(callback);
}
/**
* 第三方登录---增加参数:推广码,手机唯一标识
*/
public static void loginByThird(String UserID, String openid, String promoCode, String uuidDevice, String nicename, String avatar, String type, HttpCallback callback) {
String sign = MD5Util.getMD5("openid=" + openid + "&" + SALT);
HttpClient.getInstance().get("Login.userLoginByThird", MainHttpConsts.LOGIN_BY_THIRD)
.params("openid", openid)
.params("app_source", CommonAppConfig.IS_GOOGLE_PLAY == true ? "1" : "3")
.params("admin_id", promoCode)
.params("uuid_Device", uuidDevice)
.params("nicename", nicename)
.params("avatar", avatar)
.params("type", type)
.params("user_id", UserID)
.params("source", DEVICE)
.params("sign", sign)
.params("lastlogindevice", "Android")
.params("pushid", "")
.execute(callback);
}
/**
* 请求签到奖励
*/
public static void requestBonus(HttpCallback callback) {
String appVer = AppUtils.getAppVersionName();
HttpClient.getInstance().get("User.bonus", MainHttpConsts.REQUEST_BONUS)
.params("appAndroidVersion", appVer)
.execute(callback);
}
/**
* 新版本签到奖励
*/
public static void requestNewBonus(HttpCallback callback) {
HttpClient.getInstance().get("Sign.userSign", MainHttpConsts.REQUEST_BONUS)
.params("uuid_Device", DeviceUtils.getUniqueDeviceId())
.params("lastlogindevice", "Android")
.params("model", android.os.Build.BRAND + android.os.Build.MODEL)
.execute(callback);
}
/**
* 获取签到奖励
*/
public static void getBonus(HttpCallback callback) {
HttpClient.getInstance().get("User.getBonus", MainHttpConsts.GET_BONUS)
.execute(callback);
}
/**
* 用于用户首次登录设置分销关系
*/
public static void setDistribut(String code, HttpCallback callback) {
HttpClient.getInstance().get("User.setDistribut", MainHttpConsts.SET_DISTRIBUT)
.params("code", code)
.execute(callback);
}
/**
* 首页直播
*/
public static void getHot(int p, HttpCallback callback) {
HttpClient.getInstance().get("Home.getHot", MainHttpConsts.GET_HOT)
.params("p", p)
.execute(callback);
}
/**
* 首页推荐直播
*/
public static void getRandom(int p, HttpCallback callback) {
HttpClient.getInstance().get("Home.getRandom", MainHttpConsts.GET_RANDOM)
.execute(callback);
}
/**
* 首页关注直播
*/
public static void getHomeFollow(int p, HttpCallback callback) {
HttpClient.getInstance().get("Home.getFollow", MainHttpConsts.GET_HOME_FOLLOW)
.params("p", p)
.execute(callback);
}
/**
* 首页红包专区
*/
public static void getRedPacket(int p, HttpCallback callback) {
HttpClient.getInstance().get("Home.getRedPacket", MainHttpConsts.GET_RANDOM)
.execute(callback);
}
/**
* 首页
*/
public static void getFollow(int p, HttpCallback callback) {
HttpClient.getInstance().get("Home.getFollow", MainHttpConsts.GET_FOLLOW)
.params("p", p)
.execute(callback);
}
/**
* 首页 附近
*/
public static void getNear(int p, HttpCallback callback) {
HttpClient.getInstance().get("Home.getNearby", MainHttpConsts.GET_NEAR)
.params("lng", CommonAppConfig.getInstance().getLng())
.params("lat", CommonAppConfig.getInstance().getLat())
.params("p", p)
.execute(callback);
}
//排行榜 魅力榜
public static void profitList(String type, int p, HttpCallback callback) {
HttpClient.getInstance().get("Home.profitList", MainHttpConsts.PROFIT_LIST)
.params("type", type)
.params("p", p)
.execute(callback);
}
//排行榜 豪气榜
public static void consumeList(String type, int p, HttpCallback callback) {
HttpClient.getInstance().get("Home.consumeList", MainHttpConsts.CONSUME_LIST)
.params("type", type)
.params("p", p)
.execute(callback);
}
//排行榜 盲盒榜
public static void blindBoxList(String type, int p, HttpCallback callback) {
HttpClient.getInstance().get("Home.blindBoxList", MainHttpConsts.BLIND_BOX_LIST)
.params("type", type)
.params("p", p)
.execute(callback);
}
/**
* 获取谷歌
*/
public static void getGoogle(String token, final CommonCallback<GoogleBean> commonCallback) {
HttpClient.getInstance().get("Charge.getChargeHide", MainHttpConsts.GET_BASE_INFO)
.params("terminal", "1")
.params("token", token)
.execute(new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String info[]) {
if (code == 0) {
JSONObject obj = JSON.parseObject(info[0]);
GoogleBean bean = JSON.toJavaObject(obj, GoogleBean.class);
if (commonCallback != null) {
Log.i("tag", bean.getIs_hide());
commonCallback.callback(bean);
}
}
}
@Override
public void onError() {
if (commonCallback != null) {
commonCallback.callback(null);
}
}
});
}
/**
* 获取用户信息
*/
public static void getBaseInfo(String uid, String token, final CommonCallback<UserBean> commonCallback) {
HttpClient.getInstance().get("User.getBaseInfos", MainHttpConsts.GET_BASE_INFO)
.execute(new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0 && info.length > 0) {
IMLoginManager.get(CommonAppContext.sInstance.getApplicationContext()).upDataUserInfo(info[0]);
JSONObject obj = JSON.parseObject(info[0]);
UserBean bean = JSON.toJavaObject(obj, UserBean.class);
bean.setMedalName(obj.getString("medal_name"));
bean.setMedalLevel(obj.getIntValue("medal_level"));
CommonAppConfig.getInstance().setUserBean(bean);
CommonAppConfig.getInstance().setUserItemList(obj.getString("list"));
bean.seUserInfoComplete(obj.getIntValue("user_info_complete"));
SpUtil.getInstance().setStringValue(SpUtil.USER_INFO, info[0]);
if (commonCallback != null) {
commonCallback.callback(bean);
}
if ("0".equals(bean.getFront_task())) {
EventBus.getDefault().post(new UpdateTablePointMe(0));
} else {
EventBus.getDefault().post(new UpdateTablePointMe(1));
}
}
}
@Override
public void onError() {
if (commonCallback != null) {
commonCallback.callback(null);
}
}
});
}
public static void getBaseInfos(String uid, String token, HttpCallback callback) {
HttpClient.getInstance().get("User.getBaseInfos", MainHttpConsts.GET_BASE_INFO)
.execute(callback);
}
/**
* 获取用户信息
*/
public static void getBaseInfo(CommonCallback<UserBean> commonCallback) {
getBaseInfo(CommonAppConfig.getInstance().getUid(),
CommonAppConfig.getInstance().getToken(),
commonCallback);
}
/**
* 获取用户钱
*/
public static void getBalance(HttpCallback callback) {
HttpClient.getInstance().get("User.getUserBalance", "User.getUserBalance")
.execute(callback);
}
/**
* 获取谷歌上架
*/
public static void getGoogle(CommonCallback<GoogleBean> commonCallback) {
getGoogle(CommonAppConfig.getInstance().getToken(),
commonCallback);
}
/**
* 拉黑对方, 解除拉黑
*/
public static void setBlack(String toUid, HttpCallback callback) {
HttpClient.getInstance().get("User.setBlack", MainHttpConsts.SET_BLACK)
.params("touid", toUid)
.execute(callback);
}
/**
* 获取个性设置列表
*/
public static void getSettingList(HttpCallback callback) {
HttpClient.getInstance().get("User.getPerSetting", MainHttpConsts.GET_SETTING_LIST)
.params("version", VersionUtil.getVersion())
.execute(callback);
}
/**
* 搜索
*/
public static void search(String key, int type, int p, HttpCallback callback) {
HttpClient.getInstance().get("Home.search", MainHttpConsts.SEARCH)
.params("key", key)
.params("type", type)
.params("p", p)
.execute(callback);
}
/**
* 搜索
*/
public static void searchnew(String fan_key, String jian_key, int type, int p, HttpCallback callback) {
HttpClient.getInstance().get("", MainHttpConsts.SEARCH)
.params("jian_key", jian_key)
.params("fan_key", fan_key)
.params("type", type)
.params("p", p)
.execute(callback);
}
/**
* 获取我的拉黑列表
*/
public static void getBlackList(int p, HttpCallback callback) {
HttpClient.getInstance().get("User.getBlackList", "User.getBlackList")
.params("p", p)
.execute(callback);
}
/**
* 获取对方的关注列表
*
* @param touid 对方的uid
*/
public static void getFollowList(String touid, int p, HttpCallback callback) {
HttpClient.getInstance().get("User.getFollowsList", MainHttpConsts.GET_FOLLOW_LIST)
.params("touid", touid)
.params("p", p)
.execute(callback);
}
/**
* 获取对方的粉丝列表
*
* @param touid 对方的uid
*/
public static void getFansList(String touid, int p, HttpCallback callback) {
HttpClient.getInstance().get("User.getFansList", MainHttpConsts.GET_FANS_LIST)
.params("touid", touid)
.params("p", p)
.execute(callback);
}
/**
* 上传头像用post
*/
public static void updateAvatar(File file, HttpCallback callback) {
HttpClient.getInstance().post("User.updateAvatar", MainHttpConsts.UPDATE_AVATAR)
.isMultipart(true)
.params("file", file)
.execute(callback);
}
/**
* 更新用户资料
*
* @param fields 用户资料 ,以json形式出现
*/
public static void updateFields(String fields, HttpCallback callback) {
HttpClient.getInstance().get("User.updateFields", MainHttpConsts.UPDATE_FIELDS)
.params("fields", fields)
.execute(callback);
}
/**
* 获取 我的收益 可提现金额数
*/
public static void getProfit(HttpCallback callback) {
HttpClient.getInstance().get("User.getProfit", MainHttpConsts.GET_PROFIT)
.execute(callback);
}
/**
* 获取 提现账户列表
*/
public static void getCashAccountList(HttpCallback callback) {
HttpClient.getInstance().get("User.getUserAccountList", MainHttpConsts.GET_USER_ACCOUNT_LIST)
.execute(callback);
}
/**
* 添加 提现账户
*/
public static void addCashAccount(String account, String name, String bank, int type, HttpCallback callback) {
HttpClient.getInstance().get("User.setUserAccount", MainHttpConsts.ADD_CASH_ACCOUNT)
.params("account", account)
.params("name", name)
.params("account_bank", bank)
.params("type", type)
.execute(callback);
}
/**
* 删除 提现账户
*/
public static void deleteCashAccount(String accountId, HttpCallback callback) {
HttpClient.getInstance().get("User.delUserAccount", MainHttpConsts.DEL_CASH_ACCOUNT)
.params("id", accountId)
.execute(callback);
}
/**
* 提现
*/
public static void doCash(String votes, String accountId, HttpCallback callback) {
HttpClient.getInstance().get("User.setCash", MainHttpConsts.DO_CASH)
.params("cashvote", votes)//提现的票数
.params("accountid", accountId)//账号ID
.execute(callback);
}
/**
* 分类直播
*/
public static void getClassLive(int classId, int p, HttpCallback callback) {
HttpClient.getInstance().get("Home.getClassLive", MainHttpConsts.GET_CLASS_LIVE)
.params("liveclassid", classId)
.params("p", p)
.execute(callback);
}
/**
* 获取自己收到的主播印象列表
*/
public static void getMyImpress(HttpCallback callback) {
HttpClient.getInstance().get("User.getMyLabel", MainHttpConsts.GET_MY_IMPRESS)
.execute(callback);
}
/**
* 用于用户首次登录推荐
*/
public static void getRecommend(HttpCallback callback) {
HttpClient.getInstance().get("Home.getRecommend", MainHttpConsts.GET_RECOMMEND)
.execute(callback);
}
/**
* 用于用户首次登录推荐,关注主播
*/
public static void recommendFollow(String touid, HttpCallback callback) {
HttpClient.getInstance().get("Home.attentRecommend", MainHttpConsts.RECOMMEND_FOLLOW)
.params("touid", touid)
.execute(callback);
}
/**
* 获取验证码接口 注册用
*/
public static void getRegisterCode(String mobile, HttpCallback callback) {
String sign = MD5Util.getMD5("mobile=" + mobile + "&" + SALT);
HttpClient.getInstance().get("Login.getCode", MainHttpConsts.GET_REGISTER_CODE)
.params("mobile", mobile)
.params("sign", sign)
.params("source", "1")
.execute(callback);
}
/**
* 获取验证码接口 注册用
* 增加:国家代码
*/
public static void getRegisterCode(String Randstr, String Ticket, String mobile, int countryCode, HttpCallback callback) {
String sign = MD5Util.getMD5("mobile=" + mobile + "&" + SALT);
String uuid = DeviceUtils.getUniqueDeviceId();
HttpClient.getInstance().get("Login.getCode", MainHttpConsts.GET_REGISTER_CODE)
.params("mobile", mobile)
.params("country_code", countryCode + "")
.params("sign", sign)
.params("Randstr", Randstr)
.params("Ticket", Ticket)
.params("MacAddress", getNewMac())
.params("Imei", uuid)
.params("source", "1")
.execute(callback);
}
/**
* 第三方绑定手机号
*/
public static void bindPhone(String mobile, int countryCode, String uid, String token, String user_pass, String user_pass2, String code, HttpCallback callback) {
HttpClient.getInstance().get("Login.bindMobile", MainHttpConsts.BINDMOBILE)
.params("mobile", mobile)
.params("country_code", countryCode + "")
.params("uid", uid, true)
.params("token", token, true)
.params("user_pass", user_pass)
.params("user_pass2", user_pass2)
.params("code", code)
.execute(callback);
}
/**
* 修改绑定手机号
*/
public static void updateBindMobile(String mobile, int countryCode, String uid, String token, String code, HttpCallback callback) {
HttpClient.getInstance().get("Login.updateBindMobile", MainHttpConsts.UPDATEBINDMOBILE)
.params("mobile", mobile)
.params("country_code", countryCode + "")
.params("uid", uid, true)
.params("token", token, true)
.params("code", code)
.execute(callback);
}
// /**
// * 手机注册接口
// */
// public static void register(String user_login, String pass, String pass2, String code, HttpCallback callback) {
// HttpClient.getInstance().get("Login.userReg", MainHttpConsts.REGISTER)
// .params("user_login", user_login)
// .params("user_pass", pass)
// .params("user_pass2", pass2)
// .params("code", code)
// .params("source", DEVICE)
// .execute(callback);
// }
/**
* 手机注册接口---增加参数:推广码,手机唯一标识,国家代码
*/
public static void register(String UserID, String invitecode, String user_login, String promo_code, String uuidDevice, int countryCode, String pass, String pass2, String code, HttpCallback callback) {
HttpClient.getInstance().get("Login.userReg", MainHttpConsts.REGISTER)
.params("user_login", user_login)
.params("app_source", CommonAppConfig.IS_GOOGLE_PLAY == true ? "1" : "3")
//增加参数:推广码
.params("user_activation_key", promo_code)
.params("admin_id", promo_code)
.params("user_id", UserID)
//增加参数:手机唯一标识
.params("uuid_Device", uuidDevice)
//增加国家代码
.params("country_code", countryCode + "")
.params("user_pass", pass)
.params("user_pass2", pass2)
.params("code", code)
.params("source", DEVICE)
.params("invitation_code", invitecode)
.execute(callback);
}
/**
* 找回密码
*/
public static void findPwd(String user_login, String pass, String pass2, String code, HttpCallback callback) {
HttpClient.getInstance().get("Login.userFindPass", MainHttpConsts.FIND_PWD)
.params("user_login", user_login)
.params("user_pass", pass)
.params("user_pass2", pass2)
.params("code", code)
.execute(callback);
}
/**
* 重置密码
*/
public static void modifyPwd(String oldpass, String pass, String pass2, HttpCallback callback) {
HttpClient.getInstance().get("User.updatePass", MainHttpConsts.MODIFY_PWD)
.params("oldpass", oldpass)
.params("pass", pass)
.params("pass2", pass2)
.execute(callback);
}
/**
* 获取验证码接口 找回密码用
*/
public static void getFindPwdCode(String mobile, String country_code, HttpCallback callback) {
// String sign = MD5Util.getMD5("mobile=" + mobile + "&" + SALT);
HttpClient.getInstance().get("Login.getCode", MainHttpConsts.GET_FIND_PWD_CODE)
.params("mobile", mobile)
.params("country_code", country_code)
.params("source", "1")
.execute(callback);
}
/**
* 三级分销页面 获取二维码
*/
public static void getQrCode(HttpCallback callback) {
HttpClient.getInstance().get("Agent.getCode", MainHttpConsts.GET_QR_CODE)
.params("source", "1")
.execute(callback);
}
/**
* 首页的排行榜轮播
*/
public static void getHomeTop(HttpCallback callback) {
HttpClient.getInstance().get("Home.consumeproList", MainHttpConsts.HOME_TOP)
.params("type", "month")
.params("p", "1")
.execute(callback);
}
/**
* 动态赠送礼物
*/
public static void sendDynamicGift(String id, int gift_num, String gift_id, HttpCallback callback) {
HttpClient.getInstance().get("Community.sendDynamicGift", MainHttpConsts.SEND_DYNAMICGIFT)
.params("dynamic_id", id)
.params("gift_num", gift_num)
.params("gift_id", gift_id)
.execute(callback);
}
/**
* 动态赠送礼物列表
*/
public static void getDynamicGiftInfo(HttpCallback callback) {
HttpClient.getInstance().get("Community.getDynamicGiftInfo", MainHttpConsts.GET_DYNAMICGIFTINFO)
.execute(callback);
}
/**
* 社区动态礼物信息列表
*/
public static void getDynamicSendGiftList(String id, HttpCallback callback) {
HttpClient.getInstance().get("Community.getDynamicSendGiftList", MainHttpConsts.GET_DYNAMICSENDGIFTLIST)
.params("dynamic_id", id)
.execute(callback);
}
/**
* 是否是主播
*/
public static void isAnchor(HttpCallback callback) {
HttpClient.getInstance().get("User.isAnchor", MainHttpConsts.ISANCHOR)
.execute(callback);
}
/**
* 是否是完成任务
*/
public static void getUserFrontTaskType(HttpCallback callback) {
HttpClient.getInstance().get("Task.getUserFrontTaskType", MainHttpConsts.GET_USER_FRONTTASKTYPE)
.execute(callback);
}
/**
* 客服地址
*/
public static void getCustomerService(HttpCallback callback) {
HttpClient.getInstance().get("Home.getCustomerService", MainHttpConsts.GETCUSTOMERSERVICE)
.execute(callback);
}
/**
* 获取im备注信息
*/
public static void getInstructorRemark(HttpCallback callback) {
HttpClient.getInstance().get("User.getInstructorRemark", MainHttpConsts.GETINSTRUCTORREMARK)
.execute(callback);
}
/**
* 是否管理员
*/
public static void isInstructor(HttpCallback callback) {
HttpClient.getInstance().get("User.isInstructor", MainHttpConsts.ISINSTRUCTOR)
.execute(callback);
}
//
public static void setMessageReadAll() {
HttpClient.getInstance().get("User.getUserInstructor", "")
.execute(new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
}
});
}
/**
* 获取设备号有没有注册过
*/
public static void getDeviceLoginType(HttpCallback callback) {
HttpClient.getInstance().get("Login.getDeviceLoginType", "Login.getDeviceLoginType")
.params("uuid_Device", DeviceUtils.getUniqueDeviceId())
.execute(callback);
}
/**
* 通过网络接口取
* @return
*/
public static String getNewMac() {
try {
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif : all) {
if (!nif.getName().equalsIgnoreCase("wlan0")) continue;
byte[] macBytes = nif.getHardwareAddress();
if (macBytes == null) {
return null;
}
StringBuilder res1 = new StringBuilder();
for (byte b : macBytes) {
res1.append(String.format("%02X:", b));
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
return res1.toString();
}
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}

View File

@@ -0,0 +1,32 @@
package com.shayu.onetoone.utils;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import androidx.fragment.app.Fragment;
import io.rong.imkit.conversation.extension.RongExtension;
import io.rong.imkit.conversation.extension.component.plugin.IPluginModule;
public class MessageMsgInputPanelPlugin implements IPluginModule {
@Override
public Drawable obtainDrawable(Context context) {
return null;
}
@Override
public String obtainTitle(Context context) {
return null;
}
@Override
public void onClick(Fragment currentFragment, RongExtension extension, int index) {
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
}
}