diff --git a/OneToOne/build.gradle b/OneToOne/build.gradle index 6c9aec0f9..3ee553ea2 100644 --- a/OneToOne/build.gradle +++ b/OneToOne/build.gradle @@ -83,13 +83,19 @@ android { } } + applicationVariants.all { variant -> + variant.outputs.all { + outputFileName = "[${new Date().format("MM-dd", TimeZone.getTimeZone("GMT+8"))}]1v1社交-${rootProject.ext.android.otoversionName}-${variant.buildType.name}.apk" + + } + } defaultConfig { applicationId "com.shayu.onetoonenew" minSdkVersion rootProject.ext.android.minSdkVersion targetSdkVersion rootProject.ext.android.targetSdkVersion - versionCode rootProject.ext.android.versionCode - versionName rootProject.ext.android.versionName + versionCode rootProject.ext.android.otoversionCode + versionName rootProject.ext.android.otoversionName manifestPlaceholders = rootProject.ext.manifestPlaceholders ndk { abiFilters "armeabi-v7a", "arm64-v8a" @@ -111,6 +117,12 @@ android { storeFile file('../hdl.jks') storePassword 'phonelive' } + debug { + keyAlias 'phonelive' + keyPassword 'phonelive' + storeFile file('../hdl.jks') + storePassword 'phonelive' + } //陌陌本地配置需要 config {//TODO BEAUTYSDK 这里需要配置keystore相关信息 keyAlias 'phonelive' diff --git a/OneToOne/src/main/AndroidManifest.xml b/OneToOne/src/main/AndroidManifest.xml index 7938f62da..d82f66e89 100644 --- a/OneToOne/src/main/AndroidManifest.xml +++ b/OneToOne/src/main/AndroidManifest.xml @@ -119,12 +119,15 @@ android:exported="true" /> { String age = getRadioButtonValue(ageRadioGroup); String sex = getRadioButton(sexRadioGroup).getTag().toString(); - String auth = getRadioButtonValue(authRadioGroup); + String auth = getRadioButtonTag(authRadioGroup); if (isRadioButtonEmpty(ageRadioGroup)) { age = ""; } @@ -57,6 +57,9 @@ public class HomeScreenActivity extends AbsOTOActivity { if (sex.equals("all")) { sex = ""; } + if(auth.equals("all")){ + auth="0"; + } if (StringUtil.isEmptyAll(age, auth, sex)) { RouteManager.forwardMainActivity(); } else { @@ -77,11 +80,23 @@ public class HomeScreenActivity extends AbsOTOActivity { bundle.putString("search",search); RouteManager.forwardActivity(RouteManager.ACTIVITY_HOME_SEARCH,bundle); }); + findViewById(R.id.reset).setOnClickListener(v ->{ + setRadioButtonValue(ageRadioGroup,R.id.age_all); + setRadioButtonValue(sexRadioGroup,R.id.sex_all); + setRadioButtonValue(authRadioGroup,R.id.auth_all); + RouteManager.forwardMainActivity(); + }); } String getRadioButtonValue(FlexBoxRadioGroup group) { return ((RadioButton) findViewById(group.getCheckedRadioButtonId())).getText().toString(); } + String getRadioButtonTag(FlexBoxRadioGroup group) { + return ((RadioButton) findViewById(group.getCheckedRadioButtonId())).getTag().toString(); + } + void setRadioButtonValue(FlexBoxRadioGroup group, int id) { + group.check(id); + } boolean isRadioButtonEmpty(FlexBoxRadioGroup group) { RadioButton button = (RadioButton) findViewById(group.getCheckedRadioButtonId()); diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/HomeSearchActivity.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/HomeSearchActivity.java index cf2059dc1..67c8f621c 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/HomeSearchActivity.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/HomeSearchActivity.java @@ -15,6 +15,7 @@ import com.shayu.onetoone.adapter.HomeRecommendListAdapter; import com.shayu.onetoone.bean.HomeItemBean; import com.shayu.onetoone.manager.OTONetManager; import com.shayu.onetoone.manager.RouteManager; +import com.yunbao.common.adapter.SpaceGridItemDecoration; import com.yunbao.common.http.base.HttpCallback; import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.ToastUtil; @@ -70,7 +71,7 @@ public class HomeSearchActivity extends AbsOTOActivity { searchList.setAdapter(searchListAdapter); recommendList.setAdapter(recommendListAdapter); - + recommendList.addItemDecoration(new SpaceGridItemDecoration(10)); refresh.setOnClickListener(v -> refresh()); 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 f3bbffb7b..2ec1eac28 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/MainActivity.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/MainActivity.java @@ -36,6 +36,7 @@ import com.yunbao.common.interfaces.OnItemClickListener; import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.manager.imrongcloud.RongcloudIMManager; import com.yunbao.common.utils.Bus; +import com.yunbao.common.utils.SpUtil; import com.yunbao.common.utils.ToastUtil; import org.greenrobot.eventbus.Subscribe; @@ -137,6 +138,7 @@ public class MainActivity extends AbsOTOActivity { if (!isHome && data.getChat() != 0) { isShow = false; } + SpUtil.setStringValue("match_data",JSONObject.toJSONString(data)); Bus.get().post(new HomeBusEvent(HomeBusEvent.TYPE_UPDATE_MATCHING, data.getNum())); if (isShow) { new FirstTipsDialog(mContext) @@ -186,7 +188,6 @@ public class MainActivity extends AbsOTOActivity { super.onResume(); checkUserInfoIsSet(); initFirstLoginTips(); - ToastUtil.showDebug("2"); } /** @@ -215,7 +216,10 @@ public class MainActivity extends AbsOTOActivity { Bus.get().post(new MessageMsgBusEvent(MessageMsgBusEvent.TYPE_UPDATE_POINT, MsgMessageFragment.systemPoint + count)); return; } - RongIMClient.getInstance().getTotalUnreadCount(new RongIMClient.ResultCallback() { + + RongIMClient.getInstance().getUnreadCount(new Conversation.ConversationType[]{Conversation.ConversationType.PRIVATE} + ,false + ,new RongIMClient.ResultCallback() { @Override public void onSuccess(Integer integer) { updateUnreadCount(MsgMessageFragment.systemPoint + integer); diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/MatchingActivity.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/MatchingActivity.java index b46d76ef8..4d7a5866c 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/MatchingActivity.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/MatchingActivity.java @@ -92,7 +92,7 @@ public class MatchingActivity extends AbsOTOActivity { bean = JSONObject.parseObject(data, SendConsumeBean.class); if (bean != null) { MatchingActivity.this.bundle=bundle; - new Handler(Looper.getMainLooper()).postDelayed(toCallRunnable, 5000); + new Handler(Looper.getMainLooper()).postDelayed(toCallRunnable, 1000); return false; } } @@ -164,7 +164,7 @@ public class MatchingActivity extends AbsOTOActivity { bundle.putInt("type", ChatActivity.CALL_CHAT_TYPE_MATCH); bundle.putString("data", JSONObject.toJSONString(bean)); MatchingActivity.this.bundle = bundle; - handler.postDelayed(toCallRunnable, 5000); + handler.postDelayed(toCallRunnable, 1000); } @Override 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 6dc32dab8..73583b1a4 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 @@ -43,17 +43,18 @@ public class DynamicFragment extends BaseFragment { settings.setJavaScriptCanOpenWindowsAutomatically(true); // 是否允许JS打开新窗口 settings.setDomStorageEnabled(true); webView.addJavascriptInterface(JavascriptInterfaceUtils.getInstance().setmContext(getActivity(), webView) + .setPermitSetHigh(false) .setPageClose(true) .setLiveZhuangBana(false), "androidObject"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); } - AndroidBug5497Workaround.assistActivity(getActivity()); + // AndroidBug5497Workaround.assistActivity(getActivity()); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { - Log.e("H5-------->" , url); + Log.e("H5-------->", url); if (url.startsWith(Constants.COPY_PREFIX)) { String content = url.substring(Constants.COPY_PREFIX.length()); if (!TextUtils.isEmpty(content)) { @@ -77,11 +78,12 @@ public class DynamicFragment extends BaseFragment { } }); IMLoginModel userInfo = IMLoginManager.get(mContext).getUserInfo(); - String url=CommonAppConfig.HOST + "/h5/shequ/index.html#/h5/shequ?stack-key-1=698c5f85%20&uid=" + String url = CommonAppConfig.HOST + "/h5/shequ/index.html#/h5/shequ?stack-key-1=698c5f85%20&uid=" + userInfo.getId() + "&token=" + userInfo.getToken() + "&isZh=" + (WordUtil.isNewZh() ? "1" : "0"); - Log.i("Web",url); + Log.i("Web", url); webView.loadUrl(url); } + /** * 复制到剪贴板 */ @@ -91,6 +93,7 @@ public class DynamicFragment extends BaseFragment { cm.setPrimaryClip(clipData); ToastUtil.show(getString(R.string.copy_success)); } + @Override public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_dynamic, container, false); 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 f79196adc..68294ba66 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 @@ -5,18 +5,38 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.viewpager2.adapter.FragmentStateAdapter; import androidx.viewpager2.widget.ViewPager2; +import com.alibaba.fastjson.JSONObject; import com.angcyo.tablayout.DslTabLayout; import com.angcyo.tablayout.delegate2.ViewPager2Delegate; import com.shayu.onetoone.R; import com.shayu.onetoone.activity.fragments.home.HotFragment; import com.shayu.onetoone.activity.fragments.home.RecommendFragment; +import com.shayu.onetoone.activity.message.ChatActivity; +import com.shayu.onetoone.bean.MatchingItemSizeBean; +import com.shayu.onetoone.bean.MessageConsumeConfigBean; +import com.shayu.onetoone.bean.SendConsumeBean; +import com.shayu.onetoone.dialog.TipsDialog; +import com.shayu.onetoone.event.HomeBusEvent; +import com.shayu.onetoone.listener.OnSendMessageListener; +import com.shayu.onetoone.manager.OTONetManager; import com.shayu.onetoone.manager.RouteManager; +import com.shayu.onetoone.manager.SendMessageManager; +import com.yunbao.common.http.base.HttpCallback; +import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.utils.Bus; +import com.yunbao.common.utils.SpUtil; +import com.yunbao.common.utils.StringUtil; +import com.yunbao.common.utils.WordUtil; + +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; import java.util.List; @@ -26,37 +46,141 @@ import java.util.List; */ public class FriendsFragment extends BaseFragment { List fragments = new ArrayList<>(); - @Override + ImageView matching; + + @Override + public void onDestroy() { + super.onDestroy(); + Bus.getOff(this); + } + + ViewPager2 viewPager2; + + @Override public void initView(View itemView) { - ViewPager2 viewPager2 = itemView.findViewById(R.id.viewPager); - DslTabLayout tabLayout = itemView.findViewById(R.id.dslTabLayout); - ViewPager2Delegate.Companion.install(viewPager2, tabLayout, false); + Bus.getOn(this); + viewPager2 = itemView.findViewById(R.id.viewPager); + DslTabLayout tabLayout = itemView.findViewById(R.id.dslTabLayout); + ViewPager2Delegate.Companion.install(viewPager2, tabLayout, false); + matching = itemView.findViewById(R.id.matching); - fragments.add(new RecommendFragment());//消息 - 消息 - fragments.add(new HotFragment()); //消息 - 好友 - viewPager2.setAdapter(new FragmentStateAdapter(this) { - @NonNull - @Override - public Fragment createFragment(int position) { - return fragments.get(position); - } + fragments.add(new RecommendFragment());//消息 - 消息 + fragments.add(new HotFragment()); //消息 - 好友 + viewPager2.setAdapter(new FragmentStateAdapter(this) { + @NonNull + @Override + public Fragment createFragment(int position) { + return fragments.get(position); + } - @Override - public int getItemCount() { - return fragments.size(); - } - }); - findViewById(R.id.btn_top).setOnClickListener(v -> RouteManager.forwardActivity(RouteManager.ACTIVITY_HOME_RANK)); - findViewById(R.id.btn_filter).setOnClickListener(v -> RouteManager.forwardActivity(RouteManager.ACTIVITY_HOME_SCREEN)); + @Override + public int getItemCount() { + return fragments.size(); + } + }); + findViewById(R.id.btn_top).setOnClickListener(v -> RouteManager.forwardActivity(RouteManager.ACTIVITY_HOME_RANK)); + findViewById(R.id.btn_filter).setOnClickListener(v -> RouteManager.forwardActivity(RouteManager.ACTIVITY_HOME_SCREEN)); - Bundle screen = getActivity().getIntent().getBundleExtra("screen"); - if(screen!=null){ - viewPager2.setCurrentItem(0); - } + Bundle screen = getActivity().getIntent().getBundleExtra("screen"); + if (screen != null) { + viewPager2.setCurrentItem(0); + } + + + matching.setOnClickListener(v -> { + SendMessageManager.matching(new OnSendMessageListener() { + @Override + public void onSuccess(String token, SendConsumeBean bean) { + super.onSuccess(token, bean); + Bundle bundle = new Bundle(); + bundle.putInt("type", ChatActivity.CALL_CHAT_TYPE_MATCH); + bundle.putString("data", JSONObject.toJSONString(bean)); + if (configBean != null) { + bundle.putInt("time", configBean.getMateTime()); + } else { + bundle.putInt("time", 5); + } + RouteManager.forwardActivity(RouteManager.ACTIVITY_MATCHING, bundle); + } + + @Override + public void onError(int status, String msg, SendConsumeBean bean) { + super.onError(status, msg, bean); + int money = 100; + if (configBean != null) { + money = configBean.getMatePrice(); + } + new TipsDialog(mContext) + .setTitle(WordUtil.getNewString(R.string.not_money)) + .setContent(String.format(WordUtil.getNewString(R.string.not_money_video_tips), money)) + .setCancelText(WordUtil.getNewString(R.string.dialog_cancel_tip)) + .setApplyText(WordUtil.getNewString(R.string.dialog_to_money_tip)) + .showDialog(); + } + }); + + }); + initMateConfig(); + } + + private MessageConsumeConfigBean configBean; + + private void initMateConfig() { + OTONetManager.getInstance(mContext) + .getMessageConsumeConfig(IMLoginManager.get(mContext).getUserInfo().getId() + "", new HttpCallback() { + @Override + public void onSuccess(MessageConsumeConfigBean data) { + configBean = data; + } + + @Override + public void onError(String error) { + + } + }); + } + + @Override + public void onResume() { + super.onResume(); + String value = SpUtil.getStringValue("match_data"); + if (!StringUtil.isEmpty(value)) { + MatchingItemSizeBean data = JSONObject.parseObject(value, MatchingItemSizeBean.class); + if (data.getNum() > 0) { + matching.setImageResource(R.mipmap.ic_matching_free); + } else { + matching.setImageResource(R.mipmap.ic_matching); + } + } + Bundle screen = getActivity().getIntent().getBundleExtra("screen"); + if (screen != null) { + ((RecommendFragment)fragments.get(0)).screen(screen); + viewPager2.setCurrentItem(0); + } } @Override public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_friends, container, false); } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void event(HomeBusEvent event) { + if (event.getType() == HomeBusEvent.TYPE_UPDATE_MATCHING) { + int num = event.getMatching(); + if (num > 0) { + matching.setImageResource(R.mipmap.ic_matching_free); + } else { + matching.setImageResource(R.mipmap.ic_matching); + } + } + if (event.getType() == HomeBusEvent.TYPE_SHOW_MATCHING) { + int show = event.getMatching(); + if (show == 0) { + matching.setVisibility(View.GONE); + } else { + matching.setVisibility(View.VISIBLE); + } + } + } } 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 index a849ba312..6464a854c 100644 --- 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 @@ -11,9 +11,12 @@ import com.shayu.onetoone.R; import com.shayu.onetoone.activity.fragments.BaseFragment; import com.shayu.onetoone.adapter.HomeHotListAdapter; import com.shayu.onetoone.bean.HomeItemBean; +import com.shayu.onetoone.event.HomeBusEvent; import com.shayu.onetoone.manager.OTONetManager; import com.yanzhenjie.recyclerview.SwipeRecyclerView; +import com.yunbao.common.adapter.SpaceGridItemDecoration; import com.yunbao.common.http.base.HttpCallback; +import com.yunbao.common.utils.Bus; import java.util.List; @@ -35,6 +38,8 @@ public class HotFragment extends BaseFragment { mRefreshLayout = itemView.findViewById(R.id.swipeRefreshLayout); adapter = new HomeHotListAdapter(getContext()); recyclerView.setAdapter(adapter); + recyclerView.addItemDecoration(new SpaceGridItemDecoration(10)); + recyclerView.setEmptyView(findViewById(R.id.view_empty)); mRefreshLayout.setNestedScrollingEnabled(false); mRefreshLayout.setRefreshHeader(new RongRefreshHeader(this.getContext())); mRefreshLayout.setRefreshFooter(new RongRefreshHeader(this.getContext())); @@ -79,6 +84,11 @@ public class HotFragment extends BaseFragment { } else { adapter.setList(data); } + if(adapter.getItemCount()==0){ + Bus.get().post(new HomeBusEvent(HomeBusEvent.TYPE_SHOW_MATCHING,0)); + }else{ + Bus.get().post(new HomeBusEvent(HomeBusEvent.TYPE_SHOW_MATCHING,1)); + } } @Override @@ -88,6 +98,16 @@ public class HotFragment extends BaseFragment { }); } + @Override + public void onResume() { + super.onResume(); + if(adapter.getItemCount()==0){ + Bus.get().post(new HomeBusEvent(HomeBusEvent.TYPE_SHOW_MATCHING,0)); + }else{ + Bus.get().post(new HomeBusEvent(HomeBusEvent.TYPE_SHOW_MATCHING,1)); + } + } + @Override public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_hot, container, false); 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 index 2a853bdaa..b649d5284 100644 --- 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 @@ -24,8 +24,6 @@ import com.yanzhenjie.recyclerview.SwipeRecyclerView; import com.yunbao.common.http.base.HttpCallback; import com.yunbao.common.utils.Bus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; import java.util.List; @@ -43,21 +41,19 @@ public class RecommendFragment extends BaseFragment { private int page = 1; private boolean isScreen; Bundle screen; - ImageView matching; + @Override public void onDestroy() { super.onDestroy(); - Bus.getOff(this); } @Override public void initView(View itemView) { - Bus.getOn(this); recyclerView = itemView.findViewById(R.id.recyclerView); mRefreshLayout = itemView.findViewById(R.id.swipeRefreshLayout); top = itemView.findViewById(R.id.btn_top_list); - matching = itemView.findViewById(R.id.matching); + adapter = new HomeRecommendListAdapter(getContext()); recyclerView.setAdapter(adapter); mRefreshLayout.setNestedScrollingEnabled(false); @@ -79,25 +75,7 @@ public class RecommendFragment extends BaseFragment { top.setOnClickListener(view -> { recyclerView.scrollToPosition(0); }); - matching.setOnClickListener(v -> { - SendMessageManager.matching(new OnSendMessageListener() { - @Override - public void onSuccess(String token, SendConsumeBean bean) { - super.onSuccess(token, bean); - Bundle bundle = new Bundle(); - bundle.putInt("type", ChatActivity.CALL_CHAT_TYPE_MATCH); - bundle.putString("data", JSONObject.toJSONString(bean)); - RouteManager.forwardActivity(RouteManager.ACTIVITY_MATCHING, bundle); - } - @Override - public void onError(int status, String msg, SendConsumeBean bean) { - super.onError(status, msg, bean); - RouteManager.forwardActivity(RouteManager.ACTIVITY_MATCHING); - } - }); - - }); screen = getActivity().getIntent().getBundleExtra("screen"); if (screen != null) { if (!isScreen) { @@ -115,7 +93,7 @@ public class RecommendFragment extends BaseFragment { } } - private void screen(Bundle screen) { + public void screen(Bundle screen) { OTONetManager.getInstance(mContext) .search("", screen.getString("age", ""), @@ -176,6 +154,11 @@ public class RecommendFragment extends BaseFragment { } else { adapter.setList(data); } + if(adapter.getItemCount()==0){ + Bus.get().post(new HomeBusEvent(HomeBusEvent.TYPE_SHOW_MATCHING,0)); + }else{ + Bus.get().post(new HomeBusEvent(HomeBusEvent.TYPE_SHOW_MATCHING,1)); + } mRefreshLayout.finishRefresh(); } @@ -191,15 +174,13 @@ public class RecommendFragment extends BaseFragment { return inflater.inflate(R.layout.fragment_recommend, container, false); } - @Subscribe(threadMode = ThreadMode.MAIN) - public void event(HomeBusEvent event) { - if (event.getType() == HomeBusEvent.TYPE_UPDATE_MATCHING) { - int num = event.getMatching(); - if (num > 0) { - matching.setImageResource(R.mipmap.ic_matching_free); - } else { - matching.setImageResource(R.mipmap.ic_matching); - } + @Override + public void onResume() { + super.onResume(); + if(adapter.getItemCount()==0){ + Bus.get().post(new HomeBusEvent(HomeBusEvent.TYPE_SHOW_MATCHING,0)); + }else{ + Bus.get().post(new HomeBusEvent(HomeBusEvent.TYPE_SHOW_MATCHING,1)); } } } 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 4c62fde81..deb7a6aaa 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 @@ -2,6 +2,7 @@ package com.shayu.onetoone.activity.fragments.message; import static android.content.Context.CLIPBOARD_SERVICE; +import android.Manifest; import android.app.Dialog; import android.content.ClipData; import android.content.ClipboardManager; @@ -22,7 +23,9 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.FileProvider; +import com.blankj.utilcode.util.PermissionUtils; import com.lxj.xpopup.XPopup; +import com.lzf.easyfloat.EasyFloat; import com.makeramen.roundedimageview.RoundedImageView; import com.shayu.onetoone.R; import com.shayu.onetoone.adapter.MsgChatMessageListAdapter; @@ -67,6 +70,7 @@ import java.util.Collections; import java.util.Date; import java.util.List; +import io.rong.calllib.RongCallClient; import io.rong.imkit.IMCenter; import io.rong.imkit.config.RongConfigCenter; import io.rong.imkit.conversation.MessageListAdapter; @@ -264,6 +268,10 @@ public class ChatMessageFragment extends AbsConversationFragment { ToastUtil.show(R.string.toast_call_not_unlock); return; } + if(CallClientManager.getManager().isCalling()){ + ToastUtil.show(R.string.now_call_tips); + return; + } checkAuth(new OnSendMessageListener() { @Override public void onSuccess(String token, SendConsumeBean bean) { @@ -316,6 +324,11 @@ public class ChatMessageFragment extends AbsConversationFragment { ToastUtil.show(R.string.toast_call_not_unlock); return; } + if(CallClientManager.getManager().isCalling() || isFloatWindows()){ + ToastUtil.show(R.string.now_call_tips); + return; + } + checkAuth(new OnSendMessageListener() { @Override public void onSuccess(String token, SendConsumeBean bean) { @@ -394,6 +407,17 @@ public class ChatMessageFragment extends AbsConversationFragment { @Override public void onError(int status, String msg) { super.onError(status, msg); + new TipsDialog(mContext) + .setTitle(WordUtil.getNewString(R.string.not_money)) + .setContent(String.format(WordUtil.getNewString(R.string.not_money_tips), msg)) + .setApplyText(WordUtil.getNewString(R.string.dialog_apply)) + .setOnDialogClickListener(new OnDialogClickListener() { + + @Override + public void onApply(Dialog dialog) { + super.onApply(dialog); + } + }).showDialog(); } }); } @@ -405,6 +429,10 @@ public class ChatMessageFragment extends AbsConversationFragment { } } + private boolean isFloatWindows() { + return EasyFloat.isShow("call"); + } + private void checkAuth(OnSendMessageListener listener) { OTONetManager.getInstance(mContext) .getTargetUserInfo(Integer.parseInt(targetId), new HttpCallback() { @@ -759,7 +787,9 @@ public class ChatMessageFragment extends AbsConversationFragment { } private void showRedPoint() { - RongIMClient.getInstance().getTotalUnreadCount(new RongIMClient.ResultCallback() { + RongIMClient.getInstance().getUnreadCount(new Conversation.ConversationType[]{Conversation.ConversationType.PRIVATE} + ,false + ,new RongIMClient.ResultCallback() { @Override public void onSuccess(Integer integer) { Integer tmp = integer + MsgMessageFragment.systemPoint; diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MessageInteractiveFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MessageInteractiveFragment.java index d312c99b1..83d84e74e 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MessageInteractiveFragment.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MessageInteractiveFragment.java @@ -18,10 +18,15 @@ import java.util.ArrayList; import java.util.List; import androidx.annotation.Nullable; +import androidx.recyclerview.widget.LinearLayoutManager; + import io.rong.imkit.conversation.MessageListAdapter; import io.rong.imkit.model.UiMessage; import io.rong.imlib.model.Message; +/** + * 互動消息 + */ public class MessageInteractiveFragment extends AbsConversationFragment { private OfficialNoticeBean noticeBean; @@ -38,7 +43,7 @@ public class MessageInteractiveFragment extends AbsConversationFragment { @Override public void main() { setTitle(noticeBean.getTitle()); - + mList.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, true)); initData(); } diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MessageNoticeFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MessageNoticeFragment.java index 1f67d0053..37c9c81ac 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MessageNoticeFragment.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/MessageNoticeFragment.java @@ -18,10 +18,15 @@ import java.util.ArrayList; import java.util.List; import androidx.annotation.Nullable; +import androidx.recyclerview.widget.LinearLayoutManager; + import io.rong.imkit.conversation.MessageListAdapter; import io.rong.imkit.model.UiMessage; import io.rong.imlib.model.Message; +/** + * 官方通知 + */ public class MessageNoticeFragment extends AbsConversationFragment { private OfficialNoticeBean noticeBean; @@ -38,6 +43,7 @@ public class MessageNoticeFragment extends AbsConversationFragment { @Override public void main() { setTitle(noticeBean.getTitle()); + mList.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, true)); initData(); } 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 fcd0fca7c..3a97e658c 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 @@ -161,7 +161,6 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt } } }); - initSystemNotice(); initRongConfig(); updateUserInfo(); } @@ -178,11 +177,11 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt private void initSystemNotice() { - systemPoint = 0; OTONetManager.getInstance(mContext) .getMessageSystemLists(new HttpCallback>() { @Override public void onSuccess(List data) { + systemPoint = 0; for (OfficialNoticeBean datum : data) { systemPoint += datum.getNum(); if (datum.getType() == 3) { @@ -375,6 +374,7 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt this.mRefreshLayout.setRefreshFooter(new RongRefreshHeader(this.getContext())); this.mRefreshLayout.setOnRefreshListener(new OnRefreshListener() { public void onRefresh(@NonNull RefreshLayout refreshLayout) { + initSystemNotice(); MsgMessageFragment.this.onConversationListRefresh(refreshLayout); updateUserInfo(); } @@ -513,12 +513,12 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt private SwipeMenuCreator initSwipeMenuCreator() { SwipeMenuCreator creator = (leftMenu, rightMenu, position) -> { SwipeMenuItem top = new SwipeMenuItem(getContext()); - SwipeMenuItem del = new SwipeMenuItem(getContext()); + SwipeMenuItem del = new SwipeMenuItem(getContext()); top.setBackgroundColor(Color.parseColor("#D9D9D9")); del.setBackgroundColor(Color.parseColor("#FE5268")); - if(mAdapter.getItem(position).mCore.isTop()) { + if (mAdapter.getItem(position).mCore.isTop()) { top.setText(R.string.untop); - }else{ + } else { top.setText(R.string.top); } del.setText(R.string.delete); @@ -568,7 +568,8 @@ public class MsgMessageFragment extends BaseFragment implements BaseAdapter.OnIt public void busEvent(MessageMsgBusEvent event) { if (event.getType() == MessageMsgBusEvent.TYPE_ALL_READ) { allRead(); - } else if (event.getType() == MessageMsgBusEvent.TYPE_UPDATE_SYSTEM) { + } + if (event.getType() == MessageMsgBusEvent.TYPE_UPDATE_SYSTEM) { initSystemNotice(); } } diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/SystemMessageFragment.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/SystemMessageFragment.java index 4645df151..18c4ddced 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/SystemMessageFragment.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/fragments/message/SystemMessageFragment.java @@ -27,6 +27,8 @@ import java.util.List; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; +import androidx.recyclerview.widget.LinearLayoutManager; + import io.rong.imkit.IMCenter; import io.rong.imkit.config.RongConfigCenter; import io.rong.imkit.conversation.ConversationFragment; @@ -40,6 +42,9 @@ import io.rong.imlib.model.Message; import io.rong.imlib.model.UserInfo; import io.rong.message.TextMessage; +/** + * 系統消息 + */ public class SystemMessageFragment extends AbsConversationFragment { View mInputPanel; @@ -57,6 +62,7 @@ public class SystemMessageFragment extends AbsConversationFragment { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); init(); + mList.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, true)); initData(); initSystemMessage(); } diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/message/CallAudioActivity.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/message/CallAudioActivity.java index 0d5077873..221b64c1d 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/message/CallAudioActivity.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/message/CallAudioActivity.java @@ -1,5 +1,6 @@ package com.shayu.onetoone.activity.message; +import android.Manifest; import android.app.Dialog; import android.os.Bundle; import android.view.MotionEvent; @@ -39,6 +40,7 @@ import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.http.base.HttpCallback; import com.yunbao.common.interfaces.OnItemClickListener; import com.yunbao.common.utils.DpUtil; +import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.WordUtil; @@ -56,6 +58,7 @@ public class CallAudioActivity extends AbsOTOActivity implements View.OnClickLis private ImageView callStop; private ImageView callMsg; private TextView callTime; + private TextView tips; private String targetId; private String callId; @@ -82,7 +85,7 @@ public class CallAudioActivity extends AbsOTOActivity implements View.OnClickLis model = bundle.getString("model"); initView(); onCallStatusListener = new CallStatusListener(); - CallClientManager.getManager().addOnVoIPCallListener(onCallStatusListener); + CallClientManager.getManager().addOnVoIPCallListener(CallAudioActivity.class,onCallStatusListener); initTargetData(); if (model.equals(CallClientManager.VIDEO_FLOAT)) { EasyFloat.dismiss("call"); @@ -91,6 +94,24 @@ public class CallAudioActivity extends AbsOTOActivity implements View.OnClickLis gift.setVisibility(View.VISIBLE); money.setVisibility(View.VISIBLE); } + if(!com.blankj.utilcode.util.PermissionUtils.isGranted(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO)) { + com.blankj.utilcode.util.PermissionUtils.permission(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO).callback(new com.blankj.utilcode.util.PermissionUtils.SimpleCallback() { + @Override + public void onGranted() { + if (model.equals(CallClientManager.AUDIO_CALL)) { + CallClientManager.getManager().callAudio(targetId); + callMsg.setTag(true); + callMsg.setImageResource(R.mipmap.ic_call_audio_msg); + } + } + + @Override + public void onDenied() { + finish(); + } + }).request(); + return; + } if (model.equals(CallClientManager.AUDIO_CALL)) { CallClientManager.getManager().callAudio(targetId); callMsg.setTag(true); @@ -101,7 +122,7 @@ public class CallAudioActivity extends AbsOTOActivity implements View.OnClickLis @Override protected void onDestroy() { super.onDestroy(); - CallClientManager.getManager().removeOnVoIPCallListener(onCallStatusListener); + CallClientManager.getManager().removeOnVoIPCallListener(CallAudioActivity.class); } @Override @@ -121,6 +142,7 @@ public class CallAudioActivity extends AbsOTOActivity implements View.OnClickLis callStop = findViewById(R.id.call_stop); callMsg = findViewById(R.id.call_msg); callTime = findViewById(R.id.call_time); + tips = findViewById(R.id.tips); callMsg.setImageResource(io.rong.callkit.R.drawable.rc_voip_audio_answer_selector_new); @@ -248,7 +270,7 @@ public class CallAudioActivity extends AbsOTOActivity implements View.OnClickLis RouteManager.forwardActivity(RouteManager.ACTIVITY_CALL_AUDIO, bundle); }); windowListener = new WindowCallStatusListener(); - CallClientManager.getManager().addOnVoIPCallListener(windowListener); + CallClientManager.getManager().addOnVoIPCallListener(EasyFloat.class,windowListener); } @Override @@ -258,7 +280,7 @@ public class CallAudioActivity extends AbsOTOActivity implements View.OnClickLis @Override public void dismiss() { - CallClientManager.getManager().removeOnVoIPCallListener(windowListener); + CallClientManager.getManager().removeOnVoIPCallListener(EasyFloat.class); } @Override @@ -284,7 +306,8 @@ public class CallAudioActivity extends AbsOTOActivity implements View.OnClickLis private class CallStatusListener extends OnCallStatusListener { @Override public void onCallWait(SurfaceView surfaceView) { - + tips.setVisibility(View.VISIBLE); + tips.setText(R.string.call_tips1); } @Override @@ -296,6 +319,10 @@ public class CallAudioActivity extends AbsOTOActivity implements View.OnClickLis gift.setVisibility(View.VISIBLE); money.setVisibility(View.VISIBLE); } + tips.setText(R.string.call_tips2); + tips.postDelayed(()->{ + tips.setVisibility(View.GONE); + },1000); } @Override @@ -341,6 +368,9 @@ public class CallAudioActivity extends AbsOTOActivity implements View.OnClickLis if (model.equals(CallClientManager.AUDIO_RECEIVED_CALL)||model.equals(CallClientManager.VIDEO_RECEIVED_CALL)) { return; } + if(msg<=0){ + return; + } tipsDialog = new TipsTextDialog(mContext) .setTips(String.format(WordUtil.getNewString(R.string.call_tips), msg)) .setOnItemClickListener(new OnItemClickListener() { diff --git a/OneToOne/src/main/java/com/shayu/onetoone/activity/message/CallVideoActivity.java b/OneToOne/src/main/java/com/shayu/onetoone/activity/message/CallVideoActivity.java index fcf9d78aa..e2d6dcb9a 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/activity/message/CallVideoActivity.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/activity/message/CallVideoActivity.java @@ -1,5 +1,6 @@ package com.shayu.onetoone.activity.message; +import android.Manifest; import android.annotation.SuppressLint; import android.app.Dialog; import android.graphics.Color; @@ -11,6 +12,7 @@ import android.view.MotionEvent; import android.view.SurfaceView; import android.view.View; import android.view.ViewGroup; +import android.view.ViewParent; import android.widget.ImageView; import android.widget.TextView; @@ -48,6 +50,8 @@ import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.WordUtil; +import java.util.Objects; + import io.rong.calllib.RongCallClient; import io.rong.calllib.StartIncomingPreviewCallback; @@ -73,13 +77,15 @@ public class CallVideoActivity extends AbsOTOActivity { private ImageView follow; private TextView followText; private TextView callTime; + private TextView tips; + private ImageView closeWait; private OnCallStatusListener onCallStatusListener; private String targetId; + private String sessionId; private String callId; private String model; - private SurfaceView localVideo, remoteVideo; @Override protected int getLayoutId() { @@ -105,7 +111,7 @@ public class CallVideoActivity extends AbsOTOActivity { model = bundle.getString("model"); onCallStatusListener = new CallStatusListener(); - CallClientManager.getManager().addOnVoIPCallListener(onCallStatusListener); + CallClientManager.getManager().addOnVoIPCallListener(CallVideoActivity.class,onCallStatusListener); if (!model.equals(CallClientManager.VIDEO_FLOAT)) { RongCallClient.getInstance() @@ -124,6 +130,23 @@ public class CallVideoActivity extends AbsOTOActivity { }); } initButton(buttonView); + if(!com.blankj.utilcode.util.PermissionUtils.isGranted(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO)) { + com.blankj.utilcode.util.PermissionUtils.permission(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO).callback(new com.blankj.utilcode.util.PermissionUtils.SimpleCallback() { + @Override + public void onGranted() { + if (!StringUtil.isEmpty(targetId)) { + CallClientManager.getManager().callVideo(targetId); + initWaitView(); + } + } + + @Override + public void onDenied() { + finish(); + } + }).request(); + return; + } if (!StringUtil.isEmpty(targetId)) { CallClientManager.getManager().callVideo(targetId); initWaitView(); @@ -136,20 +159,51 @@ public class CallVideoActivity extends AbsOTOActivity { if (model.equals(CallClientManager.VIDEO_FLOAT)) { callLayout.setVisibility(View.GONE); EasyFloat.getFloatView("call").setOnClickListener(null); - ((ViewGroup) EasyFloat.getFloatView("call").getParent()).removeAllViews(); + //((ViewGroup) EasyFloat.getFloatView("call").getParent()).removeAllViews(); EasyFloat.dismiss("call"); myView.removeAllViews(); new Handler(Looper.getMainLooper()) .postDelayed(() -> { + SurfaceView localVideo = CallClientManager.getManager().getLocalVideo(); SurfaceView surfaceView = CallClientManager.getManager().getRemoteVideo(); - surfaceView.setLayoutParams(new ViewGroup.LayoutParams(-1, -1)); + if(localVideo.getParent()!=null){ + ((ViewGroup) localVideo.getParent()).removeAllViews(); + } + if (surfaceView != null) { + surfaceView.setLayoutParams(new ViewGroup.LayoutParams(-1, -1)); + } + localVideo.setLayoutParams(new ViewGroup.LayoutParams(DpUtil.dp2px(114), DpUtil.dp2px(164))); initView(); initButton(buttonView); - myView.addView(surfaceView); - myView.addView(buttonView); - targetView.addView(CallClientManager.getManager().getLocalVideo()); + if (surfaceView == null) { + localVideo.setLayoutParams(new ViewGroup.LayoutParams(-1, -1)); + localVideo.setZOrderOnTop(false); + localVideo.setZOrderMediaOverlay(false); + myView.addView(localVideo); + initWaitView(); + myView.addView(callWaitLayout); + } else { + if (surfaceView.getParent() != null) { + ((ViewGroup) surfaceView.getParent()).removeAllViews(); + } + myView.addView(surfaceView); + myView.addView(buttonView); + localVideo.setZOrderOnTop(true); + localVideo.setZOrderMediaOverlay(true); + localVideo.setOnClickListener(new VideoViewClick()); + targetView.addView(localVideo); + closeWait.setVisibility(View.GONE); + } initTargetData(); + sessionId = CallClientManager.getManager().getSessionId(); + if(sessionId.equals(targetId)){ + gift.setVisibility(View.INVISIBLE); + money.setVisibility(View.INVISIBLE); + model=CallClientManager.VIDEO_RECEIVED_CALL; + }else{ + model=CallClientManager.VIDEO_CALL; + } }, 300); } @@ -162,6 +216,8 @@ public class CallVideoActivity extends AbsOTOActivity { buttonView = LayoutInflater.from(mContext).inflate(R.layout.view_call_video_item, rootView, false); callWaitLayout = LayoutInflater.from(mContext).inflate(R.layout.view_call_video_wait, rootView, false); targetView = buttonView.findViewById(R.id.target_view); + tips = findViewById(R.id.tips); + closeWait = findViewById(R.id.close1); targetView.setBackgroundColor(Color.YELLOW); targetView.setOnClickListener(new VideoViewClick()); } @@ -172,33 +228,43 @@ public class CallVideoActivity extends AbsOTOActivity { @Override public void onClick(View view) { - myView.removeAllViews(); - targetView.removeAllViews(); + /* myView.removeAllViews(); + targetView.removeAllViews();*/ + ViewGroup parent1 = (ViewGroup) CallClientManager.getManager().getLocalVideo().getParent(); + ViewGroup parent2 = (ViewGroup) CallClientManager.getManager().getRemoteVideo().getParent(); + if (parent1 != null) { + parent1.removeAllViews(); + } + if (parent2 != null) { + parent2.removeAllViews(); + } if (isSwitchView) { - targetView.addView(localVideo); - localVideo.setZOrderOnTop(true); - localVideo.setZOrderMediaOverlay(true); - myView.addView(remoteVideo); - remoteVideo.setZOrderOnTop(false); - remoteVideo.setZOrderMediaOverlay(false); + targetView.addView(CallClientManager.getManager().getLocalVideo()); + CallClientManager.getManager().getLocalVideo().setZOrderOnTop(true); + CallClientManager.getManager().getLocalVideo().setZOrderMediaOverlay(true); + CallClientManager.getManager().getRemoteVideo().setLayoutParams(new ViewGroup.LayoutParams(-1, -1)); + myView.addView(CallClientManager.getManager().getRemoteVideo()); + CallClientManager.getManager().getRemoteVideo().setZOrderOnTop(false); + CallClientManager.getManager().getRemoteVideo().setZOrderMediaOverlay(false); myView.addView(buttonView); isSwitchView = false; - localVideo.setOnClickListener(new VideoViewClick()); - remoteVideo.setOnClickListener(null); + CallClientManager.getManager().getLocalVideo().setOnClickListener(new VideoViewClick()); + CallClientManager.getManager().getRemoteVideo().setOnClickListener(null); } else { ImageView imageView = new ImageView(mContext); imageView.setImageResource(R.mipmap.bg_message_msg_title_heartbeat); - myView.addView(localVideo); - localVideo.setZOrderOnTop(false); - localVideo.setZOrderMediaOverlay(false); + CallClientManager.getManager().getLocalVideo().setLayoutParams(new ViewGroup.LayoutParams(-1, -1)); + myView.addView(CallClientManager.getManager().getLocalVideo()); + CallClientManager.getManager().getLocalVideo().setZOrderOnTop(false); + CallClientManager.getManager().getLocalVideo().setZOrderMediaOverlay(false); myView.addView(buttonView); targetView.addView(imageView); - targetView.addView(remoteVideo); - remoteVideo.setZOrderOnTop(true); - remoteVideo.setZOrderMediaOverlay(true); + targetView.addView(CallClientManager.getManager().getRemoteVideo()); + CallClientManager.getManager().getRemoteVideo().setZOrderOnTop(true); + CallClientManager.getManager().getRemoteVideo().setZOrderMediaOverlay(true); isSwitchView = true; - remoteVideo.setOnClickListener(new VideoViewClick()); - localVideo.setOnClickListener(null); + CallClientManager.getManager().getRemoteVideo().setOnClickListener(new VideoViewClick()); + CallClientManager.getManager().getLocalVideo().setOnClickListener(null); } } } @@ -252,6 +318,7 @@ public class CallVideoActivity extends AbsOTOActivity { // 为其他View设置点击事件监听器 avatar.setOnClickListener(onClickListener); close.setOnClickListener(onClickListener); + closeWait.setOnClickListener(onClickListener); follow.setOnClickListener(onClickListener); findViewById(R.id.rc_voip_call_answer_btn).setOnClickListener(onClickListener); findViewById(R.id.rc_voip_call_hang_up).setOnClickListener(onClickListener); @@ -306,13 +373,22 @@ public class CallVideoActivity extends AbsOTOActivity { .showDialog(); return; } - CallClientManager.getManager().getRemoteVideo().setTag(getIntent().getExtras()); myView.removeAllViews(); targetView.removeAllViews(); finish(); - CallClientManager.getManager().getRemoteVideo().setLayoutParams(new ViewGroup.LayoutParams(DpUtil.dp2px(114), DpUtil.dp2px(164))); + SurfaceView floatWindows; + if (CallClientManager.getManager().getRemoteVideo() == null) { + /* floatWindows=new ImageView(mContext); + ((ImageView)floatWindows).setImageResource(io.rong.callkit.R.drawable.rc_voip_vedio_answer_selector_new);*/ + CallClientManager.getManager().getLocalVideo().setLayoutParams(new ViewGroup.LayoutParams(DpUtil.dp2px(114), DpUtil.dp2px(164))); + floatWindows = CallClientManager.getManager().getLocalVideo(); + } else { + CallClientManager.getManager().getRemoteVideo().setLayoutParams(new ViewGroup.LayoutParams(DpUtil.dp2px(114), DpUtil.dp2px(164))); + floatWindows = CallClientManager.getManager().getRemoteVideo(); + } + floatWindows.setTag(getIntent().getExtras()); EasyFloat.with(this) - .setLayout(CallClientManager.getManager().getRemoteVideo()) + .setLayout(floatWindows) .setShowPattern(ShowPattern.FOREGROUND) .setTag("call") .setDragEnable(true) @@ -332,8 +408,8 @@ public class CallVideoActivity extends AbsOTOActivity { bundle.putString("model", CallClientManager.VIDEO_FLOAT); RouteManager.forwardActivity(RouteManager.ACTIVITY_CALL_VIDEO, bundle); }); - windowListener = new WindowCallStatusListener(); - CallClientManager.getManager().addOnVoIPCallListener(windowListener); + windowListener = new WindowCallStatusListener(view); + CallClientManager.getManager().addOnVoIPCallListener(EasyFloat.class,windowListener); } @Override @@ -343,7 +419,8 @@ public class CallVideoActivity extends AbsOTOActivity { @Override public void dismiss() { - CallClientManager.getManager().removeOnVoIPCallListener(windowListener); + ToastUtil.showDebug("浮窗移除监听"); + CallClientManager.getManager().removeOnVoIPCallListener(EasyFloat.class); } @Override @@ -423,7 +500,7 @@ public class CallVideoActivity extends AbsOTOActivity { switchCamera(); } else if (id == R.id.mic_switch) { switchAudio(); - } else if (id == R.id.close) { + } else if (id == R.id.close || id == R.id.close1) { showWindow(false); } else if (id == R.id.message) { showWindow(true); @@ -437,37 +514,51 @@ public class CallVideoActivity extends AbsOTOActivity { @Override public void onCallWait(SurfaceView surfaceView) { myView.removeAllViews(); - localVideo = surfaceView; - myView.addView(localVideo); + myView.addView(CallClientManager.getManager().getLocalVideo()); if (model.equals(CallClientManager.VIDEO_CALL)) { myView.addView(callWaitLayout); } + tips.setVisibility(View.VISIBLE); + tips.setText(R.string.call_tips1); } @Override public void onCallStart(String userId, SurfaceView surfaceView) { + closeWait.setVisibility(View.GONE); initView(); initButton(buttonView); initTargetData(); surfaceView.setZOrderOnTop(false); surfaceView.setZOrderMediaOverlay(false); surfaceView.invalidate(); + surfaceView.setLayoutParams(new ViewGroup.LayoutParams(-1, -1)); surfaceView.setOnClickListener(v -> { surfaceView.setZOrderOnTop(false); surfaceView.setZOrderMediaOverlay(false); surfaceView.invalidate(); }); - remoteVideo = surfaceView; - myView.removeAllViews(); - myView.addView(remoteVideo); + if(surfaceView.getParent()!=null){ + ((ViewGroup)surfaceView.getParent()).removeAllViews(); + } + if(CallClientManager.getManager().getLocalVideo().getParent()!=null){ + ((ViewGroup)CallClientManager.getManager().getLocalVideo().getParent()).removeAllViews(); + } + myView.addView(surfaceView); targetView.removeAllViews(); targetView.addView(CallClientManager.getManager().getLocalVideo()); + CallClientManager.getManager().getLocalVideo().setOnClickListener(new VideoViewClick()); myView.addView(buttonView); + tips.setText(R.string.call_tips2); + tips.postDelayed(() -> { + tips.setVisibility(View.GONE); + }, 1000); + sessionId = CallClientManager.getManager().getSessionId(); } -// + + // @Override public void onCallEnd() { - if(model.equals(CallClientManager.AUDIO_CALL) ||model.equals(CallClientManager.VIDEO_CALL)) { + if (!sessionId.equals(targetId)){ Bundle bundle = new Bundle(); bundle.putString("model", CallClientManager.VIDEO_CALL); bundle.putString("targetId", targetId); @@ -511,6 +602,9 @@ public class CallVideoActivity extends AbsOTOActivity { if (model.equals(CallClientManager.VIDEO_RECEIVED_CALL)) { return; } + if(msg<=0){ + return; + } tipsDialog = new TipsTextDialog(mContext) .setTips(String.format(WordUtil.getNewString(R.string.call_tips), msg)) .setOnItemClickListener(new OnItemClickListener() { @@ -533,6 +627,12 @@ public class CallVideoActivity extends AbsOTOActivity { } private static class WindowCallStatusListener extends OnCallStatusListener { + View rootView; + + public WindowCallStatusListener(View view) { + this.rootView = view; + } + @Override public void onCallWait(SurfaceView surfaceView) { @@ -540,6 +640,20 @@ public class CallVideoActivity extends AbsOTOActivity { @Override public void onCallStart(String userId, SurfaceView surfaceView) { + Object tag = rootView.getTag(); + ViewGroup parent = (ViewGroup) rootView.getParent(); + parent.removeView(rootView); + if(surfaceView.getParent()!=null){ + ((ViewGroup)surfaceView.getParent()).removeAllViews(); + } + surfaceView.setLayoutParams(new ViewGroup.LayoutParams(DpUtil.dp2px(114), DpUtil.dp2px(164))); + surfaceView.setTag(tag); + surfaceView.setOnClickListener(v -> { + Bundle bundle = (Bundle) v.getTag(); + bundle.putString("model", CallClientManager.VIDEO_FLOAT); + RouteManager.forwardActivity(RouteManager.ACTIVITY_CALL_VIDEO, bundle); + }); + parent.addView(surfaceView); } @@ -556,6 +670,6 @@ public class CallVideoActivity extends AbsOTOActivity { @Override protected void onDestroy() { super.onDestroy(); - CallClientManager.getManager().removeOnVoIPCallListener(onCallStatusListener); + CallClientManager.getManager().removeOnVoIPCallListener(CallVideoActivity.class); } } diff --git a/OneToOne/src/main/java/com/shayu/onetoone/adapter/MyFriendListAdapter.java b/OneToOne/src/main/java/com/shayu/onetoone/adapter/MyFriendListAdapter.java index 9885a6d62..421808623 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/adapter/MyFriendListAdapter.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/adapter/MyFriendListAdapter.java @@ -112,7 +112,7 @@ public class MyFriendListAdapter extends RecyclerView.Adapter listeners; + private Map listeners; private CallTimeTask timeTask = null; public static CallClientManager getManager() { @@ -60,7 +61,7 @@ public class CallClientManager { } private CallClientManager() { - listeners = new ArrayList<>(); + listeners = new HashMap<>(); init(); } @@ -83,19 +84,19 @@ public class CallClientManager { RongCallClient.setReceivedCallListener(new CallMeListener()); } - public void addOnVoIPCallListener(OnCallStatusListener statusListener) { - listeners.add(statusListener); + public void addOnVoIPCallListener(Class zlass,OnCallStatusListener statusListener) { + listeners.put(zlass,statusListener); RongCallClient.getInstance().setVoIPCallListener(new CallStatusListener(new OnCallStatusListener() { @Override public void onCallWait(SurfaceView localVideo) { - for (OnCallStatusListener listener : listeners) { + for (OnCallStatusListener listener : listeners.values()) { listener.onCallWait(localVideo); } } @Override public void onCallStart(String userId, SurfaceView remoteVideo) { - for (OnCallStatusListener listener : listeners) { + for (OnCallStatusListener listener : listeners.values()) { listener.onCallStart(userId, remoteVideo); } startTimer(null); @@ -103,7 +104,7 @@ public class CallClientManager { @Override public void onCallEnd() { - for (OnCallStatusListener listener : listeners) { + for (OnCallStatusListener listener : listeners.values()) { listener.onCallEnd(); } endTimer(); @@ -111,15 +112,15 @@ public class CallClientManager { @Override public void onStartFirstFrame() { - for (OnCallStatusListener listener : listeners) { + for (OnCallStatusListener listener : listeners.values()) { listener.onStartFirstFrame(); } } })); } - public void removeOnVoIPCallListener(OnCallStatusListener statusListener) { - listeners.remove(statusListener); + public void removeOnVoIPCallListener(Class zlass) { + listeners.remove(zlass); } public void checkMoney(String targetId, boolean video, OnSendMessageListener listener) { @@ -149,24 +150,22 @@ public class CallClientManager { RongCallClient.getInstance().setVoIPCallListener(new CallStatusListener(new OnCallStatusListener() { @Override public void onCallWait(SurfaceView localVideo) { - for (OnCallStatusListener listener : listeners) { + for (OnCallStatusListener listener : listeners.values()) { listener.onCallWait(localVideo); } - ToastUtil.show(R.string.call_tips1); } @Override public void onCallStart(String userId, SurfaceView remoteVideo) { - for (OnCallStatusListener listener : listeners) { + for (OnCallStatusListener listener : listeners.values()) { listener.onCallStart(userId, remoteVideo); } - ToastUtil.show(R.string.call_tips2); startTimer(targetId); } @Override public void onCallEnd() { - for (OnCallStatusListener listener : listeners) { + for (OnCallStatusListener listener : listeners.values()) { listener.onCallEnd(); } endTimer(); @@ -174,7 +173,7 @@ public class CallClientManager { @Override public void onStartFirstFrame() { - for (OnCallStatusListener listener : listeners) { + for (OnCallStatusListener listener : listeners.values()) { listener.onStartFirstFrame(); } } @@ -188,24 +187,22 @@ public class CallClientManager { RongCallClient.getInstance().setVoIPCallListener(new CallStatusListener(new OnCallStatusListener() { @Override public void onCallWait(SurfaceView localVideo) { - for (OnCallStatusListener listener : listeners) { + for (OnCallStatusListener listener : listeners.values()) { listener.onCallWait(localVideo); } - ToastUtil.show(R.string.call_tips1); } @Override public void onCallStart(String userId, SurfaceView remoteVideo) { - for (OnCallStatusListener listener : listeners) { + for (OnCallStatusListener listener : listeners.values()) { listener.onCallStart(userId, remoteVideo); } - ToastUtil.show(R.string.call_tips2); startTimer(targetId); } @Override public void onCallEnd() { - for (OnCallStatusListener listener : listeners) { + for (OnCallStatusListener listener : listeners.values()) { listener.onCallEnd(); } endTimer(); @@ -213,7 +210,7 @@ public class CallClientManager { @Override public void onStartFirstFrame() { - for (OnCallStatusListener listener : listeners) { + for (OnCallStatusListener listener : listeners.values()) { listener.onStartFirstFrame(); } } @@ -245,6 +242,14 @@ public class CallClientManager { return activeTime == 0 ? 0 : (System.currentTimeMillis() - activeTime) / 1000; } + public String getSessionId() { + RongCallSession callSession = RongCallClient.getInstance().getCallSession(); + if(callSession==null){ + return ""; + } + return callSession.getCallerUserId(); + } + private class CallTimeTask extends TimerTask { Handler handler = new Handler(Looper.getMainLooper()); @@ -260,7 +265,7 @@ public class CallClientManager { @Override public boolean cancel() { - if(sessionId.equals(targetId)){ + if (sessionId.equals(targetId)) { System.err.println("接听方不计费 结束"); return super.cancel(); } @@ -287,7 +292,7 @@ public class CallClientManager { } isCallVideo = callSession.getMediaType() == RongCallCommon.CallMediaType.VIDEO; activeTime = callSession.getActiveTime(); - sessionId=callSession.getCallerUserId(); + sessionId = callSession.getCallerUserId(); long time = getTime(activeTime); checkTime(time); String extra; @@ -304,7 +309,7 @@ public class CallClientManager { extra = String.format(Locale.ROOT, "%02d:%02d", (time % 3600) / 60, (time % 60)); } handler.post(() -> { - for (OnCallStatusListener listener : listeners) { + for (OnCallStatusListener listener : listeners.values()) { listener.onTime(extra); if (warningTime <= 60) { listener.onTimeWarning(warningTime--); @@ -319,11 +324,11 @@ public class CallClientManager { if (StringUtil.isEmpty(targetId)) { return; } - if(sessionId.equals(targetId)){ + if (sessionId.equals(targetId)) { System.err.println("接听方不计费"); return; } - if(time==0){ + if (time == 0) { return; } time = time % 10; @@ -350,7 +355,7 @@ public class CallClientManager { warningTime = bean.getMp3Time(); } if (warningTime <= 60) { - for (OnCallStatusListener listener : listeners) { + for (OnCallStatusListener listener : listeners.values()) { listener.onTimeWarning(warningTime); } } @@ -360,7 +365,7 @@ public class CallClientManager { public void onError(int status, String msg) { super.onError(status, msg); if (status == OnSendMessageListener.STATUS_NOT_PRICE) { - for (OnCallStatusListener listener : listeners) { + for (OnCallStatusListener listener : listeners.values()) { listener.onErrorNotPrice(msg); } endCall(); @@ -548,12 +553,12 @@ public class CallClientManager { * 如果对端调用{@link RongCallClient#startCall(int, boolean, Conversation.ConversationType, String, List, List, RongCallCommon.CallMediaType, String, StartCameraCallback)} 或 * {@link RongCallClient#acceptCall(String, int, boolean, StartCameraCallback)}开始的音视频通话,则可以使用如下设置改变对端视频流的镜像显示:
*
-         *                                                                                                                                                                                                                                                                                                                      public void onRemoteUserJoined(String userId, RongCallCommon.CallMediaType mediaType, int userType, SurfaceView remoteVideo) {
-         *                                                                                                                                                                                                                                                                                                                           if (null != remoteVideo) {
-         *                                                                                                                                                                                                                                                                                                                               ((RongRTCVideoView) remoteVideo).setMirror( boolean);//观看对方视频流是否镜像处理
-         *                                                                                                                                                                                                                                                                                                                           }
-         *                                                                                                                                                                                                                                                                                                                      }
-         *                                                                                                                                                                                                                                                                                                                      
+ * public void onRemoteUserJoined(String userId, RongCallCommon.CallMediaType mediaType, int userType, SurfaceView remoteVideo) { + * if (null != remoteVideo) { + * ((RongRTCVideoView) remoteVideo).setMirror( boolean);//观看对方视频流是否镜像处理 + * } + * } + * */ @Override public void onRemoteUserJoined(String userId, RongCallCommon.CallMediaType mediaType, int userType, SurfaceView remoteVideo) { diff --git a/OneToOne/src/main/java/com/shayu/onetoone/manager/SendMessageManager.java b/OneToOne/src/main/java/com/shayu/onetoone/manager/SendMessageManager.java index 4fe61b846..7655b25c2 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/manager/SendMessageManager.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/manager/SendMessageManager.java @@ -227,6 +227,10 @@ public class SendMessageManager { cache.remove(token); } + public static boolean checkToken(String token) { + return cache.containsKey(token); + } + public static class SendData { public boolean needToken = true; private String toUid; diff --git a/OneToOne/src/main/java/com/shayu/onetoone/view/MsgInputPanelForAudio.java b/OneToOne/src/main/java/com/shayu/onetoone/view/MsgInputPanelForAudio.java index 647d0799c..c0d60e400 100644 --- a/OneToOne/src/main/java/com/shayu/onetoone/view/MsgInputPanelForAudio.java +++ b/OneToOne/src/main/java/com/shayu/onetoone/view/MsgInputPanelForAudio.java @@ -65,7 +65,7 @@ public class MsgInputPanelForAudio extends AbsInputPanel { } private boolean isAudio; - private boolean isDownload=false; + private boolean isDownload = false; @SuppressLint("ClickableViewAccessibility") @Override @@ -85,7 +85,7 @@ public class MsgInputPanelForAudio extends AbsInputPanel { System.out.println("点击事件 没权限掉了"); return true; } else { - isDownload=true; + isDownload = true; if (event.getAction() == MotionEvent.ACTION_DOWN) { System.out.println("点击事件:点下 isAudio = " + isAudio); if (isAudio) { @@ -103,7 +103,7 @@ public class MsgInputPanelForAudio extends AbsInputPanel { } } else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) { - isDownload=false; + isDownload = false; if (isAudio) { onUp(v, event); } @@ -122,18 +122,17 @@ public class MsgInputPanelForAudio extends AbsInputPanel { private void toToken(View v, float mLastTouchY) { System.out.println("点击事件:调用token"); - if(!isDownload){ - ToastUtil.show("过短,结束"); - AudioRecordManager.getInstance().stopRecord(); - return; - } + isAudio = true; SendMessageManager.sendMessageForAudio(targetId, new OnSendMessageListener() { @Override public void onSuccess(String token, SendConsumeBean bean) { super.onSuccess(token, bean); MsgInputPanelForAudio.this.token = token; - ToastUtil.showDebug(token); - isAudio = true; + if (!isDownload) { + AudioRecordManager.getInstance().stopRecord(); + SendMessageManager.cancel(token); + return; + } onDown(v, mLastTouchY); } @@ -142,6 +141,7 @@ public class MsgInputPanelForAudio extends AbsInputPanel { super.onError(status, msg); if (status == OnSendMessageListener.STATUS_NOT_PRICE) { AudioRecordManager.getInstance().stopRecord(); + isAudio = false; mUpDirection = false; new TipsDialog(mContext) .setTitle(WordUtil.getNewString(R.string.not_money)) @@ -197,6 +197,9 @@ public class MsgInputPanelForAudio extends AbsInputPanel { SendMessageManager.cancel(token); return false; } + if(!SendMessageManager.checkToken(token)){ + return false; + } SendMessageManager.onCallSuccess(token, new OnSendMessageListener() { @Override public void onError(int status, String msg) { diff --git a/OneToOne/src/main/res/drawable/bg_call_view_tips.xml b/OneToOne/src/main/res/drawable/bg_call_view_tips.xml new file mode 100644 index 000000000..7ce84a698 --- /dev/null +++ b/OneToOne/src/main/res/drawable/bg_call_view_tips.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/OneToOne/src/main/res/layout/activity_call_audio.xml b/OneToOne/src/main/res/layout/activity_call_audio.xml index f0f3e4b7c..ac65c0845 100644 --- a/OneToOne/src/main/res/layout/activity_call_audio.xml +++ b/OneToOne/src/main/res/layout/activity_call_audio.xml @@ -125,4 +125,19 @@ app:layout_constraintBottom_toTopOf="@+id/call_stop" app:layout_constraintEnd_toStartOf="@+id/call_msg" app:layout_constraintStart_toEndOf="@+id/call_stop" /> + +