直播结束,悬浮窗

This commit is contained in:
18401019693
2022-10-17 10:13:17 +08:00
parent 780f9a3328
commit 47b6f9b45f
58 changed files with 400 additions and 107 deletions

View File

@@ -31,7 +31,6 @@ import com.yunbao.common.event.FollowEvent;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.interfaces.KeyBoardHeightChangeListener;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.KeyBoardHeightUtil2;
import com.yunbao.common.utils.L;
import com.yunbao.common.utils.ProcessImageUtil;
@@ -41,7 +40,7 @@ import com.yunbao.common.utils.WordUtil;
import com.yunbao.common.utils.formatBigNum;
import com.yunbao.live.R;
import com.yunbao.live.bean.GuardUserBean;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.bean.LiveBuyGuardMsgBean;
import com.yunbao.live.bean.LiveChatBean;
import com.yunbao.live.bean.LiveDanMuBean;
@@ -68,7 +67,6 @@ import com.yunbao.live.dialog.LiveRedPackSendDialogFragment;
import com.yunbao.live.dialog.LiveShareDialogFragment;
import com.yunbao.live.dialog.LiveUserDialogFragment;
import com.yunbao.live.dialog.LiveUserMoreDialogFragment;
import com.yunbao.live.event.LiveAudienceEvent;
import com.yunbao.live.http.LiveHttpConsts;
import com.yunbao.live.http.LiveHttpUtil;
import com.yunbao.live.presenter.LiveLinkMicAnchorPresenter;

View File

@@ -39,7 +39,7 @@ import com.yunbao.common.utils.LogUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.live.R;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.bean.LiveGuardInfo;
import com.yunbao.live.bean.LiveKsyConfigBean;
import com.yunbao.live.dialog.LiveBeautyDialogFragment;
@@ -56,7 +56,6 @@ import com.yunbao.live.music.LiveMusicDialogFragment;
import com.yunbao.live.presenter.LiveLinkMicAnchorPresenter;
import com.yunbao.live.presenter.LiveLinkMicPkPresenter;
import com.yunbao.live.presenter.LiveLinkMicPresenter;
import com.yunbao.live.socket.SocketChatUtil;
import com.yunbao.live.socket.SocketClient;
import com.yunbao.live.socket.SocketSendBean;
import com.yunbao.live.views.AbsLivePushViewHolder;

View File

