From d383a0801373081825aa4cbf1e8f7bdf097bc49d Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Fri, 15 Sep 2023 10:04:02 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E3=80=90=E5=BC=B9?= =?UTF-8?q?=E6=A1=86=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yunbao/common/bean/OpenAdModel.java | 150 ++++++++++++++++ .../AbsDialogFullScreenPopupWindow.java | 39 +++++ .../dialog/OpenAdBottomDialogPopup.java | 70 ++++++++ .../dialog/OpenAdCenterDialogPopup.java | 82 +++++++++ .../com/yunbao/common/http/PDLiveApi.java | 7 + .../common/http/live/LiveNetManager.java | 24 +++ .../yunbao/common/manager/OpenAdManager.java | 164 ++++++++++++++++++ .../com/yunbao/common/utils/ToastUtil.java | 2 +- .../main/res/layout/dialog_open_bottom_ad.xml | 28 +++ .../main/res/layout/dialog_open_center_ad.xml | 32 ++++ .../main/res/mipmap-mdpi/ic_open_ad_close.png | Bin 0 -> 807 bytes .../live/activity/LiveAudienceActivity.java | 3 + .../live/views/LivePlayRyViewHolder.java | 28 +-- .../live/views/PortraitLiveManager.java | 4 +- .../yunbao/main/activity/MainActivity.java | 8 +- 15 files changed, 622 insertions(+), 19 deletions(-) create mode 100644 common/src/main/java/com/yunbao/common/bean/OpenAdModel.java create mode 100644 common/src/main/java/com/yunbao/common/dialog/AbsDialogFullScreenPopupWindow.java create mode 100644 common/src/main/java/com/yunbao/common/dialog/OpenAdBottomDialogPopup.java create mode 100644 common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java create mode 100644 common/src/main/java/com/yunbao/common/manager/OpenAdManager.java create mode 100644 common/src/main/res/layout/dialog_open_bottom_ad.xml create mode 100644 common/src/main/res/layout/dialog_open_center_ad.xml create mode 100644 common/src/main/res/mipmap-mdpi/ic_open_ad_close.png diff --git a/common/src/main/java/com/yunbao/common/bean/OpenAdModel.java b/common/src/main/java/com/yunbao/common/bean/OpenAdModel.java new file mode 100644 index 000000000..d284d5c8b --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/OpenAdModel.java @@ -0,0 +1,150 @@ +package com.yunbao.common.bean; + +import com.google.gson.annotations.SerializedName; +import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.utils.StringUtil; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +public class OpenAdModel extends BaseModel { + public static final int TYPE_HOME = 1;//主页 + public static final int TYPE_LIVE = 2;//直播间 + public static final int TYPE_LIVE_DELAY = 3;//直播间延迟 + public static final int MODEL_SQUARE = 1;//正方形 + public static final int MODEL_RECTANGLE = 2;//长方形 + public static final int MODEL_BOTTOM = 3;//底部 + @SerializedName("id") + private int id; + @SerializedName("popup_location") + private int type = TYPE_HOME; + @SerializedName("activity_url") + private String url; + @SerializedName("image_url") + private String imageUrl; + @SerializedName("display_time") + private int showTime; //持续展示时间 + @SerializedName("delay_show_time") + private int delayShowTime;//延迟展示时间 + @SerializedName("popup_model") + private int model = MODEL_SQUARE; + @SerializedName("start_show_time") + private String startTime;//活动开始时间 + @SerializedName("end_show_time") + private String endTime;//活动结束时间 + + + public OpenAdModel() { + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getUrl() { + if (url.startsWith("http://") || url.startsWith("https://")) { + return CommonAppConfig.HOST + "/" + url; + } + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public int getShowTime() { + return showTime * 1000; + } + + public void setShowTime(int showTime) { + this.showTime = showTime; + } + + public int getDelayShowTime() { + return delayShowTime * 1000; + } + + public void setDelayShowTime(int delayShowTime) { + this.delayShowTime = delayShowTime; + } + + public String getImageUrl() { + return imageUrl; + } + + public void setImageUrl(String imageUrl) { + this.imageUrl = imageUrl; + } + + public int getModel() { + return model; + } + + public String getStartTime() { + return startTime; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + + public void setModel(int model) { + this.model = model; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public boolean isInTime() { + if (StringUtil.isEmpty(startTime, endTime)) { + return true; + } + Date startTime = null; + Date endTime = null; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); + + try { + startTime = sdf.parse(this.startTime); + endTime = sdf.parse(this.endTime); + } catch (ParseException e) { + e.printStackTrace(); + } + + long time = System.currentTimeMillis(); + return startTime.getTime() <= time && time <= endTime.getTime(); + } + + @Override + public String toString() { + return "OpenAdModel{" + + "id=" + id + + ", type=" + type + + ", url='" + url + '\'' + + ", imageUrl='" + imageUrl + '\'' + + ", showTime=" + showTime + + ", delayShowTime=" + delayShowTime + + ", model=" + model + + ", startTime='" + startTime + '\'' + + ", endTime='" + endTime + '\'' + + '}'; + } +} diff --git a/common/src/main/java/com/yunbao/common/dialog/AbsDialogFullScreenPopupWindow.java b/common/src/main/java/com/yunbao/common/dialog/AbsDialogFullScreenPopupWindow.java new file mode 100644 index 000000000..76a7e48cb --- /dev/null +++ b/common/src/main/java/com/yunbao/common/dialog/AbsDialogFullScreenPopupWindow.java @@ -0,0 +1,39 @@ +package com.yunbao.common.dialog; + +import android.content.Context; + +import androidx.annotation.NonNull; + +import com.lxj.xpopup.XPopup; +import com.lxj.xpopup.impl.FullScreenPopupView; + +/** + * 居中弹窗 + */ +public abstract class AbsDialogFullScreenPopupWindow extends FullScreenPopupView { + public final Context mContext; + + public AbsDialogFullScreenPopupWindow(@NonNull Context context) { + super(context); + this.mContext = context; + } + + /** + * 参考配置 + */ + public abstract void buildDialog(XPopup.Builder builder); + public abstract int bindLayoutId(); + + @Override + protected int getImplLayoutId() { + return bindLayoutId(); + } + + public void showDialog() { + XPopup.Builder builder = new XPopup.Builder(mContext); + builder.isDestroyOnDismiss(true); + builder.enableDrag(false); + buildDialog(builder); + builder.asCustom(this).show(); + } +} diff --git a/common/src/main/java/com/yunbao/common/dialog/OpenAdBottomDialogPopup.java b/common/src/main/java/com/yunbao/common/dialog/OpenAdBottomDialogPopup.java new file mode 100644 index 000000000..b4f0dc002 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/dialog/OpenAdBottomDialogPopup.java @@ -0,0 +1,70 @@ +package com.yunbao.common.dialog; + +import android.content.Context; +import android.widget.ImageView; + +import androidx.annotation.NonNull; + +import com.lxj.xpopup.XPopup; +import com.yunbao.common.R; +import com.yunbao.common.activity.WebViewActivity; +import com.yunbao.common.bean.OpenAdModel; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.common.interfaces.OnItemClickListener; + +public class OpenAdBottomDialogPopup extends AbsDialogPopupWindow { + private ImageView mImageView; + private ImageView mClose; + private OpenAdModel model; + private OnItemClickListener mListener; + + public OpenAdBottomDialogPopup(@NonNull Context context, OpenAdModel model) { + super(context); + this.model = model; + } + + + @Override + public void buildDialog(XPopup.Builder builder) { + + } + + @Override + public int bindLayoutId() { + return R.layout.dialog_open_bottom_ad; + } + + @Override + public void dismiss() { + super.dismiss(); + if (mListener != null) { + mListener.onItemClick(model, 0); + mListener = null; + } + } + + public OpenAdBottomDialogPopup setListener(OnItemClickListener mListener) { + this.mListener = mListener; + return this; + } + + @Override + protected void onCreate() { + super.onCreate(); + mImageView = findViewById(R.id.img); + mClose = findViewById(R.id.close); + mImageView.setOnClickListener(v -> { + WebViewActivity.forward(mContext, model.getUrl(), model.getType() != OpenAdModel.TYPE_HOME); + if (mListener != null) { + mListener.onItemClick(model, 1); + mListener = null; + } + dismiss(); + }); + mClose.setOnClickListener(v -> dismiss()); + ImgLoader.display(mContext, model.getImageUrl(), mImageView); + if (model.getShowTime() > 0) { + mClose.postDelayed(this::dismiss, model.getShowTime()); + } + } +} diff --git a/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java b/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java new file mode 100644 index 000000000..5e92f5f10 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/dialog/OpenAdCenterDialogPopup.java @@ -0,0 +1,82 @@ +package com.yunbao.common.dialog; + +import android.content.Context; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; + +import com.lxj.xpopup.XPopup; +import com.yunbao.common.R; +import com.yunbao.common.activity.WebViewActivity; +import com.yunbao.common.bean.OpenAdModel; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.common.interfaces.OnItemClickListener; +import com.yunbao.common.utils.DpUtil; +import com.yunbao.common.utils.ScreenDimenUtil; + +public class OpenAdCenterDialogPopup extends AbsDialogFullScreenPopupWindow { + private ImageView mImageView; + private ImageView mClose; + private OpenAdModel model; + private OnItemClickListener mListener; + + public OpenAdCenterDialogPopup(@NonNull Context context, OpenAdModel model) { + super(context); + this.model = model; + } + + public OpenAdCenterDialogPopup setListener(OnItemClickListener mListener) { + this.mListener = mListener; + return this; + } + + @Override + public void buildDialog(XPopup.Builder builder) { + } + + @Override + public int bindLayoutId() { + return R.layout.dialog_open_center_ad; + } + + @Override + public void dismiss() { + super.dismiss(); + if (mListener != null) { + mListener.onItemClick(model, 0); + mListener = null; + } + } + + + @Override + protected void onCreate() { + super.onCreate(); + mImageView = findViewById(R.id.img); + mClose = findViewById(R.id.close); + findViewById(R.id.layout).setOnClickListener(v -> dismiss()); + mImageView.setOnClickListener(v -> { + WebViewActivity.forward(mContext, model.getUrl(), model.getType() != OpenAdModel.TYPE_HOME); + if (mListener != null) { + mListener.onItemClick(model, 1); + mListener = null; + } + dismiss(); + }); + mClose.setOnClickListener(v -> dismiss()); + ImgLoader.display(mContext, model.getImageUrl(), mImageView); + int width = ScreenDimenUtil.getInstance().getScreenWdith() - DpUtil.dp2px(40); + int height = (int) (width * 1.4); + if (model.getModel() == OpenAdModel.MODEL_SQUARE) { + height = width; + } + ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) mImageView.getLayoutParams(); + params.width = width; + params.height = height; + mImageView.setLayoutParams(params); + if (model.getShowTime() > 0) { + mClose.postDelayed(this::dismiss, model.getShowTime()); + } + } +} diff --git a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java index c7adca890..204a13d7b 100644 --- a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java +++ b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java @@ -40,6 +40,7 @@ import com.yunbao.common.bean.MsgSwitchDetailModel; import com.yunbao.common.bean.NewPeopleInfo; import com.yunbao.common.bean.NobleRankHideUserListModel; import com.yunbao.common.bean.NobleTrumpetModel; +import com.yunbao.common.bean.OpenAdModel; import com.yunbao.common.bean.PkRankBean; import com.yunbao.common.bean.PrankGiftBean; import com.yunbao.common.bean.PrankHttpTurntableBean; @@ -969,5 +970,11 @@ public interface PDLiveApi { @GET("/api/public/?service=gift.getGiftNamingInfo") Observable> getGiftNamingInfo(@Query("gift_id") String giftId); + /** + * 活动弹窗 + */ + @GET("/api/public/?service=Home.activityPopup") + Observable>> activityPopup(); + } diff --git a/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java b/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java index d63b8dcff..4943589da 100644 --- a/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java +++ b/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java @@ -39,6 +39,7 @@ import com.yunbao.common.bean.LiveUserMailBoxModel; import com.yunbao.common.bean.MedalAchievementModel; import com.yunbao.common.bean.NobleRankHideUserListModel; import com.yunbao.common.bean.NobleTrumpetModel; +import com.yunbao.common.bean.OpenAdModel; import com.yunbao.common.bean.PkRankBean; import com.yunbao.common.bean.PrankGiftBean; import com.yunbao.common.bean.PrankHttpTurntableBean; @@ -2194,6 +2195,29 @@ public class LiveNetManager { }).isDisposed(); } + public void activityPopup(HttpCallback> callback) { + API.get().pdLiveApi(mContext) + .activityPopup() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Consumer>>() { + @Override + public void accept(ResponseModel> listResponseModel) throws Exception { + if (callback != null) { + callback.onSuccess(listResponseModel.getData().getInfo()); + } + } + }, new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + throwable.printStackTrace(); + if (callback != null) { + callback.onError(mContext.getString(R.string.net_error)); + } + } + }).isDisposed(); + } + /** * 直播间取消网络请求 */ diff --git a/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java b/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java new file mode 100644 index 000000000..29d416018 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java @@ -0,0 +1,164 @@ +package com.yunbao.common.manager; + +import android.os.Handler; +import android.os.Looper; +import android.util.Log; + +import com.yunbao.common.CommonAppContext; +import com.yunbao.common.bean.OpenAdModel; +import com.yunbao.common.dialog.OpenAdBottomDialogPopup; +import com.yunbao.common.dialog.OpenAdCenterDialogPopup; +import com.yunbao.common.http.base.HttpCallback; +import com.yunbao.common.http.live.LiveNetManager; +import com.yunbao.common.utils.ToastUtil; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class OpenAdManager { + public static final int TYPE_HOME = 1; + public static final int TYPE_LIVE = 2; + private static final String TAG = "-----弹窗-----"; + private Map showMap; + private List list = new ArrayList<>(); + private Handler handler = new Handler(Looper.getMainLooper()); + private Map runnableMap = new HashMap<>(); + private int showType; + + private OpenAdManager() { + showMap = new HashMap<>(); + init(false); + } + + public void reset() { + for (Integer integer : runnableMap.keySet()) { + handler.removeCallbacks(Objects.requireNonNull(runnableMap.get(integer))); + } + runnableMap.clear(); + showMap.clear(); + list.clear(); + } + + private static final class MInstanceHolder { + static final OpenAdManager mInstance = new OpenAdManager(); + } + + public static OpenAdManager getInstance() { + return MInstanceHolder.mInstance; + } + + private void init(boolean isShow) { + LiveNetManager.get(CommonAppContext.getTopActivity()) + .activityPopup(new HttpCallback>() { + @Override + public void onSuccess(List data) { + list = data; + if (isShow) { + show(TYPE_HOME); + } + } + + @Override + public void onError(String error) { + System.err.println("弹框列表:" + error); + } + }); + } + + + public synchronized void show(int type) { + if (list.isEmpty()) { + init(true); + return; + } + showType=type; + for (OpenAdModel model : list) { + if (model.getType() == type) { + if (runnableMap.containsKey(model.getId())) { + AdRunnable runnable = runnableMap.get(model.getId()); + if (runnable != null) { + Log.d(TAG, "reset: "+model); + handler.removeCallbacks(runnable); + runnableMap.remove(model.getId()); + } + } + if (!isShow(model)) { + Log.i(TAG, "show: "+model); + handler.postDelayed(new AdRunnable(model), model.getDelayShowTime()); + }else{ + Log.i(TAG, "notshow: "+model); + } + + } + } + Log.i(TAG, "------------------------------"); + + } + + public synchronized void dismiss() { + Log.d(TAG, "准备dismiss:"+runnableMap.size() ); + for (Integer model : runnableMap.keySet()) { + AdRunnable runnable = runnableMap.get(model); + Log.d(TAG, "dismiss:"+runnable); + if (runnable != null) { + runnable.dismiss(); + handler.removeCallbacks(runnable); + } + } + runnableMap.clear(); + } + + private synchronized boolean isShow(OpenAdModel type) { + if (showMap.containsKey(type.getId()) && showMap.get(type.getId()) != null) { + return Boolean.TRUE.equals(showMap.get(type.getId())); + } + return false; + } + + private class AdRunnable implements Runnable { + OpenAdModel model; + + public AdRunnable(OpenAdModel model) { + this.model = model; + runnableMap.put(model.getId(), this); + } + public void dismiss(){ + Log.e(TAG, "dismiss: "+model ); + } + + @Override + public synchronized void run() { + Log.i(TAG, "run: "+model); + if (model == null) { + ToastUtil.showDebug("model为空"); + return; + } + if (!model.isInTime()) { + ToastUtil.showDebug("不在展示时间内:" + model.getStartTime() + "|" + model.getEndTime()); + return; + } + if (isShow(model)) { + ToastUtil.showDebug(model.getId() + "|model展示过了"); + return; + } + if(model.getType()!=showType){ + return; + } + showMap.put(model.getId(), true); + if (model.getModel() == OpenAdModel.MODEL_BOTTOM) { + new OpenAdBottomDialogPopup(CommonAppContext.getTopActivity(), model) + .setListener((bean, position) -> { + }) + .showDialog(); + } else { + new OpenAdCenterDialogPopup(CommonAppContext.getTopActivity(), model) + .setListener((bean, position) -> { + }) + .showDialog(); + } + } + } +} diff --git a/common/src/main/java/com/yunbao/common/utils/ToastUtil.java b/common/src/main/java/com/yunbao/common/utils/ToastUtil.java index 3aa789611..f76b84f92 100644 --- a/common/src/main/java/com/yunbao/common/utils/ToastUtil.java +++ b/common/src/main/java/com/yunbao/common/utils/ToastUtil.java @@ -80,7 +80,7 @@ public class ToastUtil { } public static void showDebug(String s){ if(BuildConfig.DEBUG){ - show(s); + show("开发模式:"+s); } } public static void showDebug(int s){ diff --git a/common/src/main/res/layout/dialog_open_bottom_ad.xml b/common/src/main/res/layout/dialog_open_bottom_ad.xml new file mode 100644 index 000000000..5137df634 --- /dev/null +++ b/common/src/main/res/layout/dialog_open_bottom_ad.xml @@ -0,0 +1,28 @@ + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/layout/dialog_open_center_ad.xml b/common/src/main/res/layout/dialog_open_center_ad.xml new file mode 100644 index 000000000..217d47e2b --- /dev/null +++ b/common/src/main/res/layout/dialog_open_center_ad.xml @@ -0,0 +1,32 @@ + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/mipmap-mdpi/ic_open_ad_close.png b/common/src/main/res/mipmap-mdpi/ic_open_ad_close.png new file mode 100644 index 0000000000000000000000000000000000000000..62d53f0ef7a358feff93bf2823c0885db5ce3afe GIT binary patch literal 807 zcmV+?1K9kDP)Px%;Ymb6R7gv;mP@FPVHAa*MI@I(n7SqdhC*Q=%7DoII8w@GgmTJd#DpT{HgPE> za=%T`aV?=_B7^}EheC*Qr>*sSzvJ_r|2uvI@8lo6-@De{Yp=ccFIqVf(Fd3cj0FY* zz0&6|f!n}&;Hac0WiYCC5fQzC4GFw0@DaEV7}&=|gMf~}58w!}T+-7bUJHVVmbnX-MDz!40$+e(l1%c?Cn5#_*8$gU zu%xDp;3O~!m?G&!BJB>i9y=s`D=~wC79}TD3=k1^oul6`sa_E=5V!|ilQb%q@uPDQ?G0?(gyz%)rNV&x=o4=#gN zz$H0)-+9nwB#pLm!KO2SL%<3Xcy>If(r62Sowiy6sDS4J$dfFQw5`x+!-4+UsBkoH z@%*Up%%279$|5hiEM?-3KQ8Hc%5Dl^B@Rle%Lu%=Zl%RCwA$h*vv46RFRB}Wv->^l z5_3JUFOBPQk{;Cpnv=y+yH@?u?5ZrD;=);(3jPLIEa^ZkBoQ$uZN6^6GD(}WcV#Qn zQ`A OpenAdManager.getInstance().show(OpenAdManager.TYPE_LIVE), 400); } @Override diff --git a/live/src/main/java/com/yunbao/live/views/LivePlayRyViewHolder.java b/live/src/main/java/com/yunbao/live/views/LivePlayRyViewHolder.java index d450c23af..10c41e025 100644 --- a/live/src/main/java/com/yunbao/live/views/LivePlayRyViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LivePlayRyViewHolder.java @@ -689,13 +689,13 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder { } }); } else if ("inviteMic".equals(str)) { - String content="邀請您進行語音連麥"; - String confirm="接受"; - String cancel="拒絕"; - if(!WordUtil.isNewZh()){ - content="You are invited to join the voice connection"; - confirm="accept"; - cancel="cancel"; + String content = "邀請您進行語音連麥"; + String confirm = "接受"; + String cancel = "拒絕"; + if (!WordUtil.isNewZh()) { + content = "You are invited to join the voice connection"; + confirm = "accept"; + cancel = "cancel"; } DialogUitl.Builder builder = new DialogUitl.Builder(mContext) .setContent(content) @@ -708,12 +708,12 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder { public void onConfirmClick(Dialog dialog, String content) { String[] permissions; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - permissions=new String[]{ + permissions = new String[]{ Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.RECORD_AUDIO }; - }else{ - permissions=new String[]{ + } else { + permissions = new String[]{ Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO @@ -780,9 +780,9 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder { onPrepared(); rcrtcRoom = null; MicStatusManager.getInstance().clear(); - if(WordUtil.isNewZh()) { + if (WordUtil.isNewZh()) { ToastUtil.show("已成功退出語音連麥"); - }else{ + } else { ToastUtil.show("You have successfully exited the voice connection"); } resumePlay(); @@ -867,10 +867,10 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder { } private void showToast() { - if(WordUtil.isNewZh()) { + if (WordUtil.isNewZh()) { DialogUitl.showToast(mContext, "設置成功\n" + "正在為你轉換中", 3000); - }else{ + } else { DialogUitl.showToast(mContext, "successful\n" + "It's being converted for you", 3000); } diff --git a/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java b/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java index 0df33d47d..2d6b485f2 100644 --- a/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java +++ b/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java @@ -59,6 +59,7 @@ import com.yunbao.common.http.HttpCallback; import com.yunbao.common.http.HttpClient; import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.manager.OpenAdManager; import com.yunbao.common.utils.AppManager; import com.yunbao.common.utils.Bus; import com.yunbao.common.utils.DialogUitl; @@ -262,6 +263,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe public void run() { loading.setVisibility(View.GONE); enterRoomLeaveHandler.post(enterRoomLeaveRunnable); + OpenAdManager.getInstance().show(OpenAdManager.TYPE_LIVE); } }; final Runnable loadTimeoutRunnableGone = new Runnable() { @@ -293,7 +295,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe mLiveRyLinkMicPkPresenter.release(); mLiveRyLinkMicPkPresenter = null; } - + OpenAdManager.getInstance().dismiss(); mLiveBean = data; mLiveSDK = liveSdk; mLiveType = liveType; diff --git a/main/src/main/java/com/yunbao/main/activity/MainActivity.java b/main/src/main/java/com/yunbao/main/activity/MainActivity.java index b53cdb8c4..7e31a51b7 100644 --- a/main/src/main/java/com/yunbao/main/activity/MainActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/MainActivity.java @@ -88,6 +88,7 @@ import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.manager.APKManager; import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.manager.NoviceInstructorManager; +import com.yunbao.common.manager.OpenAdManager; import com.yunbao.common.manager.imrongcloud.RongcloudIMManager; import com.yunbao.common.utils.DialogUitl; import com.yunbao.common.utils.DpUtil; @@ -210,13 +211,14 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene @Override protected void onPause() { super.onPause(); - + OpenAdManager.getInstance().dismiss(); } @Override protected void main() { ActivityCompat.postponeEnterTransition(this); ConversationIMListManager.get(this); + OpenAdManager.getInstance(); //在请求一下这个接口给我后台版本号 CommonHttpUtil.getConfig(mContext, new CommonCallback() { @Override @@ -526,7 +528,6 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene //获取指导员账号 ConversationIMListManager.get(this).getUserInstructor(this); checkVersion(); - } @Override @@ -875,7 +876,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene NoviceInstructorManager.get(mContext).getNoviceInstructor(); NoviceInstructorManager.get(mContext).checktHomeZdyPop(); initAnchorRecommendBanner(); - + OpenAdManager.getInstance().show(OpenAdManager.TYPE_HOME); } /** @@ -1074,6 +1075,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene if (EasyFloat.isShow("LiveFloatView")) { EasyFloat.dismiss("LiveFloatView", true); } + OpenAdManager.getInstance().reset(); super.onBackPressed(); } } From 54258c3f13a5e2701af4621c01235ef09824b9af Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Fri, 15 Sep 2023 14:54:45 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E3=80=90=E5=BC=B9?= =?UTF-8?q?=E6=A1=86=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yunbao/common/bean/OpenAdModel.java | 25 ++++++++++++++++--- .../yunbao/common/manager/OpenAdManager.java | 12 +++++---- .../live/activity/LiveAudienceActivity.java | 4 ++- .../com/yunbao/live/bean/LiveGuardInfo.java | 5 ++++ .../live/views/PortraitLiveManager.java | 2 +- .../yunbao/main/activity/MainActivity.java | 2 +- 6 files changed, 39 insertions(+), 11 deletions(-) diff --git a/common/src/main/java/com/yunbao/common/bean/OpenAdModel.java b/common/src/main/java/com/yunbao/common/bean/OpenAdModel.java index d284d5c8b..0189513be 100644 --- a/common/src/main/java/com/yunbao/common/bean/OpenAdModel.java +++ b/common/src/main/java/com/yunbao/common/bean/OpenAdModel.java @@ -2,6 +2,7 @@ package com.yunbao.common.bean; import com.google.gson.annotations.SerializedName; import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.utils.StringUtil; import java.text.ParseException; @@ -34,6 +35,8 @@ public class OpenAdModel extends BaseModel { private String startTime;//活动开始时间 @SerializedName("end_show_time") private String endTime;//活动结束时间 + @SerializedName("popup_permission") + private int permission; public OpenAdModel() { @@ -48,10 +51,10 @@ public class OpenAdModel extends BaseModel { } public String getUrl() { - if (url.startsWith("http://") || url.startsWith("https://")) { - return CommonAppConfig.HOST + "/" + url; + if (!url.startsWith("http://") || !url.startsWith("https://")) { + url = CommonAppConfig.HOST + url; } - return url; + return url + "?t=" + System.currentTimeMillis() / 1000; } public void setUrl(String url) { @@ -114,6 +117,14 @@ public class OpenAdModel extends BaseModel { this.id = id; } + public int getPermission() { + return permission; + } + + public void setPermission(int permission) { + this.permission = permission; + } + public boolean isInTime() { if (StringUtil.isEmpty(startTime, endTime)) { return true; @@ -133,6 +144,13 @@ public class OpenAdModel extends BaseModel { return startTime.getTime() <= time && time <= endTime.getTime(); } + public boolean userIsPermission(boolean isGuard) { + if (permission == 4 && !isGuard) {//守护不可见 + return false; + } + return true; + } + @Override public String toString() { return "OpenAdModel{" + @@ -145,6 +163,7 @@ public class OpenAdModel extends BaseModel { ", model=" + model + ", startTime='" + startTime + '\'' + ", endTime='" + endTime + '\'' + + ", permission='" + permission + '\'' + '}'; } } diff --git a/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java b/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java index 29d416018..060c72714 100644 --- a/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java +++ b/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java @@ -34,9 +34,7 @@ public class OpenAdManager { } public void reset() { - for (Integer integer : runnableMap.keySet()) { - handler.removeCallbacks(Objects.requireNonNull(runnableMap.get(integer))); - } + dismiss(); runnableMap.clear(); showMap.clear(); list.clear(); @@ -57,7 +55,7 @@ public class OpenAdManager { public void onSuccess(List data) { list = data; if (isShow) { - show(TYPE_HOME); + show(TYPE_HOME,false); } } @@ -69,7 +67,7 @@ public class OpenAdManager { } - public synchronized void show(int type) { + public synchronized void show(int type,boolean isGuard) { if (list.isEmpty()) { init(true); return; @@ -77,6 +75,9 @@ public class OpenAdManager { showType=type; for (OpenAdModel model : list) { if (model.getType() == type) { + if(type==OpenAdModel.TYPE_LIVE && !model.userIsPermission(isGuard)){ + continue; + } if (runnableMap.containsKey(model.getId())) { AdRunnable runnable = runnableMap.get(model.getId()); if (runnable != null) { @@ -85,6 +86,7 @@ public class OpenAdManager { runnableMap.remove(model.getId()); } } + if (!isShow(model)) { Log.i(TAG, "show: "+model); handler.postDelayed(new AdRunnable(model), model.getDelayShowTime()); diff --git a/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java index 6584ac982..432ff0e9b 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java @@ -96,6 +96,7 @@ import com.yunbao.live.R; import com.yunbao.live.adapter.VerticalPagerAdapter; import com.yunbao.live.bean.ImUserBean; import com.yunbao.live.bean.LiveChatBean; +import com.yunbao.live.bean.LiveGuardInfo; import com.yunbao.live.dialog.LiveFansFragment; import com.yunbao.live.dialog.LiveGameDialogFragment; import com.yunbao.live.dialog.LiveGiftPopup; @@ -778,7 +779,8 @@ public class LiveAudienceActivity extends LiveActivity { } } GiftCacheUtil.getInstance().restart(); - new Handler(Looper.getMainLooper()).postDelayed(() -> OpenAdManager.getInstance().show(OpenAdManager.TYPE_LIVE), 400); + new Handler(Looper.getMainLooper()).postDelayed(() -> OpenAdManager.getInstance().show(OpenAdManager.TYPE_LIVE, + LiveGuardInfo.isGuard(mLiveGuardInfo)), 400); } @Override diff --git a/live/src/main/java/com/yunbao/live/bean/LiveGuardInfo.java b/live/src/main/java/com/yunbao/live/bean/LiveGuardInfo.java index 0e07e4734..1015a6de7 100644 --- a/live/src/main/java/com/yunbao/live/bean/LiveGuardInfo.java +++ b/live/src/main/java/com/yunbao/live/bean/LiveGuardInfo.java @@ -3,6 +3,8 @@ package com.yunbao.live.bean; import android.os.Parcel; import android.os.Parcelable; +import com.yunbao.common.Constants; + /** * Created by cxf on 2018/11/14. */ @@ -72,5 +74,8 @@ public class LiveGuardInfo implements Parcelable { } }; + public static boolean isGuard(LiveGuardInfo info){ + return info != null && info.getMyGuardType() != Constants.GUARD_TYPE_NONE; + } } diff --git a/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java b/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java index 2d6b485f2..919693d9f 100644 --- a/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java +++ b/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java @@ -263,7 +263,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe public void run() { loading.setVisibility(View.GONE); enterRoomLeaveHandler.post(enterRoomLeaveRunnable); - OpenAdManager.getInstance().show(OpenAdManager.TYPE_LIVE); + OpenAdManager.getInstance().show(OpenAdManager.TYPE_LIVE,LiveGuardInfo.isGuard(mLiveGuardInfo)); } }; final Runnable loadTimeoutRunnableGone = new Runnable() { diff --git a/main/src/main/java/com/yunbao/main/activity/MainActivity.java b/main/src/main/java/com/yunbao/main/activity/MainActivity.java index 7e31a51b7..1693facbf 100644 --- a/main/src/main/java/com/yunbao/main/activity/MainActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/MainActivity.java @@ -876,7 +876,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene NoviceInstructorManager.get(mContext).getNoviceInstructor(); NoviceInstructorManager.get(mContext).checktHomeZdyPop(); initAnchorRecommendBanner(); - OpenAdManager.getInstance().show(OpenAdManager.TYPE_HOME); + OpenAdManager.getInstance().show(OpenAdManager.TYPE_HOME, false); } /** From ea397af1230d5cdfcf3a3bb4f826c1ef08f34a2d Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Fri, 15 Sep 2023 16:55:36 +0800 Subject: [PATCH 3/6] =?UTF-8?q?update=20=E5=BC=B9=E7=AA=97=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/yunbao/common/manager/OpenAdManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java b/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java index 060c72714..d5a24c3a7 100644 --- a/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java +++ b/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java @@ -23,7 +23,7 @@ public class OpenAdManager { public static final int TYPE_LIVE = 2; private static final String TAG = "-----弹窗-----"; private Map showMap; - private List list = new ArrayList<>(); + private List list = null; private Handler handler = new Handler(Looper.getMainLooper()); private Map runnableMap = new HashMap<>(); private int showType; @@ -68,7 +68,7 @@ public class OpenAdManager { public synchronized void show(int type,boolean isGuard) { - if (list.isEmpty()) { + if (list==null) { init(true); return; } From a876018b0ae4b0215e445d710f00c39897cb21f2 Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Fri, 15 Sep 2023 18:12:40 +0800 Subject: [PATCH 4/6] =?UTF-8?q?update=20=E5=BC=B9=E7=AA=97=E5=B8=83?= =?UTF-8?q?=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/src/main/res/layout/dialog_open_bottom_ad.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/res/layout/dialog_open_bottom_ad.xml b/common/src/main/res/layout/dialog_open_bottom_ad.xml index 5137df634..192f2d295 100644 --- a/common/src/main/res/layout/dialog_open_bottom_ad.xml +++ b/common/src/main/res/layout/dialog_open_bottom_ad.xml @@ -12,6 +12,7 @@ android:scaleType="fitXY" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" + android:adjustViewBounds="true" app:layout_constraintStart_toStartOf="parent" app:srcCompat="@mipmap/background_gift_wall" /> From 9ec241f2a37bbd63c3dc41378f37b3b3563e63ef Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Fri, 15 Sep 2023 18:28:46 +0800 Subject: [PATCH 5/6] =?UTF-8?q?update=20=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yunbao/live/activity/LiveAudienceActivity.java | 6 ++++-- .../java/com/yunbao/live/views/PortraitLiveManager.java | 6 +++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java index 432ff0e9b..02e55bd3a 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java @@ -779,8 +779,10 @@ public class LiveAudienceActivity extends LiveActivity { } } GiftCacheUtil.getInstance().restart(); - new Handler(Looper.getMainLooper()).postDelayed(() -> OpenAdManager.getInstance().show(OpenAdManager.TYPE_LIVE, - LiveGuardInfo.isGuard(mLiveGuardInfo)), 400); + if (manager.isEnterRoom()) { + new Handler(Looper.getMainLooper()).postDelayed(() -> OpenAdManager.getInstance().show(OpenAdManager.TYPE_LIVE, + LiveGuardInfo.isGuard(mLiveGuardInfo)), 400); + } } @Override diff --git a/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java b/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java index 919693d9f..a122ba9ea 100644 --- a/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java +++ b/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java @@ -263,7 +263,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe public void run() { loading.setVisibility(View.GONE); enterRoomLeaveHandler.post(enterRoomLeaveRunnable); - OpenAdManager.getInstance().show(OpenAdManager.TYPE_LIVE,LiveGuardInfo.isGuard(mLiveGuardInfo)); + OpenAdManager.getInstance().show(OpenAdManager.TYPE_LIVE, LiveGuardInfo.isGuard(mLiveGuardInfo)); } }; final Runnable loadTimeoutRunnableGone = new Runnable() { @@ -2100,4 +2100,8 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe mLiveRoomViewHolder.setGiftWall(giftWallLightenNumber, giftWallLightenTotal); } } + + public boolean isEnterRoom() { + return isEnterRoom; + } } From 4e4b5f90bbc0630f9f9998677494e9eab05bc88b Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Thu, 21 Sep 2023 11:14:01 +0800 Subject: [PATCH 6/6] =?UTF-8?q?fix=20=E9=87=8D=E5=A4=8D=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yunbao/common/manager/OpenAdManager.java | 39 ++++++++++++------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java b/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java index d5a24c3a7..4003b6a17 100644 --- a/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java +++ b/common/src/main/java/com/yunbao/common/manager/OpenAdManager.java @@ -49,13 +49,21 @@ public class OpenAdManager { } private void init(boolean isShow) { + if (list != null && list.isEmpty()) { + return; + } LiveNetManager.get(CommonAppContext.getTopActivity()) .activityPopup(new HttpCallback>() { @Override public void onSuccess(List data) { + if (data == null || data.isEmpty()) { + Log.i(TAG, "onSuccess: 没有数据"); + list = new ArrayList<>(); + return; + } list = data; if (isShow) { - show(TYPE_HOME,false); + show(TYPE_HOME, false); } } @@ -67,31 +75,31 @@ public class OpenAdManager { } - public synchronized void show(int type,boolean isGuard) { - if (list==null) { + public synchronized void show(int type, boolean isGuard) { + if (list == null) { init(true); return; } - showType=type; + showType = type; for (OpenAdModel model : list) { if (model.getType() == type) { - if(type==OpenAdModel.TYPE_LIVE && !model.userIsPermission(isGuard)){ + if (type == OpenAdModel.TYPE_LIVE && !model.userIsPermission(isGuard)) { continue; } if (runnableMap.containsKey(model.getId())) { AdRunnable runnable = runnableMap.get(model.getId()); if (runnable != null) { - Log.d(TAG, "reset: "+model); + Log.d(TAG, "reset: " + model); handler.removeCallbacks(runnable); runnableMap.remove(model.getId()); } } if (!isShow(model)) { - Log.i(TAG, "show: "+model); + Log.i(TAG, "show: " + model); handler.postDelayed(new AdRunnable(model), model.getDelayShowTime()); - }else{ - Log.i(TAG, "notshow: "+model); + } else { + Log.i(TAG, "notshow: " + model); } } @@ -101,10 +109,10 @@ public class OpenAdManager { } public synchronized void dismiss() { - Log.d(TAG, "准备dismiss:"+runnableMap.size() ); + Log.d(TAG, "准备dismiss:" + runnableMap.size()); for (Integer model : runnableMap.keySet()) { AdRunnable runnable = runnableMap.get(model); - Log.d(TAG, "dismiss:"+runnable); + Log.d(TAG, "dismiss:" + runnable); if (runnable != null) { runnable.dismiss(); handler.removeCallbacks(runnable); @@ -127,13 +135,14 @@ public class OpenAdManager { this.model = model; runnableMap.put(model.getId(), this); } - public void dismiss(){ - Log.e(TAG, "dismiss: "+model ); + + public void dismiss() { + Log.e(TAG, "dismiss: " + model); } @Override public synchronized void run() { - Log.i(TAG, "run: "+model); + Log.i(TAG, "run: " + model); if (model == null) { ToastUtil.showDebug("model为空"); return; @@ -146,7 +155,7 @@ public class OpenAdManager { ToastUtil.showDebug(model.getId() + "|model展示过了"); return; } - if(model.getType()!=showType){ + if (model.getType() != showType) { return; } showMap.put(model.getId(), true);