From d82f89f11c9cd24d5855c83c51c06843a96d2339 Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Thu, 5 Oct 2023 14:12:03 +0800 Subject: [PATCH] update --- OneToOne/README.md | 61 ++ OneToOne/build.gradle | 2 +- OneToOne/src/main/AndroidManifest.xml | 12 +- .../java/com/shayu/onetoone/AppContext.java | 21 +- .../onetoone/activity/AbsOTOActivity.java | 20 + .../onetoone/activity/LauncherActivity.java | 43 +- .../shayu/onetoone/activity/MainActivity.java | 10 +- .../activity/fragments/BaseFragment.java | 11 + .../activity/fragments/DynamicFragment.java | 3 + .../activity/fragments/FriendsFragment.java | 3 + .../activity/fragments/MessageFragment.java | 3 + .../activity/fragments/MyFragment.java | 5 +- .../activity/fragments/home/HotFragment.java | 31 + .../fragments/home/RecommendFragment.java | 31 + .../message/ChatMessageFragment.java | 125 ++- .../fragments/message/MsgFriendFragment.java | 3 + .../fragments/message/MsgMessageFragment.java | 275 ++++++- .../activity/message/ChatActivity.java | 3 + .../message/MsgMoreConfigActivity.java | 3 + .../fragments/home/RecommendActivity.java | 27 - .../adapter/MsgGreetConfigAdapter.java | 3 + .../MsgMessageRecyclerViewAdapter.java | 9 +- .../onetoone/bean/MsgGreetConfigBean.java | 3 + .../shayu/onetoone/bean/MsgMessageBean.java | 3 + .../shayu/onetoone/dialog/MsgMoreDialog.java | 3 + .../shayu/onetoone/manager/OTONetManager.java | 56 ++ .../shayu/onetoone/manager/RouteManager.java | 6 +- .../java/com/shayu/onetoone/network/API.java | 100 +++ .../shayu/onetoone/network/OneToOneApi.java | 80 ++ .../provider/CustomConversationProvider.java | 23 + .../shayu/onetoone/utils/MainHttpConsts.java | 56 ++ .../shayu/onetoone/utils/MainHttpUtil.java | 776 ++++++++++++++++++ .../utils/MessageMsgInputPanelPlugin.java | 32 + .../res/drawable/bg_home_recommend_item.xml | 9 + .../src/main/res/drawable/bg_msg_send.xml | 9 + .../main/res/layout-v26/item_msg_message.xml | 71 -- .../src/main/res/layout/activity_launcher.xml | 39 +- .../src/main/res/layout/activity_msg_chat.xml | 1 - .../src/main/res/layout/fragment_dynamic.xml | 2 +- .../src/main/res/layout/fragment_friends.xml | 49 +- OneToOne/src/main/res/layout/fragment_hot.xml | 21 + OneToOne/src/main/res/layout/fragment_msg.xml | 5 +- .../main/res/layout/fragment_msg_message.xml | 54 +- OneToOne/src/main/res/layout/fragment_my.xml | 2 +- .../main/res/layout/fragment_recommend.xml | 31 + ...tivity_recommend.xml => item_home_hot.xml} | 0 .../main/res/layout/item_home_recommend.xml | 75 ++ .../src/main/res/layout/item_msg_message.xml | 66 -- .../res/layout/rc_conversationlist_item.xml | 83 ++ .../res/layout/rc_extension_input_panel.xml | 153 ++++ .../mipmap-xxhdpi/ic_home_recommend_chat.png | Bin 0 -> 20978 bytes .../ic_home_recommend_chat_up.png | Bin 0 -> 25052 bytes .../src/main/res/mipmap-xxhdpi/ic_msg_add.png | Bin 0 -> 4576 bytes .../main/res/mipmap-xxhdpi/ic_msg_audio.png | Bin 0 -> 5054 bytes .../main/res/mipmap-xxhdpi/ic_msg_call.png | Bin 0 -> 4473 bytes .../main/res/mipmap-xxhdpi/ic_msg_emoji.png | Bin 0 -> 5217 bytes .../main/res/mipmap-xxhdpi/ic_msg_gift.png | Bin 0 -> 3521 bytes .../main/res/mipmap-xxhdpi/ic_msg_image.png | Bin 0 -> 3860 bytes .../main/res/mipmap-xxhdpi/ic_msg_video.png | Bin 0 -> 3041 bytes .../res/mipmap-xxhdpi/ic_recommend_top.png | Bin 0 -> 8154 bytes common/build.gradle | 8 +- .../yunbao/common/utils/ProcessImageUtil.java | 22 +- .../live/activity/LiveRyAnchorActivity.java | 2 +- 63 files changed, 2221 insertions(+), 323 deletions(-) create mode 100644 OneToOne/README.md create mode 100644 OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/HotFragment.java create mode 100644 OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/RecommendFragment.java delete mode 100644 OneToOne/src/main/java/com/shayu/onetoone/activitys/fragments/home/RecommendActivity.java create mode 100644 OneToOne/src/main/java/com/shayu/onetoone/manager/OTONetManager.java create mode 100644 OneToOne/src/main/java/com/shayu/onetoone/network/API.java create mode 100644 OneToOne/src/main/java/com/shayu/onetoone/network/OneToOneApi.java create mode 100644 OneToOne/src/main/java/com/shayu/onetoone/provider/CustomConversationProvider.java create mode 100644 OneToOne/src/main/java/com/shayu/onetoone/utils/MainHttpConsts.java create mode 100644 OneToOne/src/main/java/com/shayu/onetoone/utils/MainHttpUtil.java create mode 100644 OneToOne/src/main/java/com/shayu/onetoone/utils/MessageMsgInputPanelPlugin.java create mode 100644 OneToOne/src/main/res/drawable/bg_home_recommend_item.xml create mode 100644 OneToOne/src/main/res/drawable/bg_msg_send.xml delete mode 100644 OneToOne/src/main/res/layout-v26/item_msg_message.xml create mode 100644 OneToOne/src/main/res/layout/fragment_hot.xml create mode 100644 OneToOne/src/main/res/layout/fragment_recommend.xml rename OneToOne/src/main/res/layout/{activity_recommend.xml => item_home_hot.xml} (100%) create mode 100644 OneToOne/src/main/res/layout/item_home_recommend.xml delete mode 100644 OneToOne/src/main/res/layout/item_msg_message.xml create mode 100644 OneToOne/src/main/res/layout/rc_conversationlist_item.xml create mode 100644 OneToOne/src/main/res/layout/rc_extension_input_panel.xml create mode 100644 OneToOne/src/main/res/mipmap-xxhdpi/ic_home_recommend_chat.png create mode 100644 OneToOne/src/main/res/mipmap-xxhdpi/ic_home_recommend_chat_up.png create mode 100644 OneToOne/src/main/res/mipmap-xxhdpi/ic_msg_add.png create mode 100644 OneToOne/src/main/res/mipmap-xxhdpi/ic_msg_audio.png create mode 100644 OneToOne/src/main/res/mipmap-xxhdpi/ic_msg_call.png create mode 100644 OneToOne/src/main/res/mipmap-xxhdpi/ic_msg_emoji.png create mode 100644 OneToOne/src/main/res/mipmap-xxhdpi/ic_msg_gift.png create mode 100644 OneToOne/src/main/res/mipmap-xxhdpi/ic_msg_image.png create mode 100644 OneToOne/src/main/res/mipmap-xxhdpi/ic_msg_video.png create mode 100644 OneToOne/src/main/res/mipmap-xxhdpi/ic_recommend_top.png diff --git a/OneToOne/README.md b/OneToOne/README.md new file mode 100644 index 000000000..ae0a93274 --- /dev/null +++ b/OneToOne/README.md @@ -0,0 +1,61 @@ +# 项目结构 +- `app` PDLive入口 +- `baidu` 百度模块,废弃 +- `beauty` 旧美颜模块,废弃 +- `common` 公共模块 +- `FaceUnity` 美颜模块 +- `lib_country_code` 不管他 +- `live` PDLive直播模块 +- `main` PDLive主页模块 +- `OneToOne` 1v1入口* +- `pluginsForAnchor` PDLive插件化打包模块 +- `Share` PDLive分享模块 +- `TabLayout` [滑动翻页库模块](!https://github.com/angcyo/DslTabLayout) +- `video` PDLive 视频模块 +- `ViewPager2Delegate` [滑动翻页附属模块](!https://github.com/angcyo/DslTabLayout) +# 运行说明 +Gradle版本: +distributionUrl=`https://services.gradle.org/distributions/gradle-6.1.1-all.zip` + +jdk版本:`11.0.2` + +AndroidStudio版本:`Android Studio Giraffe | 2022.3.1 Patch 2` + +### 若无法编译请检查`gradle.properties`的代理设置 + +# 1V1项目介绍 +## [项目文档](!https://alidocs.dingtalk.com/i/nodes/YQBnd5ExVEw1DlvwFNaZElK48yeZqMmz?utm_scene=person_space) +## [蓝图](!https://lanhuapp.com/web/#/item/project/stage?tid=a589c634-a1c0-415a-9691-7bad6c77312c&pid=be2586b6-6583-4447-ac83-bf9669ad4854) + +## 1v1项目结构 + +- `activity` 页面 +- - `fragments` +- - - `message` 消息页面外层内容 +- - `message` 消息页面独立Activity +- `adapter` 适配器 +- `bean` 数据Bean类 +- `dialog` 对话框类 +- `network` 网络请求 +- `manager` 单例模式 +- `utils` 工具类 +- `AppContext` Application + +### 项目说明 +[即时通讯(IM)融云SDK](!https://doc.rongcloud.cn/im/Android/5.X/ui/init) + +[实时音视频融云SDK](!https://doc.rongcloud.cn/call/Android/5.X/callkit/init) + +Activity 跳转用Route模块,参考`RouteManager`和`MainActivity` + +网络请求使用`OTONetManager` +图片加载使用`ImgLoader.display(Context context, String url, ImageView imageView)` + +### 签名文件 +签名暂时共享PDLive项目签名,用根目录下的`hdl.jks`,其余参考`build.gradle`文件 + +### APP账号密码 +运行PDLive项目,注册即可,暂时共用 + +### 混淆 +暂不混淆 \ No newline at end of file diff --git a/OneToOne/build.gradle b/OneToOne/build.gradle index 9b26cb6db..72e86dffc 100644 --- a/OneToOne/build.gradle +++ b/OneToOne/build.gradle @@ -94,7 +94,7 @@ dependencies { implementation 'com.google.android.exoplayer:exoplayer:2.18.5' implementation 'com.google.android.exoplayer:exoplayer-core:2.18.5@aar' - implementation 'cn.rongcloud.sdk:call_kit:5.2.0' // 音视频通话能力 UI 组件 + implementation 'cn.rongcloud.sdk:call_kit:5.5.0' // 音视频通话能力 UI 组件 implementation 'com.github.luqiming666:SwipeRecyclerView:1.4.8'//支持侧滑删除 implementation 'com.google.android.material:material:1.6.1' implementation 'com.blankj:utilcode:1.30.0'//獲取uuid diff --git a/OneToOne/src/main/AndroidManifest.xml b/OneToOne/src/main/AndroidManifest.xml index a1de195a8..eb9bd8076 100644 --- a/OneToOne/src/main/AndroidManifest.xml +++ b/OneToOne/src/main/AndroidManifest.xml @@ -112,8 +112,18 @@ + + + + + diff --git a/OneToOne/src/main/java/com/shayu/onetoone/AppContext.java b/OneToOne/src/main/java/com/shayu/onetoone/AppContext.java index 41a84d3ab..ef148d31b 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/AppContext.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/AppContext.java @@ -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 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; } }); diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/AbsOTOActivity.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/AbsOTOActivity.java index 0ed0ca6f5..0de909b71 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/AbsOTOActivity.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/AbsOTOActivity.java @@ -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) { diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/LauncherActivity.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/LauncherActivity.java index 564483d92..b7e2279a4 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/LauncherActivity.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/LauncherActivity.java @@ -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() { diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/MainActivity.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/MainActivity.java index 427012160..a98c1d431 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/MainActivity.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/MainActivity.java @@ -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 fragments = new ArrayList<>(); @@ -73,7 +81,7 @@ public class MainActivity extends AbsOTOActivity { return null; } }); - + RongcloudIMManager.connectIM(mContext); } @Override diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/BaseFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/BaseFragment.java index 12d0440f9..44f22bf16 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/BaseFragment.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/BaseFragment.java @@ -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); } diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/DynamicFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/DynamicFragment.java index a98ac352a..d44964874 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/DynamicFragment.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/DynamicFragment.java @@ -8,6 +8,9 @@ import android.view.ViewGroup; import com.shayu.onetoone.R; +/** + * 动态主页面 + */ public class DynamicFragment extends BaseFragment { @Override diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/FriendsFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/FriendsFragment.java index 5cde347cf..cd810cbc4 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/FriendsFragment.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/FriendsFragment.java @@ -8,6 +8,9 @@ import android.view.ViewGroup; import com.shayu.onetoone.R; +/** + * 交友主页面 + */ public class FriendsFragment extends BaseFragment { @Override public void initView(View itemView) { diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/MessageFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/MessageFragment.java index df5a7485e..23decc80c 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/MessageFragment.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/MessageFragment.java @@ -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 fragments = new ArrayList<>(); View more; diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/MyFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/MyFragment.java index 7ecef1a42..b9a30fb0b 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/MyFragment.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/MyFragment.java @@ -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); } } diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/HotFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/HotFragment.java new file mode 100644 index 000000000..0104f7bc6 --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/HotFragment.java @@ -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() { + + } +} diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/RecommendFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/RecommendFragment.java new file mode 100644 index 000000000..7a767b04d --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/home/RecommendFragment.java @@ -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() { + + } +} diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/ChatMessageFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/ChatMessageFragment.java index c52ce7e3c..71ce4d376 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/ChatMessageFragment.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/ChatMessageFragment.java @@ -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() { + 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()); + } + }); + + } } diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MsgFriendFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MsgFriendFragment.java index fb3147008..662d00a14 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MsgFriendFragment.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MsgFriendFragment.java @@ -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 diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MsgMessageFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MsgMessageFragment.java index 05f264f1d..d9889c879 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MsgMessageFragment.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MsgMessageFragment.java @@ -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 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() { + @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>() { + public void onChanged(List 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() { + 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() { + 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<>(); diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/message/ChatActivity.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/message/ChatActivity.java index bf9593678..b42d38eff 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/message/ChatActivity.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/message/ChatActivity.java @@ -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 diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/message/MsgMoreConfigActivity.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/message/MsgMoreConfigActivity.java index 5633bc174..8d12b7931 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/message/MsgMoreConfigActivity.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/message/MsgMoreConfigActivity.java @@ -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; diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activitys/fragments/home/RecommendActivity.java b/OneToOne/src/main/java/com/shayu/onetoone/activitys/fragments/home/RecommendActivity.java deleted file mode 100644 index bd31dfc3f..000000000 --- a/OneToOne/src/main/java/com/shayu/onetoone/activitys/fragments/home/RecommendActivity.java +++ /dev/null @@ -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) { - - } -} \ No newline at end of file diff --git a/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgGreetConfigAdapter.java b/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgGreetConfigAdapter.java index 04bfb5c23..f617bb03a 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgGreetConfigAdapter.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgGreetConfigAdapter.java @@ -19,6 +19,9 @@ import com.yunbao.common.interfaces.OnItemClickListener; import java.util.ArrayList; import java.util.List; +/** + * 打招呼设置适配器 + */ public class MsgGreetConfigAdapter extends RecyclerView.Adapter { List mList; Context mContext; diff --git a/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgMessageRecyclerViewAdapter.java b/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgMessageRecyclerViewAdapter.java index 4245877f4..f36303e04 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgMessageRecyclerViewAdapter.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/adapter/MsgMessageRecyclerViewAdapter.java @@ -16,6 +16,9 @@ import com.yunbao.common.glide.ImgLoader; import java.util.List; +/** + * 聊天列表适配器 + */ public class MsgMessageRecyclerViewAdapter extends RecyclerView.Adapter { List list; Context mContext; @@ -36,7 +39,7 @@ public class MsgMessageRecyclerViewAdapter extends RecyclerView.Adapter callback) { + API.get().pdLiveApi(mContext) + .getGiftNamingInfo(giftId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Consumer>() { + @Override + public void accept(ResponseModel liveGiftBeanResponseModel) throws Exception { + if (callback!=null){ + callback.onSuccess(liveGiftBeanResponseModel.getData().getInfo()); + } + } + }, new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + if (callback != null) { + callback.onError(mContext.getString(com.yunbao.common.R.string.net_error)); + } + } + }).isDisposed(); + } +*/ + +} diff --git a/OneToOne/src/main/java/com/shayu/onetoone/manager/RouteManager.java b/OneToOne/src/main/java/com/shayu/onetoone/manager/RouteManager.java index b7052c4ea..63958998d 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/manager/RouteManager.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/manager/RouteManager.java @@ -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() { diff --git a/OneToOne/src/main/java/com/shayu/onetoone/network/API.java b/OneToOne/src/main/java/com/shayu/onetoone/network/API.java new file mode 100644 index 000000000..e1f5634e4 --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/network/API.java @@ -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; + } +} diff --git a/OneToOne/src/main/java/com/shayu/onetoone/network/OneToOneApi.java b/OneToOne/src/main/java/com/shayu/onetoone/network/OneToOneApi.java new file mode 100644 index 000000000..9cb3ee677 --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/network/OneToOneApi.java @@ -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 { + + +} diff --git a/OneToOne/src/main/java/com/shayu/onetoone/provider/CustomConversationProvider.java b/OneToOne/src/main/java/com/shayu/onetoone/provider/CustomConversationProvider.java new file mode 100644 index 000000000..999092f29 --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/provider/CustomConversationProvider.java @@ -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 list, IViewProviderListener listener) { + super.bindViewHolder(holder, uiConversation, position, list, listener); + BaseUiConversation conversation = list.get(position); + + } +} diff --git a/OneToOne/src/main/java/com/shayu/onetoone/utils/MainHttpConsts.java b/OneToOne/src/main/java/com/shayu/onetoone/utils/MainHttpConsts.java new file mode 100644 index 000000000..bbf44837a --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/utils/MainHttpConsts.java @@ -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"; + +} diff --git a/OneToOne/src/main/java/com/shayu/onetoone/utils/MainHttpUtil.java b/OneToOne/src/main/java/com/shayu/onetoone/utils/MainHttpUtil.java new file mode 100644 index 000000000..fd0d4179d --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/utils/MainHttpUtil.java @@ -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 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 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 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 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 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; + } +} + + + + diff --git a/OneToOne/src/main/java/com/shayu/onetoone/utils/MessageMsgInputPanelPlugin.java b/OneToOne/src/main/java/com/shayu/onetoone/utils/MessageMsgInputPanelPlugin.java new file mode 100644 index 000000000..738a5c8c3 --- /dev/null +++ b/OneToOne/src/main/java/com/shayu/onetoone/utils/MessageMsgInputPanelPlugin.java @@ -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) { + + } +} diff --git a/OneToOne/src/main/res/drawable/bg_home_recommend_item.xml b/OneToOne/src/main/res/drawable/bg_home_recommend_item.xml new file mode 100644 index 000000000..272c1319d --- /dev/null +++ b/OneToOne/src/main/res/drawable/bg_home_recommend_item.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/OneToOne/src/main/res/drawable/bg_msg_send.xml b/OneToOne/src/main/res/drawable/bg_msg_send.xml new file mode 100644 index 000000000..61c18dbb6 --- /dev/null +++ b/OneToOne/src/main/res/drawable/bg_msg_send.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/OneToOne/src/main/res/layout-v26/item_msg_message.xml b/OneToOne/src/main/res/layout-v26/item_msg_message.xml deleted file mode 100644 index b739809f1..000000000 --- a/OneToOne/src/main/res/layout-v26/item_msg_message.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OneToOne/src/main/res/layout/activity_launcher.xml b/OneToOne/src/main/res/layout/activity_launcher.xml index d2960a407..2d05c2df0 100644 --- a/OneToOne/src/main/res/layout/activity_launcher.xml +++ b/OneToOne/src/main/res/layout/activity_launcher.xml @@ -1,10 +1,41 @@ - - \ No newline at end of file + + + + +