@@ -21,12 +21,14 @@ import androidx.viewpager.widget.ViewPager;
import com.adjust.sdk.Adjust;
import com.adjust.sdk.AdjustEvent;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.GsonUtils;
import com.facebook.appevents.AppEventsLogger;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.lzf.easyfloat.EasyFloat;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.Constants;
import com.yunbao.common.HtmlConfig;
@@ -56,12 +58,13 @@ import com.yunbao.common.utils.DialogUitl;
import com.yunbao.common.utils.GiftCacheUtil;
import com.yunbao.common.utils.L;
import com.yunbao.common.utils.ProcessResultUtil;
import com.yunbao.common.utils.RouteUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.views.weight.VerticalViewPager;
import com.yunbao.live.R;
import com.yunbao.live.adapter.VerticalPagerAdapter;
import com.yunbao.live.bean.ImUserBean;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.bean.LiveChatBean;
import com.yunbao.live.dialog.LiveFansFragment;
import com.yunbao.live.dialog.LiveGiftDialogFragment;
@@ -94,7 +97,7 @@ import java.util.Map;
* Created by cxf on 2018/10/10.
* 看直播
*/
@Route(path = RouteUtil.PATH_LIVE_AUDIENCE)
public class LiveAudienceActivity extends LiveActivity {
private static final String TAG = "LiveAudienceActivity";
@@ -170,6 +173,10 @@ public class LiveAudienceActivity extends LiveActivity {
verticalViewPager = findViewById(R.id.view_pager);
verticalViewPager.setEnableScroll(IMLoginManager.get(mContext).isSlide());
//判断是否有直播悬浮窗,有直接关闭
if (EasyFloat.isShow("LiveFloatView")){
EasyFloat.dismiss("LiveFloatView",true);
}
}
@@ -303,31 +310,28 @@ public class LiveAudienceActivity extends LiveActivity {
if (liveBean1 == null) {
return;
}
runOnUiThread(new Runnable() {
@Override
public void run() {
mLiveSDK = liveSdk;
mLiveType = liveType;
mLiveTypeVal = liveTypeVal;
mLiveBean = liveBean1;
mLiveUid = liveBean1.getUid();
mStream = liveBean1.getStream();
mAncherName = liveBean1.getUserNiceName();
mAncherIcon = liveBean1.getAvatar();
Log.e(TAG, "mLiveUid--------------------------->" + mLiveUid);
//加载当前页面数据
View rootView = manager.getRootView();
if (rootView.getParent() != null && rootView.getParent() instanceof ViewGroup) {
((ViewGroup) (rootView.getParent())).removeView(rootView);
manager.onRemove(false);
}
mViewGroup.addView(manager.getRootView());
manager.onAdd(liveBean1, liveType, liveTypeVal, liveSdk);
//加载完页面后再后台静默下载礼物svga
downloadAllGift();
over();
runOnUiThread(() -> {
mLiveSDK = liveSdk;
mLiveType = liveType;
mLiveTypeVal = liveTypeVal;
mLiveBean = liveBean1;
mLiveUid = liveBean1.getUid();
mStream = liveBean1.getStream();
mAncherName = liveBean1.getUserNiceName();
mAncherIcon = liveBean1.getAvatar();
Log.e(TAG, "mLiveUid--------------------------->" + mLiveUid);
//加载当前页面数据
View rootView = manager.getRootView();
if (rootView.getParent() != null && rootView.getParent() instanceof ViewGroup) {
((ViewGroup) (rootView.getParent())).removeView(rootView);
manager.onRemove(false);
}
mViewGroup.addView(manager.getRootView());
manager.onAdd(liveBean1, liveType, liveTypeVal, liveSdk);
//加载完页面后再后台静默下载礼物svga
downloadAllGift();
over();
});

View File

@@ -55,14 +55,13 @@ import com.yunbao.common.utils.ScreenDimenUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.live.R;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.bean.LiveGuardInfo;
import com.yunbao.live.bean.LiveKsyConfigBean;
import com.yunbao.live.bean.LiveReceiveGiftBean;
import com.yunbao.live.bean.WishlistModel;
import com.yunbao.live.dialog.LiveBeautyDialogFragment;
import com.yunbao.live.dialog.LiveLinkMicListDialogFragment;
import com.yunbao.live.dialog.LiveMicUserDialogFragment;
import com.yunbao.live.dialog.LiveNewFunctionDialogFragment;
import com.yunbao.live.dialog.LiveNewWishListDialogFragment;
import com.yunbao.live.dialog.LiveWishListDialogFragment4Audience;

View File

@@ -25,7 +25,7 @@ import com.yunbao.common.utils.RouteUtil;
import com.yunbao.live.R;
import com.yunbao.live.adapter.SystemChatMessageAdapter;
import com.yunbao.live.bean.ImUserBean;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.event.LiveRoomChangeEvent;
import com.yunbao.live.event.RecommendLiveRoomEvent;
import com.yunbao.live.http.LiveHttpUtil;

View File

@@ -34,7 +34,7 @@ import com.yunbao.common.utils.L;
import com.yunbao.common.utils.RouteUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.dialog.LiveUserDialogFragment;
import com.yunbao.live.http.LiveHttpUtil;
import com.yunbao.live.presenter.LiveRoomCheckLivePresenter;

View File

@@ -13,7 +13,7 @@ import android.widget.ImageView;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.live.R;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import java.util.List;

View File

@@ -1,455 +0,0 @@
package com.yunbao.live.bean;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import com.alibaba.fastjson.annotation.JSONField;
import com.yunbao.common.bean.WeekListBean;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.live.R;
import java.util.ArrayList;
import java.util.List;
/**
* Created by cxf on 2017/8/9.
*/
public class LiveBean implements Parcelable {
private String uid;
private String avatar;
private String avatarThumb;
private String userNiceName;
private String title;
private String city;
private String stream;
private String pull;
private String thumb;
private String nums;
private int sex;
private String distance;
private int levelAnchor;
private int type;
private String typeVal;
private String goodNum;//主播的靓号
private int gameAction;//正在进行的游戏的标识
private String game;
private String islive;//是否直播中
private String isTop;//是否显示排行榜
private String pk_avatar_thumb;//pk对方的头像
private int landscape;//1h屏2s屏
private String hot_num;//热调
private String content_pic_size_one;//小
private String content_pic_size_two;//中
private String content_pic_size_three;//大
private String is_week;
private String img;
private String url;
private String drpk_status;
private int is_rong;
//是否關注 1關注 2未關注
private String isattention = "";
private String recommendCardtype = "";
private String recommendCardIconSizeTwo = "";
private String recommendCardIconSizeThree = "";
public String getRecommendCardIconSizeTwo() {
return recommendCardIconSizeTwo;
}
public LiveBean setRecommendCardIconSizeTwo(String recommendCardIconSizeTwo) {
this.recommendCardIconSizeTwo = recommendCardIconSizeTwo;
return this;
}
public String getRecommendCardIcon() {
if (TextUtils.isEmpty(recommendCardIconSizeThree)) {
if (!TextUtils.isEmpty(recommendCardIconSizeTwo)) {
return recommendCardIconSizeTwo;
} else {
return null;
}
} else {
return recommendCardIconSizeThree;
}
}
public String getRecommendCardIconSizeThree() {
return recommendCardIconSizeThree;
}
public LiveBean setRecommendCardIconSizeThree(String recommendCardIconSizeThree) {
this.recommendCardIconSizeThree = recommendCardIconSizeThree;
return this;
}
public String getRecommendcardtype() {
return recommendCardtype;
}
public void setRecommendcardtype(String recommendcardtype) {
this.recommendCardtype = recommendcardtype;
}
public String getIsattention() {
return isattention;
}
public LiveBean setIsattention(String isattention) {
this.isattention = isattention;
return this;
}
private List<WeekListBean> mWeekList = new ArrayList<>();
public List<WeekListBean> getmWeekList() {
return mWeekList;
}
public void setmWeekList(List<WeekListBean> mWeekList) {
this.mWeekList = mWeekList;
}
public int getIs_rong() {
return is_rong;
}
public void setIs_rong(int is_rong) {
this.is_rong = is_rong;
}
public String getDrpk_status() {
return drpk_status;
}
public void setDrpk_status(String drpk_status) {
this.drpk_status = drpk_status;
}
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getIs_week() {
return is_week;
}
public void setIs_week(String is_week) {
this.is_week = is_week;
}
public String getContent_pic_size_one() {
return content_pic_size_one;
}
public void setContent_pic_size_one(String content_pic_size_one) {
this.content_pic_size_one = content_pic_size_one;
}
public String getContent_pic_size_two() {
return content_pic_size_two;
}
public void setContent_pic_size_two(String content_pic_size_two) {
this.content_pic_size_two = content_pic_size_two;
}
public String getContent_pic_size_three() {
return content_pic_size_three;
}
public void setContent_pic_size_three(String content_pic_size_three) {
this.content_pic_size_three = content_pic_size_three;
}
public String getHot_num() {
return hot_num;
}
public void setHot_num(String hot_num) {
this.hot_num = hot_num;
}
public int getLandscape() {
return landscape;
}
public void setLandscape(int landscape) {
this.landscape = landscape;
}
public String getPk_avatar_thumb() {
return pk_avatar_thumb;
}
public void setPk_avatar_thumb(String pk_avatar_thumb) {
this.pk_avatar_thumb = pk_avatar_thumb;
}
public String getIsTop() {
return isTop;
}
public void setIsTop(String isTop) {
this.isTop = isTop;
}
public String getDistance() {
return distance;
}
public void setDistance(String distance) {
this.distance = distance;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
@JSONField(name = "avatar_thumb")
public String getAvatarThumb() {
return avatarThumb;
}
@JSONField(name = "avatar_thumb")
public void setAvatarThumb(String avatarThumb) {
this.avatarThumb = avatarThumb;
}
@JSONField(name = "user_nicename")
public String getUserNiceName() {
return userNiceName;
}
@JSONField(name = "user_nicename")
public void setUserNiceName(String userNiceName) {
this.userNiceName = userNiceName;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStream() {
return stream;
}
public void setStream(String stream) {
this.stream = stream;
}
public String getPull() {
return pull;
}
public void setPull(String pull) {
this.pull = pull;
}
public String getThumb() {
return thumb;
}
public void setThumb(String thumb) {
this.thumb = thumb;
}
public String getNums() {
return nums;
}
public void setNums(String nums) {
this.nums = nums;
}
@JSONField(name = "level_anchor")
public int getLevelAnchor() {
return levelAnchor;
}
@JSONField(name = "level_anchor")
public void setLevelAnchor(int levelAnchor) {
this.levelAnchor = levelAnchor;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@JSONField(name = "type_val")
public String getTypeVal() {
return typeVal;
}
@JSONField(name = "type_val")
public void setTypeVal(String typeVal) {
this.typeVal = typeVal;
}
@JSONField(name = "goodnum")
public String getGoodNum() {
return goodNum;
}
@JSONField(name = "goodnum")
public void setGoodNum(String goodNum) {
this.goodNum = goodNum;
}
@JSONField(name = "game_action")
public int getGameAction() {
return gameAction;
}
@JSONField(name = "game_action")
public void setGameAction(int gameAction) {
this.gameAction = gameAction;
}
public String getGame() {
return game;
}
public void setGame(String game) {
this.game = game;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
@JSONField(name = "islive")
public String getIslive() {
return islive;
}
public void setIslive(String islive) {
this.islive = islive;
}
/**
* 显示靓号
*/
public String getLiangNameTip() {
if (!TextUtils.isEmpty(this.goodNum) && !"0".equals(this.goodNum)) {
return WordUtil.getString(R.string.live_liang) + ":" + this.goodNum;
}
return "ID:" + this.uid;
}
public LiveBean() {
}
private LiveBean(Parcel in) {
this.uid = in.readString();
this.avatar = in.readString();
this.avatarThumb = in.readString();
this.userNiceName = in.readString();
this.sex = in.readInt();
this.title = in.readString();
this.city = in.readString();
this.stream = in.readString();
this.pull = in.readString();
this.thumb = in.readString();
this.nums = in.readString();
this.distance = in.readString();
this.levelAnchor = in.readInt();
this.type = in.readInt();
this.typeVal = in.readString();
this.goodNum = in.readString();
this.gameAction = in.readInt();
this.game = in.readString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.uid);
dest.writeString(this.avatar);
dest.writeString(this.avatarThumb);
dest.writeString(this.userNiceName);
dest.writeInt(this.sex);
dest.writeString(this.title);
dest.writeString(this.city);
dest.writeString(this.stream);
dest.writeString(this.pull);
dest.writeString(this.thumb);
dest.writeString(this.nums);
dest.writeString(this.distance);
dest.writeInt(this.levelAnchor);
dest.writeInt(this.type);
dest.writeString(this.typeVal);
dest.writeString(this.goodNum);
dest.writeInt(this.gameAction);
dest.writeString(this.game);
}
public static final Creator<LiveBean> CREATOR = new Creator<LiveBean>() {
@Override
public LiveBean[] newArray(int size) {
return new LiveBean[size];
}
@Override
public LiveBean createFromParcel(Parcel in) {
return new LiveBean(in);
}
};
@Override
public String toString() {
return "uid: " + uid + " , userNiceName: " + userNiceName + " ,playUrl: " + pull;
}
}

View File

@@ -44,7 +44,7 @@ import com.yunbao.live.activity.LiveActivity;
import com.yunbao.live.activity.LiveAudienceActivity;
import com.yunbao.live.activity.LiveRyAnchorActivity;
import com.yunbao.live.activity.ZhuangBanActivity;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.event.LiveRoomChangeEvent;
import com.yunbao.live.http.LiveHttpUtil;
import com.yunbao.live.presenter.LiveRoomCheckLivePresenter;

View File

@@ -16,7 +16,7 @@ import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.views.weight.ViewClicksAntiShake;
import com.yunbao.live.adapter.FunGamesAdapter;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.event.LiveAudienceEvent;
import org.greenrobot.eventbus.Subscribe;

View File

@@ -43,7 +43,7 @@ import com.yunbao.live.R;
import com.yunbao.live.activity.LiveActivity;
import com.yunbao.live.activity.LiveReportActivity;
import com.yunbao.live.bean.ImpressBean;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.custom.MyTextView;
import com.yunbao.live.event.LiveRoomChangeEvent;
import com.yunbao.live.http.LiveHttpConsts;

View File

@@ -30,7 +30,7 @@ import com.yunbao.common.utils.DeviceUtils;
import com.yunbao.common.utils.RouteUtil;
import com.yunbao.live.R;
import com.yunbao.live.adapter.SidebarAdapter;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.event.LiveAudienceEvent;
import com.yunbao.live.event.LiveRoomChangeEvent;
import com.yunbao.live.http.LiveHttpUtil;

View File

@@ -5,7 +5,7 @@ import com.yunbao.common.bean.AiAutomaticSpeechModel;
import com.yunbao.common.bean.AnchorRecommendItemModel;
import com.yunbao.common.bean.BaseModel;
import com.yunbao.common.bean.MsgModel;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.bean.OpenParametersModel;
public class LiveAudienceEvent extends BaseModel {

View File

@@ -1,6 +1,6 @@
package com.yunbao.live.event;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
/**
* Created by cxf on 2019/6/27.

View File

@@ -50,7 +50,7 @@ import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.live.R;
import com.yunbao.live.activity.LiveAudienceActivity;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.bean.LiveGiftPrizePoolWinBean;
import com.yunbao.live.bean.LiveLuckGiftWinBean;
import com.yunbao.live.bean.LiveReceiveGiftBean;

View File

@@ -16,7 +16,7 @@ import com.yunbao.common.utils.MD5Util;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.live.R;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.event.LiveAudienceEvent;
import com.yunbao.live.http.LiveHttpConsts;
import com.yunbao.live.http.LiveHttpUtil;

View File

@@ -1,7 +1,7 @@
package com.yunbao.live.utils;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import java.util.HashMap;
import java.util.List;

View File

@@ -152,14 +152,15 @@ public class LiveTextRender {
String mContext = content;
for (String name : userNames) {
name = "@" + name;
while (mContext.contains(name) && !TextUtils.isEmpty(mContext)) {
if (mContext.contains(name) && !TextUtils.isEmpty(mContext)) {
int index = mContext.indexOf(name);
int end = index + name.length();
startIndex = index + startIndex;
int endIndex = startIndex + name.length();
spannableStringBuilder.setSpan(new ForegroundColorSpan(Color.parseColor("#fffe9b")),
startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
mContext = mContext.substring(end + 1, mContext.length());
startIndex = startIndex + end + 1;
mContext = mContext.substring(end, mContext.length());
startIndex = endIndex;
}
}
@@ -364,7 +365,7 @@ public class LiveTextRender {
if (levelBean == null) {
if (textView != null) {
SpannableStringBuilder builder = createPrefix(null, bean);
int color = 0xffffdd00;
int color = 0xffffdd00;
switch (bean.getType()) {
case LiveChatBean.GIFT:
@@ -376,7 +377,7 @@ public class LiveTextRender {
}
textView.setText(builder);
}
}else {
} else {
ImgLoader.displayDrawable(context, levelBean.getThumb(), new ImgLoader.DrawableCallback() {
@Override
public void onLoadSuccess(Drawable drawable) {

View File

@@ -27,7 +27,6 @@ import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.RouteUtil;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.views.AbsViewHolder;
import com.yunbao.common.views.weight.ClipPathCircleImage;
import com.yunbao.live.R;
@@ -35,7 +34,7 @@ import com.yunbao.live.activity.LiveAnchorActivity;
import com.yunbao.live.activity.LiveAudienceActivity;
import com.yunbao.live.activity.LiveRyAnchorActivity;
import com.yunbao.live.adapter.SearchRecommendBodyAdapter;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.event.JumpUserHomeEvent;
import com.yunbao.live.http.LiveHttpConsts;
import com.yunbao.live.http.LiveHttpUtil;

View File

@@ -0,0 +1,142 @@
package com.yunbao.live.views;
import android.app.Activity;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import com.lzf.easyfloat.EasyFloat;
import com.lzf.easyfloat.enums.ShowPattern;
import com.lzf.easyfloat.interfaces.FloatCallbacks;
import com.lzf.easyfloat.interfaces.OnInvokeView;
import com.tencent.live2.V2TXLivePlayer;
import com.tencent.live2.impl.V2TXLivePlayerImpl;
import com.tencent.rtmp.ui.TXCloudVideoView;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.common.utils.RouteUtil;
import com.yunbao.common.views.weight.ViewClicksAntiShake;
import com.yunbao.live.R;
import kotlin.Unit;
import kotlin.jvm.functions.Function0;
import kotlin.jvm.functions.Function1;
/**
* 直播间悬浮窗管理
*/
public class LiveFloatView implements Function1<FloatCallbacks.Builder, Unit> {
private static LiveFloatView instance;
private LiveOnInvokeView liveOnInvokeView = null;
private Activity mContext;
private String url;
private LiveBean mLiveBean;
private int mLiveType;
private int mLiveSDK;
private int mLiveTypeVal;
private FloatCallbacks.Builder builder;
private String TAG = "LiveFloatView";
private V2TXLivePlayer mPlayer;
public static LiveFloatView getInstance() {
if (instance == null) {
instance = new LiveFloatView();
}
return instance;
}
public void builderFloat(Activity mContext, String url) {
liveOnInvokeView = new LiveOnInvokeView();
this.mContext = mContext;
this.url = url;
EasyFloat.with(mContext)
.setTag(TAG)
.setLayout(R.layout.view_flaot_live, liveOnInvokeView)
.setShowPattern(ShowPattern.CURRENT_ACTIVITY)
.setGravity(Gravity.END | Gravity.CENTER_VERTICAL, 0, 200)
.registerCallback(this)
.show();
}
public void builderSystemFloat(Activity mContext, String url) {
liveOnInvokeView = new LiveOnInvokeView();
this.mContext = mContext;
this.url = url;
EasyFloat.with(mContext)
.setTag(TAG)
.setLayout(R.layout.view_flaot_live, liveOnInvokeView)
.setShowPattern(ShowPattern.ALL_TIME)
.setGravity(Gravity.END | Gravity.CENTER_VERTICAL, 0, 200)
.registerCallback(this)
.show();
}
public LiveFloatView cacheLiveData(LiveBean mLiveBean, int mLiveType, int mLiveSDK, int mLiveTypeVal) {
this.mLiveBean = mLiveBean;
this.mLiveType = mLiveType;
this.mLiveSDK = mLiveSDK;
this.mLiveTypeVal = mLiveTypeVal;
return instance;
}
@Override
public Unit invoke(FloatCallbacks.Builder builder) {
this.builder = builder;
builder.createResult((aBoolean, s, view) -> {
Log.e("LiveFloatView", "aBoolean:" + aBoolean + "---------------------s:" + s);
if (callback != null) {
callback.invoke(aBoolean);
}
builder.dismiss(new Function0<Unit>() {
@Override
public Unit invoke() {
if (mPlayer != null && mPlayer.isPlaying() == 1) {
mPlayer.stopPlay();
}
return null;
}
});
return null;
});
return null;
}
/**
* 悬浮窗布局管理
*/
private class LiveOnInvokeView implements OnInvokeView {
@Override
public void invoke(View view) {
TXCloudVideoView videoView = view.findViewById(R.id.video_view);
mPlayer = new V2TXLivePlayerImpl(mContext);
mPlayer.setRenderView(videoView);
mPlayer.startPlay(url);
ViewClicksAntiShake.clicksAntiShake(view.findViewById(R.id.btn_close), new ViewClicksAntiShake.ViewClicksCallBack() {
@Override
public void onViewClicks() {
mPlayer.stopPlay();
EasyFloat.dismiss("LiveFloatView", true);
}
});
ViewClicksAntiShake.clicksAntiShake(videoView, () -> {
mPlayer.stopPlay();
RouteUtil.forwardLiveAudienceActivity(mLiveBean, mLiveType, mLiveSDK, mLiveTypeVal);
});
}
}
private LiveFloatViewCallback callback;
public LiveFloatView setCallback(LiveFloatViewCallback callback) {
this.callback = callback;
return this;
}
public interface LiveFloatViewCallback {
void invoke(Boolean aBoolean);
}
}

View File

@@ -2,7 +2,7 @@ package com.yunbao.live.views;
import android.view.ViewGroup;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
public interface LivePlayListener extends LiveActivityLifeCallback {

View File

@@ -42,6 +42,7 @@ import com.adjust.sdk.AdjustEvent;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.GsonUtils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
@@ -65,6 +66,7 @@ import com.yunbao.common.bean.BannerBean;
import com.yunbao.common.bean.HourRank;
import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.bean.LevelBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.common.bean.LiveGiftBean;
import com.yunbao.common.bean.MsgModel;
import com.yunbao.common.bean.StarChallengeStatusModel;
@@ -102,7 +104,6 @@ import com.yunbao.live.adapter.LiveChatAdapter;
import com.yunbao.live.adapter.LiveRoomFastMessageRecyclerViewAdapter;
import com.yunbao.live.adapter.LiveUserAdapter;
import com.yunbao.live.bean.DrPkbean;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.live.bean.LiveBuyGuardMsgBean;
import com.yunbao.live.bean.LiveChatBean;
import com.yunbao.live.bean.LiveDanMuBean;

View File

@@ -30,17 +30,20 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.GsonUtils;
import com.facebook.appevents.AppEventsLogger;
import com.lzf.easyfloat.permission.PermissionUtils;
import com.tencent.imsdk.v2.V2TIMCallback;
import com.tencent.imsdk.v2.V2TIMManager;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.CommonAppContext;
import com.yunbao.common.Constants;
import com.yunbao.common.bean.AiAutomaticSpeechModel;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.common.bean.MsgModel;
import com.yunbao.common.bean.StarChallengeStatusModel;
import com.yunbao.common.bean.UserBean;
import com.yunbao.common.custom.MyViewPager;
import com.yunbao.common.event.FollowEvent;
import com.yunbao.common.event.LiveFloatEvent;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.http.CommonHttpConsts;
import com.yunbao.common.http.CommonHttpUtil;
@@ -58,7 +61,6 @@ import com.yunbao.common.utils.formatBigNum;
import com.yunbao.live.R;
import com.yunbao.live.activity.LiveActivity;
import com.yunbao.live.activity.LiveAudienceActivity;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.live.bean.LiveBuyGuardMsgBean;
import com.yunbao.live.bean.LiveChatBean;
import com.yunbao.live.bean.LiveDanMuBean;
@@ -216,8 +218,6 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
@Override
public void run() {
Log.e("ImgLoader1", data.getAvatar());
mLiveBean = data;
mLiveSDK = liveSdk;
mLiveType = liveType;
@@ -228,12 +228,10 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
.setParametersModel(openParametersModel
.setmLiveType(mLiveType)
.setmLiveTypeVal(mLiveTypeVal)));
mLivePlayViewHolder = new LivePlayRyViewHolder(mContext, playContainer, mIntent.getIntExtra("landscape", 0));
mLivePlayViewHolder.addToParent();
mLivePlayViewHolder.subscribeActivityLifeCycle();
mLiveRoomViewHolder = new LiveRoomViewHolder(false, 1, mContext, mContainer, mSecondPage.findViewById(R.id.gift_gif), mSecondPage.findViewById(R.id.gift_svga), mContainerWrap, mContext.getWindowManager());
mLiveRoomViewHolder.subscribeActivityLifeCycle();
mLiveAudienceViewHolder = new LiveAudienceViewHolder(mContext, mContainer);
mLiveAudienceViewHolder.addToParent();
@@ -368,8 +366,46 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
mLiveRyLinkMicPkPresenter.release();
}
if (isQuit) {
if (mContext instanceof LiveAudienceActivity) {
mContext.finish();
if (PermissionUtils.checkPermission(mContext)) {
} else {
if (mContext instanceof LiveAudienceActivity) {
DialogUitl.showSimpleDialog(mContext, null, "您未打开悬浮窗权限,是否打开", false, new DialogUitl.SimpleCallback3() {
@Override
public void onConfirmClick(Dialog dialog) {
LiveFloatView.getInstance()
.setCallback(new LiveFloatView.LiveFloatViewCallback() {
@Override
public void invoke(Boolean aBoolean) {
if (aBoolean) {
mContext.finish();
} else {
EventBus.getDefault()
.post(new LiveFloatEvent()
.setmLiveBean(mLiveBean)
.setmLiveSDK(mLiveSDK)
.setmLiveType(mLiveType)
.setmLiveTypeVal(mLiveTypeVal));
mContext.finish();
}
}
})
.cacheLiveData(mLiveBean, mLiveType, mLiveSDK, mLiveTypeVal)
.builderSystemFloat(mContext, mLiveBean.getPull());
}
@Override
public void onCancel() {
EventBus.getDefault()
.post(new LiveFloatEvent()
.setmLiveBean(mLiveBean)
.setmLiveSDK(mLiveSDK)
.setmLiveType(mLiveType)
.setmLiveTypeVal(mLiveTypeVal));
mContext.finish();
}
});
}
}
}
}
@@ -458,7 +494,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
Log.e("ry", "发送成功");
liveImDeletUtil.deleteMessages(message.getTargetId(), message.getMessageId());
if (isBackPressed) {
((LiveAudienceActivity)mContext).closeRoom();
((LiveAudienceActivity) mContext).closeRoom();
} else {
EventBus.getDefault().post(new LiveRoomChangeEvent(bean, liveType, liveTypeVal));
}
@@ -524,7 +560,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
if (isBackPressed) {
Micing = 0;
((LiveAudienceActivity)mContext).closeRoom();
((LiveAudienceActivity) mContext).closeRoom();
} else {
EventBus.getDefault().post(new LiveRoomChangeEvent(bean, liveType, liveTypeVal));
}
@@ -1475,8 +1511,9 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
mLiveRoomViewHolder.playLightAnim();
}
}
public void resetLight(){
mLighted=false;
public void resetLight() {
mLighted = false;
}
public void setCoinNotEnough(boolean coinNotEnough) {

View File

@@ -15,7 +15,7 @@ import com.yunbao.common.utils.RouteUtil;
import com.yunbao.common.views.SlideInBannerViewHolder;
import com.yunbao.live.R;
import com.yunbao.live.activity.LiveAudienceActivity;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.http.LiveHttpUtil;
import com.yunbao.live.presenter.LiveRoomCheckLivePresenter;

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="210dp"
android:layout_height="wrap_content">
<androidx.cardview.widget.CardView
android:layout_width="200dp"
android:layout_height="150dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
app:cardCornerRadius="4dp"
app:cardElevation="0dp">
<com.tencent.rtmp.ui.TXCloudVideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.cardview.widget.CardView>
<ImageView
android:id="@+id/btn_close"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentEnd="true"
android:paddingLeft="30dp"
android:paddingBottom="30dp"
android:src="@mipmap/icon_live_close_3" />
</RelativeLayout>

View File

@@ -42,8 +42,7 @@
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:layout_marginBottom="20dp"
/>
android:layout_marginBottom="20dp" />
</RelativeLayout